Saltar para o conteúdo principal
Versão: Próximo

Print form

Print form ( {tabela ;} formulario {; formData} {; area1{; area2}} ) : Integer

ParâmetroTipoDescrição
tabelaTableTabela a qual pertence o formulário, ou tabela padrão, se omitido
formularioText, ObjectFormulário a imprimir
formDataObjectData to associate to the form
area1IntegerMarcador de impressão, a Área de início (se area2 é especificada)
area2IntegerÁrea de fim (se área1 for especificada)
ResultadoIntegerAltura da área de impressão

Esse comando não é seguro para thread e não pode ser usado em código adequado.

Descrição

Print form simplesmente imprime formulario com os valores atuais dos campos e variáveis. Geralmente este comando se utiliza para imprimir relatórios muito complexos que necessitem um controle total do processo de impressão. Print form não processa registros, nem quebras ou saltos de páginas. Estas operações são sua responsabilidade. Print form imprime campos e variáveis em um marco de tamanho fixo unicamente.

No formulário parâmetro, pode passar:

  • o nome do formulário ou
  • a rota (em sintaxe POSIX) para um arquivo válido .json que contenha uma descrição do formulário a usar (ver Form file path),
  • ou um objeto que contenha uma descrição do formulário.

Como Print form não gera um salto de página depois de imprimir o formulário, é fácil combinar diferentes formulários na mesma página. Então, Print form é ideal para efetuar tarefas de impressão completas que envolvam diferentes tabelas e diferentes formulários. Para forçar um salto de página entre formulários, utilize o comando PAGE BREAK. Para passar à seguinte página de um formulário cuja altura é maior que o espaço disponível, chame o comando CANCEL antes do comando PAGE BREAK.

Podem ser utilizadas três sintaxes diferentes:

  • Impressão da área de detalhe

Sintaxe:

 altura:=Print form(minhaTabela;meuForm)

Neste caso, Print form só imprime a área de detalhe (a área entre a linha cabeçalho e a linha detalhe) do formulário.

  • impressão da área do formulário

Sintaxes:

 altura:=Print form(minhaTabela;meuForm;marcador)

Neste caso, o comando imprimirá a seção designada pelo marcador. Passe no parâmetro marcador uma das constantes do tema Área de formulário:

ConstanteTipoValor
Form break0Inteiro longo300
Form break1Inteiro longo301
Form break2Inteiro longo302
Form break3Inteiro longo303
Form break4Inteiro longo304
Form break5Inteiro longo305
Form break6Inteiro longo306
Form break7Inteiro longo307
Form break8Inteiro longo308
Form break9Inteiro longo309
Form detailInteiro longo0
Form footerInteiro longo100
Form headerInteiro longo200
Form header1Inteiro longo201
Form header10Inteiro longo210
Form header2Inteiro longo202
Form header3Inteiro longo203
Form header4Inteiro longo204
Form header5Inteiro longo205
Form header6Inteiro longo206
Form header7Inteiro longo207
Form header8Inteiro longo208
Form header9Inteiro longo209

• impressão de seção

Sintaxes:

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

Neste caso, o comando imprimirá a seção incluída entre os parâmetros areaInicio e areaFim Parâmetros. Os valores introduzidos devem ser expressados em píxels.

O valor devolvido por Print form indica a altura da área de impressão. Este valor será considerado automaticamente pelo comando Get printed height.

As caixas de diálogo de impressão não aparecem quando utiliza Print form. O relatório não utiliza os parâmetros de impressão definidos para o formulário no ambiente Desenho. Há duas formas de especificar os parâmetros de impressão antes de efetuar uma série de chamadas a Print form:

Print form gera apenas um evento On Printing Detail para o método de formulário.

Print form constrói cada página impressa na memória. Cada página se imprime quando a página em memória está cheia ou quando você chama a PAGE BREAK. Para ter certeza de que a impressão da última página depois de utilizar Print form, deve concluir com o comando PAGE BREAK. Do contrário, se a última página não estiver cheia, permanece em memória e não se imprime.

Atenção: Sub-formulários não são impressos com Print form. Para imprimir apenas um formulário com esses objetos, use PRINT RECORD.

Print form gera só um evento On Printing Detail para o método formulário.

4D Server: Este comando pode ser executado em 4D Server dentro do framework de um procedimento armazenado. Neste contexto:

  • Tenha certeza de que não apareça nenhuma caixa de diálogo na equipe servidor (exceto para um requerimento específico).
  • No caso de um problema relacionado com a impressora (sem papel, impressora desconectada, etc.), não é gerada uma mensagem de erro.

Exemplo 1

O exemplo a seguir atua da mesma que forma que o comando PRINT SELECTION. Entretanto, o relatório usa um de dois diferentes formulários, dependendo se o registro é para um cheque ou um depósito:

 QUERY([Registro]) // Select the records
 If(OK=1)
    ORDER BY([Registro]) // Ordenar os registros
    If(OK=1)
       PRINT SETTINGS // Mostrar as caixas de diálogo de impressão
       If(OK=1)
          For($vlRegistro;1;Records in selection([Registro]))
             If([Registro]Tipo ="Cheque")
                Print form([Registro];"SaídaCheque") // Utilize um formulário de cheques
             Else
                Print form([Registro];"SaidaDeposito") // Utilizar outro formulário de depósitos
             End if
             NEXT RECORD([Registro])
          End for
          PAGE BREAK // Tenha certeza de que a última página se imprima
       End if
    End if
 End if

Exemplo 2

Veja o exemplo do comando SET PRINT MARKER.

Exemplo 3

Este formulário se utiliza como diálogo e depois se imprime com modificações:

O 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

O código que chama ao diálogo depois imprime seu corpo:

 $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 também

CANCEL
PAGE BREAK
PRINT SETTINGS
SET PRINT OPTION