Árvore de páginas

Los informes no personalizables pueden crearse utilizándose la TMsPrinter para los informes gráficos y el par de funciones SetPrint/SetDefault para los no gráficos.

 

Independientemente del método utilizado, los informes de este tipo deben utilizar el Archivo de preguntas del diccionario de datos de la Línea Microsiga Protheus (SX1).

 

A continuación, un ejemplo de una estructura de informe no gráfico:

 


 // NoCustomizableReport.prw
#INCLUDE "TOTVS.CH"
#DEFINE CHRCOMP If(aReturn[4]==1,15,18)
Function NoCustomizableReport()
//----------------------------------------------------------------------------
// Define variables
//----------------------------------------------------------------------------
Local cTitulo := "Titulo del informe" // Titulo del informe
Local cDesc1 := "Descripción 1" // Descripción 1
Local cDesc2 := "Descripción 1" // Descripción 2
Local cDesc3 := "Descripción 1" // Descripción 3
Local cString := "" // Alias utilizado en el filtrado
Local lDic := .F. // Habilita/Deshabilita Diccionario
Local lComp := .T. // Habilita/Deshabilita el formato comprimido/expandido
Local lFiltro := .T. // Habilita/Deshabilita el filtro
Local cFile := "" // Nombre del archivo utilizado en el Spool
Local cProgName := "" // nombre del programa
Private Tamaño := "G" // P/M/G
Private Límite := 220 // 80/132/220
Private aOrdem := {} // Orden del informe
Private cPerg := "" // Pregunta del informe
Private aReturn := { "A rayas", 1, "Administración", 1, 2, 1, "", 1 }
//[1] Reservado para formulario
//[2] Reservado para N§ de copias
//[3] Destinatario
//[4] Formato => 1-Comprimido 2-Normal
//[5] Medios => 1-Disco 2-Impresora
//[6] Puerto o archivo 1-LPT1... 4-COM1...
//[7] Expresión del filtro
//[8] Orden que se seleccionará
//[9]..[10]..[n] Campos que se procesarán (si los hay)
Private lEnd := .F. // Control de anulación del informe
Private m_pag := 1 // Contador de páginas
Private nLastKey := 0 // Controla la anulación de la SetPrint y SetDefault
//----------------------------------------------------------------------------
// Verifica las preguntas seleccionadas
//----------------------------------------------------------------------------
//Pregunta(cPerg,.F.)//----------------------------------------------------------------------------
// Envía al SetPrinter
//----------------------------------------------------------------------------
cFile:=SetPrint( cString,cFile, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrdem,;
lComp, Tamaño,, lFiltro)
If nLastKey==27
DbSelectArea(cString)
DbSetOrder(1)
Set Filter to
Return
EndIf
SetDefault(aReturn,cString)
If nLastKey==27
DbSelectArea(cString)
DbSetOrder(1)
Set Filter to
Return
EndIf
RptStatus({|lEnd| ImpDet(@lEnd, cFile, cString, cProgName, cTitulo)}, cTitulo)
Return .T.
Static Function ImpDet(lEnd, cFile, cString, cProgName, cTitulo)
Local li := 100 // Contador de líneas
Local lImp := .F. // Indica si algo se imprimió
Local cbCont := 0 // Número de registros procesados
Local cbText := "" // Mensaje del pie de página
/ /
// 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
@01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
Local cCabec1 := ""
Local cCabec2 : ""
DbSelectArea(cString)
SetRegua(LastRec())
DbSetOrder(1)
DbSeek(XFilial())
While !EOF() .And. XFilial(cString) == MV_PAR01
lImp := .T.
If lEnd
@ Prow()+1,001 PSay "ANULADO POR EL OPERADOR"
Exit
EndIf
If ( li > 58 )
li := cabec(cTitulo, cCabec1, cCabec2, cProgName, Tamaño, CHRCOMP)
li++
EndIf
DbSelectArea(cString)
DbSkip()
cbCont++
IncRegua()
EndDo
If lImp
Roda(cbCont, cbText, Tamaño)
EndIf
Set Device To Screen
Set Printer To
If ( aReturn[5] = 1 )
DbCommitAll()
OurSpool(cFile)
EndIf
Ms_Flush()
Return .T.

  • Sem rótulos