Você está na página 1de 660

Educao Corporativa

Programao em ADVPL
Completo




Mat ri z Av . Br a z Le me , 1. 717 02511- 000 So Pa ul o SP Br asil .
Tel . : 55 ( 11) 3981- 7001

www. micr osi ga. co m. br



- 2 -

ADVPL Completo



ESTRUTURA DO TREINAMENTO

MDULO 01: Introduo programao ...................................................................................................................... 11
1. Lgica de Programao e Algoritmos .................................................................................................................... 11
1.1. Lgica de Programao ................................................................................................................ 11
1.2. Desenvolvendo algoritmos ............................................................................................................ 12
1.2.1. Estudando algoritmos ................................................................................................................................ 13
1.2.2. Teste de mesa ............................................................................................................................................ 15
2. Estruturas de programao .................................................................................................................................... 16
2.1. Diagrama de bloco ........................................................................................................................ 16
2.2. Estruturas de deciso e repetio ................................................................................................ 19
2.2.1. Estruturas de deciso ................................................................................................................................. 19
2.2.2. Estruturas de repetio .............................................................................................................................. 22
MDULO 02: A linguagem ADVPL ............................................................................................................................... 24
3. Estrutura de um Programa ADVPL ...................................................................................................................... 26
3.1. reas de um Programa ADVPL .................................................................................................. 28
4. Declarao e Atribuio de Variveis .................................................................................................................... 31
4.1. Tipo de Dados ................................................................................................................................ 31
4.2. Declarao de variveis ................................................................................................................ 32
4.3. Escopo de variveis ....................................................................................................................... 33
4.4. Entendendo a influncia do escopo das variveis ...................................................................... 37
4.5. Operaes com Variveis ............................................................................................................. 38
4.5.1. Atribuio de variveis .............................................................................................................................. 38
4.5.2. Operadores da linguagem ADVPL ............................................................................................................ 39
4.5.3. Operao de Macro Substituio ............................................................................................................... 44
4.5.4. Funes de manipulao de variveis ....................................................................................................... 45
5. Estruturas bsicas de programao ....................................................................................................................... 51
5.1. Estruturas de repetio ................................................................................................................ 51
5.1.1. Influenciando o fluxo de repetio ............................................................................................................ 54
5.2. Estruturas de deciso .................................................................................................................... 56
6. Arrays e Blocos de Cdigo ...................................................................................................................................... 60
6.1. Arrays ............................................................................................................................................ 60
6.1.1. Inicializando arrays ................................................................................................................................... 62
6.1.2. Funes de manipulao de arrays ............................................................................................................ 63
6.1.3. Cpia de arrays .......................................................................................................................................... 65
6.2. Listas de Expresses e Blocos de Cdigo .................................................................................... 67
6.2.1. Premissas para utilizao de Blocos de Cdigo ........................................................................................ 67
6.2.2. Lista de expresses .................................................................................................................................... 68
6.2.3. Blocos de Cdigo ...................................................................................................................................... 70
6.2.4. Funes para manipulao de blocos de cdigo ........................................................................................ 72
7. Funes ................................................................................................................................................................... 73
7.1. Tipos e escopos de funes ........................................................................................................... 74
7.2. Passagem de parmetros entre funes ...................................................................................... 77

- 3 -

ADVPL Completo


8. Diretivas de compilao .......................................................................................................................................... 83
MDULO 03: Desenvolvendo pequenas customizaes ................................................................................................ 88
9. ADVPL e o ERP Microsiga Protheus .................................................................................................................... 88
9.1. O Ambiente Protheus ................................................................................................................... 88
9.2. Organizao e configurao inicial do ambiente Protheus ....................................................... 92
9.3. O Configurador do Protheus ....................................................................................................... 98
9.3.1. Funcionalidades Abordadas ...................................................................................................................... 98
9.3.2. Estruturas bsicas da aplicao ERP Protheus .......................................................................................... 98
9.3.3. Acessando o mdulo Configurador ......................................................................................................... 101
9.4. Funcionalidades do Configurador ............................................................................................. 104
9.4.1. Dicionrio de Dados da aplicao ERP ................................................................................................... 105
9.4.2. Adio de tabelas ao Dicionrio de Dados .............................................................................................. 105
9.4.3. Adio de campos as tabelas do Dicionrio de Dados ............................................................................ 108
9.4.4. Adio de ndices para as tabelas do Dicionrio de Dados ..................................................................... 113
9.4.5. Adio de gatilhos para os campos das tabelas do sistema ..................................................................... 116
9.4.6. Criao de Tabelas Genricas ................................................................................................................. 118
9.4.7. Criao de Parmetros ............................................................................................................................. 119
10. TOTVS Development Studio ................................................................................................................................ 121
Desenvolvimento de pequenas customizaes ....................................................................................... 124
11. Acesso e manipulao de bases de dados em ADVPL ......................................................................................... 124
11.1. Diferenas e compatibilizaes entre bases de dados ............................................................... 125
11.2. Funes de acesso e manipulao de dados .............................................................................. 126
11.3. Diferenciao entre variveis e nomes de campos ................................................................... 131
11.4. Controle de numerao seqencial ............................................................................................ 132
12. Customizaes para a aplicao ERP .................................................................................................................. 133
12.1. Customizao de campos Dicionrio de Dados ..................................................................... 134
12.1.1. Validaes de campos e perguntas ..................................................................................................... 134
12.1.2. Pictures de formao disponveis ....................................................................................................... 136
12.2. Customizao de gatilhos Configurador ................................................................................ 138
12.3. Customizao de parmetros Configurador ......................................................................... 139
12.3.1. Funes para manipulao de parmetros .......................................................................................... 139
12.3.2. Cuidados na utilizao de um parmetro ............................................................................................ 140
12.4. Pontos de Entrada Conceitos, Premissas e Regras ............................................................... 141
13. Interfaces visuais .................................................................................................................................................. 142
13.1. Sintaxe e componentes das interfaces visuais ........................................................................... 142
13.2. Interfaces padres para atualizaes de dados ........................................................................ 145
13.2.1. AxCadastro() ...................................................................................................................................... 145
13.2.2. MBrowse() .......................................................................................................................................... 146
13.2.3. AxFunctions() ..................................................................................................................................... 150
APNDICES .................................................................................................................................................................. 152
BOAS PRTICAS DE PROGRAMAO .................................................................................................................... 152
14. Utilizao de Identao ........................................................................................................................................ 152
15. Capitulao de Palavras-Chave ........................................................................................................................... 153
15.1. Palavras em maisculo ............................................................................................................... 154

- 4 -

ADVPL Completo


16. Utilizao da Notao Hngara ........................................................................................................................... 154
17. Palavras reservadas .............................................................................................................................................. 155
LISTAS DE EXERCCIOS ........................................................................................................................................... 156
Mdulo 01: Introduo programao ................................................................................................. 156
Mdulo 02: A linguagem ADVPL ........................................................................................................... 157
Mdulo 03: Desenvolvendo pequenas customizaes ........................................................................... 160
MDULO 04: Desenvolvendo aplicaes em ADVPL ................................................................................................. 162
18. A linguagem ADVPL ............................................................................................................................................ 162
19. Estrutura de um Programa ADVPL .................................................................................................................... 164
19.1. reas de um Programa ADVPL ................................................................................................ 166
20. Declarao e Atribuio de Variveis .................................................................................................................. 169
20.1. Tipo de Dados .............................................................................................................................. 169
20.2. Declarao de variveis .............................................................................................................. 170
20.3. Escopo de variveis ..................................................................................................................... 171
20.4. Entendendo a influncia do escopo das variveis .................................................................... 175
21. Regras adicionais da linguagem ADVPL ............................................................................................................ 176
21.1. Palavras reservadas .................................................................................................................... 176
21.2. Pictures de formatao disponveis ........................................................................................... 177
22. Programas de Atualizao .................................................................................................................................... 178
22.1. Modelo1() ou AxCadastro() ....................................................................................................... 179
22.2. Modelo2() ..................................................................................................................................... 181
22.2.1. Componentes de uma tela no formato Modelo 2 ................................................................................ 181
22.2.2. Estrutura de um programa utilizando a Modelo2() ............................................................................. 189
22.2.3. Funo Modelo2() .............................................................................................................................. 197
22.3. Modelo3() ..................................................................................................................................... 201
22.3.1. Estrutura de um programa utilizando a Modelo3() ............................................................................. 204
22.3.2. Funo Modelo3() .............................................................................................................................. 213
22.4. Mbrowse() .................................................................................................................................... 217
22.4.1. AxFunctions() ..................................................................................................................................... 222
22.4.2. FilBrowse() ......................................................................................................................................... 224
22.4.3. EndFilBrw() ........................................................................................................................................ 224
22.4.4. PesqBrw() ........................................................................................................................................... 225
22.4.5. BrwLegenda () .................................................................................................................................... 225
22.5. MarkBrowse() ............................................................................................................................. 229
23. Arquivos e ndices Temporrios ........................................................................................................................... 233
23.1. Utilizao de arquivos e ndices temporrios ........................................................................... 233
23.2. Funes para manipulao de arquivos e ndices temporrios .............................................. 233
23.2.1. CriaTrab() ........................................................................................................................................... 233
23.2.2. dbUseArea() ....................................................................................................................................... 234
23.2.3. IndRegua() .......................................................................................................................................... 234
24. Relatrios no grficos ......................................................................................................................................... 238
24.1.1. Estrutura de relatrios baseados na SetPrint() .................................................................................... 238
25. Manipulao de arquivos I ................................................................................................................................... 248

- 5 -

ADVPL Completo


25.1. Gerao e leitura de arquivos em formato texto ...................................................................... 248
1. Famlia de funes de gravao e leitura de arquivos texto .................................................................... 249
2. Famlia de funes de gravao e leitura de arquivos texto .................................................................... 254
26. Oficina de programao I .................................................................................................................................... 256
26.1. Interfaces com sintaxe clssica ................................................................................................... 256
26.2. Rguas de processamento ........................................................................................................... 259
26.2.1. RptStatus() .......................................................................................................................................... 259
SETREGUA() .............................................................................................................................................. 261
INCREGUA() .............................................................................................................................................. 262
26.2.2. Processa() ........................................................................................................................................... 263
SETPROC() ................................................................................................................................................. 265
INCPROC() ................................................................................................................................................. 265
26.2.3. MsNewProcess(). ............................................................................................................................... 266
26.2.4. MsAguarde(). ..................................................................................................................................... 268
26.2.5. MsgRun(). ........................................................................................................................................... 270
26.3. ListBox() ...................................................................................................................................... 271
26.3.1. ListBox simples .................................................................................................................................. 271
26.3.2. ListBox mltiplas colunas .................................................................................................................. 274
26.4. ScrollBox() ................................................................................................................................... 276
26.5. ParamBox() .................................................................................................................................. 280
MDULO 05: Introduo a orientao objetos ......................................................................................................... 285
27. Conceitos de orientao objetos ........................................................................................................................ 285
27.1. Definies ..................................................................................................................................... 285
27.2. Conceitos Bsicos ........................................................................................................................ 288
27.3. O Modelo de Objetos (OMT) ..................................................................................................... 289
27.3.1. Objetos e Classes ................................................................................................................................ 289
27.3.2. Atributos ............................................................................................................................................. 290
27.3.3. Operaes e Mtodos ......................................................................................................................... 291
27.3.4. Sugestes de desenvolvimento ........................................................................................................... 292
28. Orientao a objetos em ADVPL ......................................................................................................................... 293
28.1. Sintaxe e operadores para orientao a objetos ....................................................................... 293
28.2. Estrutura de uma classe de objetos em ADVPL ...................................................................... 295
28.3. Implementao dos mtodos de uma classe em ADVPL ......................................................... 296
MDULO 06: ADVPL Orientado objetos I ............................................................................................................... 300
29. Componentes da interface visual do ADVPL ...................................................................................................... 300
29.1. Particularidades dos componentes visuais ................................................................................ 307
29.1.1. Configurando as cores para os componentes ...................................................................................... 307
30. Aplicaes com a interface visual do ADVPL ..................................................................................................... 309
30.1. Captura de informaes simples (Multi-Gets) ......................................................................... 309
30.1.1. Enchoice() .......................................................................................................................................... 310
30.1.2. MsMGet() ........................................................................................................................................... 312
30.2. Captura de mltiplas informaes (Multi-Lines) ..................................................................... 314
30.2.1. MsGetDB() ......................................................................................................................................... 315
30.2.2. MsGetDados() .................................................................................................................................... 319
30.2.3. MsNewGetDados() ............................................................................................................................. 323
30.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados() ............................................... 328

- 6 -

ADVPL Completo


30.3. Barras de botes .......................................................................................................................... 333
30.3.1. EnchoiceBar() ..................................................................................................................................... 333
30.3.2. TBar() ................................................................................................................................................. 335
30.3.3. ButtonBar ........................................................................................................................................... 336
30.3.4. Imagens pr-definidas para as barras de botes .................................................................................. 339
APNDICES .................................................................................................................................................................. 340
BOAS PRTICAS DE PROGRAMAO .................................................................................................................... 340
31. Arredondamento ................................................................................................................................................... 340
32. Utilizao de Identao ........................................................................................................................................ 340
33. Capitulao de Palavras-Chave ........................................................................................................................... 342
33.1. Palavras em maisculo ............................................................................................................... 342
34. Utilizao da Notao Hngara ........................................................................................................................... 343
35. Tcnicas de programao eficiente ...................................................................................................................... 343
LISTAS DE EXERCCIOS ........................................................................................................................................... 353
Mdulo 04.1.: Desenvolvendo aplicaes em ADVPL ......................................................................... 353
Mdulo 04.2.: Oficina de Programao I .............................................................................................. 358
Mdulo 05: Introduo a orientao objetos ..................................................................................... 360
Mdulo 06: ADVPL orientado objetos I ............................................................................................ 361
Projeto: Avaliao prtica do treinamento de ADVPL Intermedirio ............................................... 363
MDULO 07: ADVPL Orientado objetos II .............................................................................................................. 364
36. Componentes da interface visual do ADVPL ...................................................................................................... 364
TSRVOBJECT() .......................................................................................................................................... 366
TFONT() ...................................................................................................................................................... 369
MSDIALOG() .............................................................................................................................................. 370
TDIALOG() ................................................................................................................................................. 371
TWINDOW() ............................................................................................................................................... 374
TCONTROL() .............................................................................................................................................. 377
BRGETDDB() ............................................................................................................................................. 378
MSCALEND() ............................................................................................................................................. 381
MSCALENDGRID() ................................................................................................................................... 383
MSSELBR() ................................................................................................................................................. 385
MSWORKTIME() ....................................................................................................................................... 388
SBUTTON() ................................................................................................................................................ 391
TBAR() ........................................................................................................................................................ 393
TBITMAP() ................................................................................................................................................. 395
TBROWSEBUTTON() ................................................................................................................................ 397
TBTNBMP() ................................................................................................................................................ 399
TBTNBMP2() .............................................................................................................................................. 401
TBUTTON() ................................................................................................................................................ 403
TCBROWSE() ............................................................................................................................................. 405
TCHECKBOX() .......................................................................................................................................... 409
TCOLORTRIANGLE() ............................................................................................................................... 411
TCOMBOBOX() ......................................................................................................................................... 413
TFOLDER() ................................................................................................................................................. 416
TGET() ......................................................................................................................................................... 418
TGROUP() ................................................................................................................................................... 420
THBUTTON() ............................................................................................................................................. 422
TIBROWSER() ............................................................................................................................................ 423
TLISTBOX() ................................................................................................................................................ 425
TMENU() ..................................................................................................................................................... 429

- 7 -

ADVPL Completo


TMENUBAR() ............................................................................................................................................ 430
TMETER() ................................................................................................................................................... 431
TMSGRAPHIC() ......................................................................................................................................... 434
TMSGBAR() ................................................................................................................................................ 440
TMSGITEM() .............................................................................................................................................. 442
TMULTIBTN() ............................................................................................................................................ 443
TMULTIGET() ............................................................................................................................................ 446
TOLECONTAINER() .................................................................................................................................. 448
TPAGEVIEW() ............................................................................................................................................ 450
TPANEL() ................................................................................................................................................... 452
TRADMENU() ............................................................................................................................................ 453
TSBROWSE() .............................................................................................................................................. 457
TSAY() ........................................................................................................................................................ 461
TSCROLLBOX() ......................................................................................................................................... 463
TSIMPLEEDITOR() .................................................................................................................................... 464
TSLIDER() .................................................................................................................................................. 469
TSPLITTER() .............................................................................................................................................. 472
TTABS() ...................................................................................................................................................... 476
TTOOLBOX() ............................................................................................................................................. 478
TWBROWSE() ............................................................................................................................................ 481
VCBROWSE() ............................................................................................................................................. 485
36.1. Particularidades dos componentes visuais ................................................................................ 491
36.1.1. Configurando as cores para os componentes ...................................................................................... 491
37. Aplicaes com a interface visual do ADVPL ..................................................................................................... 493
37.1. Captura de informaes simples (Multi-Gets) ......................................................................... 493
37.1.1. Enchoice() .......................................................................................................................................... 494
37.1.2. MsMGet() ........................................................................................................................................... 496
37.2. Captura de mltiplas informaes (Multi-Lines) ..................................................................... 498
37.2.1. MsGetDB() ......................................................................................................................................... 499
37.2.2. MsGetDados() .................................................................................................................................... 503
37.2.3. MsNewGetDados() ............................................................................................................................. 507
37.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados() ............................................... 512
37.3. Barras de botes .......................................................................................................................... 517
37.3.1. EnchoiceBar() ..................................................................................................................................... 517
37.3.2. TBar() ................................................................................................................................................. 519
37.3.3. ButtonBar ........................................................................................................................................... 520
37.3.4. Imagens pr-definidas para as barras de botes .................................................................................. 523
38. Outras aplicaes da interface visual do ADVPL ............................................................................................... 524
38.1. MaWndBrowse() ......................................................................................................................... 524
38.1.1. Enchoice para Arquivos Temporrios ................................................................................................ 527
38.2. DbTree() ....................................................................................................................................... 537
38.3. MsSelect() ..................................................................................................................................... 542
39. Introduo relatrios grficos ........................................................................................................................... 545
39.1. TReport() ..................................................................................................................................... 545
39.1.1. Introduo ........................................................................................................................................... 545
Finalidade ..................................................................................................................................................... 545
Descrio ..................................................................................................................................................... 546
Pr-Requisitos .............................................................................................................................................. 546
39.1.2. Impresso do relatrio personalizvel ................................................................................................ 547
39.1.2.1. Parmetros de impresso ............................................................................................................... 547
Impresso ..................................................................................................................................................... 547
Arquivo ........................................................................................................................................................ 547
Spool ............................................................................................................................................................ 548

- 8 -

ADVPL Completo


E-mail ........................................................................................................................................................... 548
Papel ............................................................................................................................................................. 549
Tamanho do papel ........................................................................................................................................ 549
Formato da impresso .................................................................................................................................. 549
Configuraes .............................................................................................................................................. 549
Ttulo ............................................................................................................................................................ 549
Ordem .......................................................................................................................................................... 549
Layout .......................................................................................................................................................... 549
Preview ........................................................................................................................................................ 549
Executar em segundo plano ......................................................................................................................... 550
39.1.3. Personalizao .................................................................................................................................... 550
39.1.3.1. Editando o layout do relatrio ....................................................................................................... 550
Nova estrutura do relatrio TReport: ........................................................................................................... 551
39.1.4. Definindo a Funo ReportDef() ........................................................................................................ 551
DEFINE REPORT ....................................................................................................................................... 552
DEFINE SECTION ..................................................................................................................................... 552
DEFINE CELL ............................................................................................................................................ 552
MDULO 08: Aplicaes ADVPL para o ERP ............................................................................................................ 553
40. Protheus e o TOPCONNECT / TOTVS DbAccess .............................................................................................. 553
40.1. Caractersticas tcnicas com o uso do TOTVS DbAccess ...................................................... 554
Comportamento de Queries Colunas Calculadas ...................................................................................... 554
Comportamento diferenciado com Bandos de Dados PostGres ................................................................... 556
Conceito de ndices Permanentes e Diferenas das RDDs .......................................................................... 557
Funcionamento Interno ................................................................................................................................ 557
Quebra de Compatibilidade com CodeBase/DBF ........................................................................................ 558
Lista dos cdigos de erro do TOPConnect / DbAccess ................................................................................ 559
40.2. Funes ADVPL para TOPCONNECT / TOTVS DbAccess .................................................. 560
Lista das funes de interao com a aplicao TopConnect / DbAccess: .................................................. 560
Lista das funes acessrias utilizadas nos fontes como facilitadoras: ........................................................ 560
Funes de interao com o TopConnect / DbAccess ................................................................................. 561
TCCANOPEN () .......................................................................................................................................... 561
TCCONTYPE() ........................................................................................................................................... 561
TCDELFILE() .............................................................................................................................................. 562
TCGENQRY() ............................................................................................................................................. 563
TCGETDB() ................................................................................................................................................ 563
TCLINK() .................................................................................................................................................... 564
TCQUERY() ................................................................................................................................................ 566
TCQUIT() .................................................................................................................................................... 567
TCSETCONN() ........................................................................................................................................... 567
TCSETFIELD() ........................................................................................................................................... 568
TCSPEXEC() ............................................................................................................................................... 570
TCSPEXIST() .............................................................................................................................................. 572
TCSQLERROR() ......................................................................................................................................... 572
TCSQLEXEC() ............................................................................................................................................ 573
TCSRVTYPE() ............................................................................................................................................ 573
TCUNLINK() .............................................................................................................................................. 574
TCCHKOBJ() .............................................................................................................................................. 575
TCEXEERROR() ......................................................................................................................................... 575
TCPGMEXE() ............................................................................................................................................. 576
TCSYSEXE() ............................................................................................................................................... 576
Funes acessrias para uso em fontes com interao com o TOTVS DbAccess ....................................... 577
CHANGEQUERY() .................................................................................................................................... 577
RETFULLNAME() ...................................................................................................................................... 578
RETSQLCOND() ........................................................................................................................................ 579
RETSQLNAME() ........................................................................................................................................ 579
RETSQLTABLE() ....................................................................................................................................... 580
SQLCOPY() ................................................................................................................................................. 580

- 9 -

ADVPL Completo


SQLORDER() .............................................................................................................................................. 581
SQLTOTRB() .............................................................................................................................................. 582
40.3. Aplicaes com controle de comunio com o Banco de Dados .............................................. 583
40.3.1. MaWndBrowse com Alias Temporrio gerado por Query ................................................................. 583
Exemplo: MaWndBrowse com Alias Temporrio gerado por Query .......................................................... 584
40.3.2. Banco de dados de interface ............................................................................................................... 595
Consideraes relevantes sobre as funes TCLink() e TCSetConn() ......................................................... 595
Consideraes complementares sobre o conceito de Banco de Dados de Interface ..................................... 596
40.4. Embedded SQL Facilitador de Querys ................................................................................. 598
Disponibilidade do Recurso ......................................................................................................................... 598
Caractersticas operacionais - Sintaxe .......................................................................................................... 599
Limitao: .................................................................................................................................................... 599
Erros de Compilao .................................................................................................................................... 600
Erros de Execuo ........................................................................................................................................ 600
Caractersticas operacionais - depurao ..................................................................................................... 601
Funo auxiliar - GETLastQuery() .............................................................................................................. 601
41. Funcionalidade MsExecAuto ............................................................................................................................... 603
Sobre a MsExecAuto e Rotinas Automticas .............................................................................................. 603
Quando utilizar a funcionalidade MsExecAuto ? ......................................................................................... 604
Processos da aplicao ERP com tratamentos para execuo por MsExecAuto .......................................... 604
Quando no utilizar a funcionalidade MsExecAuto ..................................................................................... 605
41.1. Desenvolvendo aplicaes com MsExecAuto ............................................................................ 606
Estrutura de uma rotina com execuo de MsExecAuto .............................................................................. 606
Variveis de controle ................................................................................................................................... 606
Montagem dos arrays de parmetros ............................................................................................................ 606
Definio dos parmetros especficos da rotina que ser executada ............................................................ 610
Controle de transao ................................................................................................................................... 611
Tratamento de mensagens de erro ................................................................................................................ 613
Aplicao completa de importao utilizando MsExecAuto: Carga de imobilizado ................................... 616
42. Recursos de envio de e-mail ................................................................................................................................. 629
Funes para manipulao de e-mails .......................................................................................................... 629
Detalhamento das funes de manipulao de e-mails ................................................................................ 629
CALLPROC() .............................................................................................................................................. 629
MAILSMTPON() ........................................................................................................................................ 630
MAILPOPON() ............................................................................................................................................ 630
MAILSMTPOFF() ....................................................................................................................................... 631
MAILPOPOFF() .......................................................................................................................................... 631
MAILRECEIVE() ........................................................................................................................................ 632
MAILAUTH() .............................................................................................................................................. 633
POPMSGCOUNT() ..................................................................................................................................... 634
MAILSEND() .............................................................................................................................................. 634
MAILGETERR() ......................................................................................................................................... 635
Exemplos de utilizao das funcionalidades de envio e recebimento de e-mail .......................................... 635
Envio de mensagens utilizando sintaxe clssica .......................................................................................... 635
Envio de mensagens utilizando funes ...................................................................................................... 638
Recebimento de mensagens utilizando funes ........................................................................................... 641
43. Integrao bsica com MsOffice .......................................................................................................................... 643
43.1. Exportao para EXCEL ........................................................................................................... 643
DLGTOEXCEL() ........................................................................................................................................ 643
Exemplo de exportao para o Microsoft Excel utilizando a funo DlgToExcel() .................................... 644
APNDICES .................................................................................................................................................................. 646
Relao de imagens para aplicaes visuais .......................................................................................... 646
LISTAS DE EXERCCIOS ........................................................................................................................................... 654

- 10 -

ADVPL Completo


Projeto: Avaliao prtica do treinamento de ADVPL Avanado ...................................................... 659
REFERNCIAS BIBLIOGRFICAS .......................................................................................................................... 660


- 11 -

ADVPL Completo


MDULO 01: Introduo programao

1. Lgica de Programao e Algoritmos

No a pr e ndi z a do de qu al quer l i ngu a ge m de pr ogr a ma o esse nci al dese nvol v er os concei t os
r el aci on a dos a l gi ca e a t cni ca da escri t a de u m progr a ma .

Com f oco nest a necessi da de, est e t pi co i r descr e v er r esu mi da me nt e os concei t os e nvol vi dos
no pr ocesso d e d ese nv ol vi me nt o de u m progr a ma a t r a v s dos concei t os r el aci on a dos :

E Lgi ca de progr a mao
E Al gori t mos
E Di a gr a mas de bl ocos

1.1. Lgica de Programao

Lgica

A l gi ca de progr a mao necess ri a par a pessoas que desej a m t r a bal h ar com
dese nvol vi me nt o de si st e mas e pr ogr a mas, el a per mi t e defi ni r a seq nci a l gi ca par a o
dese nvol vi me nt o. Ent o o que l gi ca?


Lgica de programao a tcnica de encadear pensamentos para atingir
determinado objetivo.


Seqncia Lgica

Est es p e nsa me nt os, pode m ser d escri t os como u ma seq nci a de i nst r ues, qu e d e v e m ser
segui das par a se cu mpri r u ma d et er mi n a da t ar ef a .


Seqncia Lgica so passos executados at atingir um objetivo ou soluo de um
problema.


Instrues

Na li ngu a ge m comu m, e nt e nde - se por i nst r ues u m conj unt o de r egr as ou nor mas d efi ni das
par a a r e ali z ao ou e mpr ego d e al go.

E m i nf or m t i ca , por m, i nst r uo a i nf or mao que i ndi ca a u m comput a dor u ma a o
el e me nt ar a e x ecut ar . Conv m r essal t ar que u ma or de m i sol a da n o per mi t e r e al i z ar o
processo compl et o, par a i sso necess ri o u m conj unt o de i nst r ues col oca das e m or d e m
seqe nci al l gi ca .

Por e x e mpl o, se qui ser mos f a z er u ma omel et e de ba t a t as, pr eci sar e mos col oca r e m pr t i ca
u ma sri e d e i nst r ues : descascar as ba t a t as, ba t er os ov os, f ri t ar as ba t a t as, et c. e vi de nt e
que essas i nst r ues t m qu e ser e x ecut a das e m u ma or de m a de qua da n o se pode
descasca r as ba t a t as d e poi s de f ri t -l as.

Dessa ma nei r a , u ma i nst r u o t oma da e m sep ar a do n o t e m mui t o se nt i do ; par a obt er mos o
r esul t a do, pr eci sa mos col ocar e m pr t i ca o conj unt o de t odas as i nst r ues, na or de m cor r et a .

- 12 -

ADVPL Completo




Instrues so um conjunto de regras ou normas definidas para a realizao ou
emprego de algo. Em informtica, o que indica a um computador uma ao
elementar a executar.


Algoritmo

Um al gori t mo f or mal me nt e u ma seq nci a fi ni t a de passos que l e v a m a e x ecu o d e u ma
t ar ef a . Pode mos p e nsa r e m al gori t mo como u ma r ecei t a , u ma seq nci a de i nst r ues que d o
ca bo d e u ma met a esp ec fi ca . Est as t a r ef as n o pode m ser r edunda nt es ne m subj et i v as na su a
defi ni o, d e v e m ser cl ar as e pr eci sas.

Como e x e mpl os de al gori t mos pod e mos ci t ar os al gori t mos das oper aes bsi cas ( a di o,
mul ti pli cao, di vi so e subt r a o) de n mer os r e ai s deci mai s. Out ros e x e mpl os seri a m os
ma nu ai s de a par el hos el et rni cos, como u m vi deocasset e, que e x pl i ca m passo- a - passo como,
por e x e mpl o, gr a v a r u m e v e nt o.

At mesmo as coi sas mai s si mpl es, pod e m ser descri t as por seq nci as l gi cas, t ai s como :

E Chupar u ma bal a
1. Pegar a bal a ;
2. Ret i r ar o pa pel ;
3. Chupar a bal a ;
4. Jogar o pa p el no li xo.

E Somar doi s n meros qu ai squer
1. Escr e v a o pri mei ro n mer o no r et ngul o A ;
2. Escr e v a o segundo n mer o no r et ngul o B ;
3. Some o n mero do r et ngul o A com n mero do r et ngul o B e col oque o
r esul t a do no r et ngul o C.


1.2. Desenvolvendo algoritmos

Pseudocdigo

Os al gori t mos so descri t os e m u ma li ngu a ge m ch a ma da pse udocdi go. Est e nome u ma
al uso post eri or i mpl e me nt a o e m u ma l i ngu a ge m de pr ogr a mao, ou sej a , qu a ndo f or
utili z a da a li ngua ge m a de pr ogr a ma o pr opri a me nt e di t a como, por e x e mpl o, ADVPL.

Por i sso os al gori t mos so i ndepe nde nt es das li ngua ge ns de pr ogr a mao, se ndo que a o
cont r ri o de u ma li ngua ge m de pr ogr a mao n o e xi st e u m f or mali smo r gi do de como de v e
ser escri t o o al gori t mo.

O al gori t mo de v e ser f ci l de i nt er pr et ar e f ci l de codi fi car. Ou sej a , el e de v e ser o
i nt er medi ri o e nt r e a li ngu a ge m f al a da e a l i ngua ge m d e pr ogr a ma o.

- 13 -

ADVPL Completo



Regras para construo do Algoritmo

Par a escr e v er u m al gori t mo pr eci sa mos descr e v er a seq nci a de i nst r ues, de ma n ei r a
si mpl es e obj et i v a . Pa r a i sso ut ili z ar e mos al gu mas t cni cas :

1. Usar some nt e u m v er bo por f r ase ;
2. I ma gi n ar que voc est dese nv ol v e ndo u m al gori t mo par a pessoas que n o t r a bal h a m
com i nf or m t i ca ;
3. Usar fr ases cur t as e si mpl es ;
4. Ser obj et i vo ;
5. Procur a r usa r pal a vr as que n o t e nh a m se nt i do dbi o.

Fases

Par a i mpl e me nt ar de u m al gori t mo de si mpl es i nt er pr et a o e codi fi cao n ecessri o
i ni ci al me nt e di vi di r o pr obl e ma a pr ese nt a do e m t r s f ases f unda me nt ais, as quai s so :

E ENTRADA: S o os da dos d e e nt r a da do al gori t mo ;
E PROCESSAMENTO: S o os procedi me nt os ut ili z a dos pa r a ch egar ao r esul t a do fi n al ;
E SADA: S o os da dos j processa dos.


1.2.1. Estudando algoritmos

Nest e t pi co ser o de monst r a dos al guns al gori t mos do cot i di a no, os qu ai s f or a m
i mpl e me nt a dos ut ili z a ndo os pri nc pi os descri t os nos t pi cos a nt eri or es.

Mascar um chiclete
Utilizar um telefone pblico carto
Fritar um ovo
Trocar lmpadas
Descascar batatas
Jogar o jogo da forca
Calcular a mdia de notas
Jogar o jogo da velha contra o algoritmo

Mascar um chiclete

1. Pegar o chi cl et e
2. Ret i r ar o pa pel
3. Mast i gar
4. Jogar o pa p el no li xo

Utilizar um telefone pblico - carto

1. Ret i r ar o t el ef one do ga ncho
2. Esp er a r o si nal
3. Col ocar o car t o
4. Di scar o n mer o
5. F al ar no t el ef on e
6. Col ocar o t el ef on e no ga nho

- 14 -

ADVPL Completo



Fritar um ovo

1. Pegar f ri gi dei r a , ovo, l eo e sal
2. Col ocar l eo na fri gi dei r a
3. Asce nd er o f ogo
4. Col ocar a f ri gi dei r a no f ogo
5. Esp er a r o l eo esque nt a r
6. Quebr ar o ov o na f ri gi dei r a
7. Jogar a casca no l i xo
8. Ret i r ar a f ri gi dei r a do f ogo qu a ndo o ovo est i v er no pont o
9. Desl i gar o f ogo
10. Col ocar sal a gost o

Trocar lmpadas

1. Se a l mpa da est i v er f or a do al ca nce, pega r u ma esca da
2. Pegar a l mpa da nov a
3. Se a l mpa da quei ma da est i v er que nt e , p egar u m pa no
4. Ti r ar l mpa da quei ma da
5. Col ocar l mpa da nov a

Descascar batatas

1. Pegar f aca , baci a e ba t a t as
2. Col ocar gu a n a baci a
3. Enqu a nt o houv er ba t a t as, d escasca r as ba t a t as
3. 1. Col ocar as ba t a t as descasca das n a baci a

Jogar o jogo da forca

1. Escol her a pal a vr a
2. Mont ar o di a gr a ma do j ogo
3. Enqu a nt o houv er l acun as v a zi as e o cor po est i v er i ncompl et o :
3. 1. Se acer t ar a l et r a : escr e v er n a l acun a corr esponde nt e
3. 2. Se er r ar a l et r a : d ese nhar u ma pa r t e do cor po n a f orca

Calcular a mdia de notas

1. Enqu a nt o houv er not as a ser e m r ecebi das :
1. 1. Receber a not a ;

2. Some t odas as not as r ecebi das ;
3. Di vi da o t ot al obt i do pel a qu a nt i da de de not as r ecebi das ;
4. Exi ba a mdi a das not as.


Jogar o jogo da velha contra o algoritmo

1. Enqu a nt o e xi st i r u m qua dr a do l i vr e e ni ngu m ga nhou ou per de u o j ogo :
1. 1. Esp er e a j oga da do a dv ersri o, cont i nue depoi s
1. 2. Se ce nt r o est i v er li vr e : j ogue no ce nt r o
1. 3. Se n o, se o a dv ers ri o possui r 2 qu a dr a dos e m li nh a com u m qu a dr a do li vr e,
j ogue nest e qu a dr a do
1. 4. Se n o, se h al gu m ca nt o li vr e, j ogue n est e ca nt o

- 15 -

ADVPL Completo



1.2.2. Teste de mesa

Aps d ese nv ol v er u m al gori t mo el e de v er se mpr e ser t est a do. Est e t est e ch a ma do d e
TESTE DE MESA, que si gni fi ca segui r as i nst r ues do al gori t mo de ma n ei r a pr eci sa par a
v eri fi car se o procedi me nt o ut ili z a do est cor r et o ou n o.

Par a a v al i ar a a pli cao do t est e de mesa , ut ili z ar e mos o al gori t mo de cal cul ar a mdi a de
not as :

Algoritmo: Calcular a mdia de notas

1. Enqua nt o houv er not as a ser e m r ecebi das :
a . Receb er a not a ;

2. Some t odas as not as r ecebi das ;
3. Di vi da o t ot al obt i do pel a qua nti da de de not as r ecebi das ;
4. Exi ba a mdi a das not as.


Teste de mesa:

1. Par a ca da not a i nf or ma da , r eceb er e r egi st r ar n a t a bel a a bai xo :

ID Nota


2. Ao t r mi no das not as, a t a bel a de v er cont er t odas as not as i nf or ma das, como a bai xo :

ID Nota
1 8.0
2 7.0
3 8.0
4 8.0
5 7.0
6 7.0

3. Soma r t odas as not as : 45
4. Di vi di r a soma das not as, pel o t ot al de not as i nf or ma do : 45 / 6 7. 5
5. Exi bi r a mdi a obt i da : Me nsa g e m(Mdi a : 7. 5)






- 16 -

ADVPL Completo



2. Estruturas de programao

2.1. Diagrama de bloco

O di a gr a ma de bl ocos u ma f or ma pa dr oni z a da e efi ca z par a r epr ese nt ar os passos l gi cos d e
u m det er mi n a do processa me nt o.

Com o di a gr a ma pod e mos d efi ni r u ma seq nci a de s mbol os, com si gni fi ca do be m d efi ni do,
por t a nt o, su a pri nci pal f uno a d e f aci li t ar a vi su ali z ao dos passos de u m pr ocessa me nt o.

Simbologia

Exi st e m di v ersos s mbol os e m u m di a gr a ma d e bl oco. No qu a dr o a bai xo est o r epr ese nt a dos
al guns dos s mbol os mai s utili z a dos :

Smbolo Funo

Terminador
I ndi ca o i n ci o e o fi m de u m processa me nt o.

Processamento
Processa me nt o e m ger al .

Entrada
Manual
I ndi ca a e nt r a da de da dos a t r a v s do t ecl a do.

Deciso
I ndi ca u m pont o no qu al de v er ser ef et ua da
u ma escol h a e nt r e du as si t u aes poss v ei s.

Exibio
Most r a os r esul t a dos obt i dos com u m
processa me nt o.

Documento
I ndi ca u m docu me nt o utili z a do pel o
processa me nt o, sej a par a e nt r a da de
i nf or maes ou par a e xi bi o dos da dos
di spon v ei s a ps u m processa me nt o.



Ca da s mbol o i r cont er u ma descri o per t i ne nt e a f or ma com o qu al o
mesmo f oi ut ili z a do no fl uxo, i ndi ca ndo o processa me nt o ou a i nf or ma o
que o mesmo r epr ese nt a .


- 17 -

ADVPL Completo



Representao de algoritmos atravs de diagramas de bloco

Algoritmo 01: Fritar um ovo

1. Pegar fri gi dei r a , ov o, l eo e sal
2. Col oca r l eo n a fri gi dei r a
3. Asce nder o f ogo
4. Col oca r a fri gi dei r a no f ogo
5. Esper ar o l eo esque nt ar
6. Qu ebr a r o ovo n a f ri gi dei r a
7. Joga r a casca no li xo
8. Ret i r ar a f ri gi dei r a do f ogo qu a ndo o ov o est i v er no pont o
9. Desl i gar o f ogo
10. Col oca r sal a gost o




- 18 -

ADVPL Completo



Algoritmo 02: Calcular a mdia de notas

1. Enqua nt o houv er not as a ser e m r ecebi das :
a . Receb er a not a ;

2. Some t odas as not as r ecebi das ;
3. Di vi da o t ot al obt i do pel a qua nti da de de not as r ecebi das ;
4. Exi ba a mdi a das not as.



- 19 -

ADVPL Completo



2.2. Estruturas de deciso e repetio

A ut ili z ao de est r ut ur as de deci so e r ep et i o e m u m al gori t mo per mi t e a r e al i z ao de
aes r el aci ona das a si t uaes que i nfl ue nci a m n a e x ecu o e sol uo do pr obl e ma .

Como f oco n a ut ili z ao da li ngu a ge m ADVPL ser o i l ust r a das as segui nt es est r ut ur as :

E Estruturas de deciso
o I F. . . ELSE
o DO CASE . . . CASE

E Estruturas de repetio
o WHI LE. . . END
o F OR. . . NEXT


2.2.1. Estruturas de deciso

Os coma ndos de d eci so so ut ili z a dos e m al gori t mos cuj a sol uo n o obt i da a t r a v s da
utili z ao de aes mer a me nt e seqe nci ais, p er mi t i ndo que est e a v al i e as condi es
necess ri as par a opt ar por u ma ou out r a ma n ei r a de cont i nuar se u fl uxo.

As est r ut ur as de deci so que ser o a n al i sa das so :

E IF...ELSE
E DO CASE ... CASE

IF...ELSE

A est r ut ur a I F . . . ELSE ( Se / Se n o) p er mi t e a a n li se de u ma condi o e a pa r t i r da qual ser
e x ecut a da u ma de du as aes poss v ei s : se a a n li se da condi o r esul t ar e m u m v al or
v er da dei ro ou se a a n lise da condi o r esul t ar e m u m v al or f al so.

Representao 01: IF...ELSE com aes para ambas as situaes

Ao vinculada ao
resultado
verdadeiro
Anlise da
condio
Verdadeiro Falso
Aes anteriores
...
Continuao do
fluxo aps a
tomada da
deciso
Ao vinculada ao
resultado falso


- 20 -

ADVPL Completo


Est a est r ut ur a p er mi t e ai nda que sej a e x ecut a da a pe n as u ma a o, n a si t uao e m que a a
a n li se da condi o r esul t ar e m u m v al or v er da dei ro.

Representao 02: IF...ELSE somente com ao para situao verdadeira

Ao vinculada ao
resultado
verdadeiro
Anlise da
condio
Verdadeiro
Falso
Aes anteriores
...
Continuao do
fluxo aps a
tomada da
deciso




Apesa r das l i ngua ge ns de pr ogr a mao possu r e m v ari aes pa r a a est r ut ur a
I F. . . ELSE, concei t u al me nt e t odas as r epr ese nt aes pode m ser descri t as co m
base no model o a pr ese nt a do.



A li ngu a ge m ADVPL possui u ma v ari ao par a a est r ut ur a I F . . . ELSE, descri t a
como I F. . . ELSEI F. . . ELSE.

Com est a est r ut ur a poss v el r e al i z ar a a nli se de di v ersas condi es e m
seq nci a , par a as qu ai s ser a v al i a da some nt e a a o da pri mei r a e x pr ess o
cuj o a nli se r esul t ar e m u m v al or v er da dei ro.






- 21 -

ADVPL Completo



DO CASE...CASE

A est r ut ur a DO CASE. . . ENDCASE ( Caso) per mi t e a a nli se de di v ersas condi es consecut i v as,
par a as qu ai s so me nt e a condi o a pri mei r a condi o v er da d ei r a ser su a a o vi ncul a da
e x ecut a da .

O r ecurso d e a n l i se de ml ti pl as condi es necess ri o par a sol uo d e probl e mas mai s
compl e xos, nos quai s as possi bili da des de sol uo super a m a mer a a n li se de u m ni co
r esul t a do v er da d ei ro ou f al so.

Anlise da
condio 1
Verdadeiro
Falso
Aes anteriores
...
Continuao do
fluxo aps a
tomada da
deciso
Ao vinculada a
condio 1
Anlise da
condio 2
Verdadeiro
Ao vinculada a
condio 2
Anlise da
condio N
Verdadeiro
Ao vinculada a
condio N
Falso
Falso
Falso



Apesa r das li ngua ge ns de progr a ma o possu r e m v ari aes par a a est r ut ur a
DO CASE. . . CASE, concei t u al me nt e t odas as r epr ese nt aes pod e m ser
descri t as co m base no model o a pr ese nt a do.

- 22 -

ADVPL Completo



2.2.2. Estruturas de repetio

Os coma ndos d e r ep et io so ut i li z a dos e m al gori t mos n as si t uaes e m qu e necess ri o
r e al i z ar u ma det er mi n a da ao ou u m conj unt o de aes par a u m n mero defi ni do ou
i ndefi ni do de v e z es, ou ai nda e nqu a nt o u ma det er mi n a da condi o f or v er da dei r a .

As est r ut ur as de deci so que ser o a n al i sa das so :

E WHILE...END
E FOR...TO...NEXT

WHILE...END

Nest a est r ut ur a , o conj unt o de aes ser e x ecut a do e nqu a nt o a a n li se de u ma condi o de
r ef er nci a r esul t ar e m u m v al or v er da d ei ro. i mpor t a nt e v eri fi car que o bl oco some nt e ser
e x ecut a do, i ncl usi v e se n a pri mei r a a n li se a condi o r esul t ar e m u m v al or v er da d ei ro.

Representao: WHILE...END

Ao vinculada ao
resultado
verdadeiro
Anlise da
condio
Verdadeiro
Falso
Aes anteriores
...
Continuao do
fluxo
...
Loop






Exi st e m di v ersas v ari aes pa r a a est r ut ur a WHI LE. . . END, n a qu al h a
possi bili da de da pri mei r a e x ecu o ser r e al i z a da se m a a n li se da condi o, a
qu al v al er a pe n as a pa r t i r da segunda e x ecu o.

A li ngu a ge m ADVPL acei t a a si nt a x e DO WHI LE. . . ENDDO, qu e e m out r as
li ngua ge ns r epr ese nt a a si t u ao descri t a a nt eri or me nt e ( a nli se da condi o
some nt e a par t i r da se gunda e x ecu o) , mas e m ADVPL est a si nt a x e t e m o
mesmo ef ei t o do WHI LE. . . END.


- 23 -

ADVPL Completo


FOR...TO...NEXT

Nest a est r ut ur a , o conj unt o de aes ser e x ecut a do u ma qu a nt i da de de v e z es defi ni da ,
nor mal me nt e r ef er e nci a da como passo.

Par a ca da passo r e al i z a do pel a est r ut ur a F OR. . . T O. . . NEXT, ser a v ali a da u ma condi o que
v eri fi car se f oi a t i ngi do o n mero d e e x ecues pr e vi a me nt e defi ni do. Dest a f or ma a
est r ut ur a compr e e nde u m cont rol e de n mero de passos e x ecut a dos, o qual i ncr e me nt a do
n a a nli se da e x pr ess o NEXT.

Se mel h a nt e a est r ut ur a WHI LE. . . END, a pri mei r a ao some nt e ser r e al i z a da medi a nt e u m
r esul t a do v er da d ei ro na a n li se da condi o.

Representao: FOR...TO...NEXT

Ao vinculada ao
resultado
verdadeiro
Anlise da
condio
Verdadeiro
Falso
Aes anteriores
...
Continuao do
fluxo
...
Incrementa o
contador de
passos





A est r ut ur a F OR. . . TO. . . NEXT, dep e nde ndo da li ngu a ge m de progr a mao,
per mi t e a r e ali z ao de u m i ncr e me nt o si mpl es a ca da e x ecu o da i nst r uo
NEXT, ou a a di o de out ro v al or ao cont a dor, o qu al de v er especi fi ca do de
acor do com a si nt a x e da li ngu a ge m.

E m ADVPL pode ser ut ili z a da a i nst r uo STEPS par a al t er ar o v al or a ser
a di ci ona do no cont a dor de passos a ca da e x ecuo da i nst r uo NEXT, se ndo
que est e v al or poder ser a t n ega t i vo, vi a bili z a ndo u ma cont a ge m
decr esce nt e.


- 24 -

ADVPL Completo



MDULO 02: A linguagem ADVPL

A Li ngu a ge m ADVPL t e v e se u i n ci o e m 1994, se ndo n a v er da d e u ma e vol uo n a ut i li z ao de
li ngua ge ns no pa dr o x Base pel a Mi crosi ga Sof t wa r e S. A. ( Cl i pper, Vi su al Obj ect s e d epoi s
Fi v e Wi n) . Com a cri ao da t ecnol ogi a Prot he us, er a necess ri o cri ar u ma li ngua ge m que
supor t asse o pa dr o x Base pa r a a ma nut e no de t odo o cdi go e xi st e nt e do si st e ma de ERP
Si ga Adv a nced. Foi e nt o cri a da a li ngu a ge m ch a ma da Adv a nced Pr ot he us La ngu a ge.

O ADVPL u ma e xt e nso do pa dr o x Base de coma ndos e f unes, oper a dor es, est r ut ur as d e
cont r ol e de fl uxo e pal a vr as r eser v a das, cont a ndo t a mb m co m f unes e coma ndos
di sponi bili z a dos pel a Mi crosi ga que a t or n a u ma li ngu a ge m compl et a par a a cri ao d e
a pli caes ERP pront as par a a I nt er net . Ta mb m u ma l i ngu a ge m ori e nt a da a obj et os e
e v e nt os, p er mi t i ndo a o progr a ma dor d ese nv ol v er a pli caes vi su ais e cri ar su as prpri as
cl asses de obj et os.

Qu a ndo compi l a dos, t odos os ar qui vos d e cdi go t or na m- se uni da des de i nt eli g nci a bsi cas,
cha ma dos APO s ( d e Adv a nced Prot he us Obj ect s) . Tai s APO s s o ma nt i dos e m u m
r eposi t ri o e car r ega dos di n a mi ca me nt e pel o PROTHEUS Ser v er par a a e x ecu o. Como n o
e xi st e a li nk edi o, ou uni o f si ca do cdi go compi l a do a u m det er mi n a do mdul o ou
a pli cao, f unes cri a das e m ADVPL pod e m ser e x ecut a das e m qual quer pont o do a mbi e nt e
Adv a nced Pr ot he us.

O compil a dor e o i nt er pr et a dor da li ngua ge m ADVPL o prpri o ser vi dor PROTHEUS
(PROTHEUS Ser v er ) , e e xi st e u m a mbi e nt e vi su al par a dese nvol vi me nt o i nt egr a do
(PROTHEUSI DE) onde o cdi go pod e ser cri a do, compi l a do e depur a do.

Os progr a mas e m ADVPL pod e m cont er coma ndos ou f unes de i nt erf ace com o usu ri o. De
acor do com t al car act er st i ca , t ai s progr a mas s o subdi vi di dos nas segui nt es ca t egori as :

Programao Com Interface Prpria com o Usurio

Nest a ca t egori a e nt r a m os pr ogr a mas d ese nvol vi dos par a ser e m e x ecut a dos a t r a v s do
t er mi nal r e mot o do Prot he us, o Pr ot he us Re mot e. O Pr ot he us Re mot e a a pli cao
e ncar r ega da da i nt erf ace e da i nt er a o com o usu ri o, se ndo que t odo o pr ocessa me nt o do
cdi go e m ADVPL, o acesso a o ba nco de da dos e o ger e nci a me nt o de cone xes ef et u a do no
Prot h e us Ser v er. O Pr ot he us Re mot e o pri nci pal mei o de acesso a e x ecuo de r ot i n as
escri t as e m ADVPL no Prot h e us Ser v er, e por i sso per mi t e e x ecut ar qu al quer t i po de cdi go,
t e nh a el e i nt erf ace com o usuri o ou n o. Por m nest a ca t egori a so consi der a dos a p e nas os
progr a mas qu e r e al i z e m al gu m ti po de i nt erf ace r e mot a ut i li z a ndo o prot ocol o d e comuni cao
do Prot he us.

Pode m- se cri ar r ot i nas par a a cust omi z ao do si st e ma ERP Mi cr osi ga Prot he us, desde
processos a di ci on ai s a t mesmo r el a t ri os. A gr a nde v a nt a ge m a pr ov ei t ar t odo o a mbi e nt e
mont a do pel os mdul os do ERP Mi crosi ga Prot he us. Por m, com o ADVPL poss v el a t
mesmo cri ar t oda u ma a pli cao, ou mdul o, do comeo.

Todo o cdi go do si st e ma ERP Mi crosi ga Prot he us escri t o e m ADVPL.


Programao Sem Interface Prpria com o Usurio

As rot i n as cri a das se m i nt erf ace so consi der a d as nest a ca t egori a por que ger al me nt e t m u ma
utili z ao mai s espec fi ca do que u m processo a di ci on al ou u m r el a t ri o nov o. Tai s rot i n as n o
t m i nt erf ace com o usu ri o a t r a v s do Pr ot he us Re mot e , e qu al quer t e nt a t i v a nesse se nt i do

- 25 -

ADVPL Completo


( como a cri ao de u ma j a nel a pa dr o) ocasi on ar u ma e xceo e m t e mpo de e x ecu o. Est as
rot i n as so a p e n as processos, ou Jobs, e x ecut a dos no Pr ot he us Ser v er. Al gu mas v e z es, a
i nt erf ace dest as rot i n as fi ca a car go d e a pli caes e xt er n as, dese nvol vi das e m out r as
li ngua ge ns, que s o r espons v ei s por i ni ci ar os pr ocessos no ser vi dor Pr ot he us a t r a v s dos
mei os di spon v ei s de i nt egr ao e con ect i vi da de no Prot h e us.

De acor do com a ut ili z ao e com o mei o de conect i vi da de utili z a do, est as rot i n as so
subca t egori z a das assi m:

E Programao por Processos

Rot i n as escri t as e m ADVPL pode m ser i ni ci a das como pr ocessos i ndi vi du ai s ( se m i nt erf ace) no
Prot h e us Ser v er a t r a v s d e du as ma n ei r as : I ni ci a das por out r a r ot i n a ADVPL a t r a v s d a
cha ma da de f unes como St a r tJob( ) ou CallProc( ) ou i ni ci a das a ut oma t i ca me nt e n a
i ni ci ali z ao do Pr ot he us Ser v er ( qu a ndo pr opri a me nt e confi gur a do) .

E Programao de RPC

At r a v s d e u ma bi bli ot eca d e f unes di spon v el no Prot he us ( u ma API de comuni cao) ,
pode m- se e x ecut ar r ot i n as escri t as e m ADVPL di r et a me nt e no Prot h e us Ser v er, a t r a v s de
a pli caes e xt er n as escri t as e m out r as l i ngu a ge ns. I st o o que se ch a ma de RPC ( d e Re mot e
Procedur e Call , ou Cha ma da de Pr ocedi me nt os Re mot a ) .

O ser vi dor Prot h e us t a mb m pod e e x ecut a r r ot i n as e m ADVPL e m out ros ser vi dor es Pr ot he us
a t r a v s d e cone x o TCP/ I P di r et a ut ili z a ndo o concei t o de RPC. Do mesmo modo, a pl i caes
e xt er n as pod e m r equi si t ar a e x ecu o de r ot i n as escri t as e m ADVPL a t r a v s de con e x o
TCP/ I P di r et a .
Progr a mao Web

O Pr ot he us Ser v er pode t a mb m ser e x ecut a do como u m ser vi dor Web, r esponde ndo a
r equi si es HTTP. No mome nt o dest as r equi si es, pod e e x ecut ar r ot i n as escri t as e m ADVPL
como pr ocessos i ndi vi du ai s, e nvi a ndo o r esul t a do das f unes como r et or no das r equi si es
par a o cli e nt e HTTP ( co mo por e x e mpl o, u m Br owser d e I nt er net ) . Qu al quer rot i n a escri t a e m
ADVPL que n o cont e n h a coma ndos de i nt erf ace pode ser e x ecut a d a a t r a v s d e r equi si es
HTTP. O Pr ot he us per mi t e a compil ao de ar qui vos HTML cont e ndo cdi go ADVPL e mbut i do.
So os ch a ma dos ar qui vos ADVPL ASP, par a a cri ao d e p gi n as di n mi cas.

E Programao TelNet

Tel Net par t e da ga ma de pr ot ocol os TCP/ I P que per mi t e a con e x o a u m comput a dor r e mot o
a t r a v s de u ma a pl i cao cl i e nt e dest e pr ot ocol o. O PROTHEUS Ser v er pod e e mul ar u m
t er mi n al Tel Net , a t r a v s da e x ecu o de r ot i n as escri t as e m ADVPL. Ou sej a , pode- se escr e v er
rot i n as ADVPL cuj a i nt erf ace fi nal ser u m t er mi n al Tel Net ou u m col et or de da dos mv el .





- 26 -

ADVPL Completo



3. Estrutura de um Programa ADVPL

Um progr a ma de comput a dor n a da mai s do que u m gr upo de coma ndos l ogi ca me nt e
di spost os com o obj et i vo de e x ecut ar d et er mi na da t ar ef a . Esses coma ndos s o gr a v a dos e m
u m ar qui vo t e xt o que t r a nsf or ma do e m u ma li ngu a ge m e x ecut v el por u m comput a dor
a t r a v s d e u m pr ocesso cha ma do co mpil ao. A compi l ao subst i t ui os coma ndos d e al t o
n v el ( que os hu ma nos compr e e nde m) por i nst r ues de bai xo n v el ( compr e e ndi da pel o
si st e ma oper aci on al e m e x ecu o no comput a dor ) . No caso do ADVPL, n o o si st e ma
oper aci on al de u m comput a dor que i r e x ecut ar o cdi go compil a do, mas si m o Prot he us
Ser v er.

De nt r o d e u m progr a ma , os coma ndos e f unes ut i li z a dos de v e m segui r r egr as d e si nt a x e da
li ngua ge m utili z a da , poi s caso cont r ri o o pr ogr a ma ser i nt errompi do por er ros. Os er ros
pode m ser d e compi l ao ou de e x ecuo.

Er ros de compi l ao s o a quel es e ncont r a dos n a si nt a x e que n o per mi t e m que o ar qui vo de
cdi go do progr a ma se j a compi l a do. Pode m ser coma ndos esp eci fi ca dos d e f or ma err ne a ,
utili z ao i nv li da de op er a dor es, et c.

Er ros de e x ecuo so a quel es que acont ece m depoi s da compil ao, qu a ndo o progr a ma est
se ndo e x ecut a do. Pod e m ocor r er por i n mer as r a z es, mas g er al me nt e se r ef er e m as f unes
no e xi st e nt es, ou v ari v ei s no cri a das ou i ni ci ali z a das, et c.


Linhas de Programa

As li nh as e xi st e nt es d e nt ro de u m ar qui vo t e x t o de cdi go de progr a ma pode m ser li nh as de
coma ndo, l i nh as de come nt ri o ou l i nhas mi st as.

E Linhas de Comando

Li nh as de coma ndo possue m os co ma ndos ou i nst r ues que ser o e x ecut a das. Por e x e mpl o :

Local nCnt
Local nSoma : = 0
For nCnt : = 1 To 10
nSoma + = nCnt
Ne xt nCnt

E Linhas de Comentrio

Li nh as de come nt ri o possu e m u m t e xt o qu al quer, mas no s o e x ecut a das. Ser v e m a pe n as
par a docu me nt a o e p ar a t or n ar mai s f ci l o e nt e ndi me nt o do pr ogr a ma . Exi st e m t r s f or mas
de se co me nt ar l i nh as de t e xt o. A pri mei r a del as ut ili z ar o si n al de * ( ast eri sco) no comeo
da li nh a :

* Pr ogr a ma par a cl cul o do t ot al
* Aut or : Mi cr osi ga Sof t war e S. A.
* Da t a : 2 de out ubr o d e 2001

- 27 -

ADVPL Completo



Todas as l i nh as i ni ci a das com u m si nal de ast eri sco s o consi der a das como come nt ri o. Pod e -
se ut ili z ar a pal a vr a NOTE ou doi s s mbol os da l et r a " e " comerci al (&&) par a r e al i z ar a f un o
do si n al de ast eri sco. Por m t odas est as f or mas de come nt ri o de li nh as so obsol et as e
e xi st e m a pe n as par a compa t i bili z ao com o pa dr o x Base. A mel hor ma nei r a de come nt ar
li nhas e m ADVPL ut ili z ar du as ba rr as t r a nsv ersai s :

/ / Progr a ma pa r a cl cul o do t ot al
/ / Aut or : Mi cr osi ga Sof t war e S. A.
/ / Da t a : 2 de out ubro d e 2001

Out r a f or ma d e docu me nt ar t e xt os ut i li z ar as barr as t r a nsv ersai s j unt a me nt e com o
ast eri sco, pod e ndo- se come nt ar t odo u m bl oco de t e xt o se m pr eci sar come nt ar l i nh a a li nh a :

/ *
Progr a ma pa r a cl cul o do t ot al
Aut or : Mi cr osi ga Sof t wa r e S. A.
Da t a : 2 de out ubro de 2 001
* /

Todo o t e xt o e ncont r a do e nt r e a a ber t ur a (i ndi ca da pel os car act er es / *) e o f ech a me nt o
(i ndi ca da pel os ca r act er es * / ) consi der a do co mo come nt ri o.

E Linhas Mistas

O ADVPL t a mb m per mi t e que e xi st a m l i nh as de coma ndo com co me nt ri o. I st o poss v el
a di ci ona ndo- se as du as barr as t r a nsv ersai s ( / / ) ao fi n al da li nh a de coma ndo e a di ci on a ndo- se
o t e xt o do come nt ri o :

Local nCnt
Local nSoma : = 0 / / I ni ci ali z a a v ari v el com z er o pa r a a soma
For nCnt : = 1 To 10
nSoma + = nCnt
Ne xt nCnt

E Tamanho da Linha

Assi m como a li nh a f sica , del i mi t a da pel a qua nti da de de car act er es que pode ser di gi t a do no
edi t or de t e xt os ut ili z ado, e xi st e u ma l i nh a consi der a da li nh a l gi ca . A li nh a l gi ca , a quel a
consi der a da pa r a a compil ao como u ma ni ca li nha de coma ndo.

A pri nc pi o, ca da li nha di gi t ada no ar qui vo t e xt o di f er e nci a da a ps o pr essi on a me nt o da t ecl a
< Ent er > . Ou sej a , a l i nh a l gi ca , a li nh a f si ca no a r qui vo. Por m al gu mas v e z es, por
li mi t ao f si ca do edi t or de t e xt o ou por est t i ca , pod e - se " quebr a r " a li nh a l gi ca e m mai s de
u ma li nh a f si ca no ar qui vo t e xt o. I st o ef et u a do ut ili z a ndo- se o si n al de pont o- e- v r gul a ( ; ) .

I f ! E mpt y( cNome) . And. ! E mpt y( cEnd) . And. ; < e nt er >
! E mpt y( cTel ) . And. ! E mpt y( cF a x) . And. ; < e nt er >
! E mpt y( cE mail )

Gr a v a Da dos( cNome, cEnd, cTel , cF a x, cE mai l )

Endi f


- 28 -

ADVPL Completo


Nest e e x e mpl o e xi st e u ma li nh a de coma ndo par a a checa ge m das v ari v ei s utili z a das. Como a
li nha t or n a - se mui t o gr a nde, pode - se di vi di -l a e m mai s de u ma li nh a f si ca utili z a ndo o si n al de
pont o- e- v r gul a . Se u m si nal de pont o- e- v r gul a f or esqueci do nas du as pri mei r as li nh as,
dur a nt e a e x ecu o do progr a ma ocor r er u m err o, poi s a segunda li nh a f si ca ser
consi der a da como u ma segunda li nh a de coma ndo n a compil ao. E dur a nt e a e x ecu o est a
li nha n o t er se nt i do.

3.1. reas de um Programa ADVPL

Apesa r de n o ser u ma li ngua ge m de pa dr es r gi dos com r el ao est r ut ur a do progr a ma ,
i mpor t a nt e i de nti fi car al gu mas de su as pa r t es. Consi der e o pr ogr a ma d e e x e mpl o a bai xo :

# i ncl ude prot he us. ch

/ *
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
| Pr ogr a ma : Cl cul o do F a t ori al |
| Aut or : Mi cr osi ga Sof t war e S. A. |
| Da t a : 02 de out ubr o de 2001 |
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
* /

User F unct i on Cal cF a t or ( )

Local nCnt
Local nResul t a do : = 1 / / Resul t a do do f a t ori al
Local nF a t or : = 5 / / N mer o pa r a o cl cul o

/ / Cl cul o do f a t ori al
For nCnt : = nF a t or To 1 St ep - 1
nResul t a do * = nCnt
Ne xt nCnt

/ / Exi be o r esul t a do n a t el a , a t r a v s da f uno al er t
Al er t ( " O f a t ori al de " + cVal ToCh ar ( nF a t or ) + ;
" " + cVal ToCh ar ( nResul t a do) )

/ / Ter mi n a o pr ogr a ma
Ret ur n

A est r ut ur a d e u m pr ogr a ma ADVPL compost a pel as segui nt es r e as :

E r e a de I d e nt i fi cao
- Decl ar a o dos i ncl udes
- Decl ar a o da f uno
- I d e nt i fi cao do pr ogr a ma

E r e a de Aj ust es I ni ci ai s
- Decl ar a o das v a ri v ei s

E Cor po do Progr a ma
- Pr epa r ao pa r a o processa me nt o
- Processa me nt o

E r e a de Encer r a me nt o

- 29 -

ADVPL Completo



rea de Identificao

Est a u ma r e a que n o obri ga t ri a e d e di ca da a docu me nt ao do progr a ma . Qua ndo
e xi st e nt e, cont m a pe n as come nt ri os e x pl i ca ndo a sua fi n ali da de, da t a de cri ao, a ut or , et c. ,
e a pa r ece no comeo do progr a ma , a nt es de qu al quer li nh a de coma ndo.

O f or ma t o pa r a est a r e a no d efi ni do. Pode - se col ocar qu al quer t i po de i nf or ma o
desej a da e escol her a f or ma t a o a pr opri a da .

# i ncl ude prot he us. ch

/ *
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
| Pr ogr a ma : Cl cul o do F a t ori al |
| Aut or : Mi cr osi ga Sof t war e S. A. |
| Da t a : 02 de out ubr o de 2001 |
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
* /

User F unct i on Cal cF a t or ( )


Opci on al me nt e pode m- se i ncl ui r defi ni es de const a nt es ut ili z a das no progr a ma ou i ncl uso
de ar qui vos de ca b eal ho nest a r e a .

rea de Ajustes Iniciais

Nest a r e a ger al me nt e se f a z e m os a j ust es i ni ci ai s, i mpor t a nt es par a o cor r et o f unci on a me nt o
do progr a ma . Ent r e os a j ust es se e ncont r a m decl ar aes de v ari v ei s, i ni ci ali z aes, a b er t ur a
de ar qui vos, et c. Apesa r do ADVPL no ser u ma li ngu a ge m r gi da e as v ari v ei s poder e m ser
decl ar a das e m qual quer l ugar do progr a ma , aconsel h v el f a z -l o nest a r e a vi sa ndo t or n a r o
cdi go mai s l eg v el e f acili t ar a i de nti fi cao d e v ari v ei s n o ut ili z a das.

Local nCnt
Local nResul t a do : = 0 / / Resul t a do do f a t ori al
Local nF a t or : = 10 / / N mero par a o cl cul o

Corpo do Programa

nest a r e a que se e ncont r a m as l i nh as de cdi go do pr ogr a ma . onde se r e al i z a a t ar ef a
necess ri a a t r a v s da or ga ni z ao l gi ca dest as li nh as de coma ndo. Esp er a - se que as l i nhas de
coma ndo est ej a m or ga ni z a das de t al modo que no fi n al dest a r e a o r esul t a do esper a do sej a
obt i do, sej a el e ar ma z e n a do e m u m ar qui vo ou e m v ari v ei s de me mri a , pront o par a ser
e xi bi do ao usu ri o a t r a v s d e u m r el a t ri o ou n a t el a .

/ / Cl cul o do f a t ori al
For nCnt : = nF a t or To 1 St ep - 1
nResul t a do * = nCnt
Ne xt nCnt

- 30 -

ADVPL Completo



A pr epar a o par a o pr ocessa me nt o f or ma da pel o conj unt o de v ali daes e processa me nt os
necess ri os a nt es da r e ali z ao do pr ocessa me nt o e m si .

Av ali a ndo o processa me nt o do cl cul o do f a t ori al descri t o a nt eri or me nt e , pod e - se d efi ni r que a
v ali dao i ni ci al a ser r e ali z a da o cont e do d a v ari v el nF a t or, poi s a mesma d et er mi n ar a
corr et a e x ecu o do cdi go.


/ / Cl cul o do f a t ori al
nF a t or : = Get F a t or ( )
/ / Get F a t or f uno il ust r a t i v a na qu al a v ari v el r eceb e a i nf or ma o do usu ri o.

I f nF a t or < = 0
Al er t ( I nf or mao i nv li da)
Ret ur n
Endi f

For nCnt : = nF a t or To 1 St ep - 1
nResul t a do * = nCnt
Ne xt nCnt


rea de Encerramento

nest a r e a onde as fi n ali z aes s o ef et u a das. onde os a r qui vos a ber t os so f ech a dos, e o
r esul t a do da e x ecuo do pr ogr a ma ut ili z a do. Pod e - se e xi bi r o r esul t a do ar ma z e n a do e m
u ma v ari v el ou e m u m ar qui vo ou si mpl esme nt e fi n ali z ar, caso a t ar ef a j t e nh a si do t od a
compl et a da no cor po do progr a ma . nest a r e a que se e ncont r a o e ncerr a me nt o do
progr a ma . Todo progr a ma e m ADVPL de v e se mpr e t er mi n ar com a pal a vr a ch a v e r et ur n.

/ / Exi be o r esul t a do n a t el a , a t r a v s da f uno al er t
Al er t ( " O f a t ori al de " + cVal ToCh ar ( nF a t or ) + ;
" " + cVal ToCh ar ( nResul t a do) )

/ / Ter mi n a o pr ogr a ma
Ret ur n










- 31 -

ADVPL Completo



4. Declarao e Atribuio de Variveis

4.1. Tipo de Dados

O ADVPL no u ma li ngua ge m de t i pos r gi dos ( st rongl y t y ped) , o que si gni fi ca que v ari v ei s
de me mri a pode m r eceber di f er e nt es t i pos de da dos dur a nt e a e x ecuo do progr a ma .

As v a ri v ei s pode m t a mb m cont er obj et os, mas os t i pos pri mri os da l i ngu a ge m so :

Numrico

O ADVPL n o di f er e nci a v al or es i nt ei ros de v al or es com pont o fl ut ua nt e, por t a nt o pode m- se
cri ar v ari v ei s nu mri cas co m qu al quer v al or de nt ro do i nt er v al o per mi t i do. Os segui nt es
el e me nt os s o do t i po de da do nu mri co :

2
43. 53
0. 5
0. 00001
1000000

Uma v ari v el do t i po de da do nu mri co pode cont er u m n mer o de d e z oi t o d gi t os i ncl ui ndo o
pont o fl ut u a nt e, no i nt er v al o de 2. 2250738 585072014 E308 a t 1. 7976931348623158
E + 308.

Lgico

Val or es l gi cos e m ADVPL s o i de nti fi ca dos a t r a v s d e . T. ou . Y. par a v er da d ei ro e . F. ou . N.
par a f al so (i ndepe nde nt e me nt e se os ca r act er es est i v er e m e m mai scul o ou mi nscul o) .

Caractere

St ri ngs ou ca dei as de car act er es so i de nti fi cadas e m ADVPL por bl ocos d e t e xt o e nt r e aspas
dupl as ( " ) ou aspas si mpl es (') :

" Ol mundo! "
'Est a u ma st ri ng'
" Est a 'out r a' st ri ng "

Uma v a ri v el do t i po car act er e pode cont er st ri ngs com no m xi mo 1 MB, ou sej a , 104857 6
car act er es.

Data

O ADVPL t e m u m t i po de da dos espec fi co par a da t as. I nt er n a me nt e as v ari v ei s dest e t i po de
da do s o a r ma z e na das como u m n mero cor r esponde nt e a data Juliana.

Vari v ei s do t i po de d a dos Da t a n o pod e m ser d ecl ar a das di r et a me nt e, e si m a t r a v s da
utili z ao de f unes espec fi cas como por e x e mpl o CTOD( ) que conv er t e u ma st ri ng par a
da t a .

- 32 -

ADVPL Completo



Array

O Ar r a y u m t i po de da do especi al . a di sposi o de out r os el e me nt os e m col un as e li nhas. O
ADVPL supor t a ar r a ys uni di me nsi on ai s ( v et or es) ou mul t i di me nsi on ai s ( ma t ri z es) . Os
el e me nt os d e u m a rr a y so acessa dos a t r a v s d e ndi ces nu mri cos i ni ci a dos e m 1,
i de nti fi ca ndo a li nh a e col un a par a qu a nt as di me nses e xi st i r e m.

Arr a ys d e v e m ser ut ili z a das com ca ut el a , poi s se f or e m mui t o gr a ndes pode m e x a uri r a
me mri a do ser vi dor.

Bloco de Cdigo

O bl oco de cdi go u m t i po de da do especi al . ut ili z a do par a a r ma z e n ar i nst r ues escri t as
e m ADVPL que pod er o ser e x ecut a das post eri or me nt e .


4.2. Declarao de variveis

Vari v ei s de me mri a so u m dos r ecursos mai s i mpor t a nt es de u ma li ngu a ge m. So r e as d e
me mri a cri a das par a ar ma z e n ar i nf or maes utili z a das por u m progr a ma par a a e x ecuo d e
t ar ef as. Por e x e mpl o, qu a ndo o usu ri o di gi t a u ma i nf or mao qu al quer , como o nome de u m
produt o, e m u ma t el a de u m progr a ma est a i nf or mao ar ma z e n a da e m u ma v ari v el de
me mri a par a post eri or me nt e ser gr a v a da ou i mpr essa .

A par t i r do mome nt o que u ma v ari v el cri a da , no necess ri o mai s se r ef er e nci ar ao se u
cont e do, e si m ao se u nome.

O nome de u ma v ari v el u m i de nti fi ca dor ni co o qu al de v e r esp ei t ar u m mximo de 10
caracteres. O ADVPL n o i mpede a cri ao d e u ma v ari v el de me mri a cuj o nome cont e nh a
mai s de 10 car act er es, porm apenas os 10 primeiros sero considerados par a a
l ocali z ao do cont e do ar ma z e n a do.

Por t a nt o se f or e m cri a das duas v ari v ei s cuj os 10 pri mei ros car act er es f or e m i gu ai s, como
nTot al Ger al Anu al e nTot al Ger al Me nsal , as r ef er nci as a qu al quer u ma del as no pr ogr a ma
r esul t ar o o mesmo, ou sej a , ser o a mesma v ari v el :

nTot al Ger al Me nsal : = 1 00
nTot al Ger al Anual : = 300
Al er t ( " Val or me nsal : " + cVal ToCh ar ( nTot al Ger al Me nsal ) )

Qu a ndo o cont e do da v ari v el nTot al Ger al Me nsal e xi bi do, o se u v al or ser de 300. I sso
acont ece por qu e no mome nt o qu e esse v al or f oi a t ri bu do v ari v el nTot al Ger al Anu al , o
ADVPL consi der ou a pe n as os 10 pri mei ros ca r act er es ( assi m como o f a z qua ndo de v e e xi bi r o
v al or da v ari v el nTot al Ger al Me nsal ) , ou sej a , consi der ou- as como a mesma v ari v el . Assi m o
v al or ori gi nal de 100 f oi subst i t u do pel o de 300.


- 33 -

ADVPL Completo



4.3. Escopo de variveis

O ADVPL n o u ma li ngua ge m de t i pos r gi dos par a v a ri v ei s, ou sej a , n o necess ri o
i nf or mar o t i po de da dos que det er mi n a da v ari v el i r cont er no mome nt o de su a d ecl ar a o,
e o se u v al or pod e mud ar dur a nt e a e x ecu o do pr ogr a ma .

Ta mb m n o h necessi da de de decl ar ar v a ri v ei s e m u ma seo espec fi ca do se u cdi go
f ont e, e mbor a sej a aconsel h v el decl ar ar t odas as v a ri v ei s necess ri as no comeo, t or n a ndo
a ma nut e no mai s f ci l e e vi t a ndo a decl ar a o de v a ri v ei s desn ecessri as.

Par a d ecl ar ar u ma v a ri v el de v e - se ut ili z ar u m i de nt ifica dor d e escopo. Um i de nt i fi ca dor d e
escopo u ma pal a vr a ch a v e que i ndi ca a que cont e xt o do pr ogr a ma a v ari v el decl ar a da
per t e nce . O cont e xt o d e v ari v ei s pod e ser l ocal ( vi su ali z a das a pe n as de nt r o do pr ogr a ma
a t u al ) , pblico ( vi su ali z a das por qu al quer out ro progr a ma ) , e nt r e out r os.

O Contexto de Variveis dentro de um Programa

As v ari v ei s decl ar a das e m u m progr a ma ou f uno, s o vi s v ei s de acor do com o escopo ond e
so d efi ni das. Como t a mb m do escopo d ep e nde o t e mpo d e e xi st nci a das v ari v ei s. A
defi ni o do escopo d e u ma v ari v el ef et ua da no mome nt o de su a d ecl ar ao.

Local nNu mero : = 10

Est a li nh a de cdi go decl ar a u ma v ari v el cha ma da nNu mero i ndi ca ndo que per t e nce se u
escopo l ocal .

Os i de nt i fi ca dor es d e escopo s o :

E Local
E St a t i c
E Pri v a t e
E Publi c

O ADVPL n o r gi do e m r el ao decl ar a o de v ari v ei s no comeo do progr a ma . A i ncl uso
de u m i de nti fi ca dor de escopo n o necess ri o par a a d ecl ar a o d e u ma v ari v el , cont a nt o
que u m v al or l he sej a a t ri bu do.

nNu mer o2 : = 15

Qu a ndo u m v al or a t ri bu do u ma v ari v el e m u m progr a ma ou f uno, o ADVPL cri ar a
v ari v el caso el a n o t e nha si do decl ar a da a nt eri or me nt e. A v ari v el e nt o cri a da como se
t i v esse si do decl ar a da como Pri v a t e.

De vi do a essa car act er st i ca , qu a ndo se pr e t e nde f a z er u ma a t ri bui o a u ma v ari v el
decl ar a da pr e vi a me nt e mas escr e v e - se o no me da v a ri v el de f or ma i ncorr et a , o ADVPL n o
ger a r ne nhu m err o de compil ao ou de e x ecuo. Poi s compr e e nder o nome da v ari v el
escri t o de f or ma i ncorr e t a como se f osse a cri ao de u ma nov a v a ri v el . I st o al t er ar a l gi ca
do pr ogr a ma , e u m er ro mui t as v e z es di f cil de i de nt i fi car.



- 34 -

ADVPL Completo



Variveis de escopo local

Vari v ei s de escopo l ocal so per t e nce nt es a pe n as ao escopo da f uno onde f or a m decl ar a das
e d e v e m ser e x pli ci t a me nt e d ecl ar a das com o i de nt i fi ca dor LOCAL, co mo no e x e mpl o :


Function Pai( )
Local nVar : = 10, aMa t ri z : = { 0, 1, 2, 3 }
.
< coma ndos >
.
Fil h a ( )
.
< mai s coma ndos >
.
Ret ur n( . T. )


Nest e e x e mpl o, a v a ri v el nVar f oi decl ar a da como l ocal e a t ri bu da com o v al or 10. Qu a ndo a
f uno Fil ha e x ecut a da , nVar ai nda e xi st e mas n o pode ser acessa da . Qu a ndo a e x ecu o
da f uno Pai t er mi n ar, a v ari v el nVar d est r u da . Qual quer v ari v el com o mesmo nome no
progr a ma que ch a mou a f uno Pai n o af et a da .

Vari v ei s de escopo l ocal so cri a das a ut oma t i ca me nt e ca da v e z qu e a f uno onde f or e m
decl ar a das f or a t i v a da . El as cont i nu a m a e xi st i r e ma nt m se u v al or a t o fi m da a t i v ao da
f uno ( ou sej a , a t qu e a f un o r et or ne o cont rol e par a o cdi go que a e x ecut ou) . Se u ma
f uno cha ma da r ecursi v a me nt e ( por e x e mpl o, ch a ma a si mes ma ) , ca da cha ma da e m
r ecurs o cri a u m nov o conj unt o de v a ri v ei s l ocai s.

A vi si bili da de de v ari v ei s de escopo l ocai s i d nt i ca ao escopo d e su a decl ar a o, ou sej a , a
v ari v el vi s v el e m qu al quer l ugar do cdi go f ont e e m que f oi decl ar a da . Se u ma f uno
cha ma da r ecursi v a me nt e, a p e n as as v a ri v ei s de escopo l ocal cri a das n a mai s r ece nt e a t i v ao
so vi s v ei s.

Variveis de escopo static

Vari v ei s de escopo st a t i c f unci on a m basi ca me nt e como as v a ri v ei s de escopo l ocal , mas
ma nt m se u v al or a t r a v s da e x ecuo e d e v e m ser decl ar a das e x pl i ci t a me nt e no cdi go co m
o i de nt i fi ca dor STATI C.

O escopo das v a ri v ei s st a t i c depe nde de onde so d ecl ar a das. Se f or e m decl ar a das de nt r o do
cor po de u ma f un o ou procedi me nt o, se u escopo ser l i mi t a do quel a rot i n a . Se f or e m
decl ar a das f or a do cor po de qu al quer rot i n a , se u escopo af et a a t odas as f unes d ecl ar a das
no f ont e.

- 35 -

ADVPL Completo



Nest e e x e mpl o, a v ari v el nVar d ecl ar a da como st a t i c e i ni ci ali z a da com o v al or 10 :

Function Pai( )
St a t i c nVar : = 10
.
< coma ndos >
.
Fil h a ( )
.
< mai s coma ndos >
.
Return(.T.)

Qu a ndo a f uno Fil ha e x ecut a da , nVar ai nda e xi st e mas n o pod e ser acessa da . Di f er e nt e
de v ari v ei s decl ar a das como LOCAL ou PRI VATE, nVa r cont i nu a a e xist i r e ma nt m se u v al or
a t ual qu a ndo a e x ecuo da f uno Pai t er mi na . Ent r et a nt o, some nt e pode ser acessa da por
e x ecues subseq e nt es da f un o Pai .

Variveis de escopo private

A decl ar ao opci onal par a v ari v ei s pri v a das. Mas pod e m ser d ecl ar a das e x pl i ci t a me nt e com
o i de nt i fi ca dor PRI VATE.

Adi ci on al me nt e, a a t ri bui o de v al or a u ma v ari v el n o cri a da a nt eri or me nt e
a ut oma t i ca me nt e cri a a v ari v el como pri v a da . Uma v e z cri a da , u ma v ari v el pri v a da conti nu a
a e xi st i r e ma nt m se u v al or a t que o progr a ma ou f uno onde f oi cri a da t er mi ne ( ou sej a ,
a t que a f uno onde f oi cri a da r et or n e par a o cdi go que a e x ecut ou) . Nest e mome nt o,
a ut oma t i ca me nt e dest r u da .

poss v el cri ar u ma nov a v ari v el pri v a da co m o mesmo nome d e u ma v ari v el j e xi st e nt e .
Ent r et a nt o, a nov a ( dupli ca da ) v ari v el pode a pe n as ser cri a da e m u m n v el de a ti v ao
i nf eri or ao n v el onde a v ari v el f oi decl ar a da pel a pri mei r a v e z ( ou sej a , a pe n as e m u ma
f uno ch a ma da p el a f uno onde a v a ri v el j h a vi a si do cri a da ) . A nov a v ari v el pri v a da i r
esconder qu al quer out r a v ari v el pri v a da ou pbli ca ( v ej a a docu me nt ao sobr e v a ri v ei s
pbli cas) com o mesmo nome e nqua nt o e xi st i r.

Uma v e z cri a da , u ma v ari v el pri v a da vis v el e m t odo o pr ogr a ma e nqua nt o no f or
dest r u da a ut oma t i ca me nt e qu a ndo a rot i n a que a cri ou t er mi nar ou u ma out r a v ari v el
pri v a da com o mesmo nome f or cri a da e m u ma subf uno ch a ma da ( nest e caso, a v ari v el
e xi st e nt e t or n a - se i n acess v el a t que a nov a v a ri v el pri v a da sej a dest r u da) .
E m t er mos mai s si mpl es, u ma v ari v el pri v a da vi s v el de nt ro da f uno de cri ao e t odas as
f unes ch a ma das por est a , a me nos que u ma f uno ch a ma da cri e su a pr pri a v ari v el
pri v a da com o mesmo nome .


- 36 -

ADVPL Completo



Por exemplo:


Function Pai( )
Pri v a t e nVar : = 10
< coma ndos >
.
Fil h a ( )
< mai s coma ndos >
.
Return(.T.)


Nest e e x e mpl o, a v a ri v el nVar cri a da com escopo pri v a t e e i ni ci ali z a da com o v al or 10.
Qu a ndo a f un o Fi l h a e x ecut a da , nVar ai nda e xi st e e, di f er e nt e de u ma v ari v el de escopo
l ocal , pode ser acessa d a pel a f uno Fil h a . Qua ndo a f uno Pai t er mi n ar, nVar ser dest r u da
e qual quer decl ar ao d e nVar a nt eri or se t or na r acess v el nov a me nt e.


No a mbi e nt e ERP Pr ot he us, e xi st e u ma conv e no a di ci on al a qu al de v e ser
r espei t a da que v ari v ei s e m uso pel a a pli cao n o sej a m i ncorr et a me nt e
ma ni pul a das. Por est a conv e no de v e ser a di ci on a do o ca r act er _ a nt es
do nome d e v ari v ei s PRI VATE e PUBLI C. Mai or es i nf or maes a v ali ar o
t pi co : Boas Pr t i cas de Pr ogr a mao.

Exemplo: Pri v a t e _dDa t a


Variveis de escopo public

Pode m- se cri ar v ari v ei s de escopo publi c di n a mi ca me nt e no cdi go com o i de nti fi ca dor
PUBLI C. As v a ri v ei s dest e escopo cont i nu a m a e xi sti r e ma nt m se u v al or a t o fi m da
e x ecu o da t hr e a d ( cone x o) .

poss v el cri ar u ma v ari v el de escopo pri v a t e com o mesmo nome d e u ma v ari v el de escopo
publi c e xi st e nt e, e nt r et a nt o, no per mi t i do cri ar u ma v ari v el de escopo publi c com o mesmo
nome d e u ma v ari v el de escopo pri v a t e e xi st e nt e.

Uma v e z cri a da , u ma v ari v el de escopo publi c vi s v el e m t odo o progr a ma onde f oi
decl ar a da a t que sej a escondi da por u ma v a ri v el de escopo pri v a t e cri a da com o mesmo
nome. A nov a v ari v el de escopo pri v a t e cri a da esconde a v a ri v el de escopo publi c e xi st e nt e ,
e est a se t or nar i nacess v el a t que a nov a v ari v el pri v a t e sej a dest r u da . Por e x e mpl o :


Function Pai( )
Publi c nVar : = 10
< coma ndos >
.
Fil h a ( )
< mai s coma ndos >
.
Return(.T.)



- 37 -

ADVPL Completo


Nest e e x e mpl o, nVar cri a da como publi c e i nici ali z a da com o v al or 10. Qu a ndo a f uno Fi l h a
e x ecut a da , nVar ai nda e xi st e e pod e ser acessa da . Di f er e nt e d e v a ri v ei s l ocai s ou pri v a t es,
nVar ai nda e xi st e a ps o t r mi no da a e x ecu o da f un o Pai .

Di f er e nt e me nt e dos out ros i de nti fi ca dor es d e escopo, qu a ndo u ma v a ri v el decl ar a da como
pbli ca se m ser i ni ci ali z a da , o v al or assu mi do f al so ( . F. ) e n o nul o ( nil ) .


No a mbi e nt e ERP Pr ot he us, e xi st e u ma conv e no a di ci on al a qu al de v e ser
r espei t a da que v ari v ei s e m uso pel a a pli cao n o sej a m i ncorr et a me nt e
ma ni pul a das. Por est a conv e no de v e ser a di ci on a do o ca r act er _ a nt es
do nome d e v ari v ei s PRI VATE e PUBLI C. Mai or es i nf or maes a v ali ar o
t pi co : Boas Pr t i cas de Pr ogr a mao.

Exemplo: Publ i c _cRot i n a


4.4. Entendendo a influncia do escopo das variveis

Consi der e as li nhas de cdi go de e x e mpl o :


nResul t a do : = 250 * ( 1 + ( nPerce nt ual / 100) )


Se est a l i nh a f or e x ecut a da e m u m progr a ma ADVPL, ocorr er u m err o de e x ecuo com a
me nsa ge m " v a ri a bl e does not e xi st : nPerce nt ual " , poi s est a v ari v el est se ndo ut ili z a da e m
u ma e x pr esso d e cl cul o se m t er si do decl ar a d a . Par a sol uci onar est e er ro, de v e - se decl ar ar a
v ari v el pr e vi a me nt e :


Local nPerce nt u al , nResul t a do
nResul t a do : = 250 * ( 1 + ( nPerce nt ual / 100) )


Nest e e x e mpl o, as v a ri v ei s so decl ar a das pr e vi a me nt e ut ili z a ndo o i de nti fi ca dor de escopo
l ocal . Qu a ndo a li nh a de cl cul o f or e x ecut a da , o er ro d e v ari v el n o e xi st e nt e , no mai s
ocor r er . Por m v a ri v ei s n o i ni ci ali z a das t m se mpr e o v al or def a ul t nul o ( Nil ) e est e v al or
n o pod e ser ut ili z ado e m u m cl cul o poi s t a mb m g er a r err os de e x ecu o ( nul o n o pode
ser di vi di do por 100) . A r esol uo d est e pr obl e ma ef et u a da i nici ali z a ndo- se a v ari v el
a t r a v s d e u ma das f or mas :


Local nPerce nt u al , nResul t a do
nPerce nt ual : = 10
nResul t a do : = 250 * ( 1 + ( nPerce nt u al / 100) )

ou

Local nPerce nt ual : = 10, nResul t a do
nResul t a do : = 250 * ( 1 + ( nPerce nt ual / 100) )

A di f er e na e nt r e o l ti mo e x e mpl o e os doi s a nt eri or es que a v a ri v el i ni ci ali z a da no
mome nt o da decl ar a o. E m a mbos os e x e mpl os, a v ari v el pri mei ro decl ar a da e e nt o
i ni ci ali z a da e m u ma out r a l i nha de cdi go.


- 38 -

ADVPL Completo


aconsel h v el opt ar p el o oper a dor d e a t ri bui o compost o de doi s pont os e si n al de i gual , poi s
o oper a dor de a t ri bui o ut ili z a ndo some nt e o si n al de i gu al pode ser f aci l me nt e conf undi do
com o oper a dor r el aci onal ( par a compa r a o) dur a nt e a cri ao do progr a ma .

4.5. Operaes com Variveis


4.5.1. Atribuio de variveis

Uma v e z qu e u m v al or l he sej a a t ri bu do, o t i po de da do d e u ma v a ri v el i gu al ao t i po de
da do do v al or a t ri bu do. Ou sej a , u ma v ari v el passa a ser nu mri ca se u m n mer o l he
a t ri bu do, passa a ser car act er e se u ma st ri ng de t e xt o l he f or a t ri bu da , et c. Por m mesmo
que u ma v ari v el sej a de det er mi n a do t i po de da do, pod e - se mudar o t i po da v ari v el
a t ri bui ndo out ro t i po a el a :

01 Local x Vari a v el / / Decl ar a a v a ri v el i ni ci al me nt e com v al or nul o
02
03 x Vari a v el : = " Agor a a v ari v el car act er e. . . "
04 Al er t ( " Val or do Te xt o : " + x Vari a v el )
05
06 x Vari a v el : = 22 / / Agor a a v a ri v el nu mri ca
07 Al er t ( cVal ToCh ar ( x Vari a v el ) )
08
09 x Vari a v el : = . T. / / Agor a a v a ri v el l gi ca
10 I f x Va ri a v el
11 Al er t ( " A v ari v el t e m v al or v er da d ei ro. . . " )
12 El se
13 Al er t ( " A v ari v el t e m v al or f al so. . . " )
14 Endi f
15
16 x Vari a v el : = Da t e( ) / / Agor a a v a ri v el da t a
17 Al er t ( " Hoj e : " + Dt oC( x Va ri a v el ) )
18
19 x Vari a v el : = nil / / Nul o nov a me nt e
20 Al er t ( " Val or nul o : " + x Vari a v el )
21
22 Ret ur n

No progr a ma d e e x e mpl o a nt eri or, a v ari v el x Vari a v el ut i li z a da par a a r ma z e n ar di v ersos
t i pos de da dos. A l et r a " x " e m mi nscul o no comeo do nome ut ili z a da par a i ndi car u ma
v ari v el que pod e cont er di v ersos t i pos d e da dos, segundo a Not ao Hngar a ( consul t e
docu me nt a o esp ec fi ca par a d et al hes) . Est e progr a ma t r oca os v al or es da v a ri v el e e xi be
se u cont e do pa r a o usu ri o a t r a v s da f uno ALERT( ) . Essa f un o r ecebe u m pa r met r o
que de v e ser do t i po st ri ng de car act er e , por i sso depe nde ndo do t i po de da do da v a ri v el
x Vari a v el necess ri o f a z er u ma conv ers o a nt es.

Apesa r dessa fl e xi bili dade de ut i li z ao de v a ri v ei s, de v e m- se t omar cui da dos n a passa ge m
de par met r os par a f u nes ou coma ndos, e n a conca t e n a o ( ou soma ) de v al or es. Not e a
li nh a 20 do progr a ma d e e x e mpl o. Qu a ndo est a li nh a e x ecut a da , a v ari v el x Vari a v el cont m
o v al or nul o. A t e nt a t i v a de soma d e t i pos d e da dos di f er e nt es ger a er r o de e x ecuo do
progr a ma . Nest a l i nh a do e x e mpl o, ocorr er u m err o com a me nsa ge m " t y pe mi sma t ch on + " .

Excet u a ndo- se o caso do v al or nul o, par a os d e mai s de v e m ser ut i li z a das f unes de
conv erso qua ndo n ecess ri o conca t e n ar t i pos d e da dos di f er e nt es ( por e x e mpl o, n as li nh as
07 e 17.

- 39 -

ADVPL Completo



Not e t a mb m que qu a ndo u ma v ari v el do t i po de da do l gi co, el a pode ser ut ili z a da
di r et a me nt e pa r a ch eca ge m (l i nh a 10) :

I f x Va ri a v el
o mesmo que
I f x Va ri a v el = . T.


4.5.2. Operadores da linguagem ADVPL

Operadores comuns

Na docu me nt a o sobr e v ari v ei s h u ma br e v e de monst r ao de como a t ri bui r v al or es a u ma
v ari v el da f or ma mai s si mpl es. O ADVPL a mpli a si gni fi ca ti v a me nt e a utili z ao de v ari v ei s
a t r a v s do uso d e e x pr esses e f unes.

Uma e x pr ess o u m conj unt o de op er a dor es e op er a ndos cuj o r esul t a do pod e ser a t ri bu do a
u ma v ari v el ou e nt o a n ali sa do par a a t o ma da de deci ses. Por e x e mpl o :

Local nSal ari o : = 1000, n Descont o : = 0. 10
Local nAu me nt o, nSal Li qui do
nAu me nt o : = nSal ari o * 1. 20
nSal Li qui do : = nAu me nt o * ( 1- n Descont o)


Nest e e x e mpl o s o ut ili z a das al gu mas e x pr esses pa r a cal cul ar o sal ri o l qui do a ps u m
a u me nt o. Os oper a ndos de u ma e x pr ess o pode m ser u ma v a ri v el , u ma const a nt e, u m
ca mpo d e a r qui vo ou u ma f uno.


Operadores Matemticos

Os oper a dor es ut ili z a dos e m ADVPL par a cl cul os ma t e m t i cos so :

+ Adi o
- Subt r ao
* Mul ti pli cao
/ Di vi so
** ou ^ Ex pone nci ao
% Mdul o ( Rest o da Di vi so)


Operadores de String

Os oper a dor es ut ili z a dos e m ADVPL par a t r a t a me nt o d e car act er es s o :

+ Conca t e n ao de st ri ngs ( uni o)
- Conca t e n ao de st ri ngs com el i mi n ao dos br a ncos fi n ai s das st ri ngs
i nt er medi ri as
$ Compar ao de Subst ri ngs ( cont i do e m)


- 40 -

ADVPL Completo



Operadores Relacionais

Os oper a dor es ut ili z a dos e m ADVPL par a op er aes e a v ali aes r el aci onai s so :

< Compar ao Me nor
> Compar ao Mai or
= Compar ao I gu al
= = Compar ao Ex a t a me nt e I gual ( par a ca r act er es)
< = Compar ao Me nor ou I gu al
> = Compar ao Mai or ou I gu al
< > ou #
ou ! =
Compar ao Di f er e nt e


Operadores Lgicos

Os oper a dor es ut ili z a dos e m ADVPL par a op er aes e a v ali aes l gi cas s o :

.And. E l gi co
.Or. OU l gi co
.Not. ou ! NO l gi co


Operadores de Atribuio

Os oper a dor es ut ili z a dos e m ADVPL par a a t ri buio d e v al or es a v ari v ei s de me mri a s o :

: = At ri bui o Si mpl es
+ = Adi o e At ri bui o e m Li nh a
- = Subt r ao e At ri bui o e m Li nh a
* = Mul ti pli cao e At ri bui o e m Li nh a
/ = Di vi so e At ri bui o e m Li nh a
** = ou
^ =
Ex pone nci ao e At ri buio e m Li nh a
%= Mdul o ( r est o da di vi so) e At ri bui o e m Li nh a


E Atribuio Simples

O si nal de i gu al da de ut ili z a do par a a t ri bui r v al or a u ma v a ri v el de me mri a .
nVari a v el : = 10


E Atribuio em Linha

O oper a dor de a t ri bui o e m li nh a car act eri z a do por doi s pont os e o si n al de i gu al da de. Te m
a mes ma f un o do si n al de i gu al da de sozi nho, por m a pl i ca a a t ri bui o s v a ri v ei s. Com el e
pode- se a t ri bui r mai s de u ma v a ri v el ao mes mo t e mpo.

nVar 1 : = nVar 2 : = nVar 3 : = 0


- 41 -

ADVPL Completo


Qu a ndo di v ersas v ari v ei s so i ni ci ali z a das e m u ma mesma li nha , a a t ri bui o comea d a
di r ei t a par a a esquer d a , ou sej a , nVar 3 r ece be o v al or z er o i ni ci al me nt e, nVa r 2 r ecebe o
cont e do de nVar 3 e nVar 1 r eceb e o cont e do d e nVar 2 por fi n al .

Com o op er a dor de a t ri bui o e m l i nha , pode - se subst i t ui r as i ni ci ali z aes i ndi vi du ai s de ca d a
v ari v el por u ma i ni ci ali z ao a p e n as :

Local nVar 1 : = 0, nVar 2 : = 0, nVa r 3 : = 0
por
Local nVar 1 : = nVar 2 : = nVar 3 : = 0

O op er a dor de a t ri bui o e m li nh a t a mb m pode ser ut ili z a do par a subst i t ui r v al or es d e
ca mpos e m u m ba nco d e da dos.

E Atribuio Composta

Os op er a dor es d e a t ri bui o compost a so u ma f acili da de da li ngu a ge m ADVPL par a
e x pr esses de cl cul o e a t ri bui o. Com el es pode - se economi z ar di gi t ao :

Operador Exemplo Equivalente a
+ = X + = Y X = X + Y
- = X - = Y X = X - Y
* = X * = Y X = X * Y
/ = X / = Y X = X / Y
** = ou ^ = X ** = Y X = X ** Y
% = X % = Y X = X % Y

Operadores de Incremento / Decremento

A li ngu a ge m ADVPL possui oper a dor es par a r e ali z ar i ncr e me nt o ou decr e me nt o d e v a ri v ei s.
Ent e nde- se por i ncr e me nt o a u me nt ar o v al or de u ma v a ri v el nu mri ca e m 1 e e nt e nde - se por
decr e me nt o di mi nui r o v al or da v a ri v el e m 1. Os oper a dor es s o :

+ + I ncr e me nt o Ps ou Pr - fi x a do
- - Decr e me nt o Ps ou Pr - fi x a do

Os oper a dor es d e d ecr e me nt o/ i ncr e me nt o pode m ser col oca dos t a nt o a nt es ( pr - fi x a do) como
depoi s ( ps- fi x a do) do nome da v ari v el . De nt ro d e u ma e x pr ess o, a or d e m do oper a dor
mui t o i mpor t a nt e, pod e ndo al t er ar o r esul t a do da e x pr ess o. Os op er a dor es i ncr e me nt ai s so
e x ecut a dos da esqu er da par a a di r ei t a de nt ro d e u ma e x pr ess o.

Local nA : = 10
Local nB : = nA + + + nA

O v al or da v ari v el nB r esul t a e m 21, poi s a pri mei r a r ef er nci a a nA ( a nt es do + + ) cont i nh a o
v al or 10 que f oi consi der a do e i medi a t a me nt e a u me nt a do e m 1. Na segunda r ef er nci a a nA,
est e j possu a o v al or 11. O que f oi ef et u a do f oi a soma de 10 mai s 11, i gu al a 21. O
r esul t a do fi n al a ps a e x ecuo d est as du as l i nhas a v a ri v el nB cont e ndo 21 e a v a ri v el nA
cont e ndo 11.

No e nt a nt o :

Local nA : = 10
Local nB : = + + nA + nA


- 42 -

ADVPL Completo


Resul t a e m 22, poi s o oper a dor i ncr e me nt al a u me nt ou o v al or da pri mei r a nA a nt es que se u
v al or f osse consi der a do.

Operadores Especiais

Al m dos op er a dor es comuns, o ADVPL possui al guns out ros op er a dor es ou i de nti fi ca dor es.
Est as s o su as fi n ali da des :


( ) Agr upa me nt o ou F un o
[ ] El e me nt o d e Ma t ri z
{ } Defi ni o de Ma t ri z , Const a nt e ou Bl oco d e Cdi go
- > I d e nt i fi ca dor d e Ap eli do
& Macr o subst i t ui o
@ Passa g e m d e pa r met ro por r ef er nci a
| | Passa g e m d e pa r met ro por v al or

- Os pa r nt eses s o ut ili z a dos par a a gr upar el e me nt os e m u ma e x pr esso muda ndo a
or d e m de pr eced nci a da a v ali ao da e x pr ess o ( segundo as r egr as ma t e m t i cas por
e x e mpl o) . Ta mb m ser v e m pa r a e nv ol v er os a r gu me nt os de u ma f uno.

- Os col chet es s o ut ili z a dos par a especi fi car u m el e me nt o esp ec fi co de u ma ma t ri z . Por
e x e mpl o, A[ 3, 2] , r ef er e - se a o el e me nt o da ma t ri z A n a li nh a 3, col un a 2.

- As ch a v es s o ut ili z a das par a a especi fi cao de ma t ri z es li t er ai s ou bl ocos de cdi go.
Por e x e mpl o, A : = { 10, 2 0, 30 } cri a u ma ma t ri z ch a ma da A co m t r s el e me nt os.

- O s mbol o - > i de nt i fi ca u m ca mpo d e u m a r qui vo di f er e nci a ndo- o d e u ma v ari v el . Por
e x e mpl o, FUNC- > nome r ef er e- se a o ca mpo nome do ar qui vo FUNC. Mesmo que e xi st a u ma
v ari v el cha ma da nome , o ca mpo nome que ser acessa do.

- O s mbol o & i de nt i fi ca u ma a v al i ao de e x pr ess o a t r a v s d e macro e vi st o e m
det al hes n a docu me nt ao sobr e macro substituio

.
- O s mbol o @ utili z a do par a i ndi car que dur a nt e a passa ge m de u ma v ari v el par a u ma
f uno ou pr ocedi me nt o el a sej a t oma da como u ma r ef er nci a e n o co mo v al or .

- O s mbol o | | ut i li z a do par a i ndi car que dur a nt e a passa g e m de u ma v ari v el par a
u ma f uno ou pr ocedi me nt o el a sej a t oma da como u m e v al or n o co mo r ef er nci a .

- 43 -

ADVPL Completo



Ordem de Precedncia dos Operadores

Depe nd e ndo do t i po de op er a dor , e xi st e u ma or d e m de pr eced nci a par a a a v ali ao dos
oper a ndos. E m pri nc pi o, t odas as op er aes com os op er a dor es, s o r e ali z a das da esquer da
par a a di r ei t a se el es t i v er e m o mesmo n v el de pri ori da de.

A or d e m d e pr eced nci a , ou n v el de pri ori da de de e x ecu o, dos op er a dor es e m ADVPL :

1. Oper a dor es d e I ncr e me nt o/ Decr e me nt o pr - fi x a do
2. Oper a dor es d e St ri ng
3. Oper a dor es Ma t e m t i cos
4. Oper a dor es Rel aci onai s
5. Oper a dor es Lgi cos
6. Oper a dor es d e At ri bui o
7. Oper a dor es d e I ncr e me nt o/ Decr e me nt o ps- fi x a do

E m e x pr esses compl e x as com di f er e nt es t i pos de oper a dor es, a a v ali ao segui r essa
seq nci a . Caso e xi st a mai s de u m op er a dor do mesmo t i po ( ou sej a , d e mesmo n v el ) , a
a v ali ao se d da esqu er da pa r a di r ei t a . Par a os oper a dor es ma t e m t i cos e nt r et a nt o, h u ma
pr eced nci a a segui r :

1. Ex pone nci ao
2. Mul ti pli cao e Di vi so
3. Adi o e Subt r ao

Consi der e o e x e mpl o :

Local nResul t a do : = 2 + 10 / 2 + 5*3 + 2 ^ 3

O r esul t a do dest a e x pr esso 30, poi s pri mei r a me nt e cal cul a da a e x pon e nci ao 2 ^ 3( = 8) ,
e nt o s o cal cul a das as mul ti pli caes e di vi ses 10 / 2( = 5) e 5* 3( = 15) , e fi nal me nt e as
a di es r esul t a ndo e m 2 + 5 + 15 + 8( = 30) .

E Alterao da Precedncia

A ut ili z ao de pa r nt eses d e nt r o de u ma e x pr ess o al t er a a or de m de pr eced nci a dos
oper a dor es. Op er a ndos e nt r e par nt eses s o a n ali sa dos a nt es dos qu e se e ncont r a m f or a dos
par nt eses. Se e xi st i r e m mai s de u m conj unt o d e pa r nt eses n o- a ni nh a dos, o gr upo mai s a
esquer da ser a v ali a do pri mei ro e assi m sucessi v a me nt e.

Local nResul t a do : = ( 2 + 10) / ( 2 + 5) *3 + 2 ^ 3

No e x e mpl o aci ma pri mei ro ser cal cul a da a e x pone nci ao 2 ^ 3( = 8) . E m segui da 2 + 10( = 12)
ser cal cul a do, 2 + 5( = 7) cal cul a do, e fi n al me nt e a di vi so e a mul ti pli cao ser o ef et u a das, o
que r esul t a e m 12 / 7*3 + 8( = 13. 14) .

Se e xi st i r e m v ri os par nt eses a ni nh a dos, ou sej a , col oca dos u m de nt ro do out r o, a a v al i ao
ocor r er do pa r nt eses mai s i nt ero e m di r eo ao mai s e xt er no.







- 44 -

ADVPL Completo



4.5.3. Operao de Macro Substituio

O op er a dor d e macr o subst i t ui o, si mboli z ado pel o " e " comerci al (&) , ut ili z a do par a a
a v ali ao de e x pr esses e m t e mpo de e x ecu o. F unci on a como se u ma e x pr ess o
ar ma z e n a da f osse compil a da e m t e mpo d e e x ecuo, a nt es d e ser d e f a t o e x ecut a da .

Consi der e o e x e mpl o :

01 X : = 10
02 Y : = " X + 1 "
03 B : = &Y / / O cont e do de B ser 11

A v ari v el X a t ri bu da com o v al or 10, e nqu a nt o a v ari v el Y a t ri bu da com a st ri ng de
car act er es cont e ndo " X + 1 " .

A t ercei r a li nh a utili z a o op er a dor de macro. Est a li nha f a z com qu e o n mer o 11 sej a a t ri bu do
v ari v el B. Pod e- se perceb er qu e esse o v al or r esul t a nt e da e x pr ess o e m f or ma t o d e
car act er e cont i da n a v ari v el Y.

Ut ili z a ndo- se u ma t cnica ma t e m t i ca el e me nt ar, a subst i t ui o, t e mos que n a segunda li nh a ,
Y defi ni do como " X + 1 " , e nt o pode - se subst i t ui r Y na t ercei r a li nha :

03 B : = &" X + 1 "
O op er a dor d e macr o ca ncel a as aspas :
03 B : = X + 1

Pode- se p erceb er que o op er a dor d e macro r e mov e as aspas, o qu e dei x a u m pedao d e
cdi go par a ser e x ecut a do. De v e - se t er e m me nt e que t udo i sso acont ece e m t e mpo d e
e x ecu o, o qu e t or n a t udo mui t o di n mi co. Uma ut ili z ao i nt er essa nt e cri ar u m t i po de
cal cul a dor a , ou a v al i a dor de f r mul as, que det er mi na o r esul t a do de al go que o usu ri o di gi t a .

O oper a dor de macro t e m u ma li mi t ao : v ari v ei s r ef er e nci a das de nt ro da st ri ng de
car act er es ( X nos e x e mpl os a nt eri or es) n o pode m ser l ocai s.













- 45 -

ADVPL Completo



4.5.4. Funes de manipulao de variveis

Al m de a t ri bui r, cont r ol ar o escopo e macro e x ecut ar o cont e do das v a ri v ei s n ecessri o
ma ni pul ar se u cont e do a t r a v s d e f unes espec fi cas da li ngua ge m par a ca da si t u ao.

As op er aes de ma ni pul ao de cont e do mai s comuns e m pr ogr a mao so :

E Conv erses e nt r e t i pos de v a ri v ei s
E Ma ni pul ao de st ri ngs
E Ma ni pul ao de v a ri v eis nu mri cas
E Veri fi cao d e t i pos de v ari v ei s
E Ma ni pul ao de ar r a ys
E Ex ecu o d e bl ocos d e cdi go

Nest e t pi co ser o a bor da das as conv erses e nt r e t i pos de v a ri v ei s e as f u nes d e
ma ni pul ao de st ri ngs e v a ri v ei s nu mri cas.


Converses entre tipos de variveis

As f unes mai s ut ili z adas n as oper aes e nt r e conv erso e nt r e t i pos d e v a ri v ei s so :

CTOD( )
CVALTOCHAR( )
DTOC( )
DTOS( )
STOD( )
STR( )
STRZERO( )
VAL( )

CTOD( )


Sintaxe CTOD(cData)
Descrio
Re ali z a a conv erso de u ma i nf or mao do t i po car act er no f or ma t o
DD/ MM/ AAAA pa r a u ma v ari v el do t i po da t a .



CVALTOCHAR( )


Sintaxe CVALTOCHAR(nValor)
Descrio
Re ali z a a conv erso de u ma i nf or mao do t i po nu mri co e m u ma st ri ng,
se m a a di o d e espaos a i nf or mao.


- 46 -

ADVPL Completo




DTOC( )


Sintaxe DTOC(dData)
Descrio
Re ali z a a conv erso de u ma i nf or mao do t i po da t a par a e m car act er, se ndo
o r esul t a do no f or ma t o DD/ MM/ AAAA.



DTOS( )


Sintaxe DTOS(dData)
Descrio
Re ali z a a conv erso de u ma i nf or mao do t i po da t a e m u m ca r act er, se ndo
o r esul t a do no f or ma t o AAAAMMDD.



STOD( )


Sintaxe STOD(sData)
Descrio
Re ali z a a conv erso de u ma i nf or mao do t i po car act er com cont e do no
f or ma t o AAAAMMDD e m da t a .


STR( )


Sintaxe STR(nValor)
Descrio
Re ali z a a conv erso de u ma i nf or mao do t i po nu mri co e m u ma st ri ng,
a di ci ona ndo espaos di r ei t a .


STRZERO( )


Sintaxe STRZERO(nValor, nTamanho)
Descrio
Re ali z a a conv erso de u ma i nf or mao do t i po nu mri co e m u ma st ri ng,
a di ci ona ndo z er os esquer da do n mero conv er t i do, de f or ma que a st ri ng
ger a da t e nh a o t a ma nho esp eci fi ca do no par met r o.


VAL( )


Sintaxe VAL(cValor)
Descrio Re ali z a a conv erso de u ma i nf or mao do t i po car act er e m nu mri ca .

- 47 -

ADVPL Completo




Manipulao de strings

As f unes mai s ut ili z adas n as oper aes d e ma ni pul ao do cont e do de st ri ngs so :

ALLTRIM( )
ASC( )
AT( )
CHR( )
CSTUFF( )
LEN( )
RAT( )
SUBSTR( )

ALLTRIM( )


Sintaxe ALLTRIM(cString)
Descrio
Ret or n a u ma st ri ng se m os espaos di r ei t a e esqu er da , r ef er e nt e ao
cont e do i nf or ma do co mo par met ro.

A f uno ALLTRI M( ) i mpl e me nt a as aes das f u nes RTRI M ( ri ght t ri m) e
LTRI M ( l ef t t ri m) .


ASC( )


Sintaxe ASC(cCaractere)
Descrio
Conv er t e u ma i nf or mao ca r act er e e m se u v al or d e acor do com a t a b el a
ASCI I .


AT( )


Sintaxe AT(cCaractere, cString )
Descrio
Ret or n a a pri mei r a posi o d e u m car act er ou st ri ng de nt ro de out r a st ri ng
esp eci fi ca da .



- 48 -

ADVPL Completo



CHR( )


Sintaxe CHR(nASCI I )
Descrio
Conv er t e u m v al or n mer o r ef er e nt e a u ma i nf or mao da t a bel a ASCI I no
car act er e que est a i nf or mao r epr ese nt a .



LEN( )


Sintaxe LEN(cString)
Descrio Ret or n a o t a ma nho da st ri ng especi fi ca da no pa r met ro.


LOWER( )


Sintaxe LOWER(cString)
Descrio
Ret or n a u ma st ri ng com t odos os car act er es mi nscul os, t e ndo como base a
st ri ng passa da como pa r met ro.


RAT( )


Sintaxe RAT(cCaractere, cString)
Descrio
Ret or n a a l ti ma posi o de u m ca r act er ou st ri ng de nt ro de out r a st ri ng
esp eci fi ca da .


STUFF( )


Sintaxe STUFF(cString, nPosInicial, nExcluir, cAdicao)
Descrio
Per mi t e subst i t ui r u m cont e do car act er e e m u ma st ri ng j e xi st e nt e,
esp eci fi ca ndo a posi o i ni ci al par a est a a di o e o n mero d e car act er es qu e
ser o subst i t u dos.


SUBSTR( )


Sintaxe SUBSTR(cString, nPosInicial, nCaracteres)
Descrio
Ret or n a par t e do cont e do de u ma st ri ng especifi ca da , de acor do com a
posi o i ni ci al dest e cont e do na st ri ng e a qu a nti da de de car act er es que
de v er ser r et or n a da a par t i r da quel e pont o (i ncl usi v e) .


- 49 -

ADVPL Completo


UPPER( )


Sintaxe UPPER(cString)
Descrio
Ret or n a u ma st ri ng com t odos os car act er es mai scul os, t e ndo como base a
st ri ng passa da como pa r met ro.


Manipulao de variveis numricas

As f unes mai s ut ili z adas nas oper aes d e ma ni pul ao do cont e do de st ri ngs so :

ABS( )
INT( )
NOROUND( )
ROUND( )

ABS( )

Sintaxe ABS(nValor)
Descrio
Ret or n a u m v al or a bsol ut o (i ndepe nde nt e do si n al ) com base no v al or
esp eci fi ca do no pa r met ro.



INT( )

Sintaxe INT(nValor)
Descrio Ret or n a a pa r t e i nt ei r a de u m v al or especi fi ca do no par met r o.


NOROUND( )

Sintaxe NOROUND(nValor, nCasas)
Descrio
Ret or n a u m v al or, t r unca ndo a par t e d eci mal do v al or esp eci fi ca do no
par met ro de acor do co m a qua nt i da de de casas deci mai s soli ci t a das.



ROUND( )

Sintaxe ROUND(nValor, nCasas)
Descrio
Ret or n a u m v al or, ar r edonda ndo a pa r t e deci mal do v al or especi fi ca do no
par met ro de acor do co m a qua nt i da des de casas deci mai s soli ci t a das,
utili z a ndo o cri t ri o ma t e m t i co.



- 50 -

ADVPL Completo



Verificao de tipos de variveis

As f unes de v eri fi cao per mi t e m a consul t a ao t i po do cont e do da v ari v el dur a nt e a
e x ecu o do pr ogr a ma .

TYPE( )
VALTYPE( )

TYPE( )

Sintaxe TYPE( cVariavel)
Descrio
Det er mi n a o t i po do cont e do d e u ma v a ri v el , a qu al n o f oi defi ni da na
f uno e m e x ecu o.


VALTYPE( )

Sintaxe VALTYPE(cVarivel)
Descrio
Det er mi n a o t i po do cont e do d e u ma v a ri v el , a qu al f oi defi ni da n a f uno
e m e x ecu o.






















- 51 -

ADVPL Completo



5. Estruturas bsicas de programao

O ADVPL supor t a v ri as est r ut ur as d e cont r ol e que per mi t e m mudar a seq nci a de fl uxo de
e x ecu o de u m pr ogr a ma . Est as est r ut ur as per mi t e m a e x ecuo de cdi go base a do e m
condi es l gi ca e a r ep et i o da e x ecu o d e p edaos d e cdi go qu al quer n mer o de v e z es.

E m ADVPL, t odas as est r ut ur as de cont r ol e pod e m ser " a ni nh a das " de nt ro de t odas as d e mai s
est r ut ur as cont a nt o qu e est ej a m a ni nh a das propri a me nt e. Est r ut ur as de cont rol e t m u m
i de nti fi ca dor de i n ci o e u m de fi m, e qu al quer est r ut ur a a ni nh a da de v e se e ncont r ar e nt r e
est es i de nt i fi ca dor es.

Ta mb m e xi st e m est r ut ur as de cont rol e par a det er mi n ar que el e me nt os, coma ndos, et c. e m
u m progr a ma ser o co mpil a dos. Est as s o as di r et i v as do pr - pr ocessa dor # i f def . . . # e ndi f e
# i f ndef . . . # e ndi f . Consul t e a docu me nt ao sobr e o pr - pr ocessa dor pa r a mai or es det al hes.

As est r ut ur as de cont rol e e m ADVPL est o di vi di das e m:

E Est r ut ur as d e r ep et i o
E Est r ut ur as d e d eci so

5.1. Estruturas de repetio

Est r ut ur as de r epet i o so desi gna das par a e x ecut a r u ma se o de cdi go mai s de u ma v e z .
Por e x e mpl o, i ma gi n a ndo- se a e xi st nci a de u ma f uno par a i mpri mi r u m r el a t ri o, pode - se
desej ar i mpri mi -l o qua t ro v e z es. Cl aro, pod e - se si mpl esme nt e ch a ma r a f uno de i mpr ess o
qu a t ro v e z es e m seq nci a , mas i st o se t or nari a pouco profi ssi onal e n o r esol v eri a o
probl e ma se o n mer o de r el a t ri os f osse v a ri v el .

E m ADVPL e xi st e m doi s coma ndos par a a r epet i o de sees d e cdi go, que s o os coma ndos
FOR...NEXT e o coma ndo WHILE...ENDDO
E Sintaxe
.

O Comando FOR...NEXT

A est r ut ur a de cont r ol e F OR. . . NEXT, ou si mpl esme nt e o l oop F OR, r ep e t e u ma se o de cdi go
e m u m n mero det er mi na do de v e z es.


F OR Vari a v el : = nVal or I nici al TO nVal or Fi n al [ STEP nI ncr e me nt o]
Coma ndos. . .
[ EXI T]
[LO OP]
NEXT

- 52 -

ADVPL Completo



E Parmetros

Varivel Esp eci fi ca u ma v ari v el ou u m el e me nt o de u ma ma t ri z par a
a t u ar como u m cont a dor. A v ari v el ou o el e me nt o da ma t ri z
no pr eci sa t er si do decl ar a do a nt es da e x ecuo do coma ndo
F OR. . . NEXT. Se a v a ri v el n o e xi st i r, ser cri a da como u ma
varivel privada.
nValorInicial
TO nValorFinal
nVal or I ni ci al o v al or i ni ci al par a o cont a dor ; nVal or Fi n al o
v al or fi nal par a o cont a dor. Pod e - se ut ili z ar v al or es nu mri cos
li t er ai s, v ari v ei s ou e x pr esses, cont a nt o que o r esul t a do sej a
do t i po de da do nu mri co.
STEP
nIncremento
nI ncr e me nt o a qu a nt i da de que ser i ncr e me nt a da ou
decr e me nt a da no cont a dor a ps ca da e x ecuo da se o d e
coma ndos. Se o v al or de n I ncr e me nt o f or neg a t i vo, o cont a dor
ser d ecr e me nt a do. Se a cl usul a STEP f or o mi ti da , o cont a dor
ser i ncr e me nt a do e m 1. Pode - se ut ili z ar v al or es nu mri cos
li t er ai s, v ari v ei s ou e x pr esses, cont a nt o que o r esul t a do sej a
do t i po de da do nu mri co.
Comandos Esp eci fi ca u m ou mai s i nst r ues d e coma ndo ADVPL que ser o
e x ecut a das.
EXIT Tr a nsf er e o cont r ol e de de nt ro do coma ndo F OR. . . NEXT par a o
coma ndo i medi a t a me nt e segui nt e ao NEXT, ou sej a , fi n ali z a a
r ep et i o da se o d e coma ndos i medi a t a me nt e. Pode - se
col ocar o coma ndo EXI T e m qu al quer l ugar e nt r e o F OR e o
NEXT.
LOOP Ret or n a o cont rol e di r et a me nt e pa r a a cl usul a F OR se m
e x ecut ar o r est a nt e dos coma ndos e nt r e o LOOP e o NEXT. O
cont a dor i ncr e me nt a do ou decr e me nt a do nor mal me nt e, como
se o NEXT t i v esse si do al ca na do. Pode - se col ocar o coma ndo
LO OP e m qu al quer l ugar e nt r e o F OR e o NEXT.




Uma v ari v el ou u m el e me nt o de u ma ma t ri z ut ili z a do como u m
cont a dor par a especi fi car qu a nt as v e z es os coma ndos ADVPL de nt r o da
est r ut ur a F OR. . . NEXT s o e x ecut a dos.

Os coma ndos ADVPL d epoi s do F OR s o e x ecut a dos a t que o NEXT
sej a al ca na do. O cont a dor ( Vari a v el ) e nt o i ncr e me nt a do ou
decr e me nt a do com o v al or e m nI ncr e me nt o ( se a cl usul a STEP f or
omi ti da , o cont a dor i ncr e me nt a do e m 1) . Ent o, o cont a dor
compa r a do com o v al or e m nVal or Fi nal . Se f or me nor ou i gu al ao v al or
e m nVal or Fi n al , os coma ndos segui nt es ao F OR s o e x ecut a dos
nov a me nt e.

Se o v al or f or mai or que o cont i do e m nVal or Fi n al , a est r ut ur a
F OR. . . NEXT t er mi na da e o pr ogr a ma conti nua a e x ecuo no
pri mei ro coma ndo a ps o NEXT.

Os v al or es d e nVal or I ni ci al , nVal or Fi n al e nI ncr e me nt o so a pe n as
consi der a dos i ni ci al me nt e. Ent r et a nt o, muda r o v al or da v ari v el
utili z a da como cont a dor de nt r o da est r ut ur a af e t ar o n mer o d e
v e z es que a r ep et i o ser e x ecut a da . Se o v al or d e n I ncr e me nt o
nega t i vo e o v al or de nVal or I ni ci al mai or que o d e nVal or Fi n al , o
cont a dor ser d ecr e me nt a do a ca da r ep et i o.

- 53 -

ADVPL Completo


Exemplo:

Local nCnt
Local nSomaPa r : = 0
For nCnt : = 0 To 100 St ep 2
nSomaPar + = nCnt
Ne xt
Al er t ( " A soma dos 100 pri mei ros n meros par es : " + ;
cVal ToCh ar ( nSomaPar ) )
Ret ur n

Est e e x e mpl o i mpri me a soma dos 100 pri mei ros n mer os par es. A so ma obt i da a t r a v s da
r ep et i o do cl cul o utili z a ndo a prpri a v ari v el de cont a dor . Como a cl usul a STEP est
se ndo ut ili z a da , a v ari v el nCnt ser se mpr e i ncr e me nt a da e m 2. E como o cont a dor comea
com 0, se u v al or se mpr e ser u m n mero par .


O Comando WHILE...ENDDO

A est r ut ur a de cont r ol e WHI LE. . . ENDDO, ou si mpl esme nt e o l oop WHI LE, r ep et e u ma se o d e
cdi go e nqu a nt o u ma d et er mi n a da e x pr esso r esul t ar e m v er da d ei ro ( . T. ) .

E Sintaxe

WHI LE l Ex pr essa o
Coma ndos. . .
[ EXI T]
[LO OP]
ENDDO

E Parmetros

lExpressao Esp eci fi ca u ma e x pr esso l gi ca cuj o v al or det er mi n a qu a ndo os
coma ndos e nt r e o WHI LE e o ENDDO so e x ecut a dos. Enqu a nt o o
r esul t a do de l Ex pr essao f or a v al i a do como v er da dei ro ( . T. ) , o
conj unt o de co ma ndos so e x ecut a dos.
Comandos Esp eci fi ca u m ou mai s i nst r ues de coma ndo ADVPL que ser o
e x ecut a das e nqu a nt o l Ex pr essa o f or a v al i a do co mo v er da d ei ro ( . T. ) .
EXIT Tr a nsf er e o cont r ol e d e de nt r o do coma ndo WHI LE. . . ENDDO par a o
coma ndo i medi a t a me nt e segui nt e ao ENDDO, ou sej a , fi n ali z a a
r ep et i o da seo d e coma ndos i medi a t a me nt e. Pode - se col ocar o
coma ndo EXI T e m qu al quer l ugar e nt r e o WHI LE e o ENDO.
LOOP Ret or n a o cont r ol e di r et a me nt e par a a cl usul a WHI LE se m e x ecut ar
o r est a nt e dos coma ndos e nt r e o LOOP e o ENDDO. A e x pr esso e m
l Ex pr essao r e a v al i a da par a a d eci so se os coma ndos cont i nu ar o
se ndo e x ecut a dos.



Os coma ndos e nt r e o WHI LE e o ENDDO so e x ecut a dos e nqu a nt o o
r esul t a do da a v ali ao da e x pr esso e m l Ex pr essao p er ma n ecer
v er da dei ro ( . T. ) . Ca da pal a vr a ch a v e WHI LE de v e t er u ma pal a vr a
cha v e ENDDO cor r esponde nt e.




- 54 -

ADVPL Completo


Exemplo :

Local nNu mber : = nAux : = 350
nAux : = I nt ( nAux / 2)
Whil e nAux > 0
nSomaPar + = nCnt
Ne xt
Al er t ( " A soma dos 100 pri mei ros n meros par es : " + ;
cVal ToCh ar ( nSomaPar ) )
Ret ur n


5.1.1. Influenciando o fluxo de repetio

A li ngua ge m ADVPL per mi t e a ut ili z ao de coma ndos que i nfl ue m di r et a me nt e e m u m
processo de r ep et i o, se ndo el es :

E LOOP
E EXIT

LOOP

A i nst r uo LO OP ut i li z a da par a f orar u m d esvi o no fl uxo do progr a ma de v ol t a a a nli se da
condi o de r e p et i o. Dest a f or ma , t odas as op er aes qu e seri a m r e al i z a das de nt ro d a
est r ut ur a de r epet i o a ps o LO OP ser o desconsi der a das.

Exemplo:

a I t e ns : = Li st aProdut os( ) / / f uno i l ust r a ti v a que r et or n a u m a rr a y co m da dos dos pr odut os
n Qua nt i da de : = Le n( a I t e ns)
nI t e ns : = 0

Whil e nI t e ns < n Qu a nt i da de

nI t e ns + +
I F BLO QUEADO( a I t e ns [ nI t e ns] ) / / f uno il ust r a t i v a que v eri fi ca se o produt o est
LO OP / / bl oque a do.
ENDI F

I MPRI ME( ) / / f uno il ust r a t i v a que r e al i z a a i mpr ess o de u m i t e m li ber a do pa r a uso

End

/ / Caso o produto esteja bloqueado, o mesmo no ser impresso, pois a execuo da
/ / instruo LOOP far o fluxo do programa retornar a partir da anlise da condio.




- 55 -

ADVPL Completo


EXIT

A i nst r uo EXI T ut i li z a da par a f orar o t r mi no de u ma est r ut ur a d e r ep et i o. Dest a f or ma ,
t odas as op er aes que seri a m r e al i z a das de nt ro da est r ut ur a de r epe t i o a ps o EXI T ser o
desconsi der a das, e o progr a ma i r cont i nuar a e x ecu o a par t i r da prxi ma i nst r uo
post eri or a o t r mi no da est r ut ur a ( END ou NEXT) .

Exemplo:

Whil e . T.

I F MSGYESNO( Desej a j ogar o j ogo da f orca?)
JF ORCA( ) / / F uno i l ust r a t i v a que i mpl e me nt a o al gori t mo do j ogo da f orca .
ELSE
EXI T
ENDI F
End

MSGI NF O( Fi n al de Jogo)

/ / Enquanto no for respondido No para a pergunta: Deseja jogar o jogo da
/ / forca, ser executada a funo do jogo da forca.
/ / Caso seja selecionada a opo No, ser executada a instruo EXIT que
provocar o trmino do LOOP, permitindo a execuo da mensagem de Final de
Jogo.





















- 56 -

ADVPL Completo



5.2. Estruturas de deciso

Est r ut ur as d e desvi o so desi gna das par a e x ecut ar u ma se o de cdi go se det er mi n a da
condi o l gi ca r esul t ar e m v er da dei ro ( . T. ) .

E m ADVPL e xi st e m doi s coma ndos pa r a e x ecu o d e sees de cdi go de acor do com
a v ali aes l gi cas, que so os coma ndos IF...ELSE...ENDIF e o coma ndo DO
CASE...ENDCASE
E Sintaxe
.

O Comando IF...ELSE...ENDIF

Ex ecut a u m conj unt o de coma ndos base a do no v al or de u ma e x pr esso l gi ca .


I F l Ex pr essa o
Coma ndos
[ ELSE
Coma ndos. . . ]
ENDI F

E Parmetros

LExpressao Esp eci fi ca u ma e x pr esso l gi ca que a v al i a da . Se l Ex pr essa o
r esul t ar e m v er da dei ro ( . T. ) , qu al quer coma ndo segui nt e ao I F e
a nt eced e nt e a o ELSE ou ENDI F ( o que ocorr er pri mei ro) ser
e x ecut a do.
Se l Ex pr essao r esul t ar e m f al so ( . F. ) e a cl usul a ELSE f or defi ni da ,
qu al quer coma ndo a ps essa cl usul a e a nt eri or ao ENDI F ser
e x ecut a da . Se a cl usul a ELSE n o f or d efi ni da, t odos os coma ndos
e nt r e o I F e o ENDI F so i gnor a dos. Nest e caso, a e x ecu o do
progr a ma cont i nu a com o pri mei ro coma ndo se gui nt e ao ENDI F .
Comandos Conj unt o de coma ndos ADVPL que ser o e x ecut a dos depe nd e ndo da
a v ali ao da e x pr esso l gi ca e m l Ex pr essa o.



Pode- se a ni nhar u m bl oco de coma ndo I F. . . ELSE. . . ENDI F d e nt ro de
out ro bl oco d e coma ndo I F. . . ELSE. . . ENDI F. Por m, par a a a v ali ao de
mai s de u ma e x pr esso l gi ca , de v e - se ut ili z ar o coma ndo DO
CASE. . . ENDCASE ou a v ers o est e ndi da da e x pr ess o
I F. . . ELSE. . . ENDI F d e no mi na da I F. . . ELSEI F. . . ELSE. . . ENDI F.


Exemplo:
Local dVe nct o : = CT OD( " 31 / 12 / 01 " )
I f Da t e( ) > dVe nct o
Al er t ( " Ve nci me nt o ul t r a passa do! " )
Endi f
Ret ur n

- 57 -

ADVPL Completo



O Comando IF...ELSEIF...ELSE...ENDIF

Ex ecut a o pri mei ro conj unt o de coma ndos cuj a e x pr esso condi ci onal r esul t a e m v er da d ei ro
( . T. ) .

E Sintaxe

I F l Ex pr essa o1
Coma ndos
[ ELSEI F l Ex pr essaoX
Coma ndos]
[ ELSE
Coma ndos. . . ]
ENDI F

E Parmetros

lExpressao1 Esp eci fi ca u ma e x pr esso l gi ca que a v ali a da . Se l Ex pr essa o
r esul t ar e m v er da d ei ro ( . T. ) , e x ecut ar os coma ndos
compr e e ndi dos e nt r e o I F e a prxi ma e x pr esso da est r ut ur a
( ELSEI F ou I F)
Se l Ex pr essa o r esul t ar e m f al so ( . F. ) , ser a v ali a da a prxi ma
e x pr ess o l gi ca vi ncul a da ao coma ndo ELSEI F, ou se o mesmo
no e xi st i r ser e x ecut a da a a o d efi ni da no co ma ndo ELSE.
lExpressaoX Esp eci fi ca u ma e x pr esso l gi ca que ser a v ali a da par a ca da
coma ndo ELSEI F . Est a e x pr ess o some nt e ser a v al i a da se a
e x pr ess o l gi ca esp eci fi ca da no coma ndo I F r esul t ar e m f al so
( . F. ) .
Caso a l Ex pr essa oX a v ali a da r esul t e e m f al so ( . F. ) ser a v al i a da a
prxi ma e x pr ess o l Ex pr essa oX vi ncul a da ao prxi mo coma ndo
ELSEI F, ou caso o mesmo n o e xi st a ser e x ecut a da a ao
defi ni da par ao coma ndo ELSE.
Comandos Conj unt o de coma ndos ADVPL que ser o e x ecut a dos depe nd e ndo
da a v ali ao da e x pr esso l gi ca e m l Ex pr essao.



O ca mpo I F . . . ELSE. . . ELSEI F. . . ENDI F possui a mesma est r ut ur a o d e
deci so que pod e ser obt i da com a ut i li z ao do coma ndo DO
CASE. . . ENDCASE.


- 58 -

ADVPL Completo



Exemplo:
Local dVe nct o : = CT OD( " 31 / 12 / 01 " )
I f Da t e( ) > dVe nct o
Al er t ( " Ve nci me nt o ul t r a passa do! " )
El se I f Da t e( ) = = dVe nct o
Al er t ( " Ve nci me nt o n a d a t a! " )
El se
Al er t ( " Ve nci me nt o de nt r o do pr a z o! " )
Endi f
Ret ur n


O Comando DO CASE...ENDCASE

Ex ecut a o pri mei ro conj unt o de coma ndos cuj a e x pr esso condi ci onal r esul t a e m v er da d ei ro
( . T. ) .

E Sintaxe

DO CASE
CASE l Ex pr essao1
Coma ndos
[ CASE l Ex pr essa o2
Coma ndos
. . .
CASE l Ex pr essaoN
Coma ndos]
[ OTHERWI SE
Coma ndos]
ENDCASE

E Parmetros

CASE
lExpressao1
Comandos...
Qu a ndo a pri mei r a e x pr ess o CASE r esul t a nt e e m v er da dei ro ( . T. )
f or e ncont r a da , o conj unt o de coma ndos segui nt e e x ecut a do. A
e x ecu o do conj unt o de coma ndos cont i nu a a t que a prxi ma
cl usul a CASE, OTHERWI SE ou ENDCASE sej a e ncont r a da . Ao
t er mi n ar de e x ecut ar esse conj unt o de co ma ndos, a e x ecu o
cont i nu a com o pri mei ro coma ndo segui nt e ao ENDCASE.
Se u ma e x pr esso CASE r esul t ar e m f al so ( . F. ) , o conj unt o d e
coma ndos segui nt e a est a a t a prxi ma cl usul a i gnor a do.
Ape n as u m conj unt o de coma ndos e x ecut a do. Est es so os
pri mei ros coma ndos cuj a e x pr ess o CASE a v al i a da como
v er da dei ro ( . T. ) . Aps a e x ecu o, qu al quer out r a e x pr ess o CASE
post eri or i gnor a da ( mesmo que su a a v al i ao r esul t asse e m
v er da dei ro) .
OTHERWISE
Comandos
Se t odas as e x pr esses CASE f or e m a v ali a das como f al so ( . F. ) , a
cl usul a OTHERWI SE det er mi n a se u m conj unt o a di ci on al de
coma ndos d e v e ser e x ecut a do. Se essa cl usul a f or i ncl u da , os
coma ndos segui nt es ser o e x ecut a dos e e nt o o progr a ma
cont i nu ar com o pri mei ro coma ndo segui nt e ao ENDCASE. Se a
cl usul a OTHERWI SE f or omi t i da , a e x ecu o cont i nu ar
nor mal me nt e a ps a cl usul a ENDCASE.


- 59 -

ADVPL Completo




O Coma ndo DO CASE. . . ENDCASE ut ili z a do no l ugar do coma ndo
IF...ENDIF qu a ndo u m n mero mai or do que u ma e x pr ess o de v e ser
a v ali a da , subst i t ui ndo a necessi da de de mai s de u m coma ndo
I F. . . ENDI F a ni nh a dos.


Exemplo:

Local nMes : = Mont h( Da t e( ) )
Local cPeri odo : = " "

DO CASE
CASE nMes < = 3
cPeri odo : = " Pri mei ro Tri mest r e "
CASE nMes > = 4 . And. nMes < = 6
cPeri odo : = " Segundo Tri mest r e "
CASE nMes > = 7 . And. nMes < = 9
cPeri odo : = " Tercei ro Tri mest r e "
OTHERWI SE
cPeri odo : = " Qu a r t o Tri mest r e "
ENDCASE

Ret ur n





















- 60 -

ADVPL Completo



6. Arrays e Blocos de Cdigo

6.1. Arrays

Arr a ys ou ma t ri z es, s o col ees d e v al or es, se mel h a nt es a u ma l i st a . Uma ma t ri z pode ser
cri a da a t r a v s d e di f er e nt es ma nei r as.

Ca da i t e m e m u m a rr a y r ef er e nci a do p el a i ndi cao de su a posi o nu mri ca na l i st a ,
i ni ci a ndo pel o n mer o 1.

O e x e mpl o a segui r decl ar a u ma v ari v el , a t ri bui u m arr a y de t r s el e me nt os a el a , e e nt o
e xi be u m dos el e me nt os e o t a ma nho do a rr a y :

Local aLet r as / / Decl ar a o da v a ri v el
aLet r as : = { " A " , " B " , " C " } / / At ri bui o do a r r a y a v a ri v el
Al er t ( aLet r as[ 2] ) / / Exi be o segundo el e me nt o do a rr a y
Al er t ( cVal ToCh ar (Le n( aLet r as) ) ) / / Exi be o t a ma nho do a rr a y

O ADVPL per mi t e a ma ni pul ao de arr a ys f acil me nt e. Enqu a nt o que e m out r as l i ngu a ge ns
como C ou Pascal n ecessri o al ocar me mri a par a ca da el e me nt o de u m ar r a y ( o qu e
t or n ari a a ut ili z ao de " pont ei ros " necess ri a ) , o ADVPL se e nca r r ega de ger e nci ar a me mri a
e t or n a si mpl es a di ci onar el e me nt os a u m a rr a y, ut ili z a ndo a f uno AADD( ) :

AADD( aLet r as, " D " ) / / Adi ci on a o quar t o el e me nt o ao fi n al do ar r a y
Al er t ( aLet r as[ 4] ) / / Exi be o qu ar t o el e me nt o
Al er t ( aLet r as[ 5] ) / / Er r o! N o h u m qui nt o el e me nt o no ar r a y


Arrays como Estruturas

Uma car act er st i ca i nt er essa nt e do ADVPL que u m a rr a y pod e cont er qu al quer t i po de da do :
n meros, da t as, l gi cos, car act er es, obj et os, et c. , e ao mesmo t e mpo. E m out r as pal a vr as, os
el e me nt os d e u m a rr a y n o pr eci sa m ser n ecessari a me nt e do mesmo t i po de da do, e m
cont r ast e com out r as l i ngua ge ns como C e Pascal .

a F unct 1 : = { " Pedro " , 32, . T. }

Est e ar r a y cont e m u ma st ri ng, u m n mero e u m v al or l gi co. E m out r as li ngu a ge ns como C ou
Pascal , est e " pacot e " de i nf or maes pod e ser ch a ma do como u m " st r uct " ( est r ut ur a e m C, por
e x e mpl o) ou u m " r ecor d " ( r egi st r o e m Pascal , por e x e mpl o) . Como se f osse n a v er da de u m
r egi st ro de u m ba nco d e da dos, u m pacot e d e i nf or maes const r u do com di v ersos ca mpos.
Ca da ca mpo t e ndo u m pedao di f er e nt e d e da do.

Suponha que no e x e mpl o a nt eri or, o ar r a y a F unct 1 cont e nh a i nf or maes sobr e o nome de
u ma pessoa , su a i da de e sua si t u ao ma t ri moni al . Os segui nt es # defi nes pod e m ser cri a dos
par a i ndi car ca da posi o dos v al or es de nt ro d e u m arr a y :

# defi ne FUNCT_ NOME 1
# defi ne FUNCT_ I DADE 2
# defi ne FUNCT_ CASADO 3

- 61 -

ADVPL Completo



E consi der e mai s al guns arr a ys par a r epr ese nt a r mai s pessoas :

a F unct 2 : = { " Mari a " , 22, . T. }
a F unct 3 : = { " Ant ni o " , 42, . F. }

Os nomes pode m ser i mpr essos assi m:

Al er t ( a F unct 1[ FUNCT_NOME] )
Al er t ( a F unct 2[ FUNCT_NOME] )
Al er t ( a F unct 3[ FUNCT_NOME] )

Agor a , a o i nv s de t r a b al har com v ari v ei s i ndi vi du ai s, pode - se a gr up -l as e m u m out ro arr a y,
do mesmo modo qu e mui t os r egi st ros s o a gr upa dos e m u ma t a b el a de ba nco d e da dos :

a F unct s : = { a F unct 1, a F unct 2, a F unct 3 }

Que equi v al e nt e a i sso :

a F unct s : = { { " Pedr o " , 32, . T. } , ;
{ " Ma ri a " , 22, . T. } , ;
{ " Ant ni o " , 42, . F. } }

a F unct s u m arr a y co m 3 li nh as por 3 col unas. Uma v e z que as v a ri v ei s separ a das f or a m
combi na das e m u m ar r a y, os nomes pod e m ser e xi bi dos assi m:

Local nCount
For nCount : = 1 To Le n( a F unct s)
Al er t ( a F unct s[ nCount , FUNCT_NOME] )
/ / O acesso a el e me nt os de u m a rr a y mul t i di me nsi on al
/ / pode ser r e ali z a do t a mb m d est a f or ma :
/ / a F unct s[ nCount ] [ FUNCT_NOME]
Ne xt nCount

A v ari v el nCount sel eci on a que f unci on ri o ( ou que li nh a) de i nt er esse. Ent o a const a nt e
FUNCT_NOME sel eci ona a pri mei r a col un a da quel a li nh a .

Cuidados com Arrays

Arr a ys s o l i st as de el e me nt os, por t a nt o me mri a necessri a par a ar ma z e n ar est as
i nf or maes. Como est es a rr a ys pode m ser mul ti di me nsi onai s, a me mri a necessri a ser a
mul ti pli cao do n mer o de i t e ns e m ca da di me nso do arr a y , consi der a ndo- se o t a ma nho do
cont e do de ca da el e me nt o cont i do nest a . Por t a nt o o t a ma nho de u m a rr a y pod e v ari ar mui t o.

A f aci li da de da ut ili z ao de a r r a ys, mesmo que par a ar ma z e n ar i nf or maes e m pacot es co mo
descri t o a nt eri or me nt e, n o comp e nsa da pel a ut ili z ao e m me mri a qua ndo o n mer o d e
i t e ns e m u m arr a y f or mui t o gr a nde. Qu a ndo o n mero d e el e me nt os f or mui t o gr a nde de v e - se
procur ar out r as sol ues, como a ut i li z ao de u m ar qui vo de ba nco d e da dos t e mpor ri o.

- 62 -

ADVPL Completo




6.1.1. Inicializando arrays

Al gu mas v e z es o t a ma nho da ma t ri z conheci do pr e vi a me nt e. Out r as v e z es o t a ma nho do
arr a y some nt e ser con heci do e m t e mpo de e x ecu o.

Se o tamanho do array conhecido

Se o t a ma nho do a r r a y conheci do no mo me nt o que o progr a ma escri t o, h di v ersas
ma nei r as de i mpl e me nt ar o cdi go :

01 Local nCnt
02 Local a X[ 10]
03 Local aY : = Ar r a y( 10)
04 Local a Z : = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
05
06 For nCnt : = 1 To 10
07 a X[ nCnt ] : = nCnt * nCnt
08 Ne xt nCnt

Est e cdi go pr e e nche o arr a y com u ma t a bel a de qu a dr a dos. Os v al or es ser o 1, 4, 9, 16 . . .
81, 100. Not e qu e a l i nh a 07 se r ef er e v ari v el a X, mas pod eri a t a mb m t r a bal h ar com aY ou
a Z .

O obj et i vo dest e e x e mpl o de monst r a r t r s modos de cri ar u m arr a y de t a ma nho conheci do
no mome nt o da cri ao do cdi go.

1. Na l i nh a 02 o a rr a y cri a da usa ndo a X[ 10] . I st o i ndi ca ao ADVPL pa r a al oca r espao
par a 10 el e me nt os no arr a y. Os col chet es [ e ] so ut i li z a dos par a i ndi car o t a ma nho
necess ri o.

2. Na li nh a 03 ut ili z a da a f uno ar r a y com o par met r o 10 par a cri ar o ar r a y, e o
r et or no dest a f un o a t ri bu do v ari v el aY. Na li nh a 03 ef e t u a do o que se ch a ma
" dese nh ar a i ma ge n do arr a y " . Como se pod e not ar, e xi st e m d e z 0 s n a li st a e ncerr a da e nt r e
cha v es ( { } ) . Cl ar a me nt e, est e mt odo n o o ut ili z a do par a cri ar u ma ma t ri z de 1000
el e me nt os.

3. O t ercei ro mt odo di f er e dos a nt eri or es por que i ni ci ali z a a ma t ri z com os v al or es
defi ni ti vos. Nos doi s pri mei ros mt odos, ca da posi o da ma t ri z cont m u m v al or nul o ( Nil ) e
de v e ser i ni ci ali z a do post eri or me nt e.

4. A li nha 07 de monst r a como u m v al or pod e ser a t ri bu do par a u ma posi o e xi st e nt e e m
u ma ma t ri z especi fi ca ndo o ndi ce e nt r e col chet es.

- 63 -

ADVPL Completo



Se o tamanho do array no conhecido

Se o t a ma nho do ar r a y n o conheci do a t o mome nt o da e x ecuo do pr ogr a ma , h al gu mas
ma nei r as de cri ar u m arr a y e a di ci on ar el e me nt os a el e. O e x e mpl o a segui r il ust r a a i di a de
cri ao d e u m a rr a y v a zi o ( se m ne nhu m el e me nt o) e a di o de el e me nt os di n a mi ca me nt e.

01 Local nCnt
02 Local a X[ 0]
03 Local aY : = Ar r a y( 0)
04 Local a Z : = { }
05
06 For nCnt : = 1 To nSi z e
07 AADD( a X, nCnt *n Cnt )
08 Ne xt nCnt

1. A li nh a 02 utili z a os col chet es par a cri ar u m arr a y v a zi o. Apesa r de n o t er n e nhu m
el e me nt o, se u t i po de d a do ar r a y .

2. Na li nh a 03 a ch a ma da da f uno a r r a y cri a u ma ma t ri z se m n e nhu m el e me nt o.

3. Na li nh a 04 est decl ar a da a r epr ese nt a o d e u m a rr a y v a zi o e m ADVPL. Mai s u ma
v e z , est o se ndo ut ili z a das as ch a v es par a i ndi car que o ti po de da dos da v ari v el arr a y .
Not e que { } u m a rr a y v a zi o ( t e m o t a ma nho 0) , e nqu a nt o { Ni l } u m arr a y com u m ni co
el e me nt o nul o ( t e m t a ma nho 1) .

Por qu e ca da u ma dest es arr a ys n o cont m el e me nt os, a li nh a 07 utili z a a f uno AADD( ) par a
a di ci on ar el e me nt os sucessi v a me nt e a t o t a ma nho necessri o ( esp eci fi ca do por e x e mpl o na
v ari v el nSi z e) .


6.1.2. Funes de manipulao de arrays

A li ngu a ge m ADVPL possui di v ersas f unes qu e a uxi li a m n a ma ni pul ao d e ar r a ys, d e nt r e as
qu ai s pode mos ci t ar as mai s utili z a das :

ARRAY( )
AADD( )
ACLONE( )
ADEL( )
ASIZE( )
AINS( )
ASORT( )
ASCAN( )


- 64 -

ADVPL Completo



ARRAY( )

Sintaxe ARRAY(nLinhas, nColunas)
Descrio
A f uno Arr a y( ) ut ili z a da n a defi ni o de v ari v ei s de ti po arr a y, como
u ma op o a si nt a x e ut ili z a ndo cha v es ( { } ) .

AADD( )

Sintaxe AADD(aArray, xItem)
Descrio
A f uno AADD( ) p er mi t e a i nser o d e u m i t e m e m u m a rr a y j e xi st e nt e,
se ndo qu e est e i t e m pode m ser u m el e me nt o si mpl es, u m obj et o ou out ro
arr a y.

ACLONE( )

Sintaxe AADD(aArray)
Descrio
A f uno ACLONE( ) r e ali z a a cpi a dos el e me nt os d e u m a rr a y par a out r o
arr a y i nt egr al me nt e.

ADEL( )

Sintaxe ADEL(aArray, nPosio)
Descrio
A f uno ADEL( ) per mi t e a e xcl uso de u m el e me nt o do a rr a y. Ao ef e t u ar a
e xcl uso d e u m el e me nt o, t odos os de mai s s o r e or ga ni z a dos de f or ma que
a ul ti ma posi o do a rr a y passa r a ser nul a .

ASIZE( )

Sintaxe ASIZE(aArray, nTamanho)
Descrio
A f uno ASI Z E p er mi t e a r ed efi ni o da est r ut ur a de u m a rr a y pr -
e xi st e nt e, a di ci on a ndo ou r e mov e ndo i t e ns do mesmo.


ASORT( )

Sintaxe ASORT(aArray, nInicio, nItens, bOrdem)
Descrio
A f uno ASORT( ) per mi t e que os i t e ns de u m arr a y sej a m or de n a dos a
par t i r de u m cri t ri o pr - est a bel eci do.


- 65 -

ADVPL Completo



ASCAN( )

Sintaxe ASCAN(aArray, bSeek)
Descrio
A f uno ASCAN( ) per mi t e que sej a i de nti fi ca da a posi o do arr a y que
cont m u ma det er mi n a da i nf or ma o, a t r a v s da a n li se de u ma e x pr esso
descri t a e m u m bl oco d e cdi go.

AINS( )

Sintaxe AINS(aArray, nPosicao)
Descrio
A f uno AI NS( ) per mi t e a i nser o de u m el e me nt o no ar r a y esp eci fi ca do
e m qu al quer pont o da est r ut ur a do mes mo, dif eri ndo dest a f or ma da f uno
AADD( ) a qu al se mpr e i nser e u m nov o el e me nt o a o fi n al da est r ut ur a j
e xi st e nt e.



6.1.3. Cpia de arrays

Conf or me come nt a do a nt eri or me nt e, u m arr a y u ma r e a n a me mri a , o qu al possui u ma
est r ut ur a per mi t e que as i nf or maes sej a m ar ma z e n a das e or ga ni z a das das mai s di v ersas
f or mas.

Com base n esse concei t o, o ar r a y pod e ser consi der a do a p e n as como u m ma pa ou u m gui a
de como as i nf or maes est o or ga ni z a das e de como el as pode m ser ar ma z e n a das ou
consul t a das. Par a se copi ar u m arr a y d e v e- se l e v a r est e concei t o e m consi der ao, poi s caso
cont r ri o o r esul t a do esper a do n o ser o obt i do n a e x ecu o da cpi a.

Par a copi ar o cont e do de u ma v a ri v el , utili z a - se o oper a dor d e a t ri bui o : = , conf or me
a bai xo :


nPessoas : = 10
nAl unos : = nPessoas


Ao e x ecut ar a a t ri bui o de nAl unos com o cont e do de nPessoas, o cont e do d e nPessoas
a t ri bu do a v ari v el nAl unos, ca usa ndo o ef ei t o de cpi a do cont e do de u ma v ari v el par a
out r a .

I st o por que o coma ndo de a t ri bui o copi a o cont e do da r e a de me mri a r epr ese nt a da pel o
nome nPessoas par a a r e a de me mri a r epr ese nt a da pel o nome nAl unos. Mas a o ut ili z ar o
oper a dor de a t ri bui o : = da mesma f or ma que ut ili z a do e m v ari v ei s si mpl es par a se copi ar
u m arr a y o ef ei t o di f er e nt e :


aPessoas : = { Ri car do, Cri st i a ne, Andr , Ca mil a }
a Al unos : = aPessoas



- 66 -

ADVPL Completo


A v ari v el aPessoas r e pr ese nt e u ma r e a d e me mri a que cont m a est r ut ur a d e u m ar r a y
( ma pa) , no as i nf or maes do ar r a y , poi s ca da i nf or mao est e m sua prpri a r e a de
me mri a .



Dest a f or ma ao a t ri bui r o cont e do r epr ese nt a do pel a v ari v el aPessoas a v ari v el a Al unos n o
est se copi a ndo as i nf or maes e si m o ma pa das r e as d e me mri a onde as i nf or maes
est o r e al me nt e a r ma z e n a das.



Como f oi copi a do o ma pa e n o as i nf or maes, qu al quer ao ut ili z a ndo o rt ul o a Al unos i r
af et ar as i nf or maes do r t ul o aPessoas. Com i sso ao i nv s de se obt er doi s arr a ys di sti nt os,
t e m- se o mesmo ar r a y com du as f or mas d e acesso ( rt ul os) di f er e nt es.

Por est a r a z o de v e ser ut ili z a do o coma ndo ACLONE( ) qu a ndo desej a - se obt er u m ar r a y co m
a mes ma est r ut ur a e i nfor maes que compe out ro ar r a y j e xi st e nt e .


- 67 -

ADVPL Completo




6.2. Listas de Expresses e Blocos de Cdigo

Bl ocos d e cdi go so u m concei t o e xi st e nt e h mui t o t e mpo e m li ngua ge ns x Base. N o como
al go que a par ece u da noi t e par a o di a , e si m u ma e vol uo progr essi v a ut ili z a ndo a
combi n ao d e mui t os concei t os da li ngu a ge m par a a su a i mpl e me nt ao.

6.2.1. Premissas para utilizao de Blocos de Cdigo

Primeira premissa

O ADVPL u ma l i ngu age m base a da e m f unes. F unes t m u m v al or de r et or no. Assi m
como o op er a dor d e a t ri bui o : = .

Assim, ao invs de escrever:

x : = 10 / / At ri bui o v al or 10 v ari v el ch a ma da X
Al er t ( " Val or de x : " + cVal ToCh ar ( x) )

Pode-se escrever:

/ / At ri bui e e nt o e xi be o v al or da v a ri v el X
Al er t ( " Val or de x : " + cVal t oCh ar ( X : = 10) )

A e x pr esso x : = 10 a v ali a da pri mei ro, e e nt o se u r esul t a do ( o v al or de X, que a gor a 10)
passa da pa r a a f un o cv al t och ar pa r a a con v ers o par a ca r act er e, e e m segui da par a a
f uno al er t par a a e xi bi o. Por ca usa d est a r e gr a de pr eced nci a poss v el a t ri bui r u m v al or
a mai s de u ma v a ri v el ao mesmo t e mpo :

Z : = Y : = X : = 0

Por ca usa dessa r egr a , essa e x pr esso a v al i ada como se f osse escri t a assi m:

Z : = ( Y : = ( X : = 0) )

Apesa r de o ADVPL a v ali ar e x pr esses da esqu er da pa r a a di r ei t a , no caso de a t ri bui es i sso
acont ece a o cont r ri o, da di r ei t a par a a esquer d a . O v al or a t ri bu do v ari v el X, que r et or n a

- 68 -

ADVPL Completo


o v al or par a ser a t ri bu do v ari v el Y e assi m sucessi v a me nt e. Pod e - se di z er que o z er o f oi
" propa ga do a t r a v s da e x pr ess o " .

Segunda premissa

E m ADVPL pod e- se j unt ar di v ersas l i nh as de cdi go e m u ma ni ca li nha f si ca de coma ndo. Por
e x e mpl o, o cdi go :

I f l Achou
Al er t ( " Cli e nt e e ncont r a do! " )
Endi f
pode ser escri t o assi m:
I f l Achou ; Al er t ( " Cli e nt e e ncont r a do! " ) ;
Endi f

O pont o- e- v r gul a i ndi ca ao ADVPL qu e a nov a li nh a de cdi go est par a comea r. Pod e - se
e nt o col oca r di v ersas li nh as l gi cas de cdi go n a mesma l i nha f si ca a t r a v s do edi t or d e t e xt o
utili z a do.

Apesa r da possi bili da de de se escr e v er t odo o progr a ma assi m, e m u ma ni ca li nh a f si ca , i st o
n o r ecome nda do poi s di fi cul t a a l egi bili da de do pr ogr a ma e , conseq e nt e me nt e, a
ma nut e no.

6.2.2. Lista de expresses

A e v ol uo dos bl ocos de cdi go comea co m as l i st as de e x pr esses. Nos e x e mpl os a segui r,
o s mbol o = = > i ndi car o r et or no da e x pr ess o a ps su a a v al i a o ( sej a par a a t ri bui r e m u ma
v ari v el , e xi bi r par a o usu ri o ou i mpri mi r e m u m r el a t ri o) , que ser i mpr esso e m u m
r el a t ri o por e x e mpl o.

Duas Linhas de Cdigo

@00, 00 PSAY x : = 10 = = > 10
@00, 00 PSAY y : = 20 = = > 20

Ca da u ma das l i nh as t er a e x pr esso a v al i a da , e o v al or da v a ri v el ser e nt o i mpr esso.

Duas linha de cdigo em uma , utilizando ponto-e-vrgula

Est e o mesmo cdi go que o a nt eri or , a p e n as escri t o e m u ma ni ca li nh a :

Al er t ( cVal ToCh ar ( x : = 10 ; y : = 20 ) ) = = > 10

Apesa r desse cdi go se e ncont r a r e m u ma ni ca li nh a f si ca , e xi st e m du as li nh as l gi cas
sepa r a das p el o pont o e v r gul a . Ou sej a , esse cdi go equi v al e nt e a :

Al er t ( cVal ToCh ar ( x : = 10 ) )
y : = 20

Por t a nt o a p e n as o v al or 10 da v ari v el x ser passa do par a as f unes cv al t och ar e al er t pa r a
ser e xi bi do. E o v al or 20 a pe n as ser a t ri bu do v ari v el y.




- 69 -

ADVPL Completo


Convertendo para uma lista de expresses

Qu a ndo par nt eses so col oca dos a o r edor do cdi go e o si nal de pont o- e- v r gul a subst i t u do
por u ma v r gul a a pe n as, o cdi go t or na - se u ma li st a de e x pr esses :

Al er t ( cVal ToCh ar ( ( X : = 10 , Y : = 20 ) ) ) = = > 20

O v al or de r et or no r esul t a nt e de u ma li st a de e x pr esses o v al or r esul t a nt e da l ti ma
e x pr ess o ou el e me nt o da li st a . F unci on a como se f osse u m pequ e no progr a ma ou f uno, que
r et or n a o r esul t a do de su a l ti ma a v ali ao ( ef e t ua das da esquer da par a a di r ei t a ) .

Nest e e x e mpl o, a e x pr esso x : = 10 a v al i a da , e e nt o a e x pr esso y : = 20, cuj o v al or
r esul t a nt e passa do p ar a a f uno al er t e cv al t ochar , e e nt o e xi bi do. Depoi s que essa l i nha
de cdi go e x ecut a da , o v al or de X i gual a 10 e o d e y i gual a 20, e 20 ser e xi bi do.

Te ori ca me nt e , n o h l i mi t ao par a o n mero de e x pr esses que pod e m ser combi n a das e m
u ma li st a de e x pr esses. Na pr t i ca , o n mer o m xi mo por vol t a de 500 s mbol os.
Debugar l i st as de e x pr esses di f cil por que as e x pr esses n o est o di vi di das e m l i nh as de
cdi go f ont e, o qu e t or na t odas as e x pr esses associ a das a u ma mes ma li nh a de cdi go. I st o
pode t or n a r mui t o di f cil det e r mi n ar onde u m er ro ocorr e u.

Onde pode-se utilizar uma lista de expresses?

O propsi t o pri nci pal de u ma li st a de e x pr esses a gr up -l as e m u ma ni ca uni da de. E m
qu al quer l ugar do cdi go ADVPL que u ma e x pr ess o si mpl es pod e ser ut ili z a da , pode - se
utili z ar u ma li st a de e x pr esses. E ai nda , pode - se f a z er com que v ri as coi sas acont ea m onde
nor mal me nt e a p e n as u ma acont eceri a .

X : = 10 ; Y : = 20
I f X > Y
Al er t ( " X " )
Z : = 1
El se
Al er t ( " Y" )
Z : = - 1
Endi f

Aqui t e mos o mesmo concei t o, escri t o ut ili z a ndo li st as de e x pr esses n a f uno I I F( ) :

X : = 10 ; Y : = 20
ii f ( X > Y , ;
( Al er t ( " X " ) , Z : = 1 ) , ;
( Al er t ( " Y" ) , Z : = - 1 ) )

De listas de expresses para blocos de cdigo

Consi der e a segui nt e li st a de e x pr esses :

Al er t ( cVal ToCh ar ( ( x : = 10, y : = 20 ) ) ) = = > 20

O ADVPL p er mi t e cri ar f unes, que so p eque nos p edaos d e cdi go, como se f osse u m
peque no pr ogr a ma , ut ili z a dos par a di mi nui r par t es d e t ar ef as mai s co mpl e x as e r e a pr ov ei t ar
cdi go e m mai s de u m l ugar nu m progr a ma . Par a mai or es det al hes consul t e a docu me nt a o
sobr e a cri ao d e f u nes e m ADVPL. Por m, a i di a nest e mo me nt o que a l i st a de
e x pr esses ut ili z a da n a li nh a a nt eri or pod e ser cri a da como u ma f un o :

- 70 -

ADVPL Completo



F unct i on Li st a ( )
X : = 10
Y : = 20
Ret ur n Y

E a li nh a de e x e mpl o com a l i st a de e x pr esses pod e ser subst i t u da , t e ndo o mesmo
r esul t a do, por :

Al er t ( cVal ToCh ar ( Li st a ( ) ) ) = = > 20

Como me nci on a do a nt eri or me nt e, u ma li st a de e x pr esses como u m peque no pr ogr a ma ou
f uno. Com poucas muda nas, u ma l i st a de e x pr esses pod e se t or nar u m bl oco d e cdi go :

( X : = 10 , Y : = 20 ) / / Li st a de Ex pr esses
{ | | X : = 10 , Y : = 20 } / / Bl oco de Cdi go

Not e as cha v es { } utili z a das no bl oco de cdi go. Ou sej a , u m bl oco de cdi go u ma ma t ri z .
Por m na v er da d e, n o u ma li st a de da dos, e si m u ma li st a de coma ndos, u ma li st a de
cdi go.

/ / I st o u ma ma t ri z de da dos
A : = { 10, 20, 30 }
/ / I st o u m bl oco de cdi go, por m f unci on a co mo
/ / se f osse u ma ma t ri z de coma ndos
B : = { | | x : = 10, y : = 20 }

6.2.3. Blocos de Cdigo

Di f er e nt e me nt e d e u ma ma t ri z , no se pode acessar el e me nt os d e u m bl oco de cdi go a t r a v s
de u m ndi ce nu mri co. Por m bl ocos d e cdi go so se mel h a nt es a u ma li st a de e x pr esses, e
a u ma peque na f uno.

Ou sej a , pod e m ser e x ecut a dos. Pa r a a e x ecuo, ou a v al i ao, de u m bl oco de cdi go, de v e-
se ut i li z ar a f uno Ev al ( ) :

nRes : = Ev al ( B) = = > 20

Essa f uno r eceb e co mo par met r o u m bl oco de cdi go e a v ali as t odas as e x pr esses
cont i das nest e bl oco d e cdi go, r et or n a ndo o r esul t a do da l ti ma e x pr esso a v al i a da .

Passando Parmetros

J que bl ocos de cdi go so como pequ e n as f unes, t a mb m poss v el a passa ge m d e
par met ros par a u m bl oco de cdi go. Os pa r met r os d e v e m ser i nf or ma dos e nt r e as bar r as
v er t i cai s ( | | ) separ a dos por v r gul as, assi m como e m u ma f un o.

B : = { | N | X : = 10, Y : = 20 + N }

Por m d e v e- se not ar que j que o bl oco d e cdi go r ecebe u m par met r o, u m v al or d e v e ser
passa do qu a ndo o bl oco de cdi go f or a v al i a do.

C : = Ev al ( B, 1) = = > 2 1


- 71 -

ADVPL Completo


Utilizando Blocos de Cdigo

Bl ocos d e cdi go pode m ser ut ili z a dos e m di v ersas si t u aes. Ger al me nt e s o ut i li z a dos par a
e x ecut ar t ar ef as qu a ndo e v e nt os d e obj et os s o aci on a dos ou pa r a modi fi car o compor t a me nt o
pa dr o d e al gu mas f unes.

Por e x e mpl o, consi der e a ma t ri z a bai xo :

A : = { " GARY HALL" , " FRED SMI TH" , " TI M JONES " }

Est a ma t ri z pode ser or d e n a da pel o pri mei ro nome, ut ili z a ndo- se a ch a ma da da f un o
asor t ( A) , r esul t a do n a ma t ri z com os el e me nt os or de n a dos d essa f or ma :

{ " FRED SMI TH" , " GARY HALL" , " TI M JONES " }

A or de m pa dr o pa r a a f uno asor t asce nd e nt e. Est e compor t a me nt o pod e ser modi fi ca do
a t r a v s da i nf or ma o d e u m bl oco de cdi go que or de n a a ma t ri z de f or ma desce nde nt e :

B : = { | X, Y| X > Y }
a Sor t ( A, B)

O bl oco d e cdi go ( de acor do com a docu me nt ao da f un o asor t ) de v e ser escri t o par a
acei t ar doi s par met r os que so os doi s el e me nt os da ma t ri z par a compar ao. Not e que o
bl oco de cdi go n o conhece qu e el e me nt os est co mpar a ndo - a f u no asor t sel eci on a os
el e me nt os ( t al v e z ut ili z a ndo o al gori t mo Quick Sor t ) e passa - os par a o bl oco de cdi go. O bl oco
de cdi go compar a - os e r et or na v er da d ei ro ( . T. ) se e ncont r a m n a or d e m corr et a , ou f al so ( . F. )
se n o. Se o v al or d e r et or no f or f al so, a f uno asor t i r e nt o t rocar os v al or es d e l ugar e
segui r co mpar a ndo o pr xi mo par de v al or es.
Ent o, no bl oco de cdi go a nt eri or, a co mpa r ao X > Y v er da d ei r a se os el e me nt os est o
e m or d e m d esce nde nt e, o que si gni fi ca que o pri mei ro v al or mai or qu e o segundo.

Par a or d e nar a mesma ma t ri z pel o l ti mo nome, t a mb m e m or d e m desce nd e nt e, pode- se
utili z ar o segui nt e bl oco de cdi go :

B : = { | X, Y| SUBSTR( X, At ( " " , X) + 1) > SUBSTR(Y, At ( " " , Y) + 1) }

Not e que est e bl oco d e cdi go pr ocur a e co mpar a as pa r t es dos car act er es i medi a t a me nt e
segui nt e a u m espao e m br a nco. Depoi s de ut ili z ar esse bl oco de cdi go par a a f uno asor t ,
a ma t ri z cont er :

{ " GARY HALL" , " TI M JONES " , " FRED SMI TH" }

Fi nal me nt e, pa r a or d e n ar u m sub- el e me nt o ( col un a ) de u ma ma t ri z por e x e mpl o, pod e - se
utili z ar o segui nt e bl oco de cdi go :

B : = { | X, Y| X[ 1] > Y[ 1] }

- 72 -

ADVPL Completo



6.2.4. Funes para manipulao de blocos de cdigo

A li ngu a ge m ADVPL possui di v ersas f unes qu e a uxili a m n a ma ni pul ao de bl ocos de cdi go,
de nt r e as qu ai s pod e mos ci t ar as mai s ut ili z a das :

EVAL( )
DBEVAL( )
AEVAL( )

EVAL( )

Sintaxe EVAL(bBloco, xParam1, xParam2, xParamZ)
Descrio
A f uno EVAL( ) ut ili z a da par a a v ali ao di r et a de u m bl oco de cdi go,
utili z a ndo as i nf or maes di spon v ei s no mesmo d e su a e x ecuo. Est a
f uno p er mi t e a d efi nio e passa g e m de di v ersos par met ros que ser o
consi der a dos na i nt er pr et a o do bl oco d e cdi go.

DBEVAL( )

Sintaxe Array(bBloco, bFor, bWhile)
Descrio
A f uno DBEv al ( ) per mi t e que t odos os r egi st ro de u ma det er mi na da t a bel a
sej a m a n al i sa dos e pa r a ca da r egi st ro ser e x ecut a do o bl oco d e cdi go
defi ni do.

AEVAL( )

Sintaxe AEVAL(aArray, bBloco, nInicio, nFim)
Descrio
A f uno AEVAL( ) per mi t e que t odos os el e me nt os de u m d et er mi n a da arr a y
sej a m a n al i sa dos e pa r a ca da el e me nt o ser e x ecut a do o bl oco de cdi go
defi ni do.













- 73 -

ADVPL Completo


20

7. Funes

A mai or par t e das rot i n as que qu er e mos escr e v er e m progr a mas so compost as de u m
conj unt o de coma ndos, rot i n as est as que se r epet e m ao l ongo de t odo o
dese nvol vi me nt o. Uma f uno na da mai s do que u m conj unt o de coma ndos que par a ser
utili z a da bast a ch a m -l a pel o se u nome.

Par a t or n a r u ma f uno mai s fl e x v el , ao ch a m -l a pode- se passar par met r os, o qu ai s cont m
os da dos e i nf or maes que defi ne m o pr ocessa me nt o da f uno.

Os par met r os das f unes descri t as ut ili z a ndo a li ngu a ge m ADVPL so posi ci onai s, ou sej a , n a
sua passa ge m no i mpor t a o nome da v ari v el e si m a su a posio de nt r o da li st a de
par met ros, o qu e per mi t e e x ecut ar u ma f uno escr e v e ndo :

Cal cul a ( par A, par B, pa r C) / / Cha ma da da f un o e m u ma rot i na

E a funo estar escrita:

User F unct i on Cal cul a ( x, y, z )

. . . Coma ndos da F un o

Ret ur n . . .


Nest e caso, x assu me o v al or de par A, y d e pa r B e z d e pa r C.

A f uno t a mb m t e m a f acul da de de r et or n ar u ma v ari v el , pode ndo i ncl usi v e ser u m Ar r a y .
Par a t al e ncer r a - se a f u no com:

Return(campo)

Assi m A : = Cal cul a( par A, par B, par C) a t ri bui A o cont e do do r et or no da f un o
Cal cul a .

No ADVPL e xi st e m mil har es d e f unes escri t as pel a equi pe de Tecnol ogi a Mi crosi ga ,
pel os a n ali st as de supor t e e pel os pr pri os usu ri os.



Exi st e u m di t a do que di z que :

Val e mais u m pr ogr a ma dor qu e conhece t odas as f unes dispon v ei s e m
u ma li ngu a ge m do que a quel e que , mesmo se ndo g ni o, r ei nv e nt a a roda a
ca da nov o progr a ma.

No DEM ( Docu me nt a o El et r ni ca Mi crosi ga ) mai s de 500 est o docu me nt a das, e est e
n mero t e nde a a u me nt ar e x pone nci al me nt e com os novos pr ocessos de docu me nt ao que
est o e m i mpl a nt ao n a Tecnol ogi a e I nt el i g nci a Prot he us.

O obj et i vo do curso a pr ese nt ar, d e monst r ar e fi x ar a ut ili z ao das pri nci pai s f unes,
si nt a x es e est r ut ur as ut ili z a das e m ADVPL.

No ADVPL, a t os pr ogr a mas cha ma dos do me nu s o f unes, se ndo que e m u m r eposi t ri o
n o pod e m ha v er f unes com o mesmo no me , e par a per mi ti r que os usuri os e a n al i st as

- 74 -

ADVPL Completo


possa m d ese nvol v er su as prpri as f unes se m que as mesmas confli t e m com as j
di spon v ei s no a mbi e nt e ERP, f oi i mpl e me nt a da pel a Tecnol ogi a Mi crosi ga u m ti po especi al de
f uno d e nomi na do User F unct i on.

Nos t pi cos a segui r ser o d et al h a dos os t i pos de f unes di spon v ei s n a li ngu a ge m ADVPL,
suas f or mas d e ut ili z ao e r esp ect i v as di f er e nas.


7.1. Tipos e escopos de funes

E m ADVPL pode m ser ut ili z a dos os segui nt es t i pos d e f unes :

E Function( )
E User Function( )
E Static Function( )
E Main Function( )

Function( )

F unes ADVPL conv e nci on ai s, r est ri t as ao dese nv ol vi me nt o da r e a de I nt eli g nci a Prot he us
da Mi crosi ga .

O i nt er pr et a dor ADVPL di sti ngue nomes d e f unes do t i po F unct i on( ) com a t d e z car act er es.
A par t i r do dci mo ca r act er, a pesar do compi l a dor n o i ndi car qu ai squer t i pos de er ros, o
i nt er pr et a dor i gnor ar os de mai s ca r act er es.

Exemplo:

/ / Font e MATA100 I NCL. PRW
# I NCLUDE " pr ot he us. ch "

F unct i on MATA100I NCL01( )

ALERT( " 01 " )
Ret ur n

F unct i on MATA100I NCL02( )

ALERT( " 02 " )
Ret ur n

Ao e x ecut ar a f un o MATA100 I NCL01( ) ser e xi bi da a me nsa ge m 01, mas ao e x ecut ar a
f uno MATA100 I NCL0 2( ) t a mb m ser e xi bi da a me nsa ge m 01, poi s o i nt er pr et a dor
consi der a o nome da f u no como MATA100 I NC.



1. F unes do t i po F unct i on( ) some nt e pode m ser e x ecut a das a t r a v s
dos mdul os do ERP.

2. Some nt e pod er o ser compil a das f unes do t i po F unct i on( ) se o MP-
I DE possui r u ma a ut ori z ao esp eci al f or neci da pel a Mi crosi ga .

3. F unes do t i po F unct i on( ) so acess v ei s por qu ai squer out r as
f unes e m uso p el a a pli cao.


- 75 -

ADVPL Completo



User Function( )

As User Defi ned F uncti ons ou f unes defi ni das pel os usu ri os, so t i pos especi ai s de f unes
i mpl e me nt a dos pel o ADVPL par a ga r a nt i r que d ese nvol vi me nt os espec fi cos n o r e al i z a dos pel a
I nt el i g nci a Prot he us da Mi crosi ga sobr eponh a m as f unes pa dres dese nvol vi das par a o ERP.

O i nt er pr et a dor ADVPL consi der a qu e o nome de u ma User F unct i on compost o pel o nome
defi ni do par a a f uno pr ecedi do dos ca r act er es U_. Dest a f or ma a User F unct i on XMAT100I
ser t r a t a da pel o i nt er pr et a dor co mo U_XMAT100I .



1. Como ocorr e o acr sci mo dos ca r act er es U_ no nome da f un o e o
i nt er pr et a dor consi der a a pe n as os de z pri mei ros car act er es da f un o
par a sua di f er e nci ao, r ecome nda do que os nomes das User
F unct i ons t e nh a m a pe n as oi t o ca r act er es p ar a e vi t ar r esul t a dos
i ndesej a dos dur a nt e a e x ecuo da a pli cao.

2. F unes do t i po User F unct i on so acess v ei s por qu ai squer out r as
f unes e m uso pel a a pli cao, desde qu e e m su a ch a ma da sej a m
utili z a dos os ca r act er es U_ e m conj unt o com o nome da f uno.



As User F unct i ons pode m ser e x ecut a das a par t i r da t el a i ni ci al do cli e nt do
ERP (Mi crosi ga Prot he us Re mot e) , mas as a pli caes que pr et e nde m
di sponi bili z ar est a op o de v e m possui r u m pr e paro a di ci on al de a mbi e nt e.

Par a mai or es i nf or maes consul t e no DEM o t pi co sobr e pr epar ao d e
a mbi e nt e e a docu me nt ao sobr e a f un o RpcSet Env( ) .


Static Function( )

F unes ADVPL t r a di ci on ai s, cuj a vi si bili da de est r est ri t a as f unes descri t as no mesmo
ar qui vo de cdi go f ont e no qu al est o d efi ni das.

Exemplo:

/ / Font e F I NA010. PRW

F unct i on F I NA010( )

Cri a Sx 1( F I N010)
Ret ur n

St a t i c F uncti on CRI ASX1( )
/ / Font e F I NA020. PRW

F unct i on F I NA020( )

Cri a Sx 1( F I N020)
Ret ur n

St a t i c F uncti on CRI ASX1( )


- 76 -

ADVPL Completo



No e x e mpl o aci ma , e xi st e m duas f unes d e nomi n a das CRI ASX1( ) d efi ni das e m ar qui vos d e
cdi go f ont e di st i nt os : F I NA010. PRW e F I NA020. PRW.

A f uno F I NA010( ) t er vi si bili da de a pe n as da f uno CRI ASX1( ) defi ni da no ar qui vo de
cdi go f ont e F I NA010. PRW, se ndo que o mesmo ocor r e com a f uno F I NA020( ) .

Est e r ecurso p er mi t e i sol ar f unes d e uso e xcl usi vo de u m ar qui vo de cdi go f ont e, e vi t a ndo a
sobr eposi o ou dupli cao d e f unes n a a pli cao.

Nest e cont e xt o as St a t i c F unct i ons( ) so ut ili z a das par a :

1. Pa droni z ar o nome de u ma det er mi n a da f uno, que possui a mesma fi n ali da de, mas
que su a i mpl e me nt ao pode v a ri ar de acor do com a necessi da de de f uno pri nci pal /
a pli cao.

2. Redefi ni r u ma f uno pa dr o da a pli cao, a d e qu a ndo- a as necessi da des espec fi cas de
u ma f uno pri nci pal / apli cao.

3. Prot eger f unes d e uso esp ec fi co de u m ar qui vo de cdi go f ont e / f uno pri nci pal .



O a mbi e nt e de d ese nv ol vi me nt o utili z a do na a pli cao ERP (MP- I DE) v ali da
se e xi st e m F unct i ons( ) , Mai n F uncti ons( ) ou User F unct i ons( ) com o mesmo
nome mas e m ar qui vos de cdi go f ont es di st i nt os, e vi t a ndo a dupli ci dade ou
sobr eposi o d e f unes.


Main Function( )

Mai n F uncti on( ) out ro t i po de f un o especi al do ADVPL i ncor por a do par a p er mi ti r
t r a t a me nt os di f er e nci a dos n a a pl i cao ERP.

Uma Mai n F uncti on( ) t e m a car act er st i ca de poder ser e x ecut a da a t r a v s da t el a i ni ci al de
par met ros do cli e nt do ERP (Mi cr osi ga Pr ot h e us Re mot e ) , da mes ma f or ma que u ma User
F unct i on, com a di f er e na que as Mai n F uncti ons some nt e pod e m ser d ese nvol vi das com o uso
da a ut ori z ao d e co mpil ao, t or n a ndo su a ut ili z ao r est ri t a a I nt el i g nci a Prot he us d a
Mi crosi ga .

Na a pli cao ERP comu m o uso das Mai n F unct i ons( ) n as segui nt es si t u aes :

1. Defi ni o dos mdul os da a pli cao ERP: Mai n F unct i on Si ga a dv( )

2. Defi ni o de a t uali z aes e upda t es : AP710TOMP811( )

3. At u ali z aes espec fi cas de mdul os da a pl i cao ERP: Upda t e ATF( )

- 77 -

ADVPL Completo



7.2. Passagem de parmetros entre funes

Como me nci on a do a nt eri or me nt e os par met r os das f unes d escri t as ut ili z a ndo a li ngu a ge m
ADVPL s o posi ci onai s, ou sej a , n a su a passa g e m n o i mpor t a o nome da v a ri v el e si m a
sua posi o d e nt r o da li st a de par met ros.

Compl e me nt a ndo est a defi ni o, pode m ser ut ili z a das du as f or mas di st i nt as de passa ge ns de
par met ros pa r a f unes descri t as n a li ngu a ge m ADVPL:

E Passa g e m d e pa r met ros por cont e do
E Passa g e m d e pa r met ros por r ef er nci a

Passagem de parmetros por contedo

A passa g e m de par me t ros por cont e do a f or ma con v e nci onal de defi ni o dos par met ros
r ecebi dos pel a f uno ch a ma da , n a qu al a f uno r eceb e os cont e dos passa dos p el a f uno
cha ma dor a , n a or d e m com os qu ai s s o i nf or ma dos.


User F unct i on Cal cF a t or ( nF a t or )

Local nCnt
Local nResul t a do : = 0

For nCnt : = nF a t or To 1 St ep - 1
nResul t a do * = nCnt
Ne xt nCnt

Al er t ( " O f a t ori al de " + cVal ToCh ar ( nF a t or ) + ;
" " + cVal ToCh ar ( nResul t a do) )

Ret ur n



Av ali a ndo a f uno Cal cF a t or ( ) descri t a a nt eri or me nt e pod e mos v eri fi car que a mesma r ecebe
como par met ro par a su a e x ecu o a v a ri v el nF a t or.

Com base nest a f un o pod e mos descr e v er du as f or ma de passa g e m de pa r met r os por
cont e do :

E Passagem de contedos diretos
E Passagem de variveis como contedos

Exemplo 01 Passagem de contedos diretos

User F unct i on Di r F a t or ( )

Local nResul t a do : = 0

nResul t a do : = Cal cF a t or (5)



- 78 -

ADVPL Completo


A passa g e m de cont e dos di r et os i mpli ca n a defi ni o e x pl ci t a do v al or do pa r met ro n a
e x ecu o da cha ma da da f uno. Nest e caso f oi i nf or ma do o cont e do 5 ( nu mri co) como
cont e do par a o pri mei ro par met ro da f un o Cal cF a t or.

Como a l i ngu a ge m ADVPL t r a t a os pa r met r os de f or ma posi ci on al , o cont e do 5 ser a t ri bu do
di r et a me nt e a v a ri v el defi ni da como pri mei ro par met ro da f un o cha ma do, no nosso caso
nF a t or.

Por ser u ma a t ri bui o de par met ros por cont e do, o i nt er pr et a dor d a li ngu a ge m basi ca me nt e
e x ecut a u ma oper a o de a t ri bui o nor mal , ou sej a , nF a t or : = 5.



Du as car act er st i cas da li ngua ge m ADVPL t or n a m necess ri a u ma at e no
esp eci al na cha ma da de f unes :

1. A li ngu a ge m ADVPL n o u ma li ngua ge m ti pa da , de f or ma que as
v ari v ei s no t e m u m ti po pr e vi a me nt e defi ni do, acei t a ndo o cont e do
que l hes f or i mpost o a t r a v s de u ma a t ri bui o.

2. Os pa r met ros d e u ma f uno so a t ri bu dos de acor do com a or de m
com os quai s so defi ni dos n a ch a ma da da mesma . No r e al i z a da
ne nhu m ti po de consi st nci a e m r el ao a os t i pos dos cont e dos e
obri ga t ori eda de d e pa r met r os n est a a o.





Os par met ros de u ma f uno s o ca r act eri z a dos como v ari v ei s de escopo
LOCAL par a ef ei t o de e x ecu o.

Dest a f or ma os mesmos n o de v e m ser defi ni dos nov a me nt e como LOCAL n a
r e a d e defi ni o e i ni ci ali z ao de v ari v ei s, poi s caso i st o ocor r a h a v er a
per da dos v al or es r ecebi dos pel a r ed efi ni o das v a ri v ei s n a f uno.

Caso sej a n ecessri o gar a nt i r u m cont e do pa dr o pa r a u m det er mi n a do
par met ro de v er ser utili z a do o i de nt i fi ca dor DEFAULT conf or me d e t al h ado
no t pi co Tr a t a me nt o d e v al or es pa dr es pa r a par met ros d e f unes.


Exemplo 02 Passagem de variveis como contedos

User F unct i on Di r F a t or ( )

Local nResul t a do : = 0
Local nF a t or User : = 0

nF a t or User : = Get F a t or ( ) / / F uno il ust r a t i v a n a qu al o usuri o i nf or ma o f a t or a ser ut i li z a do.

nResul t a do : = Cal cF a t or (nFatorUser)


A passa ge m de cont e dos como v a ri v ei s i mpli ca n a utili z ao de v ari v ei s de a poi o pa r a
e x ecut ar a cha ma da d e u ma f un o. Nest e caso f oi i nf or ma da a v a ri v el nF a t or User, a qu al
ser defi ni da pel o usu ri o a t r a v s da f un o il ust r a t i v a Get F a t or ( ) . O uso de v ari v ei s de a poi o
fl e xi bili z a a ch a ma da d e out r as f unes, poi s el as ser o pa r a met ri z a das de acor do com as
necessi da des da qu el e processa me nt o esp ec fi co no qual se e ncont r a a f uno ch a ma dor a .

- 79 -

ADVPL Completo



Como a l i ngua ge m ADVPL t r a t a os par met r os de f or ma posi ci on al , o cont e do da v a ri v el
nF a t or User ser a t ri bu do di r et a me nt e a v a ri v el defi ni da como pri mei ro par met r o da f uno
cha ma do, no nosso caso nF a t or.

Por ser u ma a t ri bui o de par met ros por cont e do, o i nt er pr et a dor d a li ngu a ge m basi ca me nt e
e x ecut a u ma oper a o de a t ri bui o nor mal , ou sej a , nF a t or : = nF a t or User.



A passa ge m de pa r met r os n o necessi t a que as v ari v ei s i nf or ma das na
f uno ch a ma dor a t e n h a m os mesmos nomes das v ari v ei s ut ili z a das n a
defi ni o de par met r os da f uno ch a ma da .

Dest a f or ma pode mos t er :

User F unct i on Di r F a t or ( )

Local nF a t or User : = Get F a t or ( )

nResul t a do : = Cal cF a t or (nFatorUser)

. . .


F unct i on Cal cF a t or (nFator)
. . .


As v ari v ei s nF a t or User e nF a t or pod e m t er nomes di f er e nt es poi s o
i nt er pr et a dor f ar a a t ri bui o de cont e do com base n a or d e m dos
par met ros e no pel o nome das v a ri v ei s.


Passagem de parmetros por referncia

A passa ge m d e par met r os por r ef er nci a u ma t cni ca mui t o co mu m n as li ngu a ge ns de
progr a ma o a qu al per mi t e que v ari v ei s de escopo LOCAL t e nh a m se u cont e do ma ni pul a do
por f unes espec fi cas, ma nt e ndo o cont r ol e d est as v a ri v ei s r est ri t o a f uno qu e as defi ni u e
as f unes desej a das p el a a pli cao.

A passa ge m d e par me t ros por r ef er nci a utili z a o concei t o de que u ma v ari v el u ma r e a
de me mri a e por t a nt o passar u m pa r met ro por r ef er nci a n a da mai s do que ao i nv s d e
passar o cont e do par a a f uno ch a ma da , passar qu al a r e a de me mri a utili z a da pel a
v ari v el passa da .


- 80 -

ADVPL Completo




Passagem de parmetros tradicional Duas variveis x Duas reas de memria



Passagem de parmetros por referncia Duas variveis x uma nica rea de memria






- 81 -

ADVPL Completo


Dest a f or ma a f un o ch a ma da t e m acesso n o a pe nas a o cont e do, mas a v a ri v el e m si ,
poi s a r e a de me mri a a v ari v el , e qual quer al t er a o nest a ser vi s v el a f uno
cha ma dor a qu a ndo t i v er o r et or no da f un o ch a ma dor a .




Tratamento de contedos padres para parmetros de funes

O t r a t a me nt o de cont e dos pa dres par a par met r os d e f unes mui t o ut ili z a do n as f unes
pa dres da a pl i cao ERP, d e f or ma a gar a nt i r a corr et a e x ecu o d est as f unes por qu al quer
f uno ch a ma dor a , e vi t a ndo si t uaes d e ocor r nci as de err os p el a f al t a da defi ni o de
par met ros necess ri os a cor r et a ut ili z ao da f uno.


A li ngu a ge m ADVPL n o obri ga a passa g e m d e t odos os par met r os d escri t os
na defi ni o da f un o, se ndo que os pa r met r os n o i nf or ma dos ser o
consi der a dos co m cont e do nul o.

Dest a f or ma o uso do i de nt i fi ca dor DEFAULT per mi t e ao dese n vol v edor ga r a nt i r que n a
utili z ao da f uno det er mi na dos pa r met ros t er o o v al or com u m t i po a d e qu a do a f uno.

Exemplo:

User F unct i on Cal cF a t or ( nF a t or )

Local nCnt
Local nResul t a do : = 0
Def a ul t nF a t or : = 1

For nCnt : = nF a t or To 1 St ep - 1
nResul t a do * = nCnt
Ne xt nCnt

Ret ur n nResul t a do


No e x e mpl o descri t o, caso o par met r o nF a t or n o sej a i nf or ma do n a f uno ch a ma dor a , o
mesmo t er se u cont e do defi ni do como 1.


- 82 -

ADVPL Completo


Se est e t r a t a me nt o n o f osse r e ali z a do e com i sso o par met r o nF a t or n o f osse i nf or ma do,
ocor r eri a o segui nt e e v e nt o de err o :

Exemplo:

User F unct i on Cal cF a t or ( nF a t or )

Local nCnt
Local nResul t a do : = 0

For nCnt : = nF a t or To 1 St ep - 1 / / nF a t or est como Nul o, por t a ndo nCnt nul o
nResul t a do * = nCnt
Ne xt nCnt / / Ao ef et u ar o Ne xt , o i nt er pr et a dor r e al i z a a ao nCnt + = 1.

Ret ur n nResul t a do


Como o i nt er pr et a dor r e al i z ar a ao nCnt + = 1, e o cont e do d a v ari v el nCnt nul o
ocor r er o er ro d e t y pe mi sma t h on + = , e x pect ed N U poi s os t i pos das v ari v ei s
e nvol vi dos n a op er ao so di f er e nt es : nCnt nul o ( U) e 1 nu mri co ( N) .


Caso o par met r o qu e possui a opo DEFAULT descri t a no f ont e sej a
i nf or ma do, a li nh a de DEFAULT n o ser e x ecut a da , ma nt e ndo dest a f or ma o
cont e do passa do p el a f uno ch a ma dor a .




















- 83 -

ADVPL Completo



8. Diretivas de compilao

O compi l a dor ADVPL possui u ma f unci on ali dade de nomi n a da pr - pr ocessa dor, o qual na da
mai s do que u m progr a ma que e x a mi n a o progr a ma f ont e escri t o e m ADVPL e e x ecut a cer t as
modi fi caes n el e, base a das n as Di r et i v as de Compil ao.

As di r et i v as de compil ao s o coma ndos que n o so compi l a dos, se ndo di ri gi dos ao pr -
processa dor, o qu al e x ecut a do pel o co mpil a dor a nt es da e x ecu o do processo de
compi l ao propri a me nt e di t o.

Por t a nt o, o pr - pr ocessa dor modi fi ca o progr a ma f ont e, e nt r ega ndo par a o compi l a dor u m
progr a ma modi fi ca do de acor do com as di r et i v as de compi l ao, as s o i ni ci a das pel o ca r act er e
# .

As di r et i v as pode m ser col oca das e m qu al quer par t e do progr a ma , se ndo qu e as
i mpl e me nt a das pel a li ngu a ge m ADVPL s o :

E #INCLUDE
E #DEFINE
E #IFDEF
E #IFNDEF
E #ELSE
E #ENDIF
E #COMMAND


Lembre-se

As di r et i v as de compil ao t a mb m s o conheci das como UDC User Defi ned
Comma nds.


Diretiva: #INCLUDE

A di r et i v a #INCLUDE i ndi ca e m que ar qui vo de e xt e nso CH ( pa dr o ADVPL) est o os UDCs
a ser e m ut ili z a dos pel o pr - pr ocessa dor.

A a pli cao ERP possui di v ersos i ncl udes, os qu ai s de v e m ser ut i li z ados segundo a a pl i cao
que ser d ese nv ol vi da , o que p er mi ti r a ut ili z ao d e r ecursos a di ci on ai s defi ni dos par a a
li ngua ge m, i mpl e me nt a dos p el a r e a de Tecnol ogi a da Mi crosi ga .

Os i ncl udes mai s utili z ados n as a pli caes ADVPL d ese nvol vi das par a o ERP s o :

E PROTHEUS.CH: di r et i v as de compi l ao pa dres par a a li ngu age m. Cont m a
esp eci fi cao da mai ori a das si nt a x es ut ili z adas nos f ont es, i ncl usi v e p er mi t i ndo a
compa t i bili da de da si nt a x e t r a di ci on al do Cli pper par a os nov os r ecursos i mpl e me nt a dos
no ADVPL.

- 84 -

ADVPL Completo



O i ncl ude PROTHEUS. CH ai nda cont m a r ef er nci a a out ros i ncl udes ut ili z a das pel a
li ngu a ge m ADVPL que compl e me nt a m est a f unci onali da de de compa t i bili da de com a
si nt a x e Cli pper, t ai s co mo :

o DIALOG.CH
o FONT.CH
o INI.CH
o PTMENU.CH
o PRINT.CH



Fique atento

A ut ili z ao do i ncl ude prot he us. ch nos f ont es dese nv ol vi dos par a a
a pli cao ERP Pr ot he us obri ga t ri a e necess ri a ao cor r et o
f unci on a me nt o das a pl i caes.


E AP5MAIL.CH: Per mi t e a ut ili z ao da si nt a x e t r a di ci on al n a defi ni o das segui nt es
f unes d e e nvi o e r ece bi me nt o de e - mai l :

o CONNECT SMTP SERVER
o CONNECT POP SERVER
o DI SC ONNECT SMTP SERVER
o DI SC ONNECT POP SERVER
o POP MESSAGE C OUNT
o SEND MAI L FROM
o GET MAI L ERROR
o RECEI VE MAI L MESSAGE

E TOPCONN.CH: Per mi t e a utili z ao da si nt a x e t r a di ci on al n a defi ni o das segui nt es
f unes d e i nt egr a o com a f err a me nt a T OPC ONNECT (MP10 DbAcess) :

o TCQUERY

E TBICONN.CH: Per mi t e a utili z ao da si nt a x e t r a di ci onal na defi ni o de cone x es com
a a pli cao Ser v er do a mbi e nt e ERP, a t r a v s d a segui nt es si nt a x es :

o CREATE RPCCONN
o CLOSE RPCCONN
o PREPARE ENVI RONMENT
o RESET ENVI RONMENT
o OPEN REMOTE TRANSACTI ON
o CLOSE REMOTE TRANSACTI ON
o CALLPROC I N
o OPEN REMOTE TABLES

E XMLXFUN.CH: Per mi t e a utili z ao da si nt a x e t r a di ci on al n a ma ni pul ao d e ar qui vos e
st ri ngs no pa dr o XML, a t r a v s das segui nt es si nt a x es :

o CREATE XMLSTRI NG
o CREATE XMLF I LE
o SAVE XMLSTRI NG
o SAVE XMLF I LE

- 85 -

ADVPL Completo


o ADDI TEM TAG
o ADDNODE NODE
o DELETENODE


Os r ecursos de t r a t a me nt os d e e - mail s, i nt egr a o com a f err a me nt a
TOPC ONNECT ( DbAcess) , pr epar ao d e a mbi e nt es e ma ni pul ao de
ar qui vos e st ri ngs do pa dr o XML ser o a bor da dos no curso de ADVPL
Av a na do.



O di r et ri o d e i ncl udes d e v e ser esp eci fi ca do no a mbi e nt e d e
dese nvol vi me nt o do ERP Prot he us (MP- I DE) par a ca da confi gur ao d e
compi l ao di spon v el .

Caso o di r et ri o de i ncl udes n o est ej a i nf or ma do, ou est ej a i nf or ma do
i ncorr et a me nt e ser e xi bi da u ma me nsa ge m d e err o i nf or ma ndo :

No foi possvel criar o arquivo <caminho \ nome> .ERX




As f unes dese nvol vi das par a a a pl i cao ERP cost u ma m ut ili z ar i ncl udes
par a defi ni r o cont e do de st ri ngs e v a ri v ei s di v ersas ut ili z a das pel a
a pli cao e m di f er e nt es i di omas. Dest a f or ma nor mal v eri fi car que u m
f ont e possui u m ar qui vo . CH com o mesmo nome, o que car act eri z a est e
t i po de i ncl ude.


Diretiva: #DEFINE

A di r eti v a # DEF I NE per mi t e que o dese nv ol v e dor cri e novos t er mos par a ser e m ut ili z a das no
cdi go f ont e. Est e t er mo t e m o ef ei t o de u ma v ari v el de escopo PUBLI C, mas qu e af e t a
some nt e o f ont e n a qu al o # DEF I NE est defi ni do, com a ca r act er sti ca de n o per mi ti r a
al t er ao d e se u cont e do.

Dest a f or ma u m t er mo defi ni do a t r a v s da di r e t i v a # DEF I NE pod e ser consi der a do como u ma
const a nt e .



Os ar qui vos de i ncl ude defi ni dos par a os f ont es da a pli cao ERP cont m
di r et i v as # DEF I NE par a as st ri ngs de t e xt os de me nsa ge ns e xi bi das par a os
usu ri os nos t r s i di omas com os qu ai s a a pli cao di st ri bu da : Por t ugus,
I ngl s e Espa nhol .

Por est a r a z o a a pli cao ERP possui t r s r e posi t ri os di sti nt os par a ca da
u ma das bases de da dos homol oga das p el a Mi crosi ga , poi s ca da compi l ao
utili z a u ma di r et i v a r ef er e nt e ao se u i di oma .





- 86 -

ADVPL Completo



Diretivas: #IFDEF, IFNDEF, #ELSE e #ENDIF

As di r et i v as # I F DEF, # I F NDEF , # ELSE e # ENDI F p er mi t e m a o d ese nvol v edor cri ar f ont es
fl e x v ei s e se ns v ei s a det er mi na das confi gur aes da a pl i cao ERP.

At r a v s dest as di r et i v as, pode m ser v eri fi ca dos par met r os do si st e ma , t ai s como o i di oma
com o qu al est pa r a met ri z a do e a base d e da dos ut ili z a da par a ar ma z e n ar e g er e nci ar as
i nf or maes do ERP.

Dest a f or ma , ao i nv s d e escr e v er doi s ou mai s cdi gos f ont es que r e al i z a m a mesma f uno,
mas ut ili z a ndo r ecursos di sti nt os par a ca da base d e da dos ou e xi bi ndo me nsa g e m pa r a ca da
u m dos i di omas t r a t a dos pel a a pl i cao, o d ese nvol v edor pode pr epar a r se u cdi go f ont e par a
ser a v al i a do pel o pr - processa dor, o qu al i r ger a r u m cdi go compi l a do de acor do com a
a n li se dos pa r met ros de a mbi e nt e.

Est as di r et i v as de compil ao est o nor mal me nt e associ a das as se gui nt es v eri fi caes d e
a mbi e nt e :

E I di oma : v eri fi ca as v ari v ei s SPANI SH e ENGLI SH, di sponi bili z a das pel a a pli cao. O
i di oma por t ugus d et er mi n a do pel a e xce o :


# I F DEF SPANI SH
# DEF I NE STR0001 Hol a !!!
# ELSE

# I F DEF ENGLI SH
# DEF I NE STR0001 Hel l o !!!
# ELSE
# DEF I NE STR0001 Ol !!!
# ENDI F

# ENDI F




Apesa r da est r ut ur a se mel h a nt e ao I F- ELSE- ELSEI F- ENDI F, n o e xi st e
a di r et i v a de compil ao # ELSEI F , o que t or n a necessri o o uso d e
di v ersos # I F DEFs pa r a a mont a ge m d e u ma est r ut ur a que seri a
f aci l me nt e sol uci on a da com I F - ELSE- ELSEI F- ENDI F .



A a pli cao ERP di sponi bili z a a v ari v el de escopo PUBLI C -
__LANGUAGE, a qu al cont m u ma st ri ng que i de nti fi ca o i di oma e m
uso p el o si st e ma , cuj o os cont e dos poss v ei s so :

E PORTUGUESE
E SPANI SH
E ENGLI SH




- 87 -

ADVPL Completo


E Ba nco d e Da dos : v eri fi ca as v ari v ei s AXS e T OP pa r a d et er mi n ar se o ba nco de da dos
e m uso pel a a pli cao est no f or ma do I SAM ( DBF, ADS, CTREE, et c. ) ou se est
utili z a ndo a f er r a me nt a TOPC ONNECT ( DbAcess) .


# I F DEF TOP

cQuer y : = SELECT * FROM + RETSQLNAME( SA1)
dbUse Ar e a ( . T. , " T OPC ONN" , TcGe n Qr y( , , cQu er y) , SA1 QRY, . T. , . T. )

# ELSE
DbSel ect Ar e a ( SA1)
# ENDI F



Os ba ncos de da dos pa dr o AS400 n o per mi t e m a e x ecu o de queri es
no f or ma t o SQLANSI a t r a v s da f err a me nt a T OPCONNECT ( DbAcess) .

Dest a f or ma necess ri o r e al i z ar u ma v eri fi cao a di ci onal ao # I F DEF
TOP a nt es d e e x ecut ar u ma quer y, que no caso r e al i z ada a t r a v s do
uso da f un o TcSr v Ty p e( ) , a qu al r et or n a a st ri ng AS/ 400 qu a ndo est e
f or o ba nco e m uso.

Par a est es ba ncos d e v e ser ut ili z a da a si nt a x e ADVPL t r a di ci on al .


Diretiva: #COMMAND

A di r et i v a # COMMAND utili z a da pri nci pal me nt e nos i ncl udes da li ngu a ge m ADVPL par a
ef et uar a t r a du o de coma ndos e m si nt a x e CLI PPER par a as f unes i mpl e me nt a das pel a
Tecnol ogi a Mi crosi ga .

Est a di r et i v a per mi t e que o dese nv ol v edor defi n a par a o compi l ador como u ma e x pr ess o
de v er ser i nt er pr et a da .

Trecho do arquivo PROTHEUS.CH

# xcomma nd @ < nRow > , < nCol > SAY [ < oSa y > < l a bel : PROMPT, VAR > ] < cTe xt > ;
[ PI CTURE < cPi ct > ] ; [ < dl g : OF, WI NDOW, DI ALOG > < oWnd > ] ;
[ F ONT < oFont > ] ; [ < l Ce nt er : CENTERED, CENTER > ] ;
[ < l Ri ght : RI GHT > ] ; [ < l Bor d er : BORDER > ] ;
[ < lPi x el : PI XEL, PI XELS > ] ; [ < col or : COLOR, C OLORS > < nCl r Te x t > [ , < nCl r Back > ] ] ;
[ SI Z E < nWi dt h > , < nHei ght > ] ; [ < desi gn : DESI GN > ] ;
[ < upda t e : UPDATE > ] ; [ < l Sh a ded : SHADED, SHADOW > ] ;
[ < l Box : BOX > ] ; [ < l Rai sed : RAI SED > ] ;
= > ;
[ < oSa y > : = ] TSay( ):New( < nRow > , < nCol > , < { cTe xt } > , ;
[ < oWnd > ] , [ < cPi ct > ] , < oF ont > , < . l Ce nt er. > , < . l Ri ght . > , < . l Bor der. > , ;
< . lPi x el . > , < nCl r Te x t > , < nCl r Back > , < nWi dt h > , < nHei ght > , ;
< . d esi gn. > , < . upda t e. > , < . l Sh a ded. > , < . l Box. > , < . l Rai sed. > )


At r a v s da di r et i v a # C OMMAND, o d ese nv ol v edor d et er mi nou as r e gr as pa r a que a si nt a x e
t r a di ci on al da li ngu a ge m CLI PPER pa r a o coma ndo SAY f osse conv er t i da n a especi fi cao de
u m obj et o TSAY( ) do ADVPL.

- 88 -

ADVPL Completo



MDULO 03: Desenvolvendo pequenas customizaes

9. ADVPL e o ERP Microsiga Protheus

O ADVPL ( Adv a nced Pr ot he us La ngua ge) u ma li ngu a ge m de progr a mao dese n vol vi da pel a
Mi crosi ga e que cont m t odas as i nst r ues e f unes necessri as ao dese nv ol vi me nt o de
u m si st e ma , i ndepe nde nt e d e su a compl e xi da de.

O PROTHEUS, por out r o l a do, u ma pl a t af or ma t ecnol gi ca que e ngl oba u m Ser vi dor d e
Apli cao, u m Di ci on ri o de Da dos e as I nt erf aces par a cone x o co m o usuri o. o Prot he us
que e x ecut a o cdi go ADVPL e o d e vi do acesso base da da dos.

O Pr ot he us compost o pel o ERP ( que e ngl oba , al m das f unci on ali da des descri t as nos
ca p t ul os a nt eri or es, mai s de t ri nt a v er t i cai s a pli ca das a r e as espec fi cas de n egci os) e
pel o Confi gur a dor ( progr a ma que per mi t e cust omi z ar o si st e ma s necessi da des do usu ri o
de f or ma f cil ) .

9.1. O Ambiente Protheus

O Pr ot he us const i t u do de u m conj unt o de Sof t war es que co mpe m as ca ma das de
f unci onali da des bsi cas aos ser vi os d e a pl i ca o, i nt erf ace, ba nco de da dos e r eposi t ri o,
conf or me o di a gr a ma d a fi gur a a bai xo :




O obj et i vo do TOTVS De v St udi o f aci li t ar a t ar ef a de escr e v er progr a mas : a t r a v s d e cor es,
i ndi ca se a pal a vr a escri t a u ma i nst r uo, u ma v a ri v el ou u m come nt ri o ; or ga ni z a a
bi bli ot eca de progr a mas e m pr oj et os e a d mi nist r a o r eposi t ri o d e obj et os ; a pont a er ros d e
Figura: Camadas bsicas do ambiente Protheus


Par a e x ecut a r u m progr a ma dese nv ol vi do e m ADVPL, pr eci so a nt es d e mai s n a da escr e v -l o
e compi l -l o. Est e procedi me nt o f ei t o a t r a v s da f err a me nt a TOTVS De v St udi o do
Prot h e us ( Tot vs De v el op me nt St udi o) .


- 89 -

ADVPL Completo


si nt a x e ; per mi t e o d ebug ( e x ecu o passo a passo do pr ogr a ma , v eri fi ca ndo o cont e do das
v ari v ei s) e f or nece assi st e nt es ( mod el os) de pr ogr a mas.


E Prot eger o pr ogr a ma f ont e, e vi t a ndo que se j a al t er a do i nde vi da me nt e, poi s some nt e os
obj et os s o di st ri bu dos com u ma e x ecu o mai s r pi da e m f uno d a compi l ao no
DEV- St udi o ;
Figura: Manuteno no repositrio de objetos


Aps co mpil ar o progr a ma , o r esul t a do u m obj et o, o qu al carr eg a do n a me mri a fi ca ndo
di spon v el par a sua e x ecuo a t r a v s da a pl i cao PROTHEUS.

O obj et o n o u m e x ecut v el , ou sej a , no est conv er t i do par a a li ngu a ge m na ti v a do
equi pa me nt o. Que m f a z esse t r a bal ho o Prot he us Ser v er e m t e mpo de e x ecuo. Por i sso, o
Prot h e us Ser v er est se mpr e pr ese nt e n a me mri a e m t e mpo de e x ecuo, per mi ti ndo :


E Fl e xi bili z ao pl a t af or ma de t r a bal ho. Assi m, u m mesmo progr a ma pod e roda r e m
a mbi e nt es Wi ndows, Li nux ou mesmo e m u m Ha nd Hel d, fi ca ndo a t ar ef a de a de qu ao
par a o Ser vi dor Pr ot he us ;

E Que o si st e ma cr esa d e f or ma i li mi t a da , poi s os obj et os fi ca m f or a do e x ecut v el ;

E O uso de macr o subst i t ui es, ou sej a , o uso de r ot i n as e xt eri or es ao si st e ma
ar ma z e na das e m ar qui vos e qu e pod e m f aci l me nt e al t er a das p el o usu ri o, poi s o Ser v er
t a mb m i nt er pr et a o cdi go f ont e e m t e mpo d e e x ecuo.


- 90 -

ADVPL Completo




Figura: Diagrama esquemtico de objetos Protheus

O Reposi t ri o de Obj et os a bi bli ot eca de obj et os de t odo o a mbi e nt e Pr ot he us, i ncl ui ndo
t a nt o os obj et os i mpl e me nt a dos par a as f unci onali da des bsi cas do ERP como a qu el es ger a dos
pel os usuri os. A fi gur a a bai xo de monst r a a est r ut ur a e a i nt ercone x o e nt r e as v ri as
ca ma das.



Figura: Estrutura de interconexo do Protheus


- 91 -

ADVPL Completo


El a de monst r a t a mb m que os da dos a ser e m processa dos pod e m est a r a r ma z e n a dos e m
bases I SAM ou e m Ba ncos de Da dos pa dr o SQL. No pri mei ro caso o ser v er comuni ca - se
di r et a me nt e com os d a dos. E m Ba ncos SQL a i nt erf ace T OPC ONNECT / DBACCESS qu e
conv er t e os co ma ndos de e nt r a da e sa da , a dequ a ndo- os a o SQL utili z a do ( SQl Ser v er
Mi crosof t , Or acl e, DB2, et c. ) .

Uma v e z t er mi na do o processa me nt o do obj et o ch a ma do, o el e descar t a do da me mri a , ou
sej a , o Prot he us u m si st e ma que pod e cr escer de f or ma i li mi t a da poi s os obj et os,
ar ma z e n a dos e m u m r e posi t ri o pr a t i ca me nt e n o ocupa m espao no HD ( Har d Di sk) .

O Pr ot he us u ma pl a t af or ma mul ti ca ma da . Ent r e as di v ersas ca ma d as, t e mos a i nt erf ace de
a pr ese nt a o a o usu ri o ( Re mot e) , o t r a t a me nt o da do par a as r egr as d e negci o
i mpl e me nt a das ( Ser v er ) , o acesso aos obj et os do r eposi t ri o ( Ser v er ) , o acesso aos
da dos di spon v ei s no Ba nco d e Da dos ( Ser v er ou TOPC ONNECT / DBACCESS ) e ao
ger e nci a me nt o de ser vi os WEB ( Ser v er ) . Nest e processo, o Prot h e us possui , basi ca me nt e,
qu a t ro a pl i ca ti vos ut ili z a dos com di f er e nt es fi n ali da des :

E Protheus Server / TOTVS AppServer: Respons v el pel a comuni ca o e nt r e o cl i e nt e,
o ba nco de da dos e o RPO. O nome do e x ecut v el depe nde da v erso do si st e ma
( TOTVSAPPSERVER. EXE) se ndo que as pl a t af or mas I SAM supor t a das pel o Pr ot he us
Ser v er s o DBF e CTREE.

E Protheus Remote / TOTVS SmartClient: I nst al a do no Ser v er ou n a est ao. O
nome t a mb m d epe nd e da v erso do si st e ma ( TOTVSSMARTCLI ENT. EXE) .

E TopConnect / DbAccess: Respons v el pel a con v ers o dos coma ndos d e ba nco de
da dos, a dequa ndo- os a o SQL ut ili z a do.

E Protheus Monitor / TOTVS Monitor: Progr a ma de a n li se que v eri fi ca que m est
usa ndo o si st e ma e possi bili t a o e nvi o de me nsa ge ns ou mesmo derr ubar con e x es
( TOTVSMONI TOR. EXE) .

Al guns nomes r ef er e m- se a u m conj unt o de pr ogr a mas pa r a f acili t ar a sua i de nt i fi cao :

E RPO: o ar qui vo bi n ri o do APO ( Adv a nced Prot he us Obj ect s) , ou sej a , os obj et os.

E Build: Ex ecut v ei s, DLLs e o RPO compl et o.

E Patch: At u ali z aes pont uai s do RPO, a pl i ca das por mei o do I DE.

E Update: Pacot e d e a t uali z ao par a o r eposi t ri o ( RPO) li ber a do p eri odi ca me nt e
cont e ndo t odas as a d e qu aes e mel hori as di sponi bili z a das par a o si st e ma e m u m
det er mi n a do per odo, se ndo n o cu mul a ti vo, a pli ca das por mei o do DEV- St udi o.

A i nt erf ace de a pr ese nt ao r e ali z a da pel o Smar t Cli e nt que pr ocessa a pa r t e da est ao,
basi ca me nt e, t el a e t ecl a do. Pode est a r gr a v a do no Ser v er e ser ca r r ega do vi a r ed e par a a
me mri a da est ao. Ou, de pr ef er nci a , de v e fi car ar ma z e n a do no HD da est a o. Pod e
t a mb m ser ca rr ega do pel o I nt er n et Ex pl or er, roda ndo de nt r o do prpri o browser com o
Smar t Cli e nt Act i v e X e per mi t i ndo o acesso a o Prot h e us Ser v er pel a I nt er net , com as mesmas
f unci on ali da des do Smar t Cli e nt , se ndo qu e o browser pr eci sa supor t ar o uso da t ecnol ogi a
Act i v e X.

Caso e xi st a al gu m Fi r e wall ou Prox y e nt r e o WEB Ser v er e o Br owser que v ai acessa r o
Smar t Cli e nt Act i v e X, el es de v er o ser confi gur a dos pa r a p er mi t i r o se u downl oa d.

- 92 -

ADVPL Completo



9.2. Organizao e configurao inicial do ambiente Protheus

O Prot h e us ocupa u ma past a que t e m a segui nt e est r ut ur a :



. APO: Cont m o a r qui vo RPO, r eposi t ri o de obj et os do Pr ot he us.
Figura: Estrutura bsica das pastas do Protheus

. SMARTCLIENT: Re ne u m conj unt o de ar qui vos e x ecut v ei s, dl l s e a r qui vos de
confi gur ao do si st e ma , par a possi bili t ar o acesso a o ser vi dor.
. APPSERVER: Re ne u m conj unt o de e x ecut v ei s, dll s e ar qui vos d e confi gur ao do
si st e ma que compe m o ser vi dor.
. INCLUDE: Cont m as bi bli ot ecas necess ri as par a a compi l ao de progr a mas
Prot h e us.
. DATA: Cont m a base de da dos no caso d e v erso I SAM.
. SAMPLES: Of er ece u m conj unt o de pr ogr a mas e x e mpl o e a r qui vos ADVPL pa dr es da
Mi crosi ga .
. SPOOL: Nest a past a so gr a v a dos os r el a t ri os g er a dos e m di sco p el o si st e ma
Prot h e us.
. SYSTEM: Cont m os ar qui vos de me nus, os ar qui vos de confi gur aes e os a r qui vos
de cust omi z aes ( SXs) do si st e ma Prot he us.




- 93 -

ADVPL Completo


. SYSTEMLOAD: Cont m o di ci on ri o de da dos e m f or ma t o TXT. nest e ar qui vo qu e
est o t odos os pa dres e f or ma t os pa r a a g er ao dos a r qui vos de confi gur aes e d e
cust omi z aes ( SXs) , conf or me a l ocal i z ao d e pa s defi ni da pel o usu ri o n a e nt r a da
do si st e ma .
. MY PROJECTS: Suger e - se a cri ao dest a past a par a ar ma z e na r pr oj e t os e f ont es das
cust omi z aes r e al i z a das pel o usu ri o.
. UPDATES: Suger e- se est a past a pa r a o a r ma z e n a me nt o das a t u ali z aes a ser e m
a pli ca das no si st e ma Pr ot he us.

Apesa r da est r ut ur a il ust r a da a nt eri or me nt e i ndi car que as past as est o subor di n a das past a
PROTHEUS, poss v el que al gu mas del as possa m est a r e m m qui n as di f er e nt es ou a t mes mo
e m a mbi e nt es comput aci on ai s di f er e nt es.


Figura: Formas de instalao e uso do Protheus

- 94 -

ADVPL Completo



Par a i sso, necess ri o confi gur ar, ou sej a , i nf or mar ao Prot h e us onde est ca da u ma del as.
Esse t i po de i nf or mao const a nos a r qui vos de par met r os d e confi gur ao do si st e ma
( TOTVSAPPSERVER. I NI e TOTVSSMARTCLI ENT. I NI ) e xi st e nt es n as r espect i v as past as
APPSERVER e SMARTCLI ENT.

Os pa r met r os do T OTVSAPPSERVER. I NI s o l i dos pel o progr a ma T OTVSAPPSERVER. EXE l ogo
no i n ci o de su a e x ecuo. O mesmo pr ocedi me nt o ocorr e e m r el ao aos par met r os do
TOTVSSMARTCLI ENT. I NI pel o pr ogr a ma T OTVSSMARTCLI ENT. EXE. A e x ecuo d esses doi s
progr a mas f ei t a por mei o de a o do usu ri o, f acili t a da pel os a t al hos T OTVS APPSERVER e
TOTVS SMARTCLI ENT.






Figura: Links dos parmetros de configurao

Par a qu e o T OTVS AppSer v er e o T OTVS Smar t Cl i e nt sej a m e x ecut a dos, os a r qui vos
TOTVSAPPSERVER. I NI e TOTVSSMARTCLI ENT. I NI d e v e m est ar di spon v ei s nas r esp ect i v as
past as APPSERVER e SMARTCLI ENT poi s s o el es que i ndi ca m o e nder eo da s de mai s past as
conf or me a il ust r ao d a fi gur a a nt eri or.

O det al he de pr e e nchi me nt o das pr opri eda des dos r esp ect i vos a t al hos TOTVS AppSer v er e o
TOTVS Sma r t Cl i e nt de monst r a do a segui r. No a t al ho do TOTV SAppSer v er, necessri o que
sej a i nf or ma do o pa r met r o - d ebug ou - consol e.


- 95 -

ADVPL Completo



Propriedades dos atalhos


=
Destino:
c : \ prot he us \ bi n \ a ppser v er \ t ot vsa ppser v er . e x e
- consol e
Iniciar em: c : \ prot he us \ bi n \ a ppser v er

E -Console ou - Debug

Ex ecut a do co mo u ma Ja nel a Consol e, as i nf or maes r ecebi das das cone xes com o T OTVS
Appli ca ti on Ser v er con ect a dos s o e xi bi das di r et a me nt e n a t el a do consol e do TOTVS
Appli ca ti on Ser v er, be m como i nf or maes de No Conf or mi da des.

E - Install

Se o TOTVS Appli ca ti on Ser v er, no f or i nst al a do como u m Ser vi o do NT, dur a nt e a
I nst al ao, i st o pod e ser r e al i z a do, e x ecut a ndo- o com a opo d e Li nh a de Coma ndo.

E -Remove
Par a r e mov -l o da Li st a de Ser vi os do NT, pode - se e x ecut -l o co m a opo d e Li nh a de
Coma ndo.


=
Destino:
c : \ prot he us \ bi n \ smar t cli e nt \ t ot vssmar t cl i e nt e. e x e
M
Iniciar em: c : \ prot he us \ bi n \ smar t cli e nt

E -Q (Quiet)

I ndi ca que o TOTVS Smar t Cli e nt , n o de v er most r ar o Spl ash ( I ma ge m de Apr ese nt ao) e a
t el a de i de nti fi cao de Par met r os I ni ci ai s, necessi t a ser acompa nh a da da ( Cl usul a P) .

E -P (Main Program)

I d e nt i fi ca o Progr a ma ( APO) I ni ci al .

E -E (Environment)

Nome da Se o d e Envi ron me nt , no ( I ni do Ser v er ) , que ser ut ili z a da , par a d efi ni es ger ai s.

E -C (Connection)

Nome da Se o d e Con e x o, qu e ser ut ili z a da, par a a cone x o ao TOTVS Appli ca ti on Ser v er.

E -M (AllowMultiSession)

Per mi t e ml ti pl as i nst nci as ( Cpi as) do TOTVS Smar t Cli e nt , n a mes ma m qui n a , o que por
Def a ul t n o per mi ti do.


- 96 -

ADVPL Completo


Os par met ros que confi gur a m o l ocal do RPO, o Ba nco d e Da dos ( I SAM ou SQL) , os a r qui vos
de me nus, confi gur aes e cust omi z aes do si st e ma no a r qui vo I NI s o :

E SourcePath: I ndi ca o l ocal de ori ge m dos obj e t os. o e nd er eo do Reposi t ri o de
Obj et os ( Ex e mpl o : SourcePa t h = C : \ PROTHEUS \ APO)

E RootPath: Apont a pa r a a past a r ai z (i ni ci al ) , a par t i r da qu al ser o l ocali z a dos os da dos
( no caso d e I SAM) , be m como o prpri o Di ci on ri o de Da dos ( Ex e mpl o :
Root Pa t h = C : \ PROTHEUS \ PROTHEUS_ DATA)

E StartPath: I ndi ca qu al a past a de nt ro da past a r ai z (i nf or ma d a no par met ro
Root Pa t h) que cont m os a r qui vos d e me nus, os a r qui vos d e confi gur aes e os
ar qui vos d e cust omi z aes ( SXs) do si st e ma Prot he us ( Ex e mpl o :
St ar t Pa t h = \ SYSTEM\ ) .

No h necessi da de de que os par met r os est ej a m e m or d e m nos ar qui vos de confi gur a o
( . i ni ) . Al m dos par met r os j det al h a dos, e xi st e m out ros qu e pod e m i ndi car a v ers o do
si st e ma , o t i po de ba nco d e da dos, l i ngu a ge m do pa s e m que est se ndo ut i li z a do e as
msca r as d e edi o e f or ma t a o.



[ENVIRONMENT]
SOURCEPATHC : \ PROTHEUS \ APO
ROOTPATH = C : \ MP811 \ PROTHEUS_ DATA
STARTPATH = \ PROTHEUS \
RPODB = TOP
RPOLANGUAGE = PORTUGUESE
RPOVERSI ON = 101
LOCALF I LES = ADS
TRACE = 0
LOCALDBEXTENSI ON = . DBF
PI CTF ORMAT = DEFAULT
DATEF ORMAT = DEFAULT

[DRIVERS]
ACTI VE = TCP

[TCP]
TYPE = TCPI P
PORT = 1234


Figura: Exemplo de um ambiente em um arquivo de parmetros

No e x e mpl o da fi gur a a nt eri or, o r t ul o [ e nvi ron me nt ] descr e v e u m conj unt o de par met r os
que ser o i ni ci ali z a dos no si st e ma . Os rt ul os [ Dri v ers] e [ TCP] i de nt i fica m a comuni cao que
pode ser est a bel eci da e nt r e o Pr ot he us Ser v er e o Pr ot he us Re mot e. Out ros a mbi e nt es pod e m
ser confi gur a dos no mesmo a r qui vo ( T OTVSAPPSERVER. I NI ) .

J o ar qui vo de par me t ros do Prot h e us Re mot e ( TOTVSSMARTCLI ENT. I NI ) cont m a pe nas as
confi gur aes l ocai s, basi ca me nt e as i nf or maes necess ri as par a a i ni ci ali z ao e a
comuni cao com o Pr ot he us Ser v er , conf or me o e x e mpl o da fi gur a a segui r.


- 97 -

ADVPL Completo



[CONFIG]
LASTMAI NPROG = SI GACF G
LANGUAGE = 1

[DRIVERS]
ACTI VE = TCP

[TCP]
SERVER = 172. 16. 72. 41
PORT = 1234

E Active: I ndi ca qu al a f or ma de comuni cao.
Figura: Exemplo de um arquivo de configurao do remote


E Port: I ndi ca o n mero da por t a a ser ut ili z ada par a a comuni cao e nt r e o Prot h e us
Ser v er e o Prot h e us Re mot e. necessri o que a por t a utili z a da n a comuni cao sej a a
mesma e m a mbos ( no T OTVSAPPSERVER. I NI e no T OTVSSMARTCLI ENT. I NI ) . Val e
r essal t ar que a por t a 8 0 r eser v a da pa r a a I nt er net e pod e ca usar confli t os caso sej a
utili z a da n a comuni cao do Prot he us.

E Server: Apont a pa r a o e nder eo do ser vi dor que pode ser a prpri a m qui na
(l ocal host ) ou o nome da m qui n a ( Ser v er = Ser vi dor _01) ou mesmo u m e nder eo I P
( e x e mpl o Ser v er = 172. 1 6. 72. 41) .

Exemplo:

O par met ro Ser v er = 1 72. 16. 72. 41 no ar qui vo TOTVSSMARTCLI ENT. I NI i ndi ca ao Prot he us
Re mot e o e nder eo da m qui na n a qu al est f u nci ona ndo o Prot he us Ser v er .



- 98 -

ADVPL Completo



9.3. O Configurador do Protheus

9.3.1. Funcionalidades Abordadas

O obj et i vo dest e t pi co n o a br a nger t odo a est r ut ur a e r ecursos do mdul o Confi gur a dor da
a pli cao ERP, mas p er mi t i r a r e ali z ao de t ar ef as de confi gur ao si mpl es que ser o
necess ri as no d ese nvol vi me nt o de p eque n as cust omi z aes.

Com f oco n est e obj et i vo ser o det al h a das as se gui nt es op er aes

E Confi gur ao e cri ao de nov as t a b el as no Di ci on ri o de Da dos
E At u ali z ao das est r ut ur as do Di ci on ri o de Da dos
o Ta bel as do si st e ma
o Vali daes d e ca mpos
o ndi ces d e t a b el as
o Ga t il hos de ca mpos

Par a cont e xt u ali z ar a est r ut ur a da a pli cao ERP, no t pi co a segui r det al h a da a f or ma como
as t a bel as de da dos do si st e ma est o di vi di das e nt r e os di v ersos mdul os que compe o
PROTHEUS.

9.3.2. Estruturas bsicas da aplicao ERP Protheus

Arquivos de configurao do sistema

Arquivo Descrio
SI GAMAT Ca dast r o de e mpr esas e fili ai s do si st e ma
SI GAPSS Ar qui vo de usu ri os, gr upos e se nh as do si st e ma
SI X ndi ces dos ar qui vos
SX1 Per gunt as e r espost as
SX2 Ma pe a me nt o d e t a bel as
SX3 Di ci on ri o de Da dos
SX4 Age nda do Schedul e de processos
SX5 Ta bel as
SX6 Par met r os
SX7 Ga t il hos de I nt erf ace
SX8 For a d e uso
SX9 Rel aci on a me nt os e nt r e t a bel as
SXA Past as ca dast r ai s a pont a das no SX3
SXB Consul t a por mei o da t ecl a F 3 ( Consul t a Pa dr o)
SXD Cont rol e do Schedul e de pr ocessos
SXE Seq nci a de docu me nt os ( + 1)
SXF Seq nci a de docu me nt os (Pr xi mo)
SXG Ta ma nho pa dr o pa r a ca mpos a pont a do p el o SX3
SXK Respost a d e Per gunt as ( SX1) por usu ri os
SXO Cont rol e d e LOGs por t a bel a
SXP Hi st ri co d e Logs ca dast r a dos no SXO

SXQ
Ca dast r o de fi l t ros i nt eli ge nt es da mbr owse ( cont m as
i nf or maes necessri as par a a cri ao do fi l t ro) .
SXR
Ca dast r o de r el aci on a me nt o e nt r e pr ogr a ma x fil t ro
( utili z a da i nt er n a me nt e pel o Pr ot he us pa r a v eri fi car e m
qu ai s progr a mas os fi l t ros poder o ser ut ili z a dos) .

- 99 -

ADVPL Completo


SXS
Ca dast r o de pr ogr a mas ( utili z a do n a v ali dao par a
most r ar / i ni bi r os fil t ros n a e x ecu o da mbr owse) .
SXT
Ta bel a de usu ri os ( cont m as i nf or maes dos
usu ri os que poder o ut ili z ar os fi l t ros da mbr owse) .
SXOffi ce
Ca dast r o de r el aci on a me nt o e nt r e as e nt i da des
( t a bel as) e as consul t as TOI I .

Ambientes e tabelas

Na a pli cao PROTHEUS as t a bel as de da dos pod e m t er u ma est r ut ur a mai s si mpl es e
econmi ca , com t a b el as e m DBF / ADS, do f a bri ca nt e Ext e nded Syst e m ou CTREE do f a bri ca nt e
FAI RC OM ou u ma est r ut ur a mai s robust a e compl e x a , e m bases SQL ( SQLSERVER da
Mi crosof t , ORACLE, DB I I da I BM, SYBASE, MYS QL, POSTGREE, et c. ) .

No caso do SQL, o acesso f ei t o a t r a v s do TOPCONNECT / DBACESS, que conv er t e os
coma ndos do ADVPL pa r a est e a mbi e nt e.

Par a per mi ti r u ma utili z ao a dequa da das t a bel as de da dos do si st e ma por ca da u m dos
a mbi e nt es da a pli cao ERP, as t a b el as f or a m di vi di das e m gr upos d e nomi n a dos f a m li as.
Ca da mdul o pod e ut i li z ar u ma ou mai s f a m li as de t a bel as esp eci fi cas par a su as a t i vi da des, e
ai nda compar t i l h ar i nf or maes com out r os mdul os a t r a v s de f a m li as comuns a t odas as
oper aes r e al i z a das no si st e ma .

A t a bel a a segui r de monst r a al guns dos mdul os que compe a a pl i cao ERP PROTHEUS
a t u al me nt e :

Ambiente Identificao
SIGAATF ATI V O F I XO
SIGACOM COMPRAS
SIGACON CONTABI LI DADE
SIGAEST EST OQUE E CUSTOS
SIGAFAT FATURAMENTO
SIGAFIN F I NANCEI RO
SIGAFIS LI VROS F I SCAI S
SIGAPCP PLANEJAMENT O E C ONTROLE DA PRODUO
SIGAGPE GESTO DE PESSOAL
SIGAFAS FATURAMENTO DE SERVI OS
SIGAVEI VE CULOS
SIGALOJ

CONTROLE DE LOJAS/ AUTOMA O C OMERCI AL
SIGATMK CALL CENTER
SIGAOFI OF I CI NAS
SIGAPON PONTO ELETRNI CO
SIGAEIC EASY I MPORT C ONTROL
SIGATCF TERMI NAL
SIGAMNT MANUTEN O DE ATI V OS
SIGARSP RECRUTAMENTO E SELEO DE PESS OAL
SIGAQIE I NSPEO DE ENTRADA QUALI DADE
SIGAQMT MET ODOLOGI A QUALI DADE

O nome de ca da t a bel a no Pr ot he us const i t u do de sei s d gi t os, os qu ai s so ut ili z a dos par a
f or mar a segui nt e r epr ese nt a o :

F X X E E 0


- 100 -

ADVPL Completo


Onde :

F SF X Pri mei ro d gi t o r epr ese nt a a f a mli a , o segundo d gi t o
pode ser ut ili z a do par a det al h ar ai nda mai s a f a mli a
esp eci fi ca da no pri mei ro n v el ( subf a mli a ) , e o t ercei ro
d gi t o a nu mer a o seqe nci al das t a bel as da f a mli a
i ni ci a ndo e m 0 e fi n ali z a ndo e m Z.
E E 0 Os doi s pri mei ros d gi t os i de nt i fi ca m a que e mpr esa as
t a bel as est o vi ncul a das, l e mbr a ndo que a i nf or ma o
de fi li al est cont i da nos da dos da t a bel a .
O l ti mo d gi t o fi xo e m 0.

A t a bel a a segui r de monst r a al gu mas das pri nci pai s f a mli as de t a bel as ut ili z a das pel a
a pli cao ERP Prot he us :

Famlia Descrio
S - Ta bel as per t e nce nt es a o si st e ma bsi co, t a mb m ch a ma do Cl assi c
S A
Ca dast r os d e e nt i da des compa r t il h a das e nt r e os a mbi e nt es
( Cli e nt es, For necedor es, Ba ncos e nt r e out r os) .
S B
Ca dast r os dos a mbi e nt es de Ma t eri ai s (Produt os, Sal dos e nt r e
out ros) .
S C
Ar qui vos de movi me nt aes di v ersas ut ili z a dos pel os a mbi e nt es d e
Ma t eri ai s ( Soli ci t ao ao Al mox ari f a do, Soli ci t ao d e Compr as,
Pedi do de Compr as, Pedi do de Ve ndas, Or d e ns de Produ o e nt r e
out ros) .
S D
Ar qui vos de movi me nt aes d e est oque ( I t e ns de not as fi scai s de
e nt r a da e sa da , movi me nt os i nt er nos d e est oque e nt r e out r os) .
S E Ca dast r os e movi me nt aes do a mbi e nt e Fi na ncei ro.
S F
Ca dast r os e movi me nt aes Fi scai s ( Ca beal hos das not as fi scai s
de e nt r a da e sa da , ca d ast ro de t i pos de e nt r a d a e sa da , li vros
fi scai s, e nt r e out r os) .
S G Ca dast r os do a mbi e nt e de Pl a nej a me nt o e Cont rol e d e Produ o
S H Movi me nt os do a mbi e nt e d e Pl a nej a me nt o e Cont rol e de Pr odu o
S I Ca dast r os e movi me nt os do a mbi e nt e Cont bi l ( descont i nua do)
S N Ca dast r os e movi me nt os do a mbi e nt e At i vo Fi xo
S R Ca dast r os e movi me nt os do a mbi e nt e Gest o d e Pessoal
S X Ta bel as de confi gur ao do si st e ma
S Z Ta bel as li vr es par a ut ili z ao e proj et os esp ec ficos e m cl i e nt es.
A - Gest o d e Pr oj et os
C - Cont a bili da de Ger e nci al
C T Cont a bili da de Ger e nci al
C V Cont a bili da de Ger e nci al
C W Cont a bili da de Ger e nci al
D - Tr a nspor t a dor as e deri v a dos
E - Comrci o e xt eri or e d eri v a dos
G - Gest o Hospi t al ar
J - Gest o Educaci on al
N - Ser vi os Pbl i cos
P - Reser v a do pa r a proj et os da f bri ca de sof t war e
Q - Qu ali da de e deri v a dos
R - Recursos Hu ma nos e deri v a dos
T - Pl a no de Sa de
W - Wor kfl ow
Z - Ta bel as li vr es par a ut ili z ao e proj et os esp ec fi cos e m cl i e nt es e m
a di o a f a m li a SZ .

- 101 -

ADVPL Completo



ndices

Ca da t a bel a do si st e ma possui se us ndi ces defi ni dos no ar qui vo de confi gur ao SI X, o qual
pode ser a t u al i z ado a t r a v s do mdul o Confi gur a dor.

Os ar qui vos d e ndi ces das t a bel as de si st e ma ser o cri a dos de acor do com o ba nco de da dos
utili z a do ( I SAM ou cone x o vi a TOPC ONNECT) .

Par a ba ncos d e da dos I SAM, ser g er a dos ar qui vos com a mesma no me ncl a t ur a da t a bel a de
da dos, mas com u ma e xt e ns o di f er e nci a da ( a t u al me nt e . CDX) . No caso da ut i li z ao de u m
ba nco de da dos, ca da ndi ce ser u ma nu mer ao seq e nci al e m f uno do nome da t a b el a
ori gi n al .

As especi fi caes das cha v es d e ndi ces de ca d a u m das t a bel as est di spon v el no ar qui vo de
si st e ma SI X, e a ch a v e ni ca da t a bel a utili z ada par a ba nco de da dos est descri t a n a t a bel a
SX2.

Menus

Ca da mdul o da a pli cao ERP possui u m me nu pa dr o com t odas as f unci onali da des
di spon v ei s par a o a mbi e nt e, me nu est e defi ni do a t r a v s d e si nt a x e XML ( ar qui vos . XNU) .

Os me nus possu e m u ma est r ut ur a pa dr o que per mi t e ao usu ri o l ocali z ar e i de nti fi car
f aci l me nt e ca da u ma das f unci on ali da des of er eci das pel o a mbi e nt e.

9.3.3. Acessando o mdulo Configurador

Par a e x ecut ar o mdul o Confi gur a dor necessri o que a a pli cao Pr ot he us Ser v er est ej a e m
e x ecu o e a t r a v s da a pli cao Prot h e us Re mot e de v er ser i nf or ma da como progr a ma i ni ci al
a op o SI GACF G.



Figura: Parmetros de inicializao do sistema



- 102 -

ADVPL Completo




Aps a confi r mao, a v ali dao do acesso f ei t a conf or me t el a il ust r ad a a segui r :


Figura: Validao de acesso



Figura: Confirmao do acesso ao mdulo Configurador




- 103 -

ADVPL Completo



Logo a ps a sua confi r mao do usu ri o e se nh a com di r ei t o de a d mi ni st r a dor , ser
a pr ese nt a da a t el a i ni ci al do confi gur a dor , conf or me most r a a fi gur a a segui r :



Figura: Interface principal do mdulo Configurador














- 104 -

ADVPL Completo



9.4. Funcionalidades do Configurador

A cust omi z ao de u m si st e ma como o Pr ot he us consi st e e m a da pt ar o si st e ma d e f or ma a
mel hor a t e nd er as n ecessi da des do cl i e nt e.

A fl e xi bili da de de u m si st e ma , ou sej a , sua ca paci da de de a da pt ar - se ( pol i morfi smo, a quel e
que assu me v ri as f or mas) u ma das mai s i mpor t a nt es ca r act er st i cas de u ma sol uo ERP.

As f unci onali da des t r a t a das pel o Confi gur a dor d efi ne m a fl e xi bili da de do ERP Pr ot he us.
Fl e xi bili z ar se m despa droni z ar, ou sej a , t udo que f oi cust omi z a do per ma nece v l i do, mesmo
com o d ese nv ol vi me nt o de nov as v erses.




Figura: Principais funcionalidades do mdulo Configurador


O Confi gur a dor o progr a ma bsi co par a o pr ocesso de cust omi z ao do Prot he us a t r a v s da
al t er ao das t a bel as da f a mli a SX. Nel es, o usu ri o ou o a n ali st a de supor t e r espons v el pel a
i mpl a nt ao confi gur a as i nf or maes qu e ser o ut ili z a das pel os de mai s a mbi e nt es do si st e ma .

Essas i nf or maes v o de si mpl es par met ros a t compl e x as e x pr esses e coma ndos que so
i nt er pr et a das e m t e mpo de e x ecu o.

Nos pr xi mos t pi cos ser o a bor da das as f u nci on ali da des de cust o mi z ao di spon v ei s no
a mbi e nt e Confi gur a dor, r el e v a nt es a o obj et i vo de d ese nvol vi me nt o de p eque n as
cust omi z aes pa r a a a pli cao ERP.







- 105 -

ADVPL Completo


9.4.1. Dicionrio de Dados da aplicao ERP

A i di a do Di ci on ri o de Da dos per mi t i r que o usu ri o possa i ncl ui r ou i ni bi r ca mpos, ou
mesmo al t er ar as pr opri eda des dos ca mpos e xi st e nt es. Pod e, ai nda , cri ar nov as t a bel as. Ou
sej a , os pr ogr a mas ao i nv s de t er e m os ca mpos defi ni dos e m se u cdi go ori gi n al , l e m o
Di ci on ri o e m t e mpo d e e x ecu o, mont a ndo a r r a ys com as pr opri eda des d e ca da u m. A pa r t i r
da , su a utili z ao nor mal , a t r a v s do uso de f unes do ADVPL qu e t or n a m o t r a bal ho do
dese nvol v edor t r a nspa r e nt e a est a ar qui t et ur a .

O obj et i vo do Di ci on ri o de Da dos p er mi t i r que o pr pri o usu ri o cri e nov as t a b el as ou al t er e
os ca mpos nas t a bel as e xi st e nt es qu a nt o ao se u uso, sua or de m d e a pr ese nt ao, l ege nda
( nos t r s i di omas) , v al i dao, hel p, obri ga t ori eda de de pr e e nchi me nt o, i ni ci ali z ao et c.



9.4.2. Adio de tabelas ao Dicionrio de Dados
Figura: Conjunto de pacotes que compe o Dicionrio de Dados




Procedimento

1. Par a a di ci onar u ma t a b el a ao di ci on ri o de da dos d e u ma e mpr esa , sel eci one a op o
Di ci on ri o de Da dos a bai xo da e mpr esa que ser a t u ali z a da . ( r vor e d e opes da par t e
esquer da da i nt erf ace vi sual do Ger e nci a dor d e Bases d e Da dos) .

2. Aps a sel e o da op o Di ci on ri o de Da dos ser o e xi bi das as t a bel as j ca dast r a das
no ar qui vo d e si st e ma SX2.





- 106 -

ADVPL Completo





3. Aps a vi su ali z ao das t a bel as j ca dast r a das no SX2 da e mpr esa sel eci on a da , utili z e o
bot o I ncl ui r (
Figura: Conjunto de tabelas j cadastradas no SX2

) . Ao ut ili z ar est a op o ser e xi bi da a t el a par a defi ni o dos da dos
r ef er e nt es nov a t a bel a que ser cri a da :









- 107 -

ADVPL Completo




4. Re ali z e o pr e e nchi me nt o das i nf or maes sol i ci t a das de acor do co m as ori e nt aes a
segui r, e ao t r mi no confi r me o ca dast r a me nt o da nov a t a bel a com o bot o Confi r mar
(
Figura: Cadastro de uma nova tabela


) .


Orientaes para o cadastramento de uma nova tabela

E O dom ni o SZ 1 a t SZ Z ( consi der a ndo t odos os n mer o e t odas as l et r as no l ti mo
byt e) r eser v a do par a da dos e xcl usi vos do usuri o poi s esse i nt er v al o n o ser
utili z a do pel o si st e ma . Caso sej a necessri o o dom ni o Z 00 a Z Z Z t a mb m pod e ser
e mpr ega do par a dese nv ol vi me nt os esp ec fi cos do cl i e nt e.


No d e v e m ser cri a das t a bel as espec fi cas de cl i e nt es com
qu ai squer out r as nome ncl a t ur as, o qu e pode af et a r di r et a me nt e
u m processo d e a t u ali z ao f ut uro.

E O nome da t a bel a pr e e nchi do a ut oma t i ca me nt e, a di ci ona ndo 990. Esse da do r ef er e-
se e mpr esa 99 ( Test e Ma t ri z ) a qu al est se ndo a di ci on a do t a bel a .

E O Pa t h r ef er e- se past a que cont er ef et i v a me nt e os da dos das t a bel as, qu a ndo I SAM,
nas v erses com ba nco de da dos r el aci onal no s o ut ili z a das. Essa past a ser cri a da
de nt ro da past a i ndi ca da n a confi gur a o do si st e ma como RO OTTPATH.

E O modo d e acesso compar t il h a do i ndi ca que o si st e ma possi bili t ar o uso si mul t neo da
t a bel a por du as ou mai s fi li ai s. Se f or compa r t i l h a do o ca mpo Fi li al fi ca e m br a nco. Se
f or e xcl usi vo, gr a v a - se o cdi go da fi li al a ti v a e some nt e el a t e m acesso a o r egi st ro.

E Aps a confi r mao, a t a bel a cri a da passa a f a z er pa r t e do ca dast r o do Di ci on ri o de
Da dos, cont e ndo some nt e o ca mpo F I LI AL, o qu al cri a do co mo pa dr o pel a

- 108 -

ADVPL Completo


f unci on ali da de do mdul o.

9.4.3. Adio de campos as tabelas do Dicionrio de Dados

Procedimento

1. Par a a di ci onar u m ca mpo a u ma t a bel a do di ci onri o de da dos de u ma e mpr esa ,
sel eci one a op o Di ci on ri o de Da dos a bai xo da e mpr esa qu e ser a t u ali z a da . ( r vor e
de opes da pa r t e esquer da da i nt erf ace vi su al do Ger e nci a dor de Bases d e Da dos) .

2. Aps a sel e o da op o Di ci on ri o de Da dos ser o e xi bi das as t a bel as j ca dast r a das
no ar qui vo d e si st e ma SX2.



3. Aps a vi suali z ao das t a bel as j ca dast r a das no SX2 da e mpr esa sel eci on a da , l ocal i z e
e sel eci one a t a b el a que ser a t u al i z a da , e ut ili z e o bot o Edi t ar (
Figura: Conjunto de tabelas j cadastradas no SX2

) . Ao utili z ar est a
op o ser e xi bi da a t el a de ma nut e no d e ca mpos da t a bel a sel eci on a da :


- 109 -

ADVPL Completo




4. Sel eci one a op o Ca mpos (
Figura: Estrutura de uma tabela j cadastrada no sistema

) , par a qu e se j a m e xi bi dos os ca mpos
di spon v ei s par a a t a b el a no a r qui vo de si st e ma SX3.


Figura: Estrutura de campos de uma tabela j cadastrada no sistema

- 110 -

ADVPL Completo


5. Aps a vi su ali z ao dos ca mpos j ca dast r a dos no SX3 da t a bel a sel eci on a da , utili z e a
op o I ncl ui r ( ) . Ao ut ili z ar est a opo ser e xi bi da a t el a par a defi ni o dos da dos
r ef er e nt es a o novo ca mpo que ser cri a do :


5. Re ali z e o pr e e nchi me nt o das i nf or maes sol i ci t a das de acor do co m as ori e nt aes a
segui r, e ao t r mi no confi r me o ca dast r a me nt o do nov o ca mpo par a a t a bel a com o
bot o Confi r mar (
Figura: Dados para parametrizao de um novo campo no sistema

) .
6. Confi r me as a t u ali z aes par a a t a bel a sel eci ona da com o bot o Confi r mar ( ) .
7. At uali z e as confi gur aes do si st e ma com o bot o At u ali z ar ( ) .


Figura: Atualizao dos dados do sistema

- 111 -

ADVPL Completo


20


Orientaes para o cadastramento de um novo campo

1. As pr opri eda des d efi ni das no Di ci on ri o de Da dos ( SX3) so as segui nt es :

E Nome do campo: Todos os ca mpos t m como pr efi xo o pr pri o nome da t a bel a , se ndo
que par a t a bel as da f a mli a S, o pr efi xo do ca mpo compost o a p e nas pel os pr xi mos
doi s d gi t os. No caso das de mai s t a bel as, o pr efi xo do ca mpo ser o os t r s d gi t os
i de nti fi ca dor es da t a b el a .

E Tipo do campo: I ndi ca se ca r act er e, nu mri co, l gi co, da t a ou me mo. cl aro que a
muda na do t i po de ca mpo d e v e ser f ei t a co m mui t o cui da do, poi s, se t i v er mos u m
ca mpo nu mri co usa do e m cl cul os e el e f or al t er a do par a car act er e , cer t a me nt e
t er e mos u m er r o.

E Tamanho do campo: Ta mb m a qui necessri o cer t o cui da do ao al t er -l o, poi s
poder e mos t er t r unca me nt os e m r el a t ri os e consul t as e m que h espao par a
cont e dos mai or es que o ori gi n al .

E Formato de edio: Defi ne co mo o ca mpo a p ar ece n as t el as e nos r el a t ri os.

E Contexto: Pod e ser r e al ou vi r t u al . O cont e xt o vi r t u al cri a o ca mpo some nt e n a
me mri a e no n a t a bel a ar ma z e na da no di sco. I sso n ecessri o por que os
progr a mas de ca dast r a me nt o e d e consul t a ge nri ca a pr ese nt a m some nt e u ma t a bel a
de ca da v e z . Assi m, se qui ser mos a pr ese nt a r u m ca mpo de u ma out r a t a bel a , ou
mesmo o r esul t a do de u m cl cul o, se m que t al i nf or mao ocupe esp ao f si co no HD,
utili z a mos o cont e xt o vi r t u al . Ca mpos vi r t uai s nor mal me nt e so ali me nt a dos por
ga t il hos.

E Propriedade: I ndi ca se u m ca mpo pode ou n o ser al t er a do pel o usu ri o. Ex e mpl o :
sal dos nor mal me nt e no pod e m, poi s que m cui da dessa t ar ef a s o os progr a mas.

2. De mai s ca r act er st i cas que de v e m ser obser v a d as n a confi gur ao do ca mpo :


E O ca mpo Deci mal ser soli ci t a do some nt e par a os ca mpos d e t i po nu mri co.
Guia: Campo


E O f or ma t o ! i ndi ca que o ca r act er e ser se mpr e mai scul o, i ndepe nde nt e da a o
do usuri o. O f or ma t o @! i ndi ca que essa car act er st i ca est e nde- se por t odo o
ca mpo.

E O cont e xt o r e al i ndi ca que o ca mpo e xi st i r ef et i v a me nt e no ba nco de da dos e o
cont e xt o vi r t u al si gni fi ca que o ca mpo e xi st i r a pe n as no di ci on ri o de da dos e n o
fi si ca me nt e.

E A propri eda de al t er a r i ndi ca que o ca mpo pode ser al t er a do.

E Nest a j a nel a , os da dos est o cl assi fi ca dos e m sei s past as com obj et i vos d e
pr e e nchi me nt o be m esp ec fi cos :




- 112 -

ADVPL Completo


E Cont m as i nf or maes a r esp ei t o dos t t ul os.
Guia: Informaes


E Ttulo: a l ege nda que a par ece n as t el as/ r el a t ri os. H i ncl usi v e t r s ca mpos pa r a
est a fi n ali da de : e m por t ugus, espa nhol e i ngl s. Est a pr opri eda de pod e ser al t er a da
vont a de, poi s no i nt erf er e e m n e nhu m processa me nt o.

E Descrio e Help: S o propri eda des que obj et i v a m docu me nt ar o ca mpo.


E Cont m os da dos que f acili t a m a di gi t ao.
Guia: Opes


E Repr ese nt a m as r egr as de v al i dao do ca mpo.
Guia: Validaes


E Validaes: Nest a propri eda de, escr e v e - se u ma f uno d e v al i dao do ca mpo qu e
est se ndo di gi t a do. Exi st e u m conj unt o de f u nes di spon v ei s no ADVPL a propri a das
par a esse caso.

E Todas as v al i daes i nf or ma das ser o e x ecut a das no mome nt o do pr e e nchi me nt o do
prpri o ca mpo. Uma v ali dao pode ser u ma e x pr ess o l gi ca ou u ma f uno d e
usu ri o que r et or n a u m v al or l gi co Ver da dei ro ou F al so. O si st e ma s p er mi t i r o
a v a no pa r a o pr xi mo ca mpo qu a ndo o r espect i vo pr e e nchi me nt o r esul t ar Ver da dei ro
sej a n a e x pr ess o ou no r et or no da f uno.

E Descr e v e a f or ma d e ut i li z ao do ca mpo.
Guia: Uso


E Rel aci ona t odos os mdul os e m que o ca mpo ser ut ili z a do.
Guia: Mdulos













- 113 -

ADVPL Completo



9.4.4. Adio de ndices para as tabelas do Dicionrio de Dados

Conf or me me nci ona do a nt eri or me nt e, no a mbi e nt e Prot he us u ma t a bel a pode t er v ri os
ndi ces, os qu ai s ser o ger a dos d e acor do com o ba nco de da dos confi gur a do pa r a o si st e ma .

Os ndi ces do si st e ma a uxili a m n a sel eo e obt e no d e i nf or maes da base de da dos al m
de det er mi n ar a or de m de a pr ese nt a o dos r e gi st ros de u ma t a bel a e m consul t as e r el a t ri os.

Procedimento

1. Par a a di ci on ar u m ndice a u ma t a bel a do di ci on ri o de da dos de u ma e mpr esa ,
sel eci one a op o Di ci onri o de Da dos a bai xo da e mpr esa qu e ser a t uali z a da . ( r vor e
de opes da pa r t e esquer da da i nt erf ace vi su al do Ger e nci a dor de Bases d e Da dos) .

2. Aps a sel e o da op o Di ci on ri o de Da dos ser o e xi bi das as t a bel as j ca dast r a das
no ar qui vo d e si st e ma SX2.


3. Aps a vi suali z ao das t a bel as j ca dast r a das no SX2 da e mpr esa sel eci on a da , l ocal i z e
e sel eci one a t a b el a que ser a t u al i z a da , e ut ili z e o bot o Edi t ar (
Figura: Conjunto de tabelas j cadastradas no SX2

) . Ao utili z ar est a
op o ser e xi bi da a t el a de ma nut e no d e ca mpos da t a bel a sel eci on a da :

- 114 -

ADVPL Completo




4. Sel eci one a opo ndi ces (
Figura: Estrutura de uma tabela j cadastrada no sistema


) , par a que sej a m e xi bi dos os ndices
di spon v ei s par a a t a b el a no a r qui vo de si st e ma SI X.




5. Aps a vi suali z ao dos ndi ces j ca dast r a dos no SI X pa r a a t a bel a sel eci ona da , utili z e
a op o I ncl ui r (
Figura: ndices disponveis para a tabela no arquivo de sistema SIX


) . Ao utili z ar est a op o ser e xi bi da a t el a par a defi ni o dos
da dos r ef er e nt es ao nov o ndi ce que ser cri a do :




- 115 -

ADVPL Completo






6. Re ali z e o pr e e nchi me nt o das i nf or maes soli ci t a das de acor do co m as ori e nt aes a
segui r, e ao t r mi no confi r me o ca dast r a me nt o do novo ndi ce par a a t a bel a com o bot o
Confi r mar (
Figura: Adio de um ndice para uma tabela


) .
7. Confi r me as a t uali z aes par a a t a bel a sel eci ona da com o bot o Confi r mar ( ) .
8. At u ali z e as confi gur aes do si st e ma com o bot o At u ali z ar ( ) .



Figura: Atualizao dos dados do sistema

- 116 -

ADVPL Completo



Orientaes para o cadastramento de um novo ndice

E O Nickname u ma i de nti fi cao compl e me nt a r do ndi ce o qu al pode ser ut ili z a da par a
a uxili ar o dese nv ol v edor na ut ili z ao dest a or de m e m u ma a pl i cao, a qu al pode ser
pa dr o do si st e ma ou espec fi ca de u m cli e nt e.

E Par a sel eci on ar os ca mpos j ca dast r a dos n a t a bel a , pode ser ut ili z a do o bot o Ca mpos
( ) . Est a f aci li da de pr e e nche, a ut oma t i ca me nt e, os ca mpos d e descri o.

E O ca mpo r el a t i vo fili al se mpr e f a z par t e dos ndi ces, com e xceo do SM2, pa r a que
os r egi st ros n as t a bel as est ej a m a gr upa dos por fi li ai s, i ndepe nde nt e dest a t a bel a ser
compa r t il h a da e nt r e as fili ai s.

E Uma t a bel a poder t er v ri os ndi ces ca d ast r a dos no Di ci on ri o de Da dos. E m
det er mi n a do mome nt o, por m, a p e nas u m d el es of er ecer acesso ao r egi st ro. Essa
or d e m pode ser al t er a d a e m t e mpo de e x ecu o p el os pr ogr a mas da a pli cao, a t r a v s
do coma ndo DBSet Or d er ( ) , ou a t r a v s da d efi ni o de u ma or d e m espec fi ca n a
utili z ao de queri es par a acesso as da dos di r et a me nt e e m ba ncos d e da dos de
a mbi e nt es TOPCONNECT ( DbAcess) .


9.4.5. Adio de gatilhos para os campos das tabelas do sistema

Procedimento

1. Par a a di ci on ar u m ga t il ho a u m ca mpo d e u ma t a bel a do di ci on ri o de da dos d e u ma
e mpr esa , sel eci one a opo Ga t il ho a bai xo da e mpr esa qu e ser a t ual i z a da . ( r vor e de
opes da pa r t e esquer da da i nt erf ace vi su al do Ger e nci a dor de Bases de Da dos) .

2. Aps a sel e o da op o Ga t il hos ser o e xi bi dos os i t e ns j ca dast r a das no ar qui vo de
si st e ma SX7.



Figura: Conjunto de gatilhos j cadastros no SX7

- 117 -

ADVPL Completo



3. Aps a vi su ali z ao dos ga t il hos j ca dast r a dos no SX7 da e mpr esa sel eci on a da , ut ili z e
o bot o I ncl ui r ( ) par a r e ali z ar o ca dast r o d e u m nov o ga t il ho no si st e ma :



4. Re ali z e o pr e e nchi me nt o das i nf or maes sol i ci t a das de acor do co m as ori e nt aes a
segui r, e a o t r mi no confi r me o ca dast r a me nt o do nov o ga t i l ho de si t e ma com o bot o
Confi r mar (
Figura: Dados para o cadastro de um novo gatilho no sistema


) .

Orientaes para o cadastramento de um novo gatilho


E Pode h a v er v ri os ga t i l hos par a o mesmo ca mpo. A or de m d e e x ecuo det er mi n a da
pel o ca mpo Seq nci a .

E Os t i pos do Ga t i l ho Pri mri o, Est r a ngei ro e d e Posi ci ona me nt o defi ne m se o Cont r a
Dom ni o u m ca mpo da mesma t a bel a , de out r a t a bel a ou se o ga t il ho de v e r e al i z ar
u m posi ci on a me nt o, r espect i v a me nt e.

E A r egr a pode ser u ma e x pr ess o que r esul t a e m u m v al or a ser pr e e nchi do no Cont r a
Dom ni o.

E O posi ci on a me nt o i gu al a Si m i ndi ca que ser e x ecut a do u m coma ndo de busca do
r egi st ro de acor do com a cha v e i ndi ca da .

E O Ali as, a Or de m e a Ch a v e descr e v e m a t a bel a e nvol vi da no ga til ho, se u ndi ce e a
ch a v e pa r a qu e a f unci onali da de se posi ci one no r egi st ro a dequ a do.

- 118 -

ADVPL Completo



9.4.6. Criao de Tabelas Genricas

Procedimento

1. Par a a di ci onar u ma t a bel a ge nri ca , sel eci one os me nus Ambi e nt e, Ca d ast ros, Ta bel as.

2. Aps a sel e o da op o Ta b el as ser o e xi bi dos os i t e ns j ca dast r a das no a r qui vo de
si st e ma SX5.


3. Aps a vi su ali z ao das t a bel as j ca dast r a dos no SX5 da e mpr esa sel eci ona da , utili z e o
bot o I ncl ui r (
Figura: Conjunto de Tabelas j cadastras no SX5

) par a r e ali z ar o ca dast ro d e u ma nov a t a bel a no si st e ma :


Figura: Dados para o cadastro de uma nova tabela no sistema

- 119 -

ADVPL Completo



4. Re ali z e o pr e e nchi me nt o das i nf or maes sol i ci t a das de acor do co m as ori e nt aes a
segui r, e ao t r mi no confi r me o ca dast r a me nt o da nov a t a b el a do si st e ma com o bot o
Confi r mar ( ) .


9.4.7. Criao de Parmetros

Procedimento

1. Par a a di ci onar u m Pa r met r o, sel eci one os me nus Ambi e nt e, Ca dast ros, Pa r met r os.

2. Aps a sel e o da op o Ta b el as ser o e xi bi dos os i t e ns j ca dast r a das no a r qui vo de
si st e ma SX6.




3. Aps a vi suali z ao dos Par met r os j ca dast r a dos no SX6 da e mpr esa sel eci on a da ,
utili z e o bot o I ncl ui r (
Figura: Conjunto de Parmetros j cadastras no SX6

) par a r e al i z ar o ca dast ro de u ma nov a t a b el a no si st e ma :


- 120 -

ADVPL Completo




4. Re ali z e o pr e e nchi me nt o das i nf or maes sol i ci t a das de acor do co m as ori e nt aes a
segui r, e ao t r mi no confi r me o ca dast r a me nt o do nov o Pa r met ro do si st e ma com o
bot o Confi r mar (
Figura: Dados para o cadastro de um novo parmetro no sistema

) .

- 121 -

ADVPL Completo




10. TOTVS Development Studio

A f er r a me nt a TOTVS De v el op me nt St udi o u m progr a ma que f a z par t e do Prot h e us e per mi t e
o t r a bal ho de edi o, co mpil ao e d epur a o d e pr ogr a mas escri t os e m ADVPL.

Projeto

Um progr a ma par a ser compi l a do de v e ser vi ncul a do a u m proj et o. Nor mal me nt e, pr ogr a mas
que f a z e m par t e d e u m det er mi n a do mdul o ou a mbi e nt e est o e m u m mesmo proj et o.

A vi ncul ao dos progr a mas a u m pr oj et o f ei t a por mei o dos a r qui vos do t i po PRW. Na
v er da de, u m proj et o pode ser const i t u do de u m ou mai s ar qui vos dest e t i po, que por su a v e z ,
pode m t er u ma ou mai s f unes, conf or me i l ust r a o di a gr a ma a segui r :



Figura: Representao da estrutura de um projeto no DEV-Studio


- 122 -

ADVPL Completo


Compilao

Uma v e z a di ci on a do a u m proj et o e compil a do se m i nci d nci as de err os d e cdi go, o obj e t o
r esul t a nt e ser ca dast r a do no RPO ( Reposi t ri o de Obj et os) e poder ser ut ili z a do pel a
a pli cao ERP.

A compi l ao dos i t e ns de u m pr oj et o pod e ser r e al i z a da i ndi vi du al me nt e, por gr upo de f ont es
( past as) ou ai nda sel eci on a ndo- o i nt ei r a me nt e. Ca da u ma dos f ont es ser pr ocessa do e
compi l a do separ a da me nt e, p er mi t i ndo a vi su ali z ao do pr ogr esso da op er ao e das
me nsa ge ns d e a vi so ( war ni ngs) ou er ros ( cri t i cal err ors) n a gui a Me nsa ge ns.

Execuo

Par a qu e os obj et os co mpil a dos e di spon v ei s n RPO sej a m ut ili z a dos, de v e m ser obser v a das as
segui nt es r egr as :

E Se o pr ogr a ma n o ma ni pul a ar qui vos, pod e - se ch a m -l o di r et a me nt e do DEV- St udi o
( nome no l a do di r ei t o da barr a de f er r a me nt as) ;

E Se o pr ogr a ma ma ni pul a t a bel as e xi st e m du as opes :

. Adi ci on ar o progr a ma no me nu de u m dos a mbi e nt es e e x ecut a -l o a t r a v s do
Re mot e.

. Re ali z ar a pr epar ao do a mbi e nt e n a prpri a r ot i na , per mi ti ndo su a e x ecu o
di r et a me nt e p el o DEV- St udi o.

E No se pode compil ar u m progr a ma com o Re mot e e o Moni t or a ber t os, t e nh a est e
fi n ali z a do ou n o por er ro.

Anlise e depurao de erros

Par a i de nt i fi car as ca usas d e err os, a f err a me nt a DEV- St udi o possui di v ersos r ecursos qu e
a uxili a m o DEBUG.

A ao de DEBUG necessi t a que o progr a ma sej a e x ecut a do a par t i r do DEV- St udi o, se ndo
necess ri o obser v a r as segui nt es r egr as :

E Defi ni r e marcar os pont os d e pa r a da mai s a dequ a dos a a n l i se do f ont e ;

E Ex ecut ar a r ot i na a t r a v s do DEV- St udi o, sel eci ona ndo se u nome di r et a me nt e , ou o
mdul o que cont m a opo ou a ao que i r e x ecut -l a ;

E A par t i r do mome nt o e m que o DEV- St udi o pa usar o processa me nt o e m u m dos pont os
de par a da esp eci fi ca dos pr e vi a me nt e pode m ser ut ili z a das as j a nel as de vi su ali z ao
di spon v ei s no DEV- St udi o, que s o :

. Vari v ei s Locai s
. Vari v ei s Pri v a t es
. Vari v ei s Publi cs
. Vari v ei s St a t i cs
. Ja nel a da Wa t chs
. Ja nel a de Ta bel as e Ca mpos
. Pil h a de Ch a ma das

E At r a v s da Ja n el a de Wa t chs poss v el det er mi nar qu ai s v ari v ei s de v e m ser e xi bi das ;

- 123 -

ADVPL Completo


E Na pil h a de cha ma das, v eri fi ca - se a se q nci a de ch a ma das das f unes ;
E Na past a de Coma ndos, pod e - se, e nqu a nt o o pr ogr a ma est i v er pa usa do, escr e v er
qu al quer coma ndo e a o dar Ent er , el e e x ecut a do, per mi t i ndo pesqui sar pal a vr as e
e x pr esses no pr pri o f ont e ou e m qu al quer f ont e ar ma z e na do no HD;

E Ao par ar pode- se ou conti nu ar o progr a ma a t o prxi mo pont o de p ar a da , caso h a j a
u m out ro defi ni do, ou e x ecut a r l i nha a li nh a da rot i n a .

Interface da aplicao

Por ser u m a mbi e nt e i nt egr a do d e dese nv ol vi me nt o, o DEV- St udi o proporci on a t odas essas
f aci li da des, por mei o de i nt erf ace ni ca como il ust r a a fi gur a a segui r :



E O DEV- St udi o a pr ese nt a , no t opo da t el a , u m conj unt o de opes de me nu e u ma sri e
de bot es que f acili t a m a su a ma ni pul ao.
Figura: Interface principal do TOTVS Development Studio


E Na t el a ce nt r al , a pr ese nt a do o cdi go das f unes e m ADVPL. Na par t e i nf eri or s o
e xi bi das al gu mas past as que f aci li t a m a e x ecuo d e coma ndos, e xi bio d e cont e dos
de v a ri v ei s e me nsa g e ns, be m como da dos sobr e o proj et o.


- 124 -

ADVPL Completo



Desenvolvimento de pequenas customizaes


11. Acesso e manipulao de bases de dados em ADVPL

Como a l i ngu a ge m ADVPL ut ili z a da no dese nvol vi me nt o de a pli cao par a o si st e ma ERP
Prot h e us, el a de v e possui r r ecursos que p er mi t a m o acesso e a ma ni pul ao de i nf or maes
i ndepe nde nt e me nt e da base d e da dos pa r a o qual o si st e ma f oi confi gur a do.

Dest a f or ma a l i ngu a ge m possui doi s gr upos de f unes di st i nt os par a a t u ar com os ba ncos d e
da dos :

E F unes de ma ni pul ao de da dos g e nri cas
E F unes d e ma ni pul ao de da dos esp ec fi cas par a a mbi e nt es TOPC ONNECT /
DBACCESS

Funes de manipulao de dados genricas

As f unes de ma ni pul ao de da dos di t as como ge nri cas per mi t e m que u ma a pli cao ADVPL
sej a escri t a da mesma f or ma , i ndepe nde nt e se a base d e da dos confi gur a da par a o si st e ma
ERP f or do t i po I SAM ou pa dr o SQL.

Mui t as dest as f unes f or a m i ni ci al me nt e her da das da l i ngu a ge m CLI PPER, e medi a nt e nov as
i mpl e me nt aes da r e a de Tecnol ogi a da Mi crosi ga f or a m mel hor a das e a d equ a das s
necessi da des do ERP. Por est a r a z o poss v el e ncont r ar e m docu me nt aes da l i ngu a ge m
CLI PPER i nf or maes sobr e f unes de ma ni pul ao d e da dos ut i li z a das n a f er r a me nt a ERP.

De nt r e as mel hori as i mpl e me nt a das pel a r e a de Tecnol ogi a da Mi crosi ga , pode mos me nci on ar
o dese nv ol vi me nt o de nov as f unes como por e x e mpl o a f uno MsSe e k( ) - v ers o d a
Mi crosi ga par a a f uno DbSe e k( ) , e a i nt egr ao e nt r e a si nt a x e ADVPL conv e nci on al e a
f err a me nt a de acesso a ba ncos d e da dos no pa dr o S QL T OPC ONNECT ( DbAcess) .

A i nt egr ao e nt r e a a pli cao ERP e a f err a me nt a T OPC ONNECT p er mi t e que as f unes de
acesso e ma ni pul ao de da dos escri t as e m ADVPL sej a m i nt er pr et a das e conv er t i das par a
u ma si nt a x e compa t v el com o pa dr o S QL ANSI e d est a f or ma a pl i ca das aos SG DBs ( Si st e mas
Ger e nci a dor es d e Ba ncos de Da dos) com su a si nt a x e n a t i v a .

Funes de manipulao de dados para ambientes TOPCONNECT / DBACCESS

Par a i mpl e me nt ar u m acesso mai s ot i mi z a do e di sponi bili z ar no a mbi e nt e ERP f unci on ali da des
que ut ili z e m de f or ma mai s a dequ a da os r ecursos dos SGDBs homol oga dos par a o si st e ma ,
f or a m i mpl e me nt a das f unes de acesso e ma ni pul ao d e da dos esp ec fi cas par a a mbi e nt es
TOPC ONNECT/ DBACCESS.

Est as f unes per mi t e m que o dese nv ol v edor ADVPL e x ecut e co ma ndos e m si nt a x e S QL
di r et a me nt e d e u m cdi go f ont e da a pli cao, di sponi bili z a ndo r ecursos como e x ecu o d e
queri es d e consul t a , ch a ma das de pr ocedur es e comuni cao com out ros ba ncos de da dos
a t r a v s d e ODBCs.


As f unes espec fi cas par a a mbi e nt es T OPCONNECT ser o a bor d as no
ma t eri al de ADVPL Av a na do.

- 125 -

ADVPL Completo



11.1. Diferenas e compatibilizaes entre bases de dados

Como a a pli cao ERP pode ser confi gur a da par a ut ili z ar di f er e nt es t i pos d e bases d e da dos
i mpor t a nt e me nci on ar as pri nci pai s di f er e nas e nt r e est es r ecursos, o que pod e det er mi n ar a
f or ma como o dese nv ol v edor i r opt ar por escr e v er su a a pl i cao.

Acesso a dados e ndices

No acesso a i nf or maes e m bases de da dos do pa dr o I SAM so se mpr e l i dos os r egi st r os
i nt ei ros, e nqu a nt o no S QL pode - se l er a p e n as os ca mpos n ecessri os n a quel e processa me nt o.

O acesso di r et o f ei t o a t r a v s de ndi ces que so t a bel as par al el as s t a bel as de da dos e que
cont m a ch a v e e o e nder eo do r egi st ro, d e f or ma a n l oga ao ndi ce de u m li vro. Pa r a ca da
cha v e, cri a do u m ndice prpri o.

Nas bases de da dos pa dr o I SAM os ndi ces so a r ma z e n a dos e m u m ni co ar qui vo do t i po
CDX, j nos ba ncos de da dos pa dr o SQL ca da ndi ce cri a do com u ma nu mer a o seqe nci al
t e ndo como base o nome da t a b el a ao qu al el e est r el aci on a do.

A ca da i ncl uso ou al t er ao de u m r egi st r o t odos os ndi ces s o a t u ali z a dos, t or na ndo
necess ri o pl a nej ar a dequ a da me nt e qu ai s e qua nt os ndi ces ser o d efi ni dos par a u ma t a bel a ,
poi s u ma qu a nti da de e xcessi v a pod e compr ome t er o d ese mpe nho dest as op er aes.

De v e ser consi der a da a possi bili da de de utili z ao de ndi ces t e mpor ri os par a pr ocessos
esp ec fi cos, os qu ai s ser o cri a dos e m t e mpo d e e x ecu o da rot i n a . Est e f a t or de v e l e v ar e m
consi der ao o esf oro do a mbi e nt e a ca da e x ecuo da rot i n a e a p eri odi ci da de com a qual
e x ecut a da .

Estrutura dos registros (informaes)

Nas bases de da dos pa dr o I SAM, ca da r e gi st ro possui u m i de nt i fi ca dor na ti vo ou I D
seqe nci al e asce nde nt e que f unci on a como o e nder eo b ase da quel a i nf or mao.

Est e I D, mas conheci do como RECNO ou RECNUMBER g er a do no mome nt o de i ncl uso do
r egi st ro n a t a bel a e some nt e ser al t er a do caso a est r ut ur a dos d a dos d est a t a bel a sofr a
al gu ma ma nut e no. De nt r e as ma nut e nes que u ma t a bel a de da dos I SAM pode sofr er
pode- se ci t ar a ut ili z ao do coma ndo PACK, o qu al i r a pa gar fi si ca me nt e os r egi st ros
del et a dos da t a bel a f ora ndo u ma r e nu mer a o dos i de nti fi ca dor es de t odos os r egi st r os. Est a
si t u ao t a mb m t or na necess ri a a r ecri ao d e t odos os ndi ces vi ncul a dos qu el a t a bel a .

I st o ocorr e nas bases d e da dos I SAM d e vi do ao concei t o de e xcl uso l gi ca de r egi st ros que as
mesmas possu e m. J os ba ncos de da dos pa dr o S QL n a t i v a me nt e ut ili z a m a pe n as o concei t o
de e xcl uso f si ca de r e gi st ros, o qu e pa r a out r as a pl i caes seri a t r a nspar e nt e, mas n o o
caso do ERP Prot he us.

Par a ma nt er a compa t i bili da de das a pli caes dese nv ol vi das par a bases de da dos pa dr o
I SAM, a r e a de Tecnol ogi a e Ba nco de Da dos da Mi crosi ga i mpl e me nt ou nos ba ncos de da dos
pa dr o SQL o concei t o de e xcl uso l gi ca de r egi st ros e xi st e nt e n as bases d e da dos I SAM
a t r a v s da cri ao d e ca mpos de cont r ol e esp ec fi cos : R_E_ C_ N_ O_, D_E_L_E_T_ e
R_E_C_ D_E_L.

Est es ca mpos p er mi t e m que a a pli cao ERP ger e nci e as i nf or maes do ba nco d e da dos da
mesma f or ma qu e as i nf or maes e m bases d e da dos I SAM.


- 126 -

ADVPL Completo


Com i sso o ca mpo R_E_C_N_ O_ ser u m i de nt i fi ca dor ni co do r e gi st ro de nt r o da t a bel a ,
f unci on a ndo como o I D ou RECNUMBER de u ma t a bel a I SAM, mas utili z a ndo u m r ecurso
a di ci onal di spon v el nos ba ncos d e da dos r el aci onai s conheci do com Chave Primria
11.2. Funes de acesso e manipulao de dados
.

Par a a a pli cao ERP Prot h e us o ca mpo d e cont r ol e R_E_C_ N_ O_ defi ni do e m t odas as
t a bel as como se ndo su a cha v e pri mri a , o que t r a nsf er e o cont r ol e de su a nu mer a o
seqe nci al ao ba nco de da dos.

O ca mpo D_E_L_E_T_ t r a t a do i nt er n a me nt e p el a a pli cao ERP como u m fl a g ou marca de
e xcl uso. Dest a f or ma os r egi st ros que est i v er e m com est e ca mpo ma rca do ser o
consi der a dos como e xcl u dos l ogi ca me nt e. A e x ecuo do coma ndo PACK e m u ma t a b el a de
u m ba nco d e da dos pa dr o SQL vi sa e xcl ui r fi sica me nt e os r egi st r os co m o ca mpo D_E_L_E_T_
marca do, mas n o ca usar o ef ei t o de r e nu mer ao de RECNO ( no caso R_E_C_N_ O_) qu e
ocor r e n as t a b el a de bases de da dos I SAM.


As f unes d e acesso e ma ni pul ao de da dos d escri t as nest e t pi co so as cl assi fi ca das
a nt eri or me nt e como f unes g e nri cas da li ngua ge m ADVPL, per mi t i ndo que as mesmas sej a m
utili z a das i ndepe nde nt e me nt e da base de da dos par a a qu al a a pli cao ERP est confi gur a da .

As f unes de acesso e ma ni pul ao de da dos d efi ne m basi ca me nt e :

E Ta bel a que est se ndo t r a t a da ;
E Ca mpos que d e v er o ser l i dos ou a t u ali z a dos ;
E Mt odo d e acesso di r et o as i nf or maes ( r egi st ros e ca mpos) .

De nt r e as f unes ADVPL di spon v ei s par a acesso e ma ni pul ao de i nf or maes, est e ma t eri al
i r det al h ar as segui nt es opes :

SELECT( )
DBSELECTAREA( )
DBSETORDER( )
DBSEEK( ) E MSSEEK( )
DBSKIP( )
DBGOTO( )
DBGOTOP( )
DBGOBOTTON( )
DBSETFILTER( )
RECLOCK( )
SOFTLOCK( )
MSUNLOCK( )
DBDELETE( )
DBUSEAREA( )
DBCLOSEAREA( )

- 127 -

ADVPL Completo


DBRLOCK( )

Sintaxe DBRLOCK(xIdentificador)
Descrio
F uno de base d e da dos, que ef et u a o l ock ( t r a v a me nt o) do r e gi st ro
i de nti fi ca do pel o par met r o x I d e nt i fi ca dor. Est e par met r o pode ser o
Recno( ) pa r a t a bel as e m f or ma do I SAM, ou a ch a v e pri mri a par a ba ncos d e
da dos r el aci on ai s.

Se o pa r met ro x I de nt i fi ca dor n o f or esp eci fi ca do, t odos os l ocks da r e a de
t r a bal ho ser o li ber a dos, e o r egi st r o posi ci on a do ser t r a v a do e a di ci on a do
e m u ma l i st a de r egi st ros bl oque a dos.

DBCLOSEAREA( )

Sintaxe DbCloseArea( )
Descrio
Per mi t e que u m ali as pr ese nt e n a con e x o sej a f ech a do, o qu e vi a bili z a se u
r e uso e m out r o oper a o. Est e coma ndo t e m ef ei t o a pe n as no al i as a ti vo na
cone x o, se ndo necessri a su a utili z ao e m conj unt o com o co ma ndo
DbSel ect Ar e a ( ) .

DBCOMMIT( )

Sintaxe DBCOMMIT( )
Descrio Ef et u a t odas as a t u ali z aes p e nde nt es na r e a de t r a bal ho a t i v a .

DBCOMMITALL( )

Sintaxe DBCOMMITALL( )
Descrio
Ef et u a t odas as a t uali z aes p e nde nt es e m t od as as r e a d e t r a bal ho e m uso
pel a t hr e a d ( cone x o) a t i v a .

DBDELETE( )

Sintaxe DbDelete( )
Descrio
Ef et u a a e xcl uso l gi ca do r egi st ro posi ci ona do n a r e a d e t r a bal ho a t i v a ,
se ndo necess ri a su a utili z ao e m conj unt o com as f unes RecLock( ) e
MsUnLock( ) .

DBGOTO( )

Sintaxe DbGoto(nRecno)
Descrio
Mov e o cursor da r e a de t r a bal ho a t i v a par a o r ecor d nu mber ( r ecno)
esp eci fi ca do, r e ali z a ndo u m posi ci on a me nt o di r et o, se m a necessi da de u ma
busca ( se e k) pr vi o.


- 128 -

ADVPL Completo



DBGOTOP( )

Sintaxe DbGoTop( )
Descrio Mov e o cursor da r e a d e t r a bal ho a t i v a par a o pri mei ro r egi st ro l gi co.

DBGOBOTTON( )

Sintaxe DbGoBotton( )
Descrio Mov e o cursor da r e a d e t r a bal ho a t i v a par a o l ti mo r egi st r o l gi co.

DBRLOCKLIST( )

Sintaxe DBRLOCKLIST( )
Descrio
Ret or n a u m ar r a y cont e ndo o r ecor d nu mb er ( r ecno) de t odos os r egi st ros
t r a v a dos da r e a d e t r a bal ho a ti v a .

DBSEEK( ) E MSSEEK( )

Sintaxe DbSeek(cChave, lSoftSeek, lLast)
Descrio
DbSeek: Per mi t e posi ci on ar o cursor da r e a d e t r a bal ho a t i vo no r egist ro
com as i nf or maes esp eci fi ca das n a ch a v e de busca , f or nece ndo u m r et or no
l gi co i ndi ca ndo se o posi ci on a me nt o f oi ef et u a do com sucesso, ou sej a , se a
i nf or mao especi fi ca da na ch a v e de busca f oi l ocal i z a da n a r e a de
t r a bal ho.

MsSeek( ): F uno dese nvol vi da pel a r e a d e Tecnol ogi a da Mi crosi ga , a
qu al possui as mesmas f unci onali da des bsi cas da f uno DbSe e k( ) , com a
v a nt a ge m de n o n ecessi t ar acessar nov a me nt e a base de da dos par a
l ocali z ar u ma i nf or ma o j ut ili z a da pel a t hr e a d ( cone x o) a t i v a .

DBSKIP( )

Sintaxe DbSkip(nRegistros)
Descrio
Mov e o cursor do r egi st ro posi ci on a do par a o pr xi mo ( ou a nt eri or
depe nde ndo do pa r met r o) , e m f uno da or d e m a t i v a par a a r e a de
t r a bal ho.

DBSELECTAREA( )

Sintaxe DbSelectArea(nArea | cArea)
Descrio
Defi ne a r e a d e t r a bal ho especi fi ca da com se ndo a r e a a t i v a . Tod as as
oper aes subseqe nt es que fi z er e m r ef er nci a a u ma r e a de t r a bal ho a
utili z ao, a me nos que a r e a d esej a da sej a i nf or ma da e x pli ci t a me nt e.


- 129 -

ADVPL Completo



DBSETFILTER( )

Sintaxe DbSetFilter(bCondicao, cCondicao)
Descrio
Defi ne u m fi l t ro par a a r e a d e t r a bal ho a t i v a , o qu al pode ser d escri t o n a
f or ma de u m bl oco de cdi go ou a t r a v s d e u ma e x pr ess o si mpl es.

DBSETORDER( )

Sintaxe DbSetOrder(nOrdem)
Descrio
Defi ne qu al ndi ce ser ut ili z a da pel a r e a d e t r a bal ho a t i v a , ou sej a , pel a
r e a pr e vi a me nt e sel eci ona da a t r a v s do coma ndo DbSel ect Ar e a ( ) . As
or d e ns di spon v ei s no a mbi e nt e Prot he us s o a quel as defi ni das no SI NDEX
/ SI X, ou as or d e ns di sponi bili z adas por mei o d e ndi ces t e mpor ri os.

DBORDERNICKNAME( )

Sintaxe DbOrderNickName(NickName)
Descrio
Defi ne qu al ndi ce cri a do pel o usu ri o sej a ut ili z a do. O usu ri o pode i ncl ui r os
se us prpri os ndi ces e no mome nt o da i ncl uso de v e cri ar o NI CKNAME par a
o mesmo.

DBUNLOCK( )

Sintaxe DBUNLOCK( )
Descrio
Mesma f unci on ali da de da f uno UNLOCK( ) , s que r ecome nda da par a
a mbi e nt es de r ede nos qu ai s os ar qui vos so compar t i l h ados.

Li ber a o t r a v a me nt o do r egi st ro posi ci on a do n a r e a de t r a bal ho a t i v a e
confi r ma as a t u ali z aes ef e t u a das n a quel e r egi st ro.

DBUNLOCKALL( )

Sintaxe DBUNLOCKALL( )
Descrio
Li ber a o t r a v a me nt o de t odos os r egi st ros d e t odas as r e as de t r a bal ho
di spon v ei s na t hr e a d ( cone x o) a t i v a .

DBUSEAREA( )

Sintaxe
DbUseArea(lNovo, cDriver, cArquivo, cAlias, lComparilhado,;
lSoLeitura)
Descrio
Defi ne u m ar qui vo de base de da dos co mo u ma r e a de t r a bal ho di spon v el
na a pli cao.

MSUNLOCK( )

Sintaxe MsUnLock( )
Descrio
Li ber a o t r a v a me nt o (l ock) do r egi st r o posi ci on a do confi r ma ndo as
a t uali z aes ef et u a das n est e r egi st ro.


- 130 -

ADVPL Completo


RECLOCK( )

Sintaxe RecLock(cAlias,lInclui)
Descrio
Ef et u a o t r a v a me nt o do r egi st ro posi ci on a do n a r e a d e t r a bal ho a t i v a ,
per mi t i ndo a i ncl uso ou al t er ao das i nf or maes do mesmo.

RLOCK( )

Sintaxe RLOCK( ) lSucesso
Descrio Ef et u a o t r a v a me nt o do r egi st ro posi ci on a do na r e a de t r a bal ho a t i v a .

SELECT( )

Sintaxe Select(cArea)
Descrio
Det er mi n a o n mer o de r ef er nci a de u m det er mi n a do ali as e m u m
a mbi e nt e de t r a bal ho. Caso o al i as especi fica do n o est ej a e m uso no
a mbi e nt e, ser r et or n a do o v al or 0 ( z ero) .


SOFTLOCK( )

Sintaxe SoftLock(cAlias)
Descrio
Per mi t e a r eser v a do r e gi st ro posi ci on a do n a r e a de t r a bal ho a ti v a de f or ma
que out r as op er aes, com e xceo da a t u al , n o possa m a t u ali z ar est e
r egi st ro. Di f er e da f u no RecLock( ) poi s n o ger a u ma obri gao d e
a t u ali z ao, e pod e ser sucedi do por el e.

Na a pli cao ERP Pr ot he us, o Sof t Lock( ) ut ili z a do nos browses, a nt es da
confi r ma o da op er ao d e al t er ao e e xcl uso, poi s nest e mome nt o a
mesma ai nda no f oi ef et i v a d a , mas out r as cone xes n o pod e m acessa r
a quel e r egi st ro poi s o mesmo est e m ma nut e no, o que i mpl e me nt a da
i nt egri da de da i nf or mao.

UNLOCK( )

Sintaxe UNLOCK( )
Descrio
Li ber a o t r a v a me nt o do r egi st ro posi ci on a do n a r e a de t r a bal ho a t i v a e
confi r ma as a t u ali z aes ef et u a das n a quel e r egi st ro.



- 131 -

ADVPL Completo



11.3. Diferenciao entre variveis e nomes de campos

Mui t as v e z es u ma v ari v el pode t er o mesmo nome que u m ca mpo d e u m ar qui vo ou de u ma
t a bel a a ber t a no mome nt o. Nest e caso, o ADVPL pri vil egi ar o ca mpo, de f or ma que u ma
r ef er nci a a u m nome que i de nti fi que t a nt o u ma v ari v el como u m ca mpo, r esul t ar no
cont e do do ca mpo.

Par a esp eci fi car qu al de v e ser o el e me nt o r ef er e nci a do, de v e - se utili z ar o op er a dor d e
i de nti fi cao de a pel i do ( - > ) e u m dos doi s i de nt i fi ca dor es de r ef er nci a , MEMVAR ou F I ELD.

cRes : = MEMVAR- > NOME

Est a l i nh a de coma ndo i de nti fi ca que o v al or a t ri bu do v ari v el cRes de v e ser o v al or da
v ari v el de me mri a cha ma da NOME.

cRes : = F I ELD- > NOME

Nest e caso, o v al or a t ri bu do v ari v el cRes ser o v al or do ca mpo NOME e xi st e nt e no a r qui vo
ou t a bel a a ber t o n a r e a a t ual .

O i de nti fi ca dor F I ELD pode ser subst i t u do pel o a peli do de u m ar qui vo ou t a bel a a ber t o, par a
e vi t ar a necessi da de d e sel eci on ar a r e a a nt es de acessar o cont e do d e t er mi n a do ca mpo.

cRes : = CLI ENTES- > NOME

As t a bel as de da dos ut ili z a das pel a a pli cao ERP r eceb e m a ut oma t i ca me nt e do si st e ma o
a peli do ou ALI AS especi fi ca do par a as mes mas no ar qui vo d e si st e ma SX2. Assi m se o ca mpo
NOME p er t e nce a u ma t a bel a da a pli cao PROTHEUS, o mesmo pod er ser r ef er e nci a do com a
i ndi cao do ALI AS pr - defi ni do dest a t a b el a .

cRes : = SA1- > NOME / / SA1 Ca dast ro d e Cl i e nt es



Par a mai or es det al hes sobr e a ber t ur a de ar qui vos com a t ri bui o de a peli dos,
consul t e a docu me nt ao sobr e acesso a ba nco de da dos ou a docu me nt ao
da f uno dbUse Ar e a ( ) .

Os al i as das t a bel as da a pli cao ERP s o pa droni z a dos e m t r s l et r as, que
corr esponde m as i ni ci ais da t a b el a . As confi gur aes d e ca da ALI AS ut ili z a do
pel o si st e ma pod e m ser vi su ali z a das a t r a v s do mdul o Confi gur a dor - >
Bases d e Da dos - > Di ci on ri os - > Bases d e Da dos.



- 132 -

ADVPL Completo



11.4. Controle de numerao seqencial

Al guns ca mpos de nu mer ao do Pr ot he us s o f or neci dos pel o si st e ma e m or de m asce nde nt e.
o caso, por e x e mpl o, do n mero do pedi do de v e nda e out ros que ser v e m como i de nti fi ca dor
das i nf or maes das t a bel as. pr eci so t er u m cont r ol e do f or neci me nt o desses n mer os, e m
esp eci al qu a ndo v ri os usuri os est o t r a bal ha ndo si mul t a ne a me nt e.



Os ca mpos qu e r ece be m o t r a t a me nt o d e nu mer ao seq e nci al pel a
a pli cao ERP n o de v e m ser consi der a dos co mo ch a v e pri mri a das t a bel as
aos qu ai s est o vi ncul a dos.

No caso esp ec fi co da a pli cao ERP Pr ot he us a cha v e pri mri a e m a mbi e nt es
TOPC ONNECT ser o ca mpo R_E_C_ N_ O_, e par a bases de da dos pa dr o
I SAM o concei t o de ch a v e pri mri a i mpl e me nt a do pel a r egr a de negci o do
si st e ma , poi s est e pa dr o de da dos no possui o concei t o de uni ci da de d e
da dos.


Semforos

Par a defi ni r o concei t o do que u m se mf oro d e nu mer ao d e v e - se a v al i ar a segui nt e
seq nci a de e v e nt os no si st e ma :

E Ao ser f or neci do u m n mer o, el e per ma nece r eser v a do a t a concl uso da op er ao
que o sol i ci t ou ;

E Se est a op er a o f or confi r ma da , o n mer o i ndi sponi bili z a do, mas se a oper a o f or
ca ncel a da , o n mer o vol t ar a ser di spon v el mesmo que n a quel e mome nt o n meros
mai or es j t e nh a m si do of er eci dos e ut i li z a dos.

Com i sso, mesmo que t e nh a mos v ri os pr ocessos sol i ci t a ndo nu mer aes seq e nci ai s par a
u ma mesma t a bel a , co mo por e x e mpl o i ncl uses si mul t ne as de pedi dos de v e ndas, t er e mos
par a ca da pedi do u m n mer o e xcl usi vos e se m o i nt er v al os e nu mer aes n o ut ili z a das.

Funes de controle de semforos e numerao seqencial

A li ngu a ge m ADVPL per mi t e a utili z ao das se gui nt es f unes par a o cont r ol e das nu mer aes
seqe nci ai s utili z a das n as t a bel as da a pl i cao ERP:

GETSXENUM( )
CONFIRMSXE( )
ROLLBACKSXE( )

GETSXENUM( )

Sintaxe GETSXENUM(cAlias, cCampo, cAliasSXE, nOrdem)
Descrio
Obt m o n mero seq nci a do ali as especi fi cado no par met ro, a t r a v s d a
r ef er nci a aos ar qui vos de si st e ma SXE/ SXF ou ao ser vi dor de nu mer a o,
qu a ndo est a confi gur ao est h a bi li t a da no a mbi e nt e Prot h e us.


- 133 -

ADVPL Completo


CONFIRMSXE( )

Sintaxe CONFIRMSXE(lVerifica)
Descrio Confi r ma o n mer o al oca do a t r a v s do l ti mo coma ndo GETSXENUM( ) .


ROLLBACKSXE( )

Sintaxe ROLLBACKSXE( )
Descrio
Descar t a o n mer o f or n eci do pel o l ti mo coma ndo GETSXENUM( ) ,
r et or n a ndo a nu mer a o di spon v el par a out r as con e x es.


12. Customizaes para a aplicao ERP

Nest e t pi co ser o a bor das as f or mas p el as qu ai s a a pli cao ERP Pr ot he us pod e ser
cust omi z a da com a ut ili z ao da l i ngu a ge m ADVPL.

Pel os r ecursos de confi gur ao da a pl i cao ERP di spon v ei s no mdul o Confi gur a dor poss v el
i mpl e me nt ar as segui nt es cust omi z aes :

E Vali daes d e ca mpos e per gunt as do si st e ma e de usu ri os
E I ncl uso d e ga t i l hos e m ca mpos d e si st e mas e de usu ri os
E I ncl uso d e r egr as e m par met ros d e si st e mas e d e usu ri os
E Dese nv ol vi me nt o de pont os de e nt r a da par a i nt er a gi r com f unes pa dr es do si st e ma





- 134 -

ADVPL Completo



12.1. Customizao de campos Dicionrio de Dados


12.1.1. Validaes de campos e perguntas

As f unes de v al i dao t m como car act er st i ca f unda me nt al u m r et or no do t i po l gi co, ou
sej a , u m cont e do . T. Ver da d ei ro ou . F. F al so.

Com base nest a pr e mi ssa , a ut i li z ao de v al i daes no Di ci on ri o de Da dos ( SX3) ou n as
Per gunt as d e Pr ocessos e Rel a t ri os ( SX1) de v er f oca r se mpr e n a utili z ao de f unes ou
e x pr esses que r esul t e m e m u m r et or no l gi co.

At r a v s do mdul o Confi gur a dor poss v el al t er a r as propri eda des d e u m ca mpo ou de u ma
per gunt a de f or ma a i ncl ui r r egr as de v al i dao par a as segui nt es si t u aes :

E SX3 Validao de usurio (X3_VLDUSER)
E SX1 Validao da pergunta (X1_VALID)

De nt r e as f unes que a li ngu a ge m ADVPL e m conj unt o co m os r ecursos d ese nv ol vi dos pel a
a pli cao ERP par a v al i dao d e ca mpos e p er gunt as ser o det al ha das :

VAZIO( )
NAOVAZIO( )
EXISTCPO( )
EXISTCHAV( )
PERTENCE( )
POSITIVO( )
NEGATIVO( )
TEXTO( )

EXISTCHAV( )

Sintaxe ExistChav(cAlias, cConteudo, nIndice)
Descrio
Ret or n a . T. ou . F. se o cont e do esp eci fi ca do e xi st e no ali as especi fi ca do.
Caso e xi st a ser e xi bi do u m hel p de si st e ma com u m a vi so i nf or ma ndo da
ocor r nci a .

F uno utili z a da nor mal me nt e par a v eri fi car se u m det er mi n a do cdi go de
ca dast r o j e xi st e n a t a bel a n a qu al a i nf or mao ser i nseri da , co mo por
e x e mpl o o CNPJ no ca d ast ro de cl i e nt es ou f or n ecedor es.


- 135 -

ADVPL Completo



EXISTCPO( )

Sintaxe ExistCpo(cAlias, cConteudo, nIndice)
Descrio
Ret or n a . T. ou . F. se o cont e do esp eci fi ca do n o e xi st e no ali as
esp eci fi ca do. Caso n o e xi st a ser e xi bi do u m hel p de si st e ma com u m a vi so
i nf or ma ndo da ocor r nci a .

F uno ut ili z ada nor mal me nt e pa r a v eri fi car se a i nf or mao di gi t a da e m u m
ca mpo, a qu al depe nde de out r a t a bel a , r e al me nt e e xi st e nest a out r a t a bel a ,
como por e x e mpl o o cdi go de u m cl i e nt e e m u m pedi do de v e nda .

NAOVAZIO( )

Sintaxe NaoVazio( )
Descrio
Ret or n a . T. ou . F. se o cont e do do ca mpo posi ci on a do no mome nt o n o
est v a zi o.

NEGATIVO( )

Sintaxe Negativo( )
Descrio Ret or n a . T. ou . F. se o cont e do di gi t a do par a o ca mpo nega t i vo.

PERTENCE( )

Sintaxe Pertence(cString)
Descrio
Ret or n a . T. ou . F. se o cont e do di gi t a do par a o ca mpo est cont i do n a
st ri ng defi ni da como par met ro da f uno. Nor mal me nt e ut ili z a da e m
ca mpos com a opo d e combo, poi s caso cont r ri o seri a utili z a da a f uno
Exi st Cpo( ) .

POSITIVO( )

Sintaxe Positivo( )
Descrio Ret or n a . T. ou . F. se o cont e do di gi t a do par a o ca mpo posi ti vo.

TEXTO( )

Sintaxe Texto( )
Descrio
Ret or n a . T. ou . F. se o cont e do di gi t a do par a o ca mpo cont m a pe n as
n meros ou al f a nu mri cos.

VAZIO( )

Sintaxe Vazio( )
Descrio
Ret or n a . T. ou . F. se o cont e do do ca mpo posi ci on a do no mome nt o est
v a zi o.


- 136 -

ADVPL Completo



12.1.2. Pictures de formao disponveis

Com base na docu me nt ao di spon v el no DEM Docu me nt ao El et r ni ca Mi crosi ga , a
li ngua ge m ADVPL e a a pli cao ERP Prot he us a d mi t e m as segui nt es pi ct ur es :

Dicionrio de Dados (SX3) e GET

Funes
Contedo Funcionalidade
A Per mi t e a pe n as car act er es al f a bt i cos.
C Exi be CR d epoi s de n mer os posi t i vos.
E Exi be nu mri co com o pont o e v r gul a i nv er t i dos ( f or ma t o Eur op e u) .
R I nser e ca r act er es di f er e nt es dos car act er es de t e mpl a t e n a e xi bi o, mas n o os
i nser e na v ari v el do GET.
S<n> Per mi t e rol a me nt o hori z ont al do t e xt o de nt ro do GET, < n > u m n mer o i nt ei ro
que i de nti fi ca o t a ma nho da r egi o.
X Exi be DB d epoi s d e n mer os nega t i vos.
Z Exi be z eros como br a ncos.
( Exi be n meros nega t i vos e nt r e pa r nt eses com os espaos e m br a nco i ni ci ai s.
) Exi be n meros nega t i vos e nt r e pa r nt eses se m os espaos e m br a nco i ni ci ai s.
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o.

Templates
Contedo Funcionalidade
X Per mi t e qual quer ca r act er e.
9 Per mi t e a pe nas d gi t os par a qu al quer ti po de da do, i ncl ui ndo o si n al par a
nu mri cos.
# Per mi t e d gi t os, si nai s e espaos e m br a nco par a qu al quer t i po de da do.
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o.
* Exi be u m ast eri sco no l ugar dos espaos e m br a nco i ni ci ai s e m n mer os.
. Exi be o pont o deci mal .
, Exi be a posi o do mi l har .

Exemplo 01 Picture campo numrico

CT2_VALOR Nu mri co 17, 2
Pi ct ur e : @E 99, 999, 999, 999, 999. 99


Exemplo 02 Picture campo texto, com digitao apenas em caixa alta

A1_NOME Car act er - 40
Pi ct ur e : @!


- 137 -

ADVPL Completo



SAY e PSAY

Funes
Contedo Funcionalidade
C Exi be CR d epoi s de n mer os posi t i vos
E Exi be nu mri co com o pont o e a v r gul a i nv er t i dos ( f or ma t o Eur op e u)
R I nser e car act er es di f er e nt es dos car act er es d e t e mpl a t e
X Exi be DB d epoi s d e n mer os nega t i vos
Z Exi be z eros como br a ncos
( Envol v e n mer os nega t i vos e nt r e pa r nt eses
! Conv er t e t odos os ca r act er es al f a bt i cos par a mai scul o

Templates
Contedo Funcionalidade
X Exi be d gi t os par a qu al quer t i po de da do
9 Exi be d gi t os par a qu al quer t i po de da do
# Exi be d gi t os par a qu al quer t i po de da do
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o
* Exi be ast eri sco no l ugar de espaos e m br a nco i ni ci as e m n mer os
. Exi be a posi o do pont o deci mal
, Exi be a posi o do mi l har

Exemplo 01 Picture campo numrico

CT2_VALOR Nu mri co 17, 2
Pi ct ur e : @E 99, 999, 999, 999, 999. 99



















- 138 -

ADVPL Completo



12.2. Customizao de gatilhos Configurador

A a pli cao ERP ut ili z a o r ecurso d e ga t il hos e m ca mpo com a fi nali da de de a uxi li ar o usuri o
no pr e e nchi me nt o d e i nf or maes dur a nt e a di gi t ao de i nf or maes. As f unes que pode m
ser ut ili z a das no ga til ho est o di r et a me nt e r el aci ona das a defi ni o da e x pr ess o de r et or no
que ser e x ecut a da na a v ali ao do ga t i l ho do ca mpo.

As r egr as que de v e m ser obser v a das n a mont a ge m de u m ga til ho e confi gur ao de se u
r et or no s o :

E Na defi ni o da ch a v e de busca do ga t il ho de v e ser a v ali a da qu al fili al de v er ser
utili z a da como par t e d a ch a v e : a fi li al da t abel a de ori ge m do ga t il ho ou a fili al da
t a bel a que ser consul t a da . O que nor mal me nt e det er mi n a a fili al que ser ut ili z a da
como par t e da ch a v e j ust a me nt e a i nf or ma o que ser consul t a da , aonde :

o Consul t as de i nf or maes e nt r e t a b el as com est r ut ur a d e ca b eal ho e i t e ns
de v e m ut ili z ar a fili al da t a bel a de ori ge m, poi s a mbas as t a bel as de v e m possui r
o mesmo t r a t a me nt o d e fili al ( compar t il ha do ou e xcl usi vo) .

Exemplos:

Pedi do de v e ndas - > SC5 x SC6
Not a fi scal de e nt r a da - > SF 1 x SD1
Fi ch a de i mobili z a do - > SN1 x SN3
Ora me nt o cont bil - > CV1 x CV2

o Consul t a de i nf or maes de t a bel as de ca dast r os de v e m ut ili z ar a fili al da t a bel a
a ser consul t a da , pois o compa r t il h a me nt o dos ca dast r os nor mal me nt e
i ndepe nde nt e e m r el ao s movi me nt aes e out ros ca dast ros do si st e ma .

Exemplos:

Ca dast r o de cl i e nt es - > SA1 ( compa r t il h a do)
Ca dast r o de f or n ecedor es - > SA2 ( compar t i l h ado)
Ca dast r o de v e ndedor es - > SA3 ( e xcl usi vo)
Ca dast r o de t r a nspor t a dor as - > SA4 ( e xcl usi vo)

o Consul t a a i nf or maes de t a bel as d e movi me nt os de v e m ut ili z ar a fi li al da
t a bel a a ser consul t a da , poi s a pesar das movi me nt aes de u m mdul o
segui r e m u m det er mi na do pa dr o, a consul t a pode ser r e al i z a da e nt r e t a bel as
de mdul os di st i nt os, o que poderi a ger a r u m r et or no i ncor r et o base a do nas
di f er e nt es par a met ri z aes d est es a mbi e nt es.

Exemplos:

Cont as a pa ga r - > SE2 ( compar t i l h a do)
Movi me nt os cont bei s - > CT2 ( e xcl usi vo)
Pedi dos de compr as - > SC7 ( compa r t il h a do)
I t e ns da not a fi scal de e nt r a da - > SD1 ( e xcl usi vo)

E Na defi ni o da r egr a de r et or no d e v e ser consi der a do o t i po do ca mpo que ser
a t u ali z a do, poi s est e ca mpo que d et er mi n a qu al ti po do r et or no ser consi der a do
v li do par a o ga t il ho.


- 139 -

ADVPL Completo



12.3. Customizao de parmetros Configurador

Os par met r os d e si st e ma ut ili z a dos pel a apli cao ERP e defi ni dos a t r a v s do mdul o
confi gur a dor possue m as segui nt es car act er st i cas f unda me nt ai s :

E Ti po do par met r o : de f or ma si mil ar a u ma v ari v el , u m par met ro t er u m ti po de
cont e do pr - defi ni do e m se u ca dast ro.
Est a i nf or mao ut ili z a da pel as f unes da a pli cao ERP n a i nt er pr et a o do
cont e do do par met r o e r et or no dest a i nf or mao a r ot i n a que o consul t ou.

E I nt er pr et a o do cont e do do par met r o : di v ersos par met r os do si st e ma t m se u
cont e do macr o e x ecut a do dur a nt e a e x ecuo de u ma r ot i n a do ERP. Est es
par met ros macr o e x ecut v ei s t e m como nica ca r act er st i ca e m comu m se u t i po :
car act er e , mas no e xi st e ne nhu m i de nti fi ca dor e x pl i ci t o que per mi t e a f ci l
vi su ali z ao de qu ai s par met ros possu e m u m r et or no si mpl es e de qu ai s par met ros
t er o se u cont e do macro e x ecut a do par a det er mi nar o r et or no r e al .

A ni ca f or ma efi ca z de a v al i ar como u m par met ro t r a t a do ( si mpl es r et or no ou
macr o e x ecu o) a t r a v s do cdi go f ont e da rot i n a , no qual de v er ser a v al i a do como
t r a t a do o r et or no de u ma dest as f unes :

o GETMV( )
o SUPERGETMV( )
o GETNEWPAR( )

Um r et or no macr o e x ecut a do d et er mi n a do a t r a v s do uso do oper a dor & ou d e u ma
das f unes d e e x ecu o d e bl ocos d e cdi go e m conj unt o com u ma d as f unes ci t a das
a nt eri or me nt e.

12.3.1. Funes para manipulao de parmetros

A a pli cao ERP di sponi bili z a as segui nt es f unes par a consul t a e a t u ali z ao de par met ros :

GETMV( )
SUPERGETMV( )
GETNEWPAR( )
PUTMV( )

GETMV( )

Sintaxe GETMV(cParametro)
Descrio
Ret or n a o cont e do do par met ro esp eci fi ca do no ar qui vo SX6, consi der a ndo
a fili al par a met ri z a da na con e x o. Caso o pa r met r o n o e xi st a ser e xi bi do
u m hel p do si st e ma i nf or ma ndo a ocorr nci a .


- 140 -

ADVPL Completo



GETNEWPAR( )

Sintaxe GETNEWPAR(cParametro, cPadrao, cFilial)
Descrio
Ret or n a o cont e do do par met ro esp eci fi ca do no ar qui vo SX6, consi der a ndo
a fili al par a met ri z a da na con e x o. Caso o pa r met r o n o e xi st a ser e xi bi do
u m hel p do si st e ma i nf or ma ndo a ocorr nci a .

Di f er e do Super Get MV( ) poi s consi der a que o p ar met ro pode n o e xi st i r n a
v ers o a t ual do si st e ma , e por conseq nci a n o ser e xi bi da a me nsa ge m
de hel p.

PUTMV( )

Sintaxe PUTMV(cParametro, cConteudo)
Descrio
At uali z a o cont e do do par met ro esp eci fi ca do no ar qui vo SX6, de acor do
com as pa r a met ri z aes i nf or ma das.


SUPERGETMV( )

Sintaxe SUPERGETMV(cParametro , lHelp , cPadrao , cFilial)
Descrio
Ret or n a o cont e do do par met ro esp eci fi ca do no ar qui vo SX6, consi der a ndo
a fili al par a met ri z a da na con e x o. Caso o pa r met r o n o e xi st a ser e xi bi do
u m hel p do si st e ma i nf or ma ndo a ocorr nci a .

Di f er e do Get Mv( ) poi s os par met ros consul t ados s o a di ci on a dos e m u ma
r e a de me mri a , que per mi t e que e m u ma nov a consul t a no sej a
necess ri o acessar e p esqui sar o pa r met ro n a base d e da dos.


12.3.2. Cuidados na utilizao de um parmetro

Um par met ro d e si st e ma t e m a fi n ali da de de pr opi ci ar u m r et or no v li do a u m cont e do
pr e vi a me nt e d efi ni do na confi gur ao do mdul o par a u ma rot i n a , processo ou qu ai squer
out ros t i pos d e f unci on ali da des di spon v ei s n a a pli cao.

Apesa r de h a v er par met r os que p er mi t a m a confi gur ao de e x pr esses, e por conseq nci a
a utili z ao de f unes par a defi ni r o r et or no que ser obt i do co m a consul t a dest e par met ro,
expressamente proibido o uso de funes em parmetros para manipular
informaes da base de dados do sistema.

Caso h a j a a n ecessi da de d e ser i mpl e me nt a do u m t r a t a me nt o a di ci on al a u m processo pa dr o
do si st e ma , o mesmo d e v er ut ili z ar o r ecurso de pont o de e nt r a da .

A r a z o dest a r est ri o si mpl es :

E As r ot i nas da a pli cao ERP n o prot ege m a consul t a de cont e dos de pa r met r os
qu a nt o a gr a v aes r e al i z a das de nt ro ou f or a d e u ma t r a nsao.

E Dest a f or ma , quai squer al t er ao n a base r e al i z a da por u ma r ot i n a confi gur a da e m u m
par met ro pod e ocasi on ar a p er da da i nt egri da de das i nf or maes do si st e ma .

- 141 -

ADVPL Completo



12.4. Pontos de Entrada Conceitos, Premissas e Regras

Conceitos

Um pont o de e nt r a da u ma User F unct i on dese nvol vi da com a fi n ali da de de i nt er a gi r com u ma
rot i n a pa dr o da a pli cao ERP.

A User F unct i on de v er t er u m nome pr - est a bel eci do no dese nv ol vi me nt o da rot i na pa dr o do
ERP, e de acor do est a pr - di sposi o e o mo me nt o no qu al o pont o de e nt r a da e x ecut a do
dur a nt e u m pr ocessa me nt o, el e poder :

E Compl e me nt ar u ma v al i dao r e ali z a da pel a a pli cao ;

E Compl e me nt ar as a t ual i z aes r e al i z a das pel o processa me nt o e m t a b el as pa dres do
ERP;

E I mpl e me nt ar a a t uali z ao de t a bel as esp eci ficas dur a nt e o pr ocessa me nt o de u ma
rot i n a pa dr o do ERP;

E Ex ecut ar u ma ao se m processos d e a t u ali z aes, mas que necessi t e ut ili z ar as
i nf or maes a t uai s do a mbi e nt e dur a nt e o processa me nt o da rot i n a pa dr o par a
det er mi n ar as ca r act er st i cas do pr ocesso ;

E Subst i t ui r u m processa me nt o pa dr o do si st e ma por u ma r egr a esp ec fi ca do cl i e nt e no
qu al o mesmo ser i mpl e me nt a do.


Premissas e Regras

E Um pont o de e nt r a da n o de v e ser ut ili z a do par a out r as fi n ali da des se n o par a as qu ai s
o mesmo f oi pr - defi ni do, sob p e n a de ca usar a per da da i nt egri da de das i nf or maes
da base de da dos ou pr ovoca r e v e nt os d e er r o dur a nt e a e x ecu o da r ot i n a pa dr o.

E Um pont o de e nt r a da de v e ser t r a nspar e nt e par a o pr ocesso pa dr o, d e f or ma qu e
t odas as t a bel as acessa das pel o pont o de e nt r a da e que sej a m ut ili z a das pel a rot i n a
pa dr o, de v er o t er su a si t u ao i medi a t a me nt e a nt eri or e x ecuo do pont o
r est a ur a da ao t r mi no do mesmo, e par a i st o r ecome nda - se o uso das f unes
GETAREA( ) e RESTAREA( ) .

E Como u m pont o d e e nt r a da no e x ecut a do da f or ma t r a di ci onal , ou sej a , el e n o
cha ma do como u ma f uno, el e no r eceb e p ar met ros. A a pli cao ERP di sponi bili z a
u ma v ari v el de si st e ma de nomi n a da PARAMI XB, a qu al r ecebe os pa r met r os da
f uno ch a ma dor a e os di sponi bili z a par a ser e m ut ili z a dos pel a rot i n a cust omi z a da .

E A v ari v el PARAMI XB no possui u m pa dr o d e d efi ni o nos cdi gos f ont es da
a pli cao ERP, d est a f or ma se u t i po pode v a ri ar dest e u m cont e do si mpl es ( car act er e,
nu mri co, l gi co e et c. ) a u m t i po compl e xo co mo u m a r r a y ou u m obj et o. Dest a f or ma
necess ri o se mpr e a v ali ar a docu me nt ao sobr e o pont o b e m como prot eg er a
f uno cust omi z a da de t i pos de PARAMI XB n o t r a t a dos por el a .


- 142 -

ADVPL Completo



13. Interfaces visuais

A li ngua ge m ADVPL possui duas f or mas di st i nt as par a defi ni o de i nt erf aces vi su ai s no
a mbi e nt e ERP: si nt a x e conv e nci on al , nos pa dr es da l i ngu a ge m CLI PPER e a si nt a x e ori e nt a da
a obj et os.

Al m das di f er e nt es si nt a x es di spon v ei s par a defi ni o das i nt erf aces vi su ai s o ERP Prot he us
possui f unci on ali da des pr - d efi ni das, as qu ai s j cont m t odos os t r a t a me nt os n ecessri os a
a t e nder as n ecessi da des bsi cas d e acesso e ma nut e no das i nf or maes do si st e ma .

Nest e t pi co ser o a bor da das as si nt a x es conv e nci onai s par a defi ni o das i nt erf aces vi suais
da li ngua ge m ADVPL e as i nt erf aces de ma nut e no di spon v ei s no a mbi e nt e ERP Pr ot he us.


13.1. Sintaxe e componentes das interfaces visuais

A si nt a x e conv e nci onal par a defi ni o de compone nt es vi su ai s da li ngu a ge m ADVPL de p e nde
di r et a me nt e no i ncl ude esp eci fi ca do no ca beal ho do f ont e. Os doi s i ncl udes di spon v ei s par a o
a mbi e nt e ADVPL Pr ot he us s o :

E RWMAKE. CH: p er mi t e a utili z ao da si nt a x e CLI PPER n a defi ni o dos compon e nt es
vi su ai s.

E PROTHEUS. CH: per mi t e a utili z ao da si nt a x e ADVPL conv e nci onal , a qu al u m
a pri mor a me nt o da si nt a x e CLI PPER, com a i ncl uso de novos a t ri but os par a os
compone nt es vi su ai s di sponi bili z a dos no ERP Pr ot he us.

Par a il ust r ar a di f er e na n a utili z ao dest es doi s i ncl udes, segue a bai xo as di f er e nt es
defi ni es par a o co mpone nt es Di al og e MsDi al og :

Exemplo 01 Include Rwmake.ch

# i ncl ude r wma k e. ch

@ 0, 0 TO 400, 600 DI ALOG oDl g TI TLE " Ja nel a e m si nt a x e Cl i pper "
ACTI VATE DI ALOG oDl g CENTERED


Exemplo 02 Include Protheus.ch

# i ncl ude prot he us. ch

DEF I NE MSDI ALOG oDl g TI TLE " Ja nel a e m si nt a x e ADVPL " FROM 000, 0 00 TO 400, 600 PI XEL
ACTI VATE MSDI ALOG oDl g CENTERED



Ambas as si nt a x es produzi r o o mesmo ef ei t o qu a ndo compi l a das e
e x ecut a das no a mbi e nt e Pr ot he us, mas d e v e ser ut ili z ada se mpr e a si nt a x e
ADVPL a t r a v s do uso do i ncl ude PROTHEUS. CH




- 143 -

ADVPL Completo


Os compon e nt es da i nt erf ace vi su al que ser o t r a t a dos nest e t pico, ut ili z a ndo a si nt a x e
ADVPL so :

MSDIALOG( )
MSGET( )
SAY( )
BUTTON( )
SBUTTON( )

BUTTON( )

Sintaxe
@ nLinha,nColuna BUTTON cTexto SIZE nLargura,nAltura UNIDADE
OF oObjetoRef ACTION AO
Descrio
Defi ne o compon e nt e vi sual But t on, o qu al per mi t e a i ncl uso de bot es d e
oper a o n a t el a da i nt erf ace, os qu ai s ser o vi su ali z a dos some nt e com u m
t e xt o si mpl es par a su a i de nt i fi cao.

MSDIALOG( )

Sintaxe
DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni
TO nLiFim,nColFim OF oObjetoRef UNIDADE
Descrio
Defi ne o compon e nt e MSDI ALOG( ) , o qual ut ili z a do como base par a os
de mai s compone nt es da i nt erf ace vi sual , poi s u m compone nt e MSDI ALOG( )
u ma j a nel a da a pli cao.

MSGET( )

Sintaxe
@ nLinha, nColuna MSGET VARIAVEL SIZE nLargura,nAltura
UNIDADE OF oObjetoRef F3 cF3 VALID VALID WHEN WHEN PICTURE
cPicture
Descrio
Defi ne o compon e nt e vi su al MSGET, o qual ut ili z a do par a ca pt ur a d e
i nf or maes di gi t v ei s na t el a da i nt erf ace .

SAY( )

Sintaxe
@ nLinha, nColuna SAY cTexto SIZE nLargura,nAltura UNIDADE OF
oObjetoRef
Descrio
Defi ne o compon e nt e vi su al SAY, o qu al ut ili z a do par a e xi bi o de t e xt os
e m u ma t el a de i nt erf ace.

SBUTTON( )

Sintaxe
DEFINE SBUTTON FROM nLinha, nColuna TYPE N ACTION AO
STATUS OF oObjetoRet
Descrio
Defi ne o compon e nt e vi sual SBut t on, o qual per mi t e a i ncl uso de bot es d e
oper a o n a t el a da i nt erf ace, os qu ai s ser o vi su ali z a dos dep e nde ndo d a
i nt erf ace do si st e ma ERP ut ili z a da some nt e com u m t e xt o si mpl es par a sua
i de nti fi cao, ou com u ma i ma ge m ( Bi t Ma p) pr - defi ni do.




- 144 -

ADVPL Completo


Interface visual completa

Abai xo segue u m cdi go compl et o de i nt erf ace, utili z a do t odos os el e me nt os da i nt erf ace vi su al
descri t os a nt eri or me nt e :


DEF I NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 000, 000 TO 080, 300 PI XEL

@ 001, 001 TO 040, 150 OF oDl g PI XEL

@ 010, 010 SAY cTe xt o SI Z E 55, 07 OF oDl g PI XEL

@ 010, 050 MSGET cCGC SI Z E 55, 11 OF oDl g PI XEL PI CTURE " @R 99. 999. 999 / 9999- 99 " ;
VALI D !Va zi o( )

DEF I NE SBUTT ON FROM 010, 120 TYPE 1 ACTI ON ( n Opca : = 1, oDl g : End( ) ) ;
ENABLE OF oDl g

DEF I NE SBUTT ON FROM 020, 120 TYPE 2 ACTI ON ( n Opca : = 2, oDl g : End( ) ) ;
ENABLE OF oDl g

ACTI VATE MSDI ALOG oDl g CENTERED




O cdi go de monst r a do a nt eri or me nt e ut ili z a dos nos e x erc ci os de fi x ao
dest e ma t eri al e de v er produzi r a segui nt e i nt erf ace :







- 145 -

ADVPL Completo



13.2. Interfaces padres para atualizaes de dados

Os pr ogr a mas de a t u ali z ao de ca dast ros e di gi t ao de movi me nt os segue m u m pa dr o que
se a pi a no Di ci onri o de Da dos.

Basi ca me nt e so du as as i nt erf aces quer p er mi t e m a vi su ali z ao das i nf or maes e a
ma ni pul ao dos da dos do si st e ma .

E AxCadastro
E Mbrowse

Ambos os model os ut ili z a m como pr e mi ssa que a est r ut ur a da t a bel a a ser ut ili z a da est ej a
defi ni da no di ci on ri o de da dos do si st e ma ( SX3) .

13.2.1. AxCadastro( )

O Ax Ca dast r o( ) u ma f unci on ali da de de ca dast ro si mpl es, com poucas opes d e
cust omi z ao, a qu al compost a d e :

Browse pa dr o par a vi suali z ao das i nf or maes da base de da dos, de acor do com as
confi gur aes do SX3 Di ci on ri o de Da dos ( ca mpo br owse) .

F unes de pesqui sa , vi suali z ao, i ncl uso, al t er a o e e xcl uso pa dr es pa r a
vi su ali z ao de r egi st r os si mpl es, se m a op o de ca b eal ho e i t e ns.

E Sintaxe: AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt)

E Parmetros

cAlias
Ali as pa dr o do si st e ma par a ut i li z ao, o qu al de v e est ar defi ni do no
di ci onri o de da dos SX3.
cTitulo T t ul o da Ja nel a
cVldExc Vali dao par a Excl uso
cVldAlt Vali dao par a Al t er a o

Exemplo:

# i ncl ude " prot he us. ch "

User F unct i on XCa dSA2( )

Local cAl i as : = " SA2 "
Local cTi t ul o : = " Ca dast ro d e F or n ecedor es "
Local cVl dExc : = " . T. "
Local cVl dAl t : = " . T. "

dbSel ect Ar e a ( cAli as)
dbSet Or d er ( 1)
Ax Ca dast r o( cAl i as, cTi t ul o, cVl dExc, cVl dAl t )
Ret ur n



- 146 -

ADVPL Completo














13.2.2. MBrowse( )

A Mbrowse( ) u ma f unci on ali da de de ca dast ro que per mi t e a utili z ao de r ecursos mai s
a pri mor a dos n a vi su ali z ao e ma ni pul ao das i nf or maes do si st e ma , possui ndo os
segui nt es compone nt es :

Browse pa dr o par a vi su ali z ao das i nf or maes da base de da dos, de acor do com as
confi gur aes do SX3 Di ci on ri o de Da dos ( ca mpo br owse) .

Par a met ri z ao par a f unes esp ec fi cas par a as aes de vi su ali z ao, i ncl uso,
al t er ao e e xcl uso d e i nf or maes, o que vi a bili z a a ma nut e no de i nf or maes com
est r ut ur a de ca b eal hos e i t e ns.

Recursos a di ci onai s como i de nti fi ca dor es de st a t us de r egi st ros, l ege ndas e fil t ros par a
as i nf or maes.

E Sintaxe simplificada: MBrowse(nLin1, nCol1, nLin2, nCol2, cAlias)

E Parmetros

nLin1, nCol1,
nLin2, nCol2
Coor de n a das dos ca nt os aonde o browse ser e xi bi do. Par a segui r o
pa dr o da AXCADASTRO( ) use 6, 1, 22, 75 .
cAlias
Ali as pa dr o do si st e ma par a ut i li z ao, o qu al de v e est ar defi ni do no
di ci onri o de da dos SX3.


- 147 -

ADVPL Completo



E Variveis private adicionais

aRotina

Arr a y cont e ndo as f unes qu e ser o e x ecut a das pel a Mbr owse.
Est e a rr a y pod e ser pa r a met ri z a dos com as f unes bsi cas da
Ax Ca dast r o conf or me a bai xo :

AADD( aRot i n a , { " Pesqui sar " , " AxPesqui " , 0, 1 } )
AADD( aRot i n a , { " Vi su ali z ar " , " Ax Vi su al " , 0, 2 } )
AADD( aRot i n a , { " I ncl ui r " , " Ax I ncl ui " , 0, 3 } )
AADD( aRot i n a , { " Al t er ar " , " Ax Al t er a " , 0, 4 } )
AADD( aRot i n a , { " Excl ui r " , " Ax Del et a " , 0, 5 } )


cCadastro T t ul o do browse que ser e xi bi do.

Exemplo:

# i ncl ude " prot he us. ch "

User F unct i on MBr wSA2( )

Local cAl i as : = " SA2 "
Pri v a t e cCa dast r o : = " Ca dast ro de For necedor es "
Pri v a t e aRot i na : = { }

AADD( aRot i n a , { " Pesqui sar " , " AxPesqui " , 0, 1 } )
AADD( aRot i na , { " Vi su ali z ar " , " Ax Vi su al " , 0, 2 } )
AADD( aRot i n a , { " I ncl ui r " , " Ax I ncl ui " , 0, 3 } )
AADD( aRot i n a , { " Al t er ar " , " Ax Al t er a " , 0, 4 } )
AADD( aRot i n a , { " Excl ui r " , " Ax Del et a " , 0, 5 } )

dbSel ect Ar e a ( cAli as)
dbSet Or d er ( 1)
mBrowse( 6, 1, 22, 75, cAl i as)
Ret ur n



- 148 -

ADVPL Completo













1. Ut ili z a ndo a par a met ri z ao e x e mpli fi ca da , o ef ei t o obt i do com o uso
da Mbr owse ( ) ser o mesmo obt i do com o uso da Ax Ca dast ro( ) .

2. A posi o das f unes no arr a y aRot i n a defi ne o cont e do d e u ma
v ari v el de cont rol e que ser r epassa da par a as f unes ch a ma das a
par t i r da Mbrowse, conv e nci on a da como n Opc. Dest a f or ma , par a
ma nt er o pa dr o da a pli cao ERP a or d e m a ser segui da n a defi ni o
do aRot i na ;

1 Pesqui sar
2 Vi suali z ar
3 I ncl ui r
4 Al t er ar
5 Excl ui r
6 Li vr e



Ao d efi ni r as f unes no a rr a y aRot i n a , se o nome da f un o n o f or
esp eci fi ca do com ( ) , a Mbrowse passa r como par met ros as se gui nt es
v ari v ei s de cont r ol e :

cAlias: Al i as a ti vo defi ni do par a a Mbrowse
nRecno: Recor d nu mber ( r ecno) do r egi st r o posi ci on a do no ali as
a t i vo.
nOpc: Posi o da op o ut ili z a da n a Mbrowse de acor do com a or d e m
da f uno no a rr a y a Rot i na .




- 149 -

ADVPL Completo



Exemplo: Funo BInclui( ) substituindo a funo AxInclui( )

# i ncl ude " prot he us. ch "

User F unct i on MBr wSA2( )

Local cAl i as : = " SA2 "

Pri v a t e cCa dast r o : = " Ca dast ro de For necedor es "
Pri v a t e aRot i na : = { }

AADD( aRot i n a , { " Pesqui sar " , " AxPesqui " , 0, 1 } )
AADD( aRot i na , { " Vi su ali z ar " , " Ax Vi su al " , 0, 2 } )
AADD( aRot i n a , { " I ncl ui r " , " U_BI ncl ui " , 0, 3 } )
AADD( aRot i n a , { " Al t er ar " , " Ax Al t er a " , 0, 4 } )
AADD( aRot i n a , { " Excl ui r " , " Ax Del et a " , 0, 5 } )

dbSel ect Ar e a ( cAli as)
dbSet Or d er ( 1)
mBrowse( 6, 1, 22, 75, cAl i as)
Ret ur n

USER FUNCTI ON BI ncl ui ( cAli as, nReg, n Opc)

Local cTudoOk : = " ( Al er t (' OK') , . T. ) "
Ax I ncl ui ( cAli as, nReg, n Opc, , , , cTudoOk)

RETURN

















- 150 -

ADVPL Completo



13.2.3. AxFunctions( )

Conf or me me nci on a do nos t pi cos sobr e as i nt erf aces pa dres Ax Ca dast ro( ) e Mbr owse( ) ,
e xi st e m f unes pa dr es da a pli cao ERP que per mi t e m a vi su ali z ao, i ncl uso, al t er ao e
e xcl uso d e da dos e m f or ma t o si mpl es.

Est as f unes s o pa dres na defi ni o da i nt erf ace Ax Ca dast ro( ) e pod e m ser ut i li z a das
t a mb m da const r u o no a rr a y aRot i n a ut ili z a do pel a Mbr owse( ) , as quai s est o l i st a das a
segui r :

AXPESQUI ( )
AXVISUAL( )
AXINCLUI ( )
AXALTERA( )
AXDELETA( )

AXALTERA( )

Sintaxe
AxAltera(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
F uno de al t er a o pa dr o das i nf or maes d e u m r egi st ro, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXDELETA( )

Sintaxe
AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,;
aAuto, lMaximized)
Descrio
F uno de e xcl uso pa dr o das i nf or maes de u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXINCLUI ( )

Sintaxe
AxInclui(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
F uno de i ncl uso pa dr o das i nf or maes d e u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXPESQUI ( )

Sintaxe AXPESQUI ( )
Descrio
F uno de pesqui sa pa dr o e m r egi st ros e xi bi dos pel os br owses do si st e ma ,
a qu al posi ci on a o br owse no r egi st ro pesqui sa do. Exi be u ma t el a que
per mi t e a sel e o do ndi ce a ser ut i li z a do n a pesqui sa e a di gi t ao das
i nf or maes que compe a cha v e de busca .


- 151 -

ADVPL Completo



AXVISUAL( )

Sintaxe
AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,;
aButtons, lMaximized )
Descrio
F uno de vi su ali z ao pa dr o das i nf or maes de u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .


- 152 -

ADVPL Completo



APNDICES

BOAS PRTICAS DE PROGRAMAO

14. Utilizao de Identao

obri ga t ri a a ut ili z ao da i de nt ao, poi s t or n a o cdi go mui t o mai s l eg v el . Vej a os
e x e mpl os a bai xo :


A utili z ao da i de nt ao segui ndo as est r ut ur as de cont rol e de fl uxo ( whil e, i f , caso et c) t or na
a compr e e ns o do cdi go mui t o mai s f cil :



Par a i de nt ar o cdi go utili z e a t ecl a < TAB > e n a f err a me nt a DEV- St udi o, a qu al pode ser
confi gur a da a t r a v s da op o Pr ef er nci as :


- 153 -

ADVPL Completo




15. Capitulao de Palavras-Chave

Uma conv e n o a mpl a me nt e ut i li z a da a de ca pi t ul ar as pal a vr as ch a v es, f unes, v ari v ei s e
ca mpos ut ili z a ndo u ma combi n ao d e ca r act er es e m mai scul o e mi nscul o, vi sa ndo f acili t ar
a l ei t ur a do cdi go f ont e . O cdi go a s egui r :

local ncnt while ( ncnt+ + < 10 ) ntotal + = ncnt * 2 enddo

Fi cari a mel hor com as p al a vr as ch a v es e v ari v ei s ca pi t ul a das :

Local nCnt While ( nCnt+ + < 10 ) nTotal + = nCnt * 2 EndDo



Par a f unes d e ma ni pul ao de da dos qu e comece m por db, a ca pi t ul ao
s ser ef et u a da a ps o db :

E dbSeek( )
E dbSelectArea( )








- 154 -

ADVPL Completo



15.1. Palavras em maisculo

A r egr a ut i li z ar car act er es e m mai scul o par a :

E Constantes:
# defi ne NUMLI NES 60 # defi ne NUMPAGES 100 0

E Variveis de memria:
M- > CT2_CRC ONV M- > CT2_MC ONVER : = Cri a Var ( " CT2_C ONVER" )

E Campos:
SC6- > C6_NUMPED

E Querys:
SELECT * FROM. . .


16. Utilizao da Notao Hngara

A not ao hngar a consi st e e m a di ci on ar os pr efi xos a os nomes d e v ari v ei s, de modo a
f aci l me nt e se i de nti fi car se u t i po. I st o f acili t a n a cri ao de cdi gos- f ont e e xt e nsos, poi s
usa ndo a Not a o Hngar a , v oc n o pr eci sa fi car o t e mpo t odo vol t a ndo defi ni o de u ma
v ari v el par a se l e mbr a r qu al o t i po de da dos que d e v e ser col oca do nel a . Vari v ei s de v e m
t er u m pr efi xo d e Not ao Hngar a e m mi nscul as, segui do de u m nome que i de nt i fi que a
f uno da v ari v el , se ndo que a i ni ci al de ca da pal a vr a de v e ser mai scul a .
obri ga t ri a a ut ili z ao dest a not ao par a no me ar v a ri v ei s.
Notao Tipo de dado Exemplo
a Arr a y a Val or es
b Bl oco de cdi go bSe e k
c Car act er cNome
d Da t a dDa t a Base
l Lgi co l Conti nu a
n Nu mri co nVal or
o Obj et o oMai n Wi ndow
x I ndefi ni do x Cont e udo







- 155 -

ADVPL Completo



17. Palavras reservadas

AADD DTOS I NKEY REPLI CATE VAL
ABS ELSE I NT RLOCK VALTYPE
ASC ELSEI F LASTREC ROUND WHI LE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRI M YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDI F LOWER SELECT CHR E OF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL F COUNT MI N SQRT
CTOD F I ELDNAME MONTH STR DATE
F I LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED F OUND PROCEDURE
TRANSF ORM DEVPOS FUNCTI ON PROW TRI M
DOW I F RECCOUNT TYPE DT OC
I I F RECNO UPPER TRY AS
CATCH THROW




E Pal a vr as r eser v a das n o pod e m ser ut i li z a das par a v ari v ei s,
procedi me nt os ou f unes ;

E F unes r eser v a das s o per t e nce nt es ao compi l a dor e no pod e m ser
r ed efi ni das por u ma a plica o ;

E Todos os i de nt i fi ca dor es que comea r e m com doi s ou mai s car act er es
_ s o ut ili z a dos como i de nti fi ca dor es i nt er nos e s o r eser v a dos.

E I d e nt i fi ca dor es de escopo PRI VATE ou PUBLI C utili z a dos e m a pli caes
esp ec fi cas dese nvol vi da por ou par a cli e nt es d e v e m t er su a
i de nti fi cao i ni ci a da por u m ca r act er e _.




- 156 -

ADVPL Completo



LISTAS DE EXERCCIOS

Mdulo 01: Introduo programao





01
Apri mor ar os segui nt es al gori t mos descri t os na a post i l a :

E Usar t el ef on e pbli co car t o
E Fri t ar u m ov o
E Masca r u m chi cl et e
E Tr oca r l mpa das
E Descascar ba t a t as
E Jogar o Jogo da Forca





02
Mont ar os di a gr a mas de bl ocos par a os al gori t mos dese nv ol vi dos no e x erc ci o
a nt eri or :

E Usar t el ef on e pbli co car t o
E Fri t ar u m ov o
E Masca r u m chi cl et e
E Tr oca r l mpa das
E Descascar ba t a t as
E Jogar o Jogo da Forca




- 157 -

ADVPL Completo



Mdulo 02: A linguagem ADVPL



01

Dese nv ol v er u m pr ogr a ma que i mpl e me nt e o al gori t mo de descasca r b a t a t as,
utili z a ndo a est r ut ur a de r epet i o Whi l e, de monst r a ndo qua nt as ba t a t as
f or a m descasca das :



02

Dese nv ol v er u m pr ogr a ma que i mpl e me nt e o al gori t mo de descasca r b a t a t as,
utili z a ndo a est r ut ur a d e r ep et i o F OR, d e monst r a ndo qu a nt as ba t a t as f or a m
descasca das :



03

Dese nv ol v er u m pr ogr a ma que i mpl e me nt e o al gori t mo de descasca r b a t a t as,
utili z a ndo a est r ut ur a de r ep et i o F OR, de monst r a ndo qu a nt as ba t a t as f al t a m
par a ser e m descasca das :


- 158 -

ADVPL Completo



04 Dese nv ol v er u m progr a ma que i mpl e me nt e o al gori t mo do Jogo da F orca :



05 Dese nv ol v er u m progr a ma que i mpl e me nt e o al gori t mo do Jogo da Vel ha :



06
Dese nv ol v er u m pr ogr a ma que p er mi t a ao usuri o pesqui sar u m cl i e nt e
i nf or ma ndo se u CNPJ e caso o mesmo e xi st a n a base, e xi bi r suas pri nci pai s
i nf or maes.


07
Ut ili z a ndo a i nt erf ace vi su al dese nv ol vi da par a o e x erc ci o a nt eri or,
dese nvol v er a f uno ge nri ca Get Te xt o( ) , par a ser ut ili z a da n as a pli caes do
Jogo da Vel ha e Jogo da Forca .


- 159 -

ADVPL Completo



08
Ut ili z a ndo a f uno AVI SO( ) dese n vol v er u m pr ogr a ma que per mi t a ao usu ri o
sel eci on ar a opo de busca d e CNPJ por cli e nt e ou f or necedor, e caso
e ncont r e e xi ba se us da dos pri nci pai s.

09
Dese nv ol v er u ma r ot i na que ca pt ur e v ri os CNPJs de cl i e nt es i nf or ma dos p el o
usu ri o, e v eri fi que par a ca da u m del es se o mesmo e xi st e ou n o n a base de
da dos. Ao fi n al i nf or mar qu ai s CNPJs f or a m i nf or ma dos, e de acor do com a
sel e o do usu ri o, e xi bi r os da dos pri nci pai s de u m dest es cl i e nt es.

10
Ut ili z a ndo a f uno F ORMBATCH( ) dese nv ol v er u ma rot i n a que v eri fi que se
par a ca da i t e m de u m not a fi scal de e nt r a da e xi st e o r esp ect i vo ca beal ho, e
caso sej a e ncont r a do al gu m i t e m i nconsi st e nt e, co muni que est a ocor r nci a ao
usu ri o que est r e al i z a ndo o processa me nt o.

11
Dese nv ol v er u ma rot i n a que, a t r a v s do uso de u m bl oco de cdi go, conv er t a
a est r ut ur a da t a bel a SA1 obt i da com a f uno DBSTRUCT( ) e m u ma st ri ng
de nomi n a da cCa mpo.


- 160 -

ADVPL Completo



Mdulo 03: Desenvolvendo pequenas customizaes



01
Dese nv ol v er u ma v al i dao pa r a u m ca mpo espec fi co do t i po car act er e , cuj o
cont e do est ej a r el aci on a do a out r a t a bel a , e que e xi ba u ma me nsa ge m de
a vi so caso o cdi go i nf or ma do n o e xi st a nest a t a bel a r el aci on a da .


02
Dese nv ol v er u ma v ali dao par a u m ca mpo ca r act er e e xi st e nt e n a base, par a
que sej a a v al i a do se a quel e cdi go j e xi st e ca dast r a do, e caso posi t i vo e xi ba
u ma me nsa g e m d e a vi so al er t a ndo d est a ocorr nci a .



03
Dese nv ol v er u m ga t il ho que r et or ne u ma d escri o compl e me nt a r par a u m
ca mpo vi ncul a do ao ca mpo cdi go ut ili z a do nos e x erc ci os a nt eri or es.




- 161 -

ADVPL Completo



04
Cust omi z ar o par met r o que d efi ne o pr efi xo do t t ul o de cont as a pa gar
ger a do pel a i nt egr ao COMPRAS - > F I NANCEI RO a t r a v s da i ncl uso de u ma
not a fi scal de e nt r a da , de f or ma que o pr efi x o do t t ul o sej a ger a do com o
cdi go da fi li al corr e nt e.


05
Prot eger a r ot i n a dese n vol vi da no e x erc ci o a nt eri or , de f or ma a ga r a nt i r que
na utili z ao da fi li al como pr efi xo do t t ul o n o i r ocorr er dupli ci da de de
da dos no cont as a pa gar do fi n a ncei ro.




06
I mpl e me nt ar u ma v al i dao a di ci on al no ca dast ro de cl i e nt es, a t r a v s do
pont o de e nt r a da a d e qua do, de f or ma que o ca mpo CNPJ ( A1_CGC) sej a
obri ga t ri o par a t odos os t i pos de cl i e nt e, e xcet o os d efi ni dos como Ext eri or .














- 162 -

ADVPL Completo


MDULO 04: Desenvolvendo aplicaes em ADVPL

18. A linguagem ADVPL

A Li ngu a ge m ADVPL t e v e se u i n ci o e m 1994, se ndo na v er da d e u ma e vol uo n a ut i li z ao de
li ngua ge ns no pa dr o x Base pel a Mi crosi ga Sof t wa r e S. A. ( Cl i pper, Vi su al Obj ect s e d epoi s
Fi v e Wi n) . Com a cri ao da t ecnol ogi a Prot he us, er a necess ri o cri ar u ma li ngu a ge m que
supor t asse o pa dr o x Base pa r a a ma nut e no de t odo o cdi go e xi st e nt e do si st e ma de ERP
Si ga Adv a nced. Foi e nt o cri a da a li ngu a ge m cha ma da Adv a nced Pr ot he us La ngu a ge.

O ADVPL u ma e xt e nso do pa dr o x Base de coma ndos e f unes, oper a dor es, est r ut ur as d e
cont r ol e de fl uxo e pal a vr as r eser v a das, cont a ndo t a mb m co m f unes e coma ndos
di sponi bili z a dos pel a Mi crosi ga que a t or n a u ma li ngu a ge m compl et a par a a cri ao d e
a pli caes ERP pront as par a a I nt er net . Ta mb m u ma l i ngu a ge m ori e nt a da a obj et os e
e v e nt os, p er mi t i ndo a o progr a ma dor d ese nv ol v er a pli caes vi suais e cri ar su as prpri as
cl asses de obj et os.

Qu a ndo compi l a dos, t odos os ar qui vos d e cdi go t or na m- se uni da des de i nt eli g nci a bsi cas,
cha ma dos APO s ( d e Adv a nced Prot he us Obj ect s) . Tai s APO s s o ma nt i dos e m u m
r eposi t ri o e car r ega dos di n a mi ca me nt e pel o PROTHEUS Ser v er par a a e x ecu o. Como n o
e xi st e a li nk edi o, ou uni o f si ca do cdi go compi l a do a u m det er mi n a do mdul o ou
a pli cao, f unes cri a das e m ADVPL pod e m ser e x ecut a das e m qual quer pont o do a mbi e nt e
Adv a nced Pr ot he us.

O compil a dor e o i nt er pr et a dor da li ngua ge m ADVPL o prpri o ser vi dor PROTHEUS
(PROTHEUS Ser v er ) , e e xi st e u m a mbi e nt e vi su al par a dese nvol vi me nt o i nt egr a do
(PROTHEUSI DE) onde o cdi go pod e ser cri a do, compi l a do e depur a do.

Os progr a mas e m ADVPL pod e m cont er coma ndos ou f unes de i nt erf ace com o usu ri o. De
acor do com t al car act er st i ca , t ai s progr a mas s o subdi vi di dos n as segui nt es ca t egori as :

Programao Com Interface Prpria com o Usurio

Nest a ca t egori a e nt r a m os pr ogr a mas d ese nvol vi dos par a ser e m e x ecut a dos a t r a v s do
t er mi n al r e mot o do Prot he us, o Pr ot he us Re mot e. O Pr ot he us Re mot e a a pli cao
e ncar r ega da da i nt erf ace e da i nt er a o com o usu ri o, se ndo que t odo o pr ocessa me nt o do
cdi go e m ADVPL, o acesso a o ba nco de da dos e o ger e nci a me nt o de cone xes ef et u a do no
Prot h e us Ser v er. O Pr ot he us Re mot e o pri nci pal mei o de acesso a e x ecuo de r ot i n as
escri t as e m ADVPL no Prot h e us Ser v er, e por i sso per mi t e e x ecut ar qu al quer t i po de cdi go,
t e nh a el e i nt erf ace com o usu ri o ou n o. Por m nest a ca t egori a so consi der a dos a p e n as os
progr a mas qu e r e al i z e m al gu m ti po de i nt erf ace r e mot a ut i li z a ndo o prot ocol o d e comuni cao
do Prot he us.

Pode m- se cri ar r ot i n as par a a cust omi z ao do si st e ma ERP Mi cr osi ga Prot he us, desde
processos a di ci on ai s a t mesmo r el a t ri os. A gr a nde v a nt a ge m a pr ov ei t ar t odo o a mbi e nt e
mont a do pel os mdul os do ERP Mi crosi ga Prot he us. Por m, com o ADVPL poss v el a t
mesmo cri ar t oda u ma a pli cao, ou mdul o, do comeo.

Todo o cdi go do si st e ma ERP Mi crosi ga Prot he us escri t o e m ADVPL.


- 163 -

ADVPL Completo



Programao Sem Interface Prpria com o Usurio

As rot i n as cri a das se m i nt erf ace so consi der a d as nest a ca t egori a por que ger al me nt e t m u ma
utili z ao mai s espec fi ca do que u m processo a di ci on al ou u m r el a t ri o nov o. Tai s rot i n as n o
t m i nt erf ace com o usu ri o a t r a v s do Pr ot he us Re mot e , e qu al quer t e nt a t i v a nesse se nt i do
( como a cri ao de u ma j a nel a pa dr o) ocasi on ar u ma e xceo e m t e mpo de e x ecu o. Est as
rot i n as so a p e n as processos, ou Jobs, e x ecut a dos no Pr ot he us Ser v er. Al gu mas v e z es, a
i nt erf ace dest as rot i n as fi ca a car go d e a pli caes e xt er n as, dese nvol vi das e m out r as
li ngua ge ns, que s o r espons v ei s por i ni ci ar os pr ocessos no ser vi dor Pr ot he us a t r a v s dos
mei os di spon v ei s de i nt egr ao e con ect i vi da de no Prot h e us.

De acor do com a ut ili z ao e com o mei o de conect i vi da de utili z a do, est as rot i n as so
subca t egori z a das assi m:

E Programao por Processos

Rot i n as escri t as e m ADVPL pode m ser i ni ci a das como pr ocessos i ndi vi du ai s ( se m i nt erf ace) no
Prot h e us Ser v er a t r a v s d e du as ma n ei r as : I ni ci a das por out r a r ot i n a ADVPL a t r a v s d a
cha ma da de f unes como St a r tJob( ) ou CallProc( ) ou i ni ci a das a ut oma t i ca me nt e na
i ni ci ali z ao do Pr ot he us Ser v er ( qu a ndo pr opri a me nt e confi gur a do) .

E Programao de RPC

At r a v s d e u ma bi bli ot eca d e f unes di spon v el no Prot he us ( u ma API de comuni cao) ,
pode m- se e x ecut ar r ot i n as escri t as e m ADVPL di r et a me nt e no Prot h e us Ser v er, a t r a v s de
a pli caes e xt er n as escri t as e m out r as l i ngu a ge ns. I st o o que se ch a ma de RPC ( d e Re mot e
Procedur e Call , ou Cha ma da de Pr ocedi me nt os Re mot a ) .

O ser vi dor Prot h e us t a mb m pod e e x ecut a r r ot i nas e m ADVPL e m out ros ser vi dor es Pr ot he us
a t r a v s d e cone x o TCP/ I P di r et a ut ili z a ndo o concei t o de RPC. Do mesmo modo, a pl i caes
e xt er n as pod e m r equi si t ar a e x ecu o de r ot i n as escri t as e m ADVPL a t r a v s de con e x o
TCP/ I P di r et a .
Progr a mao Web

O Pr ot he us Ser v er pode t a mb m ser e x ecut a do como u m ser vi dor Web, r esponde ndo a
r equi si es HTTP. No mome nt o dest as r equi si es, pod e e x ecut ar r ot i n as escri t as e m ADVPL
como pr ocessos i ndi vi duai s, e nvi a ndo o r esul t a do das f unes como r et or no das r equi si es
par a o cli e nt e HTTP ( co mo por e x e mpl o, u m Br owser d e I nt er net ) . Qu al quer rot i na escri t a e m
ADVPL que n o cont e n h a coma ndos de i nt erf ace pode ser e x ecut a d a a t r a v s d e r equi si es
HTTP. O Pr ot he us per mi t e a compil ao de ar qui vos HTML cont e ndo cdi go ADVPL e mbut i do.
So os ch a ma dos ar qui vos ADVPL ASP, par a a cri ao d e p gi n as di n mi cas.

E Programao TelNet

Tel Net par t e da ga ma de pr ot ocol os TCP/ I P que per mi t e a con e x o a u m comput a dor r e mot o
a t r a v s de u ma a pl i cao cl i e nt e dest e pr ot ocol o. O PROTHEUS Ser v er pod e e mul ar u m
t er mi n al Tel Net , a t r a v s da e x ecu o de r ot i n as escri t as e m ADVPL. Ou sej a , pode - se escr e v er
rot i nas ADVPL cuj a i nt erf ace fi nal ser u m t er mi n al Tel Net ou u m col et or de da dos mv el .





- 164 -

ADVPL Completo



19. Estrutura de um Programa ADVPL

Um progr a ma de comput a dor n a da mai s do que u m gr upo de coma ndos l ogi ca me nt e
di spost os com o obj et i vo de e x ecut ar d et er mi na da t ar ef a . Esses coma ndos s o gr a v a dos e m
u m ar qui vo t e xt o que t r a nsf or ma do e m u ma li ngu a ge m e x ecut v el por u m comput a dor
a t r a v s d e u m pr ocesso cha ma do co mpil ao. A compi l ao subst i t ui os coma ndos d e al t o
n v el ( que os hu ma nos compr e e nde m) por i nst r ues de bai xo n v el ( compr e e ndi da pel o
si st e ma oper aci onal e m e x ecu o no co mput a dor ) . No caso do ADVPL, n o o si st e ma
oper aci on al de u m comput a dor que i r e x ecut ar o cdi go compil a do, mas si m o Prot he us
Ser v er.

De nt r o d e u m progr a ma , os coma ndos e f unes ut i li z a dos de v e m segui r r egr as d e si nt a x e da
li ngua ge m utili z a da , poi s caso cont r ri o o pr ogr a ma ser i nt errompi do por er ros. Os er ros
pode m ser d e compi l ao ou de e x ecuo.

Er ros de compi l ao s o a quel es e ncont r a dos n a si nt a x e que n o per mi t e m que o ar qui vo de
cdi go do progr a ma se j a compi l a do. Pode m ser coma ndos esp eci fi ca dos d e f or ma err ne a ,
utili z ao i nv li da de op er a dor es, et c.

Er ros de e x ecuo so a quel es que acont ece m depoi s da compil ao, qu a ndo o progr a ma est
se ndo e x ecut a do. Pod e m ocor r er por i n mer as r a z es, mas g er al me nt e se r ef er e m as f unes
no e xi st e nt es, ou v ari v ei s n o cri a das ou i ni ci ali z a das, et c.


Linhas de Programa

As li nh as e xi st e nt es d e nt ro de u m ar qui vo t e x t o de cdi go de progr a ma pode m ser li nh as de
coma ndo, l i nh as de come nt ri o ou l i nhas mi st as.

E Linhas de Comando

Li nh as de coma ndo possue m os co ma ndos ou i nst r ues que ser o e x ecut a das. Por e x e mpl o :

Local nCnt
Local nSoma := 0
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

E Linhas de Comentrio

Li nh as de come nt ri o possu e m u m t e xt o qu al quer, mas no s o e x ecut a das. Ser v e m a pe n as
par a docu me nt a o e p ar a t or n ar mai s f ci l o e nt e ndi me nt o do pr ogr a ma . Exi st e m t r s f or mas
de se co me nt ar l i nh as de t e xt o. A pri mei r a del as ut ili z ar o si n al de * ( ast eri sco) no comeo
da li nh a :

* Programa para clculo do total
* Autor: Microsiga Software S.A.
* Data: 2 de outubro de 2001

- 165 -

ADVPL Completo



Todas as l i nh as i ni ci a das com u m si nal de ast eri sco s o consi der a das como come nt ri o. Pod e -
se ut ili z ar a pal a vr a NOTE ou doi s s mbol os da l et r a " e " comerci al (&&) par a r e al i z ar a f un o
do si n al de ast eri sco. Por m t odas est as f or mas de come nt ri o de li nhas so obsol et as e
e xi st e m a pe n as par a compa t i bili z ao com o pa dr o x Base. A mel hor ma nei r a de come nt ar
li nhas e m ADVPL ut ili z ar duas ba rr as t r a nsv ersai s :

// Programa para clculo do total
// Autor: Microsiga Software S.A.
// Data: 2 de outubro de 2001

Out r a f or ma d e docu me nt ar t e xt os ut i li z ar as barr as t r a nsv ersai s j unt a me nt e com o
ast eri sco, pod e ndo- se come nt ar t odo u m bl oco de t e xt o se m pr eci sar come nt ar l i nh a a li nh a :

/*
Programa para clculo do total
Autor: Microsiga Software S.A.
Data: 2 de outubro de 2001
*/

Todo o t e xt o e ncont r a do e nt r e a a ber t ur a (i ndi ca da pel os car act er es / *) e o f ech a me nt o
(i ndi ca da pel os ca r act er es * / ) consi der a do co mo come nt ri o.

E Linhas Mistas

O ADVPL t a mb m per mi t e que e xi st a m l i nh as de coma ndo com co me nt ri o. I st o poss v el
a di ci ona ndo- se as du as barr as t r a nsv ersai s ( / / ) ao fi n al da li nh a de coma ndo e a di ci on a ndo- se
o t e xt o do come nt ri o :

Local nCnt
Local nSoma := 0 // Inicializa a varivel com zero para a soma
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

E Tamanho da Linha

Assi m como a li nh a f sica , del i mi t a da pel a qu a nti da de de car act er es que pode ser di gi t a do no
edi t or de t e xt os ut ili z ado, e xi st e u ma l i nh a consi der a da li nh a l gi ca . A li nh a l gi ca , a quel a
consi der a da pa r a a compil ao como u ma ni ca li nh a de coma ndo.

A pri nc pi o, ca da li nha di gi t ada no ar qui vo t e xt o di f er e nci a da a ps o pr essi ona me nt o da t ecl a
< Ent er > . Ou sej a , a l i nh a l gi ca , a li nh a f si ca no a r qui vo. Por m al gu mas v e z es, por
li mi t ao f si ca do edi t or de t e xt o ou por est t i ca , pod e - se " quebr a r " a li nh a l gi ca e m mai s de
u ma li nh a f si ca no ar qui vo t e xt o. I st o ef et u a do ut ili z a ndo- se o si n al de pont o- e- v r gul a ( ; ) .

If !Empty(cNome) .And. !Empty(cEnd) .And. ; <enter>
!Empty(cTel) .And. !Empty(cFax) .And. ; <enter>
!Empty(cEmail)

GravaDados(cNome,cEnd,cTel,cFax,cEmail)

Endif

Nest e e x e mpl o e xi st e u ma li nh a de coma ndo par a a checa ge m das v ari v ei s utili z a das. Como a
li nha t or n a - se mui t o gr a nde, pode - se di vi di -l a e m mai s de u ma li nh a f si ca utili z a ndo o si n al de

- 166 -

ADVPL Completo


pont o- e- v r gul a . Se u m si nal de pont o- e- v r gul a f or esqueci do n as duas pri mei r as li nhas,
dur a nt e a e x ecu o do progr a ma ocor r er u m err o, poi s a segunda li nh a f si ca ser
consi der a da como u ma segunda li nh a de coma ndo n a compil ao. E dur a nt e a e x ecu o est a
li nha n o t er se nt i do.

19.1. reas de um Programa ADVPL

Apesa r de n o ser u ma li ngua ge m de pa dr es r gi dos com r el ao est r ut ur a do progr a ma ,
i mpor t a nt e i de nti fi car al gu mas de su as pa r t es. Consi der e o pr ogr a ma d e e x e mpl o a bai xo :

#include protheus.ch

/*
+===========================================+
| Programa: Clculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+===========================================+
*/

User Function CalcFator()

Local nCnt
Local nResultado := 1 // Resultado do fatorial
Local nFator := 5 // Nmero para o clculo

// Clculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

// Exibe o resultado na tela, atravs da funo alert
Alert("O fatorial de " + cValToChar(nFator) + ;
" " + cValToChar(nResultado))

// Termina o programa
Return

A est r ut ur a d e u m pr ogr a ma ADVPL compost a pel as segui nt es r e as :

E r e a de I d e nt i fi cao
- Decl ar a o dos i ncl udes
- Decl ar a o da f uno
- I d e nt i fi cao do pr ogr a ma

E r e a de Aj ust es I ni ci ai s
- Decl ar a o das v a ri v ei s

E Cor po do Progr a ma
- Pr epa r ao pa r a o processa me nt o
- Processa me nt o

E r e a de Encer r a me nt o

- 167 -

ADVPL Completo



rea de Identificao

Est a u ma r e a que n o obri ga t ri a e d e di ca da a docu me nt ao do progr a ma . Qua ndo
e xi st e nt e, cont m a pe n as come nt ri os e x pl i ca ndo a su a fi nali da de, da t a de cri ao, a ut or , et c. ,
e a pa r ece no comeo do progr a ma , a nt es de qu al quer li nh a de coma ndo.

O f or ma t o pa r a est a r e a no d efi ni do. Pode - se col ocar qu al quer t i po de i nf or ma o
desej a da e escol her a f or ma t a o a pr opri a da .

#include protheus.ch

/*
+==========================================+
| Programa: Clculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+==========================================+
*/

User Function CalcFator()


Opci onal me nt e pode m- se i ncl ui r defi ni es de const a nt es ut ili z a das no progr a ma ou i ncl uso
de ar qui vos de ca b eal ho nest a r e a .

rea de Ajustes Iniciais

Nest a r e a ger al me nt e se f a z e m os a j ust es i ni ci ai s, i mpor t a nt es par a o cor r et o f unci on a me nt o
do progr a ma . Ent r e os a j ust es se e ncont r a m decl ar aes de v ari v ei s, i ni ci ali z aes, a b er t ur a
de ar qui vos, et c. Apesa r do ADVPL no ser u ma li ngu a ge m r gi da e as v ari v ei s poder e m ser
decl ar a das e m qual quer l ugar do progr a ma , aconsel h v el f a z -l o nest a r e a vi sa ndo t or n a r o
cdi go mai s l eg v el e f acili t ar a i de nti fi cao d e v ari v ei s n o ut ili z a das.

Local nCnt
Local nResultado := 0 // Resultado do fatorial
Local nFator := 10 // Nmero para o clculo

Corpo do Programa

nest a r e a que se e ncont r a m as l i nh as de cdi go do pr ogr a ma . onde se r e al i z a a t ar ef a
necess ri a a t r a v s da or ga ni z ao l gi ca dest as li nh as de coma ndo. Esp er a - se que as l i nhas de
coma ndo est ej a m or ga ni z a das de t al modo que no fi n al dest a r e a o r esul t a do esper a do sej a
obt i do, sej a el e ar ma z e n a do e m u m ar qui vo ou e m v ari v ei s de me mri a , pront o par a ser
e xi bi do ao usu ri o a t r a v s d e u m r el a t ri o ou n a t el a .

// Clculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

- 168 -

ADVPL Completo



A pr epar a o par a o pr ocessa me nt o f or ma da pel o conj unt o de v ali daes e processa me nt os
necess ri os a nt es da r e ali z ao do pr ocessa me nt o e m si .

Av ali a ndo o processa me nt o do cl cul o do f a t ori al descri t o a nt eri or me nt e , pod e - se d efi ni r que a
v ali dao i ni ci al a ser r e ali z a da o cont e do d a v ari v el nF a t or, poi s a mesma d et er mi n ar a
corr et a e x ecu o do cdi go.


// Clculo do fatorial
nFator := GetFator()
// GetFator funo ilustrativa na qual a varivel recebe a informao do
usurio.

If nFator <= 0
Alert(Informao invlida)
Return
Endif

For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt


rea de Encerramento

nest a r e a onde as fi n ali z aes s o ef et u a das. onde os a r qui vos a ber t os so f ech a dos, e o
r esul t a do da e x ecuo do pr ogr a ma ut ili z a do. Pod e - se e xi bi r o r esul t a do ar ma z e n a do e m
u ma v ari v el ou e m u m ar qui vo ou si mpl esme nt e fi n ali z ar, caso a t ar ef a j t e nh a si do t od a
compl et a da no cor po do progr a ma . nest a r e a que se e ncont r a o e ncerr a me nt o do
progr a ma . Todo progr a ma e m ADVPL de v e se mpr e t er mi n ar com a pal a vr a ch a v e r et ur n.

// Exibe o resultado na tela, atravs da funo alert
Alert("O fatorial de " + cValToChar(nFator) + ;
" " + cValToChar(nResultado))

// Termina o programa
Return


- 169 -

ADVPL Completo



20. Declarao e Atribuio de Variveis

20.1. Tipo de Dados

O ADVPL no u ma li ngua ge m de t i pos r gi dos ( st rongl y t y ped) , o que si gni fi ca que v ari v ei s
de me mri a pode m r eceber di f er e nt es t i pos de da dos dur a nt e a e x ecuo do progr a ma .

As v a ri v ei s pode m t a mb m cont er obj et os, mas os t i pos pri mri os da l i ngu a ge m so :

Numrico

O ADVPL n o di f er e nci a v al or es i nt ei ros de v al or es com pont o fl ut ua nt e, por t a nt o pode m- se
cri ar v ari v ei s nu mri cas co m qu al quer v al or de nt ro do i nt er v al o per mi t i do. Os segui nt es
el e me nt os s o do t i po de da do nu mri co :

2
43.53
0.5
0.00001
1000000

Uma v ari v el do t i po de da do nu mri co pode cont er u m n mer o de d e z oi t o d gi t os i ncl ui ndo o
pont o fl ut u a nt e, no i nt er v al o de 2. 2250738 585072014 E308 a t 1. 7976931348623158
E + 308.

Lgico

Val or es l gi cos e m ADVPL s o i de nti fi ca dos a t r a v s d e . T. ou . Y. par a v er da d ei ro e . F. ou . N.
par a f al so (i ndepe nde nt e me nt e se os ca r act er es est i v er e m e m mai scul o ou mi nscul o) .

Caractere

St ri ngs ou ca dei as de car act er es so i de nti fi cadas e m ADVPL por bl ocos d e t e xt o e nt r e aspas
dupl as ( " ) ou aspas si mpl es (') :

"Ol mundo!"
'Esta uma string'
"Esta 'outra' string"

Uma v a ri v el do t i po car act er e pode cont er st ri ngs com no m xi mo 1 MB, ou sej a , 104857 6
car act er es.

Data

O ADVPL t e m u m t i po de da dos espec fi co par a da t as. I nt er n a me nt e as v ari v ei s dest e t i po de
da do s o a r ma z e na das como u m n mero cor r esponde nt e a data Juliana.

Vari v ei s do t i po de d a dos Da t a n o pod e m ser d ecl ar a das di r et a me nt e, e si m a t r a v s da
utili z ao de f unes espec fi cas como por e x e mpl o CTOD( ) que conv er t e u ma st ri ng par a
da t a .

- 170 -

ADVPL Completo



Array

O Ar r a y u m t i po de da do especi al . a di sposi o de out r os el e me nt os e m col un as e li nhas. O
ADVPL supor t a ar r a ys uni di me nsi on ai s ( v et or es) ou mul t i di me nsi on ai s ( ma t ri z es) . Os
el e me nt os d e u m a rr a y so acessa dos a t r a v s d e ndi ces nu mri cos i ni ci a dos e m 1,
i de nti fi ca ndo a li nh a e col un a par a qu a nt as di me nses e xi st i r e m.

Arr a ys d e v e m ser ut ili z a das com ca ut el a , poi s se f or e m mui t o gr a ndes pode m e x a uri r a
me mri a do ser vi dor.

Bloco de Cdigo

O bl oco de cdi go u m t i po de da do especi al . ut ili z a do par a a r ma z e n ar i nst r ues escri t as
e m ADVPL que pod er o ser e x ecut a das post eri or me nt e .

20.2. Declarao de variveis

Vari v ei s de me mri a so u m dos r ecursos mai s i mpor t a nt es de u ma li ngu a ge m. So r e as d e
me mri a cri a das par a ar ma z e n ar i nf or maes utili z a das por u m progr a ma par a a e x ecuo d e
t ar ef as. Por e x e mpl o, qu a ndo o usu ri o di gi t a u ma i nf or mao qu al quer , como o nome de u m
produt o, e m u ma t el a de u m progr a ma est a i nf or mao ar ma z e n a da e m u ma v ari v el de
me mri a par a post eri or me nt e ser gr a v a da ou i mpr essa .

A par t i r do mome nt o que u ma v ari v el cri a da , no necess ri o mai s se r ef er e nci ar ao se u
cont e do, e si m ao se u nome.

O nome de u ma v ari v el u m i de nti fi ca dor ni co o qu al de v e r esp ei t ar u m mximo de 10
caracteres. O ADVPL n o i mpede a cri ao d e u ma v ari v el de me mri a cuj o nome cont e nha
mai s de 10 car act er es, porm apenas os 10 primeiros sero considerados par a a
l ocali z ao do cont e do ar ma z e n a do.

Por t a nt o se f or e m cri a das duas v ari v ei s cuj os 10 pri mei ros car act er es f or e m i gu ai s, como
nTot al Ger al Anu al e nTot al Ger al Me nsal , as r ef er nci as a qu al quer u ma del as no pr ogr a ma
r esul t ar o o mesmo, ou sej a , ser o a mesma v ari v el :

nTotalGeralMensal := 100
nTotalGeralAnual := 300
Alert("Valor mensal: " + cValToChar(nTotalGeralMensal))

Qu a ndo o cont e do da v ari v el nTot al Ger al Me nsal e xi bi do, o se u v al or ser de 300. I sso
acont ece por qu e no mome nt o qu e esse v al or f oi a t ri bu do v ari v el nTot al Ger al Anu al , o
ADVPL consi der ou a pe n as os 10 pri mei ros ca r act er es ( assi m como o f a z qu a ndo de v e e xi bi r o
v al or da v ari v el nTot al Ger al Me nsal ) , ou sej a , consi der ou- as como a mesma v ari v el . Assi m o
v al or ori gi n al de 100 f oi subst i t u do pel o de 300.


- 171 -

ADVPL Completo



20.3. Escopo de variveis

O ADVPL n o u ma li ngu a ge m de t i pos r gi dos par a v a ri v ei s, ou sej a , n o necess ri o
i nf or mar o t i po de da dos que det er mi n a da v ari v el i r cont er no mome nt o de su a d ecl ar a o,
e o se u v al or pod e mud ar dur a nt e a e x ecu o do pr ogr a ma .

Ta mb m n o h necessi da de de decl ar ar v a ri v ei s e m u ma seo espec fi ca do se u cdi go
f ont e, e mbor a sej a aconsel h v el decl ar ar t odas as v a ri v ei s necess ri as no comeo, t or na ndo
a ma nut e no mai s f ci l e e vi t a ndo a decl ar a o de v a ri v ei s desn ecessri as.

Par a d ecl ar ar u ma v a ri v el de v e - se ut ili z ar u m i de nt ifica dor d e escopo. Um i de nt i fi ca dor d e
escopo u ma pal a vr a ch a v e que i ndi ca a que cont e xt o do pr ogr a ma a v ari v el decl ar a da
per t e nce . O cont e xt o d e v ari v ei s pod e ser l ocal ( vi su ali z a das a pe n as de nt r o do pr ogr a ma
a t ual ) , pblico ( vi su ali z a das por qu al quer out ro progr a ma ) , e nt r e out r os.

O Contexto de Variveis dentro de um Programa

As v ari v ei s decl ar a das e m u m progr a ma ou f uno, s o vi s v ei s de acor do com o escopo ond e
so d efi ni das. Como t a mb m do escopo d ep e nde o t e mpo d e e xi st nci a das v ari v ei s. A
defi ni o do escopo d e u ma v ari v el ef et ua da no mome nt o de su a d ecl ar ao.

Local nNu mero : = 10

Est a li nh a de cdi go decl ar a u ma v ari v el cha ma da nNu mero i ndi ca ndo que per t e nce se u
escopo l ocal .

Os i de nt i fi ca dor es d e escopo s o :

E Local
E St a t i c
E Pri v a t e
E Publi c

O ADVPL n o r gi do e m r el ao decl ar a o de v ari v ei s no comeo do progr a ma . A i ncl uso
de u m i de nti fi ca dor de escopo n o necess ri o par a a d ecl ar a o d e u ma v ari v el , cont a nt o
que u m v al or l he sej a a t ri bu do.

nNumero2 := 15

Qu a ndo u m v al or a t ri bu do u ma v ari v el e m u m progr a ma ou f uno, o ADVPL cri ar a
v ari v el caso el a n o t e nha si do decl ar a da a nt eri or me nt e. A v ari v el e nt o cri a da como se
t i v esse si do decl ar a da como Pri v a t e.

De vi do a essa car act er st i ca , qu a ndo se pr e t e nde f a z er u ma a t ri bui o a u ma v ari v el
decl ar a da pr e vi a me nt e mas escr e v e - se o no me da v a ri v el de f or ma i ncorr et a , o ADVPL n o
ger a r ne nhu m err o de compil ao ou de e x ecuo. Poi s compr e e nder o nome da v ari v el
escri t o de f or ma i ncorr e t a como se f osse a cri ao de u ma nov a v a ri v el . I st o al t er ar a l gi ca
do pr ogr a ma , e u m er ro mui t as v e z es di f cil de i de nt i fi car.

- 172 -

ADVPL Completo



Variveis de escopo local

Vari v ei s de escopo l ocal so per t e nce nt es a pe n as ao escopo da f uno onde f or a m decl ar a das
e d e v e m ser e x pli ci t a me nt e d ecl ar a das com o i de nt i fi ca dor LOCAL, co mo no e x e mpl o :


Function Pai()
Local nVar := 10, aMatriz := {0,1,2,3}
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


Nest e e x e mpl o, a v a ri v el nVar f oi decl ar a da como l ocal e a t ri bu da com o v al or 10. Qu a ndo a
f uno Fil ha e x ecut a da , nVar ai nda e xi st e mas n o pode ser acessa da . Qu a ndo a e x ecu o
da f uno Pai t er mi n ar, a v ari v el nVar d est r u da . Qual quer v ari v el com o mesmo nome no
progr a ma que ch a mou a f uno Pai no af et a da .

Vari v ei s de escopo l ocal so cri a das a ut oma t i ca me nt e ca da v e z qu e a f uno onde f or e m
decl ar a das f or a t i v a da . El as cont i nu a m a e xi st i r e ma nt m se u v al or a t o fi m da a t i v ao da
f uno ( ou sej a , a t qu e a f un o r et or ne o cont rol e par a o cdi go que a e x ecut ou) . Se u ma
f uno ch a ma da r ecursi v a me nt e ( por e x e mpl o, ch a ma a si mes ma ) , ca da ch a ma da e m
r ecurs o cri a u m nov o conj unt o de v a ri v ei s l ocai s.

A vi si bili da de de v ari v ei s de escopo l ocai s i d nt i ca ao escopo d e su a decl ar a o, ou sej a , a
v ari v el vi s v el e m qual quer l ugar do cdi go f ont e e m que f oi decl ar a da . Se u ma f uno
cha ma da r ecursi v a me nt e, a p e n as as v a ri v ei s de escopo l ocal cri a das n a mai s r ece nt e a t i v ao
so vi s v ei s.

Variveis de escopo static

Vari v ei s de escopo st a t i c f unci on a m basi ca me nt e como as v a ri v ei s de escopo l ocal , mas
ma nt m se u v al or a t r a v s da e x ecuo e d e v e m ser decl ar a das e x pl i ci t a me nt e no cdi go co m
o i de nt i fi ca dor STATI C.

O escopo das v a ri v ei s st a t i c depe nde de onde so d ecl ar a das. Se f or e m decl ar a das de nt r o do
cor po de u ma f un o ou procedi me nt o, se u escopo ser l i mi t a do quel a rot i na . Se f or e m
decl ar a das f or a do cor po de qu al quer rot i n a , se u escopo af et a a t odas as f unes d ecl ar a das
no f ont e. Nest e e x e mpl o, a v ari v el nVar d ecl ar a da como st a t i c e i ni ci ali z a da com o v al or 10 :

Function Pai()
Static nVar := 10
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


- 173 -

ADVPL Completo


Qu a ndo a f uno Fil ha e x ecut a da , nVar ai nda e xi st e mas n o pod e ser acessa da . Di f er e nt e
de v ari v ei s decl ar a das como LOCAL ou PRI VATE, nVa r cont i nu a a e xist i r e ma nt m se u v al or
a t ual qu a ndo a e x ecuo da f uno Pai t er mi na . Ent r et a nt o, some nt e pode ser acessa da por
e x ecues subseq e nt es da f un o Pai .

Variveis de escopo private

A decl ar ao opci on al par a v ari v ei s pri v a das. Mas pod e m ser d ecl ar a das e x pl i ci t a me nt e com
o i de nt i fi ca dor PRI VATE.

Adi ci on al me nt e, a a t ri bui o de v al or a u ma v ari v el n o cri a da a nt eri or me nt e
a ut oma t i ca me nt e cri a a v ari v el como pri v a da . Uma v e z cri a da , u ma v ari v el pri v a da conti nu a
a e xi st i r e ma nt m se u v al or a t que o progr a ma ou f uno onde f oi cri a da t er mi ne ( ou sej a ,
a t que a f uno onde f oi cri a da r et or n e par a o cdi go que a e x ecut ou) . Nest e mome nt o,
a ut oma t i ca me nt e dest r u da .

poss v el cri ar u ma nov a v ari v el pri v a da co m o mesmo nome d e u ma v ari v el j e xi st e nt e .
Ent r et a nt o, a nov a ( dupli ca da ) v ari v el pode a pe n as ser cri a da e m u m n v el de a ti v ao
i nf eri or ao n v el onde a v ari v el f oi decl ar a da pel a pri mei r a v e z ( ou sej a , a pe n as e m u ma
f uno ch a ma da p el a f uno onde a v a ri v el j h a vi a si do cri a da ) . A nov a v ari v el pri v a d a i r
esconder qu al quer out r a v ari v el pri v a da ou pbli ca ( v ej a a docu me nt ao sobr e v a ri v ei s
pbli cas) com o mesmo nome e nqu a nt o e xi st i r.

Uma v e z cri a da , u ma v ari v el pri v a da vis v el e m t odo o pr ogr a ma e nqua nt o no f or
dest r u da a ut oma t i ca me nt e qu a ndo a rot i n a que a cri ou t er mi n ar ou u ma out r a v ari v el
pri v a da com o mesmo nome f or cri a da e m u ma subf uno ch a ma da ( nest e caso, a v ari v el
e xi st e nt e t or n a - se i n acess v el a t que a nov a v a ri v el pri v a da sej a dest r u da) .
E m t er mos mai s si mpl es, u ma v ari v el pri v a da vi s v el de nt ro da f uno de cri ao e t odas as
f unes ch a ma das por est a , a me nos que u ma f uno ch a ma da cri e su a pr pri a v ari v el
pri v a da com o mesmo nome .

Por exemplo:


Function Pai()
Private nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Nest e e x e mpl o, a v a ri v el nVar cri a da com escopo pri v a t e e i ni ci ali z a da com o v al or 10.
Qu a ndo a f un o Fi l h a e x ecut a da , nVar ai nda e xi st e e, di f er e nt e de u ma v ari v el de escopo
l ocal , pode ser acessa d a pel a f uno Fil h a . Qua ndo a f uno Pai t er mi nar, nVar ser dest r u da
e qu al quer decl ar ao d e nVar a nt eri or se t or na r acess v el nov a me nt e.


No a mbi e nt e ERP Pr ot he us, e xi st e u ma conv e no a di ci on al a qu al de v e ser
r espei t a da que v ari v ei s e m uso pel a a pli cao n o sej a m i ncorr et a me nt e
ma ni pul a das. Por est a conv e no de v e ser a di ci ona do o ca r act er _ a nt es
do nome d e v ari v ei s PRI VATE e PUBLI C. Mai or es i nf or maes a v ali ar o
t pi co : Boas Pr t i cas de Pr ogr a mao.

Exemplo: Pri v a t e _dDa t a

- 174 -

ADVPL Completo




Variveis de escopo public

Pode m- se cri ar v ari v ei s de escopo publi c di n a mi ca me nt e no cdi go com o i de nti fi ca dor
PUBLI C. As v a ri v ei s dest e escopo cont i nu a m a e xi sti r e ma nt m se u v al or a t o fi m da
e x ecu o da t hr e a d ( cone x o) .

poss v el cri ar u ma v ari v el de escopo pri v a t e com o mesmo nome d e u ma v ari v el de escopo
publi c e xi st e nt e, e nt r et a nt o, n o per mi t i do cri ar u ma v ari v el de escopo publi c com o mesmo
nome d e u ma v ari v el de escopo pri v a t e e xi st e nt e.

Uma v e z cri a da , u ma v ari v el de escopo publi c vi s v el e m t odo o progr a ma onde f oi
decl ar a da a t que sej a escondi da por u ma v a ri v el de escopo pri v a t e cri a da com o mesmo
nome. A nov a v ari v el de escopo pri v a t e cri a da esconde a v a ri v el de escopo publi c e xi st e nt e ,
e est a se t or nar i n acess v el a t que a nov a v ari v el pri v a t e sej a dest r u da . Por e x e mpl o :


Function Pai()
Public nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Nest e e x e mpl o, nVar cri a da como publi c e i nici ali z a da com o v al or 10. Qu a ndo a f uno Fi l h a
e x ecut a da , nVar ai nda e xi st e e pod e ser acessa da . Di f er e nt e d e v a ri v ei s l ocai s ou pri v a t es,
nVar ai nda e xi st e a ps o t r mi no da a e x ecu o da f un o Pai .

Di f er e nt e me nt e dos out ros i de nti fi ca dor es d e escopo, qu a ndo u ma v a ri v el decl ar a da como
pbli ca se m ser i ni ci ali z a da , o v al or assu mi do f al so ( . F. ) e n o nul o ( nil ) .


No a mbi e nt e ERP Pr ot he us, e xi st e u ma conv e no a di ci on al a qu al de v e ser
r espei t a da que v ari v ei s e m uso pel a a pli cao n o sej a m i ncorr et a me nt e
ma ni pul a das. Por est a conv e no de v e ser a di ci on a do o ca r act er _ a nt es
do nome d e v ari v ei s PRI VATE e PUBLI C. Mai or es i nf or maes a v ali ar o
t pi co : Boas Pr t i cas de Pr ogr a mao.

Exemplo: Publ i c _cRot i n a






- 175 -

ADVPL Completo



20.4. Entendendo a influncia do escopo das variveis

Consi der e as li nhas de cdi go de e x e mpl o :


nResultado := 250 * (1 + (nPercentual / 100))


Se est a l i nh a f or e x ecut a da e m u m progr a ma ADVPL, ocorr er u m err o de e x ecuo com a
me nsa ge m " v a ri a bl e does not e xi st : nPerce nt ual " , poi s est a v ari v el est se ndo ut ili z a da e m
u ma e x pr esso d e cl cul o se m t er si do decl ar a d a . Par a sol uci onar est e er ro, de v e - se decl ar ar a
v ari v el pr e vi a me nt e :


Local nPercentual, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


Nest e e x e mpl o, as v a ri v ei s so decl ar a das pr e vi a me nt e ut ili z a ndo o i de nti fi ca dor de escopo
l ocal . Qu a ndo a li nh a de cl cul o f or e x ecut a da , o e r ro d e v ari v el n o e xi st e nt e , no mai s
ocor r er . Por m v a ri v ei s n o i ni ci ali z a das t m se mpr e o v al or def a ul t nul o ( Nil ) e est e v al or
n o pod e ser ut ili z ado e m u m cl cul o poi s t a mb m g er a r err os de e x ecu o ( nul o n o pode
ser di vi di do por 100) . A r esol uo d est e pr obl e ma ef et ua da i nici ali z a ndo- se a v ari v el
a t r a v s d e u ma das f or mas :


Local nPercentual, nResultado
nPercentual := 10
nResultado := 250 * (1 + (nPercentual / 100))

ou

Local nPercentual := 10, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


A di f er e na e nt r e o l ti mo e x e mpl o e os doi s a nt eri or es que a v a ri v el i ni ci ali z a da no
mome nt o da decl ar a o. E m a mbos os e x e mpl os, a v ari v el pri mei ro decl ar a da e e nt o
i ni ci ali z a da e m u ma out r a l i nha de cdi go.

aconsel h v el opt ar p el o oper a dor d e a t ri bui o compost o de doi s pont os e si n al de i gu al , poi s
o oper a dor de a t ri bui o ut ili z a ndo some nt e o si n al de i gu al pode ser f aci l me nt e conf undi do
com o oper a dor r el aci onal ( par a compa r a o) dur a nt e a cri ao do progr a ma .


- 176 -

ADVPL Completo



21. Regras adicionais da linguagem ADVPL

21.1. Palavras reservadas

AADD DTOS I NKEY REPLI CATE VAL
ABS ELSE I NT RLOCK VALTYPE
ASC ELSEI F LASTREC ROUND WHI LE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRI M YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDI F LOWER SELECT CHR E OF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL F COUNT MI N SQRT
CTOD F I ELDNAME MONTH STR DATE
F I LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED F OUND PROCEDURE
TRANSF ORM DEVPOS FUNCTI ON PROW TRI M
DOW I F RECCOUNT TYPE DT OC
I I F RECNO UPPER TRY AS
CATCH THROW




E Pal a vr as r eser v a das no pod e m ser ut i li z a das par a v ari v ei s,
procedi me nt os ou f unes ;

E F unes r eser v a das s o per t e nce nt es ao compi l a dor e n o pod e m ser
r ed efi ni das por u ma a plica o ;

E Todos os i de nt i fi ca dor es que comea r e m com doi s ou mai s car act er es
_ s o ut ili z a dos como i de nti fi ca dor es i nt er nos e s o r eser v a dos.

E I d e nt i fi ca dor es de escopo PRI VATE ou PUBLI C utili z a dos e m a pli caes
esp ec fi cas dese nvol vi da por ou par a cli e nt es d e v e m t er su a
i de nti fi cao i ni ci a da por u m ca r act er e _.




- 177 -

ADVPL Completo



21.2. Pictures de formatao disponveis

Com base na docu me nt ao di spon v el no DEM Docu me nt ao El et r ni ca Mi crosi ga , a
li ngua ge m ADVPL e a a pli cao ERP Prot he us a d mi t e m as segui nt es pi ct ur es :

Dicionrio de Dados (SX3) e GET

Funes
Contedo Funcionalidade
A Per mi t e a pe n as car act er es al f a bt i cos.
C Exi be CR d epoi s de n mer os posi t i vos.
E Exi be nu mri co com o pont o e v r gul a i nv er t i dos ( f or ma t o Eur op e u) .
R I nser e ca r act er es di f er e nt es dos car act er es de t e mpl a t e n a e xi bi o, mas n o os
i nser e n a v ari v el do GET.
S<n> Per mi t e rol a me nt o hori z ont al do t e xt o de nt ro do GET, < n > u m n mer o i nt ei ro
que i de nti fi ca o t a ma nho da r egi o.
X Exi be DB d epoi s d e n mer os nega t i vos.
Z Exi be z eros como br a ncos.
( Exi be n meros nega t i vos e nt r e pa r nt eses com os espaos e m br a nco i ni ci ai s.
) Exi be n meros nega t i vos e nt r e pa r nt eses se m os espaos e m br a nco i ni ci ai s.
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o.

Templates
Contedo Funcionalidade
X Per mi t e qual quer ca r act er e.
9 Per mi t e a pe nas d gi t os par a qu al quer ti po de da do, i ncl ui ndo o si n al par a
nu mri cos.
# Per mi t e d gi t os, si nai s e espaos e m br a nco par a qu al quer t i po de da do.
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o.
* Exi be u m ast eri sco no l ugar dos espaos e m br a nco i ni ci ai s e m n mer os.
. Exi be o pont o deci mal .
, Exi be a posi o do mi l har.

Exemplo 01 Picture campo numrico

CT2_VALOR Numrico 17,2
Picture: @E 99,999,999,999,999.99


Exemplo 02 Picture campo texto, com digitao apenas em caixa alta

A1_NOME Caracter - 40
Picture: @!



- 178 -

ADVPL Completo



22. Programas de Atualizao

Os pr ogr a mas de a t u ali z ao de ca dast ros e di gi t ao de movi me nt os segue m u m pa dr o que
se a pi a no Di ci onri o de Da dos.

Basi ca me nt e so t r s os mod el os mai s ut ili z a dos :

E Modelo 1 ou AxCadastro: Par a ca dast r a me nt os e m t el a chei a .
Ex e mpl o : Ca dast r o d e Cli e nt e.

E Modelo 2: Ca dast r a me nt os e nv ol v e ndo a pe n as u ma
t a bel a , mas com u m ca beal ho e,
opci on al me nt e, u m r od a p e u m cor po com
qu a nti da de ili mi t a da de li nh as. I de al par a
casos e m que h dados que se r epet e m
por v ri os i t e ns e que, por i sso, s o
col oca dos no ca b eal ho. Ex e mpl o : Pedi do de
Compr a .

E Modelo 3: Ca dast r a me nt os e nv ol v e ndo duas t a b el as,
u m com da dos d e ca beal ho e out ro di gi t a do
e m l i nhas com os i t e ns. Ex e mpl o : Pedi do de
Ve ndas, Ora me nt o et c.

Todos os model os s o ge nri cos, ou sej a , o progr a ma i ndepe nde da t a bel a a ser t r a t a da ,
bast a ndo pr a t i ca me nt e que se i nf or me a pe n as o se u Ali as. O r est o obt i do do
Di ci on ri o de Da dos ( SX3) .



- 179 -

ADVPL Completo



22.1. Modelo1( ) ou AxCadastro( )

O Ax Ca dast r o( ) u ma f unci on ali da de de ca dast ro si mpl es, com poucas opes d e
cust omi z ao, a qu al compost a d e :

Browse pa dr o par a vi suali z ao das i nf or maes da base de da dos, de acor do com a s
confi gur aes do SX3 Di ci on ri o de Da dos ( ca mpo br owse) .

F unes de pesqui sa , vi suali z ao, i ncl uso, al t er a o e e xcl uso pa dr es pa r a
vi su ali z ao de r egi st r os si mpl es, se m a op o de ca b eal ho e i t e ns.

E Sintaxe: AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt)

E Parmetros:

cAlias
Ali as pa dr o do si st e ma par a ut i li z ao, o qu al de v e est ar defi ni do no
di ci onri o de da dos SX3.
cTitulo T t ul o da Ja nel a
cVldExc Vali dao par a Excl uso
cVldAlt Vali dao par a Al t er a o


Exemplo: Funo AxCadastro( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | XCADSA2 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo AXCADASTRO() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/

User Function XCadSA2()

Local cAlias := "SA2"
Local cTitulo := "Cadastro de Fornecedores"
Local cVldExc := ".T."
Local cVldAlt := ".T."

dbSelectArea(cAlias)
dbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)

Return Nil


- 180 -

ADVPL Completo


Exemplo: Funo de validao da alterao



/*/
+------------------------------------------------------------------------------
| Funo | VLDALT | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrio | Funo de validao de alterao para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/

User Function VldAlt(cAlias,nReg,nOpc)

Local lRet := .T.
Local aArea := GetArea()
Local nOpcao := 0

nOpcao := AxAltera(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo(Aterao concluda com sucesso!)
Endif

RestArea(aArea)

Return lRet


Exemplo: Funo de validao da excluso


/*/
+------------------------------------------------------------------------------
| Funo | VLDEXC | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrio | Funo de validao de excluso para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/

User Function VldExc(cAlias,nReg,nOpc)

Local lRet := .T.
Local aArea := GetArea()
Local nOpcao := 0

nOpcao := AxExclui(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo(Excluso concluda com sucesso!)
Endif

RestArea(aArea)
Return lRet


- 181 -

ADVPL Completo



22.2. Modelo2( )

O nome Mod el o 2 f oi concei t u a do pel a Mi crosi ga por se t r a t ar d e u m prot t i po de t el a par a
e nt r a da d e da dos. I ni ci al me nt e v a mos desmi st i ficar doi s pont os :

O Funo Modelo2( ) Tr a t a - se d e u ma f un o pront a que cont e mpl a o prot t i po
Model o 2, por m, est e u m assunt o qu e n o i r e mos t r a t ar a qui , vi st o que
u ma f unci onali da de si mpl es que qu a ndo necessri o i nt er vi r e m al go n a rot i na
no h mui t o r ecurso p ar a t al .

O Prottipo Modelo 2 Tr a t a - se de u ma t el a , como a fi gur a a bai xo, onde se u
obj et i vo ef et u ar a ma nut e no e m v ri os r egi st ros de u ma s v e z . Por
e x e mpl o : ef et u ar o movi me nt o i nt er no de v ri os produt os do est oqu e e m u m
ni co l ot e.



22.2.1. Componentes de uma tela no formato Modelo 2

Objeto MsDialog( )

De v e ser ut i li z a da como j a nel a pa dr o pa r a e nt r a da de da dos, u m t i po de obj et o modal , ou
sej a , n o p er mi t e que out r a j a nel a a t i v a r eceba da dos e nqua nt o est a est i v er a t i v a .



- 182 -

ADVPL Completo


Toda v e z que ut ili z ar est e coma ndo o ADVPL e xi ge que sej a d ecl ar a do a di r et i v a I ncl ude no
ca beal ho do progr a ma o ar qui vo Pr ot he us. ch, i st o por que o compil a dor pr eci sar por qu e
est e coma ndo t r a t a - se de u m pse udo cdi go e su a t r a du o ser f ei t a n a compil ao. Val e
l e mbr ar t a mb m que est e s ser aci on a do depoi s que i nst a nci a do e a t i v a do por out r o
coma ndo.


DEFINE MSDIALOG oDlg TITLE "Prottipo Modelo 2" FROM 0,0 TO 280,552 OF;
oMainWnd PIXEL

ACTIVATE MSDIALOG oDlg CENTER


Repar e m que o coma ndo DEF I NE MSDI ALOG i nst a nci ou e o coma ndo ACTI VATE MSDI ALOG
a t i v a t odos os obj et os, ou sej a , t odo ou qual quer out ro obj et o qu e pr eci sar col ocar nest a
j a nel a ser pr eci so i nf or mar e m qu al obj et o, pa r a est e caso se mpr e ser ut ili z a da a v ari v el de
obj et o e x por t v el oDlg.


Funo EnchoiceBar( )

F uno que cri a u ma b arr a de bot es pa dr o de Ok e Ca ncel ar, p er mi ti ndo a i mpl e me nt ao
de bot es a di ci on ai s.



E Sintaxe: ENCHOICEBAR( oDlg, bOk, bCancelar, [ lMensApag ] , [ aBotoes ] )

E Parmetros:

oDlg Obj et o Ja nel a onde a ba rr a ser cri a da .
bOk Obj et o Bl oco de cdi go e x ecut a do qua ndo cl i ca do bot o Ok .
bCancelar Obj et o Bl oco de cdi go e x ecut a do qua ndo cl i ca do.
lMensApag Lgi co
I ndi ca se ao cl i car no bot o Ok a pa r ecer u ma t el a de
confi r ma o d e e xcl uso. Val or pa dr o f al so.
aBotes Vet or
Vet or com i nf or maes par a cri ao d e bot es
a di ci on ai s n a barr a . Se u f or ma t o { bi t ma p, bl oco d e
cdi go, me nsa ge m } .

















- 183 -

ADVPL Completo




Figura: Prottipo Modelo2 Enchoice

Objeto TPanel( )

Repar e que par a f aci li t ar o dese nv ol vi me nt o f oi ut ili z a do o obj et o TPa nel par a a j udar o
ali nh a me nt o dos obj et os TSa y e T Get , ou sej a , a ut ili z ao dest e r ecurso p er mi t e que o
progr a ma dor n o se pr eocupe com coor de na d as compl e x as par a dei x ar a uni o dos obj et os
si mt ri cos.

Ut ili z e o obj et o TPa nel qu a ndo desej ar cri ar u m pai nel est t i co, ond e pode m ser cri a dos out r os
cont r ol es com o obj et i vo de or ga ni z ar ou a gr up ar compon e nt es vi su ai s.

E Sintaxe: TPanel( ) :New( [anRow], [anCol], [acText], [aoWnd], [aoFont],
[alCentered], [lPar6], [anClrText], [anClrBack], [anWidth],
[anHeight], [alLowered], [alRaised] )

E Parmetros:

nRow Nu mri co v er t i cal e m pi x el .
nCol Nu mri co hori z ont al e m pi x el .
cText Te xt o a ser e xi bi do ao f undo.
oWnd Obj et o da j a nel a ou cont rol e ond e se r cri a do o obj et o.
oFont Car act er st i cas da f ont e do t e xt o qu e a pa r ecer ao f undo.
lCentered Exi be o t e xt o do t t ul o ce nt r al i z a do.
lPar6 Reser v a do.
nClrText Cor do t e xt o d e cont r ol e.
nClrBack Cor do f undo d e cont r ol e.
nWidth Lar gur a do cont rol e e m pi x el .
nHeight Al t ur a do cont r ol e e m pi x el .
lLowered Exi be o pai nel r ebai x a do e m r el ao a o cont r ol e d e f undo.
lRaised
Exi be a bor da do cont r ol e r ebai x a do e m r el ao ao cont r ol e de
f undo.


- 184 -

ADVPL Completo



Comando SAY - Objeto: TSay( )

O coma ndo SAY ou obj e t o TSa y e xi be o cont e do de t e xt o est t i co sobr e u ma j a nel a .

E Sintaxe SAY:


@ 4,6 SAY "Cdigo:" SIZE 70,7 PIXEL OF oTPanel1


E Sintaxe TSay( ) : TSay( ):New( [anRow], [anCol], [abText], [aoWnd],
[acPicture], [aoFont], [lPar7], [lPar8], [lPar9], [alPixels],
[anClrText], [anClrBack], [anWidth], [anHeight], [lPar15], [lPar16],
[lPar17], [lPar18], [lPar19] )

E Parmetros:

anRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
anCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
abText
Code- Bl ock, opci on al . Qu a ndo e x ecut a do de v e r et or n ar u ma
ca dei a de car act er es a ser e xi bi da .
aoWnd Obj et o, opci on al . Ja nel a ou di l ogo onde o cont r ol e ser cri a do.
acPicture
Car act er e, opci on al . Pi ct ur e d e f or ma t a o do cont e do a ser
e xi bi do.
aoFont
Obj et o, opci on al . Obj et o t i po t Font par a confi gur ao do t i po de
f ont e qu e ser ut ili z a do par a e xi bi r o cont e do.
lPar7 Reser v a do.
lPar8 Reser v a do.
lPar9 Reser v a do.
alPixels
Lgi co, opci on al . Se . T. consi der a coor de n a das passa das e m
pi x el s se . F. , pa dr o, consi der a as coor d e n a das passa das e m
car act er es.
anClrText Nu mri co, opci onal . Cor do cont e do do cont rol e.
anClrBack Nu mri co, opci onal . Cor do f undo do cont rol e.
anWidth Nu mri co, opci onal . Lar gur a do cont rol e e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
lPar15 Reser v a do.
lPar16 Reser v a do.
lPar17 Reser v a do.
lPar18 Reser v a do.
lPar19 Reser v a do.


- 185 -

ADVPL Completo



Comando MSGET - Objeto: TGet( )

O coma ndo MsGet ou o obj et o TGet ut i li z a do par a cri ar u m cont rol e que ar ma z e ne ou al t er e
o cont e do de u ma v a ri v el a t r a v s de di gi t ao. O cont e do da v a ri v el s modi fi ca do
qu a ndo o cont r ol e per d e o f oco d e edi o par a out ro cont rol e.

E Sintaxe MSGET:


@ 3,192 MSGET dData PICTURE "99 / 99 / 99" SIZE 40,7 PIXEL OF oTPanel1



E Sintaxe TGet( ) :New( [anRow], [anCol], [abSetGet], [aoWnd], [anWidth],
[anHeight], [acPict], [abValid], [anClrFore], [anClrBack], [aoFont],
[lPar12], [oPar13], [alPixel], [cPar15], [lPar16], [abWhen], [lPar18],
[lPar19], [abChange], [alReadOnly], [alPassword], [cPar23],
[acReadVar], [cPar25], [lPar26], [nPar27], [lPar28] )

E Parmetros:

anRow Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
anCol Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
abSetGet Bl oco de cdi go, opci on al . Bl oco de cdi go no f or ma t o { | u | I F(
Pcount ( ) > 0, < v a r > : = u, < v ar > ) } qu e o cont rol e ut ili z a par a
a t u ali z ar a v ari v el < v a r > . < v a r > d e v e ser t i po car act er,
nu mri co ou da t a .
aoWnd Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser
cri a do.
anWidth Nu mri co, opci onal . Lar gur a do cont rol e e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
acPict Car act er e, opci onal . Mscar a de f or ma t ao do cont e do a ser
e xi bi do.
abValid Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or na r . T. se o cont e do f or
v li do e . F. qua ndo o cont e do f or i nv li do.
anClrFore Nu mri co, opci onal . Cor de f undo do cont rol e.
anClrBack Nu mri co, opci onal . Cor do t e xt o do cont rol e.
aoFont Obj et o, opci on al . Obj et o t i po t Font utili z a do par a defi ni r as
car act er st i cas da f ont e utili z a da par a e xi bi r o cont e do do
cont r ol e.
lPar12 Reser v a do.
oPar13 Reser v a do.
alPixel Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
cPar15 Reser v a do.
lPar16 Reser v a do.
abWhen Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de f oco
de e nt r a da d e da dos est se ndo ef et u a da n a j a nel a onde o
cont r ol e f oi cri a do. O bl oco de v e r et or n ar . T. se o cont r ol e de v e
per ma n ecer h a bili t a do ou . F. se n o.
lPar18 Reser v a do.

- 186 -

ADVPL Completo


lPar19 Reser v a do.
abChange Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont r ol e
modi fi ca o v al or da v ari v el associ a da .
alReadOnly Lgi co, opci onal . Se . T. o cont r ol e no poder ser edi t a do.
alPassword Lgi co, opci onal . Se . T. o cont r ol e e xi bi r ast eri scos * no
l ugar dos ca r act er es e xi bi dos pel o cont r ol e par a si mul ar
e nt r a da d e se nh a .
cPar23 Reser v a do.
acReadVar Car act er e, opci on al . Nome da v ari v el que o cont rol e de v er
ma ni pul ar, de v er ser a mesma v a ri v el i nf or ma da no
par met ro a bSet Get , e ser o r et or no da f un o Re a dVar ( ) .
cPar25 Reser v a do.
lPar26 Reser v a do.
nPar27 Reser v a do.
lPar18 Reser v a do.


Objeto MsGetDados( )

Obj et o t i po li st a com u ma ou mai s col un as par a ca dast r a me nt o de da dos base a do e m u m
v et or. Su a ut ili z ao e xi ge que sej a ut ili z a do t r s v a ri v ei s com se u escopo Pri v a t e, s o el as :
aRot i na , a He a d er e a COLS.

E Observaes importantes:

O O v et or a He a der d e v e ser const r u do co m base no di ci onri o de da dos.
O O v et or a COLS de v e ser const r u do com base no v et or a He a der, por m de v e -
se cri ar u ma col un a adi ci on al par a o cont r ol e de e xcl uso do r egi st ro, ou
sej a , qu a ndo o usu ri o t ecl ar a t ecl a < DELETE > a li nh a fi car n a cor ci nz a e
est a col un a est ar com o se u v al or i gu al a v er d a dei ro ( . T. ) .
O Qu a ndo i nst a nci a do est e obj et o poss v el sa ber e m que li nh a o usu ri o est
por que o obj et o t r a bal ha com u ma v ari v el de escopo Publi c de nomi n ada n,
se u v al or nu mri co e t er se mpr e no cont e do a li nha e m que o usu ri o
e ncont r a - se com o cursor.








- 187 -

ADVPL Completo


E Sintaxe: MSGETDADOS( ):NEW( nSuperior, nEsquerda, nInferior, nDireita,
nOpc, [ cLinhaOk ], [ cTudoOk ], [ cIniCpos ], [ lApagar ], [ aAlter], ,
[ uPar1 ], [ lVazio ], [ nMax], [ cCampoOk ], [ cSuperApagar ],
[ uPar2 ], [ cApagaOk ], [ oWnd ] )

E Parmetros:

nSuperior
Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de superi or do
obj et o que a cont m.
nEsquerda
Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de esquer da do
obj et o que a cont m.
nInferior
Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de i nf eri or do
obj et o que a cont m.
nDireita
Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de di r ei t a do
obj et o que a cont m.
nOpc
Posi o do el e me nt o do v et or aRot i n a que a MsGet Da dos
usar como r ef er e nci a .
cLinhaOk
F uno e x ecut a da par a v ali dar o cont e xt o da l i nh a a t u al do
a Col s.
cTudoOk
F uno e x ecut a da par a v ali dar o cont e xt o g er al da
MsGet Da dos ( t odo a Col s) .
cIniCpos
Nome dos ca mpos do t i po ca r act er que ut i li z ar o i ncr e me nt o
a ut om t i co. Est e par met r o d e v e ser no f or ma t o + < nome
do pri mei ro ca mpo > + < nome do segundo ca mpo > + . . . .
lApagar Ha bili t a del et ar li nh as do a Col s. Val or pa dr o f al so.
aAlter Vet or com os ca mpos que pod er o ser al t er a dos.
uPar1 Par met r o r eser v a do.
lVazio
Ha bili t a v ali dao da pri mei r a col un a do a Col s par a est a n o
poder est ar v a zi a . Val or pa dr o f al so.
nMax N mer o m xi mo de l i nhas per mi t i das. Val or pa dr o 99.
cCampoOk F uno e x ecut a da n a v ali dao do ca mpo.
cSuperApagar
F uno e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e > .
uPar2 Par met r o r eser v a do.
cApagaOk
F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.
oWnd Obj et o no qu al a MsGet Da dos ser cri a da .


Varivel Private aRotina

Arr a y com as rot i n as que ser o e x ecut a das na MBr owse e que defi ni r o t i po de op er a o que
est se ndo e x ecut a da , por e x e mpl o : Pesqui sar, Vi suali z ar, I ncl ui r, Al t er ar, Excl ui r e out ros.

Est e v et or pr eci sa ser const r u do no f or ma t o :

Elemento Contedo
1 T t ul o da opo.
2 Nome da rot i n a ( F unct i on) .
3 Reser v a do.
4 Oper a o ( 1-Pesqui sar ; 2- Vi suali z ar ; 3- I ncl ui r ; 4- Al t er ar ; 5- Excl uso) .
5
Acesso r el aci on a do a r ot i n a , se est op o n o f or i nf or ma da ne nh u m
acesso ser v al i da do.


- 188 -

ADVPL Completo


Varivel Private aHeader

Arr a y com i nf or maes das col un as, ou sej a , com as car act er st i cas dos ca mpos que est o
cont i das no di ci on ri o de da dos ( SX3) , est e v et or pr eci sa est ar no f or ma t o a bai xo :

Elemento Contedo
1 T t ul o do ca mpo
2 Nome do ca mpo
3 Msca r a do ca mpo
4 Ta ma nho do ca mpo
5 Deci mal do ca mpo
6 Vali dao de usu ri o do ca mpo
7 Uso do ca mpo
8 Ti po do ca mpo ( ca r act er e, nu mri co, da t a e et c. )
9 Pr efi xo da t a b el a
10 Cont e xt o do ca mpo ( r e al ou vi r t u al )

Varivel Private aCols

Vet or com as l i nh as a ser e m edi t a das. As col un as de v e m ser const r u das com base no v et or
a He a d er e mai s u ma l t i ma col un a com o v al or l gi co que det er mi n a se a l i nha f oi e xcl u da ,
i ni ci al me nt e est a d e v er t er o se u cont e do i gual a f al so ( . F. ) .
























- 189 -

ADVPL Completo



22.2.2. Estrutura de um programa utilizando a Modelo2( )

O e x e mpl o a bai xo de monst r a a mont a ge m d e u m progr a ma par a a utili z ao do prot t i po
Model o 2. Ant es de i ni ci ar mos o e x e mpl o v a mos est r ut ur a r o pr ogr a ma .

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Decl ar ao e at ri buio de v ari v eis ;
3 Acesso a t a bel a pri nci pal e sua or de m;
4 Cha ma da da f uno MBrowse ;
5 Fim da funo principal.
6
7 Funo de visualizao, alterao e excluso;
8 Decl ar ao e at ri buio de v ari v eis ;
9 Acesso ao pri mei ro r e gist r o da cha v e e m que est posici ona do na MBrowse ;
10 Mont a ge m das v ari v eis est ticas e m t el a ;
11 Mont a ge m do v e t or a He ader por mei o do dici onrio de da dos ;
12
Mont a ge m do v e t or a COLS de t odos os r e gist ros r ef er ent e a cha v e pri nci pal e m que est
posici onado na MBr owse ;
13 I nst nci a da MsDi al og ;
14 I nst nci a dos obj e t os TSa y e TGe t ;
15 I nst nci a do obj e t o MsGe t Da dos ;
16 Ati v ar o obj e t o pri nci pal que o obj e t o da j a nel a ;
17 Se f or oper ao dif er e nt e de visuali z ao e clicou no bot o OK;
18 A oper ao e de Al t er ao?
19 Cha mar a f uno par a al t er ar os da dos ;
20 Caso cont r ri o
21 Cha mar a f uno par a e xcl ui r os da dos ;
22 Fim da funo de visualizao, alterao e excluso.
23
24 Funo de incluso;
25 Decl ar ao e at ri buio de v ari v eis ;
26 Mont a ge m das v ari v eis est ticas e m t el a ;
27 Mont a ge m do v e t or a He ader por mei o do dici onrio de da dos ;
28
Mont a ge m do v e t or a COLS co m o se u cont e do conf or me o i nici ali z a dor padr o do ca mpo ou
v a zi o, pois t r at a -se de u ma i ncl uso ;
29 I nst nci a da MsDi al og ;
30 I nst nci a dos obj e t os TSa y e TGe t ;
31 I nst nci a do obj e t o MsGe t Da dos ;
32 Ati v ar o obj e t o pri nci pal que o obj e t o da j a nel a ;
33 Se clicou no bot o OK;
34 Cha mar a f uno par a i ncl ui r os da dos ;
35 Fim da funo de incluso.


- 190 -

ADVPL Completo



Rotina principal


#include "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | xModelo2 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Funo exemplo do prottipo Modelo2. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function xModelo2()
Private cCadastro := "Prottipo Modelo 2"
Private aRotina := {}

AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})
AADD( aRotina, {"Visualizar" ,'U_Mod2Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod2Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod2Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod2Mnt',0,5})

dbSelectArea("ZA3")
dbSetOrder(1)
dbGoTop()

MBrowse(,,,,"ZA3")
Return


Rotina de incluso


//+--------------------------------------------------------------------+
//| Rotina | Mod2Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para incluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

User Function Mod2Inc( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2

Local cCodigo := ZA3->ZA3_CODIGO
Local cNome := ZA3->ZA3_NOME
Local dData := dDataBase

Private aHeader := {}
Private aCOLS := {}
Private aREG := {}

dbSelectArea( cAlias )
dbSetOrder(1)


- 191 -

ADVPL Completo


Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd

oTPanel1 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)

oTPanel1:Align := CONTROL_ALIGN_TOP

@ 4, 006 SAY "Cdigo:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 062 SAY "Nome:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 166 SAY "Emissao:" SIZE 70,7 PIXEL OF oTPanel1

@ 3, 026 MSGET cCodigo F3 "SA3" PICTURE "@!" VALID;
Mod2Vend(cCodigo, @cNome);
SIZE 030,7 PIXEL OF oTPanel1

@ 3, 080 MSGET cNome When .F. SIZE 78,7 PIXEL OF oTPanel1
@ 3, 192 MSGET dData PICTURE "99/99/99" SIZE 40,7 PIXEL OF
oTPanel1

oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",;
".T.","+ZA3_ITEM",.T.)
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

ACTIVATE MSDIALOG oDlg CENTER ON INIT ;
EnchoiceBar(oDlg,{|| IIF(U_Mod2TOk(), Mod2GrvI(),;
( oDlg:End(), NIL ) )},{|| oDlg:End() })

Return


Rotina de Visualizao, Alterao e Excluso


//+--------------------------------------------------------------------+
//| Rotina | Mod2Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para Visualizar, Alterar e Excluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

User Function Mod2Mnt( cAlias, nReg, nOpc )

Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2

Local cCodigo := Space(Len(Space(ZA3->ZA3_CODIGO)))
Local cNome := Space(Len(Space(ZA3->ZA3_NOME)))
Local dData := Ctod(Space(8))

Private aHeader := {}

- 192 -

ADVPL Completo


Private aCOLS := {}
Private aREG := {}

dbSelectArea( cAlias )
dbGoTo( nReg )

cCodigo := ZA3->ZA3_CODIGO
cNome := ZA3->ZA3_NOME
cData := ZA3->ZA3_DATA

Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd

oTPane1 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPane1:Align := CONTROL_ALIGN_TOP

@ 4, 006 SAY "Cdigo:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 062 SAY "Nome:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 166 SAY "Emissao:" SIZE 70,7 PIXEL OF oTPanel1

@ 3, 026 MSGET cCodigo When .F. SIZE 30,7 PIXEL OF oTPanel1
@ 3, 080 MSGET cNome When .F. SIZE 78,7 PIXEL OF oTPanel1
@ 3, 192 MSGET dData When .F. SIZE 40,7 PIXEL OF oTPanel1

oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

If nOpc == 4
oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",;
".T.","+ZA3_ITEM",.T.)
Else
oGet := MSGetDados():New(0,0,0,0,nOpc)
Endif
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

ACTIVATE MSDIALOG oDlg CENTER ON INIT ;
EnchoiceBar(oDlg,{|| ( IIF( nOpc==4, Mod2GrvA(), ;
IIF( nOpc==5, Mod2GrvE(), oDlg:End() ) ), oDlg:End() ) },;
{|| oDlg:End() })
Return



- 193 -

ADVPL Completo



Montagem do array aHeader


//+--------------------------------------------------------------------+
//| Rotina | Mod2aHeader | Autor | Robson Luiz (rleg) |Data|01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aHeader. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

Static Function Mod2aHeader( cAlias )
Local aArea := GetArea()

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek( cAlias )
While !EOF() .And. X3_ARQUIVO == cAlias
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL
AADD( aHeader, { Trim( X3Titulo() ),;
X3_CAMPO,;
X3_PICTURE,;
X3_TAMANHO,;
X3_DECIMAL,;
X3_VALID,;
X3_USADO,;
X3_TIPO,;
X3_ARQUIVO,;
X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return


Montagem do array aCols


//+--------------------------------------------------------------------+
//| Rotina | Mod2aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aCOLS. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2aCOLS( cAlias, nReg, nOpc )
Local aArea := GetArea()
Local cChave := ZA3->ZA3_CODIGO
Local nI := 0

If nOpc <> 3
dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )
While !EOF() .And. ;
ZA3->( ZA3_FILIAL + ZA3_CODIGO ) == xFilial( cAlias ) + cChave
AADD( aREG, ZA3->( RecNo() ) )

- 194 -

ADVPL Completo


AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZA3_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return

Efetivao da incluso


//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvI | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para gravar os dados na incluso. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvI()
Local aArea := GetArea()
Local nI := 0
Local nX := 0

dbSelectArea("ZA3")
dbSetOrder(1)
For nI := 1 To Len( aCOLS )
If ! aCOLS[nI,Len(aHeader)+1]
RecLock("ZA3",.T.)
ZA3->ZA3_FILIAL := xFilial("ZA3")
ZA3->ZA3_CODIGO := cCodigo
ZA3->ZA3_DATA := dData
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
MsUnLock()
Endif
Next nI

RestArea(aArea)
Return



- 195 -

ADVPL Completo



Efetivao da alterao


//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvA | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para gravar os dados na alterao. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvA()
Local aArea := GetArea()
Local nI := 0
Local nX := 0

dbSelectArea("ZA3")
For nI := 1 To Len( aREG )
If nI <= Len( aREG )
dbGoTo( aREG[nI] )
RecLock("ZA3",.F.)
If aCOLS[nI, Len(aHeader)+1]
dbDelete()
Endif
Else
RecLock("ZA3",.T.)
Endif

If !aCOLS[nI, Len(aHeader)+1]
ZA3->ZA3_FILIAL := xFilial("ZA3")
ZA3->ZA3_CODIGO := cCodigo
ZA3->ZA3_DATA := dData
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
Endif
MsUnLock()
Next nI
RestArea( aArea )
Return



- 196 -

ADVPL Completo



Efetivao da excluso

//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvE | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para excluir os registros. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvE()
Local nI := 0

dbSelectArea("ZA3")
For nI := 1 To Len( aCOLS )
dbGoTo(aREG[nI])
RecLock("ZA3",.F.)
dbDelete()
MsUnLock()
Next nI
Return

Funo auxiliar: Validao do cdigo do vendedor

//+--------------------------------------------------------------------+
//| Rotina | Mod2Vend | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar o cdigo do vendedor. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2Vend( cCodigo, cNome )
If ExistCpo("SA3",cCodigo) .And. ExistChav("ZA3",cCodigo)
cNome := Posicione("SA3",1,xFilial("SA3")+cCodigo,"A3_NOME")
Endif
Return(!Empty(cNome))


Funo auxiliar: Validao do cdigo do centro de custo na mudana de linha

//+--------------------------------------------------------------------+
//| Rotina | Mod2LOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar a linha de dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function Mod2LOk()
Local lRet := .T.
Local cMensagem := "No ser permitido linhas sem o centro de custo."
If !aCOLS[n, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Endif
Endif
Return( lRet )



- 197 -

ADVPL Completo


Funo auxiliar: Validao do cdigo do centro de custo para todas as linhas


//+--------------------------------------------------------------------+
//| Rotina | Mod2TOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar toda as linhas de dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

User Function Mod2TOk()
Local lRet := .T.
Local nI := 0
Local cMensagem := "No ser permitido linhas sem o centro de custo."

For nI := 1 To Len( aCOLS )
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If !aCOLS[nI, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Exit
Endif
Endif
Next nI
Return( lRet )


22.2.3. Funo Modelo2( )

A f uno Model o2( ) u ma i nt erf ace pr - d efi ni da pel a Mi crosi ga que i mpl e me nt a de f or ma
pa droni z a da os compont es necessri os a ma ni pul ao de est r ut ur as de da dos n as qu ai s o
ca beal ho e os i t e ns da i nf or mao compar t i l h a m o mesmo r egi st ro f sico.

Se u obj et i vo a t ua r co mo u m f aci li t a dor de codi fi cao, per mi ti ndo a utili z ao dos r ecursos
bsi cos dos segui nt es compon e nt es vi su ai s :

O MsDialog( )
O TGet( )
O TSay( )
O MsNewGetDados( )
O EnchoiceBar( )



O A f uno Mod el o2( ) no i mpl e me nt a as r egr as de vi su ali z ao,
i ncl uso, al t er ao e e xcl uso, como u ma Ax Ca dast ro( ) ou
Ax F unct i on( ) .

O A i ni ci ali z ao das v a ri v ei s Pri v a t e ut i li z a da nos ca b eal hos e roda p s,
be m como a i ni ci ali z ao e gr a v a o do a Col s de v e m ser r e al i z a das
pel a rot i n a que supor t a a e x ecu o da Mod el o2( ) .

O Da mesma f or ma , o Browse de v e ser t r a t a do por est a rot i n a , se ndo
comu m a Mod el o2( ) est ar vi ncul a da ao uso d e u ma MBr owse( ) .

- 198 -

ADVPL Completo



E Sintaxe: Modelo2( [cTitulo], [aCab], [aRoda], [aGrid], [nOpc], [cLinhaOk],
[cTudoOk] )

E Parmetros:

cTitulo T t ul o da j a nel a
aCab Arr a y cont e ndo as i nf or maes que ser o e xi bi das no ca beal ho na f or ma de
Enchoi ce( )
a Ca b[ n] [ 1] ( Car act er e) : = Nome da v a ri v el pri v a t e que ser vi ncul a da ao
ca mpo da Enchoi ce( ) .
a Ca b[ n] [ 2] ( Arr a y) : = Arr a y com as coor de na das do ca mpo n a t el a { Li nh a ,
Col un a }
a Ca b[ n] [ 3] ( Car act er e) : = T t ul o do ca mpo n a t el a
a Ca b[ n] [ 4] ( Car act er e) : = Pi ct ur e d e f or ma t a o do get ( ) do ca mpo.
a Ca b[ n] [ 5] ( Car act er e) : = F uno d e v al i dao do get ( ) do ca mpo.
a Ca b[ n] [ 6] ( Car act er e) : = Nome da consul t a pa dr o qu e ser e x ecut a da
par a o ca mpo vi a t ecl a F 3
a Ca b[ n] [ 7] (Lgi co) : = Se o ca mpo est a r l i vr e par a di gi t ao.

aRoda Arr a y cont e ndo as i nf or maes que ser o e xi bi das no ca beal ho na f or ma de
Enchoi ce( ) , no mesmo f or ma t o que o a Ca b.
aGrid Arr a y cont e ndo as coor de n a das da Get Da dos( ) n a t el a . Pa dr o : =
{ 44, 5, 118, 315 }
nOpc Op o sel eci on a da na MBr owse, ou que desej e ser passa da par a cont rol e da
Model o2, a onde :
2 Vi su ali z ar
3 - I ncl ui r
4 - Al t er ar
5 - Excl ui r
cLinhaOk F uno par a v al i dao da li nh a n a Get Da dos( )
cTudoOk F uno par a v al i dao n a confi r ma o da t el a de i nt erf ace da Mod el o2( ) .

E Retorno:

Lgico I ndi ca se a t el a da i nt erf ace Model o2( ) f oi confi r ma da ou ca ncel a da pel o
usu ri o.










- 199 -

ADVPL Completo



Exemplo: Utilizao da Modelo2( ) para visualizao do Cadastro de Tabelas (SX5)


#include "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | MBRW2SX5| Autor | ARNALDO RAYMUNDO JR. | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | UTILIZACAO DA MODELO2() PARA VISUALIZAO DO SX5. |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+

USER FUNCTION MBrw2Sx5()

Local cAlias := "SX5"

Private cCadastro := "Arquivo de Tabelas"
Private aRotina := {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"U_SX52Vis" ,0,2})
AADD(aRotina,{"Incluir" ,"U_SX52Inc" ,0,3})
AADD(aRotina,{"Alterar" ,"U_SX52Alt" ,0,4})
AADD(aRotina,{"Excluir" ,"U_SX52Exc" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)

Return

USER FUNCTION SX52INC(cAlias,nReg,nOpc)

//Local nUsado := 0
Local cTitulo := "Inclusao de itens - Arquivo de Tabelas"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo
2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no
modelo2 - Padrao: {44,5,118,315}
// Linha Inicial - Coluna Inicial - +Qts Linhas - +Qts
Colunas : {080,005,050,300}
Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da
Modelo 2
Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2
Local lRetMod2 := .F. // Retorno da funo Modelo2 - .T. Confirmou / .F.
Cancelou
Local nColuna := 0

// Variaveis para GetDados()
Private aCols := {}
Private aHeader := {}

- 200 -

ADVPL Completo



Exemplo (continuao):

// Variaveis para campos da Enchoice()
Private cX5Filial := xFilial("SX5")
Private cX5Tabela := SPACE(5)

// Montagem do array de cabealho
// AADD(aCab,{"Varivel" ,{L,C} ,"Ttulo","Picture","Valid","F3",lEnable})
AADD(aCab,{"cX5Filial" ,{015,010} ,"Filial","@!",,,.F.})
AADD(aCab,{"cX5Tabela" ,{015,080} ,"Tabela","@!",,,.T.})

// Montagem do aHeader
AADD(aHeader,{"Chave" ,"X5_CHAVE","@!",5,0,"AllwaysTrue()",;
"","C","","R"})
AADD(aHeader,{"Descricao" ,"X5_DESCRI","@!",40,0,"AllwaysTrue()",;
"","C","","R"})

// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)

// Inicializao do aCols
For nColuna := 1 to Len(aHeader)

If aHeader[nColuna][8] == "C"
aCols[1][nColuna] := SPACE(aHeader[nColuna][4])
ElseIf aHeader[nColuna][8] == "N"
aCols[1][nColuna] := 0
ElseIf aHeader[nColuna][8] == "D"
aCols[1][nColuna] := CTOD("")
ElseIf aHeader[nColuna][8] == "L"
aCols[1][nColuna] := .F.
ElseIf aHeader[nColuna][8] == "M"
aCols[1][nColuna] := ""
Endif

Next nColuna

aCols[1][Len(aHeader)+1] := .F. // Linha no deletada
lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)

IF lRetMod2
//MsgInfo("Voc confirmou a operao","MBRW2SX5")
For nLinha := 1 to len(aCols)
// Campos de Cabealho
Reclock("SX5",.T.)
SX5->X5_FILIAL := cX5Filial
SX5->X5_TABELA := cX5Tabela
// Campos do aCols
//SX5->X5_CHAVE := aCols[nLinha][1]
//SX5->X5_DESCRI := aCols[nLinha][2]
For nColuna := 1 to Len(aHeader)
SX5->&(aHeader[nColuna][2]) := aCols[nLinha][nColuna]
Next nColuna
MsUnLock()
Next nLinha
ELSE
MsgAlert("Voc cancelou a operao","MBRW2SX5")
ENDIF
Return

- 201 -

ADVPL Completo



22.3. Modelo3( )

O nome Mod el o 3, assi m como a Model o 2 f oi concei t ua do pel a Mi crosi ga por se t r a t a r d e u m
prot t i po d e t el a par a e nt r a da de da dos. I ni ci al me nt e v a mos d esmi st i fica doi s pont os :

O Funo Modelo3( ) Tr a t a - se d e u ma f un o pront a que cont e mpl a o prot t i po
Model o 3, por m, est e u m assunt o qu e n o i r e mos t r a t ar a qui , vi st o que
u ma f unci onali da de si mpl es que qu a ndo necessri o i nt er vi r e m al go n a rot i n a
no h mui t o r ecurso p ar a t al .

O Prottipo Modelo 3 Tr a t a - se de u ma t el a , como a fi gur a a bai xo, onde se u
obj et i vo ef et u ar a ma nut e no e m v ri os r egi st ros de u ma s v e z r el aci on a da
a out r o r egi st r o d e out r a t a bel a , ou sej a , a qui t er e mos o r el aci on a me nt o d e
r egi st ros pai e fi l ho, e nt o pr eci so se pr e ocupar com est e r el aci ona me nt o.
Por e x e mpl o : ef et u ar a ma nut e no e m u m pedi do de v e ndas, ond e t er u m
r egi st ro e m u ma t a b el a r ef er e nt e ca b ea do pedi do e out r a t a b el a com os
r egi st ros r ef er e nt es a os i t e ns dest e pedi do d e v e ndas.

Par a ga nh ar mos t e mpo n o ser a pr ese nt a do a qui t oda a e x pl i cao e mont a g e ns pa r a a
f uno EnchoiceBar, coma ndo MsDialog, Say e MsGet e par a os v et or es aHeader e
aCOLS, e nt r et a nt o t odos est es est a r o na codi fi cao do cdi go f ont e. A fi gur a a bai xo most r a
e x a t a me nt e o que a t el a prot t i po Model o 3 :



Figura: Prottipo Modelo 3

- 202 -

ADVPL Completo



Est e pr ot t i po const i t u do de MsDi al og, Enchoi ce Bar , Enchoi ce, MsGet Da dos, Sa y e Get .

Di a nt e dos e x post os a t o mome nt o houv e u m novo nome par a ns, el e a f uno Enchoi ce , o
que ?

Funo Enchoice( ) Objeto MsMGet( )

A f uno Enchoi ce ou o obj et o MsMGet s o r ecursos base a dos no di ci on ri o de da dos pa r a
v eri fi car ca mpos obrigatrios, v ali daes, ga t i l hos, consul t a pa dr o e et c. Assi m t a mb m par a
cri ar past as d e ca dast r os. Est es pode m ser usa dos t a nt o co m v ari v ei s de me mri as com o
escopo Pri v a t e co mo di r et a me nt e os ca mpos da t a bel a que se r ef er e. A diferena entre a f uno
Enchoi ce e o obj et o MsMGet que a f uno no r et or n a o nome da v ari v el de obj et o
e x por t v el cri a do.

A est r ut ur a par a mont a r u m pr ogr a ma com o prot t i po model o 3 se mel h a nt e ao pr ot t i po
model o 2, por m a di f er e na r e al a utili z ao da f uno Enchoi ce ou o obj et o MsMGet , par a
est e docu me nt o i r e mos t r a bal h ar com a f un o.

E Sintaxe: Enchoice( cAlias, nReg, nOpc, aAc, cOpc, cTextExclui, aAcho, aPos,
aCpos, nNum, nColMens, cMensagem, cTudOk, oObj, lVirtual)

E Parmetros:

cAlias Ali as do da dos a ser e m ca dast r a dos.
nReg N mer o do r egi st ro da t a bel a a ser edi t a do.
uPar1 Par met r o r eser v a do.
uPar2 Par met r o r eser v a do.
uPar3 Par met r o r eser v a do.
aAcho Vet or com os ca mpos que ser o a pr ese nt a dos pel a MsMGet .
aPos Vet or com as coor d e n a das ond e a MsMGet ser cri a da no
f or ma t o { coor d. sup eri or, coor d. esquer da , coor d. di r ei t a ,
coor d. i nf eri or } . F uno e x ecut a da par a v al i dar o cont e xt o da
li nh a a t u al do a Col s.
aCpos Vet or com os ca mpos que pod er o ser al t er a dos.
uPar4 Par met r o r eser v a do. Nome dos ca mpos do t i po ca r act er que
utili z ar o i ncr e me nt o a ut om t i co. Est e par met r o de v e ser no
f or ma t o + < nome do pri mei ro ca mpo > + < nome do segundo
ca mpo > + . . . .
uPar5 Par met r o r eser v a do.
uPar6 Par met r o r eser v a do.
uPar7 Par met r o r eser v a do.
oWnd Obj et o no qual a MsMGet ser cri a da .
uPar8 Par met r o r eser v a do.
lMemoria I ndi ca se ser usa do v a ri v ei s de me mri a ou os ca mpos da
t a bel a par a ca dast r a me nt o dos da dos. Val or pa dr o f al so.
lColuna I ndi ca se a MsMGet ser a pr ese nt a da com u m obj et o por l i nh a
( u ma col una ) . Val or pa dr o f al so. Par met r o r eser v a do.
uPar9 Par met r o r eser v a do.
lSemPastas I ndi ca se no ser usa do as Past as d e Ca dast r o n a MsMGet .
F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.



- 203 -

ADVPL Completo


Val e l e mbr ar que ns progr a ma dor es r e a pr ov ei t a mos mui t o o que j e xi st e, i st o pa r a
si mpl esme nt e ga nh ar mos t e mpo, e no caso da utili z ao da f uno Enchoi ce pr eci so cri ar as
v ari v ei s de me mri as que l e v a m o mesmo nome dos ca mpos da t a bel a e m quest o. Por
e x e mpl o o ca mpo A2_ NOME da t a bel a SA2 ( ca dast r o de f or n ecedor es) qu a ndo quer e mos
r ef er e nci ar o ca mpo usa - se o pr efi xo da t a bel a e o ca mpo e m quest o, dest a f or ma :


SA2->A2_NOME


Agor a qu a ndo quer e mos r ef er e nci ar a u ma v ari v el que est com o cont e do do mesmo
ca mpo cri a mos out r o r ecurso, d est a f or ma :


M->A2_NOME


E pa r a cri ar v a ri v ei s com o nome do ca mpo utili z a mos u m cdi go de bl oco ( code - bl ock) e
mai s u m l ao de l ei t ur a par a a t ri bui r v al or es i ni ci ai s a ca da u ma del a . Ent o fi ca assi m o
procedi me nt o :


Private bCampo := { |nField| Field(nField) }


E e m out ro mome nt o a prov ei t a mos est v ari v el bCa mpo pa r a f aci li t ar a a t ri bui o, v ej a o
e x e mpl o a bai xo :


For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := Atribuio inicial ou atribuio de valor
Next nX


Ou sej a , f a z er par a t odos os ca mpos, e a ca da ca mpo cri ar a v ari v el com a a t ri bui o i ni ci al
ou a t ri bui o de v al or.












- 204 -

ADVPL Completo



22.3.1. Estrutura de um programa utilizando a Modelo3( )

O e x e mpl o a bai xo de monst r a a mont a ge m d e u m progr a ma par a a utili z ao do prot t i po
Model o 3. Ant es de i ni ci ar mos o e x e mpl o v a mos est r ut ur a r o pr ogr a ma .

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Decl ar ao e at ri buio de v ari v eis ;
3 Acesso a t a bel a pri nci pal e sua or de m;
4 Cha ma da da f uno MBrowse ;
5 Fim da funo principal.
6
7 Funo de visualizao, alterao e excluso;
8 Decl ar ao e at ri buio de v ari v eis ;
9 Acesso ao pri mei ro r e gist r o da cha v e e m que est posici ona do na MBrowse ;
10 Const r uo das v ari v eis de me mri a M- > ???;
11 Mont a ge m do v e t or a He ader por mei o do dici onrio de da dos ;
12
Mont a ge m do v e t or a COLS de t odos os r egist r os r ef er e nt e a cha v e pri nci pal e m que est
posici onado na MBr owse ;
13 I nst nci a da MsDi al og ;
14 Ex ecuo da f uno Enchoice ;
15 I nst nci a do obj e t o MsGe t Da dos ;
16 Ati v ar o obj e t o pri nci pal que o obj e t o da j a nel a ;
17 Se f or oper ao dif er e nt e de visuali z ao e clicou no bot o OK;
18 A oper ao e de Al t er ao?
19 Cha mar a f uno par a al t er ar os da dos ;
20 Caso cont r ri o
21 Cha mar a f uno par a e xcl ui r os da dos ;
22 Fim da funo de visualizao, alterao e excluso.
23
24 Funo de incluso;
25 Decl ar ao e at ri buio de v ari v eis ;
26 Const r uo das v ari v eis de me mri a M- > ???;
27 Mont a ge m do v e t or a He ader por mei o do dici onrio de da dos ;
28
Mont a ge m do v e t or a COLS com o se u cont e do confor me o i nici ali z a dor padr o do ca mpo ou
v a zi o, pois t r at a -se de u ma i ncl uso ;
29 I nst nci a da MsDi al og ;
30 I nst nci a dos obj e t os TSa y e TGe t ;
31 I nst nci a do obj e t o MsGe t Da dos ;
32 Ati v ar o obj e t o pri nci pal que o obj e t o da j a nel a ;
33 Se clicou no bot o OK;
34 Cha mar a f uno par a i ncl ui r os da dos ;
35 Fim da funo de incluso.









- 205 -

ADVPL Completo


Rotina principal


//+--------------------------------------------------------------------+
//| Rotina | xModelo3 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Funo exemplo do prottipo Modelo3. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
#Include "Protheus.ch"

User Function xModelo3()
Private cCadastro := "Prottipo Modelo 3"
Private aRotina := {}
Private oCliente
Private oTotal
Private cCliente := ""
Private nTotal := 0

Private bCampo := {|nField| FieldName(nField) }

Private aSize := {}
Private aInfo := {}
Private aObj := {}
Private aPObj := {}
Private aPGet := {}

// Retorna a rea til das janelas Protheus
aSize := MsAdvSize()

// Ser utilizado trs reas na janela
// 1 - Enchoice, sendo 80 pontos pixel
// 2 - MsGetDados, o que sobrar em pontos pixel para este objeto
// 3 - Rodap que a prpria janela, sendo 15 pontos pixel
AADD( aObj, { 100, 080, .T., .F. })
AADD( aObj, { 100, 100, .T., .T. })
AADD( aObj, { 100, 015, .T., .F. })

// Clculo automtico da dimenses dos objetos (altura/largura) em pixel
aInfo := { aSize[1], aSize[2], aSize[3], aSize[4], 3, 3 }
aPObj := MsObjSize( aInfo, aObj )

// Clculo automtico de dimenses dos objetos MSGET
aPGet := MsObjGetPos( (aSize[3] - aSize[1]), 315, { {004, 024, 240, 270} } )

AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})
AADD( aRotina, {"Visualizar" ,'U_Mod3Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod3Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod3Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod3Mnt',0,5})

dbSelectArea("ZA1")
dbSetOrder(1)
dbGoTop()
MBrowse(,,,,"ZA1")
Return

- 206 -

ADVPL Completo


Funo de Incluso


//+--------------------------------------------------------------------+
//| Rotina | Mod3Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para incluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function Mod3Inc( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0

Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}

dbSelectArea( cAlias )
dbSetOrder(1)

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := CriaVar( FieldName( nX ), .T. )
Next nX

Mod3aHeader()
Mod3aCOLS( nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro FROM ;
aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])

// Atualizao do nome do cliente
@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL

// Atualizao do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal ;
PICT "@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL

oGet := MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],;
nOpc,"U_Mod3LOk()",".T.","+ZA2_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;
{|| IIF( Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),
NIL) },;
{|| oDlg:End() })

If nOpcA == 1 .And. nOpc == 3
Mod3Grv( nOpc )
ConfirmSXE()
Endif
Return


- 207 -

ADVPL Completo



Funo de Visualizao, Alterao e Excluso


//+--------------------------------------------------------------------+
//| Rotina | Mod3Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para Visualizar, Alterar e Excluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function Mod3Mnt( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0
Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}
Private aREG := {}

dbSelectArea( cAlias )
dbSetOrder(1)

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := FieldGet( nX )
Next nX

Mod3aHeader()
Mod3aCOLS( nOpc )
DEFINE MSDIALOG oDlg TITLE cCadastro FROM ;
aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])

// Atualizao do nome do cliente
@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL

// Atualizao do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal PICTURE ;
"@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL

U_Mod3Cli()

oGet := MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],;
nOpc,"U_Mod3LOk()",".T.","+ZA2_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;
{|| IIF( Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),
NIL ) },;
{|| oDlg:End() })

If nOpcA == 1 .And. ( nOpc == 4 .Or. nOpc == 5 )
Mod3Grv( nOpc, aREG )
Endif
Return


- 208 -

ADVPL Completo





Funo para montar o vetor aHeader


//+--------------------------------------------------------------------+
//| Rotina | Mod3aHeader | Autor | Robson Luiz (rleg) |Data|01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aHeader. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod3aHeader()
Local aArea := GetArea()

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("ZA2")
While !EOF() .And. X3_ARQUIVO == "ZA2"
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL
AADD( aHeader, { Trim( X3Titulo() ),;
X3_CAMPO,;
X3_PICTURE,;
X3_TAMANHO,;
X3_DECIMAL,;
X3_VALID,;
X3_USADO,;
X3_TIPO,;
X3_ARQUIVO,;
X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return

Funo para montar o vetor aCols


//+--------------------------------------------------------------------+
//| Rotina | Mod3aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aCOLS. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod3aCOLS( nOpc )
Local aArea := GetArea()
Local cChave := ""
Local cAlias := "ZA2"
Local nI := 0

If nOpc <> 3
cChave := ZA1->ZA1_NUM

dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )

- 209 -

ADVPL Completo






Continuao:

While !EOF() .And. ZA2->( ZA2_FILIAL + ZA2_NUM ) == xFilial( cAlias ) +
cChave
AADD( aREG, ZA2->( RecNo() ) )
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZA2_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return


Funo para atribuir o nome do cliente a varivel


//+--------------------------------------------------------------------+
//| Rotina | Mod3Cli | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para atualizar a varivel com o nome do cliente. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

User Function Mod3Cli()
cCliente := Posicione( "SA1", 1, xFilial("SA1") + M->(ZA1_CLIENT + ZA1_LOJA),
"A1_NREDUZ" )
oCliente:Refresh()
Return(.T.)



- 210 -

ADVPL Completo



Funo para validar a mudana de linha na MsGetDados( )

//+--------------------------------------------------------------------+
//| Rotina | Mod3LOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para atualizar a varivel com o total dos itens. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function Mod3LOk()
Local nI := 0
nTotal := 0
For nI := 1 To Len( aCOLS )
If aCOLS[nI,Len(aHeader)+1]
Loop
Endif
nTotal+=Round(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]*;
aCOLS[nI,GdFieldPos("ZA2_PRCVEN")],2)
Next nI
oTotal:Refresh()
Return(.T.)

Funo para validar se todas as linhas esto preenchidas

//+--------------------------------------------------------------------+
//| Rotina | Mod3TOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar os itens se foram preenchidos. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod3TOk()
Local nI := 0
Local lRet := .T.

For nI := 1 To Len(aCOLS)
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_PRODUT")]) .And. lRet
MsgAlert("Campo PRODUTO preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]) .And. lRet
MsgAlert("Campo QUANTIDADE preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_PRCVEN")]) .And. lRet
MsgAlert("Campo PRECO UNITARIO preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif

If !lRet
Exit
Endif
Next i
Return( lRet )


- 211 -

ADVPL Completo


Funo para efetuar a gravao dos dados em ZA1 e ZA2 na incluso, alterao e
excluso.


//+--------------------------------------------------------------------+
//| Rotina | Mod3Grv | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para efetuar a gravao nas tabelas. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod3Grv( nOpc, aAltera )
Local nX := 0
Local nI := 0

// Se for incluso
If nOpc == 3
// Grava os itens
dbSelectArea("ZA2")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If !aCOLS[ nX, Len( aCOLS ) + 1 ]
RecLock( "ZA2", .T. )
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[nI, 2] ) ),
aCOLS[nX,nI] )
Next nI
ZA2->ZA2_FILIAL := xFilial("ZA2")
ZA2->ZA2_NUM := M->ZA1_NUM
MsUnLock()
Endif
Next nX

// Grava o Cabealho
dbSelectArea( "ZA1" )
RecLock( "ZA1", .T. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial( "ZA1" ) )
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next nX
MsUnLock()
Endif

// Se for alterao
If nOpc == 4
// Grava os itens conforme as alteraes
dbSelectArea("ZA2")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If nX <= Len( aREG )
dbGoto( aREG[nX] )
RecLock("ZA2",.F.)
If aCOLS[ nX, Len( aHeader ) + 1 ]
dbDelete()
Endif
Else


- 212 -

ADVPL Completo


Continuao:

If !aCOLS[ nX, Len( aHeader ) + 1 ]
RecLock( "ZA2", .T. )
Endif
Endif

If !aCOLS[ nX, Len(aHeader)+1 ]
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[ nI, 2] ) ),;
aCOLS[ nX, nI ] )
Next nI
ZA2->ZA2_FILIAL := xFilial("ZA2")
ZA2->ZA2_NUM := M->ZA1_NUM
Endif
MsUnLock()
Next nX

// Grava o Cabealho
dbSelectArea("ZA1")
RecLock( "ZA1", .F. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial("ZA1"))
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next
MsUnLock()
Endif

// Se for excluso
If nOpc == 5
// Deleta os Itens
dbSelectArea("ZA2")
dbSetOrder(1)
dbSeek(xFilial("ZA2") + M->ZA1_NUM)
While !EOF() .And. ZA2->(ZA2_FILIAL + ZA2_NUM) == xFilial("ZA2") +;
M->ZA1_NUM
RecLock("ZA2")
dbDelete()
MsUnLock()
dbSkip()
End

// Deleta o Cabealho
dbSelectArea("ZA1")
RecLock("ZA1",.F.)
dbDelete()
MsUnLock()
Endif
Return



- 213 -

ADVPL Completo



22.3.2. Funo Modelo3( )

A f uno Mod el o3) u ma i nt erf ace pr - d efi ni da pel a Mi crosi ga que i mpl e me nt a de f or ma
pa droni z a da os compont es necessri os a ma ni pul ao de est r ut ur as de da dos n as qu ai s o
ca beal ho e os i t e ns da i nf or mao est o e m t a bel as sepa r a das.

Se u obj et i vo a t u a r co mo u m f aci li t a dor de codi fi cao, per mi ti ndo a utili z ao dos r ecursos
bsi cos dos segui nt es compon e nt es vi su ai s :

O MsDialog( )
O Enchoice( )
O EnchoiceBar( )
O MsNewGetDados( )




O A f uno Mod el o3( ) no i mpl e me nt a as r egr as de vi su ali z ao,
i ncl uso, al t er ao e e xcl uso, como u ma Ax Ca dast ro( ) ou
Ax F unct i on( ) .

O A i ni ci ali z a o dos ca mpos ut i li z a dos n a Enchoi ce( ) de v e ser r e ali z a das
pel a rot i n a que supor t a a e x ecu o da Mod el o3( ) , nor mal me nt e
a t r a v s do uso da f un o RegToMe mor y( ) .

O Da mesma f or ma , o Browse de v e ser t r a t a do por est a rot i n a , se ndo
comu m a Mod el o3( ) est ar vi ncul a da ao uso d e u ma MBr owse( ) .


E Sintaxe: Modelo3 ( [cTitulo], [cAliasE], [cAliasGetD], [aCposE], [cLinOk],
[cTudOk], [nOpcE], [nOpcG], [cFieldOk] )

E Parmetros:

cTitulo T t ul o da j a nel a
cAliasE Ali as da t a bel a que ser ut ili z a da n a Enchoi ce
cAliasGetD Ali as da t a bel a que ser ut ili z a da na Get Da dos
aCposE
Nome dos ca mpos, p er t e nce nt es a o Al i as especi fi ca do o pa r met r o cAl i asE,
que de v er o ser e xi bi dos na Enchoi ce :
AADD( a CposE, { nome _ca mpo } )
cLinhaOk F uno par a v al i dao da li nh a n a Get Da dos( )
cTudoOk F uno par a v al i dao n a confi r ma o da t el a de i nt erf ace da Mod el o2( ) .
nOpcE
Op o sel eci ona da n a MBrowse, ou que d esej e ser passa da pa r a cont r ol e da
Enchoi ce da Model o3, a onde :
2 Vi su ali z ar
3 - I ncl ui r
4 - Al t er ar
5 - Excl ui r
nOpcG
Op o sel eci on a da n a MBrowse, ou que d esej e ser passa da pa r a cont r ol e da
Get Da dos da Model o3, aonde :
2 Vi su ali z ar
3 - I ncl ui r
4 - Al t er ar
5 - Excl ui r
cFieldOk Vali dao dos ca mpos d a Enchoi ce( )

- 214 -

ADVPL Completo



E Retorno:

Lgico I ndi ca se a t el a da i nt erf ace Model o2( ) f oi confi r ma da ou ca ncel a da pel o
usu ri o.

Exemplo: Utilizao da Modelo3( ) para Pedidos de Vendas (SC5,SC6)


#INCLUDE "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | MBRWMOD3| Autor | ARNALDO RAYMUNDO JR. |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | EXEMPLO DE UTILIZACAO DA MODELO3(). |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+

User Function MbrwMod3()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock
Private cAlias := "SC5"

AADD(aRotina,{ "Pesquisa","AxPesqui" ,0,1})
AADD(aRotina,{ "Visual" ,"U_Mod3All" ,0,2})
AADD(aRotina,{ "Inclui" ,"U_Mod3All" ,0,3})
AADD(aRotina,{ "Altera" ,"U_Mod3All" ,0,4})
AADD(aRotina,{ "Exclui" ,"U_Mod3All" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)

Return

User Function Mod3All(cAlias,nReg,nOpcx)

Local cTitulo := "Cadastro de Pedidos de Venda"
Local cAliasE := "SC5"
Local cAliasG := "SC6"
Local cLinOk := "AllwaysTrue()"
Local cTudOk := "AllwaysTrue()"
Local cFieldOk:= "AllwaysTrue()"
Local aCposE := {}
Local nUsado, nX := 0


- 215 -

ADVPL Completo



Exemplo (continuao):

//
// Opcoes de acesso para a Modelo 3
//
Do Case
Case nOpcx==3; nOpcE:=3 ; nOpcG:=3 // 3 - "INCLUIR"
Case nOpcx==4; nOpcE:=3 ; nOpcG:=3 // 4 - "ALTERAR"
Case nOpcx==2; nOpcE:=2 ; nOpcG:=2 // 2 - "VISUALIZAR"
Case nOpcx==5; nOpcE:=2 ; nOpcG:=2 // 5 - "EXCLUIR"
EndCase

//
// Cria variaveis M->????? da Enchoice
//
RegToMemory("SC5",(nOpcx==3 .or. nOpcx==4 )) // Se for inclusao ou alteracao
permite alterar o conteudo das variaveis de memoria

//
// Cria aHeader e aCols da GetDados
//
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If Alltrim(x3_campo)=="C6_ITEM"
dbSkip()
Loop
Endif
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
Aadd(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpcx==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
aCols[1,nX]:=CriaVar(aHeader[nX,2])
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

- 216 -

ADVPL Completo



Exemplo (continuao):

If Len(aCols)>0
//
// Executa a Modelo 3
//
aCposE := {"C5_CLIENTE"}

lRetMod3 := Modelo3(cTitulo, cAliasE, cAliasG, aCposE, cLinOk, cTudOk,;
nOpcE, nOpcG,cFieldOk)
//
// Executar processamento
//
If lRetMod3
Aviso("Modelo3()","Confirmada operacao!",{"Ok"})
Endif
Endif

Return





























- 217 -

ADVPL Completo



22.4. Mbrowse( )

A Mbrowse( ) u ma f unci on ali da de de ca dast ro que per mi t e a utili z ao de r ecursos mai s
a pri mor a dos n a vi su ali z ao e ma ni pul ao das i nf or maes do si st e ma , possui ndo os
segui nt es compone nt es :

Browse pa dr o par a vi suali z ao das i nf or maes da base de da dos, de acor do com as
confi gur aes do SX3 Di ci on ri o de Da dos ( ca mpo br owse) .

Par a met ri z ao par a f unes esp ec fi cas par a as aes de vi su ali z ao, i ncl uso,
al t er ao e e xcl uso d e i nf or maes, o que vi a bili z a a ma nut e no de i nf or maes com
est r ut ur a de ca b eal hos e i t e ns.

Recursos a di ci onai s como i de nti fi ca dor es de st a t us de r egi st ros, l ege ndas e fil t ros par a
as i nf or maes.

E Sintaxe: MBrowse(nLin1, nCol1, nLin2, nCol2, cAlias, aFixe, cCpo, nPar08,
cFun, nClickDef, aColors, cTopFun, cBotFun, nPar14, bInitBloc,
lNoMnuFilter, lSeeAll, lChgAll)

E Parmetros:

nLin1 N mer o da Li nh a I ni ci al
nCol1 N mer o da Col una I ni ci al
nLin2 N mer o da Li nh a Fi n al
nCol2 N mer o da Col un a Fi n al
cAlias
Ali as do ar qui vo que ser vi su ali z a do no br owse .
Par a ut i li z ar a f uno MBrowse com a r qui vos d e t r a bal ho, o al i as do
ar qui vo de t r a bal ho de v e ser obri ga t ori a me nt e ' TRB' e o par met ro
a Fi x e t or n a - se obri ga t ri o.
aFixe
Arr a y bi - di me nsi on al cont e ndo os nomes dos ca mpos fi xos pr -
defi ni dos, obri ga ndo a e xi bi o de u ma ou mai s col un as ou a d efi ni o
das col un as qu a ndo a f uno ut ili z a da com ar qui vos de t r a bal ho.
A est r ut ur a do ar r a y di f er e nt e par a a r qui vos que f a z e m par t e do
di ci on ri o de da dos e pa r a a r qui vos de t r a bal ho.

Ar qui vos que f a z e m pa r t e do di ci on ri os de da dos

[ n] [ 1] = > Descri o do ca mpo
[ n] [ 2] = > Nome do ca mpo

Ar qui vos de t r a bal ho

[ n] [ 1] = > Descri o do ca mpo
[ n] [ 2] = > Nome do ca mpo
[ n] [ 3] = > Ti po
[ n] [ 4] = > Ta ma nho
[ n] [ 5] = > Deci mal
[ n] [ 6] = > Pi ct ur e




- 218 -

ADVPL Completo


E Parmetros:

cCpo
Ca mpo a ser v al i da do se est v a zi o ou n o pa r a e xi bi o do bi t ma p de
st a t us. Qu a ndo esse pa r met r o ut ili z a do, a pri mei r a col un a do br owse
ser u m bi t ma p i ndi ca ndo o st a t us do r egi st r o, conf or me as condi es
confi gur a das nos par met r os cCpo, cFun e aColors.
nPar08 Par met r o r eser v a do.
cFun
F uno que r et or n ar u m v al or l gi co par a e xi bi o do bi t ma p de
st a t us.
Qu a ndo esse pa r met r o ut i li z a do, o pa r met r o cCpo
a ut oma t i ca me nt e desconsi der a do.
nClickDef
N mer o da op o do aRot i n a que ser e x ecut a d a qu a ndo f or ef et ua do
u m dupl o cli que e m u m r egi st ro do br owse. O d ef a ul t e x ecut ar a
rot i n a de vi su ali z ao.
aColors
Arr a y bi - di me nsi on al par a possi bili t ar o uso d e di f er e nt es bi t ma ps de
st a t us.
[ n] [ 1] = > F uno qu e r et or n a r u m v al or l gi co par a a e xi bi o do
bi t ma p
[ n] [ 2] = > Nome do bi t ma p que ser e xi bi do qu a ndo a f un o r et or na r
. T. ( Tr ue) .
O nome do bi t ma p de v e ser u m r esource do r eposi t ri o e qu a ndo esse
par met ro ut ili z ado os par met r os cCpo e cFun so
a ut oma t i ca me nt e desconsi der a dos.
cTopFun
F uno que r et or na o li mi t e superi or do fi l t ro base a do n a ch a v e de
ndi ce sel eci on a da .
Esse pa r met r o d e v e ser ut ili z a do e m conj unt o com o pa r met r o
cBotFun.
cBotFun
F uno que r et or na o li mi t e i nf eri or do fi l t ro base a do n a ch a v e d e ndi ce
sel eci on a da .
Esse pa r met r o d e v e ser ut ili z a do e m conj unt o com o pa r met r o
cTopFun.
nPar14 Par met r o r eser v a do.
bInitBloc
Bl oco de cdi go que ser e x ecut a do no ON I NI T da j a nel a do br owse. O
bl oco de cdi go r eceb er como pa r met r o o obj et o da j a nel a do
browse .
lNoMnuFilter
Val or l gi co que defi ne se a opo de fil t ro ser e xi bi da no me nu da
MBr owse.
. T. = > N o e xi be a opo no me nu
. F. = > ( def a ul t ) Exi be a op o no me nu.
A op o d e fi l t ro n a MBr owse est di spon v el a pe n as pa r a TopCon nect .
lSeeAll
I d e nt i fi ca se o Br owse d e v er most r a r t odas as fili ai s.
O v al or def a ul t . F. ( F al se ) , no most r a t odas as fi li ai s. Caso os
par met ros cTopFun ou cBotFun sej a m i nf or ma dos esse par met r o
ser confi gur a do a ut oma t i ca me nt e par a . F. ( F al se )
Par met r o v l i do par t i r da verso 8.11.
A f uno SetBrwSeeAll muda o v al or d ef a ul t desse pa r met r o.
lChgAll
I d e nt i fi ca se o r egi st r o de out r a fi li al est a ut ori z a do par a al t er aes.
O v al or def a ul t . F. ( F al se ) , n o p er mi t e al t er ar r egi st ros d e out r as
fili ai s. Qu a ndo esse pa r met r o est confi gur a do par a . T. ( Tr u e ) , o
par met ro lSeeAll confi gur a do a ut oma t i ca me nt e pa r a . T. ( Tr u e ) .
Caso os par met ros cTopFun ou cBotFun sej a m i nf or ma dos esse
par met ro ser confi gur a do a ut oma t i ca me nt e p ar a . F. ( F al se ) .
Par met r o v l i do par t i r da verso 8.11.
A f uno SetBrwChgAll muda o v al or d ef a ul t desse pa r met r o.

- 219 -

ADVPL Completo



E Variveis private adicionais

aRotina
Arr a y cont e ndo as f unes que ser o e x ecut a das pel a Mbrowse, nel e
ser defi ni do o t i po de oper a o a ser e x ecut a da (i ncl uso, al t er ao,
e xcl uso, vi su ali z ao, pesqui sa , et c. ) , e su a est r ut ur a co mpost a d e
5 ( ci nco) di me nses :

[ n] [ 1] - T t ul o ;
[ n] [ 2] Rot i n a ;
[ n] [ 3] Reser v a do ;
[ n] [ 4] Oper ao ( 1 - pesqui sa ; 2 - vi su ali z ao ; 3 - i ncl uso ; 4 -
al t er ao ; 5 - e xcl uso) ;

El e ai nda pode ser par a met ri z a do com as f unes bsi cas da
Ax Ca dast r o conf or me a bai xo :

AADD( aRot i n a , { " Pesqui sar " , " AxPesqui " , 0, 1 } )
AADD( aRot i n a , { " Vi su ali z ar " , " Ax Vi su al " , 0, 2 } )
AADD( aRot i n a , { " I ncl ui r " , " Ax I ncl ui " , 0, 3 } )
AADD( aRot i n a , { " Al t er ar " , " Ax Al t er a " , 0, 4 } )
AADD( aRot i n a , { " Excl ui r " , " Ax Del et a " , 0, 5 } )
cCadastro T t ul o do browse que ser e xi bi do.

E Informaes passadas para funes do aRotina:

Ao defi ni r as f unes no ar r a y aRot i n a , se o nome da f uno n o f or esp eci fi ca do com ( ) , a
Mbrowse passar como par met ros as segui nt es v a ri v ei s de cont r ol e :

cAlias Nome da r e a de t r a bal ho defi ni da par a a Mbr owse
nReg Recno do r egi st ro posi ci on a do no Br owse
nOpc
Posi o da opo ut ili z ada n a Mbr owse d e acor do com a or de m da
f uno no ar r a y a Rot i n a .



A posi o das f unes no arr a y aRot i n a defi ne o cont e do de u ma v ari v el de
cont r ol e que ser r epassa da par a as f unes ch a ma das a par t i r da Mbrowse ,
conv e nci on a da como n Opc. Dest a f or ma , par a ma nt er o pa dr o da a pli cao
ERP a or de m a ser segui da n a defi ni o do aRot i na :


1. Pesqui sar
2. Vi suali z ar
3. I ncl ui r
4. Al t er ar
5. Excl ui r
6. Li vr e


- 220 -

ADVPL Completo



Exemplo: Funo Mbrowse( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA1()

Local cAlias := "SA1"
Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual",0,2})
AADD(aRotina,{"Incluir" ,"AxInclui",0,3})
AADD(aRotina,{"Alterar" ,"AxAltera",0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta",0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)

Return Nil


Exemplo: Funo Inclui( ) substituindo a funo AxInclui( ) Chamada da Mbrowse( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA1()

Local cAlias := "SA1"
Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_Inclui" ,0,3})


- 221 -

ADVPL Completo



Exemplo (continuao):

AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)

Return Nil


Exemplo: Funo Inclui( ) substituindo a funo AxInclui( ) Funo Inclui( )


/*/
+-----------------------------------------------------------------------------
| Funo | INCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de incluso especfica chamando a AXINCLUI() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function Inclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"
Local nOpcao := 0

nOpcao := AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)

If nOpcao == 1
MsgInfo(Incluso concluda com sucesso!)
ElseIf == 2
MsgInfo(Incluso cancelada!)
Endif

Return Nil









- 222 -

ADVPL Completo



Exemplo: Determinando a opo do aRotina pela informao recebida em nOpc

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | EXCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de excluso especifica chamando a AxDeleta |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function Exclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"
Local nOpcao := 0

nOpcao := AxDeleta(cAlias,nReg,aRotina[nOpc,4])
// Identifica corretamente a opo definida para o funo em aRotinas com mais
// do que os 5 elementos padres.

If nOpcao == 1
MsgInfo(Excluso realizada com sucesso!)
ElseIf == 2
MsgInfo(Excluso cancelada!)
Endif

Return Nil


22.4.1. AxFunctions( )

Conf or me me nci on a do nos t pi cos sobr e as i nt erf aces pa dres Ax Ca dast ro( ) e Mbr owse( ) ,
e xi st e m f unes pa dr es da a pli cao ERP que per mi t e m a vi su ali z ao, i ncl uso, al t er ao e
e xcl uso d e da dos e m f or ma t o si mpl es.

Est as f unes s o pa dres na defi ni o da i nt erf ace Ax Ca dast ro( ) e pod e m ser ut i li z a da s
t a mb m da const r u o no a rr a y aRot i n a ut ili z a do pel a Mbr owse( ) , as qu ai s est o l i st a das a
segui r :

AXPESQUI ( )
AXVISUAL( )
AXINCLUI ( )
AXALTERA( )
AXDELETA( )

- 223 -

ADVPL Completo



AXPESQUI ( )

Sintaxe AXPESQUI ( )
Descrio
F uno de pesqui sa pa dr o e m r egi st ros e xi bi dos pel os br owses do si st e ma ,
a qu al posi ci on a o br owse no r egi st ro pesqui sa do. Exi be u ma t el a que
per mi t e a sel e o do ndi ce a ser ut i li z a do n a pesqui sa e a di gi t ao das
i nf or maes que compe a ch a v e de busca .

AXVISUAL( )

Sintaxe
AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,;
aButtons, lMaximized )
Descrio
F uno de vi su ali z ao pa dr o das i nf or maes de u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXINCLUI ( )

Sintaxe
AxInclui(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
F uno de i ncl uso pa dr o das i nf or maes d e u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXALTERA( )

Sintaxe
AxAltera(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
F uno de al t er a o pa dr o das i nf or maes d e u m r egi st ro, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .


AXDELETA( )

Sintaxe
AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,;
aAuto, lMaximized)
Descrio
F uno de e xcl uso pa dr o das i nf or maes de u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .









- 224 -

ADVPL Completo



22.4.2. FilBrowse( )

A Fil Browse( ) u ma f unci on ali da de que per mi t e a ut ili z ao de fi l t ros na MBr owse( ) .

E Sintaxe: FilBrowse(cAlias, aQuery, cFiltro, lShowProc)

E Parmetros:

cAlias Ali as a ti vo defi ni do par a a Mbr owse( )
aQuery
Est e par met ro d e v er ser i ni ci ali z a do se mpr e v a zi o e sua passa g e m
obri ga t ori a me nt e por r ef er nci a , poi s, se u r et or no ser e nvi a do pa r a a
f uno EndFil Br w( ) .

[ 1] = > Nome do Ar qui vo F si co
[ 2] = > Or d e m corr esponde nt e a o Si nde x
cFiltro Condi o de fi l t ro par a a MBr owse( )
lShowProc

Ha bili t a ( . T. ) ou d esa bi li t a ( . F. ) a a pr ese nt a o da me nsa g e m
Sel eci on a ndo r egi st ros . . . , no pr ocessa me nt o.



22.4.3. EndFilBrw( )

A EndFil Br w( ) u ma f unci onali da de que per mi t e eli mi n ar o fil t ro e o a r qui vo t e mpor ri o
cri a dos p el a Fil Browse( ) .

E Sintaxe: EndFilBrw(cAlias, aQuery)

E Parmetros:

cAlias Ali as a ti vo defi ni do par a a Mbr owse( )
aQuery
Arr a y de r et or no passa do por r ef er nci a par a a Fil Browse( ) .

[ 1] = > Nome do Ar qui vo F si co
[ 2] = > Or d e m corr esponde nt e a o Si nde x








- 225 -

ADVPL Completo



22.4.4. PesqBrw( )

A PesqBr w( ) u ma f unci onali da de que per mi t e a pesqui sa de nt r o da MBr owse( ) . Est a f un o
de v er obri ga t ori a me nt e subst i t ui r a f uno AxPesqui , no arr a y do a Rot i n a , se mpr e que f or
utili z a da a f uno Fil Browse( ) .

E Sintaxe: PesqBrw(cAlias , nReg, bBrwFilter)

E Parmetros:

cAlias Ali as a ti vo defi ni do par a a Mbr owse( )
nReg N mer o do r egi st ro
bBrwFilter
Bl oco de Cdi go que cont m a Fi l Browse( )

Ex : bBr wFi l t er : = { | | Fil Browse( cAli as, a Qu er y , cFil t ro, l ShowPr oc) }



22.4.5. BrwLegenda ( )

A Br wLeg e nda ( ) u ma f unci on ali da de que per mi t e a i ncl uso de l ege ndas n a MBrowse( ) .

E Sintaxe: BrwLegenda(cCadastro , cTitulo, aLegenda)

E Parmetros:

cCadastro
Mesma v a ri v el utili z a da par a a MBrowse , que i de nt i fi ca o ca dast r o que
est e m uso no mome nt o
cTitulo T t ul o (i de nti fi cao) da Leg e nda
aLegenda

Arr a y cont e ndo de d efi ni o da cor e do t e xt o, e x pli ca ti vo sobr e o que
el a r epr ese nt a n a MBr owse

Ex : { { Cor, Te xt o } }




Lista de cores disponveis no Protheus

O BR_AMARELO
O BR_AZ UL
O BR_BRANCO
O BR_CI NZ A
O BR_LARANJA
O BR_MARRON
O BR_VERDE
O BR_VERMELHO
O BR_PI NK
O BR_PRET O




- 226 -

ADVPL Completo



Exemplo: Mbrowse( ) utilizando as funes acessrias


#Include "Protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | MBrwSA2 | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo da MBrowse utilizando a tabela de Cadastro de |
| | Fornecedores |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA2()

Local cAlias := "SA2"
Local aCores := {}
Local cFiltra := "A2_FILIAL == '"+xFilial('SA2')+"' .And. A2_EST == 'SP'"

Private cCadastro := "Cadastro de Fornecedores"
Private aRotina := {}
Private aIndexSA2 := {}
Private bFiltraBrw:= { || FilBrowse(cAlias,@aIndexSA2,@cFiltra) }

AADD(aRotina,{"Pesquisar" ,"PesqBrw" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_BInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"U_BAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"U_BDeleta" ,0,5})
AADD(aRotina,{"Legenda" ,"U_BLegenda" ,0,3})

/*
-- CORES DISPONIVEIS PARA LEGENDA --
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARRON
BR_VERDE
BR_VERMELHO
BR_PINK
BR_PRETO
*/

AADD(aCores,{"A2_TIPO == 'F'" ,"BR_VERDE" })
AADD(aCores,{"A2_TIPO == 'J'" ,"BR_AMARELO" })
AADD(aCores,{"A2_TIPO == 'X'" ,"BR_LARANJA" })
AADD(aCores,{"A2_TIPO == 'R'" ,"BR_MARRON" })
AADD(aCores,{"Empty(A2_TIPO)" ,"BR_PRETO" })

dbSelectArea(cAlias)
dbSetOrder(1)


- 227 -

ADVPL Completo



Exemplo (continuao):

//+------------------------------------------------------------
//| Cria o filtro na MBrowse utilizando a funo FilBrowse
//+------------------------------------------------------------
Eval(bFiltraBrw)

dbSelectArea(cAlias)
dbGoTop()
mBrowse(6,1,22,75,cAlias,,,,,,aCores)

//+------------------------------------------------
//| Deleta o filtro utilizado na funo FilBrowse
//+------------------------------------------------
EndFilBrw(cAlias,aIndexSA2)

Return Nil

//+---------------------------------------
//|Funo: BInclui - Rotina de Incluso
//+---------------------------------------
User Function BInclui(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxInclui(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Incluso efetuada com sucesso!")
Else
MsgInfo("Incluso cancelada!")
Endif

Return Nil

//+-----------------------------------------
//|Funo: BAltera - Rotina de Alterao
//+-----------------------------------------
User Function BAltera(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxAltera(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Alterao efetuada com sucesso!")
Else
MsgInfo("Alterao cancelada!")
Endif

Return Nil


- 228 -

ADVPL Completo



Exemplo (continuao):

//+-----------------------------------------
//|Funo: BDeleta - Rotina de Excluso
//+-----------------------------------------
User Function BDeleta(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxDeleta(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Excluso efetuada com sucesso!")
Else
MsgInfo("Excluso cancelada!")
Endif

Return Nil

//+-------------------------------------------
//|Funo: BLegenda - Rotina de Legenda
//+-------------------------------------------
User Function BLegenda()

Local aLegenda := {}

AADD(aLegenda,{"BR_VERDE" ,"Pessoa Fsica" })
AADD(aLegenda,{"BR_AMARELO" ,"Pessoa Jurdica" })
AADD(aLegenda,{"BR_LARANJA" ,"Exportao" })
AADD(aLegenda,{"BR_MARRON" ,"Fornecedor Rural" })
AADD(aLegenda,{"BR_PRETO" ,"No Classificado" })

BrwLegenda(cCadastro, "Legenda", aLegenda)

Return Nil














- 229 -

ADVPL Completo



22.5. MarkBrowse( )

A f uno Ma r k Brow( ) per mi t e que os el e me nt os de u m br owse, sej a m marca dos ou
desma rca dos. Pa r a ut ili z ao da Mar k Brow( ) necessri o decl ar a r as v ari v ei s cCa dast ro e
aRot i na como Pri v a t e, a nt es da ch a ma da da f uno.

E Sintaxe: MarkBrow (cAlias, cCampo, cCpo, aCampos, lInvert, cMarca, cCtrlM,
uPar8, cExpIni, cExpFim, cAval, bParBloco)

E Parmetros:

cAlias Ali as a ti vo defi ni do par a a Mbr owse( )
cCampo Ca mpo do a r qui vo onde ser f ei t o o cont rol e ( gr a v a o) da marca .
cCpo
Ca mpo onde ser f ei t a a v ali dao par a marcao e e xi bi o do bi t ma p
de st a t us.
aCampos
Vet or de col un as a ser e m e xi bi das no browse, de v e cont er as segui nt es
di me nses :

[ n] [ 1] nome do ca mpo ;
[ n] [ 2] - Nul o ( Nil ) ;
[ n] [ 3] - T t ul o do ca mpo ;
[ n] [ 4] - Mscar a ( pi ct ur e) .
lInvert I nv er t e a marca o.
cMarca St ri ng a ser gr a v a da no ca mpo esp eci fi ca do par a marca o.
cCtrlM F uno a ser e x ecut a da caso desej e ma rca r t odos el e me nt os.
uPar8 Par met r o r eser v a do.
cExpIni
F uno que r et or na o cont e do i ni ci al do fil t ro b ase a da na ch a v e d e
ndi ce sel eci on a da .
cExpFim
F uno que r et or n a o cont e do fi n al do fil t ro base a da n a ch a v e d e
ndi ce sel eci on a da .
cAval F uno a ser e x ecut a da no dupl o cli que e m u m el e me nt o no br owse .
bParBloco Bl oco de cdi go a ser e x ecut a do n a i ni ci ali z ao da j a nel a


E Informaes passadas para funes do aRotina:

Ao defi ni r as f unes no ar r a y aRot i n a , se o nome da f uno n o f or esp eci fi ca do com ( ) , a
Mar k Browse passar co mo par met ros as segui nt es v a ri v ei s de cont r ol e :

cAlias Nome da r e a de t r a bal ho defi ni da par a a Mbr owse
nReg Recno do r egi st ro posi ci on a do no Br owse
nOpc
Posi o da opo ut ili z ada n a Mbr owse d e acor do com a or de m da
f uno no ar r a y a Rot i n a .
cMarca Marca e m uso pel a Mar k Br w( )
lInverte I ndi ca se f oi utili z a da a i nv erso da sel e o dos i t e ns no br owse.


- 230 -

ADVPL Completo



Exemplo: Funo MarkBrow( ) e acessrias


#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Programa | MkBrwSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | MarkBrowse Genrico |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION MkBrwSA1()

Local aCpos := {}
Local aCampos := {}
Local nI := 0
Local cAlias := "SA1"

Private aRotina := {}
Private cCadastro := "Cadastro de Clientes"
Private aRecSel := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"AxInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})
AADD(aRotina,{"Visualizar Lote" ,"U_VisLote" ,0,5})

AADD(aCpos, "A1_OK" )
AADD(aCpos, "A1_FILIAL" )
AADD(aCpos, "A1_COD" )
AADD(aCpos, "A1_LOJA" )
AADD(aCpos, "A1_NOME" )
AADD(aCpos, "A1_TIPO" )

dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len(aCpos)
IF dbSeek(aCpos[nI])
AADD(aCampos,{X3_CAMPO,"",IIF(nI==1,"",Trim(X3_TITULO)),;
Trim(X3_PICTURE)})
ENDIF
Next

DbSelectArea(cAlias)
DbSetOrder(1)

MarkBrow(cAlias,aCpos[1],"A1_TIPO == ' '",aCampos,.F.,GetMark(,"SA1","A1_OK"))

Return Nil

- 231 -

ADVPL Completo


Exemplo: Funo VisLote( ) utilizao das funes acessrias da MarkBrow( )


/*/
+-----------------------------------------------------------------------------
| Programa | VisLote() | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Funo utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
USER FUNCTION VisLote()
Local cMarca := ThisMark()
Local nX := 0
Local lInvert := ThisInv()
Local cTexto := ""
Local cEOL := CHR(10)+CHR(13)
Local oDlg
Local oMemo

DbSelectArea("SA1")
DbGoTop()
While SA1->(!EOF())

// IsMark("A1_OK", cMarca, lInverte)
IF SA1->A1_OK == cMarca .AND. !lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD, SA1->A1_LOJA, SA1->A1_NREDUZ})
ELSEIF SA1->A1_OK != cMarca .AND. lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD,SA1->A1_LOJA, SA1->A1_NREDUZ})
ENDIF

SA1->(dbSkip())
Enddo

IF Len(aRecSel) > 0
cTexto := "Cdigo | Loja | Nome Reduzido "+cEol
// "1234567890123456789012345678901234567890
// "CCCCCC | LL | NNNNNNNNNNNNNNNNNNNN +cEol

For nX := 1 to Len(aRecSel)

cTexto += aRecSel[nX][2]+Space(1)+ "|"+Space(2) +
aRecSel[nX][3]+Space(3)+"|"
cTexto += Space(1)+SUBSTRING(aRecSel[nX][4],1,20)+Space(1)
cTexto += cEOL

Next nX

DEFINE MSDIALOG oDlg TITLE "Clientes Selecionados" From 000,000 TO 350,400
PIXEL
@ 005,005 GET oMemo VAR cTexto MEMO SIZE 150,150 OF oDlg PIXEL
oMemo:bRClicked := {||AllwaysTrue()}
DEFINE SBUTTON FROM 005,165 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg PIXEL
ACTIVATE MSDIALOG oDlg CENTER
LimpaMarca()
ENDIF

RETURN

- 232 -

ADVPL Completo


Exemplo: Funo LimpaMarca( ) utilizao das funes acessrias da MarkBrow( )


/*/
+-----------------------------------------------------------------------------
| Programa | LimpaMarca | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Funo utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION LimpaMarca()

Local nX := 0

For nX := 1 to Len(aRecSel)
SA1->(DbGoto(aRecSel[nX][1]))
RecLock("SA1",.F.)
SA1->A1_OK := SPACE(2)
MsUnLock()
Next nX

RETURN

























- 233 -

ADVPL Completo



23. Arquivos e ndices Temporrios

23.1. Utilizao de arquivos e ndices temporrios

Os ar qui vos e ndi ces t e mpor ri os ou d e t r a bal ho, so g er al me nt e ut ili z a dos e m a mbi e nt e
Code Base, poi s, nest e a mbi e nt e no h os r ecursos d e Joi n e Or d er By, como e xi st e nos
ba ncos d e da dos r el aci on ai s. Por est e mot i vo qu a ndo n ecessi t ar ger a r u ma i nf or mao
or d e n a da e consol i da da, ou sej a , d e v ri as t a b el as, de v er e mos r ecorr er ao uso dos ar qui vos e
dos ndi ces t e mpor ri os.


23.2. Funes para manipulao de arquivos e ndices temporrios


23.2.1. CriaTrab( )

A Cri a Tr a b( ) u ma f u nci on ali da de que per mi t e cri ar u m ar qui vo f si co ou ger ar u m nome
al e a t ri o.

E Sintaxe: CriaTrab(aCampo, lCriar, cExt)

E Parmetros

aCampo
Arr a y com o nome, t i po, t a ma nho e deci mal do ca mpo a ser cri a do no
ar qui vo
lCriar
Se v er da d ei ro ( . T. ) cri ar o a r qui vo, ou f al so ( . F. ) some nt e r et or na u m
nome al e a t ri o
cExt Qu al e xt e ns o d e v er ser cri a do o a r qui vo de t r a bal ho



Os ar qui vos cri a dos co m a f uno CRI ATRAB( ) ser o ger a dos no di r et ri o
esp eci fi ca do como St a r t Pa t h, de acor do com o Root Pa t h confi gur a do no .i ni
da a pli cao.









- 234 -

ADVPL Completo



23.2.2. dbUseArea( )

A dbUse Ar e a ( ) u ma f unci onali da de que per mi t e defi ni r u m ar qui vo de base de da dos, co m
u ma r e a de t r a bal ho dispon v el n a a pli cao.

E Sintaxe: dbUseArea(lNewArea, cDriver, cName, cAlias, lShared, lReadOnly)

E Parmetros

lNewArea I ndi ca se e u m nov o al i as no conj unt o d e al i as a ber t o
cDriver Dri v e ( RddNa me( ) ) do a r qui vo - > DBF CDX / T OPCONN / DBF NTX
cName Nome f si co da t a bel a que ser usa do
cAlias Ali as que ser usa do e nqu a nt o est i v e a b er t o
lShared A t a bel a t er acesso e xcl usi vo ou compar t i l h a do
lReadOnly Se v er da d ei ro a t a bel a ser some nt e l ei t ur a


23.2.3. IndRegua( )

A I ndRegu a ( ) u ma f unci on ali da de que per mi t e cri ar ndi ces t e mpor ri os pa r a o al i as
esp eci fi ca do, pod e ndo ou n o t er u m fi l t ro.

E Sintaxe: IndRegua(cAlias, cNIndex, cExpress, xOrdem, cFor, cMens, lShow)

E Parmetros

cAlias Ali as da t a bel a onde ser ef et ua da o ndi ce / fil t ro t e mpor ri o
cNIndex Nome do ar qui vo d e t r a bal ho r et or n a do p el a f uno Cri a Tr a b( )
cExpress Expresso utilizada na chave do novo ndice
xOrdem Par met r o nul o
cFor Expresso utilizada para filtro
cMens Par met r o nul o
lShow Apr ese nt ar a t el a de pr ogr esso do ndi ce / fil t ro t e mpor ri o




- 235 -

ADVPL Completo



Exemplo 01: Gerao de arquivo e ndice temporrios


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Programa | GeraTrab | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Desc. | Utilizao de arquivos e ndices temporrios |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GeraTrab()

Local aStru := {}
Local aArqTRB := {}
Local nI := 0
Local cIndTRB := ""
Local cNomArq := ""

AADD( aStru, { "PRODUTO" ,"B1_COD" } )
AADD( aStru, { "DESCRICAO" ,"B1_DESC" } )
AADD( aStru, { "GRUPO" ,"BM_GRUPO" } )
AADD( aStru, { "DESCGRUPO" ,"BM_DESC" } )
AADD( aStru, { "TIPO" ,"B1_TIPO" } )
AADD( aStru, { "DESCTIPO" ,"B1_DESC" } )
AADD( aStru, { "CC" ,"CTT_CC" } )
AADD( aStru, { "DESC_CC" ,"CTT_DESC" } )
AADD( aStru, { "SERIE" ,"D2_SERIE" } )
AADD( aStru, { "DOCTO" ,"D2_COD" } )
AADD( aStru, { "TIPONOTA" ,"D2_TP" } )
AADD( aStru, { "EMISSAO" ,"D2_EMISSAO" } )
AADD( aStru, { "CLIENTE" ,"D2_CLIENTE" } )
AADD( aStru, { "LOJA" ,"D2_LOJA" } )
AADD( aStru, { "NOME" ,"A1_NOME" } )
AADD( aStru, { "QTDE" ,"D2_QUANT" } )
AADD( aStru, { "UNIT" ,"D2_PRCVEN" } )
AADD( aStru, { "TOTAL" ,"D2_TOTAL" } )
AADD( aStru, { "ALIQICMS" ,"D2_PICM" } )
AADD( aStru, { "VALICMS" ,"D2_VALICM" } )
AADD( aStru, { "ALIQIPI" ,"D2_IPI" } )
AADD( aStru, { "VALIPI" ,"D2_VALIPI" } )
AADD( aStru, { "VALMERC" ,"D2_TOTAL" } )
AADD( aStru, { "TOTSEMICMS" ,"D2_TOTAL" } )
AADD( aStru, { "VALPIS" ,"D2_TOTAL" } )
AADD( aStru, { "LIQUIDO" ,"D2_TOTAL" } )
AADD( aStru, { "CUSTO" ,"D2_TOTAL" } )

dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len( aStru )
dbSeek( aStru[nI,2] )
AADD( aArqTRB, { aStru[nI,1], X3_TIPO, X3_TAMANHO, X3_DECIMAL } )
Next nI


- 236 -

ADVPL Completo


Exemplo (continuao):

// ndice que ser criado
cIndTRB := "PRODUTO+DTOS(EMISSAO)"

cNomArq := CriaTrab( aArqTRB, .T. )

dbUseArea( .T., "DBFCDX", cNomArq, "TRB", .T. ,.T. )

IndRegua( "TRB", cNomArq, cIndTRB )
dbSetOrder(1)

// ( ... ) fazer o processamento necessrio

dbSelectArea("TRB")
dbCloseArea()

If MsgYesNo("Apagar o arquivo gerado \system\"+cNomArq+".dbf ?",FunName())
Ferase(cNomArq+".dbf")
Ferase(cNomArq+OrdBagExt())
Endif

Return Nil


Qu a ndo cri a mos u m ar qui vo ou u m ndi ce t e mpor ri o ( t r a bal ho) ,
utili z a ndo a f uno I ndr egua , obri ga t ri o a pa g -l os no fi n al do r ot i n a.

A utili z ao de ar qui vo ou ndi ce t e mpor ri o, d e v er ser be m a nali sa da
a fi m de e vi t ar l e nti do no pr ocessa me nt os da r ot i n a .


O arr a y aStru f oi cri a do com base nos ca mpos e xi st e nt es no si st e ma ,
ao i nv s de cri ar mos nov as est r ut ur as dos ca mpos, ut i li z a mos as j
e xi st e nt es no di ci on ri os de da dos ( SX3) .














- 237 -

ADVPL Completo


Exemplo 02: Utilizando dois ndices temporrios com RDD DBFCDX


/*/
+-----------------------------------------------------------------------------
| Programa | IndTwoReg | Autor | MICHEL DANTAS | Data | |
+-----------------------------------------------------------------------------
| Desc. | Utilizao de dois ndices temporrios com DBFCDX |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function IndTwoReg()

LOCAL nOrder := 0
LOCAL cArq1 := CriaTrab(NIL,.F.)
LOCAL cChave1 := "A1_FILIAL+A1_EST"
LOCAL cArq2 := CriaTrab(NIL,.F.)
LOCAL cChave2 := "A1_FILIAL+A1_NOME"

dbSelectArea("SA1")
IndRegua("SA1",cArq1,cChave1,,,"Selecionando Regs...")
IndRegua("SA1",cArq2,cChave2,,,"Selecionando Regs...")

nOrder := RetIndex("SA1")

dbSetIndex(cArq1+OrdBagExt())
dbSetIndex(cArq2+OrdBagExt())

Alert("Agora vai por estado")

dbsetOrder(nOrder+1)
dbGoTop()
While !Eof()
Alert("Estado : " + SA1->A1_EST +" "+" Nome : " + SA1->A1_NOME)
dbSkip()
End

Alert("Agora vai por nome")

dbSetOrder(nOrder+2)
dbGoTop()
While !Eof()
Alert("Estado : " + SA1->A1_EST +" "+" Nome : " + SA1->A1_NOME)
dbSkip()
End

RetIndex("SA1")
Ferase(cArq1+OrdBagext())
Ferase(cArq2+OrdBagext())

Return



- 238 -

ADVPL Completo



24. Relatrios no grficos

Os r el a t ri os d ese nvol vi dos e m ADVPL possu e m u m pa dr o de d ese nvol vi me nt o que mai s
depe nde d e l a yout e t i pos d e par met r os do que qu al quer out ro t i po de i nf or ma o, vi st o que
a t o mome nt o percebe mos que a li ngu a ge m pa dr o da Mi crosi ga mui t o mai s compost a de
f unes g e nri cas do que d e coma ndos.

Est e t i po de r el a t ri o car act eri z a do por u m f or ma t o d e i mpr esso t i po Post Scri pt , e per mi t e
a ger a o de u m ar qui vo e m f or ma t o t e xt o ( . t x t ) , com u ma e xt e nso prpri a da a pli cao ERP
( . # # R) .

A est r ut ur a de u m r el a t ri o n o gr fi co base a da no uso da f uno Set Pri nt ( ) , compl e me nt a da
pel o uso de out r as f unes acessri as, as qu ai s est o d et al h a das no Gui a de Ref er nci a R pi da
que acompa nh a est e ma t eri al .

24.1.1. Estrutura de relatrios baseados na SetPrint( )

Nest e t pi co ser de monst r a da a const r u o d e r el a t ri o n o gr fi co base a do no uso da f un o
Set Pri nt ( ) o qual a t e nde os f or ma t os de base de da dos I SAM e Topconnect , por m n o
cont e mpl a ndo a t ecnol ogi a Prot he us E mb edded SQL.

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Decl ar ao e at ri buio de v ari v eis ;
3 At uali z ao do ar qui vo de pergunt as at r a v s da f uno especfica Cri a SX1( ) ;
4 Defi nio as pergunt as at r a v s da f uno Per gunt e ( ) ;
5 Defi nio das orde ns dispon v eis par a i mpr esso do r el at rio ;
6 Cha ma da da f uno Se tPri nt ;
7 At uali z ao das confi gur aes de i mpr esso com a f uno Se t Def a ul t ( ) ;
8 Ex ecuo da r oti na de i mpr esso at r a v s da f uno Rpt St at us( )
9 Fim da funo principal.

10 Funo de processamento e impresso do relatrio
11 Decl ar ao e at ri buio de v ari v eis ;
12 Defi nio dos fil t ros de i mpr esso, a v ali a ndo o ba ndo de dados e m uso pel a a plicao ;
13 At uali z ao da r gua de processa me nt o com a qua nti da de de r e gist ros que ser processada ;
14 Est r ut ur a pri nci pal de r epe tio par a i mpr esso dos da dos do r el at rio ;
15 Cont rol e da i mpr esso do ca beal ho utili z a ndo a f uno Ca bec( ) ;
16 I mpr esso dos t ot ais do r el at ri o ;
17 I mpr esso do roda p da l ti ma p gi na do r el at rio utili z a ndo a f uno Roda ( ) ;
18 Li mpe z a dos arqui vos e ndices t e mpor ri os cri a dos par a o processa me nt o( ) ;
19 Tr at a me nt o da visuali z ao do r el at rio (i mpr esso e m disco) at r a v s da f uno Our Spool ( )
20 Tr at a me nt os adici onais ao r el at ri o, de acor do co m necessida des especficas ;
21 Li ber ao do buff er de i mpr esso, se j a par a i mpr essor a, se j a par a li mpe z a do cont e do
visuali z a do e m t el a, utili z a ndo a f uno MS_FLUSH( )

22 Fim da funo de processamento e impresso do relatrio

23 Funo de atualizao do arquivo de perguntas
24 Decl ar ao e at ri buio de v ari v eis ;
25 Opo 01 : Adio i ndi vi dual de cada pergunt a no SX1 utili z a ndo a f uno PUTSX1( )

Cri ao de u m ar r a y i ndi vi dual no f or mat o utili z a do pel a PUTSX1( ) cont e ndo ape nas
as i nf or maes da pergunt a que ser adici ona da no SX1.
25 Opo 02 : Adio de u m gr upo de per gunt as no SX1 utili z a ndo a f uno AJUSTASX1( )

Cri ao de u m arr a y no f or mat o utili z a do pel a AJUSTASX1( ) cont e ndo t odas as
pergunt as que ser o at uali z a das.

26 Fim da funo de atualizao do arquivo de perguntas



- 239 -

ADVPL Completo


Funo Principal


//+-----------------------------------------------------------------+
//| Rotina | Inform | Autor | Robson Luiz (rleg) | Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina para gerar relatrio utilizando as funes |
//| | SetPrint() e SetDefault(). |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+-----------------------------------------------------------------+

User Function INFORM()
//+-------------------------
//| Declaraes de variveis
//+-------------------------

Local cDesc1 := "Este relatrio ir imprimir informaes do contas a pagar
conforme"
Local cDesc2 := "parmetros informado. Ser gerado um arquivo no diretrio "
Local cDesc3 := "Spool - INFORM_????.XLS, onde ???? e o nome do usurio."

Private cString := "SE2"
Private Tamanho := "M"
Private aReturn := { "Zebrado",2,"Administrao",2,2,1,"",1 }
Private wnrel := "INFORM"
Private NomeProg := "INFORM"
Private nLastKey := 0
Private Limite := 132
Private Titulo := "Ttulo a Pagar - Ordem de "
Private cPerg := "INFORM"
Private nTipo := 0
Private cbCont := 0
Private cbTxt := "registro(s) lido(s)"
Private Li := 80
Private m_pag := 1
Private aOrd := {}
Private Cabec1 := "PREFIXO TITULO PARCELA TIP EMISSAO VENCTO VENCTO"
Private Cabec1 += "REAL VLR. ORIGINAL PAGO SALDO "
Private Cabec2 := ""
/*
+----------------------
| Parmetros do aReturn
+----------------------
aReturn - Preenchido pelo SetPrint()
aReturn[1] - Reservado para formulrio
aReturn[2] - Reservado para numero de vias
aReturn[3] - Destinatrio
aReturn[4] - Formato 1=Paisagem 2=Retrato
aReturn[5] - Mdia 1-Disco 2=Impressora
aReturn[6] Porta ou arquivo 1-Lpt1... 4-Com1...
aReturn[7] - Expresso do filtro
aReturn[8] - Ordem a ser selecionada
aReturn[9] [10] [n] - Campos a processar se houver
*/




Continuao:

- 240 -

ADVPL Completo



AADD( aOrd, "Fornecedor" )
AADD( aOrd, "Titulo" )
AADD( aOrd, "Emisso" )
AADD( aOrd, "Vencimento" )
AADD( aOrd, "Vencto. Real" )

//Parmetros de perguntas para o relatrio
//+-------------------------------------------------------------+
//| mv_par01 - Fornecedor de ? 999999 |
//| mv_par02 - Fornecedor ate ? 999999 |
//| mv_par03 - Tipo de ? XXX |
//| mv_par04 - Tipo ate ? XXX |
//| mv_par05 - Vencimento de ? 99/99/99 |
//| mv_par06 - Vencimento ate ? 99/99/99 |
//| mv_par07 - Aglut.Fornecedor ? Sim/No |
//+-------------------------------------------------------------+
CriaSx1()

//+-------------------------------------------------
//| Disponibiliza para usurio digitar os parmetros
//+-------------------------------------------------
Pergunte(cPerg,.F.)
//cPerg -> Nome do grupo de perguntas, .T. mostra a tela,;
// .F. somente carrega as variveis

//+---------------------------------------------------
//| Solicita ao usurio a parametrizao do relatrio.
//+---------------------------------------------------
wnrel :=
SetPrint(cString,wnrel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F., ;
Tamanho,.F.,.F.)
//SetPrint(cAlias,cNome,cPerg,cDesc,cCnt1,cCnt2,cCnt3,lDic,aOrd,lCompres,;
//cSize,aFilter,lFiltro,lCrystal,cNameDrv,lNoAsk,lServer,cPortToPrint)

//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif

//+------------------------------------------------------------------
//| Estabelece os padres para impresso, conforme escolha do usurio
//+------------------------------------------------------------------
SetDefault(aReturn,cString)

//+-------------------------------------
//| Verificar se ser reduzido ou normal
//+-------------------------------------
nTipo := IIF(aReturn[4] == 1, 15, 18)

//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif

Continuao:

- 241 -

ADVPL Completo



//+-----------------------------------
//| Chama funo que processa os dados
//+-----------------------------------
RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo dados,;
aguarde...", .T. )

Return

Funo de processamento e impresso


//+-----------------------------------------------------------------+
//| Rotina | ImpRel | Autor | Robson Luiz (rleg) | Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina de processamento e impresso. |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+-----------------------------------------------------------------+

Static Function ImpRel(lEnd)

Local nIndice := 0
Local cArq := ""
Local cIndice := ""
Local cFiltro := ""
Local aCol := {}
Local cFornec := ""
Local nValor := 0
Local nPago := 0
Local nSaldo := 0
Local nT_Valor := 0
Local nT_Pago := 0
Local nT_Saldo := 0
Local cArqExcel := ""
Local cAliasImp
Local oExcelApp

Titulo += aOrd[aReturn[8]]

#IFNDEF TOP
cAliasImp := "SE2"

cFiltro := "E2_FILIAL == '"+xFilial("SE2")+"' "
cFiltro += ".And. E2_FORNECE >= '"+mv_par01+"' "
cFiltro += ".And. E2_FORNECE <= '"+mv_par02+"' "
cFiltro += ".And. E2_TIPO >= '"+mv_par03+"' "
cFiltro += ".And. E2_TIPO <= '"+mv_par04+"' "
cFiltro += ".And. Dtos(E2_VENCTO) >= '"+Dtos(mv_par05)+"' "
cFiltro += ".And. Dtos(E2_VENCTO) <= '"+Dtos(mv_par06)+"' "

If aReturn[8] == 1 //Fornecedor
cIndice := "E2_FORNECE+E2_LOJA+E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cIndice := "E2_NUM+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 3 //Emissao

Continuao:


- 242 -

ADVPL Completo


cIndice := "Dtos(E2_EMISSAO)+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cIndice := "Dtos(E2_VENCTO)+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 5 //Vencimento Real
cIndice := "Dtos(E2_VENCREA)+E2_FORNECE+E2_LOJA"
Endif

cArq := CriaTrab(NIL,.F.)
dbSelectArea(cAliasImp)
IndRegua(cAliasImp,cArq,cIndice,,cFiltro)
nIndice := RetIndex()
nIndice := nIndice + 1
dbSetIndex(cArq+OrdBagExt())
dbSetOrder(nIndice)
#ELSE
cAliasImp := GetNextAlias()

cQuery := "SELECT "
cQuery += "E2_PREFIXO, E2_NUM, E2_PARCELA, E2_TIPO, E2_FORNECE, E2_LOJA,
E2_NOMFOR, "
cQuery += "E2_EMISSAO, E2_VENCTO, E2_VENCREA, E2_VALOR, E2_SALDO "
cQuery += "FROM "+RetSqlName("SE2")+" "
cQuery += "WHERE E2_FILIAL = '"+xFilial("SE2")+"' "
cQuery += "AND E2_FORNECE >= '"+mv_par01+"' "
cQuery += "AND E2_FORNECE <= '"+mv_par02+"' "
cQuery += "AND E2_TIPO >= '"+mv_par03+"' "
cQuery += "AND E2_TIPO <= '"+mv_par04+"' "
cQuery += "AND E2_VENCTO >= '"+Dtos(mv_par05)+"' "
cQuery += "AND E2_VENCTO <= '"+Dtos(mv_par06)+"' "
cQuery += "AND D_E_L_E_T_ <> '*' "
cQuery += "ORDER BY "

If aReturn[8] == 1 //Fornecedor
cQuery += "E2_FORNECE,E2_LOJA,E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cQuery += "E2_NUM,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 3 //Emissao
cQuery += "E2_EMISSAO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cQuery += "E2_VENCTO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 5 //Vencimento Real
cQuery += "E2_VENCREA,E2_FORNECE,E2_LOJA"
Endif

dbUseArea( .T., "TOPCONN", TcGenQry(,,cQuery), cAliasImp, .T., .F. )
dbSelectArea(cAliasImp)

/* Instruo SQL Embedded
----------------------
If aReturn[8] == 1 //Fornecedor
cOrder := "E2_FORNECE,E2_LOJA,E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cOrder := "E2_NUM,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 3 //Emissao
cOrder := "E2_EMISSAO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cOrder := "E2_VENCTO,E2_FORNECE,E2_LOJA"


Continuao:

- 243 -

ADVPL Completo



Elseif aReturn[8] == 5 //Vencimento Real
cOrder := "E2_VENCREA,E2_FORNECE,E2_LOJA"
Endif

BeginSQL Alias cAliasImp
Column E2_EMISSAO As Date
Column E2_VENCTO As Date
Column E2_VENCREA As Date
Column E2_VALOR As Numeric(12)
Column E2_SALDO As Numeric(12)
%NoParser%

SELECT E2_PREFIXO, E2_NUM, E2_PARCELA, E2_TIPO, E2_FORNECE,
E2_LOJA, E2_NOMFOR, E2_EMISSAO, E2_VENCTO, E2_VENCREA, E2_VALOR,
E2_SALDO
FROM %Table:SE2
WHERE
E2_FILIAL = %xFilial% AND
E2_FORNECE BETWEEN %Exp:mv_par01% AND %Exp:mv_par02% AND
E2_TIPO BETWEEN%Exp:mv_par03% AND %Exp:mv_par04% AND
E2_VENCTO BETWEEN %Exp:mv_par05% AND %Exp:mv_par06% AND
%NotDel%
ORDER BY %Order:cOrder%
EndSQL
*/
#ENDIF

dbGoTop()
SetRegua(0)

//+--------------------
//| Coluna de impresso
//+--------------------
AADD( aCol, 004 ) //Prefixo
AADD( aCol, 012 ) //Titulo
AADD( aCol, 024 ) //Parcela
AADD( aCol, 031 ) //Tipo
AADD( aCol, 036 ) //Emissao
AADD( aCol, 046 ) //Vencimento
AADD( aCol, 058 ) //Vencimento Real
AADD( aCol, 070 ) //Valor Original
AADD( aCol, 090 ) //Pago
AADD( aCol, 110 ) //Saldo

cFornec := (cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA

While !Eof() .And. !lEnd

If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif







Continuao:

- 244 -

ADVPL Completo



@ Li, aCol[1] PSay "Cod/Loj/Nome: "+(cAliasImp)->E2_FORNECE+;
"-"+(cAliasImp)->E2_LOJA+" "+(cAliasImp)->E2_NOMFOR
Li ++

While !Eof() .And. !lEnd .And.;
(cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA == cFornec

IncRegua()

If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif

If mv_par07 == 2
@ Li, aCol[1] PSay (cAliasImp)->E2_PREFIXO
@ Li, aCol[2] PSay (cAliasImp)->E2_NUM
@ Li, aCol[3] PSay (cAliasImp)->E2_PARCELA
@ Li, aCol[4] PSay (cAliasImp)->E2_TIPO
@ Li, aCol[5] PSay (cAliasImp)->E2_EMISSAO
@ Li, aCol[6] PSay (cAliasImp)->E2_VENCTO
@ Li, aCol[7] PSay (cAliasImp)->E2_VENCREA
@ Li, aCol[8] PSay (cAliasImp)->E2_VALOR ;
PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay (cAliasImp)->E2_VALOR -;
(cAliasImp)->E2_SALDO ;
PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay (cAliasImp)->E2_SALDO ;
PICTURE "@E 99,999,999,999.99"
Li ++
Endif

nValor += (cAliasImp)->E2_VALOR
nPago += ((cAliasImp)->E2_VALOR-(cAliasImp)->E2_SALDO)
nSaldo += (cAliasImp)->E2_SALDO

nT_Valor += (cAliasImp)->E2_VALOR
nT_Pago += ((cAliasImp)->E2_VALOR-(cAliasImp)->E2_SALDO)
nT_Saldo += (cAliasImp)->E2_SALDO

dbSkip()
End

@ Li, 000 PSay Replicate("-",Limite)
Li ++
@ Li, aCol[1] PSay "TOTAL....."
@ Li, aCol[8] PSay nValor PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay nPago PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay nSaldo PICTURE "@E 99,999,999,999.99"
Li +=2

cFornec := (cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA
nValor := 0
nPago := 0
nSaldo := 0

End


Continuao:

- 245 -

ADVPL Completo



If lEnd
@ Li, aCol[1] PSay cCancel
Return
Endif

@ Li, 000 PSay Replicate("=",Limite)
Li ++
@ Li, aCol[1] PSay "TOTAL GERAL....."
@ Li, aCol[8] PSay nT_Valor PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay nT_Pago PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay nT_Saldo PICTURE "@E 99,999,999,999.99"

If Li <> 80
Roda(cbCont,cbTxt,Tamanho)
Endif

//+----------------------------------------------------------------------
//| Gera arquivo do tipo .DBF com extenso .XLS p/ usurio abrir no Excel
//+----------------------------------------------------------------------
cArqExcel := __RELDIR+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS"
Copy To &cArqExcel

#IFNDEF TOP
dbSelectArea(cAliasImp)
RetIndex(cAliasImp)
Set Filter To
#ELSE
dbSelectArea(cAliasImp)
dbCloseArea()
#ENDIF
dbSetOrder(1)
dbGoTop()

If aReturn[5] == 1
Set Printer TO
dbCommitAll()
OurSpool(wnrel)
EndIf

//+------------------------
//| Abrir planilha MS-Excel
//+------------------------
If mv_par08 == 1
__CopyFile(cArqExcel,"c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS")
If ! ApOleClient("MsExcel")
MsgAlert("MsExcel no instalado")
Return
Endif
oExcelApp := MsExcel():New()
oExcelApp:WorkBooks:Open( "c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS" )
oExcelApp:SetVisible(.T.)
Endif

Ms_Flush()

Return

- 246 -

ADVPL Completo



Funo para gerar o grupo de parmetros no SX1


//+-----------------------------------------------------------------+
//| Rotina | CriaSX1 | Autor | Robson Luiz (rleg)| Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina para criar o grupo de parmetros. |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+-----------------------------------------------------------------+
Static Function CriaSx1()
Local aP := {}
Local i := 0
Local cSeq
Local cMvCh
Local cMvPar
Local aHelp := {}

/******
Parmetros da funo padro
---------------------------
PutSX1(cGrupo,;cOrdem,;
cPergunt,cPerSpa,cPerEng,;
cVar,;
cTipo,;
nTamanho,;
nDecimal,;
nPresel,;
cGSC,;
cValid,;
cF3,;
cGrpSxg,;
cPyme,;
cVar01,;
cDef01,cDefSpa1,cDefEng1,;
cCnt01,;
cDef02,cDefSpa2,cDefEng2,;
cDef03,cDefSpa3,cDefEng3,;
cDef04,cDefSpa4,cDefEng4,;
cDef05,cDefSpa5,cDefEng5,;
aHelpPor,aHelpEng,aHelpSpa,;
cHelp)

Caracterstica do vetor p/ utilizao da funo SX1
---------------------------------------------------
[n,1] --> texto da pergunta
[n,2] --> tipo do dado
[n,3] --> tamanho
[n,4] --> decimal
[n,5] --> objeto G=get ou C=choice
[n,6] --> validao
[n,7] --> F3
[n,8] --> definio 1
[n,9] --> definio 2
[n,10] -> definio 3
[n,11] -> definio 4
[n,12] -> definio 5
***/


- 247 -

ADVPL Completo


Continuao:

AADD(aP,{"Fornecedor de","C",6,0,"G","","SA2","" ,"" ,"","",""})
AADD(aP,{"Fornecedor ate","C",6,0,"G","(mv_par02>=mv_par01)","SA2",;
"" ,"" ,"","",""})
AADD(aP,{"Tipo de","C",3,0,"G","","05" ,"" ,"" ,"","",""})
AADD(aP,{"Tipo ate","C",3,0,"G","(mv_par04>=mv_par03)","05" ,"" ,;
"" ,"","",""})
AADD(aP,{"Vencimento de","D",8,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Vencimento ate","D",8,0,"G","(mv_par06>=mv_par05)","" ,;
"" ,"" ,"","",""})
AADD(aP,{"Aglutinar pagto.de fornec.","N",1,0,"C","","",;
"Sim","No","","",""})
AADD(aP,{"Abrir planilha MS-Excel" ,"N",1,0,"C","","",;
"Sim","No","","",""})

AADD(aHelp,{"Informe o cdigo do fornecedor.","inicial."})
AADD(aHelp,{"Informe o cdigo do fornecedor.","final."})
AADD(aHelp,{"Tipo de ttulo inicial."})
AADD(aHelp,{"Tipo de ttulo final."})
AADD(aHelp,{"Digite a data do vencimento inicial."})
AADD(aHelp,{"Digite a data do vencimento final."})
AADD(aHelp,{"Aglutinar os ttulos do mesmo forne-",;
"cedor totalizando seus valores."})
AADD(aHelp,{"Ser gerada uma planilha para ",;
"MS-Excel, abrir esta planilha?"})

For i:=1 To Len(aP)
cSeq := StrZero(i,2,0)
cMvPar := "mv_par"+cSeq
cMvCh := "mv_ch"+IIF(i<=9,Chr(i+48),Chr(i+87))

PutSx1(cPerg,;
cSeq,;
aP[i,1],aP[i,1],aP[i,1],;
cMvCh,;
aP[i,2],;
aP[i,3],;
aP[i,4],;
0,;
aP[i,5],;
aP[i,6],;
aP[i,7],;
"",;
"",;
cMvPar,;
aP[i,8],aP[i,8],aP[i,8],;
"",;
aP[i,9],aP[i,9],aP[i,9],;
aP[i,10],aP[i,10],aP[i,10],;
aP[i,11],aP[i,11],aP[i,11],;
aP[i,12],aP[i,12],aP[i,12],;
aHelp[i],;
{},;
{},;
"")
Next i

Return


- 248 -

ADVPL Completo


25. Manipulao de arquivos I


25.1. Gerao e leitura de arquivos em formato texto

Ar qui vos do t i po t e xt o ( t a mb m conheci dos co mo pa dr o TXT) so ar qui vos com r egi st ros de
t a ma nho v ari v el . A i ndi cao do fi n al de cada r egi st ro r epr ese nt a da por doi s byt es, 0 D
0A e m he x a d eci mal ou 13 10 e m d eci mal ou, ai nda , CR LF par a pa dr o ASCI I .

Apesa r do t a ma nho dos r egi st ros ser v ari v el , a mai ori a dos si st e mas ger a est e t i po de ar qui vo
com r egi st ros de t a ma nho fi xo, de acor do com u m l a yout espec fi co que i ndi ca qu ai s
so os da dos gr a v a dos.

Par a i l ust r ar est es procedi me nt os, ser o ger a dos a r qui vos t e xt os, com du as f a m li as de
f unes :

1 ) Famlia: n est a f a mli a ser o ut i li z a das as f unes : F Cr e a t e( ) , F Wri t e( ) , F Cl ose( ) ,
FSe e k( ) , F Op e n( ) e FRe a d( ) .


2 ) Famlia: nest a f a mli a ser o ut ili z a das as f unes : F T_FUse( ) , FT_F GoTop( ) ,
FT_FLast Rec( ) , FT_F Eof ( ) , FT_FRe a dLn( ) , F T_F Ski p( ) , FT_F Got o( ) , F T_FRecno( ) .




A di f er e na e nt r e as duas f a m li as, est n a l ei t ur a do ar qui vo t e xt o.
Qu a ndo se t r a t a r de ar qui vo t e xt o com t a ma nho fi xo das li nh as, poder o
ser ut ili z a das as du as f a mli as par a l ei t ur a do ar qui vo, por m, qua ndo se
t r a t ar d e a r qui vo t e xt o com t a ma nho v ari v el das li nhas, some nt e
poder ser ut ili z a a segunda f a mli a , r epr ese nt a da pel as f unes :
FT_FUse( ) , FT_F GoTo( ) , FT_FRecno( ) , FT_F GoTop( ) , FT_FLast Rec( ) ,
FT_F Eof ( ) , FT_FRe a dLn( ) e FT_FSki p( ) .














- 249 -

ADVPL Completo



1. Famlia de funes de gravao e leitura de arquivos texto

Exemplo: Gerao de arquivo TXT, utilizando a primeira famlia de funes


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | GeraTXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Gera o arquivo TXT, a partir do Cadastro de Clientes |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GeraTXT()

//+--------------------------------+
//| Declarao de Variveis |
//+--------------------------------+
Local oGeraTxt
Private cPerg := "EXPSA1"
Private cAlias := "SA1"

//CriaSx1(cPerg)
//Pergunte(cPerg,.F.)
dbSelectArea(cAlias)
dbSetOrder(1)

//+-----------------------------------+
//| Montagem da tela de processamento.|
//+-----------------------------------+

DEFINE MSDIALOG oGeraTxt TITLE OemToAnsi("Gerao de Arquivo Texto") ;
FROM 000,000 TO 200,400 PIXEL

@ 005,005 TO 095,195 OF oGeraTxt PIXEL
@ 010,020 Say " Este programa ira gerar um arquivo texto, conforme os parame- ";
OF oGeraTxt PIXEL
@ 018,020 Say " tros definidos pelo usurio, com os registros do arquivo de ";
OF oGeraTxt PIXEL
@ 026,020 Say " SA1 " OF oGeraTxt PIXEL

DEFINE SBUTTON FROM 070, 030 TYPE 1 ;
ACTION (OkGeraTxt(),oGeraTxt:End()) ENABLE OF oGeraTxt

DEFINE SBUTTON FROM 070, 070 TYPE 2 ;
ACTION (oGeraTxt:End()) ENABLE OF oGeraTxt

DEFINE SBUTTON FROM 070, 110 TYPE 5 ;
ACTION (Pergunte(cPerg,.T.)) ENABLE OF oGeraTxt

ACTIVATE DIALOG oGeraTxt CENTERED

Return Nil


- 250 -

ADVPL Completo


Exemplo (continuao):

/*/
+-----------------------------------------------------------------------------
| Funo | OKGERATXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo chamada pelo boto OK na tela inicial de processamento. |
| | Executa a gerao do arquivo texto. |
+-----------------------------------------------------------------------------
/*/

Static Function OkGeraTxt

//+-----------------------------------------------------------------------------
//| Cria o arquivo texto
//+-----------------------------------------------------------------------------
Private cArqTxt := "\SYSTEM\EXPSA1.TXT"
Private nHdl := fCreate(cArqTxt)

If nHdl == -1
MsgAlert("O arquivo de nome "+cArqTxt+" no pode ser executado! Verifique os
parmetros.","Ateno!")
Return
Endif


// Inicializa a rgua de processamento
Processa({|| RunCont() },"Processando...")

Return Nil

/*/
+-----------------------------------------------------------------------------
| Funo | RUNCONT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo auxiliar chamada pela PROCESSA. A funo PROCESSA |
| | monta a janela com a rgua de processamento. |
+-----------------------------------------------------------------------------
/*/

Static Function RunCont

Local cLin

dbSelectArea(cAlias)
dbGoTop()
ProcRegua(RecCount()) // Numero de registros a processar

While (cAlias)->(!EOF())
//Incrementa a rgua
IncProc()

cLin := (cAlias)->A1_FILIAL
cLin += (cAlias)->A1_COD
cLin += (cAlias)->A1_LOJA
cLin += (cAlias)->A1_NREDUZ
cLin += STRZERO((cAlias)->A1_MCOMPRA*100,16) // 14,2
cLin += DTOS((cAlias)->A1_ULTCOM)//AAAAMMDD
cLin += CRLF


- 251 -

ADVPL Completo



Exemplo (continuao):

//+-------------------------------------------------------------------+
//| Gravao no arquivo texto. Testa por erros durante a gravao da |
//| linha montada. |
//+-------------------------------------------------------------------+

If fWrite(nHdl,cLin,Len(cLin)) != Len(cLin)
If !MsgAlert("Ocorreu um erro na gravao do arquivo."+;
"Continua?","Ateno!")
Exit
Endif
Endif

(cAlias)->(dbSkip())
EndDo

// O arquivo texto deve ser fechado, bem como o dialogo criado na funo
anterior
fClose(nHdl)

Return Nil


Not e que par a a g er a o do a r qui vo TXT f or a m ut ili z a das, basi ca me nt e, as f unes
F Cr e a t e, F Wri t e e F Cl ose que, r espect i v a me nt e, ger a o a r qui vo, a di ci on a da dos e f ech a
o ar qui vo. No e x e mpl o, o f or ma t o est a bel eci do pel a conca t e n a o dos da dos n a
v ari v el cLin a qu al utili z a da na gr a v a o dos da dos. Par a a l ei t ur a d e da dos TXT ser o
utili z a da as f unes F Op e n e FRe a d.

Exemplo: Leitura de arquivo TXT, utilizando a primeira famlia de funes


#Include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Programa | LeTXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------
| Descrio | Leitura de arquivo TXT |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
User Function LeTXT()

//+-------------------------------------------------------------------+
//| Declarao de Variveis |
//+-------------------------------------------------------------------+

Local cPerg := "IMPSA1"
Local oLeTxt

Private cAlias := "SA1"

//CriaSx1(cPerg)
//Pergunte(cPerg,.F.)


- 252 -

ADVPL Completo



Exemplo (continuao):

dbSelectArea(cAlias)
dbSetOrder(1)

//+-------------------------------------------------------------------+
// Montagem da tela de processamento |
//+-------------------------------------------------------------------+

DEFINE MSDIALOG oLeTxt TITLE OemToAnsi("Leitura de Arquivo Texto");
FROM 000,000 TO 200,400 PIXEL
@ 005,005 TO 095,195 OF oLeTxt PIXEL
@ 10,020 Say " Este programa ira ler o contedo de um arquivo texto, conforme";
OF oLeTxt PIXEL
@ 18,020 Say " os parmetros definidos pelo usurio, com os registros do
arquivo";
OF oLeTxt PIXEL
@ 26,020 Say " SA1" OF oLeTxt PIXEL

DEFINE SBUTTON FROM 070, 030 TYPE 1 ;
ACTION (OkLeTxt(),oLeTxt:End()) ENABLE OF oLeTxt

DEFINE SBUTTON FROM 070, 070 TYPE 2 ;
ACTION (oLeTxt:End()) ENABLE OF oLeTxt

DEFINE SBUTTON FROM 070, 110 TYPE 5 ;
ACTION (Pergunte(cPerg,.T.)) ENABLE OF oLeTxt
ACTIVATE DIALOG oLeTxt CENTERED

Return Nil

/*/
+-----------------------------------------------------------------------------
| Funo | OKLETXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo chamada pelo boto OK na tela inicial de processamento |
| | Executa a leitura do arquivo texto |
+-----------------------------------------------------------------------------
/*/

Static Function OkLeTxt()

//+-------------------------------------------------------------------+
//| Abertura do arquivo texto |
//+-------------------------------------------------------------------+

Private cArqTxt := "\SYSTEM\EXPSA1.TXT"
Private nHdl := fOpen(cArqTxt,68)

If nHdl == -1
MsgAlert("O arquivo de nome "+cArqTxt+" no pode ser aberto! Verifique os
parmetros.","Ateno!")
Return
Endif

// Inicializa a rgua de processamento
Processa({|| RunCont() },"Processando...")
Return Nil


- 253 -

ADVPL Completo


Exemplo (continuao):

/*/
+-----------------------------------------------------------------------------
| Funo | RUNCONT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo auxiliar chamada pela PROCESSA. A funo PROCESSA |
| | monta a janela com a rgua de processamento. |
+-----------------------------------------------------------------------------
/*/

Static Function RunCont

Local nTamFile := 0
Local nTamLin := 56
Local cBuffer := ""
Local nBtLidos := 0
Local cFilSA1 := ""
Local cCodSA1 := ""
Local cLojaSA1 := ""

//1234567890123456789012345678901234567890123456789012345678901234567890
//00000000010000000002000000000300000000040000000005000000000600000000070
//FFCCCCCCLLNNNNNNNNNNNNNNNNNNNNVVVVVVVVVVVVVVVVDDDDDDDD
//A1_FILIAL - 01, 02 - TAM: 02
//A1_COD - 03, 08 - TAM: 06
//A1_LOJA - 09, 10 - TAM: 02
//A1_NREDUZ - 11, 30 - TAM: 20
//A1_MCOMPRA - 31, 46 - TAM: 14,2
//A1_ULTCOM - 47, 54 - TAM: 08

nTamFile := fSeek(nHdl,0,2)
fSeek(nHdl,0,0)
cBuffer := Space(nTamLin) // Varivel para criao da linha do registro para
leitura

ProcRegua(nTamFile) // Numero de registros a processar
While nBtLidos < nTamFile

//Incrementa a rgua
IncProc()

// Leitura da primeira linha do arquivo texto
nBtLidos += fRead(nHdl,@cBuffer,nTamLin)

cFilSA1 := Substr(cBuffer,01,02) //- 01, 02 - TAM: 02
cCodSA1 := Substr(cBuffer,03,06) //- 03, 08 - TAM: 06
cLojaSA1 := Substr(cBuffer,09,02) //- 09, 10 - TAM: 02

While .T.
IF dbSeek(cFilSA1+cCodSA1+cLojaSA1)
cCodSA1 := SOMA1(cCodSA1)
Loop
Else
Exit
Endif
Enddo


- 254 -

ADVPL Completo


Exemplo (continuao):

dbSelectArea(cAlias)
RecLock(cAlias,.T.)
(cAlias)->A1_FILIAL := cFilSA1 //- 01, 02 - TAM: 02
(cAlias)->A1_COD := cCodSA1 //- 03, 08 - TAM: 06
(cAlias)->A1_LOJA := cLojaSA1 //- 09, 10 - TAM: 02
(cAlias)->A1_NREDUZ := Substr(cBuffer,11,20)
//- 11, 30 - TAM: 20
(cAlias)->A1_MCOMPRA := Val(Substr(cBuffer,31,16))/100
//- 31, 46 - TAM: 14,2
(cAlias)->A1_ULTCOM := STOD(Substr(cBuffer,47,08))
//- 47, 54 - TAM: 08
MSUnLock()

EndDo

// O arquivo texto deve ser fechado, bem como o dialogo criado na funo
anterior.
fClose(nHdl)

Return Nil


2. Famlia de funes de gravao e leitura de arquivos texto


Exemplo: Leitura de arquivo TXT, utilizando a segunda famlia de funes


#Include "Protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | LeArqTXT | Autor | Robson Luiz | Data | |
+-----------------------------------------------------------------------------
| Descrio | Leitura de arquivo TXT |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
User Function LeArqTxt()

Private nOpc := 0
Private cCadastro := "Ler arquivo texto"
Private aSay := {}
Private aButton := {}

AADD( aSay, "O objetivo desta rotina e efetuar a leitura em um arquivo texto" )

AADD( aButton, { 1,.T.,{|| nOpc := 1,FechaBatch()}})
AADD( aButton, { 2,.T.,{|| FechaBatch() }} )

FormBatch( cCadastro, aSay, aButton )

If nOpc == 1
Processa( {|| Import() }, "Processando..." )
Endif
Return Nil

- 255 -

ADVPL Completo


Exemplo (continuao):

//+-------------------------------------------
//| Funo - Import()
//+-------------------------------------------
Static Function Import()

Local cBuffer := ""
Local cFileOpen := ""
Local cTitulo1 := "Selecione o arquivo"
Local cExtens := "Arquivo TXT | *.txt"

/***
* _________________________________________________________
* cGetFile(<ExpC1>,<ExpC2>,<ExpN1>,<ExpC3>,<ExpL1>,<ExpN2>)
*
* <ExpC1> - Expresso de filtro
* <ExpC2> - Titulo da janela
* <ExpN1> - Numero de mascara default 1 para *.Exe
* <ExpC3> - Diretrio inicial se necessrio
* <ExpL1> - .F. boto salvar - .T. boto abrir
* <ExpN2> - Mascara de bits para escolher as opes de visualizao do objeto
* (prconst.ch)
*/
cFileOpen := cGetFile(cExtens,cTitulo1,,cMainPath,.T.)

If !File(cFileOpen)
MsgAlert("Arquivo texto: "+cFileOpen+" no localizado",cCadastro)
Return
Endif

FT_FUSE(cFileOpen) //ABRIR
FT_FGOTOP() //PONTO NO TOPO
ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER

While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO
IncProc()

// Capturar dados
cBuffer := FT_FREADLN() //LENDO LINHA

cMsg := "Filial: " +SubStr(cBuffer,01,02) + Chr(13)+Chr(10)
cMsg += "Cdigo: " +SubStr(cBuffer,03,06) + Chr(13)+Chr(10)
cMsg += "Loja: " +SubStr(cBuffer,09,02) + Chr(13)+Chr(10)
cMsg += "Nome fantasia: " +SubStr(cBuffer,11,15) + Chr(13)+Chr(10)
cMsg += "Valor: " +SubStr(cBuffer,26,14) + Chr(13)+Chr(10)
cMsg += "Data: " +SubStr(cBuffer,40,08) + Chr(13)+Chr(10)

MsgInfo(cMsg)

FT_FSKIP() //prximo registro no arquivo txt
EndDo

FT_FUSE() //fecha o arquivo txt
MsgInfo("Processo finalizada")
Return Nil


- 256 -

ADVPL Completo



26. Oficina de programao I

26.1. Interfaces com sintaxe clssica

A si nt a x e conv e nci onal par a defi ni o de compone nt es vi su ai s da li ngu a ge m ADVPL dep e nde
di r et a me nt e no i ncl ude esp eci fi ca do no ca beal ho do f ont e. Os doi s i ncl udes di spon v ei s par a o
a mbi e nt e ADVPL Pr ot he us s o :

E RWMAKE. CH: p er mi t e a utili z ao da si nt a x e CLI PPER n a defi ni o dos compon e nt es
vi su ai s.

E PROTHEUS. CH: per mi t e a utili z ao da si nt a x e ADVPL conv e nci on al , a qu al u m
a pri mor a me nt o da si nt a x e CLI PPER, com a i ncl uso de novos a t ri but os par a os
compone nt es vi su ai s di sponi bili z a dos no ERP Pr ot he us.

Par a il ust r ar a di f er e na n a utili z ao dest es doi s i ncl udes, segue a bai xo as di f er e nt es
defi ni es par a o co mpone nt es Di al og e MsDi al og :

Exemplo 01 Include Rwmake.ch

#include rwmake.ch

@ 0,0 TO 400,600 DIALOG oDlg TITLE "Janela em sintaxe Clipper"
ACTIVATE DIALOG oDlg CENTERED


Exemplo 02 Include Protheus.ch

#include protheus.ch

DEFINE MSDIALOG oDlg TITLE "Janela em sintaxe ADVPL "FROM 000,000 TO 400,600
PIXEL
ACTIVATE MSDIALOG oDlg CENTERED



Ambas as si nt a x es produzi r o o mesmo ef ei t o qu a ndo compi l a das e
e x ecut a das no a mbi e nt e Pr ot he us, mas d e v e ser ut ili z ada se mpr e a si nt a x e
ADVPL a t r a v s do uso do i ncl ude PROTHEUS. CH

Os compon e nt es da i nt erf ace vi su al que ser o t r a t a dos nest e t pico, ut ili z a ndo a si nt a x e
cl ssi ca da li ngua ge m ADVPL so :

BUTTON( )
CHECKBOX( )
COMBOBOX( )
FOLDER( )
MSDIALOG( )
MSGET( )

- 257 -

ADVPL Completo


RADIO( )
SAY( )
SBUTTON( )

BUTTON( )

Sintaxe
@ nLinha,nColuna BUTTON cTexto SIZE nLargura,nAltura UNIDADE
OF oObjetoRef ACTION AO
Descrio
Defi ne o compon e nt e vi su al But t on, o qual per mi t e a i ncl uso de bot es d e
oper a o n a t el a da i nt erf ace, os qu ai s ser o vi suali z a dos some nt e com u m
t e xt o si mpl es par a su a i de nt i fi cao.

CHECKBOX( )

Sintaxe
@ nLinha,nColuna CHECKBOX oCheckBox VAR VARIAVEL PROMPT
cTexto WHEN WHEN UNIDADE OF oObjetoRef SIZE nLargura,nAltura
MESSAGE cMensagem
Descrio
Defi ne o compon e nt e vi su al Check Box, o qual per mi t e a ut ili z ao da u ma
marca pa r a ha bi li t ar ou n o u ma op o escol hi da , se ndo est a marca
acompa nh a da de u m t e xt o e x pl i ca ti vo. Di f er e do Ra di oMe nu poi s ca da
el e me nt o do ch eck ni co, mas o Ra di o p er mi t e a utili z ao de u ma li st a
j unt o com u m cont r ol e de sel e o.

COMBOBOX( )

Sintaxe
@ nLinha,nColuna COMBOBOX VARIAVEL ITEMS AITENS SIZE
nLargura,nAltura UNIDADE OF oObjetoRef
Descrio
Defi ne o compone nt e vi su al ComboBox, o qual per mi t e sel eo de u m i t e m
de nt ro de u ma li st a de opes de t e xt os si mpl es no f or ma t o de u m v et or.

FOLDER( )

Sintaxe
@ nLinha,nColuna FOLDER oFolder OF oObjetoRef PROMPT
&cTexto1,,&cTextoX PIXEL SIZE nLargura,nAltura
Descrio
Defi ne o compone nt e vi su al Fol der, o qu al per mi t e a i ncl uso de di v ersos
Di al ogs de nt ro d e u ma mesma i nt erf ace vi sual . Um Fol der pode ser
e nt e ndi do como u m arr a y de Di al ogs, aond e ca da pai nel r eceb e se us
compone nt es e t e m se us a t ri but os defi ni dos i ndepe nd e nt e me nt e dos d e mai s.

MSDIALOG( )

Sintaxe
DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni
TO nLiFim,nColFim OF oObjetoRef UNIDADE
Descrio
Defi ne o compon e nt e MSDI ALOG( ) , o qu al ut ili z a do como base p ar a os
de mai s compon e nt es d a i nt erf ace vi su al , poi s u m compon e nt e MSDI ALOG( )
u ma j a nel a da a pli cao.


- 258 -

ADVPL Completo



MSGET( )

Sintaxe
@ nLinha, nColuna MSGET VARIAVEL SIZE nLargura,nAltura
UNIDADE OF oObjetoRef F3 cF3 VALID VALID WHEN WHEN PICTURE
cPicture
Descrio
Defi ne o compon e nt e vi sual MSGET, o qu al ut ili z a do par a ca pt ur a de
i nf or maes di gi t v ei s na t el a da i nt erf ace .


RADIO( )

Sintaxe
@ nLinha,nColuna RADIO oRadio VAR nRadio 3D SIZE
nLargura,nAltura <ITEMS PROMPT> cItem1,cItem2,...,cItemX OF
oObjetoRef UNIDADE ON CHANGE CHANGE ON CLICK CLICK
Descrio
Defi ne o compone nt e vi su al Ra di o, t a mb m conheci do como Ra di oMe nu, o
qu al sel eo de u ma op o ou de ml ti pl as opes a t r a v s d e u ma marca
par a os i t e ns e xi bi dos de u ma li st a . Di f er e do compon e nt e Check Box , poi s
ca da el e me nt o d e check se mpr e ni co, e o Ra di o pode cont er u m ou mai s
el e me nt os.

SAY( )

Sintaxe
@ nLinha, nColuna SAY cTexto SIZE nLargura,nAltura UNIDADE OF
oObjetoRef
Descrio
Defi ne o compone nt e vi su al SAY, o qu al utili z a do par a e xi bi o de t e xt os
e m u ma t el a de i nt erf ace.

SBUTTON( )

Sintaxe
DEFINE SBUTTON FROM nLinha, nColuna TYPE N ACTION AO
STATUS OF oObjetoRef
Descrio
Defi ne o compone nt e vi su al SBut t on, o qu al per mi t e a i ncl uso de bot es de
oper a o na t el a da i nt erf ace , os qu ai s ser o vi su ali z a dos depe nde ndo da
i nt erf ace do si st e ma ERP utili z a da some nt e co m u m t e xt o si mpl es par a su a
i de nti fi cao, ou com u ma i ma ge m ( Bi t Ma p) pr - defi ni do.


- 259 -

ADVPL Completo



26.2. Rguas de processamento

Os i ndi ca dor es de progr esso ou r gu as de processa me nt o di spon v ei s n a li ngu a ge m ADVPL que
ser o a bor da dos nest e ma t eri al so :

RPTSTATUS( )
PROCESSA( )
MSNEWPROCESS( )
MSAGUARDE( )
MSGRUN( )

26.2.1. RptStatus( )

Rgu a de pr ocessa me nt o si mpl es, co m a p e n as u m i ndi ca dor d e progr esso, ut i li z a da no
processa me nt o d e r el a t ri os do pa dr o Set Pri nt ( ) .

E Sintaxe: RptStatus(bAcao, cMensagem)

E Retorno: Nil

E Parmetros:

bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
Aparncia







- 260 -

ADVPL Completo



Exemplo: Funo RPTStatus( ) e acessrias


/*/
+---------------------------------------------------------------------------
| Funo | GRPTSTATUS | Autor | ROBSON LUIZ | Data | |
+---------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao das funes RPTSTATUS() |
| | SETREGUA() E INCREGUA() |
+---------------------------------------------------------------------------
| Uso | Curso ADVPL |
+---------------------------------------------------------------------------
/*/

User Function GRptStatus()
Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de Funes"
Local cDesc1 := "Este programa exemplifica a utilizao da funo Processa() em
conjunto"
Local cDesc2 := "com as funes de incremento ProcRegua() e IncProc()"

Private cPerg := "RPTSTA"

CriaSX1()
Pergunte(cPerg,.F.)

AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )

AADD( aButton, { 5, .T., {|| Pergunte(cPerg,.T. ) }} )
AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc <> 1
Return Nil
Endif

RptStatus( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )

Return Nil


- 261 -

ADVPL Completo


Exemplo: Funes acessrias da RPTStatus( )


/*/
+-----------------------------------------------------------------------------
| Funo | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de processamento executada atravs da RPTSTATUS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/


Static Function RunProc(lEnd)
Local nCnt := 0

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5")+mv_par01,.T.)

While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
nCnt++
dbSkip()
End

dbSeek(xFilial("SX5")+mv_par01,.T.)

SetRegua(nCnt)
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
IncRegua()
If lEnd
MsgInfo(cCancel,"Fim")
Exit
Endif
dbSkip()
End
Return .T.


SETREGUA( )

A f uno Set Regua ( ) utili z a da par a defi ni r o v al or m xi mo da r gu a de progr esso cri a da
a t r a v s da f uno Rpt St a t us( ) .

E Sintaxe: SetRegua(nMaxProc)

E Parmetros:

nMaxProc Vari v el que i ndi ca o v al or m xi mo de pr ocessa me nt o ( passos) que ser o
i ndi ca dos pel a r gu a .

E Retorno:

Nenhum .



- 262 -

ADVPL Completo


Exemplo:

. . .

dbSel ect Ar e a ( " SA1 " )
dbGoTop( )
Set Regua (Last Rec( ) )
Whil e ! Eof ( )
I ncRegu a ( )
I f Li > 60
. . .


INCREGUA( )

A f uno I ncRegu a ( ) utili z a da par a i ncr e me nt ar v al or n a r gu a de progr ess o cri a da a t r a v s
da f uno Rpt St a t us( )

E Sintaxe: IncRegua(cMensagem)

E Parmetros:

cMensagem Me nsa g e m que ser e xi bi da e a t u ali z a da n a r gua de processa me nt o a ca da
e x ecu o da f un o I ncRegua ( ) , se ndo que a t a x a de a t uali z ao da
i nt erf ace cont r ol a da pel o Bi n ri o.

E Retorno:

Nenhum .

Exemplo:

. . .

dbSel ect Ar e a ( " SA1 " )
dbGoTop( )
Set Regua (Last Rec( ) )
Whil e ! Eof ( )
I ncRegu a ( Av al i a ndo cli e nt e : + SA1- > A1_COD)
I f Li > 60
. . .




- 263 -

ADVPL Completo



26.2.2. Processa( )

Rgu a de pr ocessa me nt o si mpl es, co m a p e n as u m i ndi ca dor d e progr esso, ut i li z a da no
processa me nt o d e rot i n as.

E Sintaxe: Processa(bAcao, cMensagem)

E Retorno: Nil

E Parmetros:

bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
Aparncia




Exemplo: Funo PROCESSA( ) e acessrias


/*/
+-----------------------------------------------------------------------------
| Funo | GPROCES1 | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao das funes PROCESSA() |
| | PROCREGUA() E INCPROC() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GProces1()
Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de Funes"
Local cDesc1 := "Este programa exemplifica a utilizao da funo Processa()"
Local cDesc2 := " em conjunto com as funes de incremento ProcRegua() e"
Local cDesc3 := " IncProc()"



- 264 -

ADVPL Completo



Exemplo (continuao):

Private cPerg := "PROCES"

CriaSX1()
Pergunte(cPerg,.F.)

AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )

AADD( aButton, { 5, .T., {|| Pergunte(cPerg,.T. ) }} )
AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc <> 1
Return Nil
Endif

Processa( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )

Return Nil

/*/
+-----------------------------------------------------------------------------
| Funo | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de processamento executada atravs da PROCRSSA() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd)
Local nCnt := 0

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5")+mv_par01,.T.)

dbEval( {|x| nCnt++ },,{||X5_FILIAL==xFilial("SX5").And.X5_TABELA<=mv_par02})

dbSeek(xFilial("SX5")+mv_par01,.T.)

ProcRegua(nCnt)
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
IncProc("Processando tabela: "+SX5->X5_CHAVE)
If lEnd
MsgInfo(cCancela,"Fim")
Exit
Endif
dbSkip()
End
Return .T.



- 265 -

ADVPL Completo



SETPROC( )

A f uno Set Pr oc( ) utili z a da par a defi ni r o v al or m xi mo da r gu a de progr esso cri a da
a t r a v s da f uno Pr ocessa ( ) .

E Sintaxe: Processa(nMaxProc)

E Parmetros:

nMaxProc Vari v el que i ndi ca o v al or m xi mo de pr ocessa me nt o ( passos) que ser o
i ndi ca dos pel a r gu a .

E Retorno:

Nenhum .

Exemplo:
. . .
dbSel ect Ar e a ( " SA1 " )
dbGoTop( )
Set Pr oc( Last Rec( ) )
Whil e ! Eof ( )
I ncPr oc( )
I f Li > 60
. . .

INCPROC( )

A f uno I ncProc( ) ut ili z a da par a i ncr e me nt ar v al or n a r gu a de progr esso cri a da a t r a v s da
f uno Pr ocessa ( )

E Sintaxe: IncProc(cMensagem)

E Parmetros:

cMensagem Me nsa g e m que ser e xi bi da e a t u ali z a da n a r gua de processa me nt o a ca da
e x ecu o da f uno I ncProc( ) , se ndo que a t a x a de a t ual i z ao da i nt erf ace
cont r ol a da pel o Bi n ri o.

E Retorno:

Nenhum .

Exemplo:
. . .
dbSel ect Ar e a ( " SA1 " )
dbGoTop( )
Set Pr oc( Last Rec( ) )
Whil e ! Eof ( )
I ncPr oc( Av ali a ndo cli e nt e : + SA1- > A1_COD)
I f Li > 60
. . .


- 266 -

ADVPL Completo




26.2.3. MsNewProcess( ).

Rgu a de pr ocessa me nt o dupl a , possui ndo doi s i ndi ca dor es de pr ogr esso i ndepe nde nt es,
utili z a da no processa me nt o de rot i nas.

E Sintaxe: MsNewProcess( ) :New(bAcao, cMensagem)

E Retorno: oProcess objeto do tipo MsNewProcess( )

E Parmetros:

bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
Aparncia




E Mtodos:

Activate( ) I ni ci a a e x ecu o do obj et o MsNe wPr ocess i nst a nci a do.
SetRegua1( ) Defi ne a qua nt i da de de i nf or maes que ser o de monst r a das
pel o i ndi ca dor de pr ogr esso superi or.
Parmetro: nMa xPr oc
IncRegua1( ) I ncr e me nt a e m u ma uni da de o i ndi ca dor d e pr ogr esso
superi or , o qu al i r de monst r a r a e v ol uo do processa me nt o
de acor do com a qua nt i da de defi ni da pel o mt odo
Set Regu a 1( ) .
Parmetro: cMe nsa g e m
SetRegua2( ) Defi ne a qu a nt i da de de i nf or maes que ser o de monst r a das
pel o i ndi ca dor de pr ogr esso i nf eri or.
Parmetro: nMa xPr oc
IncRegua2( ) I ncr e me nt a e m u ma uni da de o i ndi ca dor d e pr ogr esso i nf eri or,
o qu al i r de monst r a r a e v ol uo do processa me nt o d e acor do
com a qu a nt i da de defi ni da pel o mt odo Set Regu a 2( ) .
Parmetro: cMe nsa ge m


- 267 -

ADVPL Completo



Exemplo: Objeto MsNewProcess( ) e mtodos acessrios


/*/
+-----------------------------------------------------------------------------
| Funo | GPROCES2 | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsNewProcess() |
| | e seus mtodos IncReguaX() e SetReguaX() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GProces2()
Private oProcess := NIL

oProcess := MsNewProcess():New({|lEnd| RunProc(lEnd,oProcess)};
"Processando","Lendo...",.T.)
oProcess:Activate()

Return Nil

/*/
+-----------------------------------------------------------------------------
| Funo | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de processamento executada atravs da MsNewProcess() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd,oObj)
Local i := 0
Local aTabela := {}
Local nCnt := 0

aTabela := {{"00",0},{"13",0},{"35",0},{"T3",0}}

dbSelectArea("SX5")
cFilialSX5 := xFilial("SX5")
dbSetOrder(1)
For i:=1 To Len(aTabela)
dbSeek(cFilialSX5+aTabela[i,1])
While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1]
If lEnd
Exit
Endif
nCnt++
dbSkip()
End
aTabela[i,2] := nCnt
nCnt := 0
Next i

- 268 -

ADVPL Completo



Exemplo (continuao):

oObj:SetRegua1(Len(aTabela))
For i:=1 To Len(aTabela)
If lEnd
Exit
Endif
oObj:IncRegua1("Lendo Tabela: "+aTabela[i,1])
dbSelectArea("SX5")
dbSeek(cFilialSX5+aTabela[i,1])
oObj:SetRegua2(aTabela[i,2])
While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1]
oObj:IncRegua2("Lendo chave: "+X5_CHAVE)
If lEnd
Exit
Endif
dbSkip()
End
Next i
Return



26.2.4. MsAguarde( ).

I ndi ca dor d e processa me nt o se m i ncr e me nt o.

E Sintaxe: Processa(bAcao, cMensagem, cTitulo)

E Retorno: Nil

E Parmetros:

bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
cTitulo T t ul o da j a nel a da r gu a de processa me nt o.
Aparncia





- 269 -

ADVPL Completo



Exemplo: MSAguarde( )


/*/
+-----------------------------------------------------------------------------
| Funo | GMSAGUARDE | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao das funes MSAGUARDE() |
| | e MSPROCTXT() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION GMsAguarde()
PRIVATE lEnd := .F.

MsAguarde({|lEnd| RunProc(@lEnd)},"Aguarde...","Processando Clientes",.T.)

RETURN

/*/
+-----------------------------------------------------------------------------
| Funo | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de processamento |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION RunProc(lEnd)

dbSelectArea("SX5")
dbSetOrder(1)
dbGoTop()

While !Eof()
If lEnd
MsgInfo(cCancel,"Fim")
Exit
Endif
MsProcTxt("Tabela: "+SX5->X5_TABELA+" Chave: "+SX5->X5_CHAVE)
dbSkip()
End

RETURN



- 270 -

ADVPL Completo



26.2.5. MsgRun( ).

I ndi ca dor d e processa me nt o se m i ncr e me nt o.

E Sintaxe: Processa(cMensagem, cTitulo, bAcao)

E Retorno: Nil

E Parmetros:

cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
cTitulo T t ul o da j a nel a da r gu a de processa me nt o.
bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
Aparncia




Exemplo: MSGRun( )


/*/
+-----------------------------------------------------------------------------
| Funo | GMSGRUN | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao das funes MSGRUN() |
| | e DBEVAL() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION GMsgRun()
LOCAL nCnt := 0

dbSelectArea("SX1")
dbGoTop()

MsgRun("Lendo arquivo, aguarde...","Ttulo opcional",{|| dbEval({|x| nCnt++}) })

MsgInfo("Ufa!!!, li "+AllTrim(Str(nCnt))+" registros",FunName())

RETURN



- 271 -

ADVPL Completo



26.3. ListBox( )

A si nt a x e cl ssi ca da li ngua ge m ADVPL p er mi t e que o compon e nt e vi su al Li st Box i mpl e me nt e
doi s t i pos di sti nt os de obj et os :

E Lista simples: l i st a de a p e n as u ma col un a no f or ma t o de u m v et or, a qu al n o
necessi t a da especi fi cao d e u m ca b eal ho.

E Lista com colunas: l ist a com di v ersas col un as que n ecessi t a de u m ca beal ho no
f or ma t o d e u m a He a der ( arr a y d e ca b eal ho) .

26.3.1. ListBox simples

E Sintaxe:


@ nLinha,nColuna LISTBOX oListbox VAR nLista ITEMS aLista SIZE nLargura,nAltura
OF oObjetoRef UNIDADE ON CHANGE CHANGE


E Parmetros:

nLinha,nColuna Posi o do obj et o Li st Box e m f uno da j a n el a e m que el e
ser d efi ni do.
oListBox Obj et o Li st Box qu e ser cri a do.
nLista Vari v el nu mri ca que cont m o n mero do i t e m
sel eci on a do no Li st Box .
aLista Vet or si mpl es cont e ndo as st ri ngs que ser o e xi bi das no
Li st Box.
nLargura,nAltura Di me nses do obj et o Li st Box .
oObjetoRef Obj et o di al og no qual o compone nt e ser d efi ni do.
UNIDADE Uni da de de medi da das di me nses : PI XEL.
CHANGE F uno ou l i st a de e x pr esses qu e ser e x ecut a da n a
sel e o d e u m i t e m do Li st Box.

E Aparncia:





- 272 -

ADVPL Completo



Exemplo: LISTBOX como lista simples


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | LISTBOXITE | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do LISTBOX() como lista |
| | simples. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
User Function ListBoxIte()

Local aVetor := {}
Local oDlg := Nil
Local oLbx := Nil
Local cTitulo := "Consulta Tabela"
Local nChave := 0
Local cChave := ""

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5"))

CursorWait()

//+-----------------------------------------+
//| Carrega o vetor conforme a condio |
//+-----------------------------------------+
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA=="00"
AADD( aVetor, Trim(X5_CHAVE)+" - "+Capital(Trim(X5_DESCRI)) )
dbSkip()
End

CursorArrow()

If Len( aVetor ) == 0
Aviso( cTitulo, "No existe dados a consultar", {"Ok"} )
Return
Endif

//+-----------------------------------------------+
//| Monta a tela para usurio visualizar consulta |
//+-----------------------------------------------+
DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL
@ 10,10 LISTBOX oLbx VAR nChave ITEMS aVetor SIZE 230,95 OF oDlg PIXEL
oLbx:bChange := {|| cChave := SubStr(aVetor[nChave],1,2) }
DEFINE SBUTTON FROM 107,183 TYPE 14 ACTION LoadTable(cChave) ENABLE OF oDlg
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg

ACTIVATE MSDIALOG oDlg CENTER

Return


- 273 -

ADVPL Completo


Exemplo: LISTBOX como lista simples funes acessrias


/*/
+-----------------------------------------------------------------------------
| Funo | LISTBOXITE | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo que carrega os dados da tabela selecionada em um |
| | listbox. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION LoadTable(cTabela)

LOCAL aTabela := {}
LOCAL oDlg := NIL
LOCAL oLbx := NIL

dbSelectArea("SX5")
dbSeek(xFilial("SX5")+cTabela)

//+-------------------------------------------------------------
//| O vetor pode receber carga de duas maneiras, acompanhe... |
//+-------------------------------------------------------------
//| Utilizando While/End |
//+-------------------------------------------------------------

dbEval({|| AADD(aTabela,{X5_CHAVE,Capital(X5_DESCRI)})},,{||
X5_TABELA==cTabela})

If Len(aTabela)==0
Aviso( "FIM", "Necessrio selecionar um item", {"Ok"} )
Return
Endif

DEFINE MSDIALOG oDlg TITLE "Dados da tabela selecionada" FROM 300,400 TO 540,900
PIXEL
@ 10,10 LISTBOX oLbx FIELDS HEADER "Tabela", "Descrio" SIZE 230,095 OF oDlg
PIXEL
oLbx:SetArray( aTabela )
oLbx:bLine := {|| {aTabela[oLbx:nAt,1],aTabela[oLbx:nAt,2]} }
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg

RETURN




- 274 -

ADVPL Completo



26.3.2. ListBox mltiplas colunas

E Sintaxe:


@ nLinha,nColuna LISTBOX oListbox FIELDS HEADER Header1, , HeaderX SIZE
nLargura,nAltura OF oObjetoRef UNIDADE


E Parmetros:

nLinha,nColuna Posi o do obj et o Li st Box e m f uno da
j a nel a e m que el e ser defi ni do.
oListBox Obj et o Li st Box qu e ser cri a do.
nLista Vari v el nu mri ca que cont m o n mero do
i t e m sel eci ona do no Li st Box.
Header1,...,HeaderX St ri ngs i de nt i fi ca ndo os t t ul os das col un as do
Gri d.
nLargura,nAltura Di me nses do obj et o Li st Box .
oObjetoRef Obj et o di al og no qu al o compone nt e ser
defi ni do.
UNIDADE Uni da de de medi da das di me nses : PI XEL.
CHANGE F uno ou l i st a de e x pr esses qu e ser
e x ecut a da n a sel e o d e u m i t e m do Li st Box.

E Mtodos:

SetArray( ) Mt odo o obj et o Li st Box que defi ne qu al o
arr a y cont m os da dos que ser o e xi bi dos no
gri d.

E Atributos:

bLine At ri but o do obj et o Li st Box qu e vi ncul a ca da
li nha , col un a do arr a y, com ca da ca b eal ho do
gri d.

E Aparncia:



- 275 -

ADVPL Completo



Exemplo: LISTBOX com grid


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Funo | LIST_BOX | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao de um LISTBOX() com |
| | grid. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function List_Box()

Local aVetor := {}
Local oDlg
Local oLbx
Local cTitulo := "Cadastro de Bancos"
Local cFilSA6

dbSelectArea("SA6")
dbSetOrder(1)
cFilSA6 := xFilial("SA6")
dbSeek(cFilSA6)

// Carrega o vetor conforme a condio.
While !Eof() .And. A6_FILIAL == cFilSA6
AADD( aVetor, { A6_COD, A6_AGENCIA, A6_NUMCON, A6_NOME, A6_NREDUZ, A6_BAIRRO,
A6_MUN } )
dbSkip()
End

// Se no houver dados no vetor, avisar usurio e abandonar rotina.
If Len( aVetor ) == 0
Aviso( cTitulo, "No existe dados a consultar", {"Ok"} )
Return
Endif

// Monta a tela para usurio visualizar consulta.
DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL

// Primeira opo para montar o listbox.
@ 10,10 LISTBOX oLbx FIELDS HEADER ;
"Banco", "Agencia", "C/C", "Nome Banco", "Fantasia", "Bairro", "Municpio" ;
SIZE 230,95 OF oDlg PIXEL

oLbx:SetArray( aVetor )
oLbx:bLine := {|| {aVetor[oLbx:nAt,1],;
aVetor[oLbx:nAt,2],;
aVetor[oLbx:nAt,3],;
aVetor[oLbx:nAt,4],;
aVetor[oLbx:nAt,5],;
aVetor[oLbx:nAt,6],;
aVetor[oLbx:nAt,7]}}


- 276 -

ADVPL Completo


Exemplo (continuao):

// Segunda opo para monta o listbox
/*
oLbx :=
TWBrowse():New(10,10,230,95,,aCabecalho,,oDlg,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
oLbx:SetArray( aVetor )
oLbx:bLine := {|| aEval(aVetor[oLbx:nAt],{|z,w| aVetor[oLbx:nAt,w] } ) }
*/

DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg CENTER

Return


26.4. ScrollBox( )

O Scr ol l Box o obj et o utili z a do par a per mi ti r a u m Di al og e xi bi r barr as de r ol a ge m v er t i cai s e
Hori z ont ai s. Al gu mas a pli caes com obj et os defi ne m a ut oma t i ca me nt e o Scr oll Box, t ai s como :

E Enchoi ce( ) ou MsMGet ( )
E Ne wGet Da dos( )
E Li st Box( )

Qu a ndo d efi ni do u m obj et o Scrol l Box, os d e mai s compone nt es da j a nel a de v er o r ef er e nci ar
est e obj et o e n o mai s o obj et o Di al og.

Dest a f or ma o Scr oll Box a t ri bu do a u m obj et o Di al og, e os compon e nt es a o Scr ol l Box.

O MsDi al og( ) Scr oll Box( )
O Scr oll Box( ) Compone nt es Vi su ai s

E Sintaxe:


@ nLinha,nColuna SCROLLBOX oScrollBox HORIZONTAL VERTICAL SIZE
nLargura,nAltura OF oObjetoRef BORDER


E Parmetros:

nLinha,nColuna Posi o do obj et o Scrol l Box e m f uno da
j a nel a e m que el e ser defi ni do.
oScrollBox Obj et o Scrol l Box que ser cri a do.
HORIZONTAL Par met r o que qu a ndo defi ni do h a bili t a a
r gu a d e rol a ge m hori z ont al .
VERTICAL Par met r o que qu a ndo defi ni do h a bili t a a
r gu a d e rol a ge m v er t i cal .
nLargura,nAltura Di me nses do obj et o Scrol l Box.
oObjetoRef Obj et o di al og no qu al o compone nt e ser
defi ni do.
BORDER

Par met r o que qu a ndo defi ni do h a bili t a a
e xi bi o de u ma bor da de del i mi t ao do
Scr oll Box e m r el ao a out ros obj et os.


- 277 -

ADVPL Completo


E Aparncia:





Exemplo: Utilizao de mltiplos ScrollBoxes


#INCLUDE "PROTHEUS.CH"

/*/
+------------------------------------------------------------------------
| Funo | SCROLL() | Autor | ROBSON LUIZ |Data | |
+------------------------------------------------------------------------
| Descrio | Programa que demonstra como montar uma enchoice apenas |
| | com variveis, incluindo o recurso de rolagem. |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/

USER FUNCTION Scroll()

LOCAL oDlg := NIL
LOCAL oScroll := NIL
LOCAL oLbx1 := NIL
LOCAL oLbx2 := NIL
LOCAL bGet := NIL
LOCAL oGet := NIL
LOCAL aAIIPM := {}
LOCAL aTitulo := {}
LOCAL nTop := 5
LOCAL nWidth := 0
LOCAL cGet := ""
LOCAL cPict := ""
LOCAL cVar := ""
LOCAL n := 0


- 278 -

ADVPL Completo


Exemplo (continuao):

PRIVATE cTitulo := "Consulta Parcelamento"
PRIVATE aSay := {}
PRIVATE cProcesso,cPrefixo,cTipo,cCliente,cLoja,cNome,cCGC
PRIVATE dData,nTotal,nUFESP,cStatus,cCond

cProcesso := "P00001"
cPrefixo := "UNI"
cTipo := "MAN"
cCliente := "000001"
cLoja := "01"
cNome := "JOSE DA SILVA SANTOS SOARES"
cCGC := "00.000.000/0001-91"
dData := "26/03/03"
nTotal := 5922.00
nUFESP := 1000.00
cStatus := "Z"
cCond := "001"

// Vetor para os campos no Scrooll Box
//+-------------------------------------+
//| aSay[n][1] - Titulo |
//| aSay[n][2] - Tipo |
//| aSay[n][3] - Tamanho |
//| aSay[n][4] - Decimal |
//| aSay[n][5] - Contedo/Varivel |
//| aSay[n][6] - Formato |
//+-------------------------------------+
AADD(aSay,{"Processo" ,"C",06,0,"cProcesso" ,"@!"})
AADD(aSay,{"Prefixo" ,"C",03,0,"cPrefixo" ,"@!"})
AADD(aSay,{"Tipo" ,"C",03,0,"cTipo" ,"@!"})
AADD(aSay,{"Cliente" ,"C",06,0,"cCliente" ,"@!"})
AADD(aSay,{"Loja" ,"C",02,0,"cLoja" ,"@!"})
AADD(aSay,{"Nome" ,"C",30,0,"cNome" ,"@!"})
AADD(aSay,{"CNPJ/CPF" ,"C",14,0,"cCGC" ,"@!"})
AADD(aSay,{"Dt.Processo" ,"D",08,0,"dData" ,"@!"})
AADD(aSay,{"Total R$" ,"N",17,2,"nTotal" ,"@!"})
AADD(aSay,{"Total UFESP" ,"N",17,2,"nUFESP" ,"@!"})
AADD(aSay,{"Status" ,"C",01,0,"cStatus" ,"@!"})
AADD(aSay,{"Cond.Pagto" ,"C",03,0,"cCond" ,"@!"})

// Vetor para List Box
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})

// Vetor para List Box
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})

DEFINE MSDIALOG oDlg TITLE cTitulo FROM 122,0 TO 432,600 OF oDlg PIXEL
@ 013,002 TO 154,192 LABEL "Parcelamento" OF oDlg PIXEL
@ 013,195 TO 082,298 LABEL "Ttulos" OF oDlg PIXEL
@ 083,195 TO 154,298 LABEL "AIIPM" OF oDlg PIXEL

//scrollbox
@ 019,006 SCROLLBOX oScroll HORIZONTAL VERTICAL SIZE 131,182 OF oDlg BORDER
For n:=1 TO Len(aSay)

- 279 -

ADVPL Completo


Exemplo (continuao):

bGet := &("{|| '"+aSay[n][1]+"'}")
cVar := aSay[n][5]
cGet := "{|u| IIF(PCount()>0,"+cVar+":=u,"+cVar+")}"
cPict := aSay[n][6]

TSay():New(nTop,5,bGet,oScroll,,,.F.,.F.,.F.,.T.,,,;
GetTextWidth(0,Trim(aSay[n][1])),15,;
.F.,.F.,.F.,.F.,.F.)
oGet:=TGet():New(nTop-2,40,&cGet,oScroll,,7,cPict,,,,,.F.,,.T.,;
,.F.,,.F.,.F.,,.T.,.F.,,(cVar),,,,.T.)
nTop+=11
Next n

//listbox ttulos
@ 019,199 LISTBOX oLbx1 FIELDS HEADER ;
"Parcela","Vencto","Vencto.Real","Valor R$","Qtd.UFESP";
COLSIZES 21,24,33,63,100;
SIZE 095,059 OF oDlg PIXEL
oLbx1:SetArray( aTitulo )
oLbx1:bLine := {||{aTitulo[oLbx1:nAt,1],aTitulo[oLbx1:nAt,2],;
aTitulo[oLbx1:nAt,3],aTitulo[oLbx1:nAt,4],aTitulo[oLbx1:nAt,5]}}

//listbox aiipm
@ 089,199 LISTBOX oLbx2 FIELDS HEADER "AIIPM","Placa","Data Multa" ;
COLSIZES 24,21,30 SIZE 095,061 OF oDlg PIXEL
oLbx2:SetArray( aAIIPM )
oLbx2:bLine :=
{||{aAIIPM[oLbx2:nAt,1],aAIIPM[oLbx2:nAt,2],aAIIPM[oLbx2:nAt,3]}}

ACTIVATE MSDIALOG oDlg CENTER ON INIT
EnchoiceBar(oDlg,{||oDlg:End()},{||oDlg:End()})

RETURN














- 280 -

ADVPL Completo



26.5. ParamBox( )

I mpl e me nt a u ma t el a de par met r os, que n o necessi t a da cri ao d e u m gr upo de per gunt as
no SX1, e com f unci on ali da des que a Per gunt e( ) n o di sponi bili z a , t ai s como Check Box e
Ra di oBut t ons.

Ca da compon e nt e da Par a mBox ser associ a do a u m pa r met r o Pri v a t e d e nomi n a do
MV_PARx x, de acor do com a or d e m do compone nt e n a t el a . Os par met r os da Pa r a mBox
pode m ser ut ili z a dos de f or ma i ndepe nde nt e e m u ma r ot i n a espec fica , ou compl e me nt a ndo
opes de u ma r ot i n a pa dr o.

Cuidados

A PARAMBOX defi ne os par met ros segui ndo o pri nc pi o das v ari v ei s MV_PARx x. Caso
el a sej a ut ili z a da e m u ma rot i n a e m conj unt o com pa r met ros pa dres ( SX1 +
Per gunt e( ) ) necess ri o sal v ar os par met r os pa dres, ch a ma r a Par a mbox( ) , sal v ar o
r et or no da Par a mbox( ) e m v ari v ei s Pri v a t e espec fi cas (MVPARBOXx x) e depoi s
r est a ur ar os pa r met ros pa dres, conf or me o e x e mpl o dest a docu me nt ao.

O obj et o COMBO( ) da PARAMBOX( ) possui u m probl e ma e m se u r et or no : Caso o combo
n o sej a sel eci ona do, el e ma nt er se u cont e do como nu mri co, caso sej a el e r eceb er
o t e xt o da opo e n o o n mero da op o. O e x e mpl o dest a docu me nt ao i l ust r a o
t r a t a me nt o de cdi go n ecessri o par a pr ot eg er a a pli cao.

Ao ut ili z ar a Par a mBox e m u ma f uno que t a mb m ut ili z e par met ros defi ni dos pel a
f uno Per gunt e( ) de v e - se :

E Sal v ar e r est a ur a r os MV_PARs da Per gunt e( )
E Defi ni r v ari v ei s Pri v a t e prpri as par a a Par a mBox, as qu ai s i r o ar ma z e na r o
cont e do das MV_PARs que est a r et or n a .

E Sintaxe: ParamBox (aParamBox, cTitulo, aRet, bOk, aButtons, lCentered,;
nPosx, nPosy, oMainDlg, cLoad, lCanSave, lUserSave)

E Retorno: lOK indica se a tela de parmetros foi cancelada ou confirmada

E Parmetros:

aParamBox Arr a y de par met r os de acor do com a r egr a da Par a mBox
cTitulo Ti t ul o da j a nel a de par met r os
aRet
Arr a y que ser passa do por r ef er e nci a e r et or na do com o
cont e do de ca da pa r met r o
bOk Bl oco de cdi go par a v ali dao do OK da t el a de par met r os
aButtons
Arr a y cont e ndo a r egr a par a a di o d e novos bot es ( al m do
OK e Ca ncel ar ) / / AADD( a But t ons, { nTy pe , bAct i on, cTe xt o } )
lCentered
Se a t el a ser e xi bi da ce nt r al i z a da , qu a ndo a mesma n o
est i v er vi ncul a da a out r a j a nel a
nPosx Posi o i ni ci al - > li nha (Li nh a fi n al : nPosX + 274)
nPosy Posi o i ni ci al - > col un a ( Col un a fi nal : nPosY + 4 45)
oMainDlg Caso o Par a mBox de v a ser vi ncul a do a u ma out r a t el a
cLoad
Nome do ar qui vo a onde as r espost as do usu ri o ser o sal v as /
li das
lCanSave Se as r espost as par a as per gunt as pod e m ser sal v as
lUserSave Se o usu ri o pode sal v ar su a prpri a confi gur ao.

- 281 -

ADVPL Completo


E Aparncia:





E Regras do array aParamBox:

[1] Tipo do parmetro: Par a ca da t i po de par met r o as de mai s posi es do a rr a y v ari a m de
cont e do conf or me a bai xo :

1 - MsGet
[ 2] : Descri o
[ 3] : St ri ng cont e ndo o i ni ci ali z a dor do ca mpo
[ 4] : St ri ng cont e ndo a Pi ct ur e do ca mpo
[ 5] : St ri ng cont e ndo a v ali dao
[ 6] : Consul t a F 3
[ 7] : St ri ng cont e ndo a v ali dao Whe n
[ 8] : Ta ma nho do MsGe t
[ 9] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

2 - Combo
[ 2] : Descri o
[ 3] : Nu mri co cont e ndo a op o i ni ci al do combo
[ 4] : Arr a y cont e ndo as opes do Co mbo
[ 5] : Ta ma nho do Combo
[ 6] : Vali dao
[ 7] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

- 282 -

ADVPL Completo



3 - Radio
[ 2] : Descri o
[ 3] : Nu mri co cont e ndo a op o i ni ci al do Ra di o
[ 4] : Arr a y cont e ndo as opes do Ra di o
[ 5] : Ta ma nho do Ra di o
[ 6] : Vali dao
[ 7] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

4 - CheckBox ( Com Say )
[ 2] : Descri o
[ 3] : I ndi ca dor Lgi co cont e ndo o i ni ci al do Check
[ 4] : Te xt o do Ch eck Box
[ 5] : Ta ma nho do Ra di o
[ 6] : Vali dao
[ 7] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

5 - CheckBox ( linha inteira )
[ 2] : Descri o
[ 3] : I ndi ca dor Lgi co cont e ndo o i ni ci al do Check
[ 4] : Ta ma nho do Ra di o
[ 5] : Vali dao
[ 6] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

6 - File
[ 2] : Descri o
[ 3] : St ri ng cont e ndo o i ni ci ali z a dor do ca mpo
[ 4] : St ri ng cont e ndo a Pi ct ur e do ca mpo
[ 5] : St ri ng cont e ndo a v ali dao
[ 6] : St ri ng cont e ndo a v ali dao Whe n
[ 7] : Ta ma nho do MsGe t
[ 8] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?
[ 9] : Te xt o cont e ndo os t i pos de a r qui vo
Ex. : " Ar qui vos . CSV | *. CSV "
[ 10] : Di r et ri o i ni ci al do CGETF I LE( )
[ 11] : Par met ros do CGETF I LE( )

7 - Montagem de expresso de filtro
[ 2] : Descri o
[ 3] : Ali as da t a bel a
[ 4] : Fil t ro i ni ci al
[ 5] : Opci on al - Cl a usul a Whe n Bot o Edi t ar Fi l t ro

8 - MsGet Password
[ 2] : Descri o
[ 3] : St ri ng cont e ndo o i ni ci ali z a dor do ca mpo
[ 4] : St ri ng cont e ndo a Pi ct ur e do ca mpo
[ 5] : St ri ng cont e ndo a v ali dao
[ 6] : Consul t a F 3
[ 7] : St ri ng cont e ndo a v ali dao Whe n
[ 8] : Ta ma nho do MsGe t
[ 9] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

- 283 -

ADVPL Completo



9 - MsGet Say
[ 2] : St ri ng Cont e ndo o Te xt o a ser a pr ese nt a do
[ 3] : Ta ma nho da St ri ng
[ 4] : Al t ur a da St ri ng
[ 5] : Negri t o (l gi co)

Exemplo: Utilizao da ParamBox( )


#include protheus.ch

/*/
+-----------------------------------------------------------------------
| Funo | xParamBox | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da PARAMBOX como |
| | forma alternativa de disponibilizar parmetros em um |
| | processamento. |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function xParamBox()

Local aRet := {}
Local aParamBox := {}
Local aCombo :=
{"Janeiro","Fevereiro","Maro","Abril","Maio","Junho","Julho","Agosto","Setembro
","Outubro","Novembro","Dezembro"}
Local i := 0
Private cCadastro := "xParambox"

AADD(aParamBox,{1,"Produto",Space(15),"","","SB1","",0,.F.})
AADD(aParamBox,{2,"Tipo de cliente",1,aCombo,50,"",.F.})

AADD(aParamBox,{3,"Mostra
deletados",IIF(Set(_SET_DELETED),1,2),{"Sim","No"},50,"",.F.})

AADD(aParamBox,{4,"Marca todos ?",.F.,"Marque todos se necessrio
for.",50,"",.F.})

AADD(aParamBox,{5,"Marca todos ?",.F.,50,"",.F.})

AADD(aParamBox,{6,"Qual arquivo",Space(50),"","","",50,.F.,;
"Arquivo .DBF |*.DBF"})

AADD(aParamBox,{7,"Monte o filtro","SX5","X5_FILIAL==xFilial('SX5')"})
AADD(aParamBox,{8,"Digite a senha",Space(15),"","","","",80,.F.})

If ParamBox(aParamBox,"Teste Parmetros...",@aRet)
For i:=1 To Len(aRet)
MsgInfo(aRet[i],"Opo escolhida")
Next
Endif

Return


- 284 -

ADVPL Completo


Exemplo: Protegendo os parmetros MV_PARs da Pergunte( ) em uso.


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | XPARBOX() | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo utilizando a PARAMBOX() e protegendo os MV_PARs |
| | ativos do programa principal. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
Static Function XPARBOX(cPerg)

Local aParamBox := {}
Local cTitulo := "Transferncia para Operao"
Local bOk := {|| .T.}
Local aButtons := {}; Local aRet := {}
Local nPosx; Local nPosy; Local nX := 0
Local cLoad := ""
Local lCentered := .T.; Local lCanSave := .F.; Local lUserSave := .F.
Local aParamAtu := Array(4)

// Salva as perguntas padres antes da chamada da ParamBox
For nX := 1 to Len(aParamAtu)
aParamAtu [nX] := &("Mv_Par"+StrZero(nX,2))
Next nX

AADD(aParamBox,{2,"Atualiza taxa de depreciao?", 2, {"Sim","No"}, 100,;
"AllwaysTrue()",.T.})

ParamBox(aParamBox, cTitulo, aRet, bOk, aButtons, lCentered, nPosx, nPosy,
/*oMainDlg*/ ,;
cLoad, lCanSave, lUserSave)

IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox)
For nX := 1 to Len(aParamBox)
If aParamBox[nX][1] == 1
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C"
&("MvParBox"+StrZero(nX,2)) := aScan(aParamBox[nX][4],;
{|x| Alltrim(x) == aRet[nX]})
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N"
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
Endif
Next nX
ENDIF

// Restaura as perguntas padres apos a chamada da ParamBox
For nX := 1 to Len(aParamAtu)
&("Mv_Par"+StrZero(nX,2)) := aParamAtu[nX]
Next nX

Return


- 285 -

ADVPL Completo



MDULO 05: Introduo a orientao objetos


27. Conceitos de orientao objetos

O t er mo ori e nt a o a obj et os pr essupe u ma or ga ni z ao de sof t war e e m t er mos d e col e o
de obj et os di scr et os i ncor por a ndo est r ut ur a e compor t a me nt o prpri os. Est a a bor da ge m de
or ga ni z ao esse nci al me nt e di f er e nt e do d ese nvol vi me nt o t r a di ci on al de sof t war e, ond e
est r ut ur as d e da dos e r ot i n as so d ese n vol vi das de f or ma a pe n as fr aca me nt e acopl a das.

Nest e t pi co ser o os concei t os d e progr a mao ori e nt a da a obj et os l i st a dos a bai xo. Est a
br e v e vi so g er al do par a di g ma per mi t i r e nt e nd er mel hor os concei t os associ a dos
progr a ma o ori e nt a da a obj et os e , e m pa r t i cul ar, s const r ues i mpl e me nt a das a t r a v s d a
li ngua ge m ADVPL.

E Objetos
E Herana
E Atributos
E Mtodos
E Classes
E Abstrao
E Generalizao
E Encapsulamento
E Polimorfismo

27.1. Definies

Objeto

Um obj et o u ma e nt i da de do mundo r e al que t e m u ma i de nt i da de. Obj et os pode m
r epr ese nt a r e nt i da des concr et as ( u m ar qui vo no me u comput a dor, u ma bi ci cl et a ) ou e nt i da des
concei t u ai s ( u ma est r a t gi a de j ogo, u ma pol ti ca de escal on a me nt o e m u m si st e ma
oper aci onal ) . Ca da obj et o t er sua i de nt i da de si gni fi ca que doi s obj et os so di st i nt os mesmo
que el es a pr ese nt e m e x a t a me nt e as mesmas ca r act er st i cas.

E mbor a obj et os t e nh a m e xi st nci a prpri a no mundo r e al , e m t er mos d e l i ngu a ge m de
progr a ma o u m obj et o necessi t a u m meca ni smo de i de nt i fi cao. Est a i de nti fi cao de obj et o
de v e ser ni ca , uni f or me e i ndepe nde nt e do cont e do do obj et o. Est e u m dos meca ni smos
que per mi t e a cri ao d e col ees de obj et os, as qu ai s so t a mb m obj et os e m si .

A est r ut ur a d e u m obj et o r epr ese nt a da e m t er mos d e a t ri but os. O compor t a me nt o d e u m
obj et o r epr ese nt a do p el o conj unt o d e op er aes qu e pod e m ser e x ecut a das sobr e o obj et o.


- 286 -

ADVPL Completo



Classe

Obj et os co m a mesma est r ut ur a e o mesmo compor t a me nt o so a gr upa dos e m cl asses. Uma
cl asse u ma a bst r ao que descr e v e pr opri eda des i mpor t a nt es par a u ma a pl i cao e
si mpl esme nt e i gnor a o r est o.

Ca da cl asse d escr e v e u m conj unt o ( possi v el me nt e i nfi ni t o) de obj et os i ndi vi du ai s. Ca da obj et o
di t o ser u ma i nst nci a de u ma cl asse. Assi m, ca da i nst nci a de u ma cl asse t e m se us prpri os
v al or es par a ca da a t ri but o, mas di vi de m os nomes dos a t ri but os e mt odos com as out r as
i nst nci as da cl asse. I mpli ci t a me nt e, ca da obj et o cont m u ma r ef er nci a par a su a pr pri a
cl asse, e m out r as pal a vr as, el e sa be o qu e el e .



Figura: Repr ese nt a o de u ma cl asse d e obj et os




Figura: Repr ese nt a o de u m obj et o i nst a nci a do de u ma cl asse

- 287 -

ADVPL Completo




Polimorfismo

Pol i morfi smo si gni fi ca que a mesma op er a o pod e se compor t ar de f or ma di f er e nt e e m
cl asses di f er e nt es. Por e x e mpl o, a op er a o mov e qu a ndo a pl i ca da a u ma j a nel a de u m
si st e ma de i nt erf aces t e m u m compor t a me nt o di sti nt o do que qu a ndo a pli ca da a u ma pea de
u m j ogo de x a dr e z . Um mt odo u ma i mpl e me nt ao esp ec fi ca de u ma oper a o par a u ma
cer t a cl asse.

Pol i morfi smo t a mb m i mpli ca que u ma oper a o d e u ma mesma cl asse pod e ser
i mpl e me nt a da por mai s de u m mt odo. O usu ri o n o pr eci sa sa b er qu a nt as i mpl e me nt aes
e xi st e m par a u ma op er a o, ou e x pli ci t ar qual mt odo de v e ser ut ili z a do : a li ngua ge m de
progr a ma o d e v e ser ca pa z de sel eci on ar o mt odo corr et o a pa r t i r do nome da op er ao,
cl asse do obj et o e a r gu me nt os par a a op er ao. Dest a f or ma , nov as cl asses pod e m ser
a di ci ona das se m necessi da de de modi fi cao de cdi go j e xi st e nt e , poi s ca da cl asse a pe n as
defi ne os se us mt odos e a t ri but os.

No mundo r e al , al guns obj et os e cl asses pode m ser d escri t os co mo casos esp eci ai s, ou
esp eci ali z aes, d e out r os obj et os e cl asses. Por e x e mpl o, a cl asse de comput a dor es p essoai s
com pr ocessa dor da li nh a 80x 86 u ma especi ali z ao de comput a dor es pessoai s, que por su a
v e z u ma especi ali z ao d e comput a dor es. No d esej v el que t udo que j f oi descri t o pa r a
comput a dor es t e nh a de ser r ep et i do par a comput a dor es p essoai s ou par a comput a dor es
pessoai s com pr ocessa dor da li nh a 80x 86.

Herana

Her a na o meca ni smo do par a di g ma de ori e nt ao a obj et os que per mi t e compa r t i l har
a t ri but os e oper aes e nt r e cl asses base a da e m u m r el aci on a me nt o hi er r qui co. Uma cl asse
pode ser defi ni da de f or ma g e nri ca e de poi s r efi n a da sucessi v a me nt e e m t er mos d e
subcl asses ou cl asses d eri v a das. Ca da subcl asse i ncor por a , or her da , t odas as pr opri eda des d e
sua supercl asse ( ou cl asse base) e a di ci on a suas propri eda des ni cas e par t i cul ar es. As
propri eda des da cl asse base n o pr eci sa m ser r epet i das e m ca da cl asse deri v a da . Est a
ca paci da de de f a t or a r as propri eda des comuns de di v ersas cl asses e m u ma supercl asse pod e
r eduzi r dr a ma t i ca me nt e a r epet i o d e cdi go e m u m proj et o ou pr ogr a ma , se ndo u ma das
pri nci pai s v a nt a ge ns da a bor da g e m d e ori e nt a o a obj et os.


- 288 -

ADVPL Completo



27.2. Conceitos Bsicos

A a bor da g e m de ori e nt ao a obj et os f a vor ece a a pl i cao de di v ersos concei t os consi der a dos
f unda me nt ai s par a o dese nv ol vi me nt o de bons progr a mas, t ai s como a bst r ao e
e nca psul a me nt o.

Tai s concei t os no s o e xcl usi vos dest a a bor da ge m, mas so supor t a dos de f or ma mel hor no
dese nvol vi me nt o ori e nt a do a obj et os do que e m out r as met odol ogi as.

Abstrao

Abst r a o consi st e de f ocal i z ar nos aspect os esse nci ai s i ner e nt es a u ma e nt i da de e i gnor a r
propri eda des aci de nt ai s. E m t er mos de dese nvol vi me nt o de si st e mas, i st o si gni fi ca
conce nt r a r - se no que u m obj et o e f a z a nt es de se deci di r como el e ser i mpl e me nt a do. O
uso de a bst r ao pr eser v a a li ber da de par a t omar deci ses de dese nvol vi me nt o ou de
i mpl e me nt ao a p e n as qu a ndo h u m mel hor e nt e ndi me nt o do pr obl e ma a ser r esol vi do.

Mui t as li ngu a ge ns de progr a ma o mod er nas supor t a m o concei t o de a bst r ao de da dos ;
por m, o uso de a bst r ao j unt a me nt e co m poli morfi smo e her a na , como supor t a do e m
ori e nt ao a obj et os, u m meca ni smo mui t o mai s poder oso.

O uso a pr opri a do de a bst r a o p er mi t e que u m mesmo mod el o concei t u al ( ori e nt ao a
obj et os) sej a ut ili z a do par a t odas as f ases de dese nv ol vi me nt o de u m si st e ma , desde su a
a n li se a t su a docu me nt ao.

Encapsulamento

Enca psul a me nt o, t a mb m r ef eri do como esconder i nf or mao, consi st e e m sepa r ar os
aspect os e xt er nos d e u m obj et o, os quai s so acess v ei s a out ros obj et os, dos det al hes
i nt er nos d e i mpl e me nt ao do obj et o, os quai s per ma nece m escondi dos dos out r os obj et os. O
uso d e e nca psul a me nt o e vi t a que u m pr ogr a ma t or ne - se t o i nt er dep e nde nt e que u ma
peque n a muda na t e nha gr a ndes ef ei t os col a t er ai s.

O uso d e e nca psul a me nt o per mi t e que a i mpl e me nt a o de u m obj e t o possa ser modi fi ca da
se m af et a r as a pl i caes qu e usa m est e obj e t o. Mot i vos pa r a modi ficar a i mpl e me nt ao d e
u m obj et o pod e m ser , por e x e mpl o, mel hori a de d ese mpe nho, corr e o d e er ros e muda na d e
pl a t af or ma de e x ecuo.

Assi m como a bst r a o, o concei t o de Enca psul a me nt o no e xcl usi vo da a bor da ge m de
ori e nt ao a obj et os. Ent r et a nt o, a h a bili da de de se combi nar est r ut ur a d e da dos e
compor t a me nt o e m u ma ni ca e nti da de t or na a Enca psul a me nt o mai s el ega nt e e mai s
poderosa do que e m li ngu a ge ns conv e nci on ai s que separ a m est r ut ur as d e da dos e
compor t a me nt o.

Compartilhamento

Tcni cas de ori e nt ao a obj et os pr omov e m compa r t il ha me nt o e m di v ersos n v ei s di sti nt os.
Her a na d e est r ut ur a de da dos e compor t a me nt o p er mi t e que est r ut ur as comuns sej a m
compa r t il h a das e nt r e di v ersas cl asses deri v a das si mil ar es se m r edund nci a . O
compa r t il h a me nt o de cdi go usa ndo her a na u ma das gr a ndes v a nt a ge ns da ori e nt ao a
obj et os. Ai nda mai s i mpor t a nt e que a economi a de cdi go a cl ar e z a concei t u al de r econhecer
que op er aes di f er e nt es so n a v er da de a mesma coi sa , o que r e duz o n mero d e casos
di sti nt os que de v e m ser e nt e ndi dos e a n ali sa dos.


- 289 -

ADVPL Completo


O dese nv ol vi me nt o ori e nt a do a obj et os n o a p e nas per mi t e que a i nf or mao d e nt r o de u m
proj et o sej a compa r t il ha da como t a mb m of er ece a possi bili da de de r e a prov ei t ar pr oj et os e
cdi go e m proj et os f ut uros. As f err a me nt as par a al ca nar est e comp ar t il ha me nt o, t ai s como
a bst r a o, Enca psul a me nt o e her a na , est o pr ese nt es n a met odol ogi a ; u ma est r a t gi a de
r e uso e nt r e pr oj et os a defi ni o de bi bli ot ecas de el e me nt os r e us v ei s. Ent r et a nt o,
ori e nt ao a obj et os n o u ma f r mul a m gi ca par a al ca nar r e usa bili da de ; par a t a nt o,
pr eci so pl a nej a me nt o e di sci pli n a par a pe nsar e m t er mos ge nri cos, n o v ol t a dos
si mpl esme nt e pa r a a a pli cao cor r e nt e.

27.3. O Modelo de Objetos (OMT)

Um model o de obj et os busca ca pt ur a r a est r ut ur a est t i ca de u m si st e ma most r a ndo os
obj et os e xi st e nt es, se us r el aci on a me nt os, e a t ri but os e op er aes que car act eri z a m ca da
cl asse de obj et os. a t r a v s do uso dest e model o que se e nf a t i z a o dese nvol vi me nt o e m
t er mos d e obj et os a o i nv s de meca ni smos t r a di ci on ai s de dese n vol vi me nt o base a do e m
f unci on ali da des, per mi t i ndo u ma r epr ese nt a o mai s prxi ma do mundo r e al .

Uma v e z que as pri nci pai s defi ni es e concei t os da a bor da g e m d e ori e nt ao a obj et os est o
defi ni dos, poss v el i nt roduzi r o model o de obj et os qu e ser a dot a do ao l ongo dest e t e xt o. O
model o a pr ese nt a do u m subconj unt o do model o OMT ( Obj ect Model i ng Techni que) , propost o
por Ru mba ugh e nt r e out ros. Est e model o t a mb m i nt roduz u ma r epr ese nt ao di a gr a m t i ca
par a est e mod el o, a qu al ser t a mb m a pr ese nt a da a qui .

27.3.1. Objetos e Classes

Obj et o defi ni do nest e model o como u m concei t o, a bst r a o ou coi sa com li mi t es e
si gni fi ca dos be m defi ni dos par a a a pli cao e m quest o. Obj et os t m doi s propsi t os :
promov er o e nt e ndi me nt o do mundo r e al e supor t ar u ma base pr t i ca par a u ma
i mpl e me nt ao comput aci onal . No e xi st e u ma ma nei r a corr et a de decompor u m probl e ma
e m obj et os ; est a d ecomposi o dep e nde do j ul ga me nt o do proj e t i st a e da n a t ur e z a do
probl e ma . Todos os obj et os t m i de nt i da de prpri a e s o di st i ngu v ei s.

Uma cl asse d e obj et os descr e v e u m gr upo de obj et os com propri eda des ( a t ri but os) si mil ar es,
compor t a me nt os ( oper aes) si mil ar es, r el aci on a me nt os comuns co m out ros obj et os e u ma
se m nt i ca comu m. Por e x e mpl o, Pessoa e Co mpa nhi a so cl asses d e obj et os. Ca da pessoa
t e m u m nome e u ma i da de ; est es seri a m os a t ri but os comuns da cl asse. Compa nhi as t a mb m
pode m t er os mesmos a t ri but os nome e i da de d efi ni dos. Ent r et a nt o, de vi do di st i no
se m nt i ca el as prov a v el me nt e est ari a m a gr upa dos e m out r a cl asse qu e n o Pessoa . Co mo se
pode obser v ar , o a gr up a me nt o e m cl asses n o l e v a e m cont a a p e n as o compar t i l h a me nt o de
propri eda des.

Todo obj et o sa b e a que cl asse el e per t e nce, ou sej a , a cl asse de u m obj et o u m a t ri but o
i mpl ci t o do obj et o. Est e concei t o supor t a do n a mai or par t e das l i ngua ge ns de progr a ma o
ori e nt a da a obj et os, i ncl usi v e e m ADVPL.

OMT defi ne doi s ti pos de di a gr a mas de obj et os, di a gr a mas de cl asses e di a gr a mas de
i nst nci as. Um di a gr a ma de cl asse u m esque ma , ou sej a , u m pa dr o ou ga bari t o que
descr e v e as mui t as poss v ei s i nst nci as de da dos. Um di a gr a ma de i nst nci as descr e v e como
u m conj unt o par t i cul ar de obj et os est r el aci on a do. Di a gr a mas d e i nst nci as so t ei s par a
a pr ese nt ar e x e mpl os e docu me nt ar casos de t est es ; di a gr a mas de cl asses t m uso mai s
a mpl os. A Fi gur a a bai xo a pr ese nt a a not ao a dot a da par a est es di a gr a mas.

- 290 -

ADVPL Completo





Figura: Repr ese nt a o di a gr a m ti ca de OMT pa r a cl asses e obj et os


O a gr upa me nt o d e obj e t os e m cl asses u m poder oso meca ni smo de a bst r a o. Dest a f or ma ,
poss v el ge ner al i z ar defi ni es comuns par a u ma cl asse d e obj et os, ao i n v s d e r ep et -l as
par a ca da obj et o e m par t i cul ar. Est a u ma das f or mas de r e ut ili z ao e economi a que a
a bor da g e m d e ori e nt a o a obj et os supor t a .

27.3.2. Atributos

Um a t ri but o u m v al or de da do assu mi do pel os obj et os d e u ma cl asse. Nome , i da de e p eso
so e x e mpl os d e a t ri but os d e obj et os Pessoa . Cor , p eso e model o s o poss v ei s a t ri but os de
obj et os Car ro. Ca da a t ri but o t e m u m v al or par a ca da i nst nci a de obj et o. Por e x e mpl o, o
a t ri but o i da de t e m v al or ` ` 29'' no obj et o Pedro Y. E m out r as pal a vr as, Pedr o Y t e m 29 a nos de
i da de. Di f er e nt es i nst nci as de obj et os pod e m t er o mesmo v al or pa r a u m da do a t ri but o.
Ca da nome d e a t ri but o ni co par a u ma da d a cl asse, mas n o necessari a me nt e ni co e nt r e
t odas as cl asses. Por e x e mpl o, a mbos Pessoa e Compa nhi a pode m t er u m a t ri but o ch a ma do
e nder eo.

No di a gr a ma de cl asses, a t ri but os so li st a dos no segundo seg me nt o da cai x a que r epr ese nt a
a cl asse. O nome do a t ri but o pode ser segui do por d et al hes opci on ais, t ai s como o t i po de
da do assu mi do e v al or def a ul t . A Fi gur a a bai xo most r a est a r epr ese nt ao.



Figura: Repr ese nt a o di a gr a m ti ca de OMT pa r a cl asses e obj et os co m a t ri but os

No se de v e conf undi r i de nti fi ca dor es i nt er nos de obj et os com a t ri but os do mundo r e al .
I d e nt i fi ca dor es d e obj e t os s o u ma conv e ni nci a de i mpl e me nt ao, e n o t m ne nhu m
si gni fi ca do par a o dom ni o da a pli cao. Por e x e mpl o, CI C e RG n o so i de nt i fi ca dor es d e
obj et os, mas si m v er da dei ros a t ri but os do mundo r e al .


- 291 -

ADVPL Completo


27.3.3. Operaes e Mtodos

Uma oper a o u ma f u no ou t r a nsf or mao que pode ser a pli ca da a ou por obj et os e m u ma
cl asse. Por e x e mpl o, a bri r, sal v ar e i mpri mi r so op er aes que pode m ser a pl i ca das a obj et os
da cl asse Ar qui vo. Todos os obj et os e m u ma cl asse compar t i l h a m as mesmas op er aes.

Toda oper a o t e m u m obj et o- al vo como u m ar gu me nt o i mpl ci t o. O compor t a me nt o d e u ma
oper a o d epe nde da cl asse de se u al vo. Como u m obj et o sa be qu al su a cl asse, poss v el
escol her a i mpl e me nt ao corr et a da oper ao. Al m di st o, out ros ar gu me nt os ( pa r met ros)
pode m ser n ecessri os par a u ma oper a o.

Uma mesma oper ao pode se a pl i car a di v ersas cl asses di f er e nt es. Uma op er ao como est a
di t a ser pol i mrfi ca , ou sej a , el a pode assu mi r di st i nt as f or mas e m cl asses di f er e nt es.

Um mt odo a i mpl e me nt ao d e u ma op er ao par a u ma cl asse. Por e x e mpl o, a op er ao
i mpri mi r pode ser i mpl e me nt a da de f or ma di st i nt a , depe nde ndo se o ar qui vo a ser i mpr esso
cont m a p e n as t e xt o ASCI I , u m a r qui vo de u m processa dor de t e xt o ou bi n ri o. Todos est es
mt odos e x ecut a m a mesma op er ao : i mpri mi r o a r qui vo ; por m, ca da mt odo ser
i mpl e me nt a do por u m di f er e nt e cdi go.

A assi n a t ur a de u m mt odo da da p el o n mer o e t i pos d e a r gu me nt os do mt odo, assi m
como por se u v al or de r et or no. Uma est r a t gi a de dese nvol vi me nt o r ecome nd v el ma nt er
assi n a t ur as coer e nt es par a mt odos i mpl e me nt a ndo u ma da da oper a o, assi m como u m
compor t a me nt o consi st e nt e e nt r e as i mpl e me nt aes.

E m t er mos d e di a gr a mas OMT, oper aes s o li st a das n a t ercei r a par t e da cai x a de u ma
cl asse. Ca da nome d e oper a o pode ser segui da por det al hes opci onai s, t ai s como l i st a de
ar gu me nt os e t i po de r et or no. A l i st a de ar gu me nt os a pr ese nt a da e nt r e pa r nt eses a ps o
nome da op er ao. Uma li st a de ar gu me nt os v a zi a i ndi ca que a op er ao n o t e m
ar gu me nt os ; da a us nci a da li st a de ar gu me nt os n o se pode concl ui r na da . O t i po de
r esul t a do v e m a ps a li st a de ar gu me nt os, se ndo pr ecedi do por doi s pont os ( : ) . Caso a
oper a o r et or ne r esul t a do, est e no de v e ser omi ti do, poi s est a a f or ma de di sti ngui -l a de
oper aes qu e n o r et or n a m r esul t a do. Ex e mpl os d e r epr ese nt a o d e oper aes e m OMT so
a pr ese nt a dos na Fi gur a a bai xo :



Figura: Repr ese nt a o di a gr a m ti ca de OMT pa r a cl asses co m a t ri but os e oper aes

- 292 -

ADVPL Completo



27.3.4. Sugestes de desenvolvimento

Na const r uo d e u m model o par a u ma a pli cao, as segui nt es sugest es de v e m ser
obser v a das a fi m de se obt er r esul t a dos cl aros e consi st e nt es :

E No comece a const r ui r u m model o d e obj et os si mpl esme nt e defi ni ndo cl asses,
associ aes e h er a nas. A pri mei r a coi sa a se f a z er e nt e nder o probl e ma a ser
r esol vi do.
E Te nt e ma nt er se u mod el o si mpl es. Evi t e compl icaes desnecess ri as.
E Escol h a nomes cui da dosa me nt e. Nomes s o i mpor t a nt es e ca rr e ga m conot aes
poderosas. Nomes d e v e m ser d escri t i vos, cl aros e n o d ei x ar a mbi gi da des. A escol h a
de bons nomes u m dos asp ect os mai s di f cei s da model a ge m.
E No e nt er r e a pont a dor es ou out r as r ef er nci as a obj et os de nt ro de obj et os como
a t ri but os. Ao i nv s di st o, mod el e est as r ef er nci as como associ aes. I st o t or n a o
model o mai s cl aro e i ndepe nd e nt e da i mpl e me nt ao.
E Te nt e e vi t ar associ aes que e nv ol v a m t r s ou mai s cl asses d e obj et os. Mui t as v e z es,
est es t i pos d e associ aes pod e m ser d ecompost os e m t er mos d e associ aes bi n ri as,
t or n a ndo o model o mai s cl aro.
E No t r a nsfi r a os a t ri but os d e l i gao par a d e nt r o de u ma das cl asses.
E Te nt e e vi t ar hi er a r qui as de g e ner ali z ao mui t o prof undas.
E No se sur pr e e nda se o se u model o necessi t ar v ri as r e vi ses ; i st o o nor mal .
E Se mpr e docu me nt e se us mod el os de obj et os. O di a gr a ma pode esp eci fi car a est r ut ur a
do mod el o, mas ne m se mpr e sufi ci e nt e par a descr e v er as r a z es por t r s da defi ni o
do mod el o. Uma e x pl ica o escri t a pode cl ari fi car pont os t ai s como si gni fi ca do de
nomes e e x pli car a r a z o par a ca da cl asse e r el aci on a me nt o.
E Ne m se mpr e t odas as const r ues OMT s o necess ri as par a descr e v er u ma a pli cao.
Use a p e n as a quel as que f or e m a dequ a das par a o pr obl e ma a nali sa do.


- 293 -

ADVPL Completo



28. Orientao a objetos em ADVPL

Nest e t pi co ser det al ha da a f or ma com a qu al a li ngu a ge m ADVPL i mpl e me nt a os concei t os
de ori e nt ao a obj et os e a si nt a x e ut ili z a da no dese n vol vi me nt o de a pl icaes.


28.1. Sintaxe e operadores para orientao a objetos

Palavras reservadas

CLASS
CONSTRUCTOR
DATA
ENDCLASS
FROM
METHOD
SELF

CLASS

Descrio
Ut ili z a da n a decl ar ao de u ma cl asse d e obj et os, e pa r a i de nt i fi car a qu al
cl asse u m d et er mi na do mt odo est r el aci ona do.
Sintaxe 1 CLASS < nome _da _cl asse >
Sintaxe 2 METHOD < nome _do_ mt odo > CLASS < nome _da _cl asse >

CONSTRUCTOR

Descrio
Ut ili z a da n a especi fi cao de u m mt odo especi al , defi ni do como const r ut or,
o qu al t e m a f un o d e r et or n a r u m novo obj et o com os a t ri but os e m t odos
defi ni dos n a cl asse .
Sintaxe METHOD < nome _do_ mt odo( ) > C ONSTRUCTOR

DATA

Descrio Ut ili z a da n a decl ar ao de u m a t ri but o da cl asse d e obj et os.
Sintaxe DATA < nome _do_a t ri but o >

ENDCLASS

Descrio Ut ili z a da na fi n ali z ao da decl ar a o da cl asse .
Sintaxe ENDCLASS



- 294 -

ADVPL Completo


FROM

Descrio
Ut ili z a da n a decl ar ao de u ma cl asse, a qu al ser u ma i nst nci a de u ma
supercl asse, r eceb e ndo os a t ri but os e mt odos nel a defi ni dos,
i mpl e me nt a ndo a her a na e nt r e cl asses.
Sintaxe CLASS < nome _da _cl asse > FROM < nome _da _supercl asse >


METHOD

Descrio
Ut ili z a da n a decl ar ao do pr ot t i po do mt odo de u ma cl asse d e obj et os, e
na decl ar a o do mt odo ef et i v a me nt e dese nv ol vi do.
Sintaxe 1 METHOD < nome _do_ mt odo( ) >
Sintaxe 2 METHOD < nome _do_ mt odo( < par met r os > ) > CLASS < nome _da _cl asse >

SELF

Descrio
Ut ili z a da pri nci pal me nt e pel o mt odo const r ut or par a r et or n a r o obj et o
cri a do par a a a pl i cao.
Sintaxe Ret ur n SELF


Operadores especficos


:
Ut ili z a do par a r ef er e nci ar u m mt odo ou u m a t ri but o de u m obj et o j
i nst a nci a do.
Exemplo 1 cNome : = oAl uno:sNome
Exemplo 2 cNot a : = oAl uno:GetNota(cCurso)


::
Ut ili z a do pel os mt odos de u ma cl asse pa r a r ef er e nci ar os a t ri but os
di spon v ei s par a o obj et o.
Exemplo

METHOD Get Not a ( cCurso) CLASS ALUNO

Local nPosCurso : = 0
Local nNot a : = 0

nPosCurso : = a Sca n( ::aCursos, { | a Curso | a Curso[ 1] = = cCurso } )

I F nPosCurso > 0

nNot a : = ::aCursos[ nPosCurso] [ 2]

ENDI F

Ret ur n nNot a




- 295 -

ADVPL Completo



28.2. Estrutura de uma classe de objetos em ADVPL

Declarao da classe

A decl ar ao d e u ma cl asse da li ngu a ge m ADVPL r e al i z a da de f or ma si mil ar a decl ar ao d e
u ma f uno, com a dif er e na de que u ma cl asse n o possui di f er e nci ao qua nt o a su a
proced nci a , como u ma F unct i on( ) e u ma User F unct i on( ) , e n o possui vi si bili da de li mi t a da
como u ma St a t i c F unct i on( ) .

Exemplo:

#include protheus.ch
CLASS Pessoa()



Definio dos atributos

Segui ndo o mesmo pri nc pi o de v ari v ei s n o t i pa das, os a t ri but os das cl asses e m ADVPL n o
pr eci sa m t er se u t i po especi fi ca do, se ndo n ecessri o a pe n as det er mi n ar se us nomes.

Dest a f or ma r ecome nda do o uso da not ao Hngar a t a mb m par a a defi ni o dos a t ri but os
de f or ma a f aci li t ar a a nli se, i nt er pr et ao e ut i li z ao da cl asse e se us obj et os i nst a nci a dos.

Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade



Prototipao dos mtodos

A prot ot i pao dos m t odos u ma r egr a ut ili z a da pel as li ngu a ge ns ori e nt a das a obj et os,
a t r a v s da qual so esp eci fi ca das as oper aes que pode m ser r e al i z a das pel o obj et o,
di f er e nci a ndo os mt odos d e out r as f unes i nt er n as de uso da cl asse , e par a especi fi car qu ai s
so os mt odos const r ut or es.

E m li ngua ge ns ti pa das, n a prot ot i pao dos mt odos necess ri o defi ni r qu ai s so os
par met ros r ecebi dos e se us r esp ect i vos t i pos, al m de defi ni r o t i po do r et or no que ser
f or n eci do. E m ADVPL necess ri o a pe n as d escr e v er a ch a ma da do mt odo e caso necessri o
se o mesmo u m const r ut or .

- 296 -

ADVPL Completo



Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS


28.3. Implementao dos mtodos de uma classe em ADVPL

Mtodo Construtor

O mt odo const r ut or possui a car act er st i ca de r et or n a r u m obj et o com o ti po da cl asse da qu al
o mesmo f oi i nst a nci a do. Por est a r a z o di z - se que o t i po do obj et o i nst a nci a do a cl asse
da quel e obj et o.

Par a produzi r est e ef ei t o, o mt odo const r ut or ut ili z a a pal a vr a r eser v a da SELF, a qu al
utili z a da pel a li ngu a ge m ADVPL pa r a r ef er nci a a prpri a cl asse da qu el e obj et o.

Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS

METHOD Create(cNome, nIdade) CLASS Pessoa

::cNome := cNome
::nIdade := nIdade

Return SELF



- 297 -

ADVPL Completo



Manipulao de atributos

Os a t ri but os defi ni dos par a u ma cl asse com a utili z ao da pal a vr a r eser v a da DATA e m su a
decl ar a o pod e m ser ma ni pul a dos por se us mt odos ut i li z a ndo o op er a dor : : .

A ut ili z ao dest e op er a dor p er mi t e a o i nt er pr et a dor ADVPL di f er e nci ar v ari v ei s comuns
cri a das pel as f unes e mt odos qu e ut ili z a m est e obj et o dos a t ri but os propri a me nt e di t os.

Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()
ENDCLASS

METHOD Create(cNome, nIdade) CLASS Pessoa

::cNome := cNome
::nIdade := nIdade

Return SELF


Utilizao de funes em uma classe de objetos

Conf or me me nci on a do a nt eri or me nt e, a ut i li z ao da pal a vr a r eser v a d a METHOD p er mi t e ao
i nt er pr et a dor ADVPL di f er e nci ar os mt odos que pod e m ser ut ili z a dos a t r a v s da r ef er nci a do
obj et o de f unes i nt er nas descri t as i nt er n a me nt e n a cl asse.

I st o p er mi t e a ut ili z ao d e f unes t r a di ci on ai s da li ngua ge m ADVPL, como as St a t i c
F unct i ons( ) as quai s ser o vi s v ei s a pe n as a cl asse, e n o poder o s er r ef er e nci a das
di r et a me nt e p el o obj et o.

Exemplo parte 01: Funo CadPessoa (usuria da classe Pessoa)

#include protheus.ch

USER FUNCTION CadPessoa()

Local oPessoa
Local cNome :=
Local dNascimento:= CTOD()
Local aDados := {}

aDados := GetDados()
oPessoa := Pessoa():Create(cNome,dNascimento)

Return

- 298 -

ADVPL Completo



Exemplo parte 02: Classe Pessoa

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade
DATA dNascimento

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS

METHOD Create(cNome, dNascimento) CLASS Pessoa
::cNome := cNome
::dNascimento := dNascimento
::nIdade := CalcIdade(dNascimento)
Return SELF

STATIC FUNCTION CalcIdade(dNascimento)
Local nIdade
nIdade := dDataBase - dNascimento
RETURN nIdade


Herana entre classes

Segui ndo o pri nci pi o da ori e nt ao a obj et os, a li ngu a ge m ADVPL per mi t e que u ma cl asse
r eceba por her a na os mt odos e a t ri but os d efi ni dos e m u ma out r a cl asse, a qu al t or n asse a
supercl asse d est a i nst nci a .

Par a ut ili z ar est e r ecurso d e v e ser ut ili z a da a pal a vr a r eser v a da FROM n a decl ar ao da
cl asse, especi fi ca ndo a supercl asse qu e ser r ef er e nci a da .

E m ADVPL o e x e mpl o pr t i co dest a si t u ao a supercl asse TSr v Obj ect , a qu al utili z a da pel a
mai ori a das cl asses e co mpone nt es da i nt erf ace vi su al , como de monst r a do no mdul o 06.


Exemplo parte 01: Declarao da classe Pessoa

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade
DATA dNascimento

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS


- 299 -

ADVPL Completo



Exemplo parte 02: Declarao da classe Aluno

#include protheus.ch
CLASS Aluno() FROM Pessoa

DATA nID
DATA aCursos

METHOD Create() CONSTRUCTOR
METHOD Inscrever()
METHOD Avaliar()
METHOD GetNota()
METHOD GetStatus()

ENDCLASS

// Os objetos da classe Aluno, possuem todos os mtodos e atributos da classe
Pessoa, alm
// dos mtodos e atributos declarados na prpria classe.


Construtor para classes com herana

Qu a nt o ut ili z a do o r ecurso de h er a na e nt r e cl asses, o const r ut or da cl asse i nst a nci a da de v e
r eceb er u m t r a t a me nt o a di ci on al , par a que o obj et o i nst a nci a do sej a cri a do com os a t ri but os e
mt odos d efi ni dos n a supercl asse.

Nest es casos, l ogo a ps a defi ni o do mt odo const r ut or da cl asse, d e v er ser e x ecut a do o
mt odo const r ut or da supercl asse.

Exemplo parte 03: Mtodo Construtor da classe Aluno

METHOD Create(cNome,dNascimento,nID)
:Create(cNome,dNascimento) // Chamada do mtodo construtor da classe Pessoa.

::nID := ID

Return SELF




- 300 -

ADVPL Completo



MDULO 06: ADVPL Orientado objetos I

Nest e mdul o ser o t r a t a dos os compon e nt es e obj et os da i nt erf ace vi su al da li ngu a ge m
ADVPL, p er mi ti ndo o dese nvol vi me nt o de a pli caes com i nt erf aces gr fi cas com si nt a x e
ori e nt a da a obj et os.

29. Componentes da interface visual do ADVPL

A li ngu a ge m ADVPL possui di v ersos compon e nt es vi su ai s e a uxili ar es, os quai s pode m ser
r epr ese nt a dos ut i li z a ndo a est r ut ur a a bai xo :

. Classes da Interface Visual




Tsr vobj ect
. Classes Auxiliares


Tf ont

. Classes de Janelas


Msdi al og
Tdi al og
Twi ndow

. Classes de Componentes


Tcont r ol


.
Classes de Componentes
Visuais
Br ge t ddb
Mscal e nd
Mscal e ndgri d
Mssel br
Mswor k ti me
Sbut t on
Tbar
Tbi t ma p
Tbr owsebut t on
Tbt nb mp
Tbt nb mp2
Tbut t on
Tcbr owse
Tcheck box
Tcolor t ri a ngl e
Tcombobox
Tfol der
Tfont
Tge t
Tgr oup
Thbut t on
Ti browser
Tlist box
T me nu
T me nubar
T me t er
T msgr a phic
T msgbar
T mul ti bt n
T mul ti ge t
Tol econt ai ner
Tpa ge vi e w
Tpa nel
Tr ad me nu
Tsbr owse
Tsa y
Tscr oll box
Tsi mpl e edi t or
Tsli der

- 301 -

ADVPL Completo






.
Classes de Componentes
Visuais
Tspli t t er
Tt a bs
Tt oolbox
Twbrowse
Vcbrowse

Classes da interface visual

TSRVOBJECT( )

Descrio
Cl asse a bst r a t a i ni ci al de t odas as cl asses d e i nt erf ace do ADVPL. N o de v e
ser i nst a nci a da di r et a me nt e.


Classes auxiliares

TFONT( )

Descrio
Cl asse de obj et os que d efi ne a f ont e do t e x t o ut ili z a do nos cont r ol es
vi su ai s.


Classes de janelas

MSDIALOG( )

Descrio
Cl asse de obj et os que d e v e ser ut ili z a da como p a dr o d e j a nel a par a
e nt r a da d e da dos. MSDi al og u m t i po de j a nel a di l ogo modal , i st o ,
no per mi t e que out r a j a nel a a ti v a r eceba da dos e nqu a nt o est a est i v er
a t i v a .

TDIALOG( )

Descrio
Cl asse de obj et os do t i po di l ogo de e nt r a da d e da dos, se ndo se u uso
r eser v a do. Recome nda - se ut i li z ar a cl asse MSDi al og que h er da da d est a
cl asse.

TWINDOW( )

Descrio
Cl asse de obj et os do t i po di l ogo pri nci pal de pr ogr a ma . De v er e xi st i r
a pe n as u ma i nst nci a dest e obj et o n a e x ecuo do progr a ma .


Classes de componentes

TCONTROL( )

Descrio
Cl asse a bst r a t a comu m e nt r e t odos os compon e nt es vi su ai s edi t v ei s.
No d e v e ser i nst a nci a da di r et a me nt e.


- 302 -

ADVPL Completo



Classes de componentes visuais

BRGETDDB( )

Descrio Cl asse de obj et os vi su ais do t i po Gri d.

MSCALEND( )

Descrio Cl asse de obj et os vi su ais do t i po Cal e ndri o.


MSCALENDGRID( )

Descrio Cl asse de obj et os vi su ais do t i po Gr a d e d e Per odos.

MSSELBR( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Gri d

MSWORKTIME( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Bar r a de Per odo.

SBUTTON( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o, o qu al pode possui r i ma ge ns
pa dres associ a das a o se u t i po.

TBAR( )

Descrio Cl asse de obj et os vi su ais do t i po Barr a Superi or .

TBITMAP( )

Descrio Cl asse de obj et os vi su ais que p er mi t e a e xi bi o de u ma i ma ge m.

TBROWSEBUTTON( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o no f or ma t o pa dr o ut ili z a do
e m br owses da a pl i cao.

TBTNBMP( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o, o qu al per mi t e que sej a
vi ncul a da u ma i ma ge m ao cont r ol e.


- 303 -

ADVPL Completo



TBTNBMP2( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o, o qu al per mi t e a e xi bi o de
u ma i ma ge m ou de u m popup.

TBUTTON( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o, o qu al per mi t e a ut i li z ao de
t e xt o par a su a i de nt i fi cao.

TCBROWSE( )

Descrio Cl asse de obj et os vi su ais do t i po Gri d.

TCHECKBOX( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Check Box.

TCOLORTRIANGLE( )

Descrio Cl asse de obj et os vi su ais do t i po Pal et a de Cor es.

TCOMBOBOX( )

Descrio
Cl asse d e obj et os vi su ais do t i po t ComboBox, a qu al cri a u ma e nt r a da
de da dos com ml t i pl a escol ha com i t e m d efi ni do e m u ma l i st a
v er t i cal , aci on a da por F 4 ou pel o bot o esqu er do l ocali z a do n a par t e
di r ei t a do cont rol e. A v ari v el associ a da ao cont rol e t er o v al or d e
u m dos i t e ns sel eci ona dos ou no caso d e u ma li st a i nde x a da , o v al or
de se u ndi ce.

TFOLDER( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Fol der .

TGET( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Get , a qu al cri a u m
cont r ol e que a r ma z e n a ou al t er a o cont e do de u ma v ari v el a t r a v s
de di gi t ao. O cont e do da v ari v el s modi fi ca do qua ndo o
cont r ol e per de o f oco de edi o pa r a out ro cont r ol e.

TGROUP( )

Descrio
Cl asse de obj et os vi su ais do t i po pai nel t Group, a qu al cri a u m
pai nel onde cont rol es vi su ai s pode m ser a gr upa dos ou cl assi fi ca dos.
Nest e pai nel cri a da u ma bor da com t t ul o e m vol t a dos cont rol es
a gr upa dos.


- 304 -

ADVPL Completo



THBUTTON( )

Descrio Cl asse de obj et os vi su ais do t i po bot o com hi perl i nk.

TIBROWSER( )

Descrio
Cl asse de obj et os vi su ais do t i po P gi n a de I nt er net , se ndo necess ri o
i ncl ui r a cl a usul a Browser En a bl ed = 1 no Confi g do Re mot e. I NI

TLISTBOX( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Li st box, a qu al cri a u ma
j a nel a com i t e ns sel eci on v ei s e ba rr a de r ol a ge m. Ao sel eci on ar u m
i t e m, u ma v ari v el a t u ali z a da com o cont e do do i t e m sel eci on a do.

TMENU( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Me nu.

TMENUBAR( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Bar r a de Me nu.

TMETER( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Me t er, a qu al e xi be u ma
r gu a ( ga uge) de processa me nt o, d escr e v e ndo o a nda me nt o de u m
processo a t r a v s da e xi bi o de u ma ba rr a hori z ont al .

TMSGRAPHIC( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Gr fi co.

TMSGBAR( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Rod a p.

TMULTIBTN( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Ml ti pl os bot es.

TMULTIGET( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e - edi o d e t e xt o d e
ml ti pl as li nhas.


- 305 -

ADVPL Completo



TOLECONTAINER( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e, a qu al per mi t e a cri ao de
u m bot o vi ncul a do a u m obj et o OLE.

TPAGEVIEW( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e, que per mi t e a vi su ali z ao
de ar qui vos no f or ma t o ger a do p el o spool de i mpr e ss o do Prot he us.

TPANEL( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Pa nel , a qu al per mi t e
cri ar u m pai nel est t i co, onde pod e m ser cri a dos out r os cont rol es com
o obj et i vo de or ga ni z ar ou a gr upar compon e nt es vi su ai s.

TRADMENU( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e TRa dMe nu, a qu al per mi t e
cri ar u m cont r ol e vi su al no f or ma t o Ra di o But t on.

TSBROWSE( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e TSBrowse , a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po Gri d.

TSAY( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Sa y, a qu al e xi be o
cont e do de t e xt o est t i co sobr e u ma j a nel a ou cont r ol e pr e vi a me nt e
defi ni dos.

TSCROLLBOX( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Scr oll box, a qu al per mi t e
cri ar u m pai nel com scr oll desli z a nt es n as l a t er ai s ( hori z ont ai s e
v er t i cai s) do cont r ol e.

TSIMPLEEDITOR( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Si mpl e Edi t or, a qu al
per mi t e cri ar u m cont rol e vi sual par a edi o d e t e xt os com r ecursos
si mpl es, como o Not ePa d

TSLIDER( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Sli der, a qual per mi t e
cri ar u m cont r ol e vi su al do t i po bot o desli z a nt e.

TSPLITTER( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Spli t t er, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po di vi sor.

- 306 -

ADVPL Completo



TTABS( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e TTa bs, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po past a .

TTOOLBOX( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Tool box, a qu al per mi t e
cri ar u m cont r ol e vi su al par a a gr upa r di f er e nt es obj et os.

TWBROWSE( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e TWBrowse, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po Gri d.

VCBROWSE( )
Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e VCBrowse , a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po Gri d.


Documentao dos componentes da interface visual

Os compon e nt es da i nt erf ace vi su al da li ngu age m ADVPL ut ili z ados nest e t r ei n a me nt o est o
docu me nt a dos n a seo Gui a de Ref er nci a , ao fi n al dest e ma t eri al .

Par a vi su ali z ar a docu me nt ao compl et a de t odos os compon e nt es me nci on a dos nest e
ca p t ul o de v e ser acesso o si t e DEM Docu me nt a o El et r ni ca Mi crosi ga
( de m. mi crosi ga . com. br ) conf or me a bai xo :









- 307 -

ADVPL Completo



29.1. Particularidades dos componentes visuais


29.1.1. Configurando as cores para os componentes

Os compone nt es vi suai s da li ngua ge m ADVPL ut ili z a m o pa dr o d e cor es RGB.

As cor es d est e pa dr o so d efi ni das pel a segui nt e f r mul a , a qu al de v e ser a v al i a da t e ndo
como base a pal et a de cor es no f or ma t o RGB :


nCor : = nVermelho + (nVerde * 256) + (nAzul * 65536)





Figura: Paleta de cores no formato RGB

Com base n est a pal et a , pode mos d efi ni r os v al or es das segui nt es cor es bsi cas :

Cor R G B Valor
Pr et o 0 0 0 0
Az ul 0 0 255 16711680
Ver d e 0 255 0 65280
Ci a no 0 255 255 16776960
Ver mel ho 255 0 0 255
Rosa 255 0 255 16711935
Amar el o 255 255 0 65535
Br a nco 255 255 255 16777215



- 308 -

ADVPL Completo



Par a a t ri bui r as cor es a os obj et os vi su ai s de v e m ser obser v a dos os a t ri but os ut ili z a dos par a
est es fi ns e m ca da obj e t o, como por e x e mpl o :

MSDIALOG( )

nClrPane Cor de f undo do pai nel
nClrText Cor da f ont e das l et r as do pai nel


TSAY( )

nClrPane Cor de f undo do pai nel
nClrText Cor da f ont e das l et r as do pai nel


Funo RGB( )

A li ngu a ge m ADVPL possui a f uno RGB( ) a qu al r et or n a o v al or da cor a ser defi ni do, de
acor do com a pa r a met ri z ao d e ca da u m dos el e me nt os da pal et a RGB.


RGB(nRed, nGreen, nBlue)

nRed Val or de 0- 255 pa r a o el e me nt o v er mel ho da pal et a RGB
nGreen Val or de 0- 255 pa r a o el e me nt o v er d e da pal et a RGB
nBlue Val or de 0- 255 pa r a o el e me nt o a z ul da pal et a RGB
Retorno Val or a ser defi ni do par a o a t ri but o cor do compone nt e


- 309 -

ADVPL Completo



30. Aplicaes com a interface visual do ADVPL

A li ngu a ge m ADVPL possui i nt erf aces vi suai s pr - d efi ni das que a uxili a m no dese nv ol vi me nt o
de a pl i caes mai s co mpl et as, combi n a ndo est as i nt erf aces com os co mpone nt es vi su ais
de monst r a dos a nt eri or me nt e.

Di da ti ca me nt e as i nt erf aces vi suai s pr - defi ni das da li ngu a ge m ADVPL pode m ser di vi di das e m
t r s gr upos :

E Captura de informaes simples ou Multi-Gets;
E Captura de mltiplas informaes ou Multi-Lines;
E Barras de botes

30.1. Captura de informaes simples (Multi-Gets)

E m ADVPL, as t el as de ca pt ur a de i nf or maes compost as por ml ti pl os ca mpos di gi t v ei s
acompa nh a dos d e se us r esp ect i vos t e xt os e x pl i ca ti vos s o co mu me nt e ch a ma dos de
Enchoi ces.

Um Enchoi ce pode ser f acil me nt e e nt e ndi da como di v ersos conj unt os de obj et os TSa y e TGet
ali nh a dos de f or ma a vi suali z ar ou ca pt ur ar i nf or maes, nor mal me nt e vi ncul a das a ar qui vos
de ca dast r os ou movi me nt aes si mpl es.

Abai xo t e mos a vi suali z ao de u ma Enchoi ce par a o ar qui vo pa dr o do ERP Pr ot he us d e
Ca dast r o de Cl i e nt es ( SA1) :



Figura: Enchoice do Cadastro de Clientes do ERP Protheus


- 310 -

ADVPL Completo



A li ngua ge m ADVPL p er mi t e a i mpl e me nt ao d a Enchoi ce de duas f or mas si mil ar es :

E Funo Enchoice: Si nt a x e t r a di ci on al me nt e utili z a da e m ADVPL, a qu al n o r et or n a
u m obj et o par a a a pl i cao ch a ma dor a ;

E Classe MsMGet: Cl asse do obj et o Enchoi ce, a qu al per mi t e a i nst a nci ao di r et a d e u m
obj et o, t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .

A utili z ao de u m ou out ro obj et o dep e nde unica me nt e da escol h a do dese nvol v edor j que os
par met ros par a a f uno Enchoi ce e pa r a o mt odo Ne w( ) da cl asse MsMGet s o os mesmos,
l e mbr a ndo que par a ma nt er a coer nci a com u ma a pli cao escri t a e m ori e nt ao a obj et os
de v er ser ut i li z a da a cl asse MsMGet ( ) .

30.1.1. Enchoice( )

E Sintaxe: Enchoice( cAlias, nReg, nOpc, aCRA, cLetra, cTexto, aAcho, aPos,
aCpos, nModelo, nColMens, cMensagem, cTudoOk, oWnd, lF3,
lMemoria, lColumn, caTela, lNoFolder, lProperty)

E Retorno: Nil
E Parmetros:

cAlias Ta bel a ca dast r a da no Di ci on ri o de Ta b el as ( SX2) que ser
edi t a da
nReg Par met r o n o ut ili z a do
nOpc N mer o da li nh a do aRot i na que defi ni r o t i po de edi o
( I ncl uso, Al t er ao, Excl uso, Vi suali z ao)
aCRA Par met r o n o ut ili z a do
cLetra Par met r o n o ut ili z a do
cTexto Par met r o n o ut ili z a do
aAcho Vet or com nome dos ca mpos qu e ser o e xi bi dos. Os ca mpos
de usu ri o se mpr e ser o e xi bi dos se n o e xi st i r no par met ro
u m el e me nt o com a e x pr ess o " NOUSER"
aPos Vet or com coor d e n a das par a cri ao da e nchoi ce no f or ma t o
{ < t op > , < l ef t > , < bot t o m > , < ri ght > }
aCpos Vet or com nome dos ca mpos qu e pod er o ser e di t a dos
nModelo Se f or di f er e nt e d e 1 d esa bili t a e x ecu o d e ga t il hos
est r a ngei ros
nColMens Par met r o n o ut ili z a do
cMensagem Par met r o n o ut ili z a do
cTudoOk Ex pr ess o par a v al i dao da Enchoi ce
oWnd Obj et o ( j a nel a , pai nel , et c. ) ond e a e nchoi ce ser cri a da .
lF3 I ndi ca se a e nchoi ce est a se ndo cri a da e m u ma consul t a F 3
par a ut ili z ar v ari v ei s de me mri a
lMemoria I ndi ca se a e nchoi ce ut i li z ar v ari v ei s de me mri a ou os
ca mpos da t a bel a na edi o
lColumn I ndi ca se a a pr ese nt a o dos ca mpos ser e m f or ma de
col un a
caTela Nome da v ari v el t i po " pri v a t e " que a e nchoi ce utili z ar no
l ugar da propri eda de a Tel a
lNoFolder I ndi ca se a e nchoi ce n o i r ut ili z ar as Past as d e Ca dast r o
( SXA)
lProperty I ndi ca se a e nchoi ce n o ut ili z ar as v a ri v ei s a Tel a e a Get s,
some nt e suas propri eda des com os mesmos no mes

- 311 -

ADVPL Completo




Exemplo: Utilizao da funo Enchoice( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da funo Enchoice() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwEnch()

Private cCadastro := " Cadastro de Clientes"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)

Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)



- 312 -

ADVPL Completo



Exemplo (continuao):

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL
RegToMemory("SA1", If(nOpc==3,.T.,.F.))

Enchoice(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/, /*cTexto*/, ;
aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/,/*cTudoOk*/, oDlg, lF3, lMemoria, lColumn,;
caTela, lNoFolder, lProperty)

ACTIVATE MSDIALOG oDlg CENTERED

Return


30.1.2. MsMGet( )

E Sintaxe: MsMGet( ):New( cAlias, nReg, nOpc, aCRA, cLetra, cTexto, aAcho,
aPos, aCpos, nModelo, nColMens, cMensagem, cTudoOk, oWnd, lF3,
lMemoria, lColumn, caTela, lNoFolder, lProperty)

E Retorno: oMsMGet objeto do tipo MsMGet( )
E Parmetros:

cAlias Ta bel a ca dast r a da no Di ci on ri o de Ta b el as ( SX2) que ser
edi t a da
nReg Par met r o n o ut ili z a do
nOpc N mer o da li nha do aRot i na que defi ni r o t i po de edi o
( I ncl uso, Al t er ao, Excl uso, Vi suali z ao)
aCRA Par met r o n o ut ili z a do
cLetra Par met r o n o ut ili z a do
cTexto Par met r o n o ut ili z a do
aAcho Vet or com nome dos ca mpos qu e ser o e xi bi dos. Os ca mpos
de usu ri o se mpr e ser o e xi bi dos se n o e xi st i r no par met ro
u m el e me nt o com a e x pr ess o " NOUSER"
aPos Vet or com coor d e n a das par a cri ao da e nchoi ce no f or ma t o
{ < t op > , < l ef t > , < bot t o m > , < ri ght > }
aCpos Vet or com nome dos ca mpos qu e pod er o ser e di t a dos
nModelo Se f or di f er e nt e d e 1 d esa bili t a e x ecu o d e ga t il hos
est r a ngei ros
nColMens Par met r o n o ut ili z a do
cMensagem Par met r o n o ut ili z a do
cTudoOk Ex pr ess o par a v al i dao da Enchoi ce
oWnd Obj et o ( j a nel a , pai nel , et c. ) ond e a e nchoi ce ser cri a da .
lF3 I ndi ca se a e nchoi ce est a se ndo cri a da e m u ma consul t a F 3
par a ut ili z ar v ari v ei s de me mri a

- 313 -

ADVPL Completo


lMemoria I ndi ca se a e nchoi ce ut i li z ar v ari v ei s de me mri a ou os
ca mpos da t a bel a na edi o
lColumn I ndi ca se a a pr ese nt a o dos ca mpos ser e m f or ma de
col un a
caTela Nome da v ari v el t i po " pri v a t e " que a e nchoi ce utili z ar no
l ugar da propri eda de a Tel a
lNoFolder I ndi ca se a e nchoi ce n o i r ut ili z ar as Past as d e Ca dast r o
( SXA)
lProperty I ndi ca se a e nchoi ce n o ut ili z ar as v a ri v ei s a Tel a e a Get s,
some nt e suas propri eda des com os mesmos no mes

Exemplo: Utilizao do objeto MsMGet( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsMget() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwMsGet()

Private cCadastro := " Cadastro de Clientes"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)
Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

- 314 -

ADVPL Completo


Exemplo (continuao):

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

oDlg := MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)

RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/,;
/*cTexto*/, aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/, /*cTudoOk*/,oDlg,lF3,lMemoria,lColumn, caTela,;
lNoFolder, lProperty)

oDlg:lCentered := .T.
oDlg:Activate()

Return


30.2. Captura de mltiplas informaes (Multi-Lines)

A li ngu a ge m ADVPL per mi t e a utili z ao de basi ca me nt e doi s ti pos de obj et os do t i po gri d, ou
como t a mb m s o conh eci dos : mul ti -li ne :

E Grids digitveis: per mi t e m a vi su ali z ao e ca pt ur a de i nf or maes, co mu me nt e
utili z a dos e m i nt erf aces de ca dast r o e ma nut e n o, t ai s como :

MSGETDB( )
MSGETDADOS( )
MSNEWGETDADOS( )

E Grids no digitveis: per mi t e m some nt e a vi suali z ao de i nf or maes, comu me nt e
utili z a dos como browses do ERP Pr ot he us, t ai s como :

TWBROWSE( )
MAWNDBROWSE( )
MBROWSE( )

Nest e t pi co ser o t r a t a das as gri ds di gi t v ei s di spon v ei s n a li ngu a ge m ADVPL par a o
dese nvol vi me nt o de i nt erf aces d e ca dast r os e ma nut e no d e i nf or maes.

- 315 -

ADVPL Completo



30.2.1. MsGetDB( )

A cl asse de obj et os vi su ai s MsGet DB( ) per mi t e a cri ao de u m gri d di gi t v el com u ma ou mai s
col un as, base a do e m u ma t a bel a t e mpor ri a .

E Sintaxe: MsGetDB( ) :New(nTop, nLeft, nBottom, nRight, nOpc, cLinhaOk,
cTudoOk, cIniCpos, lDelete, aAlter, nFreeze, lEmpty, uPar1, cTRB,
cFieldOk, lCondicional, lAppend, oWnd, lDisparos, uPar2, cDelOk,
cSuperDel)

E Retorno: oMsGetDB objeto do tipo MsGetDB( )

E Parmetros:

nTop Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de superi or do
obj et o que a cont m.
nLeft Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de esquer da do
obj et o que a cont m.
nBottom Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de i nf eri or do obj et o
que a cont m.
nRight

Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de di r ei t a do obj et o
que a cont m.
nOpc Posi o do el e me nt o do v et or aRot i n a que a MsGet DB usa r
como r ef er nci a .
cLinhaOk F uno e x ecut a da pa r a v ali dar o cont e xt o da li nh a a t ual do
a Col s.
cTudoOk F uno e x ecut a da par a v ali dar o cont e xt o ger al da MsGet DB
( t odo a Col s) .
cIniCpos Nome dos ca mpos do t i po ca r act er que ut ili z ar o i ncr e me nt o
a ut om t i co. Est e par met r o de v e ser no f or ma t o + < nome
do pri mei ro ca mpo > + < nome do segundo ca mpo > + . . . .
lDelete Ha bili t a a opo de e xcl ui r li nhas do a Col s. Val or pa dr o
f al so.
aAlter Vet or com os ca mpos que pod er o ser al t er a dos.
nFreeze I ndi ca qu al col una n o fi car a cong el a da n a e xi bio.
lEmpty Ha bili t a v ali dao da pri mei r a col un a do a Col s par a est a n o
poder est ar v a zi a . Val or pa dr o f al so.
uPar1 Par met r o r eser v a do.
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo.
cTRB Ali as da t a bel a t e mpor ri a .
lCondicional Reser v a do
lAppend I ndi ca se a MsGet DB i r a cri ar u ma li nha e m br a nco
a ut oma t i ca me nt e qua ndo f or i ncl uso.
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.
lDisparos I ndi ca se ser ut ili z a do o Di ci on ri o de Da dos par a consul t a
pa dr o, i ni ci ali z ao pa dr o e ga t i l hos.
uPar2 Par met r o r eser v a do.
cSuperDel - F un o e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e > .
oWnd Obj et o no qu al a MsGet DB ser cri a da .




- 316 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi suali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i n a , n Op o, nAcesso } , a onde :
n Opo segue o pa dr o do ERP Prot h e us pa r a :
1- Pesqui sar
2- Vi suali z ar
3- I ncl ui r
4- Al t er ar
5- Excl ui r
aHeader Vet or com i nf or maes das col unas no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nh a f oi e xcl u da .


lRefresh Vari v el ti po l gi ca par a uso r eser v a do.


- 317 -

ADVPL Completo



E Variveis pblicas:

nBrLin I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i dao na muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsGet DB co m a t a bel a e posi ci on a n a pri mei r a
li nha .

Exemplo: Utilizao do objeto MsGetDB( )


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Funo | GETDBSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsGetDB() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDbSA1()

Local nI
Local oDlg
Local oGetDB
Local nUsado := 0
Local aStruct := {}

Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")


- 318 -

ADVPL Completo


Exemplo (continuao):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
AADD(aStruct,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3->X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
DbSkip()
End

AADD(aStruct,{"FLAG","L",1,0})

cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)

oDlg := MSDIALOG():New(000,000,300,400, MsGetDB SA1,,,,,,,,,.T.)

oGetDB := MsGetDB():New(05,05,145,195,3,"U_LINHAOK", "U_TUDOOK", "+A1_COD", ;
.T.,{"A1_NOME"},1,.F.,,cCriaTrab,"U_FIELDOK",,.T.,oDlg, .T., ,"U_DELOK",;
"U_SUPERDEL")

oDlg:lCentered := .T.
oDlg:Activate()
DbSelectArea(cCriaTrab)
DbCloseArea()

Return

User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()
ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.



- 319 -

ADVPL Completo



30.2.2. MsGetDados( )

A cl asse de obj et os vi su ai s MsGet Da dos( ) per mi t e a cri ao de u m gri d di gi t v el com u ma ou
mai s col unas, base a do e m u m a rr a y.

E Sintaxe: MsGetDados( ):New( nTop, nLeft, nBottom, nRight, nOpc, cLinhaOk,
cTudoOk, cIniCpos, lDelete, aAlter, uPar1, lEmpty, nMax, cFieldOk,
cSuperDel, uPar2, cDelOk, oWnd)

E Retorno: oMsGetDados objeto do tipo MsGetDados( )

E Parmetros:

nTop Di st a nci a e nt r e a MsGe t Da dos e o e xt r e mi da de superi or do
obj et o que a cont m.
nLeft Di st a nci a e nt r e a MsGe t Da dos e o e xt r e mi da de esqu er da do
obj et o que a cont m.
nBottom Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de i nf eri or do
obj et o que a cont m.
nRight

Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de di r ei t a do
obj et o que a cont m.
nOpc Posi o do el e me nt o do v et or aRot i n a que a MsGet Da dos
usar como r ef er e nci a .
cLinhaOk F uno e x ecut a da par a v ali dar o cont e xt o da li nh a a t u al do
a Col s.
cTudoOk F uno e x ecut a da p ar a v al i dar o cont e xt o g er al da
MsGet Da dos ( t odo a Col s) .
cIniCpos Nome dos ca mpos do t i po ca r act er qu e ut ili z ar o i ncr e me nt o
a ut om t i co. Est e par met r o de v e ser no f or ma t o + < nome
do pri mei ro ca mpo > + < nome do segundo ca mpo > + . . . .
lDelete Ha bili t a e xcl ui r li nhas do a Col s. Val or pa dr o f al so.
aAlter Vet or com os ca mpos que pod er o ser al t er a dos.
uPar1 Par met r o r eser v a do.
lEmpty Ha bili t a v ali dao da pri mei r a col un a do a Col s par a est a no
poder est ar v a zi a . Val or pa dr o f al so.
nMax N mer o m xi mo de l i nhas per mi t i das. Val or pa dr o 99.
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo.
cSuperDel F uno e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e > .
uPar2 Par met r o r eser v a do.
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.
oWnd Obj et o no qu al a MsGet Da dos ser cri a da .


- 320 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi suali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i na , n Op o, nAcesso } , a onde :
n Opo segue o pa dr o do ERP Prot h e us pa r a :
6- Pesqui sar
7- Vi su ali z ar
8- I ncl ui r
9- Al t er ar
10- Excl ui r
aHeader Vet or com i nf or maes das col unas no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nha f oi e xcl u da .


lRefresh Vari v el ti po l gi ca par a uso r eser v a do.


- 321 -

ADVPL Completo



E Variveis pblicas:

N I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i dao na muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsGet Da dos com a t a bel a e posi ci on a n a pri mei r a
li nha .
Hide( ) Ocul t a a MsGet Da dos.
Show( ) Most r a a MsGet Da dos.


Exemplo: Utilizao do objeto MsGetDados( )


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Funo | GETDADOSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MSGETADOS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDadoSA1()

Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}

Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")


- 322 -

ADVPL Completo



Exemplo (continuao):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
EndIf
DbSkip()
End

AADD(aCols,Array(nUsado+1))

For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next

aCols[1][nUsado+1] := .F.

oDlg := MSDIALOG():New(000,000,300,400, MsGetDados SA1,,,,,,,,,.T.)

oGetDados := MsGetDados():New(05, 05, 145, 195, 4, "U_LINHAOK", "U_TUDOOK",;
"+A1_COD", .T., {"A1_NOME"}, , .F., 200, "U_FIELDOK", "U_SUPERDEL",,;
"U_DELOK", oDlg)

oDlg:lCentered := .T.
oDlg:Activate()

Return

User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()
ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.



- 323 -

ADVPL Completo



30.2.3. MsNewGetDados( )

A cl asse de obj et os vi su ai s MsNe wGet Da dos( ) per mi t e a cri ao de u m gri d di gi t v el com u ma
ou mai s col un as, base a do e m u m a rr a y .

E Sintaxe: MsNewGetDados( ) :New(nSuperior, nEsquerda ,nInferior, nDireita,
nOpc, cLinOk, cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,
cFieldOk, cSuperDel, cDelOk, oDLG, aHeader, aCols)

E Retorno: oMsGetDados objeto do tipo MsNewGetDados( )

E Parmetros:

nSuperior Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de sup eri or
do obj et o qu e a cont e m
nEsquerda Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de esquer da
do obj et o qu e a cont e m
nInferior Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de i nf eri or do
obj et o que a cont e m
nDireita Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de di r ei t a do
obj et o que a cont e m
nOpc Oper a o e m e x ecu o : 2- Vi suali z ar, 3- I ncl ui r, 4- Al t er ar , 5-
Excl ui r
cLinOk F uno e x ecut a da par a v ali dar o cont e xt o da l i nh a a t ual do
a Col s
cTudoOk F uno e x ecut a da par a v ali dar o cont e xt o g er al da
MsNe wGet Da dos ( t odo a Col s)
cIniCpos Nome dos ca mpos do t i po ca r act er que ut i li z ar o i ncr e me nt o
a ut om t i co.
aAlterGDa Ca mpos al t er v ei s da Get Da dos
nFreeze Ca mpos est t i cos na Ge t Da dos, par t i ndo se mpr e da posi o
i ni ci al da get da dos a onde :
1- Pri mei ro ca mpo congel a do
2- Pri mei ro e segundo ca mpos cong el a dos. . .
nMax N mer o m xi mo de l i nhas per mi t i das. Val or pa dr o 99
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo
cSuperDel F uno e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e >
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s
oDLG Obj et o no qual a MsNe wGet Da dos ser cri a da
aHeader Arr a y a ser t r a t a do i nt er n a me nt e na MsNe wGet Da dos co mo
a He a d er
aCols Arr a y a ser t r a t a do i nt er n a me nt e na MsNe wGet Da dos co mo
a Col s


- 324 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi su ali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i n a , n Op o, nAcesso } , a onde :

n Opo segue o pa dr o do ERP Prot h e us pa r a :
1- Pesqui sar
2- Vi su ali z ar
3- I ncl ui r
4- Al t er ar
5- Excl ui r
aHeader Vet or com i nf or maes das col unas no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nha f oi e xcl u da .

lRefresh Vari v el ti po l gi ca par a uso r eser v a do.

- 325 -

ADVPL Completo



E Variveis pblicas:

N I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i dao na muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsNe wGet Da dos com a t a bel a e posi ci on a na
pri mei r a li nh a .
Hide( ) Ocul t a a MsNe wGet Da dos.
Show( ) Most r a a MsNe wGet Da dos.

Exemplo: Utilizao dos objetos MsNewGetDados( ) e MsMGet( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao dos objetos |
| | MsNewGetDados() e MsMGet() combinados |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGetD()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}


- 326 -

ADVPL Completo



Exemplo (continuao):

Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.;
cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

- 327 -

ADVPL Completo



Exemplo (continuao):

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,;
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)
RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
/*cTudoOk*/, oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,;
lProperty)

oGetD:= MsNewGetDados():New(nSuperior, nEsquerda, nInferior, nDireita,;
nOpc,cLinOk,cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk,;
cSuperDel,cDelOk, oDLG, aHeader, aCols)

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()},{||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()
Return

- 328 -

ADVPL Completo



30.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados( )

Conf or me vi st o no t pico sobr e defi ni o das propri eda des de cor es par a os compone nt es
vi su ai s, ca da obj et o possui car act er st i cas que de v e m ser r espei t a das par a corr et a ut i li z ao
dest e r ecurso.

E Atributos adicionais:

lUseDefaultColors At ri but o que de v er ser defi ni do como . F . par a que as
al t er aes n as cor es sej a m per mi ti das.


E Mtodos adicionais:

SetBlkBackColor Mt odo que defi ne a cor que ser ut ili z a da par a ca da li nh a do
gri d. No n ecess ri o ut ili z ar o mt odo Refr esh( ) a ps a
defi ni o da cor por est e mt odo.

E Aparncia:






- 329 -

ADVPL Completo



Exemplo: Definindo cores personalizadas para o objeto MsNewGetDados( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao dos objetos |
| | MsNewGetDados() e MsMGet() combinados e tratamento de cores |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGtCl()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0

Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999


- 330 -

ADVPL Completo


Exemplo (continuao):

Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3-
>X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End


- 331 -

ADVPL Completo



Exemplo (continuao):

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado

IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF

Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)

RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,;
aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)

oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,;
cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,;
cDelOk, oDLG, aHeader, aCols)

// Tratamento para definio de cores especficas,
// logo aps a declarao da MsNewGetDados

oGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()

Return


- 332 -

ADVPL Completo



Exemplo (continuao):

// Funo para tratamento das regras de cores para a grid da MsNewGetDados

Static Function GETDCLR(aLinha,nLinha,aHeader)

Local nCor2 := 16776960 // Ciano - RGB(0,255,255)
Local nCor3 := 16777215 // Branco - RGB(255,255,255)
Local nPosProd := aScan(aHeader,{|x| Alltrim(x[2]) == "C6_PRODUTO"})
Local nUsado := Len(aHeader)+1
Local nRet := nCor3

If !Empty(aLinha[nLinha][nPosProd]) .AND. aLinha[nLinha][nUsado]
nRet := nCor2
ElseIf !Empty(aLinha[nLinha][nPosProd]) .AND. !aLinha[nLinha][nUsado]
nRet := nCor3
Endif

Return nRet





























- 333 -

ADVPL Completo



30.3. Barras de botes

A li ngu a ge m ADVPL per mi t e a i mpl e me nt ao de bar r as d e bot es utili z a ndo f unes pr -
defi ni das dese nvol vi das com o obj et i vo de f acili t ar su a ut ili z a o, ou a t r a v s da ut ili z ao
di r et a dos compone nt es vi suai s di spon v ei s. De nt r e os r ecursos da li ngu a ge m que pode m ser
utili z a dos com est a fi nali da de ser o a bor da dos :

E Funo EnchoiceBar: Si nt a x e t r a di ci onal ment e utili z a da e m ADVPL, a qu al no
r et or n a u m obj et o par a a a pli cao ch a ma dor a ;

E Classe TBar: Cl asse do obj et o TBar ( ) , a qual per mi t e a i nst a nci ao di r et a de u m
obj et o do t i po bar r a d e bot es superi or, t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .

E Classe ButtonBar: Cl asse do obj et o But t onBa r ( ) , a qual per mi t e a i nst a nci ao di r et a
de u m obj et o bar r a d e bot es g e nri co, o qu al pode ser ut ili z a do e m qu al quer posi o
da t el a , t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .


30.3.1. EnchoiceBar( )

F uno que cri a u ma barr a d e bot es no f or ma t o pa dr o ut ili z a do pel as i nt erf aces de ca dast r o
da a pli cao Prot he us.

Est a bar r a possui os bot es pa dres pa r a confi r mar ou ca ncel ar a i nt erf ace e ai nda per mi t e a
a di o de bot es a di ci on ai s com a ut ili z ao do par met r o aButtons.


E Sintaxe:


EnchoiceBar( oDlg, bOk, bCancel, lMsgDel, aButtons, nRecno, cAlias)


E Parmetros:

oDlg Di al og onde i r cri ar a b arr a de bot es
bOk Bl oco de cdi go a ser e x ecut a do no bot o Ok
bCancel Bl oco de cdi go a ser e x ecut a do no bot o Ca ncel ar
lMsgDel Exi be di al og par a confi r mar a e xcl uso
aButtons
Arr a y cont e ndo bot es a di ci on ai s.
a Arr a y[ n] [ 1] - > I ma g e m do bot o
a Arr a y[ n] [ 2] - > bl oco d e cdi go cont e ndo a a o do bot o
a Arr a y[ n] [ 3] - > t t ul o do bot o
nRecno Regi st ro a ser posi ci ona do a ps a e x ecuo do bot o Ok .
cAlias
Ali as do r e gi st r o a ser posi ci on a do a ps a e x ecuo do bot o
Ok. Se o pa r met r o nRecno f or i nf or ma do, o cAl i as passa ser
obri ga t ri o.

E Aparncia:





- 334 -

ADVPL Completo


Exemplo: Utilizao da funo EnchoiceBar( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da funo |
| | EnchoiceBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function DEnchBar()
Local oDlg, oBtn
Local aButtons := {}

DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF;
oMainWnd

AADD( aButtons, {"HISTORIC", {|| TestHist()}, "Histrico...",;
"Histrico",{|| .T.}} )

@ -15,-15 BUTTON oBtn PROMPT "..." SIZE 1,1 PIXEL OF oDlg

ACTIVATE MSDIALOG oDlg ;
ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))

Return















- 335 -

ADVPL Completo



30.3.2. TBar( )

Cl asse d e obj et os vi su ai s que per mi t e a i mpl e me nt ao de u m compone nt e do t i po barr a d e
bot es pa r a a par t e sup eri or de u ma j a nel a pr e vi a me nt e defi ni da .

E Sintaxe: New(oWnd, nBtnWidth, nBtnHeight, l3D, cMode, oCursor, cResource,
lNoAutoAdjust)

E Retorno: oTBar objeto do tipo TBar( )

E Parmetros:

oWnd
Obj et o, opci onal . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
nBtnWidth Nu mri co, opci on al . Lar gur a do bot o cont i do n a barr a
nBtnHeight Nu mri co, opci on al . Al t ur a do bot o cont i do n a barr a
l3D Lgi co, opci on al . Defi ne t i po da barr a
cMode No ut i li z a do.
oCursor
Obj et o, opci on al . Defi ne Cursor ao posi ci onar o mouse sobr e a
barr a .
cResource
Car act er , opci on al . I ma ge m do r ecurso a ser i nseri do como
f undo da bar r a .
lNoAutoAdjust Lgi co.

E Aparncia:





Exemplo: Utilizao da funo EnchoiceBar( )


#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------------
| Funo | TSTBAR | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function TstTBar()
Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

- 336 -

ADVPL Completo



Exemplo (continuao):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;
{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;
{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;
{||},oTBar,'Preo' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return



30.3.3. ButtonBar

A si nt a x e ButtonBar a f or ma cl ssi ca utili z ada na li ngu a ge m ADVPL par a i mpl e me nt ar u m
obj et o da cl asse TBar ( ) , o qual possui as car act er st i cas me nci ona das no t pi co a nt eri or .

E Sintaxe:


DEFINE BUTTONBAR oBar SIZE nWidth, nHeight 3D MODE OF oDlg
CURSOR


E Retorno: ( ).

E Parmetros:

oBar Obj et o do t i po TBa r ( ) que ser cri a do com a ut i li z ao da
si nt a x e But t onBar ( ) .
nWidth Nu mri co, opci on al . Lar gur a do bot o cont i do n a barr a .
nHeight Nu mri co, opci on al . Al t ur a do bot o cont i do n a barr a .
3D Se defi ni do h a bili t a a visu ali z ao e m 3 D da ba rr a d e bot es.
oDlg Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
MODE Defi ne a f or ma de ori e nt ao do obj et o But t onBar ut ili z a ndo
os segui nt es t er mos pr - defi ni dos :
TOP, BOTT OM, FLOAT

CURSOR Obj et o, opci on al . Defi ne Cursor ao posi ci on ar o mouse sobr e
a barr a .


- 337 -

ADVPL Completo


A si nt a x e But t onBar r equ er a a di o dos bot es como r ecursos a di ci on ai s da barr a
pr e vi a me nt e defi ni da utili z a ndo a si nt a x e a bai xo :

E Botes: BUTTON RESOURCE

E Sintaxe adicional:


DEFINE BUTTON RESOURCE cBitMap OF oBar ACTION cAcao TOOLTIP
cTexto


E Parmetros:

cBitMap Nome da i ma ge m di spon v el n a a pli cao.
oBar Obj et o do t i po TBa r ( ) no qual o bot o ser a di ci on a do.
cAcao F uno ou l i st a de e x pr esses qu e d et er mi na a ao que ser
r e al i z a da pel o bot o.
cTexto Te xt o no est il o t ool t i p t e xt qu e ser e xi bi do qu a ndo o
cursor do mouse f or posi ci on a do sobr e o bot o n a barr a de
f err a me nt as.

E Aparncia:





Exemplo: Utilizao da sintaxe ButtonBar


#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------
| Funo | TstBBar | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function TstBBar()

Local oDlg
Local oBtn1
Local oBtn2

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - BUTTONBAR',,,,,,,,,.T.)

DEFINE BUTTONBAR oBar SIZE 25,25 3D TOP OF oDlg

- 338 -

ADVPL Completo



Exemplo (continuao):

DEFINE BUTTON RESOURCE "S4WB005N" OF oBar ACTION NaoDisp() TOOLTIP "Recortar"
DEFINE BUTTON RESOURCE "S4WB006N" OF oBar ACTION NaoDisp() TOOLTIP "Copiar"
DEFINE BUTTON RESOURCE "S4WB007N" OF oBar ACTION NaoDisp() TOOLTIP "Colar"
DEFINE BUTTON oBtn1 RESOURCE "S4WB008N" OF oBar GROUP;
ACTION Calculadora() TOOLTIP "Calculadora"

oBtn1:cTitle:="Calc"
DEFINE BUTTON RESOURCE "S4WB009N" OF oBar ACTION Agenda() TOOLTIP "Agenda"
DEFINE BUTTON RESOURCE "S4WB010N" OF oBar ACTION OurSpool() TOOLTIP "Spool"
DEFINE BUTTON RESOURCE "S4WB016N" OF oBar GROUP;
ACTION HelProg() TOOLTIP "Ajuda"

DEFINE BUTTON oBtn2 RESOURCE "PARAMETROS" OF oBar GROUP;
ACTION Sx1C020() TOOLTIP "Parmetros"

oBtn2:cTitle:="Param."

DEFINE BUTTON oBtOk RESOURCE "FINAL" OF oBar GROUP;
ACTION oDlg:End()TOOLTIP "Sair"

oBar:bRClicked := {|| AllwaysTrue()}
oDlg:lCentered := .T.
oDlg:Activate()

Return





















- 339 -

ADVPL Completo



30.3.4. Imagens pr-definidas para as barras de botes

Conf or me me nci ona do nos t pi cos a nt eri or es, os bot es vi suai s do t i po bar r a d e bot es
per mi t e m a d efi ni o de i t e ns com aes e i ma ge ns vi ncul a das.

De nt r e os obj et os e f unes me nci on a dos, f oi ci t a da a Enchoi ce Bar ( ) , a qu al per mi t e a a di o
de bot es a di ci on ai s a t r a v s do par met r o aButton, se ndo que os i t e ns dest e ar r a y d e v e m
possui r o segui nt e f or ma t o :

E Sintaxe: AADD( a But t ons, { cBi t Ma p, bAca o, cTe x t o } )

E Estrutura:

cBitMap
Nome da i ma ge m pr - d efi ni da e xi st e nt e n a a pl ica o ERP que
ser vi ncul a da ao bot o.
bAcao
Bl oco de cdi go que d efi ne a ao qu e ser e x ecut a da com a
utili z ao do bot o.
cTexto
Te xt o no est il o t ool t i p t e xt qu e ser e xi bi do qu a ndo o cursor
do mouse f or posi ci on a do sobr e o bot o n a ba r r a de
f err a me nt as.

E Alguns BitMaps disponveis:


DESTINOS

DISCAGEM

EDIT

EDITABLE

EXCLUIR

FORM

GRAF2D

GRAF3D

LINE

NOTE

OBJETIVO

OK

PENDENTE

PRECO

PRODUTO

S4SB014N

S4WB001N

S4WB005N

S4WB006N

S4WB007N

S4WB008N

S4WB009N

S4WB010N

S4WB011N

S4WB013N

S4WB014A

S4WB016N

SIMULACA

VENDEDOR

USER

E Exemplo:


AADD(aButtons,{"USER",{||AllwaysTrue()},"Usurio"})



- 340 -

ADVPL Completo



APNDICES

BOAS PRTICAS DE PROGRAMAO

31. Arredondamento

Al gu mas oper aes nu mri cas pod e m ca usar di f er e nas d e ar r edonda me nt o. I sso ocor r e
de vi do a di f er e nas no ar ma z e n a me nt o de v a ri v ei s nu mri cas nos di v ersos pr ocessa dor es,
di f er e na est a , i ncl usi v e, pr ese nt e no ADVPL, mesmo a nt es do sur gi me nt o do Pr ot he us.

Par a e vi t ar esses probl e mas de a rr edonda me nt o, d e v e ser ut ili z a da a f uno Round( ) ,
pri nci pal me nt e a nt es d e r e ali z ar u ma compa r ao e a nt es de se ut ili z ar a f uno I nt ( ) .

Desse modo, assegur a - se que o r esul t a do ser cor r et o i ndepe nde nt e me nt e do pr ocessa dor ou
pl a t af or ma .

Exemplo 01:


If (Valor/30) == 50 // pode ser falso ou invlido
If Round(Valor/30, 0) == 50 // correto


Exemplo 02:


M->EE8_QTDEM1 := Int(M->EE8_SLDINI/M->EE8_QE) // pode ser falso ou invlido
M->EE8_QTDEM1 := Int(Round(M->EE8_SLDINI/M->EE8_QE,10)) // correto



32. Utilizao de Identao

obri ga t ri a a ut ili z ao da i de nt ao, poi s t or na o cdi go mui t o mai s l eg v el . Vej a os
e x e mpl os a bai xo :


While !SB1->(Eof())
If mv_par01 == SB1->B1_COD
dbSkip()
Loop
Endif
Do Case
Case SB1->B1_LOCAL == 01 .OR. SB1->B1_LOCAL == 02
TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)
Case SB1->B1_LOCAL == 03
TrataDefeito(SB1->B1_COD)
OtherWise
TrataCompra(SB1->B1_COD, SB1->B1_LOCAL)
EndCase
dbSkip()
EndDo


- 341 -

ADVPL Completo




A utili z ao da i de nt ao segui ndo as est r ut ur as de cont r ol e de fl uxo ( whil e, I F, caso et c. )
t or na a compr e e ns o do cdi go mui t o mai s f ci l :


While !SB1->(Eof())

If mv_par01 == SB1->B1_COD
dbSkip()
Loop
Endif

Do Case
Case SB1->B1_LOCAL == 01 .OR. SB1->B1_LOCAL == 02
TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)

Case SB1->B1_LOCAL == 03
TrataDefeito(SB1->B1_COD)

OtherWise
TrataCompra(SB1->B1_COD, SB1->B1_LOCAL)
EndCase
dbSkip()

EndDo


Par a i de nt ar o cdi go utili z e a t ecl a < TAB > e n a f err a me nt a DEV- St udi o, a qu al pode ser
confi gur a da a t r a v s da op o Pr ef er nci as :



- 342 -

ADVPL Completo




33. Capitulao de Palavras-Chave

Uma conv e n o a mpl a me nt e ut i li z a da a de ca pi t ul ar as pal a vr as ch a v es, f unes, v ari v ei s e
ca mpos ut ili z a ndo u ma combi n ao d e ca r act er es e m mai scul o e mi nscul o, vi sa ndo f acili t ar
a l ei t ur a do cdi go f ont e . O cdi go a segui r :


Local ncnt while ( ncnt+ + < 10 ) ntotal + = ncnt * 2 enddo


Fi cari a mel hor com as p al a vr as ch a v es e v ari v ei s ca pi t ul a das :


Local nCnt While ( nCnt+ + < 10 ) nTotal + = nCnt * 2 EndDo




Par a f unes d e ma ni pul ao de da dos qu e comece m por db, a ca pi t ul ao
s ser ef et u a da a ps o db :

E dbSeek( )
E dbSelectArea( )


33.1. Palavras em maisculo

A r egr a ut i li z ar car act er es e m mai scul o par a :

E Constantes:


# defi ne NUMLI NES 60 # defi ne NUMPAGES 100 0


E Variveis de memria:


M- > CT2_CRC ONV M- > CT2_MC ONVER : = Cri a Var ( " CT2_C ONVER" )


E Campos:


SC6- > C6_NUMPED


E Querys:


SELECT * FROM. . .


- 343 -

ADVPL Completo



34. Utilizao da Notao Hngara

A not ao hngar a consi st e e m a di ci on ar os pr efi xos a os nomes d e v ari v ei s, de modo a
f aci l me nt e se i de nti fi car se u t i po. I st o f acili t a n a cri ao de cdi gos- f ont e e xt e nsos, poi s
usa ndo a Not a o Hngar a , v oc n o pr eci sa fi car o t e mpo t odo vol t a ndo defi ni o de u ma
v ari v el par a se l e mbr a r qu al o t i po de da dos que d e v e ser col oca do nel a . Vari v ei s de v e m
t er u m pr efi xo d e Not ao Hngar a e m mi nscul as, segui do de u m nome que i de nt i fi que a
f uno da v ari v el , se ndo que a i ni ci al de ca da pal a vr a de v e ser mai scul a .
obri ga t ri a a ut ili z ao dest a not ao pa r a no me ar v a ri v ei s.
Notao Tipo de dado Exemplo
a Arr a y a Val or es
b Bl oco de cdi go bSe e k
c Car act er cNome
d Da t a dDa t a Base
l Lgi co l Conti nu a
n Nu mri co nVal or
o Obj et o oMai n Wi ndow
x I ndefi ni do x Cont e udo

35. Tcnicas de programao eficiente

Par a o d ese nvol vi me nt o de si st e mas e a pr ogr a ma o de r ot i n as, se mpr e esp er a do que
qu al quer cdi go escri t o sej a :

O Funcionalmente correto
O Eficiente
O Legvel
O Reutilizvel
O Extensvel
O Portvel

Aps a nos de e x peri nci a na utili z ao de li ngua ge ns pa dr o x Base e do dese nvol vi me nt o da
li ngua ge m ADVPL, al gu mas t cni cas par a u ma progr a ma o ot i mi z a da e efi ci e nt e f or a m
r econheci das. A utili z ao das t cni cas a segui r, vi sa buscar o m xi mo a pr ov ei t a me nt o dos
r ecursos da l i ngua ge m com o obj et i vo de cri ar progr a mas com est as ca r act er st i cas.

Criao de funes segundo a necessidade

Obser v e o cdi go de e x e mpl o :


User Function GetAnswer(lDefault)
Local lOk
lOk := GetOk(lDefault)
If lOk
Return .T.
Else
Return .F.
Endif
Return nil


- 344 -

ADVPL Completo




Ut ili z a ndo- se a pe n as o cri t ri o " a f uno f unci on a corr et a me nt e?" , a f uno Get Answer
perf ei t a . Receb e u m par met ro l gi co com a r espost a pa dr o e r e t or na u m v al or l gi co
depe nde nt e da op o escol hi da pel o usu ri o e m u ma f uno d e di l ogo " si m/ n o " desi gna da
par a i sso. Pod e e nt r et a nt o ser mel hor a da , pa r t i cul ar me nt e se efi ci nci a f or consi der a da como
u m cri t ri o par a u m cdi go mel hor. Efi ci nci a t i pi ca me nt e e nvol v e a utili z ao de poucos
r ecursos de m qui n a , poucos ch a ma das d e f unes ou t or n ar mai s r pi do u m pr ocesso.

Segundo esse r aci oc ni o, pod eri a se pr oduzi r o segui nt e cdi go :


User Function GetAnswer(lDefault)
Return If( GetOk(lDefault), .T., .F.)


O cdi go aci ma ai nda pode ser a pri mor a do conf or me a bai xo :


User Function GetAnswer(lDefault)
Return GetOk(lDefault)


Com a ot i mi z ao do cdi go da f uno Get Answer ( ) , pod e f aci l me nt e v eri fi car que a mesma
n o r e al i z a n a da a di ci onal cha ma da de Get Ok( ) , pod e ndo ser subst i t u da por u ma ch a ma da
di r et a dest a , cont i nu a ndo a f unci on ar cor r et a me nt e.

Codificao auto- documentvel

Ne nhu m come nt ri o subst i t ui u m cdi go cl ar a me nt e escri t o, e est e n o u m aci de nt e.
Consi der e o e x e mpl o :


cVar := " " // 11 espaos


O t a ma nho da v a ri v el cVar no e vi de nt e por si s e n o f aci l me nt e v eri fi ca do. Est es
mesmos 10 espaos est ari a m mai s bvi os e ai nda assi m gar a nti dos se a i nst r uo f osse escri t a
como :


cVar := Space(11)


O mesmo pri nc pi o pode ser a pli ca do par a qu al quer st ri ng l onga de car act er es r epet i dos. A
f uno Repli ca t e pod e ser ut ili z a da como a segui r :


cVar := Replicate( "*", 80 )


Est e t i po de progr a mao d ei x a o cdi go f ci l de di gi t ar, f ci l de l er e mai s fl e x v el .



- 345 -

ADVPL Completo



Utilizao de solues simples

Si mpli ci da de n a cri ao de i nst r ues t or n a a progr a ma o e a t mesmo a e x ecu o mai s
r pi da . Consi der e a l i nha de cdi go :


If nVar > 0 .Or. nVar < 0


Se o v al or da v ari v el nVar f or i gu al a z ero ( 0) no mome nt o da e x ecu o dest a l i nha de
cdi go, a mbas as comp ar aes separ a das pel o oper a dor l gi co . Or. ser o ef et u a das : Aps ser
a v ali a da , a pri mei r a compar ao i r f al h ar. A segunda compar a o ser e nt o a v ali a da e
f al har t a mb m. Como r esul t a do, o cdi go e xi st e nt e de nt ro da est r ut ur a de fl uxo I f n o ser
e x ecut a do. Tal cdi go some nt e ser e x ecut a do qu a ndo o v al or d est a v ari v el f or mai or OU
me nor do que z ero. Ou sej a , se mpr e que f or DI F ERENTE de z ero, o que t or na a li nh a a segui r
mai s efi ci e nt e :


If nVar != 0


Est e t i po de al t er ao t or na o cdi go mai s l eg v el e o pr ocessa me nt o mai s r pi do, e vi t a ndo a
a v ali ao de i nst r ues desnecessa ri a me nt e.

Exi st e m out r as si t u aes onde a si mpli fi cao pode ser ut ili z a da . A e x pr ess o de a v al i ao a
segui r :


If cVar == "A" .Or. cVar == "B" .Or cVar == "C" .Or. cVar == "D"


Pode ser subst i t u do pel o op er a dor d e cont e n o :


If cVar $ "ABCD"


Opo por flexibilidade

A mel hor sol uo a quel a que e nvol v e o probl e ma i medi a t o e pr e vi ne probl e mas no f ut ur o.
Consi der e o e x e mpl o :


@nRow,nCol PSAY cVar Picture "!!!!!!!!!!!!!!!!!!!!"


Excet o cont a ndo- se os car act er es, n o e xi st e ma nei r a de sa ber se o n mero d e car act er es d e
e xcl a mao o espe r a do. Enqua nt o i st o u m probl e ma , e xi st e m al go mai s gr a v e . A e x pr ess o
de pi ct ur e est t i ca . Se no f ut ur o f or n ecessri o a j ust ar o t a ma nho da v a ri v el cVar, ser
necess ri o l ocali z ar t odos os l ugar es no cdi go ond e est a msca r a de pi ct ur e est se ndo
utili z a da par a a j ust e ma nu al .




- 346 -

ADVPL Completo



Exi st e u ma opo de sol uo de a ut o- a j ust e di spon v el que f cil de di gi t ar e t e m a ga r a nt i a
de e x ecut ar a t ar ef a i gual me nt e ( t or n ar t odos os ca r act er es mai scul os) :


@nRow,nCol PSAY cVar Picture "@!"


Opo da praticidade ao drama

Se a sol uo pa r ece co mpl e x a , pr ov a v el me nt e por qu e o ca mi nho escol hi do est l e v a ndo a
i sso. De v e - se se mpr e se per gunt ar por que al gu m dese nv ol v eri a u ma li ngu a ge m que r equi si t e
t a nt os coma ndos compli ca dos par a f a z er al go si mpl es. Na gr a nde mai ori a dos casos, e xi st e
u ma sol uo mai s si mpl es. O e x e mpl o a bai xo d ei x a i sso be m cl aro :


@ 10,25 Say Substr(cCep,1,5) + "-" + Substr(cCep,6,3) Picture "!!!!!!!!!"


Est e cdi go pod e ser escri t o de u ma f or ma mui t o mai s si mpl es, conf or me d e monst r a do a bai xo :


@ 10,25 Say cCep Picture "@R 99999-999"


Utilizao de operadores de incremento / decremento

Ut ili z a dos de vi da me nt e, os op er a dor es de i ncr e me nt o e d ecr e me nt o t or n a m o cdi go mai s f cil
de l er e possi v el me nt e u m pouco mai s r pi dos. Ao cont r ri o de escr e v e r a di es si mpl es como :


nVar := nVar + 1
nVar := nVar -1


Pode- se escr e v -l as assi m:


++nVar
--nVar


De v e- se a pe n as t oma r cui da do com a pr eced nci a dest es oper a dor es, poi s o " + + " ou o " - - "
pode m a pa r ecer a nt es ou depoi s de u ma v a ri v el , e e m al guns casos qu a ndo a v ari v el f or
utili z a da de nt ro de u ma e x pr ess o, a pr efi x ao ou sufi x ao d est es op er a dor es af et a r o
r esul t a do. Par a mai or es det al hes, consul t e a docu me nt a o de op er a dor es da l i ngu a ge m
ADVPL.


- 347 -

ADVPL Completo



Evitar passos desnecessrios

Exi st e u ma di f er e na e nt r e u m bom h bi t o e per da d e t e mpo. Al gu mas v e z es est es concei t os
pode m est ar mui t o pr xi mos, mas u m modo de di f er e nci -l os bal a nce ar os b e nef ci os d e
r e al i z ar al gu ma ao cont r a o pr obl e ma que r esul t ari a se no f osse e x ecut a da . Obser v e o
e x e mpl o :


Local nCnt := 0
For nCnt := 1 To 10
<cdigo>
Next nCnt


I ni ci ali z ar a v ari v el no mome nt o da decl ar a o n o u m probl e ma . Se o 0 f osse necessri o
no e x e mpl o, t eri a si do til a i ni ci ali z ao n a decl ar ao. Mas nest e caso a est r ut ur a de
r ep et i o For...Next a t ri bui o se u v al or i medi at a me nt e com 1, por t a nt o n o houv e ga nho e m
a t ri bui r a v ari v el com 0 no comeo.

Nest e e x e mpl o n o h ne nhu m pont o n ega t i vo e n a da er r a do ocorr er se a v a ri v el n o f or
i ni ci ali z a da , por t a nt o aconsel h v el e vi t ar est e t i po d e i ni ci ali z ao, poi s no t or n a o cdi go
mai s segur o e t a mb m n o e x pr essa a i nt e no do cdi go mai s cl ar a me nt e.

Por m not e est e e x e mpl o, onde a v a ri v el no i ni ci ali z a da :


Local nCnt
While ( nCnt++ < 10 )
<cdigo>
EndDo


E m ADVPL, v ari v ei s no i ni ci ali z a das se mpr e t e m se u v al or cont e ndo nul o ( nil ) a pri nc pi o, o
que f ar com qu e u ma e xceo e m t e mpo de e x ecuo acont ea qua ndo a i nst r uo de
r ep et i o whi l e f or e x ecut a da .

Di f er e nt e me nt e do pri mei ro e x e mpl o, onde a i ni ci ali z ao da v ari v el no f a zi a di f er e na
al gu ma , nest e segundo e x e mpl o a i ni ci ali z ao a bsol ut a me nt e necessri a . De v e - se pr ocur a r
i ni ci ali z ar v ari v ei s nu mri cas com z er o ( 0) e v ari v ei s car act er com st ri ng nul a ( " " ) a pe n as
qu a ndo r e al me nt e necessri o.




- 348 -

ADVPL Completo




Utilizao de alternativas

Qu a ndo se est t r a bal h a ndo e m u ma si mpl es r ot i na , de v e - se t o mar al gu m t e mpo pa r a
e x pl or a r duas ou t r s di f er e nt es a bor da g e ns. Qu a ndo se est t r a bal h a ndo e m al go mai s
compl e xo, d e v e - se pl a nej ar prot ot i par al gu mas a mai s. Consi der e o segui nt e cdi go :


If cHair = "A"
Replace hair With "Loira"
Else
If cHair = "B"
Replace hair With "Morena"
Else
If cHair = "C"
Replace hair With "Ruiva"
Else
If cHair = "D"
Replace hair With "Grisalho"
Else
Replace hair With "Preto"
Endif
Endif
Endif
Endif


Um cdi go de u ma nica l et r a , ( A a t E) , f oi i nf or ma do par a i ndi car a cor de ca b el o. Est e
cdi go f oi e nt o conv er t i do e ar ma z e n a do como u ma st ri ng. Pod e - se not ar qu e a cor " Pr et o "
ser a t ri bu da se ne nhu ma out r a op o f or v er d a dei r a .

Uma al t er n a t i v a que r eduz o n v el de i de nt ao t or na o cdi go mai s f cil de l er e nqua nt o r eduz
o n mero de coma ndos r epl ace :


Do Case
Case cHair == "A"
cColor := "Loira"
Case cHair == "B"
cColor := "Morena"
Case cHair == "C"
cColor := "Ruiva"
Case cHair == "D"
cColor := "Grisalho"
OtherWise
cColor := "Preto"
EndCase

Replace hair With cColor



- 349 -

ADVPL Completo



Utilizao de arquivos de cabealho quando necessrio

Se u m ar qui vo de cdi go cri a do se r ef er e nci a a coma ndos par a i nt er pr et a o e t r a t a me nt o de
ar qui vos XML, est e d e v e se i ncl ui r o ar qui vo de ca beal ho prpri o par a t ai s coma ndos
( XMLXFUN. CH no e x e mpl o) . Por m n o de v e - se i ncl ui r ar qui vos d e ca b eal ho a pe n as por
segur a na . Se no se est r ef er e nci a ndo ne nhu ma das const a nt es ou ut ili z a ndo ne nhu m dos
coma ndos cont i dos e m u m dest es a r qui vos, a i ncl uso a pe n as t or n ar a compi l ao mai s
de mor a da .

Constantes em maisculo

I st o u ma conv e n o que f a z se nt i do. E m ADVPL, como e m C por e x e mpl o, a r egr a ut i li z ar
t odos os car act er es de u ma const a nt e e m mai scul o, a fi m de que possa m ser cl ar a me nt e
r econheci dos como const a nt es no cdi go, e que n o sej a necessri os l e mbr ar onde f or a m
decl ar a dos.

Utilizao de identao

Est e u m h bi t o que t odo progr a ma dor d e v e dese nvol v er. No conso me mui t o esf oro par a
ma nt er o cdi go ali nha do dur a nt e o t r a bal ho, por m qu a ndo necessri o pod e - se ut ili z ar a
f err a me nt a TOTVS De v St udi o par a a r e -i de nt ao de cdi go. Par a mai or es det al hes, consul t e a
docu me nt a o sobr e a i de nt ao de cdi gos f ont es di spon v el nos de mai s t pi cos dest e
ma t eri al .

Utilizao de espaos em branco

Espaos e m br a nco e xt r as t or n a m o cdi go mais f ci l par a a l ei t ur a . N o necess ri o i me nsas
r e as e m br a nco, mas a gr upar pedaos de cdi go a t r a v s da ut ili z ao de espaos e m br a nco
f unci ona mui t o be m. Cost u ma - se sepa r a r par met r os com espaos e m br a nco.

Quebra de linhas muito longas

Com o obj et i vo de t or n ar o cdi go mai s f cil de l er e i mpri mi r, as li nhas do cdi go no de v e m
est e nder o li mi t e da t el a ou do pa pel . Pode m ser " qu ebr a das " e m mai s de u ma li nh a de t e xt o
utili z a ndo o pont o- e- v r gul a ( ; ) .

Capitulao de palavras-chave

Uma conv e n o a mpl a me nt e ut i li z a da a de ca pi t ul ar as pal a vr as ch a v es, f unes, v ari v ei s e
ca mpos ut i li z a ndo u ma combi n ao de ca r act er es e m mai scul o e mi nscul o, vi sa ndo f acili t ar
a l ei t ur a do cdi go f ont e .

Av ali a ndo o cdi go a se gui r :


local ncnt
while ( ncnt++ < 10 )
ntotal += ncnt * 2
enddo




- 350 -

ADVPL Completo



O mesmo fi cari a mui t o mai s cl aro se r e - escri t o conf or me a bai xo :


Local nCnt

While ( nCnt++ < 10 )
nTotal += nCnt * 2
EndDo


Utilizao da Notao Hngara

A Not ao Hngar a mui t o comu m e nt r e pr ogr a ma dor es x Base e de out r as li ngua ge ns. A
docu me nt a o do ADVPL ut ili z a est a not ao par a a descri o das f unes e coma ndos e
aconsel h v el su a utili z ao n a cri ao de rot i n as, poi s a j uda a e vi t ar peque nos err os e f acili t a
a l ei t ur a do cdi go. Pa r a mai or es det al hes, consul t e a docu me nt a o sobr e a ut ili z ao da
Not a o Hngar a d e cdi gos f ont es di spon v el nos d e mai s t pi cos d est e ma t eri al .

Utilizao de nomes significantes para variveis

A pri nci pal v a nt a ge m da li ber da de na cri ao dos nomes de v a ri v ei s a f acili da de de
i de nti fi cao da sua utili da de. Por t a nt o de v e - se ut ili z ar essa f acili dade o m xi mo poss v el .
Nomes se m se nt i do a p e nas t or n a r o di f cil a i de nt i fi cao da ut ili da de d e u ma det er mi na da
v ari v el , assi m como nomes e xt r e ma me nt e cur t os. Ne m se mpr e a ut ili z ao de u ma v ari v el
cha ma da i a mel hor sa da . Cl aro, n o conv m cri ar u ma v ari v el co m u m nome mui t o l ongo
que ser ut ili z a da como u m cont a dor, e r ef er e nci a da mui t as v e z es no cdi go. O bom se nso
de v e ser ut ili z a do.

Cri ar v ari v ei s como n Nu mer o ou dDa t a t a mb m n o a j uda m n a i de nt i fi cao. A Not a o
Hngar a j est se ndo utili z a da par a i sso e o obj et i vo do nome d a v ari v el de v eri a ser
i de nti fi car su a ut ili z ao, n o o t i po de da do ut ili z a do. De v e - se procur ar subst i t ui r t ai s
v ari v ei s por al go como nTot al ou dCompr a .

O mes mo v li do par a nomes d e f unes, que de v e m descr e v er u m pouco sobr e o que a
f uno f a z . Nov a me nt e nomes e xt r e ma me nt e cur t os n o so aconsel h v ei s.

Utilizao de comentrios

Come nt ri os s o mui t o t ei s n a docu me nt ao d e pr ogr a mas cri a dos e par a f aci li t ar a
i de nti fi cao de pr ocessos i mpor t a nt es no f ut ur o e de v e m se mpr e ser ut ili z a dos.

Se mpr e que poss v el , f unes cri a das de v e m t er u ma br e v e d escri o do se u obj et i vo,
par met ros e r et or no. Al m de ser vi r como docu me nt ao, os co me nt ri os e mbel e z a m o
cdi go ao separ a r as f unes u mas das out r as. Os come nt ri os de v e m ser ut ili z a dos com bom
se nso, poi s r e escr e v er a si nt a x e ADVPL e m por t ugus t or n a - se a pe nas per da d e t e mpo :


If nLastKey == 27 // Se o nLastKey for igual a 27



- 351 -

ADVPL Completo



Criao de mensagens sistmicas significantes e consistentes

Sej a of er ece ndo assi st nci a , e xi bi ndo me nsa ge ns de a vi so ou ma nt e ndo o usu ri o i nf or ma do
do est a do de al gu m processo, as me nsa ge ns de v e m r efl et i r o t om ger al e a i mpor t nci a da
a pli cao. E m t er mos ger ai s, d e v e - se e vi t ar ser mui t o i nf or mal e a o mesmo t e mpo mui t o
t cni co.


"Aguarde. Reindexando (FILIAL+COD+ LOCAL) do arquivo: \DADOSADV\SB1990.DBF"


Esse t i po de me nsa ge m pode dar i nf or maes de mai s par a o usu ri o e dei x -l o se nti ndo- se
desconf or t v el se n o souber o qu e si gni fi ca " r ei nde x a ndo " , et c. E d e f a t o, o usu ri o n o d e vi a
ser i ncomoda do com t ai s det al hes. Ape n as a f r ase " Agu ar d e, i nde x a ndo. " f unci on ari a
corr et a me nt e, assi m co mo pal a vr as " pr ocessa ndo " ou " r e or ga ni z a ndo " .

Out r a boa i di a e vi t ar a r ef er e nci a a u m i t e m corr e nt e d e u ma t a b el a como u m " r egi st ro " :


"Deletar este registro?"


Se a op er ao est i v er se ndo ef et ua da e m u m ar qui vo de cli e nt es, o usu ri o de v e ser
quest i ona do sobr e a r e mo o do cli e nt e cor r e nt e, se poss v el i nf or ma ndo v al or es de
i de nti fi cao como o cdi go ou o nome.

Evitar abreviao de comandos em 4 letras

Apesa r do ADVPL supor t ar a a br e vi ao de co ma ndos e m qu a t r o l et r as ( por e x e mpl o, r epl no
l ugar de r epl ace) no h necessi da de de ut ili z ar t al f unci on ali da de. I st o a p e nas t or na o cdi go
mai s di f cil de l er e n o t or na a compi l ao mai s r pi da ou si mpl es.

Evitar "disfarces" no cdigo

No d e v e- se cri ar const a nt es pa r a e x pr esses compl e x as. I st o t or n ar o cdi go mui t o di f cil de
compr e e nder e poder ca usar er r os pri mri os, poi s pode - se i ma gi n ar que u ma a t ri bui o
ef et ua da a u ma v a ri v el qua ndo n a v er da d e h t oda u ma e x pr esso di sf ara da :


#define NUMLINES aPrintDefs[1]
#define NUMPAGES aPrintDefs[2]
#define ISDISK aReturn[5]

If ISDISK == 1
NUMLINES := 55
Endif

NUMPAGES += 1




- 352 -

ADVPL Completo



A i mpr esso qu e se t e m a ps u ma l ei t ur a dest e cdi go de qu e v al or es est o se ndo a t ri bu dos
s v a ri v ei s ou que const a nt es est o se ndo ut ili z a das. Se o obj et i vo fl e xi bili da de, o cdi go
a nt eri or d e v e ser subst i t u do por :


#define NUMLINES 1
#define NUMPAGES 2
#define ISDISK 5

If aReturn[ISDISK] == 1
aPrintDefs[ NUMLINES ] := 55
Endif

aPrintDefs[ NUMPAGES ] += 1


Evitar cdigo de segurana desnecessrio

Da da su a n a t ur e z a bi n ri a , t udo pod e ou n o acont ecer d e nt r o d e u m comput a dor . Adi ci onar
pedaos de cdi go a pe n as par a " gar a nt i r a se gur a na " fr eqe nt e me nt e ut ili z a do como u ma
descul pa par a e vi t ar cor ri gi r o pr obl e ma r e al . I st o pod e i ncl ui r a checa g e m pa r a v al i dar
i nt er v al os de da t as ou par a t i pos de da dos corr et os, o que co mu me nt e ut ili z a ndo e m
f unes :


Static Function MultMalor( nVal )
If ValType( nVal ) != "N"
nVal := 0
Endif
Return ( nVal * nVal )


O ga nho i rri sri o n a checa ge m do t i po de da do do par met ro j que ne nhu m pr ogr a ma
corr et a me nt e escri t o e m e x ecu o poderi a e nvi ar u ma st ri ng ou u ma da t a par a a f uno. De
f a t o, est e t i po de " ca pt ur a " o que t or n a a de pur ao di f cil , j que o r et or no ser se mpr e u m
v al or v l i do ( mesmo que o par met ro r ecebi do sej a d e t i po d e da do i ncor r et o) . Se est a
ca pt ur a n o t i v er si do ef et u a da qu a ndo u m poss v el er r o de t i po de da do i nv li do ocor r er, o
cdi go pod e ser cor ri gi do par a que est e er r o n o mai s acont ea .

Isolamento de strings de texto

No caso de me nsa ge ns e st ri ngs de t e xt o, a ce nt r ali z ao u m bom n egci o. Pod e - se col oca r
me nsa ge ns, ca mi nhos par a ar qui vos, e mesmo out ros v al or es e m u m l ocal espec fi co. I st o os
t or n a acess v ei s de qu al quer l ugar no progr a ma e f cei s de g er e nci ar.

Por e x e mpl o, se e xi st e u ma me nsa g e m comu m como "Imprimindo, por favor aguarde..."
e m mui t as par t es do cdi go, corr e - se o ri sco d e n o segui r u m pa dr o par a u ma das
me nsa ge ns e m al gu m l ugar do cdi go. E ma nt -l as e m u m ni co l ugar, como u m a r qui vo de
ca beal ho, t or n a f ci l a produ o d e docu me nt ao e a i nt er n aci onali z ao e m out r os i di omas.



- 353 -

ADVPL Completo




LISTAS DE EXERCCIOS

Mdulo 04.1.: Desenvolvendo aplicaes em ADVPL



01

Dese nv ol v er u m progr a ma que i mpl e me nt e a f uno Ax Ca dast ro( ) par a a
t a bel a pa dr o do si st e ma SA2 Ca dast ro de For necedor es.



02

I mpl e me nt ar no Ax Ca d ast ro( ) d ese nv ol vi do no i t e m a nt eri or as f unes d e
v ali dao de al t er ao e v ali dao de e xcl uso.



03

Dese nv ol v er u m progr a ma que i mpl e me nt e a f uno Mbrowse( ) utili z a ndo as
f unes pa dres de ca d ast ro, par a a t a bel a pa dr o do si st e ma SA2 Ca dast ro
de For necedor es.




- 354 -

ADVPL Completo


04

I mpl e me nt ar no Mbr owse( ) dese nvol vi do no i t e m a nt eri or a f u no de
l ege nda .


05

I mpl e me nt ar no Mbrowse( ) dese nv ol vi do no i t e m a nt eri or u ma f uno
esp ec fi ca de i ncl uso ut ili z a ndo os r ecursos a di ci on ai s da f uno Ax I ncl ui ( ) .


06

Dese nv ol v er u m pr ogr a ma que i mpl e me nt e u ma Mar k Br owse ut i li z a ndo as
f unes pa dres de ca d ast ro, par a a t a bel a pa dr o do si st e ma SA2 Ca dast ro
de For necedor es.


07

I mpl e me nt ar n a Mar k Br owse( ) dese nv ol vi da no i t e m a nt eri or u ma f uno par a
e xcl uso de ml ti pl os r egi st ros da t a bel a pa dr o do si st e ma SA2 Ca dast ro
de For necedor es.



- 355 -

ADVPL Completo


08

Dese nv ol v er u m progr a ma que i mpl e me nt e u ma Mar k Br owse( ) pa r a a t a bel a
pa dr o do si st e ma SA1 Ca dast r o d e Cli e nt e, cont e mpl a ndo u ma f uno que
per mi t a a vi su ali z ao dos da dos pri nci pai s de ml ti pl os cl i e nt es sel eci on a dos.


09

Dese nv ol v er u m progr a ma que i mpl e me nt e u ma Model o2( ) par a a t a bel a
pa dr o do si st e ma SX5 Ca dast r o de t a b el as, cont e mpl a ndo a f unci onali da de
de i ncl uso.


10

I mpl e me nt ar n a Mod el o2( ) dese nvol vi da no i t e m a nt eri or as f unci onali da des
de Vi su ali z ao, Al t er ao e Excl uso.


11
Dese nv ol v er u m progr a ma que i mpl e me nt e u ma Model o3( ) par a as t a bel as
pa dres do si st e ma SF 1 Ca beal ho do Docu me nt o d e Ent r a da e SD1 I t e ns
do docu me nt o de e nt r a da , cont e mpl a ndo as f unci onali da des de Vi su ali z ao e
I ncl uso.


- 356 -

ADVPL Completo



12

I mpl e me nt ar na Model o3( ) dese nvol vi da no i t e m a nt eri or as f unci onali da des e
Al t er ao e Excl uso.


13

Dese nv ol v er u m progr a ma que cri e u m ar qui vo de t r a bal ho com est r ut ur a
si mil ar ao SA1 e r eceba as i nf or maes d est a t a bel a .


14

I mpl e me nt ar n a r ot i n a dese nvol vi da no i t e m a nt eri or, u m Mar k Br owse qu e
per mi t e a sel e o e vi su ali z ao de a pe n as u m r egi st ro sel eci ona do.


15

Dese nv ol v er u m progr a ma que i mpl e me nt e u m r el a t ri o que per mi t a a
i mpr ess o de u ma li st a ge m si mpl es dos da dos da t a bel a pa dr o SA1
Ca dast r o de cl i e nt es.



- 357 -

ADVPL Completo


16

Dese nv ol v er u m progr a ma que i mpl e me nt e u m r el a t ri o que per mi t a a
i mpr ess o de u ma l i st age m si mpl es das not as fi scai s e se us r esp ect i vos i t e ns.


17

Dese nv ol v er u m progr a ma que r e al i z e a e x por t a o dos i t e ns marca dos no
SA1 Ca dast ro d e Cli e nt es par a u m ar qui vo no f or ma t o . TXT e m u m di r et ri o
esp eci fi ca do pel o usuri o.


18

Dese nv ol v er u m progr a ma que r e al i z e a i mpor t ao das i nf or maes cont i das
e m u m ar qui vo no f or ma t o . TXT sel eci ona do pel o usu ri o e as a t u al i z e no SA1
Ca dast r o d e Cl i e nt es.


19

Dese nv ol v er o mesmo progr a ma do i t e m a nt eri or ut ili z a ndo as f unes da
f a mli a FT.



- 358 -

ADVPL Completo



Mdulo 04.2.: Oficina de Programao I


20

Dese nv ol v er u ma a pli cao vi su al que i mpl e me nt e ca da u m dos compone nt es
di spon v ei s no f ont e DI ALOG_ OBJET OS. PRW.




21

I mpl e me nt ar as r ot i nas de i mpor t a o e e x por t ao d ese nvol vi das nos i t e ns
a nt eri or as r gu as de pr ocessa me nt o mai s a dequ a das.




22

Subst i t ui r e m u ma d as r ot i n as dese nvol vi das a nt eri or me nt e a f uno
Per gunt e( ) p el a f uno Par a mBox( ) .




- 359 -

ADVPL Completo



23

Dese nv ol v er u ma rot i na que i mpl e me nt ar u m Li st Box si mpl es que per mi t a
vi suali z ar as t a bel as ca d ast r a das no SX5 Ca dast ro de Ta b el as.


25

I mpl e me nt ar n a r ot i n a dese nvol vi da no i t e m a nt eri or a op o de vi su ali z ao
dos i t e ns d e u ma das t a bel as sel eci on a das, de monst r a ndo- os e m u ma Li st Box
Gri d.


26

Dese nv ol v er u ma r ot i na que i mpl e me nt e u ma Model o2( ) ut ili z a ndo os
compone nt es vi su ai s necess ri os, compl e me nt a dos com os r ecursos de
rol a ge m do obj et o Scr ol l Box( ) .



- 360 -

ADVPL Completo




Mdulo 05: Introduo a orientao objetos



27

I mpl e me nt ar a cl asse Al uno( ) com os m t odos Ne w( ) , Busca Al uno( ) e
Sal v a Al uno( ) .




28

Dese nv ol v er a i nt erf ace vi su al par a i nt er a gi r com a cl asse Al uno( )
i mpl e me nt a da a nt eri or me nt e.




29

I mpl e me nt ar n a rot i n a dese nvol vi da no i t e m a nt eri or os r ecursos necessri os
par a persi st i r as i nf or maes e r ecuper a r os da dos de i t e ns pr e vi a me nt e
sal vos.




- 361 -

ADVPL Completo




Mdulo 06: ADVPL orientado objetos I



30

Dese nv ol v er u ma rot i n a que i mpl e me nt e u ma Enchoi ce( ) par a o SA1
Ca dast r o de cl i e nt es.


31

Adequ ar a r ot i n a dese n vol vi da no i t e m a nt eri or par a per mi t i r o uso d a cl asse
de obj et os MsMGet ( ) .



32

Dese nv ol v er u ma i nt erf ace d e ca dast ro co mbi na ndo os r ecursos de u m obj et o
MsMGet ( ) e u m obj et o MsNe wGet Da dos( ) ca usa ndo o mes mo ef ei t o de u ma
i nt erf ace no pa dr o da Model o3( ) .





- 362 -

ADVPL Completo



33

I mpl e me nt ar n a r ot i n a dese nv ol vi da no i t e m a nt eri or o uso da f uno
Enchoi ce Ba r ( ) com u m bot o qu e p er mi t a ao usuri o vi su ali z ar u m dos i t e ns
e xi bi dos na i nt erf ace.


34

Adequar a r ot i na dese n vol vi da no i t e m a nt eri or de f or ma a subst i t ui r o uso da
f uno Enchoi ce Ba r ( ) p el a cl asse d e obj et o TBa r ( ) .


35

Conv er t er a si nt a x e cl ssi ca utili z a da no f ont e DI ALOG_ OBJETOS. PRW par a a
si nt a x e ori e nt a da a obj e t os.


36

Conv er t er a si nt a x e cl ssi ca dos f ont es Li st Box pa r a a si nt a x e ori e nt a da a
obj et os.



- 363 -

ADVPL Completo



Projeto: Avaliao prtica do treinamento de ADVPL Intermedirio

Objetivos do projeto

E Contemplar o contedo do curso e estimular a prtica da programao utilizando a linguagem
ADVPL;

E Acrescentar um grau de desafio ao treinamento;

Regras para entrega e apresentao

E Dever ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos
necessrios. A avaliao do proj eto ser realizada aps a entrega, no prazo estabelecido pelo
instrutor;

E Pode ser realizado em grupos de at 03 pessoas. Caso existam alunos sem grupos, estes podero
integrar equipes j formadas com o total de membros estabelecido, mediante aprovao do
instrutor;

Avaliao do projeto

E Mesmo peso da prova terica, podendo substitu-la integralmente.
E Sero considerados os quesitos:
O Funcionalidades
O Clareza da programao
O Apresentao
O Otimizao de tcnicas e recursos apresentados no treinamento

Funcionalidades que compe o projeto

Desenvolver uma aplicao utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:

01

Ef et ue a l ei t ur a de u m ar qui vo e m f or ma t o . TXT com os da dos necessri os
par a r e al i z ar o ca dast ro de f or necedor es no si st e ma Pr ot he us, e gr a v e est as
i nf or maes e m u m ar qui vo i nt er medi ri o.


02
A par t i r da sel e o dos r egi st ros di spon v ei s nest e ar qui vo i nt er medi ri o, o
usu ri o poder :

O I mpri mi r os i t e ns sel eci on a dos ;
O Ef et i v ar os i t e ns sel eci on a dos, gr a v a ndo- os no SA2 Ca dast r o de
For necedor es ;
O Est or nar i t e ns j ef et i v a dos, el i mi n a ndo- os do SA2 - Ca dast r o d e
For necedor es ;
O Excl ui r os r egi st ros sel eci on a dos do ar qui vo i nt er medi ri o ;
O Excl ui r t odos os r egi st r os i mpor t a dos d e u m ar qui vo e m f or ma t o . TXT
esp eci fi ca do.
O Vi suali z ar as i nf or maes do r egi st ro g er a do no ar qui vo i nt er medi ri o ;
O Vi suali z ar o r egi st ro g er a do no SA2 Ca dast ro de For necedor es a
par t i r de u m i t e m sel eci ona do no ar qui vo i nt er medi ri o.



- 364 -

ADVPL Completo



MDULO 07: ADVPL Orientado objetos I I

Nest e mdul o ser o t r a t a dos os compon e nt es e obj et os da i nt erf ace vi su al da li ngu a ge m
ADVPL, p er mi ti ndo o dese nvol vi me nt o de a pli caes com i nt erf aces gr fi cas com si nt a x e
ori e nt a da a obj et os.

36. Componentes da interface visual do ADVPL

A li ngu a ge m ADVPL possui di v ersos compon e nt es vi su ai s e a uxili ar es, os qu ai s pode m se r
r epr ese nt a dos ut i li z a ndo a est r ut ur a a bai xo :

. Classes da Interface Visual




Tsr vobj ect
. Classes Auxiliares


Tf ont

. Classes de Janelas


Msdi al og
Tdi al og
Twi ndow

. Classes de Componentes


Tcont r ol


.
Classes de Componentes
Visuais
Br ge t ddb
Mscal e nd
Mscal e ndgri d
Mssel br
Mswor k ti me
Sbut t on
Tbar
Tbi t ma p
Tbr owsebut t on
Tbt nb mp
Tbt nb mp2
Tbut t on
Tcbr owse
Tcheck box
Tcolor t ri a ngl e
Tcombobox
Tfol der
Tfont
Tge t
Tgr oup
Thbut t on
Ti browser
Tlist box
T me nu
T me nubar
T me t er
T msgr a phic
T msgbar
T mul ti bt n
T mul ti ge t
Tol econt ai ner
Tpa ge vi e w
Tpa nel
Tr ad me nu
Tsbr owse
Tsa y
Tscr oll box
Tsi mpl e edi t or
Tsli der

- 365 -

ADVPL Completo






.
Classes de Componentes
Visuais
Tspli t t er
Tt a bs
Tt oolbox
Twbrowse
Vcbrowse

Atributos comuns as classes de componentes visuais

cCaption T t ul o ou cont e do do obj et o.
cF3
Consul t a F 3 ao qu al o obj et o est vi ncul a do, qu a ndo o
mesmo do t i po get .
cMsg
Me nsa g e m e xi bi da na barr a de st a t us da j a nel a pri nci pal
qu a ndo o obj et o ga nh a f oco.
cName Nome do obj et o
cTooltip Me nsa g e m e xi bi da qu a ndo obj et o e xi be se u t ool t i p.
cVariable
Vari v el que r eceber o cont e do sel eci on a do ou di gi t a do no
obj et o, qu a ndo o mesmo f or t o t i po get ou si mil ar.
lPassword
I ndi ca se o t e xt o di gi t a do no obj et o ser e xi bi do no f or ma t o
de passwor d, qu a ndo o mesmo do t i po get .
lReadOnly Fl a g que i ndi ca se o obj et o pode ou n o ser edi t a do.
lShowHint
Fl a g que a ti v a . T. ou d esa t i v a . F. a e xi bi o do t ool t i p do
obj et o.
lVisibleControl Se . T. o obj et o vi s v el , se . F. o obj et o i nvi s v el .
nHeight Al t ur a e m pi x el s.
nLeft Coor de n a da hori z ont al e m pi x el s.
nTop Coor de n a da v er t i cal e m pi x el s.
nWidth Lar gur a e m pi x el s.
Picture
Pi ct ur e de di gi t ao do obj et o, qua ndo o mesmo do t i po
get .

Eventos comuns as classes de componentes visuais

bAction
Bl oco de cdi go e x ecut a do qu a ndo o obj et o ut ili z a do,
qu a ndo o mesmo do t i po bot o ou si mil ar.
bChange
Bl oco de cdi go e x ecut a do qu a ndo ocor r e u ma munda na n a
sel e o d e i t e ns que co mpe o obj et o, como por e x e mpl o
e m l i st as ou gri ds.
bF3
Bl oco de cdi go e x ecut a do qu a ndo ut ili z a do o r ecurso d e
consul t a F 3 vi ncul a do ao obj et o.
bGotFocus Ex ecut a do qua ndo obj et o ga nh a f oco.
blClicked
Ex ecut a do qua ndo aci ona do cl i ck do bot o esqu er do do
mouse sobr e o obj et o.
blDblClick
Ex ecut a do qu a ndo aci ona do dupl o cli ck do bot o esqu er do
do mouse sobr e o obj et o.
bLostFocus Ex ecut a do qua ndo obj et o per d e f oco.
brClicked
Ex ecut a do qua ndo aci ona do cl i ck do bot o di r ei t o do mouse
sobr e o obj et o.
bValid
Ex ecut a do qua ndo o cont e do do obj et o modi fi ca do e
de v er ser v ali da do. De v e r et or n a r . T. se o cont e do
v li do e . F. se cont e do i nv li do.
bWhen
Ex ecut a do qua ndo h movi me nt ao d e f oco n a j a nel a . Se
r et or n a r . T. o obj et o conti nu a h a bili t a do, se r et or n a r . F. o
obj et o ser desa bili t a do.

- 366 -

ADVPL Completo




Classes da interface visual

TSRVOBJECT( )

E Descrio: Cl asse a bst r a t a i ni ci al de t odas as cl asses de i nt erf ace do ADVPL. N o de v e
ser i nst a nci a da di r et a me nt e.

E Propriedades:

nLeft Coor de n a da hori z ont al e m pi x el s.
nTop Coor de n a da v er t i cal e m pi x el s.
nWidth Lar gur a e m pi x el s.
nHeight Al t ur a e m pi x el s.
cCaption T t ul o ou cont e do do obj et o.
cTooltip Me nsa g e m e xi bi da qu a ndo obj et o e xi be se u t ool t i p.
lShowHint
Fl a g que a ti v a . T. ou d esa t i v a . F. a e xi bi o do t ool t i p do
obj et o.
cMsg
Me nsa g e m e xi bi da n a barr a de st a t us da j a nel a pri nci pal
qu a ndo o obj et o ga nh a f oco.
nClrText Cor do t e xt o do obj et o.
nClrPane Cor do f undo do obj et o.
bWhen
Ex ecut a do qua ndo h movi me nt ao d e f oco n a j a nel a . Se
r et or n a r . T. o obj et o conti nu a h a bili t a do, se r et or n a r . F. o
obj et o ser desa bili t a do.
bValid
Ex ecut a do qua ndo o cont e do do obj et o modi fi ca do e
de v er ser v ali da do. De v e r et or n a r . T. se o cont e do
v li do e . F. se cont e do i nv li do.
blClicked
Ex ecut a do qua ndo aci ona do cl i ck do bot o esqu er do do
mouse sobr e o obj et o.
brClicked
Ex ecut a do qua ndo aci ona do cl i ck do bot o di r ei t o do mouse
sobr e o obj et o.
blDblClick
Ex ecut a do qua ndo aci ona do dupl o cli ck do bot o esqu er do
do mouse sobr e o obj et o.
oWnd Ja nel a onde o obj et o f oi cri a do.
lVisible Se . T. o obj et o vi s v el , se . F. o obj et o i nvi s v el .
Cargo Cont e do associ a do a o obj et o.
bLostFocus Ex ecut a do qua ndo obj et o per d e f oco.
bGotFocus Ex ecut a do qua ndo obj et o ga nh a f oco.

E Construtor: No pode ser instanciada.

E Parmetros:

Nenhum -

- 367 -

ADVPL Completo



E Mtodos auxiliares:

SetFocus

O Descrio: Fora muda na do f oco d e e nt r a da de da dos pa r a o cont r ol e.
O Sintaxe: Set F ocus( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Hide

O Descrio: Tor n a obj et o i nvi s v el .
O Sintaxe: Hi de( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Show

O Descrio: Tor n a obj et o vi s v el .
O Sintaxe: Show( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Enable

O Descrio: Ha bili t a o obj et o.
O Sintaxe: Enable( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 368 -

ADVPL Completo



Disable

O Descrio: Desa bi li t a o obj et o.
O Sintaxe: Disable( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Refresh

O Descrio: Fora a t u ali z ao ( si ncr oni a ) de pr opri eda des e nt r e o progr a ma e o
Prot h e us Re mot e.
O Sintaxe: Refresh( )
O Parmetros:

Nenhum -

O Retorno:

Nil


Exemplo:


CLASS TCONTROL FROM TSRVOBJECT



- 369 -

ADVPL Completo



Classes auxiliares

TFONT( )

E Descrio: Cl asse d e obj et os que d efi ne a f ont e do t e xt o ut ili z a do nos cont rol es
vi su ai s.

E Propriedades:

- Her da das as cl asses sup eri or es

E Construtor: Ne w( [ acNa me] , [ nPar 2] , [ a nHei ght ] , [lPar 4] , [ al Bol d] , [ nPar 6] ,
[lPar 7] , [ nPar 8] , [ al I t alic] , [ al Underli ne] )

E Parmetros:

acName Car act er e, opci on al . Nome da f ont e , o pa dr o Ari al .
nPar2 Reser v a do.
anHeight Nu mri co, opci on al . Ta ma nho da f ont e. O pa dr o - 11.
lPar4 Reser v a do.
alBold Lgi co, opci onal . Se . T. o est i l o da f ont e ser ne gri t o.
nPar6 Reser v a do.
lPar7 Reser v a do.
nPar8 Reser v a do.
alItalic Lgi co, opci onal . Se . T. o est i l o da f ont e ser i t li co.
alUnderline Lgi co, opci onal . Se . T. o est i l o da f ont e ser subli nha do.

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oSay
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE 'My dialog' PIXEL
// Cria font para uso
oFont:= TFont():New('Courier New',,-14,.T.)
// Apresenta o tSay com a fonte Courier New
oSay := TSay():New( 10, 10, {|| 'Mensagem'},oDlg,, oFont,,,, .T.,
CLR_WHITE,CLR_RED )
oSay:lTransparent:= .F.
ACTIVATE MSDIALOG oDlg CENTERED
Return


- 370 -

ADVPL Completo



Classes de janelas

MSDIALOG( )

E Descrio: Cl asse de obj et os que d e v e ser ut ili z a da como pa dr o de j a nel a par a
e nt r a da de da dos. MSDi al og u m ti po de j a nel a di l ogo modal , i st o
, n o per mi t e que out r a j a nel a a t i v a r eceba da dos e nqu a nt o est a
est i v er a t i v a .

E Propriedades:

- Her da das as cl asses sup eri or es


E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nBot t om] , [ a nRi ght ] , [ acCa pt i on] ,
[ cPar 6] , [ nPar 7] , [lPar 8] , [ nPar 9] , [ a nCl r Te xt ] , [ a nCl r Back] , [ oPa r 12] ,
[ aoWnd] , [ alPi x el ] , [ oPar 15] , [ oPar 16] , [lPar 17] )


E Parmetros:

anTop
Nu mri co, opci onal . Coor de n a da v er t i cal superi or e m pi x el s
ou ca r act er es.
anLeft
Nu mri co, opci onal . Coor de n a da hori z ont al esquer da e m
pi x el s ou car act er es.
anBotom
Nu mri co, opci onal . Coor de n a da v er t i cal i nf eri or e m pi x el s
ou ca r act er es.
anRight
Nu mri co, opci onal . Coor de n a da hori z ont al di r ei t a e m pi x el s
ou ca r act er es.
acCaption Car act er e, opci onal . T t ul o da j a nel a .
cPar6 Reser v a do.
nPar7 Reser v a do.
lPar8 Reser v a do.
nPar9 Reser v a do.
anClrText Nu mri co, opci on al . Cor do t e xt o.
anClrBack Nu mri co, opci on al . Cor de f undo.
oPar12 Reser v a do.
aoWnd
Obj et o, opci on al . Ja nel a m e da j a nel a a ser cri a da , pa dr o
a j a nel a pri nci pal do progr a ma .
alPixel
Lgi co, opci on al . Se . T. consi der a as coor d e na d as passa das
e m pi x el s, se . F . consi der a ca r act er es.
oPar15 Reser v a do.
oPar16 Reser v a do.
nPar17 Reser v a do.


- 371 -

ADVPL Completo



E Aparncia:



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


TDIALOG( )

E Descrio: Cl asse de obj et os do t i po di l ogo de e nt r a da de da dos, se ndo se u
uso r eser v a do. Recome nda - se ut ili z ar a cl asse MSDi al og que
her da da d est a cl asse .


E Propriedades:

- Her da das as cl asses sup eri or es


E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nBot t om] , [ a nRi ght ] , [ acCa pt i on] ,
[ cPar 6] , [ nPar 7] , [lPar 8] , [ nPar 9] , [ a nCl r Te xt ] , [ a nCl r Back] , [ oPa r 12] ,
[ aoWnd] , [ alPi x el ] , [ oPar 15] , [ oPa r 16] , [ nPar 17] , [ a n Wi dt h] ,
[ a nHei ght ] )


E Parmetros:

anTop
Nu mri co, opci onal . Coor de n a da v er t i cal superi or e m pi x el s
ou ca r act er es.
anLeft
Nu mri co, opci on al . Coor de n a da hori z ont al esquer da e m
pi x el s ou car act er es.
anBotom
Nu mri co, opci onal . Coor de n a da v er t i cal i nf eri or e m pi x el s
ou ca r act er es.
anRight Nu mri co, opci onal . Coor de n a da hori z ont al di r ei t a e m pi x el s

- 372 -

ADVPL Completo


ou ca r act er es.
acCaption Car act er e, opci on al . T t ul o da j a nel a .
cPar6 Reser v a do.
nPar7 Reser v a do.
lPar8 Reser v a do.
nPar9 Reser v a do.
anClrText Nu mri co, opci on al . Cor do t e xt o.
anClrBack Nu mri co, opci on al . Cor de f undo.
oPar12 Reser v a do.
aoWnd
Obj et o, opci on al . Ja nel a m e da j a nel a a ser cri a da , pa dr o
a j a nel a pri nci pal do progr a ma .
alPixel
Lgi co, opci on al . Se . T. consi der a as coor d e na d as passa das
e m pi x el s, se . F . consi der a ca r act er es.
oPar15 Reser v a do.
oPar16 Reser v a do.
nPar17 Reser v a do.
anWidth Nu mri co, opci on al . Lar gur a da j a nel a e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a da j a nel a e m pi x el s.


E Mtodos auxiliares:

Activate

O Descrio: At i v a ( e xi be) o di l ogo. Ch a ma r some nt e u ma v e z est e
mt odo.
O Sintaxe: Act i v a t e( [ bPar 1] , [ bPar 2] , [ bPa r 3] , [ al Ce nt er ed] , [ a bVali d] ,
[lPar 6] , [ a bI ni t ] , [ bPar 8] , [ bPar 9] )
O Parmetros:

bPar1 Reser v a do.
bPar2 Reser v a do.
bPar3 Reser v a do.
alCentered
Lgi co, opci on al . Se . T. e xi be a j a nel a ce nt r ali z a da , . F.
pa dr o.
abValid
Bl oco de cdi go, opci on al . De v e r et or n ar . T. se cont e do
do di l ogo v l i do, se r et or n a r . F. o di l ogo n o f ech a r
qu a ndo sol i ci t a da de e ncerr a r.
lPar6 Reser v a do.
abInit
Bl oco d e cdi go, opci on al . Ex ecut a do qua ndo o di l ogo
i ni ci a e xi bi o.
bPar8 Reser v a do.
bPar9 Reser v a do.

O Retorno:

Nenhum -


- 373 -

ADVPL Completo



End

O Descrio: Encerr a ( f ech a ) o di l ogo.
O Sintaxe: End( )
O Parmetros:

Nenhum -

O Retorno: Lgi co . T. se o di l ogo f oi e ncer r a do.

Lgico I ndi ca se o di l ogo f oi e ncer r a do.


E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
// cria dilogo
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..
.')} )

/* os comandos abaixo proporcionam o mesmo resultado
// cria dilogo
DEFINE DIALOG oDlg TITLE 'Meu dialogo' FROM 10,10 TO 300,300 COLOR
CLR_BLACK,CLR_WHITE PIXEL
// ativa dilogo centralizado
ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop('iniciando...')) VALID
(msgstop('validou!'),.T.)
*/
Return Nil

- 374 -

ADVPL Completo



TWINDOW( )

E Descrio: Cl asse de obj et os do t i po di l ogo pri nci pal de progr a ma . De v er
e xi st i r a pe nas u ma i nst nci a dest e obj et o n a e x ecuo do progr a ma .

E Propriedades:

- Her da das das cl asses superi or es


E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nBot t o m] , [ a nRi ght ] , [ acTi tl e] , [ nPar 6] ,
[ oPar 7] , [ oPar 8] , [ oPa r 9] , [ aoPa r e nt ] , [lPar 11] , [lPar 12] , [ a nCl r For e] ,
[ a nCl r Back] , [ oPa r 15] , [ cPar 16] , [lPar 17] , [lPar 18] , [lPar 19] ,
[lPar 20] , [ alPi x el ] ) ;

E Parmetros:

nTop
Nu mri co, opci onal . Coor de n a da v er t i cal superi or e m pi x el s
ou ca r act er es.
nLeft
Nu mri co, opci onal . Coor de n a da hori z ont al esquer da e m
pi x el s ou car act er es.
nBottom
Nu mri co, opci on al . Coor de n a da v er t i cal i nf eri or e m pi x el s
ou ca r act er es.
nRight
Nu mri co, opci onal . Coor de n a da hori z ont al i nf eri or e m pi x el s
ou ca r act er es.
cTitle Car act er e, opci onal . T t ul o da j a nel a .
nPar6 Reser v a do.
oPar7 Reser v a do.
oPar8 Reser v a do.
oPar9 Reser v a do.
oParent Obj et o, opci on al . Ja nel a m e da j a nel a corr e nt e .
lPar11 Reser v a do.
lPar12 Reser v a do.
nClrFore Nu mri co, opci on al . Cor de f undo da j a nel a .
nClrText Nu mri co, opci onal . Cor do t e xt o da j a nel a .
oPar15 Reser v a do.
cPar16 Reser v a do.
lPar17 Reser v a do.
lPar18 Reser v a do.
lPar19 Reser v a do.
lPar20 Reser v a do.
lPixel
Lgi co, opci on al . Se . T. ( pa dr o) consi der a coor de n a das
passa das e m pi x el s, se . F. consi der a car act er es.


- 375 -

ADVPL Completo


E Mtodos auxiliares:

Activate

O Descrio: At i v a ( e xi be) a j a nel a . Ch a mar esse mt odo a p e n as u ma v e z .
O Sintaxe: Act i v a t e( [ acShow] , [ bPar 2] , [ bPar 3] , [ bPar 4] , [ bPar 5] , [ bPar 6] ,
[ a bI ni t ] , [ bPar 8] , [ bPar 9] , [ bPa r 10] , [ bPa r 11] , [ bPa r 12] , [ bPa r 1 3] ,
[ bPar 14] , [ bPa r 15] , [ a bVali d] , [ bPar 17] , [ bPar 1 8] ) .
O Parmetros:

acShow
Car act er , opci on al . I C ONI Z ED pa r a j a nel a i coni z a da ou
MAXI MI Z ED pa r a j a n el a ma xi mi z a da .
bPar2 Reser v a do.
bPar3 Reser v a do.
bPar4 Reser v a do.
bPar5 Reser v a do.
bPar6 Reser v a do.
abInit
Bl oco de cdi go. Ex ecut a do qu a ndo j a nel a est se ndo
e xi bi da .
bPar8 Reser v a do.
bPar9 Reser v a do.
bPar10 Reser v a do.
bPar11 Reser v a do.
bPar12 Reser v a do.
bPar13 Reser v a do.
bPar14 Reser v a do.
bPar15 Reser v a do.
abValid
Bl oco de cdi go. Ex ecut a do qua ndo a j a n el a f or sol i ci t a da
de f ech a r. De v er r et or n ar . T. se o cont e do d a j a nel a f or
v li do, ou . F. se n o. Se o bl oco r et or n ar . F. a j a nel a n o
f ech a r .
bPar17 Reser v a do.
bPar18 Reser v a do.


O Retorno:

Nenhum -


End

O Descrio: Sol i ci t a e ncer r a me nt o da j a nel a .
O Sintaxe: End( )
O Parmetros:

Nenhum -

O Retorno: Lgi co . T. se o di l ogo f oi e ncer r a do.

Lgico I ndi ca se a j a nel a f oi e ncerr a da .


- 376 -

ADVPL Completo


Center

O Descrio: Ce nt r al i z a a j a nel a .
O Sintaxe: Ce nt er ( )
O Parmetros:

Nenhum -

O Retorno: Lgi co . T. se o di l ogo f oi e ncer r a do.

Nenhum -

E Aparncia:



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
.


- 377 -

ADVPL Completo



Classes de componentes

TCONTROL( )

E Descrio: Cl asse a bst r a t a comu m e nt r e t odos os compone nt es vi su ai s
edi t v ei s. No d e v e ser i nst a nci a da di r et a me nt e .


E Propriedades:

Align
Nu mri co. Al i nh a me nt o do cont r ol e no espao
di sponi bili z a do pel o se u obj et o par e nt e. 0 = Ne n hu m
( pa dr o) , 1 = no t opo, 2 = no r oda p, 3 = a esquer da , 4 = a
di r ei t a e 5 = e m t odo o par e nt e .
lModified
Lgi co. Se . T. i ndi ca que o cont e do da v a ri v el associ a da
ao cont r ol e f oi modi fi ca do.
lReadOnly
Lgi co. Se . T. o cont e do da v ari v el associ a da ao cont r ol e
per ma n ecer a pe n as pa r a l ei t ur a .
hParent
Nu mri co. Ha ndl e (i de nt i fi ca dor ) do obj et o sobr e o qual o
cont r ol e f oi cri a do.
bChange
Bl oco de cdi go. Ex ecut a do qu a ndo o est a do ou cont e do do
cont r ol e modi fi ca do pel a ao sobr e o cont rol e.

E Construtor: No pode ser instanciada.

E Parmetros:

Nenhum -

E Mtodos auxiliares:

SetFocus

O Descrio: Fora muda na do f oco d e e nt r a da de da dos pa r a o cont r ol e.
O Sintaxe: Set F ocus( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


Exemplo:


CLASS TSay FROM Tcontrol


- 378 -

ADVPL Completo



Classes de componentes visuais

BRGETDDB( )

E Descrio: Cl asse de obj et os vi su ai s do t i po Gri d.

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci ona da / posi ci on a da no obj et o
nLen N mer o t ot al de li nhas do obj et o

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ a He a d ers] ,
[ a Col Si z es] , [ oDl g] , [ cFi el d] , [ uVal ue 1] , [ uVal ue 2] , [ uCh a nge] ,
[ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCursor ] , [ nCl r For e] , [ nCl r Back] ,
[ cMsg] , [l Upda t e] , [ cAli as] , [lPi x el ] , [ bWhe n] , [l Desi gn] , [ bVali d] ,
[ a Al t er ] , [ oMot h er ] )

E Parmetros:

nRow Nu mri co, opci on al . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
nWidth Nu mri co, opci onal . Lar gur a do obj et o
nHeight Nu mri co, opci onal . Al t ur a do obj et o
bFields Bl oco de cdi go, Li st a de Ca mpos
aHeaders Vet or, Descri o dos ca mpos pa r a no ca b eal ho
aColSizes Vet or, Lar gur a das col unas
oDlg
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
cField Car act er , opci on al . Ca mpos n ecessri os a o fil t ro
uValue1 I ndefi ni do, opci on al . I ni ci o do i nt er v al o par a o fi l t ro
uValue2 I ndefi ni do, opci on al . Fi m do i nt er v al o par a o fi l t ro
bChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
bLDblClick
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci ona do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
bRClick No ut i li z a do
oFont Obj et o, opci on al . Font e
oCursor Obj et o, opci on al . Ti po do Cursor
nClrFore Nu mri co, opci onal . Cor do t e xt o da j a nel a .
nClrBack Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci on ar o mouse sobr e o
obj et o
lUpdate No ut i li z a do
cAlias
Car act er , opci on al se obj et o ut ili z a do com Vet or , obri ga t ori o
se ut i li z a do com Ta b el a
lPixel
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lDesign No Ut i li z ado

- 379 -

ADVPL Completo


bValid
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
aAlter No Ut i li z ado
oMother No Ut i li z ado

E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nh a par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

- 380 -

ADVPL Completo



RowCount

O Descrio: Ret or n a nu mer o d e l i nh as vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


E Aparncia:



- 381 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

DbSelectArea('SA1')
oBrowse := BrGetDDB():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)


ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

MSCALEND( )

E Descrio: Cl asse de obj et os vi su ai s do t i po Cal e ndri o.

E Propriedades:

+ Her da das da cl asse sup eri or
bChange
Bl oco de cdi go e x ecut a do n a muda na d e sel eo d e u m
di a .
bChangeMes
Bl oco de cdi go e x ecut a do n a mundaa d e sel eo d e u m
ms.
dDiaAtu Di a a t u al me nt e sel eci ona do

E Construtor: Ne w( [ nRow] , [ nCol ] , [ oDl g] , [l Ca nMul t Sel ] )

- 382 -

ADVPL Completo



E Parmetros:

nRow Nu mri co, opci on al . Coor de n a da v er t i cal
nCol Nu mri co, opci on al . Coor de n a da hori z ont al
oDl g
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.

l Ca nMul t Sel Logi co, opci on al . Per mi t e sel e o de mul ti pl os di as


E Aparncia:



Exemplo:

#include 'protheus.ch'
user function Calend_Ex()
DEFINE MSDIALOG oDlg FROM 0,0 TO 1000,1000 PIXEL TITLE 'Exemplo de
MsCalend'
// Cria objeto
oCalend:=MsCalend():New(01,01,oDlg,.T.)
// Code-Block para mudana de Dia
oCalend:bChange := {|| Alert('Dia Selecionado: ' +
dtoc(oCalend:dDiaAtu)) }
// Code-Block para mudana de mes
oCalend:bChangeMes := {|| alert('Mes alterado') }
ACTIVATE MSDIALOG oDlg CENTERED
Return


- 383 -

ADVPL Completo



MSCALENDGRID( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po Gr a d e d e Per odos.

E Propriedades:

bAction
Bl oco de cdi go. Ex ecut a do qu a ndo o bot o esquer do do
mouse pr essi on a do.
bRClick
Bl oco de cdi go. Ex ecut a do qu a ndo o bot o di r ei t o do mouse
pr essi on a do.

E Construtor: Ne w( [ aoWnd] , [ a nRow] , [ a nCol ] , [ a nHei ght ] , [ a n Wi dt h] ,
[ dDa t e I ni ] , [ nResol uti on] , [ a bWhe n] , [ a bAct i on] , [ n Def Col or ] ,
[ bRCli ck] , [l Fill All ] )

E Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.

anRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
anHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
anWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.

dDateIni Da t a , Da t a i ni ci al do Cal e ndri o
nResolution Nu mri co, Resol uo a ser a pl i ca da n a gri d do Cal e ndri o
abWhen
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.

abAction
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qu a ndo o bot o f or pr essi on a do.

nDefColor Nu mri co, opci on al . Cor do F undo da Gri d.
bRClick
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci ona do o
bot o di r ei t o do mouse sobr e o cont r ol e.
lFillAll Lgi co, opci onal . Pr e e nche t odo o peri odo

E Mtodos auxiliares:

Add

O Descrio: Adi ci on a peri odo n a Gri d.
O Sintaxe: Add( cCa pt i on, nLi n, nI ni ti al , nFi n al , nCol or, cDescri )
O Parmetros:

cCaption Car act er . Descri o a ser i nseri da a esquer da d a Gri d
nLin Nu meri co. Nu mer o da l i nh a a ser i nseri do o i t e m
nInitial Nu meri co. Di a i ni ci al
nFinal Nu meri co. Di a Fi nal

- 384 -

ADVPL Completo


nColor Nu meri co. Cor qu e d est acar a o i t e m
cDescri Car act er , Opi ci on al . Descri o do t i po t ool ti p( hi nt ) do i t e m

O Retorno:

Nil

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
nResolution := 1
oMsCalendGrid := MsCalendGrid():New( oDlg, 01, 01, 500,300,;
date(), nResolution, ,{|x,y| Alert(x) },;
RGB(255,255,196), {|x,y|Alert(x,y)}, .T.
)
oMsCalendGrid:Add('caption 01', 1, 10, 20, RGB(255,000,0),
'Descricao 01')
oMsCalendGrid:Add('caption 02', 2, 20, 30, RGB(255,255,0),
'Descricao 02')
oMsCalendGrid:Add('caption 03', 3, 01, 05, RGB(255,0,255),
'Descricao 03')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 385 -

ADVPL Completo



MSSELBR( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Gri d

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci on a da / posi ci ona da no obj et o
nLen N mer o t ot al de li nhas do obj et o

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ a He a d ers] ,
[ a Col Si z es] , [ oDl g] , [ cFi el d] , [ uVal ue 1] , [ uVal ue 2] , [ uCh a nge] ,
[ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCursor ] , [ nCl r For e] , [ nCl r Back] ,
[ cMsg] , [l Upda t e] , [ cAl i as] , [lPi x el ] , [ bWhe n] , [ l Desi gn] , [ bVali d] )

E Parmetros:

nRow Nu mri co, opci onal . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
nWidth Nu mri co, opci on al . Lar gur a do obj e t o
nHeight Nu mri co, opci onal . Al t ur a do obj et o
bFields Bl oco de cdi go, Li st a de Ca mpos
aHeaders Vet or, Descri o dos ca mpos pa r a no ca b eal ho
aColSizes Vet or, Lar gur a das col unas
oDlg
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
cField Car act er , opci on al . Ca mpos n ecessri os a o fil t ro
uValue1 I ndefi ni do, opci on al . I ni ci o do i nt er v al o par a o fi l t ro
uValue2 I ndefi ni do, opci on al . Fi m do i nt er v al o par a o fi l t ro
bChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
bLDblClick
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci ona do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
bRClick No ut i li z a do
oFont Obj et o, opci on al . Font e
oCursor Obj et o, opci on al . Ti po do Cursor
nClrFore Nu mri co, opci on al . Cor do t e xt o da j a nel a .
nClrBack Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci on ar o mouse sobr e o
obj et o
lUpdate No ut i li z a do
cAlias
Car act er , opci on al se obj et o ut ili z a do com Vet or , obri ga t ori o
se ut i li z a do com Ta b el a
lPixel
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lDesign No Ut i li z ado
bValid
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.


- 386 -

ADVPL Completo


E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nha par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


- 387 -

ADVPL Completo



RowCount

O Descrio: Ret or n a nu mer o d e l i nhas vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

E Aparncia:




- 388 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

DbSelectArea('SA1')
oBrowse := MsSelBr():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,{||
Alert(oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)


ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
.

MSWORKTIME( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Bar r a d e Per odo.

E Propriedades:

bChange
Bl oco de cdi go. Ex ecut a do ao di spar ar qu al quer a o sobr e
o obj et o.

E Construtor: Ne w( [ aoWnd] , [ a nRow] , [ a nCol ] , [ a nHei ght ] , [ a n Wi dt h] ,
[ nResol uti on] , [ cVal ue] , [ a bWhe n] , [ a bCha nge] )

E Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
anRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anCol Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou

- 389 -

ADVPL Completo


car act er es.
anHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
anWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.
nResolution Nu mri co, Resol uo a ser a pl i ca da n a gri d do Cal e ndri o
cValue Car act er , opci on al . Descri ti vo
abWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
abChange
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci ona do
qu a ndo o bot o f or pr essi ona do.

E Mtodos auxiliares:

GetValue

O Descrio: Ret or na os i t e m sel eci on a dos no f or ma t o XX X XX.
O Sintaxe: Get Val ue( )
O Parmetros:

Nenhum -

O Retorno:

Caracter Ret or n a os i t e m sel eci on a dos no f or ma t o XX X XX.

GetInterTime

O Descrio: Ret or na peri odo sel eci ona do.
O Sintaxe: Get I nt er Ti me( )
O Parmetros:

Nenhum -

O Retorno:

Caracter Ret or n a o per odo sel eci ona da no f or ma t o HH: MM: SS

SetResol

O Descrio: Defi ne a r esol uo da de monst r a o da bar r a d e per odos.
O Sintaxe: Set Resol ( nResol uti on)
O Parmetros:

nResolution Resol uo

O Retorno:

Nil


- 390 -

ADVPL Completo



SetValue

O Descrio: At ri bui u m det er mi ndo cont e do par a u m obj et o ou a t ri but o
de u m obj et o.
O Sintaxe: Set Val ue( x Val ue, cPi ct ur e)
O Parmetros:

x Val ue Val or que ser a t ri bu do ao obj et o ou a t ri but o do obj et o.
cPi ct ur e Pi ct ur e de f or mao opci on al par a o cont e do a t ri bu do.

O Retorno:

Nenhum


E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMsWorkTime := MsWorkTime():New(oDlg,04,04,280,133,0,'',{||.T.},;
{|oWorkTime|Alert('GetValue():
'+oWorkTime:GetValue()+chr(13)+;
'GetInterTime():
'+oWorkTime:GetInterTime())} )
oMsWorkTime:SetValue('X X XX X')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


- 391 -

ADVPL Completo



SBUTTON( )

E Descrio: Cl asse de obj et os vi su ai s do ti po bot o que Defi ne o compon e nt e
vi su al SBut t on, o qual per mi t e a i ncl uso de bot es d e op er ao n a
t el a da i nt erf ace, os qu ai s ser o vi su ali z a dos dep e nde ndo da
i nt erf ace do si st e ma ERP utili z a da some nt e com u m t e xt o si mpl es
par a sua i de nt i fi cao, ou com u ma i ma ge m ( Bi t Ma p) pr - defi ni do.

E Propriedades:

bAction
Bl oco de cdi go. Ex ecut a do ao pr eci on ar o bot o esquer do
do mouse .

E Construtor: Ne w( [ nTop] , [ nLef t ] , [ nTy p e] , [ bActi on] , [ oWnd] , [l En a bl e] ,
[ cMsg] , [ bWh e n] )

E Parmetros:

Parmetro Ti po / Descri o
nTop
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
nLeft
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
nType Nu mri co. Ti po do Bot o
bAction
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qua ndo o bot o f or pr essi ona do.
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
lEnable Logi co, opci on al . Ha bili t a / Desa bi li t a bot o
cMsg Car act er , Opi ci on al . Descri o do t i po t ool ti p( hi nt ) do i t e m
abWhen
Bl oco de cdi go, opci on al . Ex ecut a do qua ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.

E Mtodos auxiliares:

Create

O Descrio: Ret or n a M t odo const r ut or opci on al da cl asse .
O Sintaxe: Cr e a t e( )
O Parmetros:

Nenhum -

O Retorno:

Objeto
Obj et o da cl asse Sbut t on com t odos os a t ri but os com
cont e dos pa dres.


- 392 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oSButton1 := SButton():New( 01,01,1,{||Alert('SButton
01')},oDlg,.T.,,)
oSButton2 := SButton():New( 21,01,2,{||Alert('SButton
02')},oDlg,.T.,,)
oSButton3 := SButton():New( 41,01,3,{||Alert('SButton
03')},oDlg,.T.,,)
oSButton4 := SButton():New( 61,01,4,{||Alert('SButton
04')},oDlg,.T.,,)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL











- 393 -

ADVPL Completo



TBAR( )

E Descrio: Cl asse d e obj et os vi suai s que per mi t e a i mpl e me nt ao de u m
compone nt e do t i po barr a de bot es pa r a a p ar t e superi or d e u ma
j a nel a pr e vi a me nt e d efi ni da .

E Propriedades:

- Her da dos das cl asses superi or es.

E Construtor:

E Parmetros:

oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
nBtnWidth Nu mri co, opci on al . Lar gur a do bot o cont i do n a barr a
nBtnHeight Nu mri co, opci on al . Al t ur a do bot o cont i do n a barr a
l3D Lgi co, opci on al . Defi ne t i po da barr a
cMode No ut i li z a do.
oCursor
Obj et o, opci on al . Defi ne Cursor ao posi ci on ar o mouse sobr e a
barr a .
cResource
Car act er , opci on al . I ma ge m do r ecurso a ser i nseri do como
f undo da bar r a .
lNoAutoAdjust Lgi co.

E Aparncia:



- 394 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'

/*/
+------------------------------------------------------------------------
| Funo | TSTBAR | Autor | MICROSIGA |Data | |
+------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/

User Function TstTBar()
Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

Exemplo (continuao):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;
{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;
{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;
{||},oTBar,'Preo' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return










- 395 -

ADVPL Completo



TBITMAP( )

E Descrio: Cl asse de obj et os vi su ai s que per mi t e a e xi bi o de u ma i ma ge m.

E Propriedades:

cResNa me Car act er e, Nome do r esource
cBmpFil e Car act er e, Nome do a r qui vo
l St r et ch Lgi co, opci on al . St r ech da i ma ge m
l Aut oSi z e Lgi co, opci on al . Ta ma nho a ut om t i co
l Tr a nspar e nt Lgi co, opci onal . Tr a nsp ar e nt e

E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a n Wi dt h] , [ a nHei ght ] , [ acResNa me] ,
[ acBmpFil e] , [ al NoBor der ] , [ aoWnd] , [ a bLCl i ck ed] , [ a bRCli ck ed] ,
[ al Scroll ] , [ al St r et ch] , [ aoCursor ] , [ acMsg] , [ al Upda t e] , [ a bWhe n] ,
[ alPi x el ] , [ a bVali d] , [ al Desi gn] , [ al I sI con] , [ al I sJpeg] )

E Parmetros:

anTop
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anLeft
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
anWidth Nu mri co, opci on al . Lar gur a e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a e m pi x el s.
acResName Car act er e, Nome do r esource.
acBmpFile Car act er e, Nome do a r qui vo.
alNoBorder Lgi co, opci onal . Exi be bor da
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a i ma ge m d e v er
ser cri a da .
abLClicked
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
bot o esqu er do do mouse f or pr essi on a do.
abRClicked
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
bot o di r ei t o do mouse f or pr essi on a do.
alScroll Lgi co, opci onal . At i v a o scrol l
alStretch Lgi co, opci on al . St r ech da i ma ge m
aoCursor Obj et o, opci on al . Cursor a ser e xi bi do
acMsg No ut i li z a do
alUpdate No ut i li z a do
abWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
alPixel Lgi co, opci onal . Ut ili z a coor d e n a das e m pi x el
abValid
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do n a
v ali dao.
alDesign No ut i li z a do
alIsIcon
Lgi co, opci onal . con e. No ut i li z a do a par t i r da v ers o
Prot h e us 8
alIsJpeg
Lgi co, opci on al . Jpeg. No ut i li z a do a par t i r da v ers o
Prot h e us 8


- 396 -

ADVPL Completo



E Mtodos auxiliares:

Create

O Descrio: Ret or na M t odo const r ut or opci onal da cl asse .
O Sintaxe: Cr e a t e( )
O Parmetros:

Ne nhu m -

O Retorno:

Objeto
Obj et o da cl asse TBar com t odos os a t ri but os com
cont e dos pa dres.

SetBmp

O Descrio: Mt odo par a car r egar u ma i ma ge m do r eposi t ri o.
O Sintaxe: Set Bmp( acResNa me )
O Parmetros:

acResNa me Car act er e, Nome do r esource

O Retorno:

Nenhum -

Load

O Descrio: Mt odo par a car r egar u ma i ma ge m do r eposi t ri o ou l ocal .
O Sintaxe: Loa d( acResNa me, acBmpFi l e )
O Parmetros:

acResNa me Car act er e, Nome do r esource.
acBmpFil e Car act er e, Nome do a r qui vo.

O Retorno:

Nenhum -

E Aparncia:



- 397 -

ADVPL Completo



Exemplo:


#include protheus.ch


User Function tBitmapTst()
Local oDlg
Local oBmp

DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 280,330 PIXEL

@ 10, 10 BITMAP oBmp RESOURCE 'totvs.bmp' SIZE 150,150 OF oDlg PIXEL
oBmp:lAutoSize := .T.

ACTIVATE MSDIALOG oDlg CENTERED

Return

.

TBROWSEBUTTON( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po bot o no f or ma t o pa dr o utili z a do
e m br owses da a pl i cao.

E Propriedades:

bAction
Bl oco de cdi go. Ex ecut a do ao pr eci on ar o bot o esquer do
do mouse .

E Construtor: Ne w( [ nRow] , [ nCol ] , [ cCa pt i on] , [ oWnd] , [ bAct i on] , [ n Wi dt h] ,
[ nHei ght ] , [ nHel pI d] , [ oFont ] , [l Def a ul t ] , [lPi x el ] , [l Desi gn] , [ cMsg] ,
[l Updat e] , [ bWhe n] , [ bVali d] , [l Ca ncel ] )

E Parmetros:

nRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
nCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
cCaption Car act er e, opci on al . Ti t ul o do bot o.
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
bAction
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qu a ndo o bot o f or pr essi ona do.
nWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s
nHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.

nHelpId Reser v a do
oFont
Obj et o, opci on al . Obj et o t i po t Font com propri eda des da
f ont e ut i li z a da par a o t t ul o do bot o.
lDefault Reser v a do
lPixel
Lgi co, opci on al . Se . T. consi der a as coor d e n a d as passa das
e m pi x el s, se . F . ( pa dr o) consi der a e m car act er es.

- 398 -

ADVPL Completo


lDesign Reser v a do
cMsg Reser v a do
lUpdate Reser v a do
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
bValid Reser v a do
lCancel Reser v a do

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBrowseButton := TBrowseButton():New( 01,01,'TBrowseButton',oDlg,;

{||Alert('TBrowseButton')},40,10,,,.F.,.T.,.F.,,.F.,,,)

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL















- 399 -

ADVPL Completo



TBTNBMP( )

E Descrio: Cl asse de obj et os vi su ai s do ti po bot o, o qu al per mi t e que sej a
vi ncul a da u ma i ma ge m ao cont r ol e.

E Propriedades:

bAction
Bl oco de cdi go. Ex ecut a do ao pr eci on ar o bot o esquer do
do mouse .

E Construtor: Ne wBa r ( [ cResNa me 1] , [ cResNa me 2] , [ cBmpFil e 1] , [ cBmpFil e 2] ,
[ cMsg] , [ bAct i on] , [l Group] , [ oWnd] , [l Adj ust ] , [ bWhe n] , [ cTool Ti p] ,
[lPr essed] , [ bDr op] , [ cAct i on] , [ nPos] , [ cPr ompt ] , [ oFont ] ,
[ cResNa me 3] , [ cBmpFi l e 3] , [l Bor d er ] )

E Parmetros:

cResName1 Car act er e, Nome do r esource
cResName2 Car act er e, Nome do r esource
cBmpFile1 Car act er e, N O UTI LI Z ADO
cBmpFile2 Car act er e, N O UTI LI Z ADO
cMsg Car act er e, Me nsa ge m d e Hi nt
bAction Bl oco de cdi go. A o e x ecut a da
lGroup Lgi co. Defi ne gr upo
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
lAdjust Lgi co, NO UTI LI Z ADO
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
cToolTip Me nsa g e m e xi bi da qu a ndo obj et o e xi be se u t ool t i p.
lPressed No ut i li z a do
bDrop No ut i li z a do
cAction No ut i li z a do
nPos No ut i li z a do
cPrompt Car act er , opci on al . Ca pt i on do bot o.
oFont
Obj et o, opci on al . Obj et o t i po t Font utili z a do par a defi ni r as
car act er st i cas da f ont e utili z a da par a e xi bi r o cont e do do
cont r ol e.
cResName3 No ut i li z a do
cBmpFile3 No ut i li z a do
lBorder No ut i li z a do


- 400 -

ADVPL Completo



E Mtodos auxiliares:

LoadBitmaps

O Descrio: At ri bui ao bot o os bi t ma ps ou r ecursos pa r a e xi bi o.
O Sintaxe: Loa dBi t ma ps( [ cResNa me 1] , [ cResNa me 2] , [ cBmpFi l e 1] ,
[ cBmpFil e 2] , [ cResNa me 3] , [ cB mpFil e 3] )

O Parmetros:

cResNa me 1 Car act er e, Nome do r esource
cResNa me 2 Car act er e, Nome do r esource
cBmpFil e 1 Car act er e, Nome do a r qui vo BMP
cBmpFil e 2 Car act er e, Nome do a r qui vo BMP
cResNa me 3 Car act er e, Nome do r esource
cBmpFil e 3 Car act er e, Nome do r esource

O Retorno:

Nenhum


SetPopUpMenu

O Descrio: Set a o obj e t o do t i po TMe nu r ef er e nt e ao bot o.
O Sintaxe: Set PopupMe nu( oMe nu)
O Parmetros:

Ne nhu m -

O Retorno:

Nenhum -

E Aparncia:



- 401 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. ) // Orig: 25,45
oTBtnBmp1 := TBtnBmp() :NewBar('RPMNEW',,,,'Msg 01',;
{||Alert('TBtnBmp
01')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
oTBtnBmp2 := TBtnBmp() :NewBar('copyuser',,,,'Msg 02',;
{||Alert('TBtnBmp
02')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


TBTNBMP2( )

E Descrio: Cl asse de obj et os vi suai s do t i po bot o, o qu al per mi t e a e xi bi o de
u ma i ma ge m ou de u m popup.

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nWi dt h] , [ a nHei ght ] , [ acResNa me 1] ,
[ acResNa me 2] , [ acBmpFil e 1] , [ acBmpFil e 2] , [ a bAct i on] , [ aoWnd] ,
[ acMsg] , [ a b Whe n] , [l Adj ust e] , [l Upda t e] )

E Parmetros:

anTop
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anLeft
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
anWidth Nu mri co, opci on al . Lar gur a e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a e m pi x el s.
acResName1 Car act er e, Nome do r esource
acResName2 Car act er e, N O UTI LI Z ADO
acBmpFile1 Car act er e, N O UTI LI Z ADO
acBmpFile2 Car act er e, N O UTI LI Z ADO
abAction Bl oco de cdi go. A o e x ecut a da
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
acMsg Car act er e, Me nsa ge m d e Hi nt
abWhen
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lAdjust Lgi co, NO UTI LI Z ADO
lUpdate Lgi co, NO UTI LI Z ADO

E Mtodos auxiliares:

- 402 -

ADVPL Completo



LoadBitmaps

O Descrio: At ri bui ao bot o os bi t ma ps ou r ecursos pa r a e xi bi o.
O Sintaxe: Loa dBi t ma ps( [ cResNa me 1] , [ cResNa me 2] , [ cBmpFi l e 1] ,
[ cBmpFil e 2] , [ cResNa me 3] , [ cB mpFil e 3] )

O Parmetros:

cResName1 Car act er e, Nome do r esource
cResName2 Car act er e, Nome do r esource
cBmpFile1 Car act er e, Nome do a r qui vo BMP
cBmpFile2 Car act er e, Nome do a r qui vo BMP
cResName3 Car act er e, Nome do r esource
cBmpFile3 Car act er e, Nome do r esource

O Retorno:

Nenhum

SetPopUpMenu

O Descrio: Set a o obj e t o do t i po TMe nu r ef er e nt e ao bot o.
O Sintaxe: Set PopupMe nu( oMe nu)
O Parmetros:

Ne nhu m -

O Retorno:

Nenhum -

E Aparncia:



- 403 -

ADVPL Completo



Exemplo:

Local oBtn := TBtnBmp2():New( 10, 10, 25, 25, 'printer_r2' , , , , , oDlg,
, , )
Exemplo 2 (Popup)
#INCLUDE 'PROTHEUS.CH'
User Function BtnBmpPopUp
Local oDlg
Local oBtn
DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 100,200 PIXEL
oBtn := TBtnBmp2():New( 10, 10, 13, 13, 'IBF-MENU.BMP' , 'IBF-MENU.BMP' ,
, , , oDlg, , , .T.)
oBtn:SetPopupmenu(TShowMenu())
ACTIVATE MSDIALOG oDlg CENTERED
Return

/**************************/
Static Function TShowMenu()
Local oMenu
oMenu := TMenu():New(0,0,0,0,.T.)
oMenu:Add(TMenuItem():New(,'Detalhes', 'Detalhes',,, ,,,,,,,,,.T.))
oMenu:Add(TMenuItem():New(,'Add Info', 'Add Info',,, ,,,,,,,,,.T.))
Return oMenu

TBUTTON( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po bot o, o qu al per mi t e a utili z ao
de t e xt o pa r a su a i de nt ifi cao.

E Propriedades:

lProcessing Lgi co. Se . T. i ndi ca o bot o est ef et u a ndo u ma ao.
bAction Bl oco de cdi go. Ex ecut a do qu a ndo o bot o pr essi on a do.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ acCa pt i on] , [ aoWnd] , [ a bAct i on] ,
[ a n Wi dt h] , [ a nHei ght ] , [ nPar 8] , [ aoFont ] , [lPar 10] ,
[ alPi x el ] , [lPar 12] , [ cPar 1 3] , [lPar 14] , [ a bWhe n] , [ bPar 16] , [lPar 17] )

E Parmetros:

Parmetro Ti po / Descri o
anRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
acCaption Car act er e, opci on al . Ti t ul o do bot o.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
abAction
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qu a ndo o bot o f or pr essi on a do.
anWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
nPar8 Reser v a do.
aoFont
Obj et o, opci on al . Obj et o t i po t Font com propri eda des da
f ont e ut i li z a da par a o t t ul o do bot o.

- 404 -

ADVPL Completo


lPar10 Reser v a do.
alPixel
Lgi co, opci on al . Se . T. consi der a as coor d e n a d as passa das
e m pi x el s, se . F . ( pa dr o) consi der a e m car act er es.
lPar12 Reser v a do.
cPar13 Reser v a do.
lPar14 Reser v a do.
abWhen
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
bPar16 Reser v a do.
lPar17 Reser v a do.

E Aparncia:



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
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor '+cCombo )
Return NIL

- 405 -

ADVPL Completo



TCBROWSE( )

E Descrio: Cl asse de obj et os vi su ai s do t i po Gri d.

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci ona da / posi ci on a da no obj et o
nLen N mer o t ot al de li nhas do obj et o

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ a He a d ers] ,
[ a Col Si z es] , [ oDl g] , [ cFi el d] , [ uVal ue 1] , [ uVal ue 2] ,
[ uCha nge] , [ { | nRow, nCol , nFl a gs | [ uLDbl Cli ck] } ] ,
[ { | nRow, nCol , nFl a gs | [ uRCli ck] } ] , [ oFont ] , [ oCursor ] , [ nCl r For e] ,
[ nCl r Back] , [ cMsg] , [l Upda t e] , [ cAli as] , [lPi x el ] , [ { uWhe n } ] ,
[l Desi gn] , [ bVali d] , [l HScr oll ] , [l VScrol l ] )

E Parmetros:

nRow Nu mri co, opci onal . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
nWidth Nu mri co, opci onal . Lar gur a do obj et o
nHeight Nu mri co, opci on al . Al t ur a do obj et o
bFields Bl oco de cdi go, Li st a de Ca mpos
aHeaders Vet or, Descri o dos ca mpos pa r a no ca b eal ho
aColSizes Vet or, Lar gur a das col unas
oDlg
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
cField Car act er , opci onal . Ca mpos n ecessri os a o fil t ro
uValue1 I ndefi ni do, opci on al . I ni ci o do i nt er v al o par a o fi l t ro
uValue2 I ndefi ni do, opci on al . Fi m do i nt er v al o par a o fi l t ro
bChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
bLDblClick
Bl oco de cdi go, opci on al . Ex ecut a do qua ndo aci on a do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
bRClick No ut i li z a do
oFont Obj et o, opci on al . Font e
oCursor Obj et o, opci on al . Ti po do Cursor
nClrFore Nu mri co, opci onal . Cor do t e xt o da j a nel a .
nClrBack Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci on ar o mouse sobr e o
obj et o
lUpdate No ut i li z a do
cAlias
Car act er , opci on al se obj et o ut ili z a do com Vet or , obri ga t ori o
se ut i li z a do com Ta b el a
lPixel
Lgi co, opci onal . Se . T. as coor de na das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lDesign No Ut i li z ado
bValid
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do

- 406 -

ADVPL Completo


f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
lHScroll
Lgi co, opci on al . Se . T. , ha bili t a barr a d e rol a ge m
hori z ont al .
lVScroll Lgi co, opci on al . Se . T. , ha bili t a barr a d e rol a ge m v er t i cal .

E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nha par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 407 -

ADVPL Completo


RowCount

O Descrio: Ret or n a nu mer o d e l i nh as vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Nenhum -

O Retorno:

Nil

E Aparncia:




- 408 -

ADVPL Completo


Exemplo:

#include 'protheus.ch'
user function TcBrowse_EX()
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
Local aList := {} // Vetor com elementos do Browse
Local nX
// Cria Vetor para teste
for nX := 1 to 100
aListAux := {.T., strzero(nX,10), 'Descrio do Produto '+;
strzero(nX,3), 1000.22+nX}
aadd(aList, aListAux)
next

DEFINE MSDIALOG oDlg FROM 0,0 TO 520,600 PIXEL TITLE 'Exemplo da TCBrowse'
// Cria objeto de fonte que sera usado na Browse
Define Font oFont Name 'Courier New' Size 0, -12
// Cria Browse
oList := TCBrowse():New( 01 , 01, 300, 200,,;
'','Codigo','Descrio','Valor'},{20,50,50,50},;
oDlg,,,,,{||},,oFont,,,,,.F.,,.T.,,.F.,,, )
// Seta o vetor a ser utilizado
oList:SetArray(aList)
// Monta a linha a ser exibina no Browse
oList:bLine := {||{ If(aList[oList:nAt,01],oOK,oNO),;
aList[oList:nAt,02],;
aList[oList:nAt,03],;
Transform(aList[oList:nAT,04],'@E 99,999,999,999.99') } }
// Evento de DuploClick (troca o valor do primeiro elemento do Vetor)
oList:bLDblClick := {|| aList[oList:nAt][1] :=;
!aList[oList:nAt][1],oList:DrawSelect() }
// Principais commandos
oBtn := TButton():New( 210, 001,'GoUp()' , oDlg,{||oList:GoUp()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 001,'GoDown()', oDlg,{||oList:GoDown()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 230, 001,'GoTop()' , oDlg,{||oList:GoTop()}, ;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 240, 001,'GoBottom()', oDlg,{||oList:GoBottom()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 210, 060, 'nAt (Linha selecionada)' ,;
oDlg,{|| Alert(oList:nAt)},;
90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 060, 'nRowCount (Nr de linhas visiveis)',
oDlg,;{|| Alert(oList:nRowCount()) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )

oBtn := TButton():New( 230, 060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oList:nLen) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )

oBtn := TButton():New( 240, 060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aList,oList,'@!',3) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return


- 409 -

ADVPL Completo



TCHECKBOX( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Chec