|
Están compuestas por un conjunto de funciones creadas por DataPro y que tienen labores específicas según la naturaleza de cada reporte, se encuentran definidas en el mismo programa fuente a través de la cláusula "FUNCTION NAME()" - Onchange()
- Printmemo()
- Group01()
- Endgrp01()
Onchance() /* // En Cada Registro se puede Aplicar Fórmulas // Es llamado por Skip() */ FUNCTION ONCHANGE() nLineas:=nLineas+1 // Es Posible Aplicar Fórmulas /* // Si Desea Imprimir líneas Adicionales que no estén vacías */ // PrintMemo(CAMPOMEMO,1,.F.,1) // Imprimir Campo Memo RETURN .T. Es ejecutada por el evento ONCHANGE() cada ves que avanza un registro del cursor de datos, tiene como finalidad permitir la manipulación de datos, tales como crear fórmulas, variables y otros valores que pueden ser utilizados por el reporte. "nLineas:=nLineas+1" un contador de líneas, empleando la variable privada "nLineas" declarada al principio de la línea. "PrintMemo(CAMPOMEMO,1,.F.,1)", está como comentario "//" e inhabilitada, tiene como finalidad indicarle al usuario la sintaxis necesaria para imprimir el contenido de un campo memo en cualquier columna, el parámetro <CAMPOMEMO> debe ser reemplazado por oCursor:CAMPOMEMO. "RETURN .T" finaliza la ejecución de la función. Printmemo() /* // Imprime Campos Memos */ FUNCTION PrintMemo(cMemo,nCol,lData,nIni) LOCAL nFor,aLines IF Empty(cMemo) RETURN "" ENDIF // Inicio del Línea DEFAULT nIni:=1 cMemo :=STRTRAN(cMemo,CHR(10),"") aLines:=_VECTOR(cMemo,CHR(13)) IF lData // Requiera la Primera Línea de Datos Return aLines[1] ENDIF // oReport:BackLine(1) // Retroceder una Línea // oReport:Newline() // Adelanta una Línea FOR nFor := nIni TO LEN(aLines) oReport:StartLine() oReport:Say(nCol,aLines[nFor]) oReport:EndLine() NEXT oReport:Newline() RETURN "" PrintMemo(cMemo,nCol,lData,nDesde). Se encarga de imprimir el contenido de campos memos. <cMemo> es el contenido del campo (memo o texto). <nCol> indica la posición de la columna donde será impreso. <lData> Indica si sólo necesita la información encontrada en la primera línea del memo y no realiza impresión del contenido. <nIni>, el número de línea que inicia la impresión. El uso de esta función permite crear columnas sólo compuestas de campos memos, o también imprimir los campos memos debajo de una línea, logrando ajustarse a múltiples necesidades. LOCAL nFor,aLines Declara variables de ámbito local, <nFor> realiza el flujo de impresión de cada línea, <aLines> contiene en forma de arreglo cada línea del campo memo. IF Empty(cMemo) RETURN "" ENDIF Valida que el campo memo no esté vació, en caso de estar vació, finaliza la función. // Inicio del Línea DEFAULT nIni:=1 Asumen <nIni>:=1 en caso no ser NIL o no recibir valor. cMemo :=STRTRAN(cMemo,CHR(10),"") Extrae el CHR (10) del CRLF que separa cada línea. aLines:=_VECTOR(cMemo,CHR(13)) Genera un arreglo o lista segun CHR (13) o separador de líneas, si el memo tiene 10 líneas el arreglo estará compuesto de 10 elementos. IF lData // Requiera la Primera Línea de Datos Return aLines[1] ENDIF Si el Parámetro <lData> es verdadero devuelve el contenido de la primera línea. oReport:BackLine(1) Retrocede una línea de impresión. oReport:Newline() Adelanta una línea de impresión. FOR nFor := nIni TO LEN(aLines) Ejecuta un proceso cíclico que fluye sobre cada elemento de la lista, desde el inicio hasta el final. oReport:StartLine() Prepara una nueva línea de impresión. oReport:Say(nCol,aLines[nFor]) Imprime el contenido de la línea <aLines[nFor]> del campo memo sobre la columna indicada por <nCol> oReport:EndLine() Culmina el uso de la línea de impresión activada en <oReport:StartLine() y avanza hacia la siguiente línea. NEXT Finalización de las instrucciones cíclicas activadas por <FOR> envía el control de ejecución hacia la sentencia <FOR> oReport:Newline() Al finalizar la impresión de todas las líneas solicita avanzar una nueva línea de separación. RETURN "" Finaliza la función PrintMemo y devuelve un carácter vacío. Group01() Es ejecutada cada vez que se inicia un grupo o sub-lista, suministra la información requerida por el encabezado. Igualmente pueden aplicarse las instrucciones de la función <PrintMemo()> para imprimir sobre la posición de cualquier columna. /* Encabezado Grupo : Código */ FUNCTION GROUP01() LOCAL cExp:="",uValue:="" cExp :="Código: " uValue:=oCursor:CODIGO uValue:=cValtoChar(uValue)+" "+cValToChar(oCursor:DESCRI) RETURN cExp+uValue A continuación detalle de cada instrucción utilizada en la función FUNCTION GROUP01() Declaración de la función. LOCAL cExp:="",uValue:="" Declara e inicia con data las variables <cExp> y <uValue> de ámbito local. cExp :="Código: " Asigna la expresión "Código" a la variable <cExp>, corresponde al parámetro "título" de la definición del grupo. uValue:=oCursor:GTR_CODIGO Obtiene sobre la variable <uValue>, la expresión <oCursor:CODIGO> suministrada por el cursor de datos y definida en el parámetro "Expresión" en la definición del grupo. uValue:=cValtoChar(uValue)+" "+cValToChar(oCursor:DESCRI) Concatena en una sola cadena los valores de <uValue> más la expresión <oCursor:GTR_DESCRI> indicada en el parámetro <Representa> de la definición de la columna. La función cValtoChar() convierte la expresión en tipo carácter. Finalmente <uValue> estará conformada por el código más la descripción que rigen el grupo o la sub-lista. RETURN cExp+uValue Finaliza la función y devuelve en una sola lista concatenada el valor <cExp> + <uValue> que serán impresos en la cabecera del grupo o sub-lista de la siguiente manera: "Código: 0001 Nombre del Grupo"
Endgrp01() Es ejecutada cada vez que se finaliza un grupo o sub-lista, suministra la información requerida por el pie o cierre de grupo. Igualmente puede aplicarse las instrucciones de la función <PrintMemo()> para imprimir cualquier expresión sobre la posición de cualquier columna. /* Finalizar Grupo : Código */ FUNCTION ENDGRP01() LOCAL cExp:="",uValue:="",cLines:="" cExp :="Total Código: " uValue:=oReport:aGroups[1]:cValue uValue:=uValue uValue:=cValtoChar(uValue) cLines:=ltrim(str(oReport:aGroups[1]:nCounter)) cLines:=" ("+cLines+")" RETURN cExp+uValue+cLines A continuación detalle de cada uno de los componentes. Declaración de la función. FUNCTION ENDGRP01() LOCAL cExp:="",uValue:="",cLines:="" Declara e inicia con data las variables <cExp>, <uValue> y <cLines> de ámbito local. cExp :="Total Código: " Genera la expresión concatenada con "Total" más el parámetro título indicado en la definición del grupo. uValue:= oReport:aGroups[1]:cValue Contiene el valor que rige las reglas del grupo o sub-lista, se define en la declaración <GROUP ON oCursor:CAMPO>. La data del motor del reporte indicada en <oReport:aGroups[1]:cValue>, contiene el valor que rige el primer grupo y desde aquí se suministra para la variable <uValue> uValue:=cValtoChar(uValue) Convierte a <uValue> en expresión de tipo Carácter. cLines:=ltrim(str(oReport:aGroups[1]:nCounter)) Obtiene de la data del motor de informes, el valor de las líneas o registros impresos para la sub-lista <oReport:aGroups[1]:nCounter>. La función STR() convierte la expresión en cadenas y la función lTrim() extrae los espacios vacíos, si la sub-lista empleo 10 registros del cursor de datos, el valor final de <cLines> es "10". cLines:=" ("+cLines+")" Encierra entre paréntesis la cantidad de líneas contadas por el grupo, el contenido de <cLines> será "(10)" RETURN cExp+uValue+cLines Finaliza la función y concatena en una sola expresión. "Total Código: 0001 (10)", es decir; el grupo se cierra indicando el código que lo rige y la cantidad de registros utilizados.
<< Regresar
|