Olá pessoal…
Vou mostrar hoje como fazer uma impressão com a sequência diferente no Protheus (teste realizado com TMSPrinter).
Por padrão pessoal, a impressão no Protheus é sequencial, então por exemplo, se o relatório possui 5 páginas, e se for impresso duas cópias, a sequência de impressão será 1, 2, 3, 4, 5, 1, 2, 3, 4 e 5.
Foi criado uma rotina, que altera essa sequência, sendo que, ao invés de sair sequencial, sai página a página conforme número de cópias, por exemplo, se forem duas cópias de 5 páginas, a impressão será 1, 1, 2, 2, 3, 3, 4, 4, 5 e 5. Otimizando o tempo de impressão.
Para usar a rotina, antes de chamar o Preview do relatório (no caso de TMSPrinter), insira os seguites comandos:
//Definindo atalho para impressão de mais de uma página por vez (Alt+F8)
SetKey(K_ALT_F8,{|| u_zImpAux(oPrint) })
//Visualiza o relatório
oPrint:Preview()
//Limpando o atalho
SetKey(K_ALT_F8,{|| Nil })
Dessa forma, ao apertar Alt+F8, é mostrado a tela para digitação da quantidade de cópias.
Abaixo o código fonte da função criada.
//Bibliotecas
#Include "Protheus.ch"
/*/{Protheus.doc} zImpAux
Função que imprime os jpegs em sequencia diferente
@type function
@author Atilio
@since 24/11/2015
@version 1.0
@param oPrint, Objeto, Objeto de impressão criado via TMSPrinter
@example
u_zImpAux(oPrint)
/*/
User Function zImpAux(oPrint)
Local aArea := GetArea()
Local nCopies := 2
Local nCopAux := nCopies
Local oDlgQtd
Local nAtuPag := 0
//Filtra vendedor
Define MsDialog oDlgQtd Title "Quantidade de cópias" From 000,000 To 080,300 PIXEL
//Mostrnado um label (texto na janela)
@ 010,010 Say "Qtde.:" Size 55,07 Of oDlgQtd Pixel
//Mostrando um campo que irá armazenar valor
@ 010,050 MsGet nCopAux Size 55,11 Of oDlgQtd Pixel PICTURE "@E 99"
//Criando um botão de confirmar com ações
Define SButton From 005,120 Type 1 Action (nOpca:=1,oDlgQtd:End()) Enable Of oDlgQtd
//Criando um botão de cancelar com ações
Define SButton From 025,120 Type 2 Action (nOpca:=2,oDlgQtd:End()) Enable Of oDlgQtd
//Ativando a janela
Activate MsDialog oDlgQtd Centered
//Se a rotina for confirmada
If nOpca == 1
nCopies := nCopAux
//Percorre as imagens / páginas
For nAtuPag := 1 To oPrint:nPage
oPrint:Print( {nAtuPag}, nCopies )
Next
EndIf
RestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
