Saltar al contenido principal
Versión: 20 R10 BETA

Print form

Print form ( {aTable ;} form {; formData} {; areaStart{; areaEnd}} ) : Integer

ParámetrosTipoDescripción
aTableTablaTabla del formulario, o tabla por defecto, si se omite
formText, ObjectNombre (cadena) del formulario, o ruta POSIX (cadena) a un archivo .json que describa el formulario, o un objeto que describa el formulario a imprimir
formDataObjectDatos a asociar al formulario
areaStartIntegerMarcador de impresión, o área de inicio (si se especifica areaEnd)
areaEndIntegerÁrea final (si se especifica areaStart)
ResultadoIntegerAltura de la sección impresa

Descripción

El comando Print form simplemente imprime form con los valores actuales de los campos y variables de la tabla aTable. Suele utilizarse para imprimir informes muy complejos que requieren un control total del proceso de impresión. Print form no realiza ningún procesamiento de registros, ni las rupturas, ni de saltos de página. Estas operaciones son responsabilidad suya. Print form* imprime campos y variables solo en un marco de tamaño fijo.

En el parámetro form, puede pasar:

  • el nombre de un formulario, o
  • la ruta (en sintaxis POSIX) de un archivo .json válido que contenga una descripción del formulario a utilizar (ver Ruta de acceso al archivo de formulario), o
  • un objeto que contiene la 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. Así, Print form es perfecto para tareas de impresión complejas que implican diferentes tablas y diferentes formularios. Para forzar un salto de página entre formularios, utilice el comando PAGE BREAK. Para transferir la impresión a la página siguiente de un formulario cuya altura es superior al espacio disponible, invoque el comando CANCEL antes del comando PAGE BREAK.

Se pueden utilizar tres sintaxis diferentes:

  • Impresión de área de detalle

Sintaxis:

 height:=Print form(myTable;myForm)

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

  • Impresión de área de formulario

Sintaxis:

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

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

ConstanteTipoValor
Form break0Integer300
Form break1Integer301
Form break2Integer302
Form break3Integer303
Form break4Integer304
Form break5Integer305
Form break6Integer306
Form break7Integer307
Form break8Integer308
Form break9Integer309
Form detailInteger0
Form footerInteger100
Form headerInteger200
Form header1Integer201
Form header10Integer210
Form header2Integer202
Form header3Integer203
Form header4Integer204
Form header5Integer205
Form header6Integer206
Form header7Integer207
Form header8Integer208
Form header9Integer209
  • 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 areaStart y areaEnd. Los valores introducidos deben expresarse en píxeles.

formData

Opcionalmente, puede pasar parámetros al form usando el objeto formData o el objeto de clase form automáticamente instanciado por 4D si has asociado una clase de usuario al formulario. Any properties of the form data object will then be available from within the form context through the Form command. Optionally, you can pass parameters to the form using either the formData object or the form class object automatically instantiated by 4D if you have associated a user class to the form.

Para obtener información detallada sobre el objeto de datos del formulario, consulte el comando DIALOG.

Valor devuelto

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 la impresora no aparecen cuando se utiliza Print form. El informe no utiliza la configuración de impresión definida en el modo Diseño para el formulario. Hay dos formas de especificar los parámetros de impresión antes de realizar una serie de llamadas a Print form:

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

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

Este comando imprime áreas y objetos externos (por ejemplo, áreas 4D Write o 4D View). El área se reinicializa cada vez que se ejecuta el comando.

Atención: los subformularios no se imprimen con Print form. Para imprimir sólo un formulario con dichos objetos, utilice PRINT RECORD en su lugar.

Print form genera sólo un evento On Printing Detail para el método 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 ningún cuadro de diálogo en el equipo servidor (salvo que se trate de un requisito específico).
  • En el caso de un problema relacionado con la impresora (falta de papel, impresora desconectada, etc.), no se genera ningún mensaje de error.

Ejemplo 1

El siguiente ejemplo funciona como lo haría un comando PRINT SELECTION. Sin embargo, el informe utiliza una de dos formas diferentes, dependiendo de si el registro corresponde a un cheque o a un ingreso:

 QUERY([Register]) // Seleccionar los registros
 If(OK=1)
    ORDER BY([Register]) // Ordenar los registros
    If(OK=1)
       PRINT SETTINGS // Mostrar cuadros de diálogo de impresión
       If(OK=1)
          For($vlRecord;1;Records in selection([Register]))
             If([Register]Type ="Check")
                Print form([Register];"Check Out") // Utilice un formulario para cheques
             Else
                Print form([Register];"Deposit Out") // Utilice otro formulario para depósitos
             End if
             NEXT RECORD([Register])
          End for
          PAGE BREAK // Asegúrese de que se imprime la última página
       End if
    End if
 End if

Ejemplo 2

Consulte el ejemplo del comando SET PRINT MARKER.

Ejemplo 3

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

El método del 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 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

Propiedades

Número de comando5
Hilo seguro