Вы находитесь на странице: 1из 16

ROGRIO RAFAEL LINO

ADVPL
JULHO 27, 2011

PARCEIROS

3L Systems
C# Brasil
Dev Mobile Brasil
Projetos e TI

Controle de impresso
by Rogrio Rafael Lino
Abaixo segue uma srie de funes para impresso.
AVALIMP()
A funo AVALIMP() utilzada em relatrios especficos em substituio da funo CABEC(),configurando
a impressora de acordo com o driver escolhido e os parmetros de impresso disponveis no array
aReturn, respeitando o formato utilizado pela funo SETPRINT().
Sintaxe: AVALIMP(nLimite)
Parmetros: nLimite Tamanho do relatrio em colunas, podendo assumir os valores 80,132 ou 220
colunas, respectivamente para os formatos P, M ou G de impresso.
Retorno:
Caracter String com caracteres de controle, dependente das configuraes escolhidas pelo usurio e do
arquivo de driver especificado.
Exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

USER FUNCTION XAVALIMP()

Cdigo

LOCAL cTitulo := PADC(AVALIMP,74)


LOCAL cDesc1 := PADC(Demonstrao do uso da funo AVALIMP(),74)
LOCAL cDesc2 :=
LOCAL cDesc3 := PADC(CURSO DE ADVPL,74)
LOCAL cTamanho := G
LOCAL cLimite := 220
LOCAL cNatureza :=
LOCAL aReturn := {Especial, 1,Administrao, 1, 2, 2,,1}
LOCAL cNomeProg := RAVALIMP

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

LOCAL cPerg := PADR(RAVALIMP,10) // Compatibilizao com MP10


LOCAL nLastKey := 0
LOCAL cString :=SF2"
Pergunte(cPerg,.F.) // Pergunta no SX1
wnrel:= SetPrint(cString,wnrel,cPerg,cTitulo,cDesc1,cDesc2,cDesc3,.T.)
SetDefault(aReturn,cString)
If nLastKey == 27
Return
Endif
RptStatus({|| RunReport(cString)},cTitulo)
Return
Static Function RunReport(cString)
SetPrc(0,0)
//
+------------------------------------------------------------------------+
//| Chamada da funo AVALIMP() |
//
+------------------------------------------------------------------------+
@ 00,00 PSAY AvalImp(220)
dbSelectArea(cString)
dbSeek(xFilial()+mv_par01+mv_par03,.T.)
Return

CABEC()
A funo CABEC() determina as configuraes de impresso do relatrio e imprime o cabealho do
mesmo.
Sintaxe: Cabec(cTitulo, cCabec1, cCabec2, cNomeProg, nTamanho, nCompress, aCustomText, lPerg,
cLogo)
Parmetros:

cTitulo Ttulo do relatrio


cCabec1 String contendo as informaes da primeira linha do cabealho
cCabec2 String contendo as informaes da segunda linha do cabealho
cNomeProg Nome do programa de impresso do relatrio.
nTamanho Tamanho do relatrio em colunas (80, 132 ou 220)
nCompress Indica se impresso ser comprimida (15) ou normal (18).
aCustomText
Texto especfico para o cabealho, substituindo a estrutura padro do sistema.
lPerg
Permite a supresso da impresso das perguntas do relatrio, mesmo que o parmetro MV_IMPSX1
esteja definido como S
Parmetros
cLogo
Redefine o bitmap que ser impresso no relatrio, no necessitando que ele esteja no formato padro da
Microsiga:
LGRL+SM0->M0_CODIGO+SM0->M0_CODFIL+.BMP
Retorno: Nenhum.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Exemplo:

Cdigo

#INCLUDE "protheus.ch"
User Function MPTR001()
Local cDesc1 := "Este programa tem como objetivo imprimir relatorio "
Local cDesc2 := "de acordo com os parametros informados pelo usuario."
Local cDesc3 := "Listagem de clientes"
Local cTitulo := "Listagem de clientes"
Local lImprime := .T.
// Parametros da SetPrint()
Local cString := "SA1"

19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

Local cPerg := ""


Local lDic := .T. // Habilita a visalizacao do dicionario
Local aOrd := RetSixOrd(cString)
Local lCompres := .T. // .F. - Normal / .T. - Comprimido
Local lFilter := .T. // Habilita o filtro para o usuario
Local cNomeProg := "MPTR002"
Local cTamanho := "M"
Local nTipo := 18
Local nLimite := 132
Default lCriaTrab := .T.
Private lEnd := .F.
Private lAbortPrint := .F.
Private aReturn := { "Zebrado", 1, "Administracao", 2, 2, 1, "", 1}
//aReturn[4] 1- Retrato, 2- Paisagem
//aReturn[5] 1- Em Disco, 2- Via Spool, 3- Direto na Porta, 4- Email
Private nLastKey := 0
Private m_pag := 01
Private wnrel := "MPTR002"
dbSelectArea("SA1")
dbSetOrder(1)
//
// Monta a interface padrao com o usuario...
//

wnrel :=
SetPrint(cString,cNomeProg,cPerg,@cTitulo,cDesc1,cDesc2,cDesc3,lDic,aOrd,lCompres,c
lter)
If nLastKey == 27
Return

69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
10
0
10
1
10
2
10
3
10
4
10
5
10
6
10
7
10
8
10

Endif
SetDefault(aReturn,cString,,,cTamanho,aReturn[4]) // nFormato: 1- Retrato, 2Paisagem
If nLastKey == 27
Return
Endif
nTipo := IIF(aReturn[4]==1,15,18)
//
// Processamento. RPTSTATUS monta janela com a regua de processamento.
//
RptStatus({||
RunReport(cTitulo,cString,cNomeProg,cTamanho,nTipo,nLimite)},cTitulo)
Return
Static Function RunReport(cTitulo,cString,cNomeProg,cTamanho,nTipo,nLimite)
Local nLin := 80
Local cCabec1 := ""
Local cCabec2 := ""
Local cArqInd
cCabec1 := "CODIGO"+Space(2)+"LOJA"+Space(2)+"NOME REDUZIDO"+Space(9)
cCabec1 += "RAZAO SOCIAL"+Space(30)+"CNPJ"+Space(18)+"INSCR.ESTADUAL"+Space(8)
cCabec1 += "CEP"
cCabec2 := "ESTADO"+Space(2)+"MUNICIPIO"+Space(8)+"ENDERECO"
dbSelectArea("TRBSA1")
dbGoTop()
While !EOF()
If lAbortPrint .OR. nLastKey == 27
@nLin,00 PSAY "*** CANCELADO PELO OPERADOR ***"
Exit

9
11
0
11
1
11
2
11
3
11
4
11
5
11
6
11
7
11
8
11
9
12
0
12
1
12
2
12
3
12
4
12
5
12
6
12
7
12
8
12
9
13
0
13
1
13
2
13
3
13

Endif
If nLin > 55 // Salto de Pgina. Neste caso o formulario tem 55 linhas...
Cabec(cTitulo,cCabec1,cCabec2,cNomeProg,cTamanho,nTipo)
nLin := 9
Endif

4
13
5
13
6
13
7
IMPCADAST()
A funo IMPCADAST() cria uma interface simples que permite a impresso dos cadastros do sistema
com parametrizao DE/ATE.
Sintaxe: IMPCADAST(cCab1, cCab2, cCab3, cNomeProg, cTam, nLimite, cAlias)
Parmetros:
cCab1 Primeira linha do cabealho
cCab2 Segunda linha do cabealho
cCab3 Terceira linha do cabealho
cNomeProg Nome do programa
cTam Tamanho do relatrio nos formatos P, M e G.
nLimite Nmero de colunas do relatrio, seguindo o formato especificado no tamanho, aonde:
P- 80 colunas
M- 132 colunas
G- 220 colunas
cAlias Alias do arquivo de cadastro que ser impresso
Retorno: Nenhum.
MS_FLUSH()
A funo MS_FLUSH() envia o spool de impresso para o dispositivo previamente especificado com a
utilizao das funes AVALIMP() ou SETPRINT().
Sintaxe: MS_FLUSH()
Parmetros: Nenhum.
Retorno: Nenhum.
Exemplo:

Cdigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

Static Function
RunReport(cTitulo,cString,cNomeProg,cTamanho,nTipo,nLimite)
Local nLin := 80
Local cCabec1 := ""
Local cCabec2 := ""
Local cArqInd
cCabec1 := "CODIGO"+Space(2)+"LOJA"+Space(2)+"NOME REDUZIDO"+Space(9)
cCabec1 += "RAZAO
SOCIAL"+Space(30)+"CNPJ"+Space(18)+"INSCR.ESTADUAL"+Space(8)
cCabec1 += "CEP"
cCabec2 := "ESTADO"+Space(2)+"MUNICIPIO"+Space(8)+"ENDERECO"
dbSelectArea("TRBSA1")
dbGoTop()
SetRegua(RecCount())
While !EOF()
If lAbortPrint .OR. nLastKey == 27
@nLin,00 PSAY "*** CANCELADO PELO OPERADOR ***"
Exit
Endif
If nLin > 55 // Salto de Pgina. Neste caso o formulario tem 55
linhas...
Cabec(cTitulo,cCabec1,cCabec2,cNomeProg,cTamanho,nTipo)
nLin := 9
Endif
// Primeira linha de detalhe:
@nLin,000 PSAY TRBSA1->A1_COD
@nLin,008 PSAY TRBSA1->A1_LOJA
@nLin,014 PSAY TRBSA1->A1_NREDUZ
@nLin,036 PSAY TRBSA1->A1_NOME

50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

@nLin,078 PSAY TRBSA1->A1_CGC


@nLin,100 PSAY TRBSA1->A1_INSCR
@nLin,122 PSAY TRBSA1->A1_CEP
nLin++
// Segunda linha de detalhe
@nLin,000 PSAY TRBSA1->A1_EST
@nLin,008 PSAY TRBSA1->A1_MUN
@nLin,025 PSAY TRBSA1->A1_END
nLin++
//Linha separadora de detalhes
@nLin,000 PSAY Replicate("-",nLimite)
nLin++
dbSkip() // Avanca o ponteiro do registro no arquivo
EndDo
SET DEVICE TO SCREEN
If aReturn[5]==1
dbCommitAll()
SET PRINTER TO
OurSpool(wnrel)
Endif
MS_FLUSH()
RETURN

OURSPOOL()
A funo OURSPOOL() executa o gerenciador de impresso da aplicao Protheus, permitindo a
visualizao do arquivo de impresso gerado pelo relatrio no formato PostScrip com extenso ##R.

Sintaxe: OURSPOOL(cArquivo)
Parmetros: cArquivo Nome do relatrio a ser visualizado.
Retorno: Nenhum.
Exemplo:

Cdigo
1
2
3
4
5
6
7
8
9

If aReturn[5]==1 // Indica impresso em disco.


dbCommitAll()
SET PRINTER TO
OurSpool(wnrel)
Endif

RODA()
A funo RODA() imprime o rodap da pgina do relatrio, o que pode ser feito a cada pgina, ou
somente ao final da impresso.
Pode ser utilizado o ponto de entrada RodaEsp para tratamento de uma impresso especfica.
Sintaxe: Roda(uPar01, uPar02, cSize)
Parmetros:
uPar01 No mais utilizado
uPar02 No mais utilizado
cSize Tamanho do relatrio (P,M,G)
Retorno: Nenhum.
Exemplo:

Cdigo
1
2
3
4
5
6
7
8

#include "protheus.ch"
User Function TestImpr()
Local wnrel
Local cString := "SA1"
Local titulo := "Teste Impresso de Relatorios"

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

Local NomeProg := "XXX"


Local Tamanho := "M"
PRIVATE aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
wnrel:=SetPrint(cString,NomeProg,"",@titulo,"", "",
"",.F.,.F.,.F.,Tamanho,,.F.)
SetDefault(aReturn,cString)
RptStatus({|lEnd|
TestRel(@lEnd,wnRel,cString,Tamanho,NomeProg)},titulo)
Return
User Function TestRel(lEnd,WnRel,cString,Tamanho,NomeProg)
LOCAL cabec1,cabec2
LOCAL cRodaTxt := oemtoansi("Rodap")
Local nCntImpr
Local nTipo
nCntImpr := 0
li := 80
m_pag := 1
nTipo := 15
titulo:= oemtoansi("Lista de Clientes")
cabec1:= oemtoansi("COD LOJA NOME"+Space(27)+ "NOME FANTASIA")
cabec2:=""
dbSelectArea("SA1")
dbGoTop()
SetRegua(LastRec())
While !Eof()
IncRegua()
If Li > 60
cabec(titulo,cabec1,cabec2,nomeprog,tamanho,15)

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108

@ Li,0 PSAY __PrtThinLine()


Endif
nCntImpr++
Li++
@ Li,01 PSAY A1_COD
@ Li,05 PSAY A1_LOJA
@ Li,10 PSAY A1_NOME
@ Li,51 PSAY A1_NREDUZ
If Li > 60
Li:=66
Endif
dbSkip()
EndDO
If li != 80
Roda(nCntImpr,cRodaTxt,Tamanho)
EndIf
Set Device to Screen
If aReturn[5] = 1
Set Printer To
dbCommitAll()
OurSpool(wnrel)
Endif
MS_FLUSH()
Return

109
SETDEFAULT()
A funo SetDefault() prepara o ambiente de impresso de acordo com as informaes configuradas no
array aReturn, obtidas atravs da funo SetPrint().
Sintaxe: SetDefault ( < aReturn > , < cAlias > , [ uParm3 ] , [ uParm4 ] , [cSize] , [ nFormat ] )
Parmetros:
aReturn Configuraes de impresso.
cAlias Alias do arquivo a ser impresso.
uParm3 Parmetro reservado.
uParm4 Parmetro reservado.
cSize Tamanho da pgina P,M ou G
nFormat Formato da pgina, 1 retrato e 2 paisagem.
Retorno: Nenhum.
Estrutura aReturn:
aReturn[1] Caracter, tipo do formulrio
aReturn[2] Numrico, opo de margem
aReturn[3] Caracter, destinatrio
aReturn[4] Numrico, formato da impresso
aReturn[5] Numrico, dispositivo de impresso
aReturn[6] Caracter, driver do dispositivo de impresso
aReturn[7] Caracter, filtro definido pelo usurio
aReturn[8] Numrico, ordem
aReturn[x] A partir a posio [9] devem ser informados os nomes dos campos que
devem ser considerados no processamento, definidos pelo uso da opo Dicionrio da SetPrint().
SETPRC()
A funo SETPRC() utilizada para posicionar o dispositivo de impresso ativo, previamente
definido pelo uso das funes AVALIMP() ou SETPRINT() , em uma linha/coluna especificada.
Sintaxe: SETPRC(nLinha, nColuna)

Parmetros:
nLinha Linha na qual dever ser posicionado o dispositivo de impresso.
nColuna Coluna na qual dever ser posicionado o dispositivo de impresso.
Retorno: Nenhum.
Exemplo:

Cdigo
1
2
3
4
5
6
7
8
9
10
11
12
13

aReturn := { "", 1, "" , 2, 3, cPorta , "",IndexOrd() }


SetPrint(Alias(),"","","",,,,.F.,,,,,,,'EPSON.DRV',.T.,,cPorta)
if nLastKey == 27
Return (.F.)
Endif
SetDefault(aReturn,Alias())
SetPrc(0,0)

SETPRINT()
A funo SetPrint() cria uma interface padro onde as opes de impresso de um relatrio podem ser
configuradas. Basicamente duas variveis m_pag e aReturn precisam ser declaradas como privadas
(private) antes de executar a SetPrint(), sendo que: m_pag: controla o nmero de pginas.
aReturn: vetor contendo as opes de impresso, sendo sua estrutura bsica composta de 8 (oito)
elementos.
Aps confirmada, os dados so armazenados no vetor aReturn que ser passado como parmetro para
funo SetDefault().
Sintaxe: SetPrint ( < cAlias > , < cProgram > , [ cPergunte ] , [ cTitle ] , [cDesc1 ] , [ cDesc2 ] , [ cDesc3 ] , [
lDic ] , [ aOrd ] , [ lCompres ] , [cSize ] , [ uParm12 ] , [ lFilter ] , [ lCrystal ] , [ cNameDrv ] , [uParm16 ] ,
[ lServer ] , [ cPortPrint ] ) > cReturn
Parmetros:
cAlias Alias do arquivo a ser impresso.
cProgram Nome do arquivo a ser gerado em disco.
cPergunte Grupo de perguntas cadastrado no dicionrio SX1.
cTitle Ttulo do relatrio.
cDesc1 Descrio do relatrio.

cDesc2 Continuao da descrio do relatrio.


cDesc3 Continuao da descrio do relatrio.
lDic
Utilizado na impresso de cadastro genrico permite a escolha dos campos a serem impressos. Se o
parametro cAlias no for informado o valor padro assumido ser .F.
aOrd Ordem(s) de impresso.
lCompres
Se verdadeiro (.T.) permite escolher o formato da impresso, o valor padro assumido ser .T.
cSize Tamanho do relatrio P,M ou G.
uParm12 Parmetro reservado
lFilter
Se verdadeiro (.T.) permite a utilizao do assistente de filtro, o valor padro assumido ser .T.
lCrystal
Se verdadeiro (.T.) permite integrao com Crystal Report, o valor padro assumido ser .F.
cNameDrv Nome de um driver de impresso.
uParm16 Parmetro reservado.
lServer Se verdadeiro (.T.) fora impresso no servidor.
cPortPrint Define uma porta de impresso padro.
Retorno: Caracter Nome do Relatrio
Estrutura aReturn:
aReturn[1] Caracter, tipo do formulrio
aReturn[2] Numrico, opo de margem
aReturn[3] Caracter, destinatrio
aReturn[4] Numrico, formato da impresso
aReturn[5] Numrico, dispositivo de impresso
aReturn[6] Caracter, driver do dispositivo de impresso
aReturn[7] Caracter, filtro definido pelo usurio
aReturn[8] Numrico, ordem

aReturn[x] A partir a posio [9] devem ser informados os nomes dos campos que devem ser
considerados no processamento, definidos pelo uso da opo.
Referncia: http://pt.scribd.com/doc/58402187/88/GUIA-DE-REFERENCIA-RAPIDA-Funcoes-eComandos-ADVPL
Tags: avalimp advpl cabec advpl Controle de Impresso impcadast advpl impressao
advpl ms_flush advplourspool advpl roda advpl setdefault advpl setprc advpl setprint advpl