Árvore de páginas

En la sección de inicialización de los informes personalizables, función CustomizableReport() , debe verificarse si el informe tiene el tipo personalizable disponible y realizar las llamadas apropiadas, de acuerdo con el caso.

 

En la sección de definición del informe, función ReportDef(), deben crearse los componentes de impresión, las secciones y las celdas, los totalizadores y otros componentes que el usuario podrá personalizar en el informe.

 

Los datos suministrados en esta sección se utilizarán para para el montaje de la interfaz estándar del informe, línea del ejemplo.
En la sección de impresión, función ReportPrint(), debe controlarse el flujo del informe, ejecutar las query´s, filtros y el orden definido por los parámetros del informe.

 

Los parámetros del informe deben crearse utilizando el Archivo de preguntas del diccionario de datos de la Línea Microsiga Protheus (SX1). La no utilización del diccionario puede crear problemas en las programaciones en agenda del informe, así como también, en otras características del producto.

 


 // CustomizableReport.prw
#INCLUDE "TOTVS.CH"
Function CustomizableReport()
Local oReport := Nil
If FindFunction("TRepInUse") .And. TRepInUse()
// Interfaz de impresión
oReport := ReportDef()
oReport:PrintDialog()
Else
R3()
EndIf
Return
Static Function ReportDef()
Local oReport
//---------------------------------------
// Creación del componente de impresión
//---------------------------------------
// TReport():New
// ExpC1 : Nombre del informe
// ExpC2 : Título
// ExpC3 : Pregunta
// ExpB4 : Bloque de código que se ejecutará en la confirmación de la impresión
// ExpC5 : Descripción
//---------------------------------------
oReport := TReport():New( */Nombre del informe/* , */Título del informe/, */*Pregunta/, {|oReport| ReportPrint(oReport)}, */*Descripción del informe/* )
oReport:SetTotalInLine(.F.)
Pregunta(oReport:uParam, .F.)
//---------------------------------------
// Creación de la sección utilizada por el informe
/ /
// TRSection():New
// ExpO1 : Objeto TReport que pertenece a la sección
// ExpC2 : Descripción de la sección
// ExpA3 : Array con las tablas utilizadas por la sección. La primera tabla se considerará como principal para la sección.
// ExpA4 : Array con las órdenes del informe
// ExpL5 : Carga campos del SX3 como celdas
// Preconfigurado : False
// ExpL6 : Carga órdenes del Sindex
// Preconfigurado : False
//---------------------------------------
//---------------------------------------
// Creación de las celdas de la sección del informe
/ /
// TRCell():New
// ExpO1 : Objeto TSection que pertenece a la sección
// ExpC2 : Nombre de la celda del informe. Se consultará el SX3
// ExpC3 : Nombre de la tabla de referencia de la celda
// ExpC4 : Título de la fórmula
// Preconfigurado : X3Titulo()
// ExpC5 : Picture
// Preconfigurado : X3_PICTURE
// ExpC6 : Tamaño
// Preconfigurado : X3_TAMANHO
// ExpL7 : Informe si el tamaño está en pixel
// Preconfigurado : False
// ExpB8 : Bloque de código para impresión.
// Preconfigurado : ExpC2
//---------------------------------------
oSection := TRSection():New({}/*oReport/, */*Nombre de la sección/, */{Tablas de la sección}/, /{Array con las órdenes del informe}/, */Campos del SX3/, */*Campos del SIX/{*})
oSection:SetTotalInLine(.F.)
TRCell():New({}/*oSection/, */*X3_CAMPO/, */*Tabla/, */*Título/, */*Picture/, */*Tamaño/, */*lPixel/, */{|| code-block de impresión }/)
TRFunction():New(oSection:Cell({}/*X3_CAMPO/), */*cID/, "SUM", */*oBreak/, */*cTitle/, */*cPicture/, */*uFormula/, */*lEndSection/, .F./lEndReport/, */*lEndPage/{*})
oSection2 := TRSection():New(oSection, */Nombre de la sección/, */{Tablas de la sección}/, /{Array con las órdenes del informe}/, */Campos del SX3/, */*Campos del SIX/{*})
oSection2:SetTotalInLine(.F.)
TRCell():New({}/*oSection2/, */*X3_CAMPO/, */*Tabla/, */*Título/, */*Picture/, */*Tamaño/, */*lPixel/, */{|| code-block de impresión }/)
TRFunction():New(oSection2:Cell({}/*X3_CAMPO/) ,/* cID /, "SUM", */oBreak/, */*cTitle/, */*cPicture/, */*uFormula/, */*lEndSection/, .F./lEndReport/, */*lEndPage/{*})
Return oReport
Static Function ReportPrint(oReport)
Local cAliasQry := ""
Local lQuery := .F.
#IFNDEF TOP
Local cCondicao := ""
ENDIF
//---------------------------------------
// Transforma parámetros Range en expresión SQL
//---------------------------------------
MakeSQLExpr(oReport:uParam)
//---------------------------------------
// Filtrado del informe
//---------------------------------------
#IFDEF TOP
//---------------------------------------
// Query del informe de la sección 1
//---------------------------------------
lQuery := .T.
oReport:Section(1):BeginQuery()
BeginSQL Alias cAliasQry
SELECT *
FROM %Table:% XXX,%Table:% YYY
WHERE XXX_FILIAL = %XFilial:XXX% AND
XXX.%NotDel% AND
YYY_FILIAL = %XFilial:XXX% AND
YYY.%NotDel%
ORDER BY DAK_COD,DAK_SEQCAR,DAI_SEQUEN,DAI_PEDIDO
EndSQL
//---------------------------------------
// Método EndQuery ( Classe TRSection )
// Prepara el informe para ejecutar el Embedded SQL.
// ExpA1 : Array con los parámetros del tipo Range
//---------------------------------------
oReport:Section(1):EndQuery({}/*Array con los parámetros del tipo Range/{*})
#ELSE
DbSelectArea(cAliasQry)
DbSetOrder(1)
cCondicao := "XXX_FILIAL == '" + XFilial("XXX") + "' "
oReport:Section(1):SetFilter(cCondicao,IndexKey())
oReport:Section(1):Section(1):SetRelation(/{|| cExpSeek }/,{}/*cAlias/,/Order/,/lSeek/{*})
oReport:Section(1):Section(1):SetParentFilter(/{|| lQuery}/)
ENDIF
//---------------------------------------
// Método TrPosition()
// Marca en un registro de otra tabla. La marcación se
// realizará antes de la impresión de cada línea del informe.
// ExpO1 : Objeto Report de la sección
// ExpC2 : Alias de la tabla
// ExpX3 : Orden o NickName de búsqueda
// ExpX4 : String o Bloque de código para búsqueda. El string será macroeje-
// cutado.
//---------------------------------------
TRPosition():New(oReport:Section(1), */cAlias/, */*nOrder/, */{|| cSeek }/)
//---------------------------------------
// Inicio de la impresión del flujo del informe
//---------------------------------------
oReport:SetMeter(cAliasQry->(LastRec()))
If Mod1
oReport:Section(1):Print()
Else
DbSelectArea(cAliasQry)
While !oReport:Cancel() .And. !(cAliasQry)->(Eof())
oReport:Section(1):Section(1):Init()
oReport:Section(1):Section(1):PrintLine()
oReport:Section(1):Section(1):Finish()
DbSelectArea(cAliasDAI)
DbSkip()
oReport:IncMeter()
EndDo
oReport:Section(1):Finish()
oReport:Section(1):SetPageBreak(.T.)
EndIf
Return

 

Para más detalles y ejemplos de cómo construir una rutina en MVC, consulte la documentación existente en el TDN (busque por "TReport").

  • Sem rótulos

1 comentário