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.