Você está na página 1de 30

CURSO ADVPL II

RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
#. PRO$RA%ANDO PARA &ANCO DE DADOS
Podemos utilizar querys no Protheus quando acessamos bancos de dados via TopConnect.
A utilizao de querys melhoram consideravelmente a velocidade das consultas aos dados e reduzem a
sobrecarga no servidor de aplicao, TopConnect e Banco de ados.
!ormalmente uma query " utilizada em substituio a um #oop $ %hile & na base de dados de
programao convencional. 'uerys mais comple(as utilizando )oins poder ser constru*das com a mesma
+uno de v,rios loops.
#.#. DI'ERENAS E SI%ILARIDADES ENTRE D&' E S(L
A princ*pio no e(istem di+erenas na programao para a verso -'#, ), que pelo pr.prio +ato de ser
uma linguagem interpretada, o sistema " quem se encarrega de e(ecutar os comandos e +un/es
adequadamente no ambiente em que trabalha. 0as " importante manter algumas in+orma/es em
mente ao programar para o ambiente -'#.
eve1se lembrar que estamos trabalhando com um banco de dados relacional, que se utiliza de tabelas ao
inv"s de arquivos, e onde o sistema no tem acesso aos dados de +orma nativa e sim atrav"s do
TopConnect. 2ssa +orma de acesso adiciona ao sistema algumas das caracter*sticas e vantagens o+erecidas
pelo -3B em uso $por e(emplo, o 4racle, 0--'# -erver ou o B5& como por e(emplo segurana e
integridade re+erencial, e as imensas +acilidades da linguagem -'#, mas por outro lado tem1se tamb"m as
implica/es da converso dos comandos no padro (Base para a per+eita compreenso no ambiente -'#.
6magine a montagem de uma e(presso de +iltro para um *ndice condicional. Tome a seguinte e(presso
como e(emplo7 8T4-$29:;2!CT4& <= T4-$mv:par>9&8. 2m um ambiente padro (Base, como o
!T? ou o A-, pode1se utilizar vari,veis sem qualquer problema em uma e(presso de +iltro pois a
mesma ser, avaliada registro a registro durante a montagem do *ndice. 0as no ambiente -'#, o +iltro
nada mais " do que uma tabela tempor,ria, onde esto selecionados apenas os registros con+orme a
condio indicada. A seleo de dados em tabelas pelo -'# " mais r,pida, mas em compensao o
-3B no tem como reconhecer a vari,vel in+ormada na e(presso. 2la e(iste apenas no sistema ou,
mais especi+icamente, no seu programa.
Por isso, deve1se substituir a e(presso anteriormente e(empli+icada pela seguinte $que tamb"m
+uncionaria per+eitamente em um ambiente (Base&7 8T4-$29:;2!CT4& <= @8AT4-$mv:par>9&A8B8.
2sta e(presso " melhor que anterior simplesmente porque no se utilizada vari,vel e sim do conteCdo
da mesma, o que pode ser compreendido em qualquer ambiente. Toda essas e(plica/es so v,lidas,
da mesma maneira, a +iltros criados atrav"s do comando -2T D6#T2E.
Ainda e(istem outros detalhes a se considerar quando se trabalha com *ndices em um ambiente -'#. F
que na verdade no e(istem *ndices condicionais nesse ambiente. 4 +iltro " criado independente do
*ndice. 2nto, vocG pode criar um 6!E23HA com um +iltro e mudar a ordem, mas o +iltro permanecer,
ativo, em qualquer ordem. o mesmo modo, no se pode manter, dois *ndices, com +iltros di+erentes,
pois um +iltro sobrescreveria o outro.
4utro ponto de ateno deve ser a +uno (Base chamada B-2T6!2?. Podem ocorrer alguns erros
ao tentar1se utilizar essa +uno para abrir um *ndice de trabalho criado. Por esses motivos e pelo +ato
de tornar o processamento mais lento deve1se evitar ao m,(imo o uso de *ndices de trabalho no
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
4
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
ambiente -'#.
a mesma maneira que a +unco B-2T6!2?, os comandos C4PT T4 e APP2! DE40 tamb"m
devem ter uma ateno especial. !o ambiente -'# esses comandos so e(ecutados entre uma tabela e
um arquivo BD $e vice1versa& ou entre dois arquivos BD. Por e(emplo, o comando C4PT T4 pode ser
usado para copiar os dados da tabela ativa para um BD local e o comando APP2! DE40 pode ser
usado para importar os dados de um arquivo local para a tabela ativa. 4s dois podem ser usados entre
dois arquivos, mas nunca pode1se usar, por e(emplo, o comando APP2! DE40 para importar os
dados de uma tabela para outra.
#.2. CO%ANDOS E 'UN)ES PARA TOPCONNECT
TCCONT*PE 1 e+ine o tipo de cone(o que ser, utilizada entre o Protheus e o TopConnect.
-inta(e
TCC4!TTP2 $ cTipo &
Ar+,-e.o O/ri+". Ti0o Des1ri2o
cTipo -im C
Tipo da cone(o. Pode ser7 8TCP6P8 ou 8!P6P28
2(emplo7
TCConType$8!P6P28&
TCConType$8TCP6P8&
TCDEL'ILE 1 Apaga um arquivo de um banco de dados.
-inta(e
TC2#D6#2 $ cTabela &
Ar+,-e.o O/ri+". Ti0o Des1ri2o
cTabela -im C
!ome da tabela que deve ser apagada.
2(emplo7
6+ TcelDile$8-A9>5>8&
0-36!D4$UTabela e(clu*da com sucessoV&
2lse
0-36!D4$U!o +oi poss*vel e(cluir a tabelaV&
2ndi+
TC$EN(R* 3 e+ine a e(ecuo de uma 'uery, a pr.(ima chamada W BHseArea ser, a abertura de
uma 'uery e no de tabela.
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
5
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
-inta(e
TC32!'ET $X (Par9, (Par5, Y, c'uery&
Ar+,-e.o O/ri+". Ti0o Des1ri2o
xPar1,
xPar2
!o 'ualquer
ParZmetros apenas para compatibilizao. !o
tem +uno.
c'uery -im C
Cont"m a e(presso da query que se dese)a
e(ecutar.
2(emplo7
c'uery 7= [-2#2CT ?5:C\A;2 C\A;2, E:2:C:!:4: E2C!4 +rom -?5PP>[
dbHseArea$.T., [T4PC4!![, TC3en'ry$,,c'uery&, [TEB[, .D., .T.&
TCSET'IELD 3 e+ine +ormato de campos numericos e data de acordo com o dicion,rio.
-inta(e
TC-2TD62# $cAlias cCampo, cTipo, nTam, nec&
Ar+,-e.o O/ri+". Ti0o Des1ri2o
cAlias -im C Alias para aplicao o +ormato
cCampo -im C !ome do campo a +ormatar
cTipo -im C Tipo do campo
nTam -im ! Tamanho
nec -im ! ecimal
2(emplo7
c'uery 7= [-2#2CT 25:!H0, 25:;A#4E, 25:206--A4 +rom -25PP>[
dbHseArea$.T., [T4PC4!![, TC3en'ry$,,c'uery&, [TEB[, .D., .T.&
TC-etDield$ 8TEB8, 825:;A#4EV, 8!8, 9], 5 &
TC-etDield$ UTEB8, 825:206--A4V, 88, K, > &
RETS(LNA%E 1 Eetorna o nome da tabela de acordo com a empresa posicionada.
-inta(e
E2T-'#!A02 $cAlias&

Ar+,-e.o O/ri+". Ti0o Des1ri2o
CAlias -im C Alias dese)ado
2(emplo7
c'ry9 7= 8-2#2CT ^ DE40 8 A Eet-ql!ame$8-_58& A 8 %\2E2 :2:#:2:T: = [[8&
S(LORDER 1 Eetorna a instruo do indice corrente.
-inta(e
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
6
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
-'#4E2E $cAlias&

Ar+,-e.o O/ri+". Ti0o Des1ri2o
cChave -im ! ou C
6nstruo com a chave, se num"rico, busca a e(presso da
ordem in+ormada, se caracter utiliza a pr.pria e(presso
in+ormada.
2(emplo7
c'ry9 7= 8-2#2CT ^ DE40 8 A Eet-ql!ame$8-_58& A 8 %\2E2 :2:#:2:T: = [[8&
c'ry9A= 84E2E BT 8 A -ql4rder$8_5:D6#6A#A_5:C46348&
ou
c'ry9 7= 8-2#2CT ^ DE40 8 A Eet-ql!ame$8-_58& A 8 %\2E2 :2:#:2:T: = [[8&
c'ry9A= 84E2E BT 8 A -ql4rder$-_51<$inde(`ey$&&&
ou
c'ry9 7= 8-2#2CT ^ DE40 8 A Eet-ql!ame$8-_58& A 8 %\2E2 :2:#:2:T: = [[8&
c'ry9A= 84E2E BT 8 A -ql4rder$-_51<$inde(order$&&&
TCRE'RES4 1 Daz re+resh em uma tabela, atrav"s de uma leitura +orada da tabela no banco de dados.
Htilizada ap.s o 2#2T2 e o 6!-2ET.
-inta(e
TCE2DE2-\ $ cTabela &
Ar+,-e.o O/ri+". Ti0o Des1ri2o
cTabela -im #.gico 6ndica nome da tabela que deve ser +eito re+resh.
2(emplo7
cTabela7= 8-A9PP>8
cComando 7= 8elete 8A cTabela A8 %here E:2:C:!:4: < N>>>> 8
TC-ql2(ec$cComando&
TCEe+resh$cTabela&

TCSPE5IST 1 ;eri+ica se uma -tored Procedure e(iste.
-inta(e
TC-P2?6-T $ c-toredProc &
Ar+,-e.o O/ri+". Ti0o Des1ri2o
C-toredProc -im C !ome da -tored Procedure.
2(emplo
i+ TC-P2(ist$8-P>>>>>98&
c-tr 7= 8E4P PE4C2HE2 8A 8-P>>>>>9 8
TC-ql2(ec$c-tr&
endi+
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
7
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
TCS(LE5EC 1 2(ecuta um comando em -'#
-inta(e
TC-'#2?2C $cComando&

Ar+,-e.o O/ri+". Ti0o Des1ri2o
cComando -im C 6nstruo em -'#.
2(emplo
TC-'#2?2C$82#2T2 8 A Eet-ql!ame$8-_58& A 8 %\2E2 :2:#:2:T: = [^[8&
TCSPE5EC 1 2(ecuta 2(ecuta uma -tored Procedure, no banco de dados, com nCmero vari,vel de
parZmetros. Eetorna um array contendo os valores de retorno da -P
-inta(e
TC-P2?2C $ c-Proc X, (Param9,...,(Param!Y&11< XarrayY
Ar+,-e.o O/ri+". Ti0o Des1ri2o
c-Proc -im C !ome da -tored Procedure.
(Param? !o 'ualquer ParZmetro$s& da -tored Procedure

Create Procedure teste9$ R6!:;A#H2 int, R4HT:-TE char$5NN&, R4HT:;A#H2 int&
%6T\ E2C40P6#2
As
Begin
-elect R4HT:-TE = 8Teste8, R4HT:;A#H2 = R6!:;A#H2 A a
2nd
34

aEesult 7= TC-P2?2C$(Procedures $[teste9[&, 9>> &
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
8
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
#.3. E5ERC6CIOS
9. Dazer um programa utilizando +un/es de bancos de ados que imprima os seguintes campos7
C"-0os7
!o. Pedido, !ome do Cliente, Codigo do Produto, escrio do Produto, ata de 2missao do
Pedido.
T"/e8"s de A0oio7 SC59 SC:9 SA#9 S&#
5. Dazer um programa utilizando +un/es de bancos de ados.
P"r"-eros7
Cliente 6nicial $-A9&
Cliente Dinal $-A9&
'uebra por7 ClienteQProduto
Analitico Q -int"tico
C"-0os7
!ome do Cliente, !umero da !ota, ata de 2missao, C.digo do Produto, escrio do Produto,
'uantidade, ;alor Hnit,rio, Total
T"/e8"s de A0oio7 SD29 S'29 SA#9 S&#
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
9
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
#.;. PROT4EUS E%&EDDED S(L
4 ob)etivo do Embedded SQL " +acilitar a escrita e a leitura de consultas ao banco de dados. Para isso,
+oi de+inida uma sinta(e para que se possa escrever a consulta diretamente no c.digo AdvPL, sem ter
que montar c.digos comple(os que di+icultam a leitura do comando, por"m sua utilizao est,
dispon*vel apenas para build ].>>.>N>]59p ou superior.
I.sr,2o Des1ri2o
Begin-'# Alias 6nicia o 2mbedded -'#
2nd-'# Dinaliza a instruo
b(((b 6nstruo literal a ser substitu*da
Column
2speci+ica tipo de converso para campos dos tipos data, num"rico ou
l.gico utilizado em substuio do TC-etDield
be(p.b Htilizado para especi+icar vari,veis, e(press/es e +un/es.
b!oParcerb indica que a consulta no deve passar pela +uno UC<".+e(,er=>
bTable.ccAlias<b 6ndica a tabela a ser utilizada, substitui a +uno UReS?8N"-e>
b!otelb -ubstitui a e(presso :2:#:2:T: = U V@
b4rder7calias<b
e+ine a ordem a utilizar no 4E2E BT, substitui a +uno
S?8Order@AA8i"sB3B@I.deCDe=@EEE
b4rder7ccAlias<, cn6ndice<b
e+ine a ordem a utilizar no 4E2E BT, substitui a +uno
S?8Order@AA8i"sB3B@I.deCorder@.I.di1eEEE
FOrder7A1A8i"sB9 A.Ni1GBF
e+ine a ordem a utilizar no 4E2E BT, substitui a +uno
S?8Order@AA8i"sB3B@D&Ni1GI.deCDe=@1Ni1GEEE
$eL"s(,er=@E Eetorna um vetor com cinco elementos, com as seguintes in+orma/es
da ultima query e(ecutada7
X9Y 1 Alias usado para abrir o cursor
X5Y L 'uery e(ecutada
XaY L;etor de campos com crit"rios de converso especi+icados
XOY LCaso .T. no +oi utilizada 'ueryChange na string original
XNY LTempo em segundos utilizado para a abertura do cursor
Li-i"2Hes7
A utilizao de +un/es dentro do C.digo 2mbedded no " permitida, caso necessite e(ecute a
+uno antes de iniciar o embedded pois a instruo s. recebe vari,veis resolvidas.
!o " poss*vel debugar.
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
10
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
ECe-08o ,i8iI".do " Jor-" ,s,"8
cADQry := SELECT C6_NUM, C6_PRODUTO, C6_QTDVEN, C6_PRCVEN , C6_ENTREG + CRLF
cADQry += FROM + RetSqlName(SC6) + C6 +CRLF
cADQry += WHERE C6_FILIAL = ` + xFilial(SC6) + ' AND D_E_L_E_T_ = ` ` +CRLF
cADQry += ORDER BY +RetSqlOrder(SC6) +CRLF
dbUseArea( .T., TOPCONN, TcGenQry(,,cQuery),TRB, .T., .T. )
TcSetField(TRB, C6_QTDVEN, N, 17, 5 )
TcSetField(TRB, C6_PRCVEN, N, 17, 5 )
TcSetField(TRB, C6_ENTREG, D, 17, 5 )
ECe-08o ,s".do Embedded SQL
BeginSQL Alias TRB
Column C6_QTDVEN as numeric(17,2)
Column C6_PRCVEN as numeric(17,2)
Column C6_ENTREG as date
%NoParser%
SELECT C6_NUM, C6_PRODUTO, C6_QTDVEN, C6_PRCVEN, C6_ENTREG
FROM %Table:SC6% C6
WHERE C6_FILIAL = %xFilial:SC6% AND %NotDel%
ORDER BY %Order:SC6%
EndSQL
#.5. E5ERC6CIOS
9. Dazer um programa utilizando 2mbedded -'# que imprima os seguintes campos7
C"-0os7
!o. Pedido, !ome do Cliente, Codigo do Produto, escrio do Produto, ata de 2missao do
Pedido.
T"/e8"s de A0oio7 SC59 SC:9 SA#9 S&#
5. Dazer um programa utilizando 2mbedded -'#.
P"r"-eros7
Cliente 6nicial e Dinal $-A9&
'uebra por7 ClienteQProduto
Analitico Q -int"tico
C"-0os7
!ome do Cliente, !umero da !ota, ata de 2missao, C.digo do Produto, escrio do Produto,
'uantidade, ;alor Hnit,rio, Total
T"/e8"s de A0oio7 SD29 S'29 SA#9 S&#
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
11
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
2. PRO$RA%AKO ORIENTADA A O&LETOS
A an,lise e pro)eto orientados a ob)etos tGm como meta identi+icar o melhor con)unto de ob)etos para
descrever um sistema de software. 4 +uncionamento deste sistema se d, atrav"s do relacionamento e
troca de mensagens entre estes ob)etos.
!a programao orientada a ob)etos, implementa1se um con)unto de classes que de+inem os ob)etos
presentes no sistema de software. Cada classe determina o comportamento $de+inidos nos m"todos& e
estados poss*veis $atributos& de seus ob)etos, assim como o relacionamento com outros ob)etos.
Programas que utilizam conceitos 44, ao inv"s de de+inir +un/es independentes que so utilizadas em
con)unto, dividem conceitualmente o UproblemaV em partes independentes $ob)etos), que podem
conter atributos que os descrevem, e que implementam o comportamento do sistema
atravs de funes definidas nestes objetos (m"todos). Objetos (e seus mtodos)
fazem referncia a outros objetos e mtodos; o termo envio de mensagens
utilizado para descrever a comunicao que ocorre entre os mtodos dos
diferentes objetos.
!a pr,tica, um programa orientado a ob)etos pode ser descrito como um con)unto de classes pr"1de+inidas
ou de+inidas pelo usu,rio que possuem atributos e m"todos, e que so instanciadas em objetos,
durante a execuo do programa.
2.#. Co.1eios &Msi1os
C8"sse representa um con)unto de ob)etos com diversas caracter*sticas. Hma classe de+ine o
comportamento dos ob)etos, atrav"s de m"todos, e quais estados ele " capaz de manter, atrav"s de
atributos.
2(emplo de classe7 2mpresa.
O/Neo " uma instZncia de uma classe. Hm ob)eto " capaz de armazenar estados atrav"s de seus
atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros
ob)etos.
2(emplo de ob)etos da classe 2mpresa7 0icrosiga, A;P#, Biale.
Ari/,os so os dados ou in+orma/es do ob)eto, basicamente a estrutura de dados que vai representar
a classe.
2(emplos7
Duncion,rio7 nome, endereo,tele+one
Cursos7 nome, Tempo, preo
Alunos7 !ome, endereco, tele+one
%Oodos de+inem as habilidades de cada ob)eto.
Biale " uma instZncia da classe 2mpresa$ob)eto&, que tem habilidade para dar suporte, implementada
atrav"s do m"todo -uporteCliente$&. A ao s. ocorre quando o m"todo " invocado atrav"s do ob)eto, no
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
12
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
caso Biale. entro do programa, a utilizao de um m"todo deve a+etar apenas um ob)eto em particulard
Todas as empresas podem dar suporte ao cliente, mas vocG quer que apenas a Biale de o suporte.
!ormalmente, uma classe possui diversos m"todos, que no caso da classe empresa poderiam ser treina$&,
atendetele+one$& .
%e.s"+e- " uma chamada a um ob)eto para invocar um de seus m"todos, ativando um comportamento
descrito por sua classe. Tamb"m pode ser direcionada diretamente a uma classe.
So/re1"r+" " a utilizao do mesmo nome para s*mbolos ou m"todos com opera/es ou +uncionalidades
distintas. 3eralmente di+erencia1se os m"todos pela sua assinatura.
4er".2" " o mecanismo pelo qual uma classe $sub1classe& pode estender outra classe $super1classe&,
aproveitando seus comportamentos $m"todos& e estados poss*veis $atributos&. \, \erana mCltipla
quando uma sub1classe possui mais de uma super1classe. 2ssa relao " normalmente chamada de
relao 8" um8.
Hm e(emplo de herana7 Dilial " super1classe de 2mpresa. 4u se)a, uma Dilial " uma empresa.
Asso1i"2o " o mecanismo pelo qual um ob)eto utiliza os recursos de outro. Pode tratar1se de uma
associao simples 8usa um8 ou de um acoplamento 8parte de8.
Por e(emplo7 Hma empresa usa um tele+one. A tecla 898 " parte de um tele+one.
E.1"0s,8"-e.o consiste na separao de aspectos internos e e(ternos de um ob)eto. 2ste mecanismo
" utilizado para impedir o acesso direto aos atributos de um ob)eto, disponibilizando e(ternamente apenas
os m"todos que alteram estes estados. 2(emplo7 vocG no precisa conhecer os detalhes dos circuitos de
um tele+one para utiliz,1lo. A carcaa do tele+one encapsula esses detalhes, provendo a vocG uma
inter+ace mais amig,vel $os bot/es, o mono+one e os sinais de tom&.
Po8i-orJis-o " o princ*pio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem
invocar m"todos que tGm a mesma assinatura $lista de parZmetros e retorno& mas comportamentos
distintos, especializados para cada classe derivada, usando para tanto uma re+erGncia a um ob)eto do tipo
da superclasse. A deciso sobre qual o m"todo que deve ser selecionado, de acordo com o tipo da classe
derivada, " tomada em tempo de e(ecuo. !o caso de polimor+ismo, " necess,rio que os m"todos
tenham e(atamente a mesma identi+icao, sendo utilizado o mecanismo de rede+inio de m"todos.
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
13
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
ECe-08o I8,sr"i!o de C8"sse
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
14
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
3. CRIAKO DE LANELAS PADRKO OOP
3.#. TPINDOP
Classe de )anela principal de programa, dever, e(istir apenas uma instZncia deste ob)eto na e(ecuo do
programa.
Pro0ried"des
b6nit Bloco de c.digo. 2(ecutado quando a )anela est, sendo e(ibida.
l2scClose #.gico. -e .T. habilita o c2-C< cancelar a e(ecuo da )anela.
oCtlDocus 4b)eto. 4b)eto contido na )anela que est, com +oco de entrada de dados
.
%Oodos
NeQ 3 0"todo construtor da )anela.
Si."Ce
New( [anTop], [anLeft],[anBottom], [anRight], [acTitle], [nPar6], [oPar7] ,[oPar8],[oPar9], [aoParent], [lPar11],
[lPar1!], [an"lr#ore], [an"lrBac$], [oPar1%], [cPar16], [lPar17], [lPar18], [lPar19], [lPar!&],[alPi'el] (
Argumento Obrigat. Tipo Descrio
)nTop N*o N "oor+ena+a ,ertical -.perior em pi'el- o. caractere-/
)nLeft N*o N "oor+ena+a hori0ontal e-1.er+a em pi'el- o. caractere-/
)nBottom N*o N "oor+ena+a ,ertical inferior em pi'el- o. caractere-/
)nRight N*o N "oor+ena+a hori0ontal inferior em pi'el- o. caractere-/
acTitle N*o " T2t.lo +a 3anela/
nPar6 Re-er,a+o/
oPar7 Re-er,a+o/
oPar8 Re-er,a+o/
oPar9 Re-er,a+o/
)oParent N*o 453 6anela m*e +a 3anela corrente/
lPar11 Re-er,a+o/
lPar1! Re-er,a+o/
an"lr#ore N*o N "or +e f.n+o +a 3anela/
an"lrTe't N*o N "or +o te'to +a 3anela/
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
15
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
oPar1% Re-er,a+o/
cPar16 Re-er,a+o/
lPar17 Re-er,a+o/
lPar18 Re-er,a+o/
lPar19 Re-er,a+o/
lPar!& Re-er,a+o/
)lPi'el N*o Log
7e /T/ (pa+r*o( con-i+era coor+ena+a- pa--a+a- em pi'el-, -e /#/ con-i+era
caractere-/

A1i!"e 1 Ativa $e(ibe& a )anela. Chamar esse m"todo apenas uma vez.
Si."Ce
Activate$Xac-hoSY, XbPar5Y, XbParaY, XbParOY, XbParNY, XbParJY, X ab6nit Y, XbParKY, XbParPY, XbPar9>Y,d
bPar99Y,XbPar95Y ,XbPar9aY, XbPar9OY, XbPar9NY, Xab;alidY, XbPar9]Y, XbPar9KY &
Argumento Obrigat. Tipo Descrio
)c7how
N*o " 89"4N9:;<= para 3anela iconi0a+a o. 8>)?9>9:;<= para 3anela
ma'imi0a+a/
5Par! Re-er,a+o/
5Par@ Re-er,a+o/
5ParA Re-er,a+o/
5Par% Re-er,a+o/
5Par6 Re-er,a+o/
)59nit 7im Bloco ;'ec.ta+o 1.an+o 3anela e-tB -en+o e'i5i+a/
5Par8 Re-er,a+o/
5Par9 Re-er,a+o/
5Par1& Re-er,a+o/
5Par11 Re-er,a+o/
5Par1! Re-er,a+o/
5Par1@ Re-er,a+o/
5Par1A Re-er,a+o/
5Par1% Re-er,a+o/
)5Cali+ 7im Bloco
Bloco +e cD+igo/ ;'ec.ta+o 1.an+o a 3anela for -olicita+a +e fechar/
<e,erB retornar /T/ -e o conteE+o +a 3anela for ,Bli+o, o. /#/ -e n*o/ 7e
o 5loco retornar /#/ a 3anela n*o fecharB/
5Par17 Re-er,a+o/
5Par18 Re-er,a+o/
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
16
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
E.d L -olicita +echamento da )anela.
Si."Ce7 2nd$&
Reor.o
#.gico. .T. se encerrou a )anela e .D. se no.
Ce.er L Centraliza a )anela.
Si."Ce7 Center$&
Exemplo
#INCLUDE "PROTHEUS.CH"
USER FUNCTION Teste()
Local oWindow
Local abInit:= {||conout("ativando!")}
Local abValid:= {||conout("encerrando!"),.T.}
oWindow:= tWindow():New( 10, 10, 200, 200, "Meu programa",,,,,,,, CLR_WHITE,;
CLR_BLACK,,,,,,,.T. )
oWindow:Activate("MAXIMIZED",,,,,,abInit,,,,,,,,,abValid,,)
/* os comandos abaixo proporcionam o mesmo resultado
DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE "Meu programa" COLOR
CLR_WHITE,CLR_BLACK
ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid
*/
Return NIL
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
17
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
3.2. %SDIALO$
0-ialog deve ser utilizada como padro de )anela para entrada de dados. 0-ialog " um tipo de )anela
di,logo modal, isto ", no permite que outra )anela ativa receba dados enquanto esta estiver ativa.
%Oodos
NeQ
Des1ri2o 0"todo construtor da classe.
Sintaxe New([anTop], [anLeft], [anBottom], [anRight], [ac"aption], [cPar6], [nPar7], [lPar8], [nPar9],
[an"lrTe't], [an"lrBac$], [oPar1!], [aoFn+], [alPi'el], [oPar1%], [oPar16], [lPar17](
Argumento Obrigat. Tipo Descrio
anTop N*o N "oor+ena+a ,ertical -.perior em pi'el- o. caractere-/
anLeft N*o N "oor+ena+a hori0ontal e-1.er+a em pi'el- o. caractere-/
anBotom N*o N "oor+ena+a ,ertical inferior em pi'el- o. caractere-/
anRight N*o N "oor+ena+a hori0ontal +ireita em pi'el- o. caractere-/
ac"aption N*o " T2t.lo +a 3anela/
cPar6 Re-er,a+o/
nPar7 Re-er,a+o/
lPar8 Re-er,a+o/
nPar9 Re-er,a+o/
an"lrTe't N*o N "or +o te'to/
an"lrBac$ N*o N "or +e f.n+o/
oPar1! Re-er,a+o/
aoFn+ N*o 453 6anela m*e +a 3anela a -er cria+a, pa+r*o G a 3anela principal +o programa/
alPi'el N*o LDg 7e /T/ con-i+era a- coor+ena+a- pa--a+a- em pi'el-, -e /#/ con-i+era caractere-/
oPar1% Re-er,a+o/
oPar16 Re-er,a+o/
nPar17 Re-er,a+o/
Exemplo
#INCLUDE protheus.ch
User Function Teste()
// cria dilogo
Local oDlg:=MSDialog():New(10,10,300,300,Meu dialogo,,,,,CLR_BLACK,CLR_WHITE,,,.T.)

// ativa dilogo centralizado
oDlg:Activate(,,,.T.,{||msgstop(validou!),.T.},,{||msgstop(iniciando.) )
Return
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
18
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
E?,i!"8R.1i"s
A utilizao dos includes nos permitem a utilizao dos ob)etos a partir de equivalGncias, ve)a a seguir7
#xcommand DEFINE MSDIALOG <oDlg> ;
[ <resource: NAME, RESNAME, RESOURCE> <cResName> ] ;
[ TITLE <cTitle> ] ;
[ FROM <nTop>, <nLeft> TO <nBottom>, <nRight> ] ;
[ <lib: LIBRARY, DLL> <hResources> ] ;
[ <vbx: VBX> ] ;
[ STYLE <nStyle> ] ;
[ <color: COLOR, COLORS> <nClrText> [,<nClrBack> ] ] ;
[ BRUSH <oBrush> ] ;
[ <of: WINDOW, DIALOG, OF> <oWnd> ] ;
[ <pixel: PIXEL> ] ;
[ ICON <oIco> ] ;
[ FONT <oFont> ] ;
[ <status: STATUS> ] ;
=> ; //Equivalencia
<oDlg> = MsDialog():New(<nTop>, <nLeft>, <nBottom>, <nRight>, <cTitle>, <cResName>, <hResources>,;
<.vbx.>, <nStyle>, <nClrText>, <nClrBack>, <oBrush>, <oWnd>, <.pixel.>,;
<oIco>, <oFont> , <.status.> )
ECe-08o ,iiI".do Jor-" e?,i!"8e.e " C8"sse %SDi"8o+
#INCLUDE protheus.ch
User Function fTela1()
Local nVar := 0
Private oDlg
Define MSDialog oDlg Title OemToAnsi("Titulo da janela") From ! To "#!$% &ixel
@05,10 To 50,180 Pixel
@15,20 Say "Colocar aqui a mensagem que quiser" Pixel Of oDlg
@25,20 MSGet oVar Var nVar Picture "@E 999,999.99" Size 50,10 Pixel Of oDlg
@70,20 Button oBtnOk Prompt "&Ok" Size 30,15 Pixel ;
Action (msginfo("Cliquei no OK"), Close(oDlg)) Of oDlg
@70,80 Button oBtnCancel Prompt "&Cancelar" Size 30,15 Pixel ;
Action (msginfo("Cliquei no Cancelar"), oDlg:End()) Cancel Of oDlg
Acti'ate MSDialog oDlg (entered
Static Function Close
oDlg:End()
Return
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
19
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
3.3. T'ONT
Classe que encapsula +onte de edio.
%Oodos
NeQ Construtor do ob)eto
Si."Ce !eS$Xac!ameY, XnPar5Y, Xan\eightY, XlParOY, XalBoldY, XnParJY, XlPar]Y,d
XnParKY, Xal6talicY, XalHnderlineY&
Argumento Obrigat. Tipo Descrio
acName N*o " "aractere, opcional/ Nome +a fonte, o pa+r*o G 8)rial=/
nPar! Re-er,a+o/
anHeight N*o N N.mGrico, opcional/ Tamanho +a fonte/ 4 pa+r*o G I11/
lParA Re-er,a+o/
)lBol+ N*o Log 7e /T/ o e-tilo +a fonte -erB negrito/
nPar6 Re-er,a+o/
lPar7 Re-er,a+o/
nPar8 Re-er,a+o/
al9talic N*o Log 7e /T/ o e-tilo +a fonte -erB itBlico/
alJn+erline N*o Log 7e /T/ o e-tilo +a fonte -erB -.5linha+o/
Exemplo
#include protheus.ch
User Function Teste()
Local oDlg, oSay
)ocal oFont*= TFont()*+e,(-(ourier +e,.!!/"0!1T1)
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE Minha tela com Fonte Courier New PIXEL
// apresenta o tSay com a fonte Courier New //
oSay:= tSay():New(10,10,{||para exibir},oDlg,,oFont,,,,.T.,CLR_WHITE,CLR_RED,100,20)
oSay:lTransparent:= .T.
ACTIVATE MSDIALOG oDlg CENTERED
Return
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
20
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
ECe-08o ,iiI".do Jor-" e?,i!"8e.e " C8"sse T'o.
#include "protheus.ch"
User Function Telafont()
Local oDlg, oSay, oFont
D2F3+2 FO+T oFont +ame "(ourier +e," S342 !/"0 5O)D
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 ;
TITLE "Minha tela Courier New" PIXEL
@ 010,010 SAY "para exibir" SIZE 100,20 FONT oFont;
COLOR CLR_RED PIXEL of ODlg
ACTIVATE MSDIALOG oDlg CENTERED
Return
3.;. TCONTROL
Classe abstrata me de todos os controles edit,veis. tControl " a classe comum entre todos os
componentes visuais edit,veis.
Pro0ried"des7
l0odi+ied
#.gico. -e .T. indica que o conteCdo da vari,vel associada ao controle +oi
modi+icado.
lEead4nly
#.gico. -e .T. o conteCdo da vari,vel associada ao controle permanecer, apenas
para leitura.
hParent !um"rico. \andle $identi+icador& do ob)eto sobre o qual o controle +oi criado.
bChange
Bloco de c.digo. 2(ecutado quando o estado ou conteCdo do controle "
modi+icado pela ao sobre o controle.
%Oodos
Se'o1,s Dora mudana do +oco de entrada de dados para o controle.
Si."Ce7 -et+ocus$&
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
21
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
3.5. T&UTTON
Htilize a classe tButton para criar um controle visual do tipo boto.
Pro0ried"des7
lProcessing #.gico. -e .T. indica o boto est, e+etuando uma ao.
bAction Bloco de c.digo. 2(ecutado quando o boto " pressionado.
%Oodos
NeQ Construtor do ob)eto
Si."Ce New([anRow], [an"ol], [ac"aption], [aoFn+], [a5)ction], [anFi+th], [anHeight], [nPar8],
[ao#ont], [lPar1&], [alPi'el],[lPar1!],[cPar1@], [lPar1A], [a5Fhen], [5Par16], [lPar17](
Argumento Obrigat. Tipo Descrio
anRow N*o N N.mGrico, opcional/ "oor+ena+a ,ertical em pi'el- o. caratere-/
an"ol N*o N N.mGrico, opcional/ "oor+ena+a hori0ontal em pi'el- o. caractere-/
ac"aption N*o " Tit.lo +o 5ot*o/
aoFn+ N*o 453 6anela o. controle on+e o 5ot*o +e,erB -er cria+o/
a5)ction N*o Bloco Bloco 1.e +e,erB -er aciona+o 1.an+o o 5ot*o for pre--iona+o/
anFi+th N*o N Larg.ra +o 5ot*o em pi'el-/
anHeight N*o N )lt.ra +o 5ot*o em pi'el-/
nPar8 Re-er,a+o/
ao#ont N*o 453 453eto tipo t#ont com proprie+a+e- +a fonte .tili0a+a para o t2t.lo +o 5ot*o/
lPar1& Re-er,a+o/
alPi'el
N*o Log 7e /T/ con-i+era a- coor+ena+a- pa--a+a- em pi'el-, -e /#/ (pa+r*o( con-i+era em
caractere-/
lPar1! Re-er,a+o/
cPar1@ Re-er,a+o/
lPar1A Re-er,a+o/
a5Fhen
N*o Bloco ;'ec.ta+o 1.an+o m.+anKa +e foco +e entra+a +e +a+o- e-tB -en+o efet.a+a na
3anela on+e o controle foi cria+o/ 4 5loco +e,e retornar /T/ -e o controle +e,e
permanecer ha5ilita+o o. /#/ -e n*o/
5Par16 Re-er,a+o/
lPar17 Re-er,a+o/
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
22
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
Exemplo
#include protheus.ch
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo, aItems:= {item1,item2,item3}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE Meu Combo
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop(Mudou item)},,,,.T.,,,,,,,,,cCombo)
// Boto para fechar a janela
o5utton*=t5utton()*+e,($!"!.fec6ar.!oDlg!788oDlg*2nd()9!:
100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( O valor +cCombo )
Return nil
ECe-08o ,iiI".do Jor-" e?,i!"8e.e " C8"sse T&,o.
#include protheus.ch
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo, aItems:= {item1,item2,item3}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE Meu Combo
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop(Mudou item)},,,,.T.,,,,,,,,,cCombo)
// Boto para fechar a janela
; $!"! 5<TTO+ &=OM&T -fec6ar. A(T3O+ oDlg*2nd() S342 "!> &3?2) of oDlg
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( O valor +cCombo )
Return nil
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
23
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
3.: $AIA
#aKa .ma tela conforme a -eg.ir .tili0an+o o Laia/
Premissas:
J-.Brio +e,e tra0er o nome +o .-.Brio loga+o/
"riar a ta5ela +e moti,o- no 7?% M Ta5ela :9/
"riar .ma ar1.i,o com o- -eg.inte- campo-N 7:&
#ilial " ! O >oti,o " ! O 45-er,aK*o > 1& O J-.ario " 1%
Na com5o +o moti,o +e,e tra0er o- iten- +a ta5ela :9/
4 5ot*o 8-im= +e,e -er ha5ilita+o -omente -e a o5-er,aK*o e-ti,er preenchi+a e o moti,o for +iferente +e
nenh.m,
P.an+o o 5ot*o 8-im= for clica+o a- informaKQe- +a tela +e,er*o -er gra,a+a- na ta5ela 7:&/
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
24
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
3.S %ONTANDO LANELAS
LIST&O5
A sinta(e cl,ssica da linguagem A;P# permite que o componente visual #istBo( implemente dois
tipos distintos de ob)etos7
Lis" si-08es7 lista de apenas uma coluna no +ormato de um vetor, a qual no necessita da
especi+icao de um cabealho.
Lis" 1o- 1o8,."s7 lista com diversas colunas que necessita de um cabealho no +ormato de
um a\eader $array de cabealho&.
LIST&O5 SI%PLES
Si."Ce7
R nLin,n"ol L97TB4? oLi-t5o' C)R nLi-ta 9T;>7 aLi-ta
79:; nLarg,n)lt 4# o<lg P9?;L 4N "H)NL; "H)NL;
P"rT-eros7
nLin,nCol
Po-iK*o +o o53eto Li-tBo' em f.nK*o +a 3anela em 1.e ele -erB +efini+o/
oListox
453eto Li-tBo' 1.e -erB cria+o/
nLista
CariB,el n.mGrica 1.e g.ar+a o item -eleciona+o no Li-tBo'/
aLista
)rraS -imple- com o- iten- +a li-ta/
nLarg,nAlt
<imen-Qe- +o o53eto Li-tBo'/
oOb!eto"e#
453eto +ialog no 1.al o componente -erB +efini+o/
P$%EL
7e informa+o, a- +imen-Qe- -er*o em pi'el/
C&A'(E
Li-ta +e e'pre--Qe- 1.e -erB e'ec.ta+a na -eleK*o +e .m item +o
Li-tBo'/
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
25
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
Exemplo:
#INCLUDE "PROTHEUS.CH"
User Function listbox1()
Local OLISTBOX
Private nLista := 2
Private aLista := {"Linha 1", "Linha 2"}
DEFINE MSDIALOG _oDlg TITLE "ListBox" FROM (210),(210) TO (468),(520) PIXEL
@ 05,05 LISTBOX oList VAR nLista ITEMS aLista PIXEL SIZE 100,100 OF _oDlg ;
ON CHANGE MSGINFO(nLista)
ACTIVATE MSDIALOG _oDlg CENTERED
Return
Resultado:

)o "licar no 9tem +a li-ta aparece a men-agem -eg.inte/
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
26
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
LIST&O5 %ULTIPLOS
Si."Ce7
R nLin,n"ol L97TB4? oLi-t5o' C)R nLi-ta #9;L<7 H;)<;R 8Hea+er1= T 8Hea+er?=
79:; nLarg,n)lt 4# o<lg P9?;L 4N "H)NL; "H)NL;
P"rT-eros7
nLin,nCol
Po-iK*o +o o53eto Li-tBo' em f.nK*o +a 3anela em 1.e ele
-erB +efini+o/
oListox
453eto Li-tBo' 1.e -erB cria+o/
nLista
CariB,el n.mGrica 1.e g.ar+a o item -eleciona+o no Li-tBo'/
)&ea*er+,,...,)&ea*er%,
7tring- i+entifican+o o- t2t.lo- +a- col.na- +o Lri+/
nLarg,nAlt
<imen-Qe- +o o53eto Li-tBo'/
oOb!eto"e#
453eto +ialog no 1.al o componente -erB +efini+o/
P$%EL
7e informa+o, a- +imen-Qe- -er*o em pi'el/
C&A'(E
Li-ta +e e'pre--Qe- 1.e -erB e'ec.ta+a na -eleK*o +e .m
item +o Li-tBo'/
%Oodos7
SetArra-./ >Gto+o o o53eto Li-tBo' 1.e +efine 1.al o arraS contGm o- +a+o- 1.e
-er*o e'i5i+o- no gri+/
Ari/,os7
bLine )tri5.to +o o53eto Li-tBo' 1.e ,inc.la ca+a linha,col.na +o arraS, com
ca+a ca5eKalho +o gri+/
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
27
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
Exemplo:
User Function listbox2() @@ Figura "
Local OLIST
Private nLista := 0
Private aLista := {{"Linha 1 a", "Linha 1 b"},{"Linha2 a", "Linha 2 b"}}
DEFINE MSDIALOG _oDlg TITLE "ListBox" FROM (210),(210) TO (330),(420) PIXEL
// Cria Componentes Padroes do Sistema
@ 05,05 LISTBOX oList FIELDS HEADER "Coluna 1" ,"Coluna 2" PIXEL SIZE 100,50 OF _oDlg
oList:SetArray( aLista )
oList:bLine := {|| { aLista[oList:nAt,1],;
aLista[oList:nAt,2]}}
ACTIVATE MSDIALOG _oDlg CENTERED
Return
--------------------------------------------------------------
User Function listbox3()@@ Figura >
Local OLIST
Local oOk := LoadBitmap( GetResources(), "LBOK" )
Local oNo := LoadBitmap( GetResources(), "LBNO" )
Private nLista := 0
Private aLista := {{.f.,"Linha 1 a", "Linha 1 b"},{.f., "Linha2 a", "Linha 2 b"}}
DEFINE MSDIALOG _oDlg TITLE "ListBox" FROM (210),(210) TO (390),(480) PIXEL
// Cria Componentes Padroes do Sistema
@ 05,05 LISTBOX oList FIELDS HEADER "", "Coluna 1" ,"Coluna 2" PIXEL SIZE 100,80 OF _oDlg;
ON dblClick(aLista[oList:nAt,1] := !aLista[oList:nAt,1],oList:Refresh())
oList:SetArray( aLista )
oList:bLine := {|| {Iif(aLista[oList:nAt,1],oOk,oNo),;
aLista[oList:nAt,2],;
aLista[oList:nAt,3]}}
ACTIVATE MSDIALOG _oDlg CENTERED
Return
figura 1 Figura 2
;. TELAS DE PADRKO %ICROSI$A
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
28
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
Comando/Funo/Objeto 0o*elo1./
Descrio Tela +e >an.tenK*o Jtili0an+o .ma Ta5ela ("a5eKalhoO9ten-(/
Argumento Obrigat. Tipo Descrio
cTit.lo 7im " T2t.lo +a 6anela
a"a5 7im ) )rraS com +a+o- +o ca5eKalho
;'NUcCaria,el,UnLin,n"olV,cTit.loW"ampo,cPict.re,#.ncaoW,ali+,#@,l;+ita,elV
aRo+ 7im ) )rraS com +a+o- +o ro+apG
;'UcCaria,el,UnLin,n"olV,cTit.loW"ampo,cPict.re,#.ncaoW,ali+,#@,l;+ita,elV
aLet+a+o- 7im ) )rraS com po-iKQe- +a get+a+o-
;'NUnLin9ni,n"ol9ni,nLin#im,n"ol#imV
n4pc Nao N >o+o +e operaK*o (@OA 9ncl.i o. altera, 6 altera, o.tro- ,i-.ali0a(
;'N n4pc NX @
cLin4$ N*o " #.nK*o para ,ali+ar linha
;'N 8allwaS-tr.e((=
cT.+4$ Nao " #.nK*o 1.e ,ali+a t.+o
;'N 8allwaS-tr.e((=
a"ol- 7im ) )rraS com o- campo- 1.e po+em -er altera+o-
;'NU8)1W"4<=,=)1WNR;<J:=V
5#A N*o B Bloco +e "D+igo "hama+o pelo #A
;'N UYY>-g)lert(8Te-te=(V
c9nitPo- N*o " 7tring com nome +o- campo- 1.e +e,em -er iniciali0a+o- ao teclar -eta para
5ai'o/
n>a' N*o N NEmero mB'imo +e linha-
a"oor+ N*o ) )rraS com a- coor+ena+a- +a- 3anela-
l<elLet N*o L <etermina -e a linha +a get+a+o- po+e -er apaga+a o. n*o
l>a'imi0e+ N*o L >a'imi0a a tela
aB.tton- N*o ) )rraS com 5otQe- a -erem acre-centa+o- no tool5ar
Retorno Tipo
.T. / .F. (Verdadeiro ou Falso Conirma Operao! "#gico
Comando/Funo/Objeto 0o*elo2./
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
29
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
Descrio Tela +e >an.tenK*o Jtili0an+o +.a- Ta5ela- ("a5ecalhoO9ten-(/
Argumento Obrigat. Tipo Descrio
cTit.lo 7im " T2t.lo +a 6anela
c)lia-1 7im " )lia- +a ta5ela +o "a5eKalho
c)lia-! 7im " )lia- +a Ta5ela +o- 9ten-
a;nchoice 7im ) )rraS com o- campo- +a enchoice("a5ecalho(
cLin4$ N*o " #.nK*o +e Cali+aK*o +e 9ten-
cT.+4Z N*o " #.nK*o +e Cali+aK*o t.+o
n4pc1 N*o N 4pK*o +e e+iK*o +a ;nchoice
n4pc! N*o N 4pK*o +e e+iK*o +a Let+a+o-
c#iel+4$ N*o " #.nK*o +e ,ali+aK*o +o- campo- +a Let+a+o-
lCirt.al N*o L Permite ,i-.ali0ar campo- ,irt.ai- na ;nchoice
nLinha- N*o N N.mero >a'imo +e Linha- +a Let+a+o-
a)lt;nchoice N*o ) )rraS com o- campo- alterB,ei- +a enchoice
n#ree0e N*o N Pt+e +e col.na- 1.e ficar*o congela+a- (+a e-1.er+a pra +ireita(
aB.tton- N*o ) )rraS com 5otQe- a -erem acre-centa+o- ao tool5ar
a"oor+ N*o ) )rraS com a- coor+ena+a- +a tela
a7i0e N*o ) <e-conheci+o
Retorno Tipo
.T. / .F. (Verdadeiro ou Falso Conirma Operao! "#gico
5. %SE5ECAUTO
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
30
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
O/Nei!o
Dazer manuteno autom,tica $incluso, alterao e e(cluso& das rotinas de manipulao de dados do
sistema, automatizando o processo de entrada de dados sem a necessidade de desenvolver rotinas
especi+icas.
V"."+e.s
9& 6nter+ace 7 4s dados de entrada so enviados a rotina em +orma de campos e conteCdos $array& e desta
+orma no " necess,rio a apresentao de nenhuma inter+ace ao usu,rio.
5& -egurana 7 A utilizao de rotinas autom,ticas aumenta consideravelmente a segurana do sistema,
uma vez que utiliza as valida/es padr/es e diminui os problemas causados por atualizao de verso ou
incluso de customiza/es nas rotinas padr/es do sistema.
a& Agilidade no processo 7 Aumenta consideravelmente o tempo de desenvolvimento das customiza/es
que necessitam de entrada de dados. 2(emplo7 6mportao de pedido de venda.
Pro1edi-e.os
2(istem duas maneiras de utilizar a rotina autom,tica, sendo elas7
9. -em 6nter+ace
5. Com 6nter+ace
Para a utilizao da rotina autom,tica sem inter+ace deve1se, con+igurar o ambiente utilizando1se o
comando PE2PAE2 2!;6E4!02!T e chamar diretamente o nome da +uno.
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
31
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
2(emplo7
User Function IncProd()
Local aRotAuto := {}
Local nOpc := 3 // inclusao
Private lMsHelpAuto := .t. // se .t. direciona as mensagens de help para o arq. de log
Private lMsErroAuto := .f. //necessario a criacao, pois sera //atualizado quando houver
//alguma incosistencia nos parametros
PREPARE ENVIRONMENT EMPRESA '99' FILIAL '01' MODULO 'FAT'
Begin Transaction
aRotAuto:= {{'B1_COD' ,'1010' ,Nil},;
{'B1_DESC' ,'Produto teste',Nil},;
{'B1_TIPO' ,'PA' ,Nil},;
{'B1_UM' ,'UN' ,Nil},;
{'B1_LOCPAD' ,'01' ,Nil},;
{'B1_PICM' ,0 ,Nil},;
{'B1_IPI' ,0 ,Nil},;
{'B1_PRV1' ,100 ,Nil},;
{'B1_LOCALIZ' ,'N' ,Nil},;
{'B1_CODBAR' ,'789888800001' ,Nil}}
MSExecAuto({|x,y| mata010(x,y)},aProduto,nOpc)
If lMsErroAuto
DisarmTransaction()
break
EndIf
End Transaction
If lMsErroAuto
/*
Se estiver em uma aplicar normal e ocorrer alguma inconsistncia nos parmetros passados,mostrar
na tela o log informando qual coluna teve a inconsistncia.
*/
Mostraerro()
Return .f.
EndIf
Return .t.
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
32
CURSO ADVPL II
RECURSOS AVANADOS
Verso 3.0 05/2008 Todos direios reser!"dos
Escola conveniada
J para rotinas que possuem interface, devemos usar a MSExecAuto, pois a mesma tem a funo de
guardar o ambiente , executar a funo automtica e retornar de onde parou.
Exemplo:
User Function IncProd()
Local aRotAuto := {}
Local nOpc := 3 // inclusao
Private lMsHelpAuto := .t. // se .t. direciona as mensagens de help para o arq. de log
Private lMsErroAuto := .f. //necessario a criacao, pois sera //atualizado quando houver
//alguma incosistencia nos parametros
Begin Transaction
aRotAuto:= {{'B1_COD' ,'1010' ,Nil},;
{'B1_DESC' ,'Produto teste',Nil},;
{'B1_TIPO' ,'PA' ,Nil},;
{'B1_UM' ,'UN' ,Nil},;
{'B1_LOCPAD' ,'01' ,Nil},;
{'B1_PICM' ,0 ,Nil},;
{'B1_IPI' ,0 ,Nil},;
{'B1_PRV1' ,100 ,Nil},;
{'B1_LOCALIZ' ,'N' ,Nil},;
{'B1_CODBAR' ,'789888800001' ,Nil}}
MSExecAuto({|x,y| mata010(x,y)},aProduto,nOpc)
If lMsErroAuto
DisarmTransaction()
break
EndIf
End Transaction
If lMsErroAuto
/*
Se estiver em uma aplio normal e ocorrer alguma inconsistncia nos parmetros
passados,mostrar na tela o log informando qual coluna teve a inconsistncia.
*/
Mostraerro()
Return .f.
EndIf
Return .t.
A v . # e o n a r d o d a ; i n c i , n I J > K L 0 e t r M C o n c e i o 1 - o P a u l o 1 - P
T e l 7 9 9 N > 9 9 L O K P N Q N > 9 9 L J > K 5 Q P K > K L 9 P K K
2 m a i l Q 0 - ! 7 s u p o r t e R a d v p l . c o m . b r 1 S.S.S.advpl.com.br
33