Saltar al contenido principal
Versión: Siguiente

Print form

Print form ( {tabla ;} formulario {; dataForm} {; area1{; area2}} ) : Integer

ParámetroTipoDescripción
tablaTableTabla a imprimir, o Tabla por defecto, si se omite
formularioText, ObjectFormulario a imprimir
dataFormObjectDatos a asociar al formulario
area1IntegerMarcador de impresión, o Área de inicio (si area2 se especifica)
area2IntegerÁrea de fin (si área1 se especifica)
ResultadoIntegerAltura de la sección impresa

Este comando no es hilo seguro, no puede ser utilizado en código apropiativo.

Descripción

Print form simplemente imprime formulario con los valores actuales de los campos y variables. Generalmente este comando se utiliza para imprimir informes muy complejos que necesiten un control total del proceso de impresión. Print form no procesa registros, ni rupturas o saltos de páginas. Estas operaciones son su responsabilidad. Print form imprime campos y variables en un marco de tamaño fijo únicamente.

En el parámetro formulario, puede pasar:

  • el nombre de un formulario, o
  • la ruta (en sintaxis POSIX) a un archivo .json válido que contiene una descripción del formulario a usar (ver Ruta de archivo del formulario), o
  • un objeto que contiene una descripción del formulario.

Como Print form no genera un salto de página después de imprimir el formulario, es fácil combinar diferentes formularios en la misma página. Entonces, Print form es ideal para efectuar tareas de impresión complejas que involucren diferentes tablas y diferentes formularios. Para forzar un salto de página entre formularios, utilice el comando PAGE BREAK. Para pasar a la siguiente página de un formulario cuya altura es mayor que el espacio disponible, llame el comando CANCEL antes del comando PAGE BREAK.

Se pueden utilizar tres sintaxis diferentes:

  • Impresión del área de detalle

Sintaxis:

 height:=Print form(myTable;myForm)

En este caso, Print form sólo imprime el área de detalle (el área entre la línea encabezado y la línea detalle) del formulario.

  • Impresión del área del formulario

Sintaxis:

 height:=Print form(myTable;myForm;marker)

En este caso, el comando imprimirá la sección designada por el marcador. Pase en el parámetro marcador una de las constantes del tema Área de formulario :

ConstanteTipoValor
Form break0Entero largo300
Form break1Entero largo301
Form break2Entero largo302
Form break3Entero largo303
Form break4Entero largo304
Form break5Entero largo305
Form break6Entero largo306
Form break7Entero largo307
Form break8Entero largo308
Form break9Entero largo309
Form detailEntero largo0
Form footerEntero largo100
Form headerEntero largo200
Form header1Entero largo201
Form header10Entero largo210
Form header2Entero largo202
Form header3Entero largo203
Form header4Entero largo204
Form header5Entero largo205
Form header6Entero largo206
Form header7Entero largo207
Form header8Entero largo208
Form header9Entero largo209

• Impresión de sección

Sintaxis:

 height:=Print form(myTable;myForm;areaStart;areaEnd)

En este caso, el comando imprimirá la sección incluida entre los parámetros areaInicio y areaFin Parámetros. Los valores introducidos deben expresarse en píxeles.

El valor devuelto por Print form indica la altura del área de impresión. Este valor será tomado en cuenta automáticamente por el comando Get printed height.

Las cajas de diálogo de impresión no aparecen cuando utiliza Print form. El informe no utiliza los parámetros de impresión definidos para el formulario en el entorno Diseño. Hay dos formas de especificar los parámetros de impresión antes de efectuar una serie de llamadas a Print form:

Print form crea cada página impresa en memoria. Cada página se imprime cuando la página en memoria está llena o cuando usted llama a PAGE BREAK. Para asegurar la impresión de la última página después de utilizar Print form, debe concluir con el comando PAGE BREAK (excepto en el contexto de un OPEN PRINTING JOB, ver nota). De lo contrario, si la última página no está llena, permanece en memoria y no se imprime.

Atención: si el comando se llama en el contexto de un trabajo de impresión abierto con OPEN PRINTING JOB, NO debe llamar a PAGE BREAK para la última página porque se imprime automáticamente por el comando CLOSE PRINTING JOB. Si llama PAGE BREAK en este caso, se imprime una página vacía.

Este comando imprime las áreas y objetos externos (por ejemplo, las áreas 4D Write o 4D View). El área se reinicializa para cada ejecución del comando.

Atención: Print form no imprime subformularios. Para imprimir sólo un formulario con tales objetos, utilice mejor PRINT RECORD.

Print form genera sólo un evento On Printing Detail para el método formulario.

4D Server: este comando puede ejecutarse en 4D Server dentro del framework de un procedimiento almacenado. En este contexto:

  • Asegúrese de que no aparezca ninguna caja de diálogo en el equipo servidor (excepto para un requerimiento específico).
  • En el caso de un problema relacionado con la impresora (sin papel, impresora desconectada, etc.), no se genera un mensaje de error.

Ejemplo 1

Print form no imprime subformularios. Para imprimir sólo un formulario con tales objetos, utilice mejor PRINT RECORD.

Print form genera únicamente un evento On Printing Detail por método de formulario.

4D Server: este comando puede ejecutarse en 4D Server en el marco de un procedimiento almacenado. En este contexto:

  • Asegúrese de que no aparezca ninguna caja de diálogo en el equipo servidor (excepto para una necesidad específica).
  • En el caso de un problema relacionado con la impresora (sin papel, impresora desconectada, etc.), no se genera un mensaje de error.

Ejemplo 2

El siguiente ejemplo funciona como lo haría un comando PRINT SELECTION. Sin embargo, el informe utiliza uno de los dos formularios diferentes, dependiendo de si el registro es para un cheque o para un depósito:

 QUERY([Registro]) // Select the records
 If(OK=1)
    ORDER BY([Registro]) // Ordenar los registros
    If(OK=1)
       PRINT SETTINGS // Mostrar las cajas de diálogo de impresión
       If(OK=1)
          For($vlRegistro;1;Records in selection([Registro]))
             If([Registro]Tipo ="Cheque")
                Print form([Registro];"SalidaCheque") // Utilice un formulario de cheques
             Else
                Print form([Registro];"SalidaDeposito") // Utilizar otro formulario de depósitos
             End if
             NEXT RECORD([Registro])
          End for
          PAGE BREAK // Asegúrese de que la última página se imprima
       End if
    End if
 End if

Ejemplo 3

Este formulario se utiliza como diálogo y luego se imprime con modificaciones:

El método formulario:

 If(Form event code=On Printing Detail)
    Form.lastname:=Uppercase(Form.lastname)
    Form.firstname:=Uppercase(Substring(Form.firstname;1;1))+Lowercase(Substring(Form.firstname;2))
    Form.request:=Lowercase(Form.request)
 End if

El código que llama al diálogo luego imprime su cuerpo:

 $formData:=New object
 $formData.lastname:="Smith"
 $formData.firstname:="john"
 $formData.request:="I need more COFFEE"
 $win:=Open form window("Request_obj";Plain form window;Horizontally centered;Vertically centered)
 DIALOG("Request_obj";$formData)
 $h:=Print form("Request_var";$formData;Form detail)

Ver también

CANCEL
PAGE BREAK
PRINT SETTINGS
SET PRINT OPTION