Você está na página 1de 660

Educao Cor por at i v a

Pr ogr amao em ADVPL


Compl et o




Mat r iz Av. Br az Leme, 1.717 02511- 000 So Paulo SP Br asil.
Tel.: 55 ( 11) 3981- 7001

www.micr osiga.com.br



- 2 -

ADVPL Compl et o



ESTRUTURA DO TREI NAMENTO

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 Compl et o


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 Compl et o


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 Compl et o


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 Compl et o


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 Compl et o


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 Compl et o


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 Compl et o


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 Compl et o


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


- 11 -

ADVPL Compl et o


MDULO 01: I nt r oduo pr ogr amao

1. Lgi ca de Pr ogr amao e Al gor i t mos

No aprendi zado de qual quer l i nguagem de pr ogramao essenci al desenvol ver os concei t os
rel aci onados a l gi ca e a t cni ca da escri t a de um programa.

Com foco nest a necessi dade, est e t pi co i r descr ever r esumi dament e os concei t os envol vi dos
no pr ocesso de desenvol vi ment o de um programa at ravs dos concei t os r el aci onados :

E Lgi ca de programao
E Al gori t mos
E Di agramas de bl ocos

1.1. Lgi ca de Pr ogr amao

Lgi ca

A l gi ca de programao necessri a para pessoas que desej am t rabal har com
desenvol vi ment o de si st emas e pr ogramas, el a permi t e defi ni r a seqnci a l gi ca para o
desenvol vi ment o. Ent o o que l gi ca?


Lgi ca de pr ogr amao a t cni ca de encadear pen sament os par a at i ngi r
det er mi n ado obj et i v o.


Seq nci a Lgi ca

Est es pensament os, podem ser descri t os como uma seqnci a de i nst rues, que devem ser
segui das para se cumpri r uma det ermi nada t arefa.


Seq nci a Lgi ca so passos ex ecut ados at at i n gi r u m obj et i v o ou sol uo de u m
pr obl ema.


I nst r ues

Na li nguagem comum, ent ende- se por i nst rues um conj unt o de r egras ou normas defi ni das
para a reali zao ou emprego de al go .

Em i nformt i ca, porm, i nst ruo a i nformao que i ndi ca a um comput ador uma ao
el ement ar a execut ar . Convm r essal t ar que uma ordem i sol ada no per mi t e real i zar o
processo compl et o, par a i sso necessri o um conj unt o de i nst rues col ocadas em ordem
seqenci al l gi ca.

Por exempl o, se qui ser mos fazer uma omel et e de bat at as, pr eci sar emos col ocar em prt i ca
uma sri e de i nst rues: descascar as bat at as, bat er os ovos, fri t ar as bat at as, et c. evi dent e
que essas i nst rues t m que ser execut adas em uma ordem adequada no se pode
descascar as bat at as depoi s de fri t - l as.

Dessa manei ra, uma inst ruo t omada em separado no t em mui t o sent i do; para obt ermos o
resul t ado, preci samos col ocar em prt i ca o conj unt o de t odas as i nst rues, na ordem cor ret a.

- 12 -

ADVPL Compl et o




I nst r ues so um conj unt o de r egr as ou nor mas def i n i das par a a r eal i zao ou
empr ego de al go. Em i nf or mt i ca, o que i ndi ca a um comput ador uma ao
el ement ar a ex ecut ar .


Al gor i t mo

Um al gori t mo for malment e uma seqnci a fi nit a de passos que l evam a execuo de uma
t arefa. Podemos pensar em al gori t mo como uma recei t a, uma seqnci a de i nst rues que do
cabo de uma met a especfi ca. Est as t arefas no podem ser r edundant es nem subj et i vas na sua
defi ni o, devem ser cl aras e preci sas.

Como exempl os de al gori t mos podemos ci t ar os al gori t mos das oper aes bsi cas ( adi o,
mul t ipli cao, di vi so e subt rao) de nmer os r eai s deci mai s. Out ros exempl os seri am os
manuai s de aparel hos el et rni cos, como um vi deocasset e, que expl i cam passo- a- passo como,
por exempl o, gravar um event o.

At mesmo as coi sas mai s si mpl es, podem ser descri t as por seqnci as l gi cas, t ai s como:

E Chupar uma bal a
1. Pegar a bal a;
2. Ret i rar o papel ;
3. Chupar a bal a;
4. Jogar o papel no li xo.

E Somar doi s nmeros quai squer
1. Escr eva o pri mei ro nmer o no r et ngul o A;
2. Escr eva o segundo nmer o no r et ngul o B;
3. Some o nmero do r et ngul o A com nmero do r et ngul o B e col oque o
resul t ado no r et ngul o C.


1.2. Desenv ol v endo al gor i t mos

Pseu docdi go

Os al gori t mos so descri t os em uma linguagem chamada pseudocdi go. Est e nome uma
al uso post eri or i mplement ao em uma l inguagem de pr ogramao, ou sej a, quando for
ut ili zada a linguagem a de pr ogramao pr opri ament e di t a como, por exempl o, ADVPL.

Por i sso os al gori t mos so i ndependent es das li nguagens de pr ogr amao, sendo que ao
cont rri o de uma linguagem de pr ogramao no exi st e um formali smo rgi do de como deve
ser escri t o o al gori t mo.

O al gori t mo deve ser fci l de i nt erpret ar e fci l de codi fi car. Ou sej a, el e deve ser o
i nt ermedi ri o ent r e a li nguagem fal ada e a l i nguagem de pr ogramao.

- 13 -

ADVPL Compl et o



Regr as par a const r uo do Al gor i t mo

Para escr ever um al gori t mo preci samos descrever a seqnci a de i nst rues, de manei ra
si mpl es e obj et i va. Para i sso ut ili zaremos al gumas t cni cas:

1. Usar soment e um verbo por frase;
2. I magi nar que voc est desenvol vendo um al gori t mo para pessoas que no t rabal ham
com i nformt i ca;
3. Usar frases curt as e si mpl es;
4. Ser obj et i vo;
5. Procurar usar pal avras que no t enham sent i do dbi o.

Fases

Para i mpl ement ar de um al gori t mo de si mpl es i nt erpr et ao e codi fi cao necessri o
i ni ci al ment e di vi di r o pr obl ema apr esent ado em t rs fases fundament ais, as quai s so:

E ENTRADA: So os dados de ent rada do al gori t mo;
E PROCESSAMENTO: So os procedi ment os ut ilizados para chegar ao r esul t ado fi nal ;
E SA DA: So os dados j processados.


1.2.1. Est udando al gor i t mos

Nest e t pi co sero demonst rados al guns algori t mos do cot i di ano, os quai s foram
i mpl ement ados ut ili zando os pri ncpi os descri t os nos t pi cos ant eri or es.

Mascar um ch i cl et e
Ut i l i zar um t el ef on e pbl i co car t o
Fr i t ar um ov o
Tr ocar l mpadas
Descascar bat at as
Jogar o j ogo da f or ca
Cal cul ar a mdi a de n ot as
Jogar o j ogo da v el ha cont r a o al gor i t mo

Mascar um ch i cl et e

1. Pegar o chi cl et e
2. Ret i rar o papel
3. Mast i gar
4. Jogar o papel no li xo

Ut i l i zar um t el ef on e pbl i co - car t o

1. Ret i rar o t el efone do gancho
2. Esperar o si nal
3. Col ocar o cart o
4. Di scar o nmer o
5. Fal ar no t el efone
6. Col ocar o t el efone no ganho

- 14 -

ADVPL Compl et o



Fr i t ar um ov o

1. Pegar fri gi dei ra, ovo, leo e sal
2. Col ocar l eo na fri gi dei ra
3. Ascender o fogo
4. Col ocar a fri gi dei ra no fogo
5. Esperar o l eo esquent ar
6. Quebr ar o ovo na fri gi dei ra
7. Jogar a casca no l i xo
8. Ret i rar a fri gi dei ra do fogo quando o ovo est i ver no pont o
9. Desl i gar o fogo
10. Col ocar sal a gost o

Tr ocar l mpadas

1. Se a l mpada est i ver fora do al cance, pegar uma escada
2. Pegar a l mpada nova
3. Se a l mpada quei mada est i ver quent e, pegar um pano
4. Ti rar l mpada quei mada
5. Col ocar l mpada nova

Descascar bat at as

1. Pegar faca, baci a e bat at as
2. Col ocar gua na baci a
3. Enquant o houver bat at as, descascar as bat at as
3.1. Col ocar as bat at as descascadas na baci a

Jogar o j ogo da f or ca

1. Escol her a pal avra
2. Mont ar o di agrama do j ogo
3. Enquant o houver l acunas vazi as e o corpo est i ver i ncompl et o:
3.1. Se acert ar a l et ra: escr ever na l acuna corr espondent e
3.2. Se er rar a l et ra: desenhar uma part e do corpo na forca

Cal cul ar a mdi a de n ot as

1. Enquant o houver not as a ser em recebi 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 pela quant idade de not as r ecebi das;
4. Exi ba a mdi a das not as.


Jogar o j ogo da v el ha cont r a o al gor i t mo

1. Enquant o exi st i r um quadrado l i vre e ni ngum ganhou ou perdeu o j ogo:
1.1. Esper e a j ogada do adver sri o, cont i nue depoi s
1.2. Se cent r o est i ver li vre: j ogue no cent r o
1.3. Seno, se o adversri o possui r 2 quadrados em li nha com um quadr ado li vre,
j ogue nest e quadrado
1.4. Seno, se h al gum cant o li vre, j ogue nest e cant o

- 15 -

ADVPL Compl et o



1.2.2. Test e de mesa

Aps desenvol ver um al gori t mo el e dever sempr e ser t est ado. Est e t est e chamado de
TESTE DE MESA, que si gni fi ca segui r as i nst rues do al gori t mo de manei ra pr eci sa para
veri fi car se o procedi ment o ut ilizado est cor ret o ou no.

Para aval i ar a apli cao do t est e de mesa, ut ilizaremos o al gori t mo de cal cul ar a mdi a de
not as:

Al gor i t mo: Cal cul ar a mdi a de not as

1. Enquant o houver not as a serem r ecebi das:
a. Receber a not a;

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


Test e de mesa:

1. Par a cada not a i nfor mada, r eceber e r egi st rar na t abel a abai xo:

I D Not a


2. Ao t rmi no das not as, a t abel a dever cont er t odas as not as i nformadas, como abai xo:

I D Not a
1 8.0
2 7.0
3 8.0
4 8.0
5 7.0
6 7.0

3. Somar t odas as not as: 45
4. Di vi di r a soma das not as, pel o t ot al de not as informado: 45/ 6 7.5
5. Exi bi r a mdi a obt i da: Mensagem( Mdi a: 7.5)






- 16 -

ADVPL Compl et o



2. Est r ut ur as de pr ogr amao

2.1. Di agr ama de bl oco

O di agrama de bl ocos uma forma padr oni zada e efi caz para r epr esent ar os passos l gi cos de
um det ermi nado processament o.

Com o di agrama podemos defi ni r uma seqnci a de smbol os, com si gni fi cado bem defi ni do,
port ant o, sua pri nci pal funo a de faci lit ar a vi suali zao dos passos de um pr ocessament o.

Si mbol ogi a

Exi st em di ver sos smbolos em um di agrama de bl oco. No quadr o abai xo est o represent ados
al guns dos smbol os mai s ut ili zados:

Smbol o Funo

Ter mi nador
I ndi ca o i nci o e o fi m de um processament o.

Pr ocessament o
Processament o em geral .

Ent r ada
Manu al
I ndi ca a ent rada de dados at ravs do t ecl ado.

Deci so
I ndi ca um pont o no qual dever ser efet uada
uma escol ha ent r e duas si t uaes possvei s.

Ex i bi o
Most ra os r esul t ados obt i dos com um
processament o.

Document o
I ndi ca um document o ut ili zado pel o
processament o, sej a para ent rada de
i nformaes ou para exi bi o dos dados
di sponvei s aps um processament o.



Cada smbol o i r cont er uma descri o pert i nent e a forma com o qual o
mesmo foi ut ilizado no fl uxo, i ndi cando o processament o ou a i nformao
que o mesmo r epr esent a.


- 17 -

ADVPL Compl et o



Repr esent ao de al gor i t mos at r av s de di agr amas de bl oco

Al gor i t mo 01: Fr i t ar u m ov o

1. Pegar fri gi dei ra, ovo, l eo e sal
2. Col ocar l eo na fri gi dei ra
3. Ascender o fogo
4. Col ocar a fri gi dei ra no fogo
5. Esperar o l eo esquent ar
6. Quebrar o ovo na fri gi dei ra
7. Jogar a casca no li xo
8. Ret i rar a fri gi dei ra do fogo quando o ovo est i ver no pont o
9. Desl i gar o fogo
10. Col ocar sal a gost o




- 18 -

ADVPL Compl et o



Al gor i t mo 02: Cal cul ar a mdi a de not as

1. Enquant o houver not as a serem r ecebi das:
a. Receber a not a;

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



- 19 -

ADVPL Compl et o



2.2. Est r ut ur as de deci so e r epet i o

A ut ilizao de est rut ur as de deci so e r epet i o em um al gori t mo per mi t e a real i zao de
aes r el aci onadas a si t uaes que i nfluenci am na execuo e sol uo do pr obl ema.

Como foco na ut ili zao da li nguagem ADVPL sero i l ust radas as segui nt es est rut uras:

E Est r ut u r as de deci so
o I F. .. ELSE
o DO CASE ... CASE

E Est r ut u r as de r epet i o
o WHI LE... END
o FOR... NEXT


2.2.1. Est r ut ur as de deci so

Os comandos de deci so so ut ili zados em al gori t mos cuj a sol uo no obt i da at ravs da
ut ili zao de aes merament e seqenci ais, permi t indo que est e aval i e as condi es
necessri as para opt ar por uma ou out ra manei ra de cont i nuar seu fl uxo.

As est rut uras de deci so que sero anal i sadas so:

E I F...ELSE
E DO CASE ... CASE

I F...ELSE

A est rut ura I F... ELSE ( Se/ Seno) permi t e a anli se de uma condi o e a part i r da qual ser
execut ada uma de duas aes possvei s: se a anli se da condi o r esul t ar em um valor
verdadei ro ou se a anlise da condi o r esul t ar em um val or fal so.

Repr esent ao 01 : I F...ELSE com aes par a ambas as si t uaes

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 Compl et o


Est a est rut ura permi t e ai nda que sej a execut ada apenas uma ao, na si t uao em que a a
anli se da condi o result ar em um val or verdadei ro.

Repr esent ao 02 : I F...ELSE soment e com ao par a si t u ao v er dadei r a

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




Apesar das l i nguagens de pr ogramao possurem vari aes para a est rut ura
I F. .. ELSE, concei t ual ment e t odas as r epr esent aes podem ser descri t as com
base no model o apr esent ado.



A li nguagem ADVPL possui uma vari ao para a est rut ura I F... ELSE, descri t a
como I F. .. ELSEI F.. .ELSE.

Com est a est rut ura possvel real i zar a anli se de di versas condi es em
seqnci a, para as quai s ser aval i ada soment e a ao da pri mei ra expresso
cuj o anli se r esul t ar em um val or verdadei ro.






- 21 -

ADVPL Compl et o



DO CASE...CASE

A est rut ura DO CASE... ENDCASE ( Caso) permi t e a anli se de di versas condi es consecut i vas,
para as quai s soment e a condi o a pri mei ra condi o verdadei ra ser sua ao vi ncul ada
execut ada.

O r ecurso de anl i se de ml t i pl as condi es necessri o para sol uo de probl emas mai s
compl exos, nos quai s as possi bili dades de sol uo superam a mer a anli se de um ni co
resul t ado verdadei ro ou fal 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



Apesar das li nguagens de programao possurem vari aes para a est rut ura
DO CASE.. . CASE, concei t ual ment e t odas as repr esent aes podem ser
descri t as com base no model o apresent ado.

- 22 -

ADVPL Compl et o



2.2.2. Est r ut ur as de r epet i o

Os comandos de r epet io so ut i lizados em al gori t mos nas si t uaes em que necessri o
real i zar uma det ermi nada ao ou um conj unt o de aes para um nmero defi ni do ou
i ndefi ni do de vezes, ou ai nda enquant o uma det ermi nada condi o for verdadei ra.

As est rut uras de deci so que sero anal i sadas so:

E WHI LE...END
E FOR...TO...NEXT

WHI LE...END

Nest a est rut ura, o conj unt o de aes ser execut ado enquant o a anli se de uma condi o de
refernci a resul t ar em um val or verdadei ro. i mport ant e veri fi car que o bl oco soment e ser
execut ado, i nclusi ve se na pri mei ra anli se a condi o resul t ar em um val or verdadei ro.

Repr esent ao: WHI LE...END

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






Exi st em di ver sas vari aes para a est rut ura WHI LE... END, na qual h a
possi bili dade da pri mei ra execuo ser r eal i zada sem a anli se da condi o, a
qual val er apenas a part i r da segunda execuo.

A li nguagem ADVPL acei t a a si nt axe DO WHI LE.. .ENDDO, que em out ras
linguagens represent a a si t uao descri t a ant eri orment e ( anli se da condi o
soment e a part i r da segunda execuo) , mas em ADVPL est a si nt axe t em o
mesmo efei t o do WHI LE... END.


- 23 -

ADVPL Compl et o


FOR...TO...NEXT

Nest a est rut ura, o conj unt o de aes ser execut ado uma quant i dade de vezes defi ni da,
normal ment e referenci ada como passo .

Para cada passo real izado pel a est rut ura FOR...TO.. .NEXT, ser avali ada uma condi o que
veri fi car se foi at i ngido o nmero de execues previ ament e defi ni do. Dest a forma a
est rut ura compreende um cont rol e de nmero de passos execut ados, o qual increment ado
na anli se da expresso NEXT.

Semel hant e a est rut ura WHI LE. .. END, a pri mei ra ao soment e ser real i zada medi ant e um
resul t ado verdadei ro na anli se da condi o.

Repr esent ao: 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 rut ura FOR... TO. . .NEXT, dependendo da linguagem de programao,
permi t e a r eali zao de um i ncrement o si mpl es a cada execuo da i nst ruo
NEXT, ou a adi o de out ro val or ao cont ador, o qual dever especi fi cado de
acordo com a si nt axe da li nguagem.

Em ADVPL pode ser ut ili zada a i nst ruo STEPS para al t erar o val or a ser
adi ci onado no cont ador de passos a cada execuo da i nst ruo NEXT, sendo
que est e val or poder ser at negat i vo, vi abili zando uma cont agem
decrescent e.


- 24 -

ADVPL Compl et o



MDULO 02: A l i nguagem ADVPL

A Li nguagem ADVPL t eve seu i nci o em 1994, sendo na verdade uma evol uo na ut i lizao de
linguagens no padro xBase pel a Mi crosi ga Soft ware S.A. ( Cl i pper, Vi sual Obj ect s e depoi s
Fi veWi n) . Com a cri ao da t ecnol ogi a Prot heus, era necessri o criar uma linguagem que
suport asse o padro xBase para a manut eno de t odo o cdi go exi st ent e do si st ema de ERP
Si ga Advanced. Foi ent o cri ada a li nguagem chamada Advanced Pr ot heus Language.

O ADVPL uma ext enso do padro xBase de comandos e funes, operador es, est rut uras de
cont r ol e de fl uxo e pal avras reservadas, cont ando t ambm com funes e comandos
di sponi bili zados pel a Mi crosi ga que a t orna uma linguagem complet a para a cri ao de
apli caes ERP pront as para a I nt ernet . Tambm uma l i nguagem ori ent ada a obj et os e
event os, permi t indo ao programador desenvol ver apli caes vi suais e cri ar suas prpri as
cl asses de obj et os.

Quando compi l ados, t odos os arqui vos de cdi go t ornam- se uni dades de i nt eli gnci a bsi cas,
chamados APO s ( de Advanced Prot heus Obj ect s) . Tai s APO s so mant i dos em um
reposi t ri o e car regados di nami cament e pel o PROTHEUS Ser ver para a execuo. Como no
exi st e a li nkedi o, ou uni o fsi ca do cdigo compi l ado a um det ermi nado mdul o ou
apli cao, funes cri adas em ADVPL podem ser execut adas em qual quer pont o do ambi ent e
Advanced Pr ot heus.

O compil ador e o i nt erpret ador da li nguagem ADVPL o prpr i o ser vi dor PROTHEUS
( PROTHEUS Ser ver) , e exi st e um ambi ent e vi sual para desenvol vi ment o i nt egrado
( PROTHEUSI DE) onde o cdi go pode ser cri ado, compi l ado e depurado.

Os programas em ADVPL podem cont er comandos ou funes de i nt er face com o usuri o. De
acordo com t al caract erst i ca, t ai s programas so subdi vi di dos nas seguint es cat egori as:

Pr ogr amao Com I n t er f ace Pr pr i a com o Usu r i o

Nest a cat egori a ent ram os pr ogramas desenvol vi dos para serem execut ados at ravs do
t ermi nal remot o do Prot heus, o Pr ot heus Remot e. O Pr ot heus Remot e a apli cao
encar r egada da i nt erface e da i nt erao com o usuri o, sendo que t odo o pr ocessament o do
cdi go em ADVPL, o acesso ao banco de dados e o gerenci ament o de conexes efet uado no
Prot heus Ser ver. O Pr ot heus Remot e o pri nci pal mei o de acesso a execuo de r ot i nas
escri t as em ADVPL no Prot heus Server, e por i sso permi t e execut ar qual quer t i po de cdi go,
t enha el e i nt erface com o usuri o ou no. Por m nest a cat egori a so consi derados apenas os
programas que real i zem al gum t i po de i nt erface r emot a ut i lizando o prot ocol o de comuni cao
do Prot heus.

Podem- se cri ar r ot i nas para a cust omi zao do si st ema ERP Mi cr osi ga Prot heus, desde
processos adi ci onai s at mesmo rel at ri os. A grande vant agem apr ovei t ar t odo o ambi ent e
mont ado pel os mdul os do ERP Mi crosi ga Prot heus. Por m, com o ADVPL possvel at
mesmo cri ar t oda uma apli cao, ou mdul o, do comeo.

Todo o cdi go do si st ema ERP Mi crosi ga Prot heus escri t o em ADVPL.


Pr ogr amao Sem I nt er f ace Pr pr i a com o Usu r i o

As rot i nas cri adas sem i nt erface so consi deradas nest a cat egori a porque geral ment e t m uma
ut ili zao mai s especfi ca do que um processo adi ci onal ou um rel at ri o novo. Tai s rot i nas no
t m i nt erface com o usuri o at ravs do Pr ot heus Remot e, e qual quer t ent at i va nesse sent i do

- 25 -

ADVPL Compl et o


( como a cri ao de uma j anel a padro) ocasi onar uma exceo em t empo de execuo. Est as
rot i nas so apenas processos, ou Jobs, execut ados no Pr ot heus Ser ver. Al gumas vezes, a
i nt erface dest as rot i nas fi ca a cargo de apli caes ext ernas, desenvol vi das em out ras
linguagens, que so responsvei s por i ni ci ar os pr ocessos no ser vi dor Pr ot heus at ravs dos
mei os di sponvei s de i nt egrao e conect i vi dade no Prot heus.

De acordo com a ut ilizao e com o mei o de conect i vi dade ut ili zado, est as rot i nas so
subcat egori zadas assi m:

E Pr ogr amao por Pr ocessos

Rot i nas escri t as em ADVPL podem ser i ni ci adas como pr ocessos i ndi viduai s ( sem i nt erface) no
Prot heus Server at ravs de duas manei ras: I ni ci adas por out ra r ot i na ADVPL at ravs da
chamada de funes como St art Job( ) ou Call Proc( ) ou i ni ci adas aut omat i cament e na
i ni ci alizao do Pr ot heus Server ( quando pr opri ament e confi gurado) .

E Pr ogr amao de RPC

At ravs de uma bi bli ot eca de funes di sponvel no Prot heus ( uma API de comuni cao) ,
podem- se execut ar r ot inas escri t as em ADVPL di ret ament e no Prot heus Server, at r avs de
apli caes ext ernas escri t as em out ras l inguagens. I st o o que se chama de RPC ( de Remot e
Procedure Call, ou Chamada de Pr ocediment os Remot a) .

O servi dor Prot heus t ambm pode execut ar r ot i nas em ADVPL em out ros servi dores Pr ot heus
at ravs de conexo TCP/ I P di r et a ut ilizando o concei t o de RPC. Do mesmo modo, apl i caes
ext ernas podem r equi si t ar a execuo de r ot i nas escri t as em ADVPL at ravs de conexo
TCP/ I P di ret a.
Programao Web

O Pr ot heus Ser ver pode t ambm ser execut ado como um servi dor Web, r espondendo a
requi si es HTTP. No moment o dest as r equi si es, pode execut ar r ot inas escri t as em ADVPL
como pr ocessos i ndi vi duai s, envi ando o resul t ado das funes como ret orno das requi si es
para o cli ent e HTTP ( como por exempl o, um Br owser de I nt ernet ) . Qual quer rot i na escri t a em
ADVPL que no cont enha comandos de i nt erface pode ser execut ada at ravs de r equi si es
HTTP. O Pr ot heus permi t e a compil ao de arqui vos HTML cont endo cdi go ADVPL embut i do.
So os chamados arqui vos ADVPL ASP, para a cri ao de pgi nas di nmi cas.

E Pr ogr amao Tel Net

Tel Net part e da gama de pr ot ocol os TCP/ I P que permi t e a conexo a um comput ador remot o
at ravs de uma apl i cao cl i ent e dest e pr ot ocol o. O PROTHEUS Ser ver pode emul ar um
t ermi nal Tel Net , at ravs da execuo de r ot i nas escri t as em ADVPL. Ou sej a, pode- se escrever
rot i nas ADVPL cuj a i nt erface fi nal ser um t ermi nal Tel Net ou um col et or de dados mvel .





- 26 -

ADVPL Compl et o



3. Est r ut ur a de um Pr ogr ama ADVPL

Um programa de comput ador nada mai s do que um grupo de comandos l ogi cament e
di spost os com o obj et i vo de execut ar det ermi nada t arefa. Esses comandos so gravados em
um arqui vo t ext o que t ransformado em uma li nguagem execut vel por um comput ador
at ravs de um pr ocesso chamado compilao. A compi l ao subst i t ui os comandos de al t o
nvel ( que os humanos compr eendem) por inst rues de bai xo nvel ( compreendi da pelo
si st ema operaci onal em execuo no comput ador) . No caso do ADVPL, no o si st ema
operaci onal de um comput ador que i r execut ar o cdi go compil ado, mas si m o Prot heus
Ser ver.

Dent r o de um programa, os comandos e funes ut i lizados devem segui r regras de si nt axe da
linguagem ut ili zada, poi s caso cont rri o o pr ograma ser i nt errompi do por er ros. Os er ros
podem ser de compi l ao ou de execuo.

Er ros de compi l ao so aquel es encont rados na si nt axe que no per mi t em que o arqui vo de
cdi go do programa sej a compi l ado. Podem ser comandos especi fi cados de forma err nea,
ut ili zao i nvli da de operador es, et c.

Er ros de execuo so aquel es que acont ecem depoi s da compil ao, quando o programa est
sendo execut ado. Podem ocor rer por i nmeras razes, mas geral ment e se refer em as funes
no exi st ent es, ou vari vei s no cri adas ou i ni ciali zadas, et c.


Li nh as de Pr ogr ama

As li nhas exi st ent es dent ro de um arqui vo t ext o de cdi go de programa podem ser li nhas de
comando, l inhas de coment ri o ou l i nhas mi st as.

E Li nh as de Comando

Li nhas de comando possuem os comandos ou i nst rues que sero execut adas. Por exempl o:

Local nCnt
Local nSoma : = 0
For nCnt : = 1 To 10
nSoma + = nCnt
Next nCnt

E Li nh as de Coment r i o

Li nhas de coment ri o possuem um t ext o qual quer, mas no so execut adas. Servem apenas
para document ao e para t ornar mai s fci l o ent endi ment o do pr ograma. Exi st em t r s formas
de se coment ar l i nhas de t ext o. A pri mei ra del as ut ili zar o si nal de * ( ast eri sco) no comeo
da li nha:

* Pr ograma para cl cul o do t ot al
* Aut or: Mi cr osi ga Soft ware S.A.
* Dat a: 2 de out ubr o de 2001

- 27 -

ADVPL Compl et o



Todas as l inhas i ni ci adas com um si nal de ast eri sco so consi deradas como coment ri o. Pode-
se ut ilizar a pal avra NOTE ou doi s smbol os da l et ra "e" comer ci al ( &&) para r eal izar a funo
do si nal de ast eri sco. Por m t odas est as for mas de coment ri o de li nhas so obsol et as e
exi st em apenas para compat i bili zao com o padro xBase. A mel hor manei ra de coment ar
linhas em ADVPL ut ili zar duas barr as t ransver sai s:

/ / Programa para cl culo do t ot al
/ / Aut or: Mi cr osi ga Soft ware S.A.
/ / Dat a: 2 de out ubro de 2001

Out ra forma de document ar t ext os ut i lizar as barras t ransversai s j unt ament e com o
ast eri sco, podendo- se coment ar t odo um bl oco de t ext o sem pr eci sar coment ar l inha a linha:

/ *
Programa para cl cul o do t ot al
Aut or: Mi cr osi ga Soft ware S.A.
Dat a: 2 de out ubro de 2001
* /

Todo o t ext o encont rado ent r e a abert ura ( i ndi cada pel os caract er es / * ) e o fechament o
( indi cada pel os caract er es * / ) consi derado como coment ri o.

E Li nh as Mi st as

O ADVPL t ambm per mi t e que exi st am l inhas de comando com coment ri o. I st o possvel
adi ci onando- se as duas barras t ransver sai s ( / / ) ao fi nal da linha de comando e adi ci onando- se
o t ext o do coment ri o:

Local nCnt
Local nSoma : = 0 / / I ni ci ali za a vari vel com zer o para a soma
For nCnt : = 1 To 10
nSoma + = nCnt
Next nCnt

E Tamanho da Li n ha

Assi m como a li nha fsica, del i mit ada pel a quant i dade de caract er es que pode ser di gi t ado no
edi t or de t ext os ut ili zado, exi st e uma l inha consi derada li nha l gi ca. A li nha l gi ca, aquel a
consi derada para a compil ao como uma ni ca li nha de comando.

A pri ncpi o, cada li nha di gi t ada no arqui vo t ext o di ferenci ada aps o pressi onament o da t ecl a
< Ent er> . Ou sej a, a l inha l gi ca, a li nha fsi ca no arqui vo. Por m al gumas vezes, por
li mi t ao fsi ca do edi t or de t ext o ou por est t i ca, pode- se "quebrar" a linha l gi ca em mai s de
uma li nha fsi ca no arqui vo t ext o. I st o efet uado ut ili zando- se o si nal de pont o- e- vrgul a ( ; ) .

I f ! Empt y( cNome) .And. ! Empt y( cEnd) .And. ; < ent er >
! Empt y( cTel ) .And. ! Empt y( cFax) .And. ; < ent er>
! Empt y( cEmail )

GravaDados( cNome,cEnd,cTel ,cFax,cEmai l )

Endi f


- 28 -

ADVPL Compl et o


Nest e exempl o exi st e uma linha de comando para a checagem das var i vei s ut ilizadas. Como a
linha t orna- se mui t o grande, pode- se di vi di- l a em mai s de uma li nha fsi ca ut ilizando o si nal de
pont o- e- vrgul a. Se um si nal de pont o- e- vr gul a for esqueci do nas duas pri mei ras li nhas,
durant e a execuo do programa ocor rer um err o, poi s a segunda li nha fsi ca ser
consi derada como uma segunda li nha de comando na compil ao. E durant e a execuo est a
linha no t er sent i do.

3.1. r eas de um Pr ogr ama ADVPL

Apesar de no ser uma li nguagem de padr es rgi dos com rel ao est rut ura do programa,
i mport ant e i dent i fi car al gumas de suas part es. Consi der e o pr ograma de exempl o abai xo:

# i ncl ude prot heus. ch

/ *
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
| Pr ograma: Cl cul o do Fat ori al |
| Aut or : Mi cr osi ga Soft ware S.A. |
| Dat a : 02 de out ubr o de 2001 |
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
* /

User Funct i on Cal cFat or ( )

Local nCnt
Local nResul t ado : = 1 / / Resul t ado do fat ori al
Local nFat or : = 5 / / Nmer o para o cl cul o

/ / Cl cul o do fat ori al
For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt

/ / Exi be o r esul t ado na t el a, at ravs da funo al ert
Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ;
" " + cVal ToChar( nResul t ado) )

/ / Termi na o pr ograma
Ret urn

A est rut ura de um pr ogr ama ADVPL compost a pel as segui nt es reas:

E rea de I dent i fi cao
- Decl arao dos i ncl udes
- Decl arao da funo
- I dent i fi cao do pr ogr ama

E rea de Aj ust es I ni ci ai s
- Decl arao das vari vei s

E Corpo do Programa
- Preparao para o processament o
- Processament o

E rea de Encer rament o

- 29 -

ADVPL Compl et o



r ea de I dent i f i cao

Est a uma rea que no obri gat ri a e dedi cada a document ao do programa. Quando
exi st ent e, cont m apenas coment ri os expl i cando a sua finali dade, dat a de cri ao, aut or , et c. ,
e aparece no comeo do programa, ant es de qual quer li nha de comando.

O format o para est a rea no defi ni do. Pode- se col ocar qual quer t i po de i nformao
desej ada e escol her a format ao apr opri ada.

# i ncl ude prot heus.ch

/ *
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
| Pr ograma: Cl cul o do Fat ori al |
| Aut or : Mi cr osi ga Soft ware S.A. |
| Dat a : 02 de out ubr o de 2001 |
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
* /

User Funct i on Cal cFat or ( )


Opci onal ment e podem- se i nclui r defi ni es de const ant es ut ili zadas no programa ou i ncluso
de arqui vos de cabeal ho nest a r ea.

r ea de Aj u st es I ni ci ai s

Nest a rea geral ment e se fazem os aj ust es i ni ci ai s, i mport ant es para o cor ret o funci onament o
do programa. Ent re os aj ust es se encont ram decl araes de vari vei s, i ni ci ali zaes, abert ura
de arqui vos, et c. Apesar do ADVPL no ser uma li nguagem rgi da e as vari vei s poderem ser
decl aradas em qual quer l ugar do programa, aconsel hvel faz- l o nest a rea vi sando t ornar o
cdi go mai s l egvel e facili t ar a i dent i fi cao de vari vei s no ut ili zadas.

Local nCnt
Local nResul t ado : = 0 / / Resul t ado do fat ori al
Local nFat or : = 10 / / Nmero para o cl cul o

Cor po do Pr ogr ama

nest a r ea que se encont ram as l inhas de cdi go do pr ograma. onde se real i za a t arefa
necessri a at ravs da organi zao l gi ca dest as li nhas de comando. Espera- se que as l i nhas de
comando est ej am organizadas de t al modo que no fi nal dest a rea o resul t ado esperado sej a
obt i do, sej a el e armazenado em um arqui vo ou em vari vei s de memri a, pront o par a ser
exi bi do ao usuri o at ravs de um r el at ri o ou na t el a.

/ / Cl cul o do fat ori al
For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt

- 30 -

ADVPL Compl et o



A preparao para o pr ocessament o formada pel o conj unt o de vali daes e processament os
necessri os ant es da r eali zao do pr ocessament o em si .

Avali ando o processament o do cl cul o do fat orial descri t o ant eri orment e, pode- se defi ni r que a
vali dao i ni ci al a ser r eali zada o cont edo da vari vel nFat or, poi s a mesma det ermi nar a
corr et a execuo do cdi go.


/ / Cl cul o do fat ori al
nFat or : = Get Fat or( )
/ / Get Fat or funo il ust rat i va na qual a vari vel recebe a i nformao do usuri o.

I f nFat or < = 0
Al ert ( I nformao i nvlida )
Ret urn
Endi f

For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt


r ea de Encer r ament o

nest a rea onde as fi nalizaes so efet uadas. onde os arqui vos abert os so fechados, e o
resul t ado da execuo do pr ogr ama ut ili zado. Pode- se exi bi r o r esult ado armazenado em
uma vari vel ou em um arqui vo ou si mpl esment e fi nali zar, caso a t arefa j t enha si do t oda
compl et ada no corpo do programa. nest a rea que se encont r a o encerrament o do
programa. Todo programa em ADVPL deve sempre t ermi nar com a pal avra chave r et urn.

/ / Exi be o r esul t ado na t el a, at ravs da funo al ert
Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ;
" " + cVal ToChar( nResul t ado) )

/ / Termi na o pr ograma
Ret urn










- 31 -

ADVPL Compl et o



4. Decl ar ao e At r i bui o de Var i v ei s

4.1. Ti po de Dados

O ADVPL no uma li nguagem de t i pos rgidos ( st rongl y t yped) , o que si gni fi ca que vari vei s
de memri a podem r eceber di fer ent es t i pos de dados durant e a execuo do programa.

As vari vei s podem t ambm cont er obj et os, mas os t i pos pri mri os da l i nguagem so:

Numr i co

O ADVPL no di fer enci a val ores i nt ei ros de val ores com pont o fl ut uant e, port ant o podem- se
cri ar vari vei s numri cas com qual quer val or dent ro do i nt erval o permi t i do. Os segui nt es
el ement os so do t i po de dado numri co:

2
43.53
0.5
0.00001
1000000

Uma vari vel do t i po de dado numri co pode cont er um nmer o de dezoi t o dgi t os i ncl uindo o
pont o fl ut uant e, no i nt erval o de 2.2250738585072014 E308 at 1.7976931348623158
E+ 308.

Lgi co

Val ores l gi cos em ADVPL so i dent i fi cados at r avs de .T. ou .Y. para verdadei ro e .F. ou .N.
para fal so ( i ndependent ement e se os caract er es est i ver em em mai scul o ou mi nscul o) .

Car act er e

St ri ngs ou cadei as de caract er es so i dent i fi cadas em ADVPL por bl ocos de t ext o ent r e aspas
dupl as ( ") ou aspas si mpl es ( ' ) :

"Ol mundo! "
' Est a uma st ri ng'
"Est a ' out ra' st ri ng"

Uma vari vel do t i po caract er e pode cont er st ri ngs com no mxi mo 1 MB, ou sej a, 1048576
caract eres.

Dat a

O ADVPL t em um t i po de dados especfi co para dat as. I nt ernament e as vari vei s dest e t i po de
dado so armazenadas como um nmero cor respondent e a dat a Jul i ana.

Vari vei s do t i po de dados Dat a no podem ser decl aradas di ret ament e, e si m at ravs da
ut ili zao de funes especfi cas como por exempl o CTOD( ) que convert e uma st ri ng para
dat a.

- 32 -

ADVPL Compl et o



Ar r ay

O Ar ray um t i po de dado especi al . a di sposi o de out r os el ement os em col unas e li nhas. O
ADVPL suport a ar rays uni di mensi onai s ( vet or es) ou mul t i di mensi onai s ( mat ri zes) . Os
el ement os de um arr ay so acessados at r avs de ndi ces numri cos i ni ci ados em 1,
i dent i fi cando a li nha e col una para quant as di menses exi st i rem.

Arrays devem ser ut ilizadas com caut el a, poi s se forem mui t o grandes podem exauri r a
memri a do servi dor.

Bl oco de Cdi go

O bl oco de cdi go um t i po de dado especi al . ut ilizado para armazenar i nst rues escri t as
em ADVPL que podero ser execut adas post eri orment e.


4.2. Decl ar ao de v ar i vei s

Vari vei s de memri a so um dos r ecursos mai s i mport ant es de uma linguagem. So r eas de
memri a cri adas para armazenar i nformaes ut ili zadas por um progr ama para a execuo de
t arefas. Por exempl o, quando o usuri o di gi t a uma i nformao qual quer , como o nome de um
produt o, em uma t el a de um programa est a informao armazenada em uma vari vel de
memri a para post eri or ment e ser gravada ou i mpressa.

A part i r do moment o que uma vari vel cri ada, no necessri o mai s se r efer enci ar ao seu
cont edo, e si m ao seu nome.

O nome de uma vari vel um i dent i fi cador ni co o qual deve r espei t ar um mx i mo de 1 0
car act er es. O ADVPL no i mpede a cri ao de uma vari vel de memr i a cuj o nome cont enha
mai s de 10 caract er es, por m apen as os 10 pr i mei r os ser o consi der ados para a
l ocalizao do cont edo armazenado.

Port ant o se forem cri adas duas vari vei s cuj os 10 pri mei ros car act er es for em i guai s, como
nTot al Geral Anual e nTot al Geral Mensal , as refer nci as a qual quer uma del as no pr ograma
resul t aro o mesmo, ou sej a, sero a mesma vari vel :

nTot al Geral Mensal : = 100
nTot al Geral Anual : = 300
Al ert ( "Val or mensal : " + cVal ToChar( nTot al Geral Mensal ) )

Quando o cont edo da vari vel nTot al Geral Mensal exi bi do, o seu val or ser de 300. I sso
acont ece porque no moment o que esse val or foi at ri budo vari vel nTot al Geral Anual , o
ADVPL consi der ou apenas os 10 pri mei ros caract er es ( assi m como o faz quando deve exi bi r o
val or da vari vel nTot alGeral Mensal ) , ou sej a, consi der ou- as como a mesma vari vel . Assi m o
val or ori ginal de 100 foi subst i t udo pel o de 300.


- 33 -

ADVPL Compl et o



4.3. Escopo de var i v ei s

O ADVPL no uma linguagem de t i pos rgidos para vari vei s, ou sej a, no necessri o
i nformar o t i po de dados que det ermi nada varivel i r cont er no moment o de sua decl arao,
e o seu val or pode mudar durant e a execuo do pr ograma.

Tambm no h necessi dade de decl arar vari vei s em uma seo especfi ca do seu cdi go
font e, embora sej a aconsel hvel decl arar t odas as vari vei s necessri as no comeo, t ornando
a manut eno mai s fci l e evi t ando a decl arao de vari vei s desnecessri as.

Para decl arar uma vari vel deve- se ut ili zar um ident ificador de escopo. Um i dent i fi cador de
escopo uma pal avra chave que i ndi ca a que cont ext o do pr ograma a vari vel decl arada
pert ence. O cont ext o de vari vei s pode ser l ocal ( vi suali zadas apenas dent r o do pr ograma
at ual) , pblico ( vi sualizadas por qual quer out ro programa) , ent r e out r os.

O Cont ex t o de Var i v ei s dent r o de um Pr ogr ama

As vari vei s decl aradas em um programa ou funo, so vi svei s de acordo com o escopo onde
so defi nidas. Como t ambm do escopo depende o t empo de exi st nci a das vari vei s. A
defi ni o do escopo de uma vari vel efet uada no moment o de sua decl arao.

Local nNumero : = 10

Est a li nha de cdi go decl ara uma vari vel chamada nNumero i ndi cando que pert ence seu
escopo l ocal .

Os i dent i fi cador es de escopo so:

E Local
E St at i c
E Pri vat e
E Publi c

O ADVPL no rgi do em rel ao decl arao de vari vei s no comeo do programa. A i ncluso
de um i dent i fi cador de escopo no necessri o para a decl arao de uma vari vel , cont ant o
que um val or l he sej a at ri budo.

nNumer o2 : = 15

Quando um val or at r i budo uma vari vel em um programa ou funo, o ADVPL cri ar a
vari vel caso el a no t enha si do decl arada ant eri orment e. A vari vel ent o cri ada como se
t i vesse si do decl arada como Pri vat e.

Devi do a essa caract erst i ca, quando se pret ende fazer uma at ri bui o a uma vari vel
decl arada pr evi ament e mas escr eve- se o nome da vari vel de forma i ncorr et a, o ADVPL no
gerar nenhum err o de compil ao ou de execuo. Poi s compr eender o nome da vari vel
escri t o de forma i ncorr et a como se fosse a cri ao de uma nova vari vel . I st o al t erar a l gi ca
do pr ograma, e um er ro mui t as vezes di fcil de i dent i fi car.



- 34 -

ADVPL Compl et o



Var i v ei s de escopo l ocal

Vari vei s de escopo l ocal so pert encent es apenas ao escopo da funo onde foram decl aradas
e devem ser expli ci t ament e decl aradas com o i dent i fi cador LOCAL, como no exempl o:


Funct i on Pai ( )
Local nVar : = 10, aMat r i z : = { 0,1,2,3}
.
< comandos>
.
Filha( )
.
< mai s comandos>
.
Ret urn( .T.)


Nest e exempl o, a vari vel nVar foi decl arada como l ocal e at ri buda com o val or 10. Quando a
funo Fil ha execut ada, nVar ainda exi st e mas no pode ser acessada. Quando a execuo
da funo Pai t ermi nar, a vari vel nVar dest r uda. Qual quer vari vel com o mesmo nome no
programa que chamou a funo Pai no afet ada.

Vari vei s de escopo l ocal so cri adas aut omat i cament e cada vez que a funo onde for em
decl aradas for at i vada. El as cont i nuam a exi st i r e mant m seu val or at o fi m da at i vao da
funo ( ou sej a, at que a funo r et orne o cont rol e para o cdi go que a execut ou) . Se uma
funo chamada r ecursi vament e ( por exempl o, chama a si mesma) , cada chamada em
recurso cri a um novo conj unt o de vari vei s l ocai s.

A vi si bilidade de vari vei s de escopo l ocai s i dnt i ca ao escopo de sua decl arao, ou sej a, a
vari vel vi svel em qual quer l ugar do cdi go font e em que foi decl arada. Se uma funo
chamada r ecursi vament e, apenas as vari vei s de escopo l ocal cri adas na mai s r ecent e at i vao
so vi svei s.

Var i v ei s de escopo st at i c

Vari vei s de escopo st at i c funci onam basi cament e como as vari vei s de escopo l ocal , mas
mant m seu val or at ravs da execuo e devem ser decl aradas expl i ci t ament e no cdi go com
o i dent i fi cador STATI C.

O escopo das vari vei s st at i c depende de onde so decl aradas. Se for em decl aradas dent r o do
corpo de uma funo ou procedi ment o, seu escopo ser l i mit ado quel a rot i na. Se forem
decl aradas for a do corpo de qual quer rot i na, seu escopo afet a a t odas as funes decl aradas
no font e.

- 35 -

ADVPL Compl et o



Nest e exempl o, a vari vel nVar decl arada como st at i c e i ni ci ali zada com o val or 10:

Funct i on Pai ( )
St at i c nVar : = 10
.
< comandos>
.
Filha( )
.
< mai s comandos>
.
Ret ur n( .T.)

Quando a funo Fil ha execut ada, nVar ai nda exi st e mas no pode ser acessada. Di fer ent e
de vari vei s decl aradas como LOCAL ou PRI VATE, nVar cont i nua a exist i r e mant m seu val or
at ual quando a execuo da funo Pai t ermina. Ent ret ant o, soment e pode ser acessada por
execues subseqent es da funo Pai .

Var i v ei s de escopo pr i v at e

A decl arao opci onal para vari vei s pri vadas. Mas podem ser decl aradas expl i ci t ament e com
o i dent i fi cador PRI VATE.

Adi ci onal ment e, a at ri bui o de val or a uma vari vel no cri ada ant eri orment e
aut omat i cament e cri a a vari vel como pri vada. Uma vez cri ada, uma vari vel pri vada cont i nua
a exi st i r e mant m seu val or at que o programa ou funo onde foi cri ada t ermi ne ( ou sej a,
at que a funo onde foi cri ada ret orne para o cdi go que a execut ou) . Nest e moment o,
aut omat i cament e dest r uda.

possvel cri ar uma nova vari vel pri vada com o mesmo nome de uma vari vel j exi st ent e.
Ent ret ant o, a nova ( dupli cada) vari vel pode apenas ser cri ada em um nvel de at i vao
i nferi or ao nvel onde a vari vel foi decl arada pel a pri mei ra vez ( ou sej a, apenas em uma
funo chamada pel a funo onde a vari vel j havi a si do cri ada) . A nova vari vel pri vada i r
esconder qual quer out r a vari vel pri vada ou pbli ca ( vej a a document ao sobr e vari vei s
pbli cas) com o mesmo nome enquant o exi st i r.

Uma vez cri ada, uma vari vel pri vada visvel em t odo o pr ogr ama enquant o no for
dest ruda aut omat i cament e quando a rot i na que a cri ou t ermi nar ou uma out ra vari vel
pri vada com o mesmo nome for cri ada em uma subfuno chamada ( nest e caso, a vari vel
exi st ent e t orna- se i nacessvel at que a nova vari vel pri vada sej a dest r uda) .
Em t ermos mai s si mpl es, uma vari vel pri vada vi svel dent ro da funo de cri ao e t odas as
funes chamadas por est a, a menos que uma funo chamada cri e sua pr pri a vari vel
pri vada com o mesmo nome.


- 36 -

ADVPL Compl et o



Por ex empl o:


Funct i on Pai ( )
Pri vat e nVar : = 10
< comandos>
.
Filha( )
< mai s comandos>
.
Ret ur n( .T.)


Nest e exempl o, a vari vel nVar cri ada com escopo pri vat e e i ni ci ali zada com o val or 10.
Quando a funo Fi lha execut ada, nVar ai nda exi st e e, di ferent e de uma vari vel de escopo
l ocal , pode ser acessada pel a funo Fil ha. Quando a funo Pai t erminar, nVar ser dest ruda
e qual quer decl arao de nVar ant eri or se t ornar acessvel novament e.


No ambi ent e ERP Pr ot heus, exi st e uma conveno adi ci onal a qual deve ser
respei t ada que vari vei s em uso pel a apli cao no sej am i ncorr et ament e
mani pul adas. Por est a conveno deve ser adi ci onado o caract er _ ant es
do nome de vari vei s PRI VATE e PUBLI C. Mai ores i nformaes avali ar o
t pi co: Boas Prt i cas de Pr ogramao.

Ex empl o: Pri vat e _dDat a


Var i v ei s de escopo publ i c

Podem- se cri ar vari vei s de escopo publi c di nami cament e no cdi go com o i dent i fi cador
PUBLI C. As vari vei s dest e escopo cont i nuam a exi st i r e mant m seu val or at o fi m da
execuo da t hread ( conexo) .

possvel cri ar uma vari vel de escopo pri vat e com o mesmo nome de uma vari vel de escopo
publi c exi st ent e, ent r et ant o, no permi t ido cri ar uma vari vel de escopo publi c com o mesmo
nome de uma vari vel de escopo pri vat e exi st ent e.

Uma vez cri ada, uma vari vel de escopo publi c vi svel em t odo o programa onde foi
decl arada at que sej a escondida por uma vari vel de escopo pri vat e cri ada com o mesmo
nome. A nova vari vel de escopo pri vat e cri ada esconde a vari vel de escopo publi c exi st ent e,
e est a se t ornar i nacessvel at que a nova var i vel pri vat e sej a dest ruda. Por exempl o:


Funct i on Pai ( )
Publi c nVar : = 10
< comandos>
.
Filha( )
< mai s comandos>
.
Ret ur n( .T.)



- 37 -

ADVPL Compl et o


Nest e exempl o, nVar cri ada como publi c e i nici ali zada com o val or 10. Quando a funo Fi l ha
execut ada, nVar ai nda exi st e e pode ser acessada. Di fer ent e de vari vei s l ocai s ou pri vat es,
nVar ai nda exi st e aps o t rmi no da a execuo da funo Pai .

Di ferent ement e dos out ros i dent i fi cadores de escopo, quando uma var i vel decl arada como
pbli ca sem ser i ni ci ali zada, o val or assumi do fal so ( .F.) e no nul o ( nil) .


No ambi ent e ERP Pr ot heus, exi st e uma conveno adi ci onal a qual deve ser
respei t ada que vari vei s em uso pel a apli cao no sej am i ncorr et ament e
mani pul adas. Por est a conveno deve ser adi ci onado o caract er _ ant es
do nome de vari vei s PRI VATE e PUBLI C. Mai ores i nformaes avali ar o
t pi co: Boas Prt i cas de Pr ogramao.

Ex empl o: Publ i c _cRot ina


4.4. Ent endendo a i nf l unci a do escopo das var i v ei s

Consi der e as li nhas de cdi go de exempl o:


nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )


Se est a l inha for execut ada em um programa ADVPL, ocorr er um err o de execuo com a
mensagem "vari abl e does not exi st : nPercent ual ", poi s est a vari vel est sendo ut ili zada em
uma expr esso de cl cul o sem t er si do decl arada. Para sol uci onar est e er ro, deve- se decl arar a
vari vel previ ament e:


Local nPercent ual , nResult ado
nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )


Nest e exempl o, as vari vei s so decl aradas pr evi ament e ut ilizando o i dent i fi cador de escopo
local. Quando a li nha de cl cul o for execut ada, o er ro de vari vel no exi st ent e, no mai s
ocor rer. Por m vari vei s no i ni ci alizadas t m sempr e o val or default nul o ( Nil ) e est e val or
no pode ser ut ili zado em um cl cul o poi s t ambm gerar err os de execuo ( nul o no pode
ser di vi dido por 100) . A resol uo dest e pr obl ema efet uada i nici ali zando- se a vari vel
at ravs de uma das for mas:


Local nPercent ual , nResult ado
nPer cent ual : = 10
nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )

ou

Local nPercent ual : = 10, nResul t ado
nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )

A di ferena ent re o l t i mo exempl o e os doi s ant eri or es que a vari vel i ni ci ali zada no
moment o da decl arao. Em ambos os exempl os, a vari vel pri mei ro decl arada e ent o
i ni ci alizada em uma out ra l inha de cdi go.


- 38 -

ADVPL Compl et o


aconsel hvel opt ar pel o operador de at ri bui o compost o de doi s pont os e si nal de i gual , poi s
o operador de at ri bui o ut ilizando soment e o si nal de igual pode ser faci l ment e confundi do
com o operador r el aci onal ( para comparao) durant e a cri ao do programa.

4.5. Oper aes com Var i vei s


4.5.1. At r i bui o de var i vei s

Uma vez que um val or l he sej a at ri budo, o t ipo de dado de uma vari vel i gual ao t i po de
dado do val or at ri budo. Ou sej a, uma vari vel passa a ser numri ca se um nmer o l he
at ri budo, passa a ser caract ere se uma st ri ng de t ext o l he for at ri buda, et c. Por m mesmo
que uma vari vel sej a de det ermi nado t i po de dado, pode- se mudar o t i po da vari vel
at ri bui ndo out ro t i po a el a:

01 Local xVari avel / / Decl ara a vari vel i ni ci al ment e com val or nul o
02
03 xVari avel : = "Agora a vari vel caract er e.. . "
04 Al ert ( "Val or do Text o: " + xVari avel )
05
06 xVari avel : = 22 / / Agora a vari vel numr i ca
07 Al ert ( cVal ToChar( xVari avel ) )
08
09 xVari avel : = .T. / / Agora a vari vel l gi ca
10 I f xVari avel
11 Al ert ( "A vari vel t em val or verdadei ro.. .")
12 El se
13 Al ert ( "A vari vel t em val or fal so. ..")
14 Endi f
15
16 xVari avel : = Dat e( ) / / Agora a vari vel dat a
17 Al ert ( "Hoj e : " + Dt oC( xVari avel ) )
18
19 xVari avel : = nil / / Nul o novament e
20 Al ert ( "Val or nul o: " + xVari avel )
21
22 Ret urn

No programa de exempl o ant eri or, a vari vel xVari avel ut i lizada para armazenar di ver sos
t i pos de dados. A l et ra "x" em mi nscul o no comeo do nome ut ili zada para indi car uma
vari vel que pode cont er di versos t i pos de dados, segundo a Not ao Hngara ( consul t e
document ao especfi ca para det al hes) . Est e programa t r oca os val ores da vari vel e exi be
seu cont edo para o usuri o at ravs da funo ALERT( ) . Essa funo r ecebe um parmet r o
que deve ser do t i po st ri ng de caract ere, por i sso dependendo do t i po de dado da vari vel
xVari avel necessri o fazer uma converso ant es.

Apesar dessa fl exi bili dade de ut i lizao de vari vei s, devem- se t omar cui dados na passagem
de parmet r os para funes ou comandos, e na concat enao ( ou soma) de val or es. Not e a
linha 20 do programa de exempl o. Quando est a li nha execut ada, a vari vel xVari avel cont m
o val or nul o. A t ent at i va de soma de t i pos de dados di fer ent es ger a er r o de execuo do
programa. Nest a l inha do exempl o, ocorr er um err o com a mensagem "t ype mi smat ch on + " .

Excet uando- se o caso do val or nul o, para os demai s devem ser ut i lizadas funes de
conver so quando necessri o concat enar t i pos de dados di fer ent es ( por exempl o, nas li nhas
07 e 17.

- 39 -

ADVPL Compl et o



Not e t ambm que quando uma vari vel do t i po de dado l gi co, el a pode ser ut ilizada
di ret ament e para checagem ( l inha 10) :

I f xVari avel
o mesmo que
I f xVari avel = .T.


4.5.2. Oper ador es da l i nguagem ADVPL

Oper ador es comuns

Na document ao sobr e vari vei s h uma breve demonst rao de como at ri bui r val ores a uma
vari vel da forma mai s si mpl es. O ADVPL ampli a si gni fi cat i vament e a ut ili zao de vari vei s
at ravs do uso de expr esses e funes.

Uma expresso um conj unt o de operadores e oper andos cuj o r esul t ado pode ser at ri budo a
uma vari vel ou ent o anali sado para a t omada de deci ses. Por exempl o:

Local nSal ari o : = 1000, nDescont o : = 0.10
Local nAument o, nSal Liquido
nAument o : = nSal ari o * 1.20
nSal Li quido : = nAument o * ( 1- nDescont o)


Nest e exempl o so ut ili zadas al gumas expr esses para cal cul ar o sal ri o lquido aps um
aument o. Os operandos de uma expr esso podem ser uma vari vel , uma const ant e, um
campo de arqui vo ou uma funo.


Oper ador es Mat emt i cos

Os operador es ut ilizados em ADVPL para cl culos mat emt i cos so:

+ Adi o
- Subt rao
* Mul t ipli cao
/ Di vi so
* * ou ^ Exponenci ao
% Mdul o ( Rest o da Di vi so)


Oper ador es de St r i n g

Os operador es ut ilizados em ADVPL para t rat ament o de caract eres so:

+ Concat enao de st ri ngs ( uni o)
- Concat enao de st ri ngs com el i minao dos brancos fi nai s das st ri ngs
i nt ermedi ri as
$ Comparao de Subst ri ngs ( cont i do em)


- 40 -

ADVPL Compl et o



Oper ador es Rel aci on ai s

Os operador es ut ilizados em ADVPL para operaes e avali aes r el acionai s so:

< Comparao Menor
> Comparao Mai or
= Comparao I gual
= = Comparao Exat ament e I gual ( para caract er es)
< = Comparao Menor ou I gual
> = Comparao Mai or ou I gual
< > ou #
ou ! =
Comparao Di fer ent e


Oper ador es Lgi cos

Os operador es ut ilizados em ADVPL para operaes e avali aes l gi cas so:

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


Oper ador es de At r i bu i o

Os operador es ut ilizados em ADVPL para at ri buio de val ores a vari vei s de memri a so:

: = At ri bui o Si mpl es
+ = Adi o e At ri bui o em Li nha
- = Subt rao e At ri bui o em Li nha
* = Mul t ipli cao e At ri bui o em Li nha
/ = Di vi so e At ri bui o em Li nha
* * = ou
^ =
Exponenci ao e At ri buio em Li nha
% = Mdul o ( rest o da di vi so) e At ri bui o em Li nha


E At r i bu i o Si mpl es

O si nal de i gualdade ut ilizado para at ri bui r valor a uma vari vel de memri a.
nVari avel : = 10


E At r i bu i o em Li nh a

O operador de at ri bui o em li nha caract eri zado por doi s pont os e o si nal de i gual dade. Tem
a mesma funo do si nal de i gualdade sozi nho, por m apl i ca a at ri bui o s vari vei s. Com el e
pode- se at ri bui r mai s de uma vari vel ao mesmo t empo.

nVar1 : = nVar2 : = nVar 3 : = 0


- 41 -

ADVPL Compl et o


Quando di versas vari vei s so i ni ci ali zadas em uma mesma li nha, a at ri bui o comea da
di rei t a para a esquerda, ou sej a, nVar3 recebe o val or zer o i ni ci alment e, nVar2 r ecebe o
cont edo de nVar3 e nVar1 r ecebe o cont edo de nVar2 por fi nal .

Com o operador de at ri bui o em l i nha, pode- se subst i t ui r as i ni ci alizaes i ndi vi duai s de cada
vari vel por uma i ni ci alizao apenas:

Local nVar1 : = 0, nVar2 : = 0, nVar3 : = 0
por
Local nVar1 : = nVar2 : = nVar3 : = 0

O operador de at ri bui o em li nha t ambm pode ser ut ili zado para subst i t ui r val ores de
campos em um banco de dados.

E At r i bu i o Compost a

Os operador es de at r i bui o compost a so uma facilidade da linguagem ADVPL para
expr esses de cl cul o e at ri bui o. Com el es pode- se economi zar di gi t ao:

Oper ador Ex empl o Equi v al ent e 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

Oper ador es de I ncr ement o/ Decr ement o

A li nguagem ADVPL possui operador es para r eali zar i ncrement o ou decrement o de vari vei s.
Ent ende- se por i ncrement o aument ar o val or de uma vari vel numri ca em 1 e ent ende- se por
decrement o di mi nui r o val or da vari vel em 1. Os operador es so:

+ + I ncrement o Ps ou Pr- fi xado
- - Decrement o Ps ou Pr- fi xado

Os operador es de decr ement o/ i ncrement o podem ser col ocados t ant o ant es ( pr - fi xado) como
depoi s ( ps- fi xado) do nome da vari vel . Dent ro de uma expresso, a ordem do operador
mui t o i mport ant e, podendo al t erar o r esul t ado da expr esso. Os oper ador es i ncrement ai s so
execut ados da esquerda para a di rei t a dent ro de uma expresso.

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

O val or da vari vel nB r esul t a em 21, poi s a pri mei ra r efer nci a a nA ( ant es do + + ) cont i nha o
val or 10 que foi consi derado e i medi at ament e aument ado em 1. Na segunda refer nci a a nA,
est e j possua o val or 11. O que foi efet uado foi a soma de 10 mai s 11, i gual a 21. O
resul t ado fi nal aps a execuo dest as duas l i nhas a vari vel nB cont endo 21 e a vari vel nA
cont endo 11.

No ent ant o:

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


- 42 -

ADVPL Compl et o


Resul t a em 22, poi s o operador i ncrement al aument ou o val or da primei ra nA ant es que seu
val or fosse consi derado.

Oper ador es Especi ai s

Al m dos operador es comuns, o ADVPL possui al guns out ros operador es ou i dent i fi cadores.
Est as so suas fi nali dades:


( ) Agrupament o ou Funo
[ ] El ement o de Mat ri z
{ } Defi ni o de Mat ri z, Const ant e ou Bl oco de Cdi go
- > I dent i fi cador de Apeli do
& Macr o subst i t ui o
@ Passagem de parmet ro por r efer nci a
| | Passagem de parmet ro por val or

- Os parnt eses so ut ilizados para agrupar el ement os em uma expr esso mudando a
ordem de precednci a da avali ao da expresso ( segundo as r egras mat emt i cas por
exempl o) . Tambm ser vem para envol ver os argument os de uma funo.

- Os col chet es so ut ilizados para especi fi car um el ement o especfi co de uma mat ri z. Por
exempl o, A[ 3,2] , refer e- se ao el ement o da mat ri z A na linha 3, col una 2.

- As chaves so ut ili zadas para a especi fi cao de mat ri zes li t erai s ou bl ocos de cdi go.
Por exempl o, A: = { 10,20,30} cri a uma mat ri z chamada A com t r s el ement os.

- O smbol o - > i dent i fi ca um campo de um arquivo di fer enci ando- o de uma vari vel . Por
exempl o, FUNC- > nome refere- se ao campo nome do arqui vo FUNC. Mesmo que exi st a uma
vari vel chamada nome, o campo nome que ser acessado.

- O smbol o & i dent i fi ca uma aval i ao de expresso at ravs de macro e vi st o em
det al hes na document ao sobr e macr o subst i t ui o

.
- O smbol o @ ut ili zado para i ndi car que durant e a passagem de uma vari vel para uma
funo ou pr ocedi ment o el a sej a t omada como uma refer nci a e no como val or .

- O smbol o | | ut i lizado para i ndi car que durant e a passagem de uma vari vel para
uma funo ou pr ocedi ment o el a sej a t omada como um e val or no como refernci a.

- 43 -

ADVPL Compl et o



Or dem de Pr ecednci a dos Oper ador es

Dependendo do t i po de operador , exi st e uma ordem de pr ecednci a para a avali ao dos
operandos. Em pri ncpio, t odas as operaes com os operador es, so r eali zadas da esquer da
para a di rei t a se el es t i ver em o mesmo nvel de pri ori dade.

A ordem de precednci a, ou nvel de pri ori dade de execuo, dos operador es em ADVPL :

1. Operador es de I ncr ement o/ Decrement o pr - fi xado
2. Operador es de St ri ng
3. Operador es Mat emt i cos
4. Operador es Rel aci onai s
5. Operador es Lgi cos
6. Operador es de At ri bui o
7. Operador es de I ncr ement o/ Decrement o ps- fi xado

Em expr esses compl exas com di ferent es t i pos de operador es, a avali ao segui r essa
seqnci a. Caso exi st a mai s de um operador do mesmo t i po ( ou sej a, de mesmo nvel ) , a
avali ao se d da esquerda para di rei t a. Para os operador es mat emt i cos ent r et ant o, h uma
precednci a a segui r:

1. Exponenci ao
2. Mul t ipli cao e Di vi so
3. Adi o e Subt rao

Consi der e o exempl o:

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

O r esul t ado dest a expr esso 30, poi s pri mei rament e cal cul ada a exponenci ao 2^ 3( = 8) ,
ent o so cal cul adas as mul t i pli caes e di vi ses 10/ 2( = 5) e 5* 3( = 15) , e fi nal ment e as
adi es resul t ando em 2+ 5+ 15+ 8( = 30) .

E Al t er ao da Pr ecednci a

A ut ilizao de parnt eses dent r o de uma expresso al t era a ordem de pr ecednci a dos
operadores. Operandos ent re par nt eses so anali sados ant es dos que se encont ram fora dos
parnt eses. Se exi st i rem mai s de um conj unt o de parnt eses no- ani nhados, o grupo mai s a
esquerda ser avali ado pri mei ro e assi m sucessi vament e.

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

No exempl o aci ma pri mei ro ser cal cul ada a exponenci ao 2^ 3( = 8) . Em segui da 2+ 10( = 12)
ser cal cul ado, 2+ 5( = 7) cal cul ado, e fi nal ment e a di vi so e a mul t i pli cao sero efet uadas, o
que r esul t a em 12/ 7* 3+ 8( = 13.14) .

Se exi st i rem vri os par nt eses ani nhados, ou sej a, col ocados um dent ro do out r o, a aval i ao
ocor rer do parnt eses mai s int ero em di reo ao mai s ext erno.







- 44 -

ADVPL Compl et o



4.5.3. Oper ao de Macr o Subst i t ui o

O operador de macr o subst i t ui o, si mbolizado pel o "e" comer ci al ( &) , ut ili zado para a
avali ao de expresses em t empo de execuo. Funci ona como se uma expresso
armazenada fosse compil ada em t empo de execuo, ant es de ser de fat o execut ada.

Consi der e o exempl o:

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

A vari vel X at ri buda com o val or 10, enquant o a vari vel Y at ri buda com a st ri ng de
caract eres cont endo "X + 1".

A t er cei ra li nha ut iliza o operador de macro. Est a li nha faz com que o nmer o 11 sej a at ri budo
vari vel B. Pode- se per ceber que esse o val or r esul t ant e da expresso em format o de
caract ere cont i da na vari vel Y.

Ut ilizando- se uma t cnica mat emt i ca el ement ar, a subst i t ui o, t emos que na segunda li nha,
Y defi ni do como "X + 1", ent o pode- se subst i t ui r Y na t ercei ra li nha:

03 B : = &"X + 1"
O operador de macr o cancel a as aspas:
03 B : = X + 1

Pode- se per ceber que o operador de macro r emove as aspas, o que dei xa um pedao de
cdi go para ser execut ado. Deve- se t er em ment e que t udo i sso acont ece em t empo de
execuo, o que t orna t udo mui t o dinmi co. Uma ut ilizao i nt eressant e cri ar um t i po de
cal cul adora, ou aval i ador de frmul as, que det ermi na o r esul t ado de al go que o usuri o di gi t a.

O operador de macro t em uma li mit ao: vari vei s refer enci adas dent ro da st ri ng de
caract eres ( X nos exempl os ant eri or es) no podem ser l ocai s.













- 45 -

ADVPL Compl et o



4.5.4. Funes de mani pul ao de v ar i vei s

Al m de at ri bui r, cont r ol ar o escopo e macro execut ar o cont edo das vari vei s necessri o
mani pul ar seu cont edo at ravs de funes especfi cas da li nguagem para cada si t uao.

As operaes de mani pul ao de cont edo mai s comuns em pr ogramao so:

E Converses ent r e t i pos de vari vei s
E Mani pulao de st ri ngs
E Mani pulao de vari veis numri cas
E Veri fi cao de t i pos de vari vei s
E Mani pulao de ar rays
E Execuo de bl ocos de cdi go

Nest e t pi co sero abordadas as converses ent re t i pos de varivei s e as funes de
mani pul ao de st ri ngs e vari vei s numri cas.


Conv er ses ent r e t i pos de v ar i v ei s

As funes mai s ut ili zadas nas operaes ent r e conver so ent r e t i pos de vari vei s so:

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

CTOD( )


Si nt ax e CTOD( cDat a)
Descr i o
Reali za a conver so de uma i nformao do t i po caract er no format o
DD/ MM/ AAAA para uma vari vel do t i po dat a.



CVALTOCHAR( )


Si nt ax e CVALTOCHAR( n Val or )
Descr i o
Reali za a conver so de uma i nformao do t i po numri co em uma st ri ng,
sem a adi o de espaos a i nformao.


- 46 -

ADVPL Compl et o




DTOC( )


Si nt ax e DTOC( dDat a)
Descr i o
Reali za a conver so de uma i nformao do t i po dat a para em caract er, sendo
o r esul t ado no format o DD/ MM/ AAAA .



DTOS( )


Si nt ax e DTOS( dDat a)
Descr i o
Reali za a conver so de uma i nformao do t i po dat a em um caract er, sendo
o r esul t ado no format o AAAAMMDD .



STOD( )


Si nt ax e STOD( sDat a)
Descr i o
Reali za a conver so de uma i nformao do t i po caract er com cont edo no
for mat o AAAAMMDD em dat a.


STR( )


Si nt ax e STR( n Val or )
Descr i o
Reali za a conver so de uma i nformao do t i po numri co em uma st ri ng,
adi ci onando espaos di rei t a.


STRZERO( )


Si nt ax e STRZERO( nVal or , nTaman ho)
Descr i o
Reali za a conver so de uma i nformao do t i po numri co em uma st ri ng,
adi ci onando zer os esquerda do nmero convert i do, de forma que a st ri ng
gerada t enha o t amanho especi fi cado no parmet r o.


VAL( )


Si nt ax e VAL( cVal or )
Descr i o Reali za a conver so de uma i nformao do t i po caract er em numri ca.

- 47 -

ADVPL Compl et o




Man i pu l ao de st r i n gs

As funes mai s ut ili zadas nas operaes de mani pul ao do cont edo de st ri ngs so:

ALLTRI M( )
ASC( )
AT( )
CHR( )
CSTUFF( )
LEN( )
RAT( )
SUBSTR( )

ALLTRI M( )


Si nt ax e ALLTRI M( cSt r i ng)
Descr i o
Ret orna uma st ri ng sem os espaos di rei t a e esquerda, r eferent e ao
cont edo i nformado como par met ro.

A funo ALLTRI M( ) i mpl ement a as aes das funes RTRI M ( ri ght t rim ) e
LTRI M ( l eft t ri m ) .


ASC( )


Si nt ax e ASC( cCar act er e)
Descr i o
Convert e uma i nformao caract er e em seu val or de acordo com a t abel a
ASCI I .


AT( )


Si nt ax e AT( cCar act er e, cSt r i n g )
Descr i o
Ret orna a pri mei ra posi o de um caract er ou st ri ng dent ro de out ra st r i ng
especi fi cada.



- 48 -

ADVPL Compl et o



CHR( )


Si nt ax e CHR( n ASCI I )
Descr i o
Convert e um val or nmer o referent e a uma i nformao da t abel a ASCI I no
caract ere que est a i nfor mao r epr esent a.



LEN( )


Si nt ax e LEN( cSt r i n g)
Descr i o Ret orna o t amanho da st ri ng especi fi cada no parmet ro.


LOWER( )


Si nt ax e LOWER( cSt r i ng)
Descr i o
Ret orna uma st ri ng com t odos os caract eres mi nscul os, t endo como base a
st ri ng passada como parmet ro.


RAT( )


Si nt ax e RAT( cCar act er e, cSt r i ng)
Descr i o
Ret orna a l t i ma posi o de um caract er ou st ri ng dent ro de out ra st ri ng
especi fi cada.


STUFF( )


Si nt ax e STUFF( cSt r i ng, nPosI ni ci al , nEx cl u i r , cAdi cao)
Descr i o
Per mi t e subst i t ui r um cont edo caract er e em uma st ri ng j exi st ent e,
especi fi cando a posi o i ni ci al para est a adi o e o nmero de caract er es que
sero subst i t udos.


SUBSTR( )


Si nt ax e SUBSTR( cSt r i n g, nPosI n i ci al , n Car act er es)
Descr i o
Ret orna part e do cont edo de uma st ri ng especifi cada, de acordo com a
posi o i ni ci al dest e cont edo na st ri ng e a quant i dade de caract eres que
dever ser r et ornada a part i r daquel e pont o ( i ncl usi ve) .


- 49 -

ADVPL Compl et o


UPPER( )


Si nt ax e UPPER( cSt r i ng)
Descr i o
Ret orna uma st ri ng com t odos os caract eres mai scul os, t endo como base a
st ri ng passada como parmet ro.


Man i pu l ao de v ar i v ei s n umr i cas

As funes mai s ut ili zadas nas operaes de mani pul ao do cont edo de st ri ngs so:

ABS( )
I NT( )
NOROUND( )
ROUND( )

ABS( )

Si nt ax e ABS( n Val or )
Descr i o
Ret orna um val or absol ut o ( i ndependent e do si nal ) com base no val or
especi fi cado no parmet ro.



I NT( )

Si nt ax e I NT( nVal or )
Descr i o Ret orna a part e i nt ei ra de um val or especi fi cado no parmet r o.


NOROUND( )

Si nt ax e NOROUND( nVal or , nCasas)
Descr i o
Ret orna um val or, t runcando a part e deci mal do val or especi fi cado no
parmet ro de acordo com a quant i dade de casas deci mai s soli ci t adas.



ROUND( )

Si nt ax e ROUND( n Val or , nCasas)
Descr i o
Ret orna um val or, ar r edondando a part e deci mal do val or especi fi cado no
parmet ro de acordo com a quant i dades de casas deci mai s soli ci t adas,
ut ili zando o cri t ri o mat emt i co.



- 50 -

ADVPL Compl et o



Ver i f i cao de t i pos de v ar i v ei s

As funes de veri fi cao permi t em a consul t a ao t i po do cont edo da vari vel durant e a
execuo do pr ogr ama.

TYPE( )
VALTYPE( )

TYPE( )

Si nt ax e TYPE( cVar i av el )
Descr i o
Det ermi na o t i po do cont edo de uma vari vel , a qual no foi defi ni da na
funo em execuo.


VALTYPE( )

Si nt ax e VALTYPE( cVar i v el )
Descr i o
Det ermi na o t i po do cont edo de uma vari vel , a qual foi defi ni da na funo
em execuo.






















- 51 -

ADVPL Compl et o



5. Est r ut ur as bsi cas de pr ogr amao

O ADVPL suport a vri as est rut uras de cont r ol e que permi t em mudar a seqnci a de fl uxo de
execuo de um pr ogr ama. Est as est rut uras permi t em a execuo de cdi go baseado em
condi es l gi ca e a repet i o da execuo de pedaos de cdi go qual quer nmer o de vezes.

Em ADVPL, t odas as est rut uras de cont r ol e podem ser "ani nhadas" dent ro de t odas as demai s
est rut uras cont ant o que est ej am ani nhadas propri ament e. Est rut ur as de cont rol e t m um
i dent i fi cador de i nci o e um de fi m, e qual quer est rut ura ani nhada deve se encont r ar ent r e
est es i dent i fi cador es.

Tambm exi st em est rut uras de cont rol e para det ermi nar que el ement os, comandos, et c. em
um programa sero compil ados. Est as so as di ret i vas do pr- pr ocessador # i fdef.. .# endi f e
# i fndef...# endi f. Consul t e a document ao sobr e o pr - pr ocessador par a mai ores det al hes.

As est rut uras de cont rol e em ADVPL est o di vi didas em:

E Est rut uras de repet i o
E Est rut uras de deci so

5.1. Est r ut ur as de r epet i o

Est rut uras de r epet i o so desi gnadas para execut ar uma seo de cdi go mai s de uma vez.
Por exempl o, i magi nando- se a exi st nci a de uma funo para i mpri mi r um rel at ri o, pode- se
desej ar i mpri mi - l o quat ro vezes. Cl aro, pode- se si mpl esment e chamar a funo de i mpresso
quat ro vezes em seqnci a, mas i st o se t ornari a pouco profi ssi onal e no resol veri a o
probl ema se o nmer o de r el at ri os fosse vari vel .

Em ADVPL exi st em doi s comandos para a r epet i o de sees de cdi go, que so os comandos
FOR...NEXT e o comando WHI LE.. .ENDDO
E Si nt ax e
.

O Comando FOR. ..NEXT

A est rut ura de cont r ol e FOR... NEXT, ou si mpl esment e o l oop FOR, r epet e uma seo de cdi go
em um nmero det ermi nado de vezes.


FOR Variavel : = nValorI nicial TO nVal orFinal [ STEP nI ncr ement o]
Comandos...
[ EXI T]
[ LOOP]
NEXT

- 52 -

ADVPL Compl et o



E Par met r os

Var i v el Especi fi ca uma vari vel ou um el ement o de uma mat ri z para
at uar como um cont ador. A vari vel ou o el ement o da mat ri z
no pr eci sa t er si do decl arado ant es da execuo do comando
FOR... NEXT. Se a vari vel no exi st i r, ser cri ada como uma
v ar i v el pr i v ada.
nVal or I ni ci al
TO nVal or Fi n al
nVal orI ni ci al o val or i ni ci al para o cont ador; nVal orFinal o
val or fi nal para o cont ador. Pode- se ut ili zar val ores numri cos
li t erai s, vari vei s ou expresses, cont ant o que o resul t ado sej a
do t i po de dado numri co.
STEP
nI ncr ement o
nI ncrement o a quant idade que ser increment ada ou
decrement ada no cont ador aps cada execuo da seo de
comandos. Se o val or de nI ncr ement o for negat i vo, o cont ador
ser decrement ado. Se a cl usul a STEP for omi t i da, o cont ador
ser i ncrement ado em 1. Pode- se ut ilizar val ores numri cos
li t erai s, vari vei s ou expresses, cont ant o que o resul t ado sej a
do t i po de dado numri co.
Comandos Especi fi ca um ou mai s inst rues de comando ADVPL que sero
execut adas.
EXI T Transfere o cont r ol e de dent ro do comando FOR... NEXT para o
comando i medi at ament e segui nt e ao NEXT, ou sej a, fi nali za a
repet i o da seo de comandos i medi at ament e. Pode- se
col ocar o comando EXI T em qual quer l ugar ent re o FOR e o
NEXT.
LOOP Ret orna o cont rol e di ret ament e para a cl usul a FOR sem
execut ar o r est ant e dos comandos ent re o LOOP e o NEXT. O
cont ador i ncrement ado ou decr ement ado nor mal ment e, como
se o NEXT t i vesse si do al canado. Pode- se col ocar o comando
LOOP em qual quer l ugar ent re o FOR e o NEXT.




Uma vari vel ou um el ement o de uma mat ri z ut ili zado como um
cont ador para especi fi car quant as vezes os comandos ADVPL dent r o da
est rut ura FOR. ..NEXT so execut ados.

Os comandos ADVPL depoi s do FOR so execut ados at que o NEXT
sej a al canado. O cont ador ( Vari avel ) ent o i ncrement ado ou
decrement ado com o val or em nI ncr ement o ( se a cl usul a STEP for
omi t i da, o cont ador i ncrement ado em 1) . Ent o, o cont ador
comparado com o val or em nVal orFi nal . Se for menor ou i gual ao val or
em nVal orFi nal , os comandos segui nt es ao FOR so execut ados
novament e.

Se o val or f or mai or que o cont i do em nVal orFi nal , a est rut ura
FOR... NEXT t ermi nada e o pr ogr ama cont i nua a execuo no
pri mei ro comando aps o NEXT.

Os val ores de nVal or I ni ci al , nVal orFi nal e nI ncr ement o so apenas
consi derados i ni ci al ment e. Ent r et ant o, mudar o val or da vari vel
ut ili zada como cont ador dent r o da est rut ura afet ar o nmer o de
vezes que a repet i o ser execut ada. Se o val or de nI ncr ement o
negat i vo e o val or de nVal orI ni ci al mai or que o de nVal orFi nal , o
cont ador ser decrement ado a cada r epet i o.

- 53 -

ADVPL Compl et o


Ex empl o:

Local nCnt
Local nSomaPar : = 0
For nCnt : = 0 To 100 St ep 2
nSomaPar + = nCnt
Next
Al ert ( "A soma dos 100 pri mei ros nmeros par es : " + ;
cVal ToChar( nSomaPar) )
Ret urn

Est e exempl o i mpri me a soma dos 100 pri mei ros nmer os par es. A soma obt i da at ravs da
repet i o do cl cul o ut ilizando a prpri a vari vel de cont ador . Como a cl usul a STEP est
sendo ut ilizada, a vari vel nCnt ser sempr e i ncrement ada em 2. E como o cont ador comea
com 0, seu val or sempr e ser um nmero par .


O Comando WHI LE... ENDDO

A est rut ura de cont r ol e WHI LE... ENDDO, ou si mpl esment e o l oop WHI LE, repet e uma seo de
cdi go enquant o uma det ermi nada expr esso r esul t ar em verdadei ro ( . T. ) .

E Si nt ax e

WHI LE l Expr essao
Comandos...
[ EXI T]
[ LOOP]
ENDDO

E Par met r os

l Ex pr essao Especi fi ca uma expresso l gi ca cuj o val or det ermi na quando os
comandos ent re o WHI LE e o ENDDO so execut ados. Enquant o o
resul t ado de l Expr essao for aval i ado como verdadei ro ( .T. ) , o
conj unt o de comandos so execut ados.
Comandos Especi fi ca um ou mai s i nst rues de comando ADVPL que sero
execut adas enquant o l Expressao for aval i ado como verdadei ro ( . T. ) .
EXI T Transfere o cont r ol e de dent r o do comando WHI LE... ENDDO par a o
comando i medi at ament e segui nt e ao ENDDO, ou sej a, fi nali za a
repet i o da seo de comandos i medi at ament e. Pode- se col ocar o
comando EXI T em qual quer l ugar ent r e o WHI LE e o ENDO.
LOOP Ret orna o cont r ol e di ret ament e para a cl usul a WHI LE sem execut ar
o r est ant e dos comandos ent re o LOOP e o ENDDO. A expr esso em
l Expressao r eaval i ada para a deci so se os comandos cont i nuaro
sendo execut ados.



Os comandos ent r e o WHI LE e o ENDDO so execut ados enquant o o
resul t ado da avali ao da expr esso em l Expressao permanecer
verdadei ro ( .T.) . Cada pal avra chave WHI LE deve t er uma pal avra
chave ENDDO cor r espondent e.




- 54 -

ADVPL Compl et o


Ex empl o :

Local nNumber : = nAux : = 350
nAux : = I nt ( nAux / 2)
Whil e nAux > 0
nSomaPar + = nCnt
Next
Al ert ( "A soma dos 100 pri mei ros nmeros par es : " + ;
cVal ToChar( nSomaPar) )
Ret urn


5.1.1. I nf l uenci ando o f l ux o de r epet i o

A linguagem ADVPL permi t e a ut ili zao de comandos que i nfluem di ret ament e em um
processo de r epet i o, sendo el es:

E LOOP
E EXI T

LOOP

A i nst ruo LOOP ut i lizada para for ar um desvi o no fl uxo do programa de vol t a a anli se da
condi o de repet i o. Dest a forma, t odas as operaes que seri am real i zadas dent ro da
est rut ura de r epet i o aps o LOOP sero desconsi deradas.

Ex empl o:

aI t ens: = Li st aProdut os( ) / / funo i l ust rat i va que r et orna um array com dados dos pr odut os
nQuant idade : = Len( aI t ens)
nI t ens : = 0

Whil e nI t ens < nQuant i dade

nI t ens+ +
I F BLOQUEADO( aI t ens [ nI t ens] ) / / funo il ust rat i va que veri fi ca se o produt o est
LOOP / / bl oqueado.
ENDI F

I MPRI ME( ) / / funo il ust rat i va que r eal i za a i mpresso de um i t em li berado par a uso

End

/ / Caso o pr odut o est ej a bl oqueado, o mesmo n o ser i mpr esso, poi s a ex ecuo da
/ / i n st r u o LOOP f ar o f l ux o do pr ogr ama r et or n ar a par t i r da an l i se da condi o.




- 55 -

ADVPL Compl et o


EXI T

A i nst ruo EXI T ut i lizada para for ar o t rmi no de uma est rut ura de repet i o. Dest a forma,
t odas as operaes que seri am real i zadas dent ro da est rut ura de r epet i o aps o EXI T sero
desconsi deradas, e o programa i r cont i nuar a execuo a part i r da prxi ma inst ruo
post eri or ao t rmi no da est rut ura ( END ou NEXT) .

Ex empl o:

Whil e .T.

I F MSGYESNO( Desej a j ogar o j ogo da for ca? )
JFORCA( ) / / Funo i l ust rat i va que i mpl ement a o al gori t mo do j ogo da for ca.
ELSE
EXI T
ENDI F
End

MSGI NFO( Fi nal de Jogo )

/ / Enqu ant o n o f or r espondi do No par a a per gunt a: Desej a j ogar o j ogo da
/ / f or ca , ser ex ecu t ada a f uno do j ogo da f or ca.
/ / Caso sej a sel eci onada a opo No , ser ex ecut ada a i n st r uo EXI T qu e
pr ov ocar o t r mi no do LOOP, per mi t i ndo a ex ecuo da mensagem de Fi n al de
Jogo .





















- 56 -

ADVPL Compl et o



5.2. Est r ut ur as de deci so

Est rut uras de desvi o so desi gnadas para execut ar uma seo de cdi go se det ermi nada
condi o l gi ca resul t ar em verdadei ro ( .T.) .

Em ADVPL exi st em doi s comandos para execuo de sees de cdi go de acordo com
avali aes l gi cas, que so os comandos I F...ELSE.. .ENDI F e o comando DO
CASE...ENDCASE
E Si nt ax e
.

O Comando I F...ELSE. ..ENDI F

Execut a um conj unt o de comandos baseado no val or de uma expr esso l gi ca.


I F l Expressao
Comandos
[ ELSE
Comandos.. . ]
ENDI F

E Par met r os

LEx pr essao Especi fi ca uma expresso l gi ca que aval i ada. Se l Expr essao
resul t ar em verdadei ro ( .T.) , qual quer comando segui nt e ao I F e
ant ecedent e ao ELSE ou ENDI F ( o que ocorr er pri mei ro) ser
execut ado.
Se l Expr essao resul t ar em fal so ( .F.) e a cl usul a ELSE for defi ni da,
qual quer comando aps essa cl usul a e ant eri or ao ENDI F ser
execut ada. Se a cl usula ELSE no for defi ni da, t odos os comandos
ent re o I F e o ENDI F so i gnorados. Nest e caso, a execuo do
programa cont i nua com o pri mei ro comando seguint e ao ENDI F.
Comandos Conj unt o de comandos ADVPL que sero execut ados dependendo da
avali ao da expr esso l gi ca em l Expr essao.



Pode- se ani nhar um bloco de comando I F.. . ELSE. .. ENDI F dent ro de
out ro bl oco de comando I F.. . ELSE... ENDI F. Por m, para a avali ao de
mai s de uma expr esso l gi ca, deve- se ut ilizar o comando DO
CASE.. .ENDCASE ou a verso est endi da da expresso
I F. .. ELSE.. .ENDI F denomi nada I F... ELSEI F.. .ELSE.. .ENDI F.


Ex empl o:
Local dVenct o : = CTOD( "31/ 12/ 01")
I f Dat e( ) > dVenct o
Al ert ( "Venci ment o ul t rapassado! ")
Endi f
Ret urn

- 57 -

ADVPL Compl et o



O Comando I F...ELSEI F...ELSE.. .ENDI F

Execut a o pri mei ro conj unt o de comandos cuj a expr esso condi ci onal resul t a em verdadei ro
( .T.) .

E Si nt ax e

I F l Expressao1
Comandos
[ ELSEI F lExpr essaoX
Comandos]
[ ELSE
Comandos.. .]
ENDI F

E Par met r os

l Ex pr essao1 Especi fi ca uma expresso l gi ca que avaliada. Se l Expressao
resul t ar em verdadei ro ( .T.) , execut ar os comandos
compreendi dos ent r e o I F e a prxi ma expr esso da est rut ura
( ELSEI F ou I F)
Se l Expressao r esul t ar em fal so ( .F.) , ser avali ada a prxi ma
expr esso l gi ca vi nculada ao comando ELSEI F, ou se o mesmo
no exi st i r ser execut ada a ao defi ni da no comando ELSE.
l Ex pr essaoX Especi fi ca uma expresso l gi ca que ser avali ada para cada
comando ELSEI F. Est a expresso soment e ser aval i ada se a
expr esso l gi ca especi fi cada no comando I F r esul t ar em fal so
( .F.) .
Caso a l Expr essaoX avali ada resul t e em fal so ( .F.) ser aval i ada a
prxi ma expresso l ExpressaoX vi ncul ada ao prxi mo comando
ELSEI F, ou caso o mesmo no exi st a ser execut ada a ao
defi ni da parao comando ELSE.
Comandos Conj unt o de comandos ADVPL que sero execut ados dependendo
da avali ao da expresso l gi ca em l Expr essao.



O campo I F... ELSE. .. ELSEI F.. .ENDI F possui a mesma est rut urao de
deci so que pode ser obt i da com a ut i lizao do comando DO
CASE.. .ENDCASE.


- 58 -

ADVPL Compl et o



Ex empl o:
Local dVenct o : = CTOD( "31/ 12/ 01")
I f Dat e( ) > dVenct o
Al ert ( "Venci ment o ul t rapassado! ")
El seI f Dat e( ) = = dVenct o
Al ert ( "Venci ment o na dat a! ")
El se
Al ert ( "Venci ment o dent r o do prazo! ")
Endi f
Ret urn


O Comando DO CASE. ..ENDCASE

Execut a o pri mei ro conj unt o de comandos cuj a expr esso condi ci onal resul t a em verdadei ro
( .T.) .

E Si nt ax e

DO CASE
CASE lExpr essao1
Comandos
[ CASE lExpr essao2
Comandos
. ..
CASE lExpr essaoN
Comandos]
[ OTHERWI SE
Comandos]
ENDCASE

E Par met r os

CASE
l Ex pr essao1
Comandos...
Quando a pri mei ra expresso CASE resul t ant e em verdadei ro ( . T.)
for encont rada, o conj unt o de comandos seguint e execut ado. A
execuo do conj unt o de comandos cont i nua at que a prxi ma
cl usul a CASE, OTHERWI SE ou ENDCASE sej a encont rada. Ao
t ermi nar de execut ar esse conj unt o de comandos, a execuo
cont i nua com o pri mei ro comando segui nt e ao ENDCASE.
Se uma expr esso CASE r esul t ar em fal so ( .F.) , o conj unt o de
comandos segui nt e a est a at a prxi ma cl usula i gnorado.
Apenas um conj unt o de comandos execut ado. Est es so os
pri mei ros comandos cuj a expresso CASE aval i ada como
verdadei ro ( .T.) . Aps a execuo, qual quer out ra expresso CASE
post eri or i gnorada ( mesmo que sua aval i ao resul t asse em
verdadei ro) .
OTHERWI SE
Comandos
Se t odas as expr esses CASE for em avali adas como fal so ( .F.) , a
cl usul a OTHERWI SE det ermi na se um conj unt o adi ci onal de
comandos deve ser execut ado. Se essa cl usul a for i ncl uda, os
comandos segui nt es sero execut ados e ent o o programa
cont i nuar com o pri mei ro comando segui nt e ao ENDCASE. Se a
cl usul a OTHERWI SE for omi t i da, a execuo cont i nuar
normal ment e aps a cl usul a ENDCASE.


- 59 -

ADVPL Compl et o




O Comando DO CASE. ..ENDCASE ut ili zado no l ugar do comando
I F...ENDI F quando um nmero mai or do que uma expresso deve ser
avali ada, subst i t ui ndo a necessi dade de mai s de um comando
I F. .. ENDI F ani nhados.


Ex empl o:

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

DO CASE
CASE nMes < = 3
cPeri odo : = "Pri mei ro Tr i mest re"
CASE nMes > = 4 .And. nMes < = 6
cPeri odo : = "Segundo Tri mest r e"
CASE nMes > = 7 .And. nMes < = 9
cPeri odo : = "Ter cei ro Tr i mest re"
OTHERWI SE
cPeri odo : = "Quart o Tri mest re"
ENDCASE

Ret urn





















- 60 -

ADVPL Compl et o



6. Ar r ays e Bl ocos de Cdi go

6.1. Ar r ay s

Arrays ou mat ri zes, so col ees de val ores, semel hant es a uma l i st a. Uma mat ri z pode ser
cri ada at ravs de di ferent es manei ras.

Cada i t em em um arr ay r eferenci ado pel a i ndi cao de sua posi o numri ca na l i st a,
i ni ci ando pel o nmer o 1.

O exempl o a segui r decl ara uma vari vel , at ribui um array de t rs el ement os a el a, e ent o
exi be um dos el ement os e o t amanho do arr ay:

Local aLet ras / / Decl arao da vari vel
aLet r as : = { "A", "B" , "C"} / / At ri bui o do ar ray a vari vel
Al ert ( aLet ras[ 2] ) / / Exi be o segundo el ement o do array
Al ert ( cVal ToChar( Len( aLet ras) ) ) / / Exi be o t amanho do arr ay

O ADVPL permi t e a mani pul ao de arrays facil ment e. Enquant o que em out ras l inguagens
como C ou Pascal necessri o al ocar memri a para cada el ement o de um ar ray ( o que
t ornari a a ut ilizao de "pont ei ros" necessri a) , o ADVPL se encar rega de gerenci ar a memri a
e t orna si mpl es adi ci onar el ement os a um array, ut ilizando a funo AADD( ) :

AADD( aLet ras, "D") / / Adi ci ona o quart o el ement o ao fi nal do ar ray
Al ert ( aLet ras[ 4] ) / / Exi be o quart o el ement o
Al ert ( aLet ras[ 5] ) / / Er r o! No h um qui nt o el ement o no ar ray


Ar r ay s como Est r ut ur as

Uma caract erst i ca i nt eressant e do ADVPL que um array pode cont er qual quer t i po de dado:
nmeros, dat as, l gi cos, caract er es, obj et os, et c. , e ao mesmo t empo. Em out r as pal avras, os
el ement os de um array no pr eci sam ser necessari ament e do mesmo t i po de dado, em
cont rast e com out r as l i nguagens como C e Pascal .

aFunct 1 : = { "Pedro",32,.T.}

Est e ar ray cont em uma st ri ng, um nmero e um val or l gi co. Em out r as li nguagens como C ou
Pascal , est e "pacot e" de informaes pode ser chamado como um "st ruct " ( est rut ura em C, por
exempl o) ou um "r ecor d" ( regi st r o em Pascal , por exempl o) . Como se fosse na verdade um
regi st ro de um banco de dados, um pacot e de i nformaes const rudo com di versos campos.
Cada campo t endo um pedao di fer ent e de dado.

Suponha que no exempl o ant eri or, o ar ray aFunct 1 cont enha i nfor maes sobre o nome de
uma pessoa, sua i dade e sua si t uao mat ri moni al . Os segui nt es # defi nes podem ser cri ados
para i ndi car cada posi o dos val or es dent ro de um array:

# defi ne FUNCT_NOME 1
# defi ne FUNCT_I DADE 2
# defi ne FUNCT_CASADO 3

- 61 -

ADVPL Compl et o



E consi der e mai s al guns arr ays para r epr esent ar mai s pessoas:

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

Os nomes podem ser i mpressos assi m:

Al ert ( aFunct 1[ FUNCT_NOME] )
Al ert ( aFunct 2[ FUNCT_NOME] )
Al ert ( aFunct 3[ FUNCT_NOME] )

Agora, ao i nvs de t rabal har com vari vei s i ndivi duai s, pode- se agrup- l as em um out ro array,
do mesmo modo que muit os r egi st ros so agrupados em uma t abel a de banco de dados:

aFunct s : = { aFunct 1, aFunct 2, aFunct 3}

Que equi val ent e a i sso:

aFunct s : = { { "Pedr o" , 32, .T.} , ;
{ "Mari a" , 22, .T.} , ;
{ "Ant ni o", 42, .F.} }

aFunct s um array com 3 li nhas por 3 col unas. Uma vez que as vari vei s separadas foram
combi nadas em um ar ray, os nomes podem ser exi bi dos assi m:

Local nCount
For nCount : = 1 To Len( aFunct s)
Al ert ( aFunct s[ nCount , FUNCT_NOME] )
/ / O acesso a el ement os de um arr ay mul t idi mensi onal
/ / pode ser r eali zado t ambm dest a forma:
/ / aFunct s[ nCount ] [ FUNCT_NOME]
Next nCount

A vari vel nCount sel eci ona que funci onri o ( ou que li nha) de i nt er esse. Ent o a const ant e
FUNCT_NOME sel eci ona a pri mei ra col una daquel a linha.

Cui dados com Ar r ay s

Arrays so l i st as de el ement os, port ant o memri a necessri a para armazenar est as
i nformaes. Como est es arrays podem ser mult i di mensi onai s, a memri a necessri a ser a
mul t ipli cao do nmer o de i t ens em cada di menso do array, consi derando- se o t amanho do
cont edo de cada el ement o cont i do nest a. Port ant o o t amanho de um array pode vari ar mui t o.

A faci lidade da ut ilizao de ar rays, mesmo que para armazenar i nfor maes em pacot es como
descri t o ant eri orment e, no compensada pel a ut ilizao em memri a quando o nmer o de
i t ens em um array for mui t o grande. Quando o nmero de el ement os for mui t o grande deve- se
procurar out ras sol ues, como a ut i lizao de um arqui vo de banco de dados t emporri o.

- 62 -

ADVPL Compl et o




6.1.1. I ni ci al i zando ar r ay s

Al gumas vezes o t amanho da mat ri z conheci do previ ament e. Out r as vezes o t amanho do
array soment e ser conheci do em t empo de execuo.

Se o t amanho do ar r ay con heci do

Se o t amanho do ar ray conheci do no moment o que o programa escri t o, h di versas
manei ras de i mpl ement ar o cdi go:

01 Local nCnt
02 Local aX[ 10]
03 Local aY : = Ar ray( 10)
04 Local aZ : = { 0,0,0,0,0,0,0,0,0,0}
05
06 For nCnt : = 1 To 10
07 aX[ nCnt ] : = nCnt * nCnt
08 Next nCnt

Est e cdi go preenche o array com uma t abel a de quadrados. Os val ores sero 1, 4, 9, 16 ...
81, 100. Not e que a l i nha 07 se refere vari vel aX, mas poderi a t ambm t r abal har com aY ou
aZ.

O obj et i vo dest e exempl o demonst rar t rs modos de cri ar um array de t amanho conheci do
no moment o da cri ao do cdi go.

1. Na l inha 02 o array cri ada usando aX[ 10] . I st o i ndi ca ao ADVPL para al ocar espao
para 10 el ement os no array. Os col chet es [ e ] so ut i lizados para i ndi car o t amanho
necessri o.

2. Na li nha 03 ut ilizada a funo ar ray com o parmet r o 10 para cri ar o ar ray, e o
ret orno dest a funo at ri budo vari vel aY. Na li nha 03 efet uado o que se chama
"desenhar a i magen do array". Como se pode not ar, exi st em dez 0 s na li st a encerr ada ent re
chaves ( { } ) . Cl arament e, est e mt odo no o ut ili zado para cri ar uma mat ri z de 1000
el ement os.

3. O t ercei ro mt odo di fer e dos ant eri or es por que i ni ci ali za a mat ri z com os val ores
defi ni t i vos. Nos doi s pri mei ros mt odos, cada posi o da mat ri z cont m um val or nul o ( Nil ) e
deve ser i ni ci alizado post eri orment e.

4. A li nha 07 demonst ra como um val or pode ser at ri budo para uma posi o exi st ent e em
uma mat ri z especi fi cando o ndi ce ent r e col chet es.

- 63 -

ADVPL Compl et o



Se o t amanho do ar r ay n o conh eci do

Se o t amanho do ar ray no conheci do at o moment o da execuo do pr ograma, h al gumas
manei ras de cri ar um array e adi ci onar el ement os a el e. O exempl o a segui r ilust ra a i di a de
cri ao de um array vazi o ( sem nenhum el ement o) e adi o de el ement os di nami cament e.

01 Local nCnt
02 Local aX[ 0]
03 Local aY : = Ar ray( 0)
04 Local aZ : = { }
05
06 For nCnt : = 1 To nSi ze
07 AADD( aX, nCnt * nCnt )
08 Next nCnt

1. A linha 02 ut ili za os col chet es para cri ar um array vazi o. Apesar de no t er nenhum
el ement o, seu t i po de dado ar ray.

2. Na li nha 03 a chamada da funo ar ray cri a uma mat ri z sem nenhum el ement o.

3. Na li nha 04 est decl arada a r epr esent ao de um array vazi o em ADVPL. Mai s uma
vez, est o sendo ut ili zadas as chaves para i ndi car que o t i po de dados da vari vel array.
Not e que { } um array vazi o ( t em o t amanho 0) , enquant o { Ni l } um array com um ni co
el ement o nul o ( t em t amanho 1) .

Porque cada uma dest es arrays no cont m el ement os, a li nha 07 ut ili za a funo AADD( ) para
adi ci onar el ement os sucessi vament e at o t amanho necessri o ( especi fi cado por exempl o na
vari vel nSize) .


6.1.2. Funes de mani pul ao de ar r ays

A li nguagem ADVPL possui di versas funes que auxi li am na mani pul ao de ar rays, dent r e as
quai s podemos ci t ar as mai s ut ili zadas:

ARRAY( )
AADD( )
ACLONE( )
ADEL( )
ASI ZE( )
AI NS( )
ASORT( )
ASCAN( )


- 64 -

ADVPL Compl et o



ARRAY( )

Si nt ax e ARRAY( nLi nh as, n Col unas)
Descr i o
A funo Array( ) ut ilizada na defini o de vari vei s de t i po array, como
uma opo a si nt axe ut ili zando chaves ( { } ) .

AADD( )

Si nt ax e AADD( aAr r ay , x I t em)
Descr i o
A funo AADD( ) per mit e a i nsero de um i t em em um array j exi st ent e,
sendo que est e i t em podem ser um el ement o si mpl es, um obj et o ou out ro
array.

ACLONE( )

Si nt ax e AADD( aAr r ay )
Descr i o
A funo ACLONE( ) r eali za a cpi a dos el ement os de um array par a out r o
array i nt egral ment e.

ADEL( )

Si nt ax e ADEL( aAr r ay , nPosi o)
Descr i o
A funo ADEL( ) permi t e a excl uso de um el ement o do array. Ao efet uar a
excl uso de um el ement o, t odos os demai s so reorgani zados de for ma que
a ul t i ma posi o do array passar a ser nul a.

ASI ZE( )

Si nt ax e ASI ZE( aAr r ay , nTamanho)
Descr i o
A funo ASI ZE permi t e a redefi ni o da est rut ura de um arr ay pr -
exi st ent e, adi ci onando ou removendo i t ens do mesmo.


ASORT( )

Si nt ax e ASORT( aAr r ay , n I n i ci o, n I t en s, bOr dem)
Descr i o
A funo ASORT( ) per mi t e que os i t ens de um array sej am ordenados a
part i r de um cri t ri o pr - est abel eci do.


- 65 -

ADVPL Compl et o



ASCAN( )

Si nt ax e ASCAN( aAr r ay , bSeek )
Descr i o
A funo ASCAN( ) per mi t e que sej a i dent i fi cada a posi o do array que
cont m uma det ermi nada i nformao, at ravs da anli se de uma expr esso
descri t a em um bl oco de cdi go.

AI NS( )

Si nt ax e AI NS( aAr r ay , nPosi cao)
Descr i o
A funo AI NS( ) permi t e a i nsero de um el ement o no ar ray especi fi cado
em qual quer pont o da est rut ura do mesmo, diferi ndo dest a forma da funo
AADD( ) a qual sempr e i nsere um novo el ement o ao fi nal da est rut ura j
exi st ent e.



6.1.3. Cpi a de ar r ays

Conforme coment ado ant eri orment e, um array uma rea na memri a, o qual possui uma
est rut ura permi t e que as i nformaes sej am armazenadas e organi zadas das mai s di versas
for mas.

Com base nesse concei t o, o ar ray pode ser consi derado apenas como um mapa ou um gui a
de como as i nformaes est o organi zadas e de como el as podem ser armazenadas ou
consul t adas. Para se copi ar um array deve- se l evar est e concei t o em consi derao, poi s caso
cont rri o o r esul t ado esperado no ser o obt i do na execuo da cpi a .

Para copi ar o cont edo de uma vari vel , ut iliza- se o operador de at r i bui o : = , conforme
abai xo:


nPessoas : = 10
nAlunos : = nPessoas


Ao execut ar a at ri bui o de nAl unos com o cont edo de nPessoas, o cont edo de nPessoas
at ri budo a vari vel nAlunos, causando o efei t o de cpi a do cont edo de uma vari vel para
out ra.

I st o porque o comando de at ri bui o copi a o cont edo da r ea de memri a represent ada pel o
nome nPessoas para a rea de memri a represent ada pel o nome nAlunos . Mas ao ut ilizar o
operador de at ri bui o : = da mesma forma que ut ilizado em vari vei s si mpl es para se copi ar
um array o efei t o di ferent e:


aPessoas : = { Ri cardo , Cri st i ane , Andr , Camil a }
aAl unos : = aPessoas



- 66 -

ADVPL Compl et o


A vari vel aPessoas r epresent e uma rea de memri a que cont m a est rut ura de um ar ray
( mapa ) , no as i nformaes do ar ray, poi s cada i nformao est em sua prpri a rea de
memri a.



Dest a forma ao at ri bui r o cont edo r epresent ado pel a vari vel aPessoas a vari vel aAl unos no
est se copi ando as i nfor maes e si m o mapa das reas de memri a onde as i nformaes
est o r eal ment e armazenadas.



Como foi copi ado o mapa e no as informaes, qual quer ao ut ilizando o rt ul o aAlunos i r
afet ar as i nformaes do r t ul o aPessoas. Com i sso ao i nvs de se obt er doi s arrays di st i nt os,
t em- se o mesmo ar ray com duas formas de acesso ( rt ul os) di fer ent es.

Por est a razo deve ser ut ilizado o comando ACLONE( ) quando desej a- se obt er um ar ray com
a mesma est rut ura e i nformaes que compe out ro ar ray j exi st ent e.


- 67 -

ADVPL Compl et o




6.2. Li st as de Ex pr esses e Bl ocos de Cdi go

Bl ocos de cdi go so um concei t o exi st ent e h mui t o t empo em li nguagens xBase. No como
al go que apareceu da noi t e para o di a, e si m uma evol uo progressi va ut ili zando a
combi nao de mui t os concei t os da li nguagem para a sua i mpl ement ao.

6.2.1. Pr emi ssas par a ut i l i zao de Bl ocos de Cdi go

Pr i mei r a pr emi ssa

O ADVPL uma l inguagem baseada em funes. Funes t m um val or de ret orno. Assim
como o operador de at ri bui o : = .

Assi m, ao i nv s de escr ev er :

x : = 10 / / At ri bui o val or 10 vari vel chamada X
Al ert ( "Val or de x: " + cVal ToChar( x) )

Pode- se escr ev er :

/ / At ri bui e ent o exi be o val or da vari vel X
Al ert ( "Val or de x: " + cVal t oChar( X : = 10) )

A expr esso x: = 10 avali ada pri mei ro, e ent o seu r esul t ado ( o val or de X, que agora 10)
passada para a funo cval t ochar para a converso para caract er e, e em segui da para a
funo al ert para a exi bi o. Por causa dest a regra de pr ecednci a possvel at ri bui r um val or
a mai s de uma vari vel ao mesmo t empo:

Z : = Y : = X : = 0

Por causa dessa r egra, essa expr esso aval i ada como se fosse escri t a assi m:

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

Apesar de o ADVPL avali ar expr esses da esquerda para a di rei t a, no caso de at ri bui es i sso
acont ece ao cont rri o, da di rei t a para a esquerda. O val or at ri budo vari vel X, que r et orna

- 68 -

ADVPL Compl et o


o val or para ser at ri budo vari vel Y e assi m sucessi vament e. Pode- se di zer que o zer o foi
"propagado at ravs da expr esso".

Segu nda pr emi ssa

Em ADVPL pode- se j unt ar di versas l inhas de cdi go em uma ni ca li nha fsi ca de comando. Por
exempl o, o cdi go:

I f l Achou
Al ert ( "Cli ent e encont rado! ")
Endi f
pode ser escri t o assi m:
I f l Achou ; Al ert ( "Cli ent e encont r ado! ") ;
Endi f

O pont o- e- vrgul a i ndi ca ao ADVPL que a nova li nha de cdi go est para comear. Pode- se
ent o col ocar di ver sas linhas l gi cas de cdi go na mesma l inha fsi ca at ravs do edi t or de t ext o
ut ili zado.

Apesar da possi bilidade de se escr ever t odo o programa assi m, em uma ni ca li nha fsi ca, i st o
no r ecomendado poi s di fi cul t a a l egi bili dade do pr ograma e, conseqent ement e, a
manut eno.

6.2.2. Li st a de ex pr esses

A evol uo dos bl ocos de cdi go comea com as l i st as de expr esses. Nos exempl os a segui r,
o smbol o = = > i ndi car o ret orno da expr esso aps sua aval i ao ( sej a para at ri bui r em uma
vari vel , exi bi r para o usuri o ou i mpri mi r em um r el at ri o) , que ser i mpresso em um
rel at ri o por exempl o.

Duas Li nh as de Cdi go

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

Cada uma das l i nhas t er a expr esso aval i ada, e o val or da vari vel ser ent o i mpresso.

Duas l i n h a de cdi go em u ma , ut i l i zando pont o- e- v r gul a

Est e o mesmo cdi go que o ant eri or , apenas escri t o em uma ni ca linha:

Al ert ( cVal ToChar( x : = 10 ; y : = 20 ) ) = = > 10

Apesar desse cdi go se encont rar em uma ni ca linha fsi ca, exi st em duas li nhas l gi cas
separadas pel o pont o e vrgul a. Ou sej a, esse cdi go equi val ent e a:

Al ert ( cVal ToChar( x : = 10 ) )
y : = 20

Port ant o apenas o val or 10 da vari vel x ser passado par a as funes cval t ochar e al ert para
ser exi bido. E o val or 20 apenas ser at ri budo vari vel y.




- 69 -

ADVPL Compl et o


Conv er t endo par a u ma l i st a de ex pr esses

Quando par nt eses so col ocados ao r edor do cdi go e o si nal de pont o- e- vrgul a subst it udo
por uma vrgul a apenas, o cdi go t orna- se uma li st a de expresses:

Al ert ( cVal ToChar ( ( X : = 10 , Y : = 20 ) ) ) = = > 20

O val or de r et orno r esult ant e de uma li st a de expresses o val or resul t ant e da lt i ma
expr esso ou el ement o da li st a. Funci ona como se fosse um pequeno programa ou funo, que
ret orna o resul t ado de sua l t ima avali ao ( efet uadas da esquerda par a a di rei t a) .

Nest e exempl o, a expr esso x : = 10 aval iada, e ent o a expr esso y : = 20, cuj o val or
resul t ant e passado para a funo al ert e cval t ochar, e ent o exi bi do. Depoi s que essa l inha
de cdi go execut ada, o val or de X i gual a 10 e o de y i gual a 20, e 20 ser exi bi do.

Teori cament e, no h l imi t ao para o nmero de expresses que podem ser combi nadas em
uma li st a de expresses. Na prt i ca, o nmer o mxi mo por vol t a de 500 smbol os.
Debugar l i st as de expr esses di fcil porque as expr esses no est o di vi didas em l i nhas de
cdi go font e, o que t or na t odas as expresses associ adas a uma mesma li nha de cdi go. I st o
pode t ornar mui t o di fcil det ermi nar onde um er ro ocorr eu.

Onde pode- se ut i l i zar uma l i st a de ex pr esses?

O propsi t o pri ncipal de uma li st a de expr esses agrup- l as em uma ni ca unidade. Em
qual quer l ugar do cdi go ADVPL que uma expresso si mpl es pode ser ut ili zada, pode- se
ut ili zar uma li st a de expresses. E ai nda, pode- se fazer com que vri as coi sas acont eam onde
normal ment e apenas uma acont eceri a.

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

Aqui t emos o mesmo concei t o, escri t o ut ilizando li st as de expr esses na funo I I F( ) :

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

De l i st as de ex pr esses par a bl ocos de cdi go

Consi der e a segui nt e li st a de expresses:

Al ert ( cVal ToChar( ( x : = 10, y : = 20 ) ) ) = = > 20

O ADVPL per mi t e cri ar funes, que so pequenos pedaos de cdigo, como se fosse um
pequeno pr ograma, ut ili zados para di minui r part es de t ar efas mai s compl exas e r eapr ovei t ar
cdi go em mai s de um l ugar num programa. Para mai ores det al hes consul t e a document ao
sobr e a cri ao de funes em ADVPL. Por m, a i di a nest e moment o que a l i st a de
expr esses ut ili zada na linha ant eri or pode ser cri ada como uma funo:

- 70 -

ADVPL Compl et o



Funct i on Li st a( )
X : = 10
Y : = 20
Ret urn Y

E a li nha de exempl o com a l i st a de expr esses pode ser subst i t uda, t endo o mesmo
resul t ado, por:

Al ert ( cVal ToChar( Li st a( ) ) ) = = > 20

Como menci onado ant eri orment e, uma li st a de expr esses como um pequeno pr ograma ou
funo. Com poucas mudanas, uma l i st a de expresses pode se t ornar um bl oco de cdi go:

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

Not e as chaves { } ut ilizadas no bl oco de cdigo. Ou sej a, um bl oco de cdi go uma mat ri z.
Por m na verdade, no uma li st a de dados, e si m uma li st a de comandos, uma li st a de
cdi go.

/ / I st o uma mat ri z de dados
A : = { 10, 20, 30}
/ / I st o um bl oco de cdi go, por m funci ona como
/ / se fosse uma mat ri z de comandos
B : = { | | x : = 10, y : = 20}

6.2.3. Bl ocos de Cdi go

Di ferent ement e de uma mat ri z, no se pode acessar el ement os de um bl oco de cdi go at ravs
de um ndi ce numri co. Por m bl ocos de cdi go so semel hant es a uma li st a de expr esses, e
a uma pequena funo.

Ou sej a, podem ser execut ados. Para a execuo, ou aval i ao, de um bl oco de cdi go, deve-
se ut i lizar a funo Eval ( ) :

nRes : = Eval ( B) = = > 20

Essa funo recebe como parmet r o um bl oco de cdi go e avali as t odas as expresses
cont i das nest e bl oco de cdi go, r et ornando o r esul t ado da lt i ma expr esso aval i ada.

Passando Par met r os

J que bl ocos de cdi go so como pequenas funes, t ambm possvel a passagem de
parmet ros para um bloco de cdi go. Os parmet r os devem ser i nfor mados ent re as bar ras
vert i cai s ( | | ) separados por vrgul as, assi m como em uma funo.

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

Por m deve- se not ar que j que o bl oco de cdi go recebe um parmet r o, um val or deve ser
passado quando o bl oco de cdi go for aval i ado.

C : = Eval ( B, 1) = = > 21


- 71 -

ADVPL Compl et o


Ut i l i zando Bl ocos de Cdi go

Bl ocos de cdi go podem ser ut ili zados em di ver sas si t uaes. Geral ment e so ut i lizados par a
execut ar t ar efas quando event os de obj et os so aci onados ou para modi fi car o comport ament o
padro de al gumas funes.

Por exempl o, consi dere a mat ri z abai xo:

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

Est a mat ri z pode ser ordenada pel o pri mei ro nome, ut ili zando- se a chamada da funo
asort ( A) , r esul t ado na mat ri z com os el ement os ordenados dessa forma:

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

A ordem padro para a funo asort ascendent e. Est e comport ament o pode ser modi fi cado
at ravs da i nformao de um bl oco de cdi go que ordena a mat ri z de forma descendent e:

B : = { | X, Y| X > Y }
aSort ( A, B)

O bl oco de cdi go ( de acordo com a document ao da funo asort ) deve ser escri t o para
acei t ar doi s parmet r os que so os doi s el ement os da mat ri z para comparao. Not e que o
bl oco de cdi go no conhece que el ement os est comparando - a funo asort sel eci ona os
el ement os ( t al vez ut ili zando o al gori t mo QuickSort ) e passa- os para o bl oco de cdi go. O bl oco
de cdi go compara- os e ret orna verdadei ro ( .T. ) se encont ram na ordem corr et a, ou fal so ( .F. )
se no. Se o val or de r et orno for fal so, a funo asort i r ent o t rocar os val ores de l ugar e
segui r comparando o pr xi mo par de val ores.
Ent o, no bl oco de cdigo ant eri or, a comparao X > Y verdadei ra se os el ement os est o
em ordem descendent e, o que si gni fi ca que o pr i mei ro val or mai or que o segundo.

Para ordenar a mesma mat ri z pel o l t i mo nome, t ambm em ordem descendent e, pode- se
ut ili zar 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 de cdi go pr ocura e compara as part es dos caract er es i medi at ament e
segui nt e a um espao em branco. Depoi s de ut ili zar esse bl oco de cdigo para a funo asort ,
a mat ri z cont er:

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

Fi nalment e, para ordenar um sub- el ement o ( col una) de uma mat ri z por exempl o, pode- se
ut ili zar o segui nt e bl oco de cdi go:

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

- 72 -

ADVPL Compl et o



6.2.4. Funes par a mani pul ao de bl ocos de cdi go

A li nguagem ADVPL possui di versas funes que auxili am na mani pul ao de bl ocos de cdi go,
dent re as quai s podemos ci t ar as mai s ut ilizadas:

EVAL( )
DBEVAL( )
AEVAL( )

EVAL( )

Si nt ax e EVAL( bBl oco, x Par am1, x Par am2, x Par amZ)
Descr i o
A funo EVAL( ) ut ilizada para avali ao di ret a de um bl oco de cdi go,
ut ili zando as i nformaes di sponvei s no mesmo de sua execuo. Est a
funo permi t e a defi nio e passagem de di ver sos parmet ros que sero
consi derados na i nt erpr et ao do bl oco de cdi go.

DBEVAL( )

Si nt ax e Ar r ay ( bBl oco, bFor , bWhi l e)
Descr i o
A funo DBEval ( ) permi t e que t odos os r egi st ro de uma det ermi nada t abel a
sej am anal i sados e para cada r egi st ro ser execut ado o bl oco de cdi go
defi ni do.

AEVAL( )

Si nt ax e AEVAL( aAr r ay , bBl oco, n I n i ci o, nFi m)
Descr i o
A funo AEVAL( ) per mit e que t odos os el ement os de um det ermi nada array
sej am anal i sados e par a cada el ement o ser execut ado o bl oco de cdi go
defi ni do.













- 73 -

ADVPL Compl et o


20

7. Funes

A mai or part e das rot i nas que quer emos escrever em programas so compost as de um
conj unt o de comandos, rot i nas est as que se r epet em ao l ongo de t odo o
desenvol vi ment o. Uma funo nada mai s do que um conj unt o de comandos que para ser
ut ili zada bast a cham- la pel o seu nome.

Para t ornar uma funo mai s fl exvel , ao cham- l a pode- se passar parmet r os, o quai s cont m
os dados e i nformaes que defi nem o pr ocessament o da funo.

Os parmet r os das funes descri t as ut ilizando a linguagem ADVPL so posi ci onai s, ou sej a, na
sua passagem no i mport a o nome da vari vel e si m a sua posio dent r o da li st a de
parmet ros, o que permi t e execut ar uma funo escr evendo:

Cal cul a( parA, parB, par C) / / Chamada da funo em uma rot i na

E a f u no est ar escr i t a:

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

... Comandos da Funo

Ret urn .. .


Nest e caso, x assume o val or de parA, y de par B e z de parC.

A funo t ambm t em a facul dade de r et ornar uma vari vel , podendo i ncl usi ve ser um Ar ray.
Para t al encer ra- se a funo com:

Ret ur n( campo)

Assi m A : = Cal cul a( parA,parB,parC) at ri bui A o cont edo do r et orno da funo
Cal cul a.

No ADVPL exi st em milhares de funes escri t as pel a equipe de Tecnol ogi a Mi crosi ga,
pel os anali st as de supor t e e pel os pr pri os usuri os.



Exi st e um di t ado que di z que:

Vale mais um pr ogramador que conhece t odas as funes disponvei s em
uma linguagem do que aquele que, mesmo sendo gnio, reinvent a a roda a
cada novo programa .

No DEM ( Document ao El et r ni ca Mi crosi ga) mai s de 500 est o document adas, e est e
nmero t ende a aument ar exponenci al ment e com os novos pr ocessos de document ao que
est o em i mpl ant ao na Tecnol ogi a e I nt el i gnci a Prot heus.

O obj et i vo do cur so apresent ar, demonst r ar e fi xar a ut ilizao das pri nci pai s funes,
si nt axes e est rut uras ut ili zadas em ADVPL.

No ADVPL, at os pr ogramas chamados do menu so funes, sendo que em um reposi t ri o
no podem haver funes com o mesmo nome, e para permi t i r que os usuri os e anal i st as

- 74 -

ADVPL Compl et o


possam desenvol ver suas prpri as funes sem que as mesmas confli t em com as j
di sponvei s no ambi ent e ERP, foi i mpl ement ada pel a Tecnol ogi a Mi crosi ga um t i po especi al de
funo denomi nado User Funct i on .

Nos t pi cos a segui r sero det al hados os t i pos de funes di sponvei s na li nguagem ADVPL,
suas formas de ut ili zao e r espect i vas di ferenas.


7.1. Ti pos e escopos de f unes

Em ADVPL podem ser ut ilizados os segui nt es t ipos de funes:

E Funct i on( )
E User Funct i on ( )
E St at i c Fu nct i on( )
E Mai n Funct i on( )

Funct i on( )

Funes ADVPL convenci onai s, rest ri t as ao desenvol vi ment o da rea de I nt eli gnci a Prot heus
da Mi crosi ga.

O i nt erpr et ador ADVPL di st i ngue nomes de funes do t i po Funct i on( ) com at dez caract eres.
A part i r do dci mo car act er, apesar do compi l ador no i ndi car quai squer t i pos de er ros, o
i nt erpr et ador i gnorar os demai s caract eres.

Ex empl o:

/ / Font e MATA100I NCL. PRW
# I NCLUDE "pr ot heus. ch"

Funct i on MATA100I NCL01( )

ALERT( "01")
Ret urn

Funct i on MATA100I NCL02( )

ALERT( "02")
Ret urn

Ao execut ar a funo MATA100I NCL01( ) ser exi bi da a mensagem 01 , mas ao execut ar a
funo MATA100I NCL02( ) t ambm ser exi bi da a mensagem 01 , poi s o i nt erpret ador
consi dera o nome da funo como MATA100I NC .



1. Funes do t i po Funct ion( ) soment e podem ser execut adas at ravs
dos mdul os do ERP.

2. Soment e poder o ser compil adas funes do t i po Funct i on( ) se o MP-
I DE possui r uma aut ori zao especi al forneci da pel a Mi crosi ga.

3. Funes do t i po Funct i on( ) so acessvei s por quai squer out r as
funes em uso pel a apli cao.


- 75 -

ADVPL Compl et o



User Funct i on ( )

As User Defi ned Funct ions ou funes defi ni das pel os usuri os, so t i pos especi ai s de funes
i mpl ement ados pel o ADVPL para garant i r que desenvol vi ment os especfi cos no r eal i zados pel a
I nt el i gnci a Prot heus da Mi crosi ga sobr eponham as funes padres desenvol vi das para o ERP.

O i nt erpr et ador ADVPL consi dera que o nome de uma User Funct i on compost o pel o nome
defi ni do para a funo precedi do dos caract er es U_ . Dest a forma a User Funct i on XMAT100I
ser t rat ada pel o i nt erpret ador como U_XMAT100I .



1. Como ocorr e o acr sci mo dos caract er es U_ no nome da funo e o
i nt erpr et ador consi dera apenas os dez pri mei ros caract er es da funo
para sua di fer enci ao, r ecomendado que os nomes das User
Funct i ons t enham apenas oi t o caract er es para evi t ar r esul t ados
i ndesej ados durant e a execuo da apli cao.

2. Funes do t i po User Funct i on so acessvei s por quai squer out ras
funes em uso pel a apli cao, desde que em sua chamada sej am
ut ili zados os caract er es U_ em conj unt o com o nome da funo.



As User Funct i ons podem ser execut adas a par t i r da t el a ini ci al do cli ent do
ERP ( Mi crosi ga Prot heus Remot e) , mas as apli caes que pret endem
di sponi bili zar est a opo devem possui r um pr eparo adi ci onal de ambi ent e.

Para mai or es i nformaes consul t e no DEM o t pi co sobr e pr eparao de
ambi ent e e a document ao sobr e a funo RpcSet Env( ) .


St at i c Fu nct i on( )

Funes ADVPL t radi cionai s, cuj a vi sibili dade est rest ri t a as funes descri t as no mesmo
arqui vo de cdi go font e no qual est o defi ni das.

Ex empl o:

/ / Font e FI NA010.PRW

Funct i on FI NA010( )

Cri aSx1( FI N010 )
Ret urn

St at i c Funct i on CRI ASX1( )
/ / Font e FI NA020.PRW

Funct i on FI NA020( )

Cri aSx1( FI N020 )
Ret urn

St at i c Funct i on CRI ASX1( )


- 76 -

ADVPL Compl et o



No exempl o aci ma, exi st em duas funes denomi nadas CRI ASX1( ) defi ni das em arqui vos de
cdi go font e di st i nt os: FI NA010.PRW e FI NA020.PRW.

A funo FI NA010( ) t er vi si bilidade apenas da funo CRI ASX1( ) defi ni da no arqui vo de
cdi go font e FI NA010.PRW, sendo que o mesmo ocor re com a funo FI NA020( ) .

Est e r ecur so permi t e i sol ar funes de uso excl usi vo de um arqui vo de cdi go font e, evi t ando a
sobr eposi o ou dupli cao de funes na apli cao.

Nest e cont ext o as St at i c Funct i ons( ) so ut ili zadas para:

1. Padroni zar o nome de uma det ermi nada funo, que possui a mesma fi nali dade, mas
que sua i mpl ement ao pode vari ar de acordo com a necessi dade de funo pri nci pal /
apli cao.

2. Redefi ni r uma funo padro da apli cao, adequando- a as necessi dades especfi cas de
uma funo pri nci pal / apli cao.

3. Prot eger funes de uso especfi co de um arqui vo de cdi go font e / funo pri nci pal .



O ambi ent e de desenvol vi ment o ut ili zado na apli cao ERP ( MP- I DE) vali da
se exi st em Funct i ons( ) , Mai n Funct i ons( ) ou User Funct i ons( ) com o mesmo
nome mas em arqui vos de cdi go font es di st int os, evi t ando a dupli ci dade ou
sobr eposi o de funes.


Mai n Funct i on( )

Mai n Funct i on( ) out ro t i po de funo especi al do ADVPL i ncorporado para permi t ir
t rat ament os di fer enci ados na apl i cao ERP.

Uma Mai n Funct i on( ) t em a car act erst i ca de poder ser execut ada at ravs da t el a i ni ci al de
parmet ros do cli ent do ERP ( Mi cr osi ga Pr ot heus Remot e) , da mesma forma que uma User
Funct i on, com a di ferena que as Mai n Funct i ons soment e podem ser desenvol vi das com o uso
da aut ori zao de compil ao, t ornando sua ut ilizao r est ri t a a I nt el i gnci a Prot heus da
Mi crosi ga.

Na apli cao ERP comum o uso das Mai n Funct i ons( ) nas segui nt es si t uaes:

1. Defi ni o dos mdul os da apli cao ERP: Mai n Funct i on Si gaadv( )

2. Defi ni o de at uali zaes e updat es: AP710TOMP811( )

3. At uali zaes especfi cas de mdul os da apl i cao ERP: Updat eATF( )

- 77 -

ADVPL Compl et o



7.2. Passagem de par met r os ent r e f unes

Como menci onado ant eri orment e os parmet r os das funes descri t as ut ilizando a li nguagem
ADVPL so posi ci onai s, ou sej a, na sua passagem no i mport a o nome da vari vel e si m a
sua posi o dent r o da li st a de parmet ros.

Compl ement ando est a defi ni o, podem ser ut ilizadas duas formas di st i nt as de passagens de
parmet ros para funes descri t as na li nguagem ADVPL:

E Passagem de parmet ros por cont edo
E Passagem de parmet ros por refernci a

Passagem de par met r os por cont e do

A passagem de parmet ros por cont edo a forma convenci onal de defi ni o dos parmet ros
recebi dos pel a funo chamada, na qual a funo recebe os cont edos passados pel a funo
chamadora, na ordem com os quai s so i nformados.


User Funct i on Cal cFat or ( nFat or)

Local nCnt
Local nResul t ado : = 0

For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt

Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ;
" " + cVal ToChar( nResul t ado) )

Ret urn



Avali ando a funo Cal cFat or( ) descri t a ant eri orment e podemos veri fi car que a mesma r ecebe
como par met ro para sua execuo a vari vel nFat or.

Com base nest a funo podemos descr ever duas forma de passagem de parmet r os por
cont edo:

E Passagem de cont edos di r et os
E Passagem de v ar i v ei s como cont e dos

Ex empl o 01 Passagem de cont e dos di r et os

User Funct i on Di rFat or( )

Local nResul t ado : = 0

nResul t ado : = Cal cFat or ( 5)



- 78 -

ADVPL Compl et o


A passagem de cont edos di ret os i mpli ca na defi ni o explcit a do val or do parmet ro na
execuo da chamada da funo. Nest e caso foi i nformado o cont edo 5 ( numri co) como
cont edo para o pri mei ro parmet ro da funo Cal cFat or.

Como a l i nguagem ADVPL t r at a os parmet r os de for ma posi ci onal , o cont edo 5 ser at ri budo
di ret ament e a vari vel defi ni da como pri mei ro parmet ro da funo chamado, no nosso caso
nFat or.

Por ser uma at ri bui o de par met ros por cont edo, o i nt erpret ador da li nguagem basi cament e
execut a uma operao de at ri bui o normal , ou sej a, nFat or : = 5.



Duas caract erst i cas da linguagem ADVPL t or nam necessri a uma at eno
especi al na chamada de funes:

1. A li nguagem ADVPL no uma linguagem t i pada, de for ma que as
vari vei s no t em um t ipo previ ament e defi ni do, acei t ando o cont edo
que l hes for i mpost o at r avs de uma at ri bui o.

2. Os parmet ros de uma funo so at ri budos de acordo com a ordem
com os quai s so defi ni dos na chamada da mesma. No real i zada
nenhum t i po de consi st nci a em rel ao aos t i pos dos cont edos e
obri gat ori edade de parmet r os nest a ao.





Os par met ros de uma funo so caract eri zados como vari vei s de escopo
LOCAL para efei t o de execuo.

Dest a forma os mesmos no devem ser defi ni dos novament e como LOCAL na
rea de defi ni o e i ni ci alizao de vari vei s, poi s caso i st o ocor ra haver a
perda dos val or es r ecebi dos pel a redefi ni o das vari vei s na funo.

Caso sej a necessri o garant i r um cont edo padro para um det er mi nado
parmet ro dever ser ut ili zado o i dent i fi cador DEFAULT conforme det al hado
no t pi co Trat ament o de val or es padr es para parmet ros de funes .


Ex empl o 02 Passagem de v ar i v ei s como cont edos

User Funct i on Di rFat or( )

Local nResul t ado : = 0
Local nFat orUser : = 0

nFat orUser : = Get Fat or ( ) / / Funo il ust rat i va na qual o usuri o i nforma o fat or a ser ut i lizado.

nResul t ado : = Cal cFat or ( nFat or User )


A passagem de cont edos como vari vei s i mpli ca na ut ili zao de vari vei s de apoi o par a
execut ar a chamada de uma funo. Nest e caso foi i nformada a vari vel nFat orUser, a qual
ser defi ni da pel o usuri o at ravs da funo il ust rat i va Get Fat or( ) . O uso de vari vei s de apoi o
fl exi biliza a chamada de out ras funes, poi s el as sero paramet ri zadas de acordo com as
necessi dades daquel e processament o especfi co no qual se encont ra a funo chamadora.

- 79 -

ADVPL Compl et o



Como a l i nguagem ADVPL t rat a os parmet r os de forma posi ci onal , o cont edo da vari vel
nFat orUser ser at ri budo di ret ament e a vari vel defi ni da como pri mei ro parmet r o da funo
chamado, no nosso caso nFat or.

Por ser uma at ri bui o de par met ros por cont edo, o i nt erpret ador da li nguagem basi cament e
execut a uma operao de at ri bui o normal , ou sej a, nFat or : = nFat or User.



A passagem de parmet r os no necessi t a que as vari vei s i nformadas na
funo chamadora t enham os mesmos nomes das vari vei s ut ilizadas na
defi ni o de parmet r os da funo chamada.

Dest a forma podemos t er:

User Funct i on Di rFat or( )

Local nFat orUser : = Get Fat or( )

nResul t ado : = Cal cFat or ( nFat or User )

...


Funct i on Cal cFat or( nFat or )
...


As vari vei s nFat orUser e nFat or podem t er nomes di fer ent es poi s o
i nt erpr et ador far a at ri bui o de cont edo com base na ordem dos
parmet ros e no pel o nome das vari vei s.


Passagem de par met r os por r ef er nci a

A passagem de par met r os por refernci a uma t cni ca mui t o comum nas linguagens de
programao a qual per mi t e que vari vei s de escopo LOCAL t enham seu cont edo mani pul ado
por funes especfi cas, mant endo o cont r ol e dest as vari vei s rest ri t o a funo que as defi ni u e
as funes desej adas pel a apli cao.

A passagem de parmet ros por refernci a ut iliza o concei t o de que uma vari vel uma rea
de memri a e port ant o passar um parmet ro por refernci a nada mai s do que ao i nvs de
passar o cont edo par a a funo chamada, passar qual a rea de memri a ut ilizada pela
vari vel passada.


- 80 -

ADVPL Compl et o




Passagem de par met r os t r adi ci onal Duas var i vei s x Duas r eas de memr i a



Passagem de par met r os por r ef er nci a Duas var i vei s x uma ni ca r ea de memr i a






- 81 -

ADVPL Compl et o


Dest a forma a funo chamada t em acesso no apenas ao cont edo, mas a vari vel em si ,
poi s a rea de memri a a vari vel , e qual quer alt erao nest a ser vi svel a funo
chamadora quando t i ver o r et orno da funo chamadora.




Tr at ament o de cont edos padr es par a par met r os de f unes

O t rat ament o de cont edos padres para parmet r os de funes muit o ut ilizado nas funes
padres da apl i cao ERP, de for ma a garant i r a corr et a execuo dest as funes por qual quer
funo chamadora, evi t ando si t uaes de ocor rnci as de err os pel a fal t a da defi ni o de
parmet ros necessri os a cor ret a ut ili zao da funo.


A li nguagem ADVPL no obri ga a passagem de t odos os parmet r os descri t os
na defi ni o da funo, sendo que os parmet r os no i nformados sero
consi derados com cont edo nul o.

Dest a forma o uso do i dent i fi cador DEFAULT permi t e ao desenvol vedor garant i r que na
ut ili zao da funo det ermi nados parmet ros t ero o val or com um t i po adequado a funo.

Ex empl o:

User Funct i on Cal cFat or ( nFat or)

Local nCnt
Local nResul t ado : = 0
Defaul t nFat or : = 1

For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt

Ret urn nResul t ado


No exempl o descri t o, caso o parmet r o nFat or no sej a i nformado na funo chamadora, o
mesmo t er seu cont edo defi ni do como 1.


- 82 -

ADVPL Compl et o


Se est e t r at ament o no fosse reali zado e com i sso o parmet r o nFat or no fosse i nformado,
ocor reri a o segui nt e event o de err o:

Ex empl o:

User Funct i on Cal cFat or ( nFat or)

Local nCnt
Local nResul t ado : = 0

For nCnt : = nFat or To 1 St ep - 1 / / nFat or est como Nul o, port ando nCnt nul o
nResul t ado * = nCnt
Next nCnt / / Ao efet uar o Next , o i nt erpret ador real i za a ao nCnt + = 1.

Ret urn nResul t ado


Como o i nt erpret ador real i zar a ao nCnt + = 1, e o cont edo da vari vel nCnt nul o
ocor rer o er ro de t ype mi smat h on + = , expect ed N U poi s os t i pos das vari vei s
envol vi dos na operao so di ferent es: nCnt nul o ( U) e 1 numri co ( N) .


Caso o parmet r o que possui a opo DEFAULT descri t a no font e sej a
i nformado, a li nha de DEFAULT no ser execut ada, mant endo dest a forma o
cont edo passado pel a funo chamadora.




















- 83 -

ADVPL Compl et o



8. Di r et i vas de compi l ao

O compi l ador ADVPL possui uma funci onali dade denomi nada pr- pr ocessador, o qual nada
mai s do que um programa que exami na o programa font e escri t o em ADVPL e execut a cert as
modi fi caes nel e, baseadas nas Di r et i vas de Compil ao.

As di ret i vas de compil ao so comandos que no so compi l ados, sendo di ri gidos ao pr -
processador, o qual execut ado pel o compil ador ant es da execuo do processo de
compi l ao propri ament e di t o.

Port ant o, o pr - pr ocessador modi fi ca o programa font e, ent regando para o compi l ador um
programa modi fi cado de acordo com as di ret i vas de compi l ao, as so i ni ci adas pel o caract er e
# .

As di ret i vas podem ser col ocadas em qual quer part e do programa, sendo que as
i mpl ement adas pel a li nguagem ADVPL so:

E # I NCLUDE
E # DEFI NE
E # I FDEF
E # I FNDEF
E # ELSE
E # ENDI F
E # COMMAND


Lembr e- se

As di ret i vas de compil ao t ambm so conheci das como UDC User Defi ned
Commands.


Di r et i v a: # I NCLUDE

A di ret i va # I NCLUDE indi ca em que arqui vo de ext enso CH ( padro ADVPL) est o os UDCs
a ser em ut ili zados pel o pr- pr ocessador.

A apli cao ERP possui di versos i ncl udes, os quai s devem ser ut i lizados segundo a apl i cao
que ser desenvol vi da, o que permi t i r a ut ilizao de r ecursos adi cionai s defi ni dos para a
linguagem, i mpl ement ados pel a rea de Tecnol ogi a da Mi crosi ga.

Os i ncl udes mai s ut ili zados nas apli caes ADVPL desenvol vi das par a o ERP so:

E PROTHEUS.CH: di ret ivas de compi l ao padres par a a linguagem. Cont m a
especi fi cao da mai or i a das sint axes ut ili zadas nos font es, i ncl usive permi t i ndo a
compat i bilidade da si nt axe t radi ci onal do Cli pper para os novos r ecur sos i mpl ement ados
no ADVPL.

- 84 -

ADVPL Compl et o



O i ncl ude PROTHEUS.CH ai nda cont m a r efernci a a out ros i ncl udes ut ili zadas pel a
linguagem ADVPL que compl ement am est a funci onali dade de compat i bilidade com a
si nt axe Cli pper, t ai s como:

o DI ALOG.CH
o FONT.CH
o I NI .CH
o PTMENU.CH
o PRI NT. CH



Fi que at ent o

A ut ilizao do i ncl ude prot heus.ch nos font es desenvol vi dos para a
apli cao ERP Pr ot heus obri gat ri a e necessri a ao cor ret o
funci onament o das apl i caes.


E AP5MAI L. CH: Permi t e a ut ili zao da si nt axe t radi ci onal na defini o das segui nt es
funes de envi o e r ecebi ment o de e- mai l :

o CONNECT SMTP SERVER
o CONNECT POP SERVER
o DI SCONNECT SMTP SERVER
o DI SCONNECT POP SERVER
o POP MESSAGE COUNT
o SEND MAI L FROM
o GET MAI L ERROR
o RECEI VE MAI L MESSAGE

E TOPCONN.CH: Permi t e a ut ili zao da si nt axe t radi ci onal na defi ni o das segui nt es
funes de i nt egrao com a ferrament a TOPCONNECT ( MP10 DbAcess) :

o TCQUERY

E TBI CONN.CH: Permi t e a ut ili zao da si nt axe t radi ci onal na defi ni o de conexes com
a apli cao Server do ambi ent e ERP, at ravs da segui nt es si nt axes:

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: Permi t e a ut ili zao da si nt axe t radi ci onal na mani pul ao de arqui vos e
st ri ngs no padro XML, at ravs das segui nt es si nt axes:

o CREATE XMLSTRI NG
o CREATE XMLFI LE
o SAVE XMLSTRI NG
o SAVE XMLFI LE

- 85 -

ADVPL Compl et o


o ADDI TEM TAG
o ADDNODE NODE
o DELETENODE


Os recursos de t rat ament os de e- mail s, int egrao com a ferr ament a
TOPCONNECT ( DbAcess) , pr eparao de ambi ent es e mani pul ao de
arqui vos e st ri ngs do padro XML sero abordados no curso de ADVPL
Avanado.



O di ret ri o de i ncludes deve ser especi fi cado no ambi ent e de
desenvol vi ment o do ERP Prot heus ( MP- I DE) para cada confi gurao de
compi l ao di sponvel .

Caso o di ret ri o de i ncl udes no est ej a i nformado, ou est ej a i nfor mado
i ncorret ament e ser exi bi da uma mensagem de err o i nformando:

No f oi possv el cr i ar o ar qu i v o < cami nho\ nome> .ERX




As funes desenvol vi das para a apl i cao ERP cost umam ut ili zar i ncl udes
para defi ni r o cont edo de st ri ngs e vari vei s di versas ut ili zadas pel a
apli cao em di ferent es i di omas. Dest a forma normal veri fi car que um
font e possui um arqui vo .CH com o mesmo nome, o que caract eri za est e
t i po de i ncl ude.


Di r et i v a: # DEFI NE

A di ret i va # DEFI NE per mi t e que o desenvol vedor cri e novos t ermos para ser em ut ilizadas no
cdi go font e. Est e t er mo t em o efei t o de uma vari vel de escopo PUBLI C, mas que afet a
soment e o font e na qual o # DEFI NE est defi ni do, com a caract er st i ca de no permi t i r a
al t erao de seu cont edo.

Dest a forma um t er mo defi ni do at ravs da di ret i va # DEFI NE pode ser consi derado como uma
const ant e.



Os arqui vos de i nclude defi ni dos para os font es da apli cao ERP cont m
di ret i vas # DEFI NE para as st ri ngs de t ext os de mensagens exi bi das para os
usuri os nos t r s i di omas com os quai s a apli cao di st ri buda: Port ugus,
I ngl s e Espanhol .

Por est a razo a apli cao ERP possui t rs reposi t ri os di st i nt os para cada
uma das bases de dados homol ogadas pel a Mi crosi ga, poi s cada compi l ao
ut ili za uma di ret i va referent e ao seu i di oma.





- 86 -

ADVPL Compl et o



Di r et i v as: # I FDEF, I FNDEF, # ELSE e # ENDI F

As di ret i vas # I FDEF, # I FNDEF, # ELSE e # ENDI F permi t em ao desenvol vedor cri ar font es
fl exvei s e sensvei s a det ermi nadas confi guraes da apl i cao ERP.

At ravs dest as di ret i vas, podem ser veri fi cados parmet r os do si st ema, t ai s como o i di oma
com o qual est paramet ri zado e a base de dados ut ili zada para armazenar e ger enci ar as
i nformaes do ERP.

Dest a forma, ao i nvs de escr ever doi s ou mai s cdi gos font es que r eal i zam a mesma funo,
mas ut ilizando recursos di st i nt os para cada base de dados ou exi bi ndo mensagem para cada
um dos i di omas t rat ados pel a apl i cao, o desenvol vedor pode pr eparar seu cdi go font e para
ser aval i ado pel o pr- processador, o qual i r gerar um cdi go compi l ado de acordo com a
anli se dos parmet ros de ambi ent e.

Est as di ret i vas de compil ao est o normal ment e associ adas as seguint es veri fi caes de
ambi ent e:

E I di oma: veri fi ca as vari vei s SPANI SH e ENGLI SH, di sponi bilizadas pel a apli cao. O
i di oma port ugus det ermi nado pel a exceo:


# I FDEF SPANI SH
# DEFI NE STR0001 Hol a ! ! !
# ELSE

# I FDEF ENGLI SH
# DEFI NE STR0001 Hel lo ! ! !
# ELSE
# DEFI NE STR0001 Ol ! ! !
# ENDI F

# ENDI F




Apesar da est rut ura semel hant e ao I F- ELSE- ELSEI F- ENDI F, no exi st e
a di ret i va de compil ao # ELSEI F, o que t or na necessri o o uso de
di versos # I FDEFs par a a mont agem de uma est rut ura que seria
faci l ment e sol uci onada com I F- ELSE- ELSEI F- ENDI F.



A apli cao ERP di sponi biliza a vari vel de escopo PUBLI C -
__LANGUAGE, a qual cont m uma st ri ng que i dent i fi ca o i di oma em
uso pel o si st ema, cuj o os cont edos possvei s so:

E PORTUGUESE
E SPANI SH
E ENGLI SH




- 87 -

ADVPL Compl et o


E Banco de Dados: veri fi ca as vari vei s AXS e TOP para det ermi nar se o banco de dados
em uso pel a apli cao est no formado I SAM ( DBF, ADS, CTREE, et c.) ou se est
ut ili zando a fer rament a TOPCONNECT ( DbAcess) .


# I FDEF TOP

cQuery : = SELECT * FROM + RETSQLNAME( SA1 )
dbUseAr ea( . T., "TOPCONN", TcGenQr y( ,, cQuer y) , SA1QRY , .T. ,.T.)

# ELSE
DbSel ect Ar ea( SA1 )
# ENDI F



Os bancos de dados padro AS400 no permi t em a execuo de quer i es
no format o SQLANSI at r avs da ferrament a TOPCONNECT ( DbAcess) .

Dest a forma necessri o r eal izar uma veri fi cao adi ci onal ao # I FDEF
TOP ant es de execut ar uma query, que no caso r eal i zada at ravs do
uso da funo TcSrvType( ) , a qual ret orna a st r i ng AS/ 400 quando est e
for o banco em uso.

Para est es bancos deve ser ut ili zada a si nt axe ADVPL t radi ci onal .


Di r et i v a: # COMMAND

A di ret i va # COMMAND ut ili zada pri nci pal ment e nos i ncludes da li nguagem ADVPL para
efet uar a t raduo de comandos em si nt axe CLI PPER para as funes i mpl ement adas pel a
Tecnol ogi a Mi crosi ga.

Est a di ret i va permi t e que o desenvol vedor defi na para o compi l ador como uma expresso
dever ser i nt erpret ada.

Tr echo do ar qu i v o PROTHEUS.CH

# xcommand @ < nRow> , < nCol > SAY [ < oSay> < l abel : PROMPT,VAR > ] < cText > ;
[ PI CTURE < cPi ct > ] ; [ < dl g: OF,WI NDOW, DI ALOG > < oWnd> ] ;
[ FONT < oFont > ] ; [ < l Cent er: CENTERED, CENTER > ] ;
[ < l Right : RI GHT > ] ; [ < l Border: BORDER > ] ;
[ < l Pi xel : PI XEL, PI XELS > ] ; [ < col or: COLOR,COLORS > < nCl rText > [ ,< nCl rBack> ] ] ;
[ SI ZE < nWi dt h> , < nHei ght > ] ; [ < desi gn: DESI GN > ] ;
[ < updat e: UPDATE > ] ; [ < l Shaded: SHADED, SHADOW > ] ;
[ < l Box: BOX > ] ; [ < l Rai sed: RAI SED > ] ;
= > ;
[ < oSay> : = ] TSay ( ) : New ( < nRow> , < nCol > , < { cText } > ,;
[ < oWnd> ] , [ < cPi ct > ] , < oFont > , < .l Cent er. > , < .l Ri ght .> , < .l Border.> ,;
< .l Pi xel .> , < nCl rText > , < nCl rBack> , < nWi dt h> , < nHei ght > ,;
< .desi gn.> , < .updat e.> , < .l Shaded.> , < .l Box.> , < .l Rai sed.> )


At ravs da di ret i va # COMMAND, o desenvol vedor det ermi nou as regras para que a si nt axe
t radi ci onal da linguagem CLI PPER para o comando SAY fosse conver t i da na especi fi cao de
um obj et o TSAY( ) do ADVPL.

- 88 -

ADVPL Compl et o



MDULO 03: Desenvol vendo pequenas cust omi zaes

9. ADVPL e o ERP Mi cr osi ga Pr ot heus

O ADVPL ( Advanced Pr ot heus Language) uma linguagem de programao desenvol vi da pela
Mi crosi ga e que cont m t odas as inst rues e funes necessri as ao desenvol vi ment o de
um si st ema, i ndependent e de sua compl exi dade.

O PROTHEUS, por out r o l ado, uma pl at afor ma t ecnol gi ca que engl oba um Servi dor de
Apli cao, um Di ci onrio de Dados e as I nt erfaces para conexo com o usuri o. o Prot heus
que execut a o cdi go ADVPL e o devi do acesso base da dados.

O Pr ot heus compost o pel o ERP ( que engl oba, al m das funcionali dades descri t as nos
capt ul os ant eri ores, mai s de t ri nt a vert i cai s apli cadas a reas especfi cas de negci os) e
pel o Confi gurador ( programa que permi t e cust omi zar o si st ema s necessi dades do usuri o
de forma fcil ) .

9.1. O Ambi ent e Pr ot heus

O Pr ot heus const i t udo de um conj unt o de Soft war es que compem as camadas de
funci onali dades bsi cas aos servi os de apl icao, i nt erface, banco de dados e reposi t ri o,
conforme o di agrama da fi gura abai xo:




O obj et i vo do TOTVS DevSt udi o faci li t ar a t arefa de escr ever programas: at ravs de cor es,
i ndi ca se a pal avra escri t a uma i nst ruo, uma vari vel ou um coment ri o; organi za a
bi bli ot eca de programas em pr oj et os e admi nist ra o reposi t ri o de obj et os; apont a er ros de
Fi gu r a: Camadas bsi cas do ambi ent e Pr ot heu s


Para execut ar um progr ama desenvol vi do em ADVPL, pr eci so ant es de mai s nada escr ev- l o
e compi l - l o. Est e procedi ment o fei t o at ravs da ferrament a TOTVS DevSt udi o do
Prot heus ( Tot vs Devel opment St udi o) .


- 89 -

ADVPL Compl et o


si nt axe; permi t e o debug ( execuo passo a passo do pr ograma, veri fi cando o cont edo das
vari vei s) e fornece assi st ent es ( model os) de pr ogramas.


E Prot eger o pr ograma font e, evi t ando que sej a al t erado i ndevi dament e, poi s soment e os
obj et os so di st ri budos com uma execuo mai s rpi da em funo da compi l ao no
DEV- St udi o;
Fi gu r a: Man ut eno n o r eposi t r i o de obj et os


Aps compil ar o programa, o resul t ado um obj et o, o qual carregado na memri a fi cando
di sponvel para sua execuo at ravs da apl i cao PROTHEUS.

O obj et o no um execut vel , ou sej a, no est convert i do para a linguagem nat i va do
equi pament o. Quem faz esse t rabal ho o Prot heus Server em t empo de execuo. Por i sso, o
Prot heus Ser ver est sempre pr esent e na memri a em t empo de execuo, permi t i ndo:


E Fl exi bilizao pl at afor ma de t rabal ho. Assi m, um mesmo programa pode rodar em
ambi ent es Wi ndows, Li nux ou mesmo em um Hand Hel d, fi cando a t arefa de adequao
para o Servi dor Pr ot heus;

E Que o si st ema cresa de forma i limi t ada, poi s os obj et os fi cam fora do execut vel ;

E O uso de macr o subst i t ui es, ou sej a, o uso de r ot i nas ext eri ores ao si st ema
armazenadas em arqui vos e que podem faci l ment e al t eradas pel o usur i o, poi s o Ser ver
t ambm i nt erpr et a o cdi go font e em t empo de execuo.


- 90 -

ADVPL Compl et o




Fi gu r a: Di agr ama esquemt i co de obj et os Pr ot heus

O Reposi t ri o de Obj et os a bi bli ot eca de obj et os de t odo o ambi ent e Pr ot heus, i ncl uindo
t ant o os obj et os i mpl ement ados par a as funcionali dades bsi cas do ERP como aquel es gerados
pel os usuri os. A fi gura abai xo demonst ra a est rut ura e a i nt erconexo ent re as vri as
camadas.



Fi gu r a: Est r ut ur a de i nt er conex o do Pr ot h eus


- 91 -

ADVPL Compl et o


El a demonst ra t ambm que os dados a ser em processados podem est ar armazenados em
bases I SAM ou em Bancos de Dados padro SQL. No pri mei ro caso o server comuni ca- se
di ret ament e com os dados. Em Bancos SQL a i nt erface TOPCONNECT / DBACCESS que
convert e os comandos de ent rada e sada, adequando- os ao SQL ut ili zado ( SQl Server
Mi crosoft , Oracl e, DB2, et c.) .

Uma vez t ermi nado o processament o do obj et o chamado, o el e descart ado da memri a, ou
sej a, o Prot heus um si st ema que pode cr escer de forma i limi t ada poi s os obj et os,
armazenados em um reposi t ri o prat i cament e no ocupam espao no HD ( Hard Di sk) .

O Pr ot heus uma pl at afor ma mul t i camada. Ent re as di versas camadas, t emos a i nt erface de
apresent ao ao usuri o ( Remot e) , o t rat ament o dado para as r egras de negci o
i mpl ement adas ( Server) , o acesso aos obj et os do reposi t ri o ( Ser ver) , o acesso aos
dados di sponvei s no Banco de Dados ( Ser ver ou TOPCONNECT / DBACCESS ) e ao
ger enci ament o de ser vi os WEB ( Ser ver) . Nest e processo, o Prot heus possui , basi cament e,
quat ro apl i cat i vos ut ilizados com di fer ent es fi nali dades:

E Pr ot heus Ser v er / TOTVS AppSer v er : Responsvel pel a comuni cao ent re o cl i ent e,
o banco de dados e o RPO. O nome do execut vel depende da ver so do si st ema
( TOTVSAPPSERVER. EXE) sendo que as pl at aformas I SAM suport adas pel o Pr ot heus
Ser ver so DBF e CTREE.

E Pr ot heus Remot e / TOTVS Smar t Cl i ent : I nst al ado no Server ou na est ao. O
nome t ambm depende da ver so do si st ema ( TOTVSSMARTCLI ENT. EXE) .

E TopCon nect / DbAccess: Responsvel pel a converso dos comandos de banco de
dados, adequando- os ao SQL ut ili zado.

E Pr ot heus Moni t or / TOTVS Moni t or : Progr ama de anli se que veri fi ca quem est
usando o si st ema e possi bilit a o envi o de mensagens ou mesmo derrubar conexes
( TOTVSMONI TOR.EXE) .

Al guns nomes r efer em- se a um conj unt o de pr ogramas para facili t ar a sua i dent i fi cao:

E RPO: o arqui vo bi nrio do APO ( Advanced Prot heus Obj ect s) , ou sej a, os obj et os.

E Bui l d: Execut vei s, DLLs e o RPO compl et o.

E Pat ch : At uali zaes pont uai s do RPO, apl i cadas por mei o do I DE.

E Updat e: Pacot e de at ualizao para o r eposi t ri o ( RPO) li berado peri odi cament e
cont endo t odas as adequaes e mel hori as di sponi bili zadas para o si st ema em um
det ermi nado perodo, sendo no cumul at i vo, apli cadas por mei o do DEV- St udi o.

A i nt erface de apr esent ao r eali zada pel o Smart Cli ent que pr ocessa a part e da est ao,
basi cament e, t el a e t ecl ado. Pode est ar gravado no Server e ser car regado vi a rede para a
memri a da est ao. Ou, de pr efernci a, deve fi car ar mazenado no HD da est ao. Pode
t ambm ser carr egado pel o I nt ernet Expl orer, rodando dent r o do prpri o browser com o
Smart Cli ent Act i veX e permi t i ndo o acesso ao Prot heus Server pel a I nt ernet , com as mesmas
funci onali dades do Smart Cli ent , sendo que o browser preci sa supor t ar o uso da t ecnol ogi a
Act i veX.

Caso exi st a al gum Fi rewall ou Proxy ent r e o WEB Server e o Br owser que vai acessar o
Smart Cli ent Act i veX, el es devero ser confi gurados para permi t i r o seu downl oad.

- 92 -

ADVPL Compl et o



9.2. Or gani zao e conf i gur ao i ni ci al do ambi ent e Pr ot heus

O Prot heus ocupa uma past a que t em a segui nt e est rut ura:



. APO: Cont m o arqui vo RPO, r eposi t ri o de obj et os do Pr ot heus.
Fi gu r a: Est r ut ur a bsi ca das past as do Pr ot heu s

. SMARTCLI ENT: Rene um conj unt o de arqui vos execut vei s, dl l s e arqui vos de
confi gurao do si st ema, para possi bilit ar o acesso ao servi dor.
. APPSERVER: Rene um conj unt o de execut vei s, dll s e arqui vos de confi gurao do
si st ema que compem o servi dor.
. I NCLUDE: Cont m as bi bli ot ecas necessri as para a compi l ao de programas
Prot heus.
. DATA: Cont m a base de dados no caso de ver so I SAM.
. SAMPLES: Ofer ece um conj unt o de pr ogramas exempl o e arqui vos ADVPL padr es da
Mi crosi ga.
. SPOOL: Nest a past a so gravados os rel at ri os gerados em di sco pel o si st ema
Prot heus.
. SYSTEM: Cont m os arqui vos de menus, os arqui vos de confi guraes e os arqui vos
de cust omi zaes ( SXs) do si st ema Prot heus.




- 93 -

ADVPL Compl et o


. SYSTEMLOAD: Cont m o di ci onri o de dados em format o TXT. nest e arqui vo que
est o t odos os padres e format os para a ger ao dos arqui vos de confi guraes e de
cust omi zaes ( SXs) , conforme a l ocal izao de pas defi ni da pel o usuri o na ent rada
do si st ema.
. MY PROJECTS: Suger e- se a cri ao dest a past a para armazenar pr oj et os e font es das
cust omi zaes real i zadas pel o usuri o.
. UPDATES: Suger e- se est a past a para o ar mazenament o das at uali zaes a ser em
apli cadas no si st ema Pr ot heus.

Apesar da est rut ura il ust rada ant eri orment e i ndi car que as past as est o subordi nadas past a
PROTHEUS, possvel que al gumas del as possam est ar em mqui nas di ferent es ou at mesmo
em ambi ent es comput aci onai s di ferent es.


Fi gu r a: For mas de i nst al ao e u so do Pr ot heu s

- 94 -

ADVPL Compl et o



Para i sso, necessri o confi gurar, ou sej a, i nfor mar ao Prot heus onde est cada uma del as.
Esse t i po de i nformao const a nos arqui vos de parmet r os de confi gurao do si st ema
( TOTVSAPPSERVER. I NI e TOTVSSMARTCLI ENT. I NI ) exi st ent es nas respect i vas past as
APPSERVER e SMARTCLI ENT.

Os parmet r os do TOTVSAPPSERVER. I NI so l i dos pel o programa TOTVSAPPSERVER. EXE l ogo
no i nci o de sua execuo. O mesmo pr ocediment o ocorr e em r el ao aos parmet r os do
TOTVSSMARTCLI ENT. I NI pel o pr ograma TOTVSSMARTCLI ENT. EXE. A execuo desses doi s
programas fei t a por mei o de ao do usuri o, facili t ada pel os at al hos TOTVS APPSERVER e
TOTVS SMARTCLI ENT.






Fi gu r a: Li nk s dos par met r os de con f i gur ao

Para que o TOTVS AppServer e o TOTVS Smart Cl i ent sej am execut ados, os arqui vos
TOTVSAPPSERVER. I NI e TOTVSSMARTCLI ENT. I NI devem est ar di sponvei s nas respect i vas
past as APPSERVER e SMARTCLI ENT poi s so el es que i ndi cam o endereo das demai s past as
conforme a il ust rao da fi gura ant eri or.

O det al he de pr eenchiment o das pr opri edades dos r espect i vos at al hos TOTVS AppServer e o
TOTVS Smart Cl i ent demonst rado a segui r. No at alho do TOTV SAppSer ver, necessri o que
sej a i nformado o parmet r o - debug ou - consol e .


- 95 -

ADVPL Compl et o



Pr opr i edades dos at al hos


=
Dest i no:
c: \ prot heus\ bi n\ appserver\ t ot vsappserver .exe
- consol e
I ni ci ar em: c: \ prot heus\ bi n\ appserver

E - Consol e ou - Debug

Execut ado como uma Janel aConsol e, as i nfor maes r ecebi das das conexes com o TOTVS
Appli cat i on Server conect ados so exi bidas di ret ament e na t el a do consol e do TOTVS
Appli cat i on Server, bem como i nformaes de No Conformi dades.

E - I nst al l

Se o TOTVS Appli cat ion Server, no for i nst al ado como um Ser vi o do NT, durant e a
I nst al ao, i st o pode ser r eal i zado, execut ando- o com a opo de Li nha de Comando.

E - Remov e
Para r emov- l o da Li st a de Servi os do NT, pode- se execut - l o com a opo de Li nha de
Comando.


=
Dest i no:
c: \ prot heus\ bi n\ smart cli ent \ t ot vssmart cl i ent e.exe
M
I ni ci ar em: c: \ prot heus\ bi n\ smart cli ent

E - Q ( Qui et )

I ndi ca que o TOTVS Smart Cli ent , no dever most r ar o Spl ash ( I magem de Apresent ao) e a
t el a de i dent i fi cao de Parmet r os I ni ci ai s, necessi t a ser acompanhada da ( Cl usul a P) .

E - P ( Mai n Pr ogr am)

I dent i fi ca o Programa ( APO) I ni ci al .

E - E ( Env i r onment )

Nome da Seo de Envi ronment , no ( I ni do Ser ver) , que ser ut ili zada, para defi ni es gerai s.

E - C ( Conn ect i on)

Nome da Seo de Conexo, que ser ut ili zada, para a conexo ao TOTVS Appli cat i on Server.

E - M ( Al l ow Mul t i Sessi on)

Per mi t e mlt i pl as i nst nci as ( Cpi as) do TOTVS Smart Cli ent , na mesma mquina, o que por
Defaul t no permi t i do.


- 96 -

ADVPL Compl et o


Os parmet ros que confi guram o l ocal do RPO, o Banco de Dados ( I SAM ou SQL) , os arqui vos
de menus, confi guraes e cust omi zaes do si st ema no arqui vo I NI so:

E Sour cePat h: I ndi ca o l ocal de ori gem dos obj et os. o ender eo do Reposi t ri o de
Obj et os ( Exempl o: SourcePat h= C: \ PROTHEUS\ APO)

E Root Pat h: Apont a para a past a rai z ( i ni ci al ) , a part i r da qual ser o l ocali zados os dados
( no caso de I SAM) , bem como o prpri o Di ci onri o de Dados ( Exempl o:
Root Pat h= C: \ PROTHEUS\ PROTHEUS_DATA)

E St ar t Pat h: I ndi ca qual a past a dent ro da past a rai z ( informada no parmet ro
Root Pat h) que cont m os arqui vos de menus, os arqui vos de confi guraes e os
arqui vos de cust omi zaes ( SXs) do si st ema Prot heus ( Exempl o:
St art Pat h= \ SYSTEM\ ) .

No h necessi dade de que os parmet r os est ej am em ordem nos ar qui vos de confi gurao
( .i ni) . Al m dos parmet r os j det al hados, exi st em out ros que podem i ndi car a verso do
si st ema, o t i po de banco de dados, l inguagem do pas em que est sendo ut i lizado e as
mscaras de edi o e format ao.



[ ENVI RONMENT]
SOURCEPATHC: \ PROTHEUS\ APO
ROOTPATH= C: \ MP811\ PROTHEUS_DATA
STARTPATH= \ PROTHEUS\
RPODB= TOP
RPOLANGUAGE= PORTUGUESE
RPOVERSI ON= 101
LOCALFI LES= ADS
TRACE= 0
LOCALDBEXTENSI ON= . DBF
PI CTFORMAT= DEFAULT
DATEFORMAT= DEFAULT

[ DRI VERS]
ACTI VE= TCP

[ TCP]
TYPE= TCPI P
PORT= 1234


Fi gu r a: Ex empl o de u m ambi ent e em um ar qu i v o de par met r os

No exempl o da fi gura ant eri or, o r t ul o [ environment ] descreve um conj unt o de parmet r os
que sero i ni ci alizados no si st ema. Os rt ul os [ Dri ver s] e [ TCP] i dent i ficam a comuni cao que
pode ser est abel eci da ent re o Pr ot heus Server e o Pr ot heus Remot e. Out ros ambi ent es podem
ser confi gurados no mesmo arqui vo ( TOTVSAPPSERVER. I NI ) .

J o arqui vo de parmet ros do Prot heus Remot e ( TOTVSSMARTCLI ENT.I NI ) cont m apenas as
confi guraes l ocai s, basi cament e as i nfor maes necessri as para a i ni ci alizao e a
comuni cao com o Pr ot heus Server , conforme o exempl o da fi gura a segui r.


- 97 -

ADVPL Compl et o



[ CONFI G]
LASTMAI NPROG= SI GACFG
LANGUAGE= 1

[ DRI VERS]
ACTI VE= TCP

[ TCP]
SERVER= 172.16.72.41
PORT= 1234

E Act i v e: I ndi ca qual a for ma de comuni cao.
Fi gu r a: Ex empl o de u m ar qu i v o de con f i gu r ao do r emot e


E Por t : I ndi ca o nmero da port a a ser ut ili zada para a comuni cao ent re o Prot heus
Ser ver e o Prot heus Remot e. necessri o que a port a ut ili zada na comuni cao sej a a
mesma em ambos ( no TOTVSAPPSERVER. I NI e no TOTVSSMARTCLI ENT. I NI ) . Val e
ressal t ar que a port a 80 r eservada para a I nt ernet e pode causar confli t os caso sej a
ut ili zada na comuni cao do Prot heus.

E Ser v er : Apont a para o ender eo do servi dor que pode ser a prpri a mquina
( l ocalhost ) ou o nome da mqui na ( Server= Ser vi dor_01) ou mesmo um ender eo I P
( exempl o Ser ver= 172.16.72.41) .

Ex empl o:

O parmet ro Server= 172.16.72.41 no arqui vo TOTVSSMARTCLI ENT. I NI i ndi ca ao Prot heus
Remot e o ender eo da mquina na qual est funci onando o Prot heus Ser ver.



- 98 -

ADVPL Compl et o



9.3. O Conf i gur ador do Pr ot heus

9.3.1. Funci onal i dades Abor dadas

O obj et i vo dest e t pi co no abranger t odo a est rut ura e recursos do mdul o Confi gurador da
apli cao ERP, mas permi t i r a realizao de t arefas de confi gurao si mpl es que sero
necessri as no desenvol vi ment o de pequenas cust omi zaes.

Com foco nest e obj et i vo sero det al hadas as seguint es operaes

E Confi gurao e cri ao de novas t abel as no Di cionri o de Dados
E At uali zao das est rut ur as do Di ci onri o de Dados
o Tabel as do si st ema
o Vali daes de campos
o ndi ces de t abel as
o Gat il hos de campos

Para cont ext uali zar a est rut ura da apli cao ERP, no t pi co a segui r det al hada a forma como
as t abel as de dados do si st ema est o di vi didas ent re os di versos mdul os que compe o
PROTHEUS.

9.3.2. Est r ut ur as bsi cas da apl i cao ERP Pr ot heus

Ar qui v os de conf i gur ao do si st ema

Ar qui v o Descr i o
SI GAMAT Cadast r o de empr esas e fili ai s do si st ema
SI GAPSS Arqui vo de usuri os, gr upos e senhas do si st ema
SI X ndi ces dos arqui vos
SX1 Pergunt as e r espost as
SX2 Mapeament o de t abel as
SX3 Di ci onri o de Dados
SX4 Agenda do Schedul e de processos
SX5 Tabel as
SX6 Parmet r os
SX7 Gat il hos de I nt erface
SX8 Fora de uso
SX9 Rel aci onament os ent re t abel as
SXA Past as cadast rai s apont adas no SX3
SXB Consul t a por mei o da t ecl a F3 ( Consul t a Padro)
SXD Cont rol e do Schedul e de pr ocessos
SXE Seqnci a de document os ( + 1)
SXF Seqnci a de document os ( Pr xi mo)
SXG Tamanho padro para campos apont ado pel o SX3
SXK Respost a de Pergunt as ( SX1) por usuri os
SXO Cont rol e de LOGs por t abel a
SXP Hi st ri co de Logs cadast rados no SXO

SXQ
Cadast r o de fi l t ros i nt eligent es da mbr owse ( cont m as
i nformaes necessri as para a cri ao do fi lt ro) .
SXR
Cadast r o de r el aci onament o ent r e pr ograma x fil t ro
( ut ili zada i nt ernament e pel o Pr ot heus para veri fi car em
quai s programas os fi l t ros podero ser ut ili zados) .

- 99 -

ADVPL Compl et o


SXS
Cadast r o de pr ogramas ( ut ili zado na vali dao para
most r ar/ i ni bi r os fil t ros na execuo da mbr owse) .
SXT
Tabel a de usuri os ( cont m as i nformaes dos
usuri os que podero ut ilizar os fi lt ros da mbr owse) .
SXOffi ce
Cadast r o de r el aci onament o ent r e as ent i dades
( t abel as) e as consul t as TOI I .

Ambi ent es e t abel as

Na apli cao PROTHEUS as t abel as de dados podem t er uma est rut ura mai s si mpl es e
econmi ca, com t abel as em DBF/ ADS, do fabri cant e Ext ended Syst em ou CTREE do fabri cant e
FAI RCOM ou uma est rut ura mai s robust a e compl exa, em bases SQL ( SQLSERVER da
Mi crosoft , ORACLE, DB I I da I BM, SYBASE, MYSQL, POSTGREE, et c. ) .

No caso do SQL, o acesso fei t o at ravs do TOPCONNECT / DBACESS, que convert e os
comandos do ADVPL para est e ambi ent e.

Para permi t i r uma ut ilizao adequada das t abel as de dados do si st ema por cada um dos
ambi ent es da apli cao ERP, as t abel as foram di vi didas em grupos denomi nados famli as .
Cada mdul o pode ut i lizar uma ou mai s famli as de t abel as especi fi cas para suas at i vi dades, e
ai nda compart i lhar informaes com out r os mdul os at ravs de famli as comuns a t odas as
operaes real i zadas no si st ema.

A t abel a a segui r demonst ra al guns dos mdul os que compe a apl i cao ERP PROTHEUS
at ual ment e:

Ambi ent e I dent i f i cao
SI GAATF ATI VO FI XO
SI GACOM COMPRAS
SI GACON CONTABI LI DADE
SI GAEST ESTOQUE E CUSTOS
SI GAFAT FATURAMENTO
SI GAFI N FI NANCEI RO
SI GAFI S LI VROS FI SCAI S
SI GAPCP PLANEJAMENTO E CONTROLE DA PRODUO
SI GAGPE GESTO DE PESSOAL
SI GAFAS FATURAMENTO DE SERVI OS
SI GAVEI VE CULOS
SI GALOJ

CONTROLE DE LOJAS/ AUTOMAO COMERCI AL
SI GATMK CALL CENTER
SI GAOFI OFI CI NAS
SI GAPON PONTO ELETRNI CO
SI GAEI C EASY I MPORT CONTROL
SI GATCF TERMI NAL
SI GAMNT MANUTENO DE ATI VOS
SI GARSP RECRUTAMENTO E SELEO DE PESSOAL
SI GAQI E I NSPEO DE ENTRADA QUALI DADE
SI GAQMT METODOLOGI A QUALI DADE

O nome de cada t abel a no Pr ot heus const i t udo de sei s dgi t os, os quai s so ut ilizados para
for mar a segui nt e represent ao:

F X X E E 0


- 100 -

ADVPL Compl et o


Onde:

F SF X Pri mei ro dgi t o represent a a famli a, o segundo dgi t o
pode ser ut ilizado para det al har ai nda mai s a famli a
especi fi cada no pri mei ro nvel ( subfamlia) , e o t er cei ro
dgit o a numerao seqenci al das t abel as da famli a
i ni ci ando em 0 e fi nalizando em Z .
E E 0 Os doi s pri mei ros dgi t os i dent i fi cam a que empresa as
t abel as est o vi ncul adas, l embrando que a i nformao
de fi li al est cont i da nos dados da t abel a.
O l t i mo dgi t o fi xo em 0 .

A t abel a a segui r demonst ra al gumas das pri nci pai s famli as de t abel as ut ili zadas pela
apli cao ERP Prot heus:

Faml i a Descr i o
S - Tabel as pert encent es ao si st ema bsi co, t ambm chamado Cl assi c
S A
Cadast r os de ent i dades compart il hadas ent re os ambi ent es
( Cli ent es, Fornecedor es, Bancos ent re out r os) .
S B
Cadast r os dos ambi ent es de Mat eri ai s ( Produt os, Sal dos ent re
out ros) .
S C
Arqui vos de movi ment aes di versas ut ili zados pel os ambi ent es de
Mat eri ai s ( Soli ci t ao ao Al moxari fado, Soli cit ao de Compras,
Pedi do de Compras, Pedi do de Vendas, Ordens de Produo ent r e
out ros) .
S D
Arqui vos de movi ment aes de est oque ( I t ens de not as fi scai s de
ent rada e sada, movi ment os i nt ernos de est oque ent r e out r os) .
S E Cadast r os e movi ment aes do ambi ent e Fi nancei ro.
S F
Cadast r os e movi ment aes Fi scai s ( Cabeal hos das not as fi scai s
de ent rada e sada, cadast ro de t i pos de ent rada e sada, li vros
fi scai s, ent re out r os) .
S G Cadast r os do ambi ent e de Pl anej ament o e Cont rol e de Produo
S H Movi ment os do ambi ent e de Pl anej ament o e Cont rol e de Pr oduo
S I Cadast r os e movi ment os do ambi ent e Cont bi l ( descont i nuado)
S N Cadast r os e movi ment os do ambi ent e At i vo Fi xo
S R Cadast r os e movi ment os do ambi ent e Gest o de Pessoal
S X Tabel as de confi gurao do si st ema
S Z Tabel as li vres para ut ilizao e proj et os especficos em cl i ent es.
A - Gest o de Pr oj et os
C - Cont abili dade Gerenci al
C T Cont abili dade Gerenci al
C V Cont abili dade Gerenci al
C W Cont abili dade Gerenci al
D - Transport adoras e deri vados
E - Comrci o ext eri or e deri vados
G - Gest o Hospi t al ar
J - Gest o Educaci onal
N - Ser vi os Pbl i cos
P - Reser vado para proj et os da fbri ca de soft war e
Q - Quali dade e deri vados
R - Recur sos Humanos e deri vados
T - Pl ano de Sade
W - Workfl ow
Z - Tabel as li vres para ut ilizao e proj et os especfi cos em cl i ent es em
adi o a famli a SZ.

- 101 -

ADVPL Compl et o



ndi ces

Cada t abel a do si st ema possui seus ndi ces defi ni dos no arqui vo de confi gurao SI X, o qual
pode ser at ual i zado at ravs do mdul o Confi gurador.

Os arqui vos de ndi ces das t abel as de si st ema sero cri ados de acordo com o banco de dados
ut ili zado ( I SAM ou conexo vi a TOPCONNECT) .

Para bancos de dados I SAM, ser gerados arqui vos com a mesma nomencl at ura da t abel a de
dados, mas com uma ext enso di fer enci ada ( at ual ment e .CDX) . No caso da ut i lizao de um
banco de dados, cada ndi ce ser uma numer ao seqenci al em funo do nome da t abel a
ori gi nal .

As especi fi caes das chaves de ndi ces de cada um das t abel as est di sponvel no arqui vo de
si st ema SI X, e a chave ni ca da t abel a ut ili zada para banco de dados est descri t a na t abela
SX2.

Menu s

Cada mdul o da apli cao ERP possui um menu padro com t odas as funci onali dades
di sponvei s para o ambi ent e, menu est e defi ni do at ravs de si nt axe XML ( arqui vos .XNU) .

Os menus possuem uma est rut ura padro que permi t e ao usuri o l ocali zar e i dent i fi car
faci l ment e cada uma das funci onali dades ofer eci das pel o ambi ent e.

9.3.3. Acessando o mdul o Conf i gur ador

Para execut ar o mdul o Confi gurador necessri o que a apli cao Pr ot heus Server est ej a em
execuo e at ravs da apli cao Prot heus Remot e dever ser i nformada como programa i ni ci al
a opo SI GACFG.



Fi gu r a: Par met r os de i ni ci al i zao do si st ema



- 102 -

ADVPL Compl et o




Aps a confi rmao, a vali dao do acesso fei t a conforme t el a il ust rada a segui r:


Fi gu r a: Val i dao de acesso



Fi gu r a: Con f i r mao do acesso ao mdul o Conf i gu r ador




- 103 -

ADVPL Compl et o



Logo aps a sua confi rmao do usuri o e senha com di rei t o de admi ni st rador , ser
apresent ada a t el a i ni cial do confi gurador , conforme most ra a fi gura a segui r:



Fi gu r a: I nt er f ace pr i n ci pal do mdu l o Conf i gur ador














- 104 -

ADVPL Compl et o



9.4. Funci onal i dades do Conf i gur ador

A cust omi zao de um si st ema como o Pr ot heus consi st e em adapt ar o si st ema de forma a
mel hor at ender as necessi dades do cl i ent e.

A fl exi bilidade de um si st ema, ou sej a, sua capaci dade de adapt ar- se ( pol i morfi smo, aquel e
que assume vri as formas) uma das mai s i mport ant es caract erst i cas de uma sol uo ERP.

As funci onalidades t rat adas pel o Confi gurador defi nem a fl exi bilidade do ERP Pr ot heus.
Fl exi bilizar sem despadroni zar, ou sej a, t udo que foi cust omi zado permanece vl i do, mesmo
com o desenvol vi ment o de novas verses.




Fi gu r a: Pr i nci pai s f u n ci on al i dades do mdu l o Conf i gu r ador


O Confi gurador o programa bsi co para o pr ocesso de cust omi zao do Prot heus at ravs da
al t erao das t abel as da famli a SX. Nel es, o usuri o ou o anali st a de suport e r esponsvel pel a
i mpl ant ao confi gura as i nformaes que ser o ut ili zadas pel os demai s ambi ent es do si st ema.

Essas i nformaes vo de si mpl es parmet ros at compl exas expr esses e comandos que so
i nt erpr et adas em t empo de execuo.

Nos pr xi mos t pi cos sero abordadas as funci onali dades de cust omi zao di sponvei s no
ambi ent e Confi gurador, rel evant es ao obj et i vo de desenvol vi ment o de pequenas
cust omi zaes para a apli cao ERP.







- 105 -

ADVPL Compl et o


9.4.1. Di ci onr i o de Dados da apl i cao ERP

A i di a do Di ci onri o de Dados permi t i r que o usuri o possa i nclui r ou ini bi r campos, ou
mesmo al t erar as pr opri edades dos campos exi st ent es. Pode, ai nda, cri ar novas t abel as. Ou
sej a, os pr ogramas ao invs de t erem os campos defi ni dos em seu cdi go ori ginal , l em o
Di ci onri o em t empo de execuo, mont ando ar rays com as pr opri edades de cada um. A part i r
da, sua ut ilizao normal , at ravs do uso de funes do ADVPL que t ornam o t rabal ho do
desenvol vedor t ranspar ent e a est a arqui t et ura.

O obj et i vo do Di ci onri o de Dados permi t i r que o pr pri o usuri o cri e novas t abel as ou al t ere
os campos nas t abel as exi st ent es quant o ao seu uso, sua ordem de apresent ao, l egenda
( nos t r s i di omas) , val i dao, hel p, obri gat ori edade de pr eenchi ment o, i ni ci alizao et c.



9.4.2. Adi o de t abel as ao Di ci onr i o de Dados
Fi gu r a: Con j u nt o de pacot es que compe o Di ci onr i o de Dados




Pr ocedi ment o

1. Para adi ci onar uma t abel a ao di ci onri o de dados de uma empr esa, sel eci one a opo
Di ci onri o de Dados abai xo da empresa que ser at ualizada. ( rvor e de opes da part e
esquerda da i nt erface vi sual do Ger enci ador de Bases de Dados) .

2. Aps a sel eo da opo Di ci onri o de Dados sero exi bi das as t abel as j cadast r adas
no arqui vo de si st ema SX2.





- 106 -

ADVPL Compl et o





3. Aps a vi suali zao das t abel as j cadast radas no SX2 da empresa sel eci onada, ut ili ze o
bot o I ncl ui r (
Fi gu r a: Con j u nt o de t abel as j cadast r adas no SX2

) . Ao ut ilizar est a opo ser exi bi da a t el a para defi ni o dos dados
referent es nova t abel a que ser cri ada:









- 107 -

ADVPL Compl et o




4. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a
segui r, e ao t rmi no confi rme o cadast rament o da nova t abel a com o bot o Confi rmar
(
Fi gu r a: Cadast r o de u ma nov a t abel a


) .


Or i ent aes par a o cadast r ament o de u ma nov a t abel a

E O domni o SZ1 at SZZ ( consi derando t odos os nmer o e t odas as l et ras no l t i mo
byt e) r eser vado par a dados excl usi vos do usuri o poi s esse i nt er val o no ser
ut ili zado pel o si st ema. Caso sej a necessri o o domni o Z00 a ZZZ t ambm pode ser
empr egado para desenvol vi ment os especfi cos do cl i ent e.


No devem ser cri adas t abel as especfi cas de cl i ent es com
quai squer out ras nomencl at uras, o que pode afet ar di ret ament e
um processo de at uali zao fut uro.

E O nome da t abel a pr eenchi do aut omat i cament e, adi ci onando 990. Esse dado r efer e-
se empr esa 99 ( Test e Mat ri z) a qual est sendo adi ci onado t abel a.

E O Pat h refer e- se past a que cont er efet i vament e os dados das t abel as, quando I SAM,
nas verses com banco de dados r el aci onal no so ut ili zadas. Essa past a ser cri ada
dent ro da past a i ndi cada na confi gurao do si st ema como ROOTTPATH.

E O modo de acesso compart il hado indi ca que o si st ema possi bilit ar o uso si mul t neo da
t abel a por duas ou mai s fi liai s. Se for compart i l hado o campo Fi li al fi ca em branco. Se
for excl usi vo, grava- se o cdi go da fi li al at i va e soment e el a t em acesso ao r egi st ro.

E Aps a confi rmao, a t abel a cri ada passa a fazer part e do cadast r o do Di ci onri o de
Dados, cont endo soment e o campo FI LI AL, o qual cri ado como padro pel a

- 108 -

ADVPL Compl et o


funci onali dade do mdul o.

9.4.3. Adi o de campos as t abel as do Di ci onr i o de Dados

Pr ocedi ment o

1. Para adi ci onar um campo a uma t abel a do di ci onri o de dados de uma empresa,
sel eci one a opo Di ci onri o de Dados abai xo da empr esa que ser at ualizada. ( rvore
de opes da part e esquerda da i nt erface vi sual do Gerenci ador de Bases de Dados) .

2. Aps a sel eo da opo Di ci onri o de Dados sero exi bi das as t abel as j cadast r adas
no arqui vo de si st ema SX2.



3. Aps a vi suali zao das t abel as j cadast radas no SX2 da empresa sel eci onada, l ocal ize
e sel eci one a t abel a que ser at ual izada, e ut ili ze o bot o Edi t ar (
Fi gu r a: Con j u nt o de t abel as j cadast r adas no SX2

) . Ao ut ili zar est a
opo ser exi bi da a t ela de manut eno de campos da t abel a sel eci onada:


- 109 -

ADVPL Compl et o




4. Sel eci one a opo Campos (
Fi gu r a: Est r ut ur a de uma t abel a j cadast r ada n o si st ema

) , para que sej am exi bi dos os campos
di sponvei s para a t abela no arqui vo de si st ema SX3.


Fi gu r a: Est r ut ur a de campos de uma t abel a j cadast r ada no si st ema

- 110 -

ADVPL Compl et o


5. Aps a vi suali zao dos campos j cadast rados no SX3 da t abel a sel eci onada, ut ili ze a
opo I ncl ui r ( ) . Ao ut ilizar est a opo ser exi bi da a t el a para defini o dos dados
referent es ao novo campo que ser cri ado:


5. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a
segui r, e ao t rmi no confi rme o cadast rament o do novo campo par a a t abel a com o
bot o Confi rmar (
Fi gu r a: Dados par a par amet r i zao de u m nov o campo no si st ema

) .
6. Confi rme as at uali zaes para a t abel a sel eci onada com o bot o Confi rmar ( ) .
7. At uali ze as confi guraes do si st ema com o bot o At uali zar ( ) .


Fi gu r a: At u al i zao dos dados do si st ema

- 111 -

ADVPL Compl et o


20


Or i ent aes par a o cadast r ament o de u m n ov o campo

1. As pr opri edades defi ni das no Di ci onri o de Dados ( SX3) so as segui nt es:

E Nome do campo: Todos os campos t m como prefi xo o pr pri o nome da t abel a, sendo
que para t abel as da famli a S , o pr efi xo do campo compost o apenas pel os pr xi mos
doi s dgi t os. No caso das demai s t abel as, o prefi xo do campo sero os t rs dgi t os
i dent i fi cadores da t abel a.

E Ti po do campo: I ndi ca se caract er e, numri co, l gi co, dat a ou memo. cl aro que a
mudana do t i po de campo deve ser fei t a com mui t o cui dado, poi s, se t i vermos um
campo numri co usado em cl cul os e el e for al t erado para caract er e, cert ament e
t er emos um er r o.

E Tamanho do campo: Tambm aqui necessri o cert o cui dado ao al t er- l o, poi s
poderemos t er t runcament os em rel at ri os e consul t as em que h espao para
cont edos mai or es que o ori ginal .

E For mat o de edi o: Defi ne como o campo aparece nas t el as e nos rel at ri os.

E Cont ex t o: Pode ser r eal ou vi rt ual . O cont ext o vi rt ual cri a o campo soment e na
memri a e no na t abel a armazenada no di sco. I sso necessri o porque os
programas de cadast rament o e de consul t a genri ca apresent am soment e uma t abel a
de cada vez. Assi m, se qui sermos apresent ar um campo de uma out ra t abel a, ou
mesmo o resul t ado de um cl cul o, sem que t al i nformao ocupe espao fsi co no HD,
ut ili zamos o cont ext o vi rt ual . Campos vi rt uai s normal ment e so ali ment ados por
gat ilhos.

E Pr opr i edade: I ndi ca se um campo pode ou no ser al t erado pel o usuri o. Exempl o:
sal dos nor mal ment e no podem, poi s quem cuida dessa t ar efa so os programas.

2. Demai s caract erst i cas que devem ser observadas na confi gurao do campo:


E O campo Deci mal ser soli cit ado soment e para os campos de t i po numri co.
Gui a: Campo


E O format o ! i ndi ca que o caract ere ser sempre mai scul o, i ndependent e da ao
do usuri o. O format o @! i ndi ca que essa caract erst i ca est ende- se por t odo o
campo.

E O cont ext o r eal indi ca que o campo exi st i r efet i vament e no banco de dados e o
cont ext o vi rt ual si gni fi ca que o campo exi st i r apenas no di ci onri o de dados e no
fi si cament e.

E A propri edade al t erar i ndi ca que o campo pode ser al t erado.

E Nest a j anel a, os dados est o cl assi fi cados em sei s past as com obj et i vos de
preenchi ment o bem especfi cos:




- 112 -

ADVPL Compl et o


E Cont m as i nformaes a r espei t o dos t t ul os.
Gui a: I nf or maes


E Tt ul o: a l egenda que apar ece nas t el as/ rel at ri os. H i ncl usi ve t r s campos para
est a fi nali dade: em port ugus, espanhol e i ngl s. Est a pr opri edade pode ser al t erada
vont ade, poi s no i nt erfer e em nenhum processament o.

E Descr i o e Hel p: So propri edades que obj et i vam document ar o campo.


E Cont m os dados que facili t am a di gi t ao.
Gui a: Opes


E Repr esent am as r egras de val i dao do campo.
Gui a: Val i daes


E Val i daes: Nest a propri edade, escr eve- se uma funo de val i dao do campo que
est sendo di gi t ado. Exi st e um conj unt o de funes di sponvei s no ADVPL apropri adas
para esse caso.

E Todas as val i daes i nformadas sero execut adas no moment o do pr eenchi ment o do
prpri o campo. Uma vali dao pode ser uma expresso l gi ca ou uma funo de
usuri o que r et orna um val or l gi co Verdadei ro ou Fal so. O si st ema s permi t i r o
avano para o pr xi mo campo quando o respect i vo preenchi ment o r esul t ar Verdadei ro
sej a na expresso ou no r et orno da funo.

E Descr eve a forma de ut i li zao do campo.
Gui a: Uso


E Rel aci ona t odos os mdul os em que o campo ser ut ili zado.
Gui a: Mdul os













- 113 -

ADVPL Compl et o



9.4.4. Adi o de ndi ces par a as t abel as do Di ci onr i o de Dados

Conforme menci onado ant eri orment e, no ambi ent e Prot heus uma t abel a pode t er vri os
ndi ces, os quai s sero gerados de acordo com o banco de dados confi gurado para o si st ema.

Os ndi ces do si st ema auxili am na sel eo e obt eno de i nformaes da base de dados al m
de det er mi nar a ordem de apr esent ao dos r egi st ros de uma t abel a em consul t as e r el at ri os.

Pr ocedi ment o

1. Para adi ci onar um ndice a uma t abel a do di ci onri o de dados de uma empr esa,
sel eci one a opo Di ci onri o de Dados abai xo da empr esa que ser at ualizada. ( rvore
de opes da part e esquerda da i nt erface vi sual do Gerenci ador de Bases de Dados) .

2. Aps a sel eo da opo Di ci onri o de Dados sero exi bi das as t abel as j cadast r adas
no arqui vo de si st ema SX2.


3. Aps a vi suali zao das t abel as j cadast radas no SX2 da empresa sel eci onada, l ocal ize
e sel eci one a t abel a que ser at ual izada, e ut ili ze o bot o Edi t ar (
Fi gu r a: Con j u nt o de t abel as j cadast r adas no SX2

) . Ao ut ili zar est a
opo ser exi bi da a t ela de manut eno de campos da t abel a sel eci onada:

- 114 -

ADVPL Compl et o




4. Sel eci one a opo ndi ces (
Fi gu r a: Est r ut ur a de uma t abel a j cadast r ada n o si st ema


) , para que sej am exi bi dos os ndices
di sponvei s para a t abela no arqui vo de si st ema SI X.




5. Aps a vi suali zao dos ndi ces j cadast rados no SI X para a t abel a sel eci onada, ut ili ze
a opo I ncl ui r (
Fi gu r a: n di ces di sponv ei s par a a t abel a n o ar qu i v o de si st ema SI X


) . Ao ut ili zar est a opo ser exi bida a t el a para defi ni o dos
dados refer ent es ao novo ndi ce que ser cri ado:




- 115 -

ADVPL Compl et o






6. Reali ze o preenchi ment o das informaes soli ci t adas de acordo com as ori ent aes a
segui r, e ao t rmi no confi rme o cadast rament o do novo ndi ce para a t abel a com o bot o
Confi rmar (
Fi gu r a: Adi o de um ndi ce par a u ma t abel a


) .
7. Confi rme as at uali zaes para a t abel a sel eci onada com o bot o Confi rmar ( ) .
8. At uali ze as confi guraes do si st ema com o bot o At uali zar ( ) .



Fi gu r a: At u al i zao dos dados do si st ema

- 116 -

ADVPL Compl et o



Or i ent aes par a o cadast r ament o de u m n ov o ndi ce

E O Ni ck name uma i dent i fi cao compl ement ar do ndi ce o qual pode ser ut ilizada para
auxili ar o desenvol vedor na ut ili zao dest a or dem em uma apl i cao, a qual pode ser
padro do si st ema ou especfi ca de um cli ent e.

E Para sel eci onar os campos j cadast rados na t abel a, pode ser ut ili zado o bot o Campos
( ) . Est a faci li dade preenche, aut omat i cament e, os campos de descri o.

E O campo r el at i vo fili al sempre faz part e dos ndi ces, com exceo do SM2, para que
os r egi st ros nas t abel as est ej am agrupados por fi li ai s, i ndependent e dest a t abel a ser
compart il hada ent re as fili ai s.

E Uma t abel a poder t er vri os ndi ces cadast rados no Di ci onri o de Dados. Em
det ermi nado moment o, por m, apenas um del es ofer ecer acesso ao regi st ro. Essa
ordem pode ser al t erada em t empo de execuo pel os pr ogramas da apli cao, at ravs
do comando DBSet Order( ) , ou at ravs da defi ni o de uma ordem especfi ca na
ut ili zao de queri es para acesso as dados di ret ament e em bancos de dados de
ambi ent es TOPCONNECT ( DbAcess) .


9.4.5. Adi o de gat i l hos par a os campos das t abel as do si st ema

Pr ocedi ment o

1. Para adi ci onar um gat ilho a um campo de uma t abel a do di ci onri o de dados de uma
empr esa, sel eci one a opo Gat il ho abai xo da empr esa que ser at ual i zada. ( rvor e de
opes da part e esquer da da i nt erface vi sual do Gerenci ador de Bases de Dados) .

2. Aps a sel eo da opo Gat il hos sero exi bi dos os i t ens j cadast radas no arqui vo de
si st ema SX7.



Fi gu r a: Con j u nt o de gat i l hos j cadast r os n o SX7

- 117 -

ADVPL Compl et o



3. Aps a vi suali zao dos gat ilhos j cadast rados no SX7 da empresa sel eci onada, ut ili ze
o bot o I ncl ui r ( ) para r eali zar o cadast r o de um novo gat il ho no si st ema:



4. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a
segui r, e ao t rmi no confi rme o cadast rament o do novo gat i lho de si t ema com o bot o
Confi rmar (
Fi gu r a: Dados par a o cadast r o de um nov o gat i l ho n o si st ema


) .

Or i ent aes par a o cadast r ament o de u m n ov o gat i l h o


E Pode haver vri os gat i lhos para o mesmo campo. A ordem de execuo det ermi nada
pel o campo Seqnci a.

E Os t i pos do Gat i lho Primri o, Est rangei ro e de Posi ci onament o defi nem se o Cont ra
Domni o um campo da mesma t abel a, de out ra t abel a ou se o gat ilho deve real i zar
um posi ci onament o, respect i vament e.

E A regra pode ser uma expr esso que r esul t a em um val or a ser preenchi do no Cont ra
Domni o.

E O posi ci onament o i gual a Si m indi ca que ser execut ado um comando de busca do
regi st ro de acordo com a chave i ndi cada.

E O Ali as, a Ordem e a Chave descr evem a t abel a envol vi da no gat ilho, seu ndi ce e a
chave para que a funci onalidade se posi ci one no r egi st ro adequado.

- 118 -

ADVPL Compl et o



9.4.6. Cr i ao de Tabel as Genr i cas

Pr ocedi ment o

1. Para adi ci onar uma t abel a genri ca, sel eci one os menus Ambi ent e, Cadast ros, Tabel as.

2. Aps a sel eo da opo Tabel as sero exi bi dos os i t ens j cadast r adas no arqui vo de
si st ema SX5.


3. Aps a vi suali zao das t abel as j cadast rados no SX5 da empresa sel eci onada, ut ilize o
bot o I ncl ui r (
Fi gu r a: Con j u nt o de Tabel as j cadast r as n o SX5

) para r eali zar o cadast ro de uma nova t abel a no si st ema:


Fi gu r a: Dados par a o cadast r o de uma n ov a t abel a n o si st ema

- 119 -

ADVPL Compl et o



4. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a
segui r, e ao t rmi no confi rme o cadast rament o da nova t abel a do si st ema com o bot o
Confi rmar ( ) .


9.4.7. Cr i ao de Par met r os

Pr ocedi ment o

1. Para adi ci onar um Parmet r o, sel eci one os menus Ambi ent e, Cadast ros, Parmet r os.

2. Aps a sel eo da opo Tabel as sero exi bi dos os i t ens j cadast r adas no arqui vo de
si st ema SX6.




3. Aps a vi sualizao dos Parmet r os j cadast rados no SX6 da empr esa sel eci onada,
ut ili ze o bot o I ncl ui r (
Fi gu r a: Con j u nt o de Par met r os j cadast r as no SX6

) para r eal i zar o cadast ro de uma nova t abel a no si st ema:


- 120 -

ADVPL Compl et o




4. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a
segui r, e ao t rmi no confi rme o cadast rament o do novo Parmet ro do si st ema com o
bot o Confi rmar (
Fi gu r a: Dados par a o cadast r o de um nov o par met r o no si st ema

) .

- 121 -

ADVPL Compl et o




10. TOTVS Dev el opment St udi o

A fer rament a TOTVS Devel opment St udi o um programa que faz part e do Prot heus e permi t e
o t rabal ho de edi o, compil ao e depurao de pr ogramas escri t os em ADVPL.

Pr oj et o

Um programa para ser compi l ado deve ser vi ncul ado a um proj et o. Normal ment e, pr ogr amas
que fazem part e de um det ermi nado mdul o ou ambi ent e est o em um mesmo proj et o.

A vi ncul ao dos progr amas a um pr oj et o fei t a por mei o dos arqui vos do t i po PRW. Na
verdade, um proj et o pode ser const i t udo de um ou mai s arqui vos dest e t i po, que por sua vez,
podem t er uma ou mai s funes, conforme i lust ra o di agrama a segui r:



Fi gu r a: Repr esent ao da est r ut ur a de um pr oj et o no DEV- St udi o


- 122 -

ADVPL Compl et o


Compi l ao

Uma vez adi ci onado a um proj et o e compil ado sem i nci dnci as de err os de cdi go, o obj et o
resul t ant e ser cadast rado no RPO ( Reposi t ri o de Obj et os) e poder ser ut ilizado pel a
apli cao ERP.

A compi l ao dos i t ens de um pr oj et o pode ser real i zada i ndi vi dual ment e, por grupo de font es
( past as) ou ai nda sel eci onando- o i nt ei rament e. Cada uma dos font es ser pr ocessado e
compi l ado separadament e, permi t i ndo a vi sualizao do pr ogr esso da operao e das
mensagens de avi so ( warni ngs) ou er ros ( cri t i cal err or s) na gui a Mensagens.

Ex ecuo

Para que os obj et os compil ados e di sponvei s n RPO sej am ut ili zados, devem ser obser vadas as
segui nt es r egras:

E Se o pr ograma no mani pul a arqui vos, pode- se cham- l o di ret ament e do DEV- St udi o
( nome no l ado di rei t o da barr a de fer rament as) ;

E Se o pr ograma mani pula t abel as exi st em duas opes:

. Adi ci onar o programa no menu de um dos ambi ent es e execut a- lo at ravs do
Remot e.

. Reali zar a pr eparao do ambi ent e na prpri a r ot i na, permi t i ndo sua execuo
di ret ament e pel o DEV- St udi o.

E No se pode compil ar um programa com o Remot e e o Moni t or abert os, t enha est e
fi nalizado ou no por er ro.

An l i se e depur ao de er r os

Para i dent i fi car as causas de err os, a ferrament a DEV- St udi o possui di versos r ecursos que
auxili am o DEBUG.

A ao de DEBUG necessi t a que o programa sej a execut ado a part ir do DEV- St udi o, sendo
necessri o observar as segui nt es r egras:

E Defi ni r e mar car os pont os de parada mai s adequados a anl i se do font e;

E Execut ar a r ot i na at ravs do DEV- St udi o, sel eci onando seu nome di r et ament e, ou o
mdul o que cont m a opo ou a ao que i r execut - l a;

E A part i r do moment o em que o DEV- St udi o pausar o processament o em um dos pont os
de parada especi fi cados previ ament e podem ser ut ilizadas as j anel as de vi sualizao
di sponvei s no DEV- St udi o, que so:

. Vari vei s Locai s
. Vari vei s Pri vat es
. Vari vei s Publi cs
. Vari vei s St at i cs
. Janel a da Wat chs
. Janel a de Tabel as e Campos
. Pil ha de Chamadas

E At ravs da Janel a de Wat chs possvel det ermi nar quai s vari vei s devem ser exi bidas;

- 123 -

ADVPL Compl et o


E Na pil ha de chamadas, veri fi ca- se a seqnci a de chamadas das funes;
E Na past a de Comandos, pode- se, enquant o o pr ograma est i ver pausado, escr ever
qual quer comando e ao dar Ent er , el e execut ado, permi t indo pesqui sar pal avras e
expr esses no pr pri o font e ou em qual quer font e armazenado no HD;

E Ao parar pode- se ou cont i nuar o programa at o prxi mo pont o de parada, caso haj a
um out ro defi ni do, ou execut ar l inha a linha da rot i na.

I nt er f ace da apl i cao

Por ser um ambi ent e int egrado de desenvol viment o, o DEV- St udi o propor ci ona t odas essas
faci lidades, por mei o de i nt erface ni ca como ilust ra a fi gura a segui r:



E O DEV- St udi o apresent a, no t opo da t el a, um conj unt o de opes de menu e uma sri e
de bot es que facili t am a sua mani pul ao.
Fi gu r a: I nt er f ace pr i n ci pal do TOTVS Dev el opment St u di o


E Na t el a cent r al , apr esent ado o cdi go das funes em ADVPL. Na part e i nferi or so
exi bi das al gumas past as que faci lit am a execuo de comandos, exi bio de cont edos
de vari vei s e mensagens, bem como dados sobre o proj et o.


- 124 -

ADVPL Compl et o



Desenvol v i ment o de pequenas cust omi zaes


11. Acesso e mani pul ao de bases de dados em ADVPL

Como a l inguagem ADVPL ut ili zada no desenvol vi ment o de apli cao para o si st ema ERP
Prot heus, el a deve possui r recursos que per mit am o acesso e a manipul ao de i nformaes
i ndependent ement e da base de dados para o qual o si st ema foi confi gurado.

Dest a forma a l inguagem possui doi s grupos de funes di st i nt os para at uar com os bancos de
dados:

E Funes de mani pul ao de dados genri cas
E Funes de mani pul ao de dados especfi cas para ambi ent es TOPCONNECT /
DBACCESS

Funes de mani pul ao de dados genr i cas

As funes de mani pul ao de dados di t as como genri cas per mi t em que uma apli cao ADVPL
sej a escri t a da mesma for ma, i ndependent e se a base de dados confi gurada para o si st ema
ERP for do t i po I SAM ou padro SQL.

Mui t as dest as funes foram i ni ci al ment e herdadas da l i nguagem CLI PPER, e medi ant e novas
i mpl ement aes da r ea de Tecnol ogi a da Mi crosi ga foram mel horadas e adequadas s
necessi dades do ERP. Por est a razo possvel encont rar em document aes da l i nguagem
CLI PPER i nformaes sobre funes de mani pulao de dados ut i lizadas na fer rament a ERP.

Dent r e as mel hori as i mpl ement adas pel a rea de Tecnol ogi a da Mi crosi ga, podemos menci onar
o desenvol vi ment o de novas funes como por exempl o a funo MsSeek( ) - verso da
Mi crosi ga para a funo DbSeek( ) , e a i nt egrao ent re a si nt axe ADVPL convenci onal e a
ferrament a de acesso a bancos de dados no padro SQL TOPCONNECT ( DbAcess) .

A i nt egrao ent r e a apli cao ERP e a ferrament a TOPCONNECT permi t e que as funes de
acesso e mani pul ao de dados escri t as em ADVPL sej am i nt erpret adas e convert i das par a
uma si nt axe compat vel com o padro SQL ANSI e dest a forma apl i cadas aos SGDBs ( Si st emas
Gerenci adores de Bancos de Dados) com sua si nt axe nat i va.

Funes de mani pul ao de dados par a ambi ent es TOPCONNECT / DBACCESS

Para i mpl ement ar um acesso mai s ot i mi zado e di sponi bili zar no ambi ent e ERP funci onali dades
que ut ili zem de forma mai s adequada os recursos dos SGDBs homol ogados para o si st ema,
foram i mpl ement adas funes de acesso e mani pul ao de dados especfi cas para ambi ent es
TOPCONNECT/ DBACCESS.

Est as funes permi t em que o desenvol vedor ADVPL execut e comandos em si nt axe SQL
di ret ament e de um cdi go font e da apli cao, di sponi bili zando recursos como execuo de
queri es de consul t a, chamadas de pr ocedur es e comuni cao com out ros bancos de dados
at ravs de ODBCs.


As funes especfi cas para ambi ent es TOPCONNECT sero abordas no
mat eri al de ADVPL Avanado.

- 125 -

ADVPL Compl et o



11.1. Di f er enas e compat i bi l i zaes ent r e bases de dados

Como a apli cao ERP pode ser confi gurada para ut ili zar di ferent es t i pos de bases de dados
i mport ant e menci onar as pri nci pai s di ferenas ent re est es r ecursos, o que pode det ermi nar a
for ma como o desenvol vedor i r opt ar por escr ever sua apl i cao.

Acesso a dados e ndi ces

No acesso a i nformaes em bases de dados do padro I SAM so sempre l i dos os regi st r os
i nt ei ros, enquant o no SQL pode- se l er apenas os campos necessri os naquel e processament o.

O acesso di ret o fei t o at ravs de ndi ces que so t abel as paral el as s t abel as de dados e que
cont m a chave e o ender eo do r egi st ro, de forma anl oga ao ndi ce de um li vro. Para cada
chave, cri ado um ndice prpri o.

Nas bases de dados padro I SAM os ndi ces so armazenados em um ni co arqui vo do t i po
CDX, j nos bancos de dados padro SQL cada ndi ce cri ado com uma numerao seqenci al
t endo como base o nome da t abel a ao qual el e est rel aci onado.

A cada i ncl uso ou al t erao de um r egi st r o t odos os ndi ces so at uali zados, t ornando
necessri o pl anej ar adequadament e quai s e quant os ndi ces sero defi ni dos para uma t abel a,
poi s uma quant i dade excessi va pode compr omet er o desempenho dest as operaes.

Deve ser consi derada a possi bilidade de ut ilizao de ndi ces t emporri os para pr ocessos
especfi cos, os quai s sero cri ados em t empo de execuo da rot i na. Est e fat or deve l evar em
consi derao o esforo do ambi ent e a cada execuo da rot i na e a peri odi ci dade com a qual
execut ada.

Est r ut u r a dos r egi st r os ( i nf or maes)

Nas bases de dados padro I SAM, cada r egi st ro possui um ident i fi cador nat i vo ou I D
seqenci al e ascendent e que funci ona como o endereo base daquel a informao.

Est e I D, mas conheci do como RECNO ou RECNUMBER ger ado no moment o de i ncl uso do
regi st ro na t abel a e soment e ser al t erado caso a est rut ura dos dados dest a t abel a sofr a
al guma manut eno. Dent re as manut enes que uma t abel a de dados I SAM pode sofr er
pode- se ci t ar a ut ili zao do comando PACK, o qual i r apagar fi si cament e os regi st ros
del et ados da t abel a forando uma r enumerao dos i dent i fi cadores de t odos os regi st r os. Est a
si t uao t ambm t orna necessri a a r ecri ao de t odos os ndi ces vi nculados quel a t abel a.

I st o ocorr e nas bases de dados I SAM devi do ao concei t o de excl uso l gi ca de regi st ros que as
mesmas possuem. J os bancos de dados padr o SQL nat i vament e ut ili zam apenas o concei t o
de excl uso fsi ca de r egi st ros, o que para out ras apl i caes seri a t ransparent e, mas no o
caso do ERP Prot heus.

Para mant er a compat i bilidade das apli caes desenvol vi das para bases de dados padro
I SAM, a rea de Tecnol ogi a e Banco de Dados da Mi crosi ga i mpl ement ou nos bancos de dados
padro SQL o concei t o de excl uso l gi ca de regi st ros exi st ent e nas bases de dados I SAM
at ravs da cri ao de campos de cont r ole especfi cos: R_E_C_N_O_, D_E_L_E_T_ e
R_E_C_D_E_L.

Est es campos permi t em que a apli cao ERP ger enci e as i nformaes do banco de dados da
mesma forma que as i nformaes em bases de dados I SAM.


- 126 -

ADVPL Compl et o


Com i sso o campo R_E_C_N_O_ ser um i dent i fi cador ni co do regi st ro dent r o da t abel a,
funci onando como o I D ou RECNUMBER de uma t abel a I SAM, mas ut ili zando um recurso
adi ci onal di sponvel nos bancos de dados r el aci onai s conheci do com Ch av e Pr i mr i a
11.2. Funes de acesso e mani pul ao de dados
.

Para a apli cao ERP Prot heus o campo de cont r ol e R_E_C_N_O_ defi ni do em t odas as
t abel as como sendo sua chave pri mri a, o que t ransfere o cont r ol e de sua numerao
seqenci al ao banco de dados.

O campo D_E_L_E_T_ t rat ado i nt ernament e pel a apli cao ERP como um fl ag ou marca de
excl uso. Dest a forma os r egi st ros que est i ver em com est e campo marcado sero
consi derados como excl udos l ogi cament e. A execuo do comando PACK em uma t abel a de
um banco de dados padro SQL vi sa excl ui r fi sicament e os regi st r os com o campo D_E_L_E_T_
marcado, mas no causar o efei t o de r enumerao de RECNO ( no caso R_E_C_N_O_) que
ocor re nas t abel a de bases de dados I SAM.


As funes de acesso e mani pul ao de dados descri t as nest e t pi co so as cl assi fi cadas
ant eri orment e como funes genri cas da li nguagem ADVPL, permi t indo que as mesmas sej am
ut ili zadas independent ement e da base de dados para a qual a apli cao ERP est confi gurada.

As funes de acesso e mani pul ao de dados defi nem basi cament e:

E Tabel a que est sendo t rat ada;
E Campos que devero ser l i dos ou at uali zados;
E Mt odo de acesso di ret o as i nformaes ( r egi st ros e campos) .

Dent r e as funes ADVPL di sponvei s para acesso e mani pul ao de i nformaes, est e mat eri al
i r det al har as segui nt es opes:

SELECT( )
DBSELECTAREA( )
DBSETORDER( )
DBSEEK( ) E MSSEEK( )
DBSKI P( )
DBGOTO( )
DBGOTOP( )
DBGOBOTTON( )
DBSETFI LTER( )
RECLOCK( )
SOFTLOCK( )
MSUNLOCK( )
DBDELETE( )
DBUSEAREA( )
DBCLOSEAREA( )

- 127 -

ADVPL Compl et o


DBRLOCK( )

Si nt ax e DBRLOCK( x I dent i f i cador )
Descr i o
Funo de base de dados, que efet ua o l ock ( t ravament o) do r egi st ro
i dent i fi cado pel o parmet r o xI dent i fi cador. Est e parmet r o pode ser o
Recno( ) para t abel as em formado I SAM, ou a chave pri mri a para bancos de
dados rel aci onai s.

Se o parmet ro xI dent i fi cador no for especi fi cado, t odos os l ocks da r ea de
t rabal ho sero li berados, e o regi st r o posi ci onado ser t ravado e adi ci onado
em uma l i st a de r egi st ros bl oqueados.

DBCLOSEAREA( )

Si nt ax e DbCl oseAr ea( )
Descr i o
Per mi t e que um ali as present e na conexo sej a fechado, o que vi abiliza seu
reuso em out r o operao. Est e comando t em efei t o apenas no al i as at ivo na
conexo, sendo necessri a sua ut ili zao em conj unt o com o comando
DbSel ect Ar ea( ) .

DBCOMMI T( )

Si nt ax e DBCOMMI T( )
Descr i o Efet ua t odas as at uali zaes pendent es na r ea de t rabal ho at i va.

DBCOMMI TALL( )

Si nt ax e DBCOMMI TALL( )
Descr i o
Efet ua t odas as at uali zaes pendent es em t odas as r ea de t rabal ho em uso
pel a t hread ( conexo) at i va.

DBDELETE( )

Si nt ax e DbDel et e( )
Descr i o
Efet ua a excl uso l gi ca do regi st ro posi ci onado na r ea de t rabal ho at i va,
sendo necessri a sua ut ili zao em conj unt o com as funes RecLock( ) e
MsUnLock( ) .

DBGOTO( )

Si nt ax e DbGot o( nRecno)
Descr i o
Move o cursor da r ea de t rabal ho at i va para o record number ( r ecno)
especi fi cado, r eali zando um posi ci onament o di ret o, sem a necessi dade uma
busca ( seek) pr vi o.


- 128 -

ADVPL Compl et o



DBGOTOP( )

Si nt ax e DbGoTop( )
Descr i o Move o cursor da r ea de t rabal ho at i va para o pri mei ro r egi st ro l gi co.

DBGOBOTTON( )

Si nt ax e DbGoBot t on ( )
Descr i o Move o cursor da r ea de t rabal ho at i va para o lt i mo regi st r o l gi co.

DBRLOCKLI ST( )

Si nt ax e DBRLOCKLI ST( )
Descr i o
Ret orna um ar ray cont endo o r ecord number ( r ecno) de t odos os r egi st ros
t ravados da r ea de t rabal ho at i va.

DBSEEK( ) E MSSEEK( )

Si nt ax e DbSeek ( cCh av e, l Sof t Seek , l Last )
Descr i o
DbSeek : Permi t e posi cionar o cursor da rea de t rabal ho at i vo no r egist ro
com as i nformaes especi fi cadas na chave de busca, fornecendo um r et orno
l gi co i ndi cando se o posi ci onament o foi efet uado com sucesso, ou sej a, se a
i nformao especi fi cada na chave de busca foi l ocal i zada na rea de
t rabal ho.

MsSeek ( ) : Funo desenvol vi da pel a rea de Tecnol ogi a da Mi crosi ga, a
qual possui as mesmas funci onali dades bsi cas da funo DbSeek( ) , com a
vant agem de no necessi t ar acessar novament e a base de dados para
l ocalizar uma i nformao j ut ili zada pel a t hread ( conexo) at i va.

DBSKI P( )

Si nt ax e DbSk i p( nRegi st r os)
Descr i o
Move o cursor do r egi st ro posi ci onado para o pr xi mo ( ou ant eri or
dependendo do parmet r o) , em funo da ordem at i va para a rea de
t rabal ho.

DBSELECTAREA( )

Si nt ax e DbSel ect Ar ea( nAr ea | cAr ea)
Descr i o
Defi ne a r ea de t rabal ho especi fi cada com sendo a r ea at i va. Todas as
operaes subseqent es que fi zer em r efernci a a uma rea de t rabal ho a
ut ili zao, a menos que a r ea desej ada sej a i nformada expli ci t ament e.


- 129 -

ADVPL Compl et o



DBSETFI LTER( )

Si nt ax e DbSet Fi l t er ( bCon di cao, cCondi cao)
Descr i o
Defi ne um fi l t ro para a r ea de t rabal ho at i va, o qual pode ser descr i t o na
for ma de um bl oco de cdi go ou at ravs de uma expresso si mpl es.

DBSETORDER( )

Si nt ax e DbSet Or der ( nOr dem)
Descr i o
Defi ne qual ndi ce ser ut ilizada pel a rea de t rabal ho at i va, ou sej a, pel a
rea pr evi ament e sel eci onada at ravs do comando DbSel ect Ar ea( ) . As
ordens di sponvei s no ambi ent e Prot heus so aquel as defini das no SI NDEX
/ SI X, ou as ordens di sponi bili zadas por mei o de ndi ces t emporri os.

DBORDERNI CKNAME( )

Si nt ax e DbOr der Ni ck Name( Ni ck Name)
Descr i o
Defi ne qual ndi ce cri ado pel o usuri o sej a ut ili zado. O usuri o pode i nclui r os
seus prpri os ndi ces e no moment o da i ncl uso deve cri ar o NI CKNAME par a
o mesmo.

DBUNLOCK( )

Si nt ax e DBUNLOCK( )
Descr i o
Mesma funci onali dade da funo UNLOCK( ) , s que r ecomendada para
ambi ent es de r ede nos quai s os arqui vos so compart i l hados.

Li bera o t ravament o do regi st ro posi ci onado na rea de t rabal ho at i va e
confi rma as at uali zaes efet uadas naquel e r egi st ro.

DBUNLOCKALL( )

Si nt ax e DBUNLOCKALL( )
Descr i o
Li bera o t ravament o de t odos os regi st ros de t odas as r eas de t rabal ho
di sponvei s na t hread ( conexo) at i va.

DBUSEAREA( )

Si nt ax e
DbUseAr ea( l Nov o, cDr i v er , cAr qui v o, cAl i as, l Compar i l h ado, ;
l SoLei t u r a)
Descr i o
Defi ne um arqui vo de base de dados como uma rea de t rabal ho di sponvel
na apli cao.

MSUNLOCK( )

Si nt ax e MsUn Lock ( )
Descr i o
Li bera o t ravament o ( l ock) do regi st r o posi ci onado confi rmando as
at ualizaes efet uadas nest e r egi st ro.


- 130 -

ADVPL Compl et o


RECLOCK( )

Si nt ax e RecLock ( cAl i as, l I ncl u i )
Descr i o
Efet ua o t ravament o do r egi st ro posi ci onado na r ea de t rabal ho at i va,
permi t i ndo a i ncluso ou al t erao das i nformaes do mesmo.

RLOCK( )

Si nt ax e RLOCK( ) l Sucesso
Descr i o Efet ua o t ravament o do regi st ro posi ci onado na rea de t rabal ho at i va.

SELECT( )

Si nt ax e Sel ect ( cAr ea)
Descr i o
Det ermi na o nmer o de refernci a de um det ermi nado ali as em um
ambi ent e de t r abal ho. Caso o al i as especi ficado no est ej a em uso no
ambi ent e, ser r et ornado o val or 0 ( zero) .


SOFTLOCK( )

Si nt ax e Sof t Lock ( cAl i as)
Descr i o
Per mi t e a reserva do r egi st ro posi ci onado na rea de t rabal ho at i va de for ma
que out ras operaes, com exceo da at ual , no possam at uali zar est e
regi st ro. Di fer e da funo RecLock( ) poi s no gera uma obri gao de
at ualizao, e pode ser sucedi do por el e.

Na apli cao ERP Pr ot heus, o Soft Lock( ) ut ili zado nos browses, ant es da
confi rmao da operao de al t erao e excl uso, poi s nest e moment o a
mesma ai nda no foi efet i vada, mas out ras conexes no podem acessar
aquel e regi st ro poi s o mesmo est em manut eno, o que i mpl ement a da
i nt egri dade da i nformao.

UNLOCK( )

Si nt ax e UNLOCK( )
Descr i o
Li bera o t ravament o do regi st ro posi ci onado na rea de t rabal ho at i va e
confi rma as at uali zaes efet uadas naquel e r egi st ro.



- 131 -

ADVPL Compl et o



11.3. Di f er enci ao ent r e var i vei s e nomes de campos

Mui t as vezes uma vari vel pode t er o mesmo nome que um campo de um arqui vo ou de uma
t abel a abert a no moment o. Nest e caso, o ADVPL pri vil egi ar o campo, de forma que uma
refernci a a um nome que i dent i fi que t ant o uma vari vel como um campo, r esul t ar no
cont edo do campo.

Para especi fi car qual deve ser o el ement o referenci ado, deve- se ut ili zar o operador de
i dent i fi cao de apel i do ( - > ) e um dos doi s i dent i fi cadores de r efer nci a, MEMVAR ou FI ELD.

cRes : = MEMVAR- > NOME

Est a l i nha de comando i dent i fi ca que o val or at ri budo vari vel cRes deve ser o val or da
vari vel de memri a chamada NOME.

cRes : = FI ELD- > NOME

Nest e caso, o val or at ri budo vari vel cRes ser o val or do campo NOME exi st ent e no arqui vo
ou t abel a abert o na r ea at ual .

O i dent i fi cador FI ELD pode ser subst i t udo pelo apeli do de um arqui vo ou t abel a abert o, par a
evi t ar a necessi dade de sel eci onar a r ea ant es de acessar o cont edo de t ermi nado campo.

cRes : = CLI ENTES- > NOME

As t abel as de dados ut ilizadas pel a apli cao ERP recebem aut omat i cament e do si st ema o
apeli do ou ALI AS especi fi cado para as mesmas no arqui vo de si st ema SX2. Assi m se o campo
NOME pert ence a uma t abel a da apli cao PROTHEUS, o mesmo poder ser r efer enci ado com a
i ndi cao do ALI AS pr - defi ni do dest a t abel a.

cRes : = SA1- > NOME / / SA1 Cadast ro de Cl i ent es



Para mai ores det al hes sobr e abert ura de arqui vos com at ri bui o de apeli dos,
consul t e a document ao sobre acesso a banco de dados ou a document ao
da funo dbUseAr ea( ) .

Os al i as das t abel as da apli cao ERP so padroni zados em t r s l et ras, que
corr espondem as i ni ci ais da t abel a. As confi guraes de cada ALI AS ut ilizado
pel o si st ema podem ser vi sualizadas at ravs do mdul o Confi gurador - >
Bases de Dados - > Di cionri os - > Bases de Dados.



- 132 -

ADVPL Compl et o



11.4. Cont r ol e de numer ao seqenci al

Al guns campos de numerao do Pr ot heus so forneci dos pel o si st ema em ordem ascendent e.
o caso, por exempl o, do nmero do pedi do de venda e out ros que servem como i dent i fi cador
das i nformaes das t abel as. pr eci so t er um cont r ol e do forneci ment o desses nmer os, em
especi al quando vri os usuri os est o t rabal hando si mult aneament e.



Os campos que r ecebem o t rat ament o de numerao seqenci al pel a
apli cao ERP no devem ser consi derados como chave pri mri a das t abel as
aos quai s est o vi ncul ados.

No caso especfi co da apli cao ERP Pr ot heus a chave pri mri a em ambi ent es
TOPCONNECT ser o campo R_E_C_N_O_, e para bases de dados padro
I SAM o concei t o de chave pri mri a i mpl ement ado pel a regra de negci o do
si st ema, poi s est e padro de dados no possui o concei t o de uni ci dade de
dados.


Semf or os

Para defi ni r o concei t o do que um semforo de numerao deve- se aval i ar a segui nt e
seqnci a de event os no si st ema:

E Ao ser forneci do um nmer o, el e permanece reservado at a concl uso da operao
que o sol i cit ou;

E Se est a operao for confi rmada, o nmer o i ndi sponi bilizado, mas se a operao for
cancel ada, o nmer o vol t ar a ser di sponvel mesmo que naquel e moment o nmeros
mai ores j t enham si do ofer eci dos e ut i lizados.

Com i sso, mesmo que t enhamos vri os pr ocessos sol i ci t ando numeraes seqenci ai s para
uma mesma t abel a, como por exempl o i ncl uses si mul t neas de pedi dos de vendas, t er emos
para cada pedi do um nmer o excl usi vos e sem o i nt erval os e numeraes no ut ili zadas.

Funes de cont r ol e de semf or os e numer ao seqenci al

A linguagem ADVPL per mi t e a ut ilizao das seguint es funes para o cont r ol e das numeraes
seqenci ai s ut ili zadas nas t abel as da apl i cao ERP:

GETSXENUM( )
CONFI RMSXE( )
ROLLBACKSXE( )

GETSXENUM( )

Si nt ax e GETSXENUM( cAl i as, cCampo, cAl i asSXE, nOr dem)
Descr i o
Obt m o nmero seqnci a do ali as especi fi cado no parmet ro, at ravs da
refernci a aos arqui vos de si st ema SXE/ SXF ou ao ser vi dor de numerao,
quando est a confi gurao est habi lit ada no ambi ent e Prot heus.


- 133 -

ADVPL Compl et o


CONFI RMSXE( )

Si nt ax e CONFI RMSXE( l Ver i f i ca)
Descr i o Confi rma o nmer o al ocado at ravs do l t i mo comando GETSXENUM( ) .


ROLLBACKSXE( )

Si nt ax e ROLLBACKSXE( )
Descr i o
Descart a o nmer o forneci do pel o l t i mo comando GETSXENUM( ) ,
ret ornando a numerao di sponvel para out ras conexes.


12. Cust omi zaes par a a apl i cao ERP

Nest e t pi co sero abordas as for mas pel as quai s a apli cao ERP Pr ot heus pode ser
cust omi zada com a ut ilizao da l i nguagem ADVPL.

Pel os recursos de confi gurao da apl i cao ERP di sponvei s no mdul o Confi gurador possvel
i mpl ement ar as segui nt es cust omi zaes:

E Vali daes de campos e pergunt as do si st ema e de usuri os
E I ncl uso de gat i lhos em campos de si st emas e de usuri os
E I ncl uso de regras em parmet ros de si st emas e de usuri os
E Desenvol vi ment o de pont os de ent rada para i nt eragi r com funes padr es do si st ema





- 134 -

ADVPL Compl et o



12.1. Cust omi zao de campos Di ci onr i o de Dados


12.1.1. Val i daes de campos e per gunt as

As funes de val idao t m como caract erst i ca fundament al um ret orno do t i po l gi co, ou
sej a, um cont edo .T. Verdadei ro ou .F. Fal so.

Com base nest a pr emi ssa, a ut i lizao de val i daes no Di ci onri o de Dados ( SX3) ou nas
Pergunt as de Pr ocessos e Rel at ri os ( SX1) dever focar sempre na ut ili zao de funes ou
expr esses que r esul t em em um r et orno l gi co.

At ravs do mdul o Confi gurador possvel al t erar as propri edades de um campo ou de uma
pergunt a de forma a i ncl ui r regras de val i dao para as segui nt es si t uaes:

E SX3 Val i dao de u sur i o ( X3 _VLDUSER)
E SX1 Val i dao da per gu nt a ( X1_ VALI D)

Dent r e as funes que a li nguagem ADVPL em conj unt o com os r ecur sos desenvol vi dos pela
apli cao ERP para val i dao de campos e pergunt as sero det al hadas:

VAZI O( )
NAOVAZI O( )
EXI STCPO( )
EXI STCHAV( )
PERTENCE( )
POSI TI VO( )
NEGATI VO( )
TEXTO( )

EXI STCHAV( )

Si nt ax e Ex i st Ch av ( cAl i as, cCont eudo, nI n di ce)
Descr i o
Ret orna .T. ou .F. se o cont edo especi fi cado exi st e no ali as especi fi cado.
Caso exi st a ser exi bi do um hel p de si st ema com um avi so i nfor mando da
ocor rnci a.

Funo ut ili zada normal ment e para veri fi car se um det ermi nado cdi go de
cadast r o j exi st e na t abel a na qual a i nformao ser i nseri da, como por
exempl o o CNPJ no cadast ro de cl i ent es ou fornecedores.


- 135 -

ADVPL Compl et o



EXI STCPO( )

Si nt ax e Ex i st Cpo( cAl i as, cCon t eudo, n I ndi ce)
Descr i o
Ret orna .T. ou .F. se o cont edo especi fi cado no exi st e no ali as
especi fi cado. Caso no exi st a ser exi bi do um hel p de si st ema com um avi so
i nformando da ocor rncia.

Funo ut ili zada normal ment e para veri fi car se a i nformao di gi t ada em um
campo, a qual depende de out ra t abel a, real ment e exi st e nest a out ra t abel a,
como por exempl o o cdi go de um cl i ent e em um pedi do de venda.

NAOVAZI O( )

Si nt ax e NaoVazi o( )
Descr i o
Ret orna .T. ou .F. se o cont edo do campo posi ci onado no moment o no
est vazi o.

NEGATI VO( )

Si nt ax e Negat i v o( )
Descr i o Ret orna .T. ou .F. se o cont edo di gi t ado para o campo negat i vo.

PERTENCE( )

Si nt ax e Per t ence( cSt r i ng)
Descr i o
Ret orna .T. ou .F. se o cont edo di gi t ado para o campo est cont i do na
st ri ng defi ni da como parmet ro da funo. Nor mal ment e ut ilizada em
campos com a opo de combo, poi s caso cont rri o seri a ut ili zada a funo
Exi st Cpo( ) .

POSI TI VO( )

Si nt ax e Posi t i v o( )
Descr i o Ret orna .T. ou .F. se o cont edo di gi t ado para o campo posi t i vo.

TEXTO( )

Si nt ax e Tex t o( )
Descr i o
Ret orna .T. ou .F. se o cont edo di gi t ado para o campo cont m apenas
nmeros ou al fanumri cos.

VAZI O( )

Si nt ax e Vazi o( )
Descr i o
Ret orna .T. ou .F. se o cont edo do campo posi ci onado no moment o est
vazi o.


- 136 -

ADVPL Compl et o



12.1.2. Pi ct ur es de f or mao di sponvei s

Com base na document ao di sponvel no DEM Document ao El et r ni ca Mi crosi ga, a
linguagem ADVPL e a apli cao ERP Prot heus admi t em as segui nt es pi ct ures:

Di ci onr i o de Dados ( SX3) e GET

Funes
Cont edo Funci on al i dade
A Per mi t e apenas caract er es al fabt i cos.
C Exi be CR depoi s de nmer os posi t i vos.
E Exi be numri co com o pont o e vrgul a i nvert i dos ( format o Eur opeu) .
R I nser e caract eres di ferent es dos caract er es de t empl at e na exi bi o, mas no os
i nsere na vari vel do GET.
S< n> Per mi t e rol ament o hori zont al do t ext o dent ro do GET, < n> um nmer o i nt ei ro
que i dent i fi ca o t amanho da regi o.
X Exi be DB depoi s de nmer os negat i vos.
Z Exi be zeros como br ancos.
( Exi be nmeros negat i vos ent re par nt eses com os espaos em branco i ni ci ai s.
) Exi be nmeros negat i vos ent re par nt eses sem os espaos em branco i ni ci ai s.
! Convert e caract er es al fabt i cos para mai scul o.

Templ at es
Cont edo Funci on al i dade
X Per mi t e qual quer caract er e.
9 Per mi t e apenas dgit os para qual quer t i po de dado, i nclui ndo o si nal para
numri cos.
# Per mi t e dgi t os, si nai s e espaos em branco par a qual quer t i po de dado.
! Convert e caract er es al fabt i cos para mai scul o.
* Exi be um ast eri sco no lugar dos espaos em br anco i ni ci ai s em nmer os.
. Exi be o pont o deci mal .
, Exi be a posi o do mi l har.

Ex empl o 01 Pi ct u r e campo numr i co

CT2_VALOR Numri co 17,2
Pi ct ure: @E 99,999,999,999,999.99


Ex empl o 02 Pi ct u r e campo t ex t o, com di gi t ao apen as em cai x a al t a

A1_NOME Caract er - 40
Pi ct ure: @!


- 137 -

ADVPL Compl et o



SAY e PSAY

Funes
Cont edo Funci on al i dade
C Exi be CR depoi s de nmer os posi t i vos
E Exi be numri co com o pont o e a vrgul a i nvert i dos ( format o Eur opeu)
R I nser e caract er es di ferent es dos caract eres de t empl at e
X Exi be DB depoi s de nmer os negat i vos
Z Exi be zeros como br ancos
( Envol ve nmer os negat i vos ent r e par nt eses
! Convert e t odos os caract er es al fabt i cos para mai scul o

Templ at es
Cont edo Funci on al i dade
X Exi be dgi t os para qual quer t i po de dado
9 Exi be dgi t os para qual quer t i po de dado
# Exi be dgi t os para qual quer t i po de dado
! Convert e caract er es al fabt i cos para mai scul o
* Exi be ast eri sco no l ugar de espaos em branco ini ci as em nmer os
. Exi be a posi o do pont o deci mal
, Exi be a posi o do mi l har

Ex empl o 01 Pi ct u r e campo numr i co

CT2_VALOR Numri co 17,2
Pi ct ure: @E 99,999,999,999,999.99



















- 138 -

ADVPL Compl et o



12.2. Cust omi zao de gat i l hos Conf i gur ador

A apli cao ERP ut iliza o r ecur so de gat il hos em campo com a fi nali dade de auxi liar o usurio
no pr eenchi ment o de i nfor maes durant e a di gi t ao de i nformaes. As funes que podem
ser ut ili zadas no gat ilho est o di ret ament e r el aci onadas a defi ni o da expr esso de ret orno
que ser execut ada na avali ao do gat i l ho do campo.

As regras que devem ser obser vadas na mont agem de um gat il ho e confi gurao de seu
ret orno so:

E Na defi ni o da chave de busca do gat il ho deve ser avali ada qual fili al dever ser
ut ili zada como part e da chave: a fi li al da t abel a de ori gem do gat il ho ou a fili al da
t abel a que ser consul t ada. O que normal ment e det ermi na a fili al que ser ut ili zada
como part e da chave j ust ament e a i nformao que ser consul t ada, aonde:

o Consul t as de i nformaes ent r e t abel as com est rut ura de cabeal ho e i t ens
devem ut ilizar a fili al da t abel a de ori gem, poi s ambas as t abel as devem possui r
o mesmo t rat ament o de fili al ( compart il hado ou excl usi vo) .

Ex empl os:

Pedi do de vendas - > SC5 x SC6
Not a fi scal de ent rada - > SF1 x SD1
Fi cha de i mobili zado - > SN1 x SN3
Or ament o cont bil - > CV1 x CV2

o Consul t a de i nformaes de t abel as de cadast r os devem ut ili zar a fili al da t abel a
a ser consul t ada, pois o compart il hament o dos cadast r os normal ment e
i ndependent e em r el ao s movi ment aes e out ros cadast ros do si st ema.

Ex empl os:

Cadast r o de cl i ent es - > SA1 ( compart il hado)
Cadast r o de fornecedor es - > SA2 ( compart i l hado)
Cadast r o de vendedor es - > SA3 ( excl usi vo)
Cadast r o de t ransport adoras - > SA4 ( excl usi vo)

o Consul t a a i nformaes de t abel as de movi ment os devem ut ili zar a fi li al da
t abel a a ser consul t ada, poi s apesar das movi ment aes de um mdul o
segui rem um det ermi nado padro, a consul t a pode ser real i zada ent re t abel as
de mdul os di st i nt os, o que poderi a gerar um ret orno i ncor ret o baseado nas
di ferent es paramet ri zaes dest es ambi ent es.

Ex empl os:

Cont as a pagar - > SE2 ( compart i l hado)
Movi ment os cont bei s - > CT2 ( excl usi vo)
Pedi dos de compras - > SC7 ( compart il hado)
I t ens da not a fi scal de ent rada - > SD1 ( excl usi vo)

E Na defi ni o da regra de r et orno deve ser consi derado o t i po do campo que ser
at ualizado, poi s est e campo que det ermi na qual t i po do r et orno ser consi derado
vli do para o gat il ho.


- 139 -

ADVPL Compl et o



12.3. Cust omi zao de par met r os Conf i gur ador

Os parmet r os de si st ema ut ilizados pel a apli cao ERP e defi ni dos at ravs do mdul o
confi gurador possuem as segui nt es caract erst i cas fundament ai s:

E Ti po do parmet r o: de forma si mil ar a uma vari vel , um parmet ro t er um t i po de
cont edo pr - defi ni do em seu cadast ro.
Est a i nformao ut ili zada pel as funes da apli cao ERP na i nt erpr et ao do
cont edo do parmet r o e ret orno dest a i nformao a r ot i na que o consult ou.

E I nt erpr et ao do cont edo do parmet r o: di ver sos parmet r os do si st ema t m seu
cont edo macr o execut ado durant e a execuo de uma r ot i na do ERP. Est es
parmet ros macr o execut vei s t em como nica caract erst i ca em comum seu t i po:
caract ere, mas no exi st e nenhum i dent i fi cador expl i ci t o que permi t e a fci l
vi suali zao de quai s parmet ros possuem um ret orno si mpl es e de quai s parmet ros
t ero seu cont edo macro execut ado par a det er mi nar o r et orno r eal .

A ni ca forma efi caz de aval i ar como um parmet ro t rat ado ( simpl es ret orno ou
macr o execuo) at r avs do cdi go font e da rot i na, no qual dever ser aval i ado como
t rat ado o ret orno de uma dest as funes:

o GETMV( )
o SUPERGETMV( )
o GETNEWPAR( )

Um r et orno macr o execut ado det ermi nado at ravs do uso do operador & ou de uma
das funes de execuo de bl ocos de cdi go em conj unt o com uma das funes ci t adas
ant eri orment e.

12.3.1. Funes par a mani pul ao de par met r os

A apli cao ERP di sponibiliza as segui nt es funes par a consul t a e at uali zao de parmet ros:

GETMV( )
SUPERGETMV( )
GETNEWPAR( )
PUTMV( )

GETMV( )

Si nt ax e GETMV( cPar amet r o)
Descr i o
Ret orna o cont edo do parmet ro especi fi cado no arqui vo SX6, consi derando
a fili al paramet ri zada na conexo. Caso o parmet r o no exi st a ser exi bi do
um hel p do si st ema i nformando a ocorr nci a.


- 140 -

ADVPL Compl et o



GETNEWPAR( )

Si nt ax e GETNEWPAR( cPar amet r o, cPadr ao, cFi l i al )
Descr i o
Ret orna o cont edo do parmet ro especi fi cado no arqui vo SX6, consi derando
a fili al paramet ri zada na conexo. Caso o parmet r o no exi st a ser exi bi do
um hel p do si st ema i nformando a ocorr nci a.

Di fere do Super Get MV( ) poi s consi dera que o parmet ro pode no exi st i r na
verso at ual do si st ema, e por conseqnci a no ser exi bi da a mensagem
de hel p.

PUTMV( )

Si nt ax e PUTMV( cPar amet r o, cCont eudo)
Descr i o
At uali za o cont edo do parmet ro especi fi cado no arqui vo SX6, de acordo
com as paramet ri zaes i nformadas.


SUPERGETMV( )

Si nt ax e SUPERGETMV( cPar amet r o , l Hel p , cPadr ao , cFi l i al )
Descr i o
Ret orna o cont edo do parmet ro especi fi cado no arqui vo SX6, consi derando
a fili al paramet ri zada na conexo. Caso o parmet r o no exi st a ser exi bi do
um hel p do si st ema i nformando a ocorr nci a.

Di fere do Get Mv( ) poi s os parmet ros consul t ados so adi ci onados em uma
rea de memri a, que permi t e que em uma nova consul t a no sej a
necessri o acessar e pesqui sar o parmet ro na base de dados.


12.3.2. Cui dados na ut i l i zao de um par met r o

Um parmet ro de si st ema t em a fi nali dade de pr opi ci ar um ret orno vli do a um cont edo
previ ament e defi ni do na confi gurao do mdul o para uma rot i na, processo ou quai squer
out ros t i pos de funci onali dades di sponvei s na apli cao.

Apesar de haver par met r os que permi t am a confi gurao de expr esses, e por conseqnci a
a ut ili zao de funes para defi ni r o ret orno que ser obt i do com a consul t a dest e parmet ro,
ex pr essament e pr oi bi do o uso de f unes em par met r os par a man i pul ar
i nf or maes da base de dados do si st ema.

Caso haj a a necessi dade de ser i mpl ement ado um t rat ament o adi ci onal a um processo padro
do si st ema, o mesmo dever ut ili zar o r ecur so de pont o de ent r ada.

A razo dest a r est ri o si mpl es:

E As r ot i nas da apli cao ERP no prot egem a consul t a de cont edos de parmet r os
quant o a gravaes r eal i zadas dent ro ou fora de uma t ransao.

E Dest a forma, quai squer al t erao na base r eal izada por uma r ot i na confi gurada em um
parmet ro pode ocasi onar a perda da i nt egri dade das i nformaes do si st ema.

- 141 -

ADVPL Compl et o



12.4. Pont os de Ent r ada Concei t os, Pr emi ssas e Regr as

Concei t os

Um pont o de ent rada uma User Funct i on desenvol vi da com a fi nalidade de i nt eragi r com uma
rot i na padro da apli cao ERP.

A User Funct i on dever t er um nome pr - est abel eci do no desenvol vi ment o da rot i na padro do
ERP, e de acordo est a pr- di sposi o e o moment o no qual o pont o de ent rada execut ado
durant e um pr ocessament o, el e poder:

E Compl ement ar uma val idao r eali zada pel a apli cao;

E Compl ement ar as at ual i zaes real i zadas pel o processament o em t abel as padres do
ERP;

E I mpl ement ar a at uali zao de t abel as especi ficas durant e o pr ocessament o de uma
rot i na padro do ERP;

E Execut ar uma ao sem processos de at ualizaes, mas que necessi t e ut ilizar as
i nformaes at uai s do ambi ent e durant e o processament o da rot i na padro para
det ermi nar as caract erst i cas do pr ocesso;

E Subst i t ui r um processament o padro do si st ema por uma regra especfi ca do cl i ent e no
qual o mesmo ser i mplement ado.


Pr emi ssas e Regr as

E Um pont o de ent rada no deve ser ut ili zado para out ras fi nali dades seno para as quai s
o mesmo foi pr- defi nido, sob pena de causar a perda da i nt egri dade das i nformaes
da base de dados ou pr ovocar event os de er r o durant e a execuo da r ot i na padro.

E Um pont o de ent rada deve ser t ranspar ent e para o pr ocesso padro, de forma que
t odas as t abel as acessadas pel o pont o de ent rada e que sej am ut ili zadas pel a rot i na
padro, devero t er sua si t uao i medi at ament e ant eri or execuo do pont o
rest aurada ao t rmi no do mesmo, e para i st o r ecomenda- se o uso das funes
GETAREA( ) e RESTAREA( ) .

E Como um pont o de ent rada no execut ado da forma t radi ci onal , ou sej a, el e no
chamado como uma funo, el e no recebe parmet ros. A apli cao ERP di sponi biliza
uma vari vel de si st ema denomi nada PARAMI XB, a qual recebe os parmet r os da
funo chamadora e os di sponi bili za para serem ut ilizados pel a rot i na cust omi zada.

E A vari vel PARAMI XB no possui um padro de defi ni o nos cdi gos font es da
apli cao ERP, dest a for ma seu t i po pode vari ar dest e um cont edo si mpl es ( caract er e,
numri co, l gi co e et c.) a um t i po compl exo como um ar ray ou um obj et o. Dest a forma
necessri o sempr e avali ar a document ao sobre o pont o bem como prot eger a
funo cust omi zada de t i pos de PARAMI XB no t rat ados por el a.


- 142 -

ADVPL Compl et o



13. I nt er f aces v i suai s

A linguagem ADVPL possui duas for mas di st i nt as para defi ni o de i nt erfaces vi suai s no
ambi ent e ERP: si nt axe convenci onal , nos padr es da l i nguagem CLI PPER e a si nt axe ori ent ada
a obj et os.

Al m das di ferent es si nt axes di sponvei s para defi ni o das i nt erfaces vi suai s o ERP Prot heus
possui funci onali dades pr- defi ni das, as quai s j cont m t odos os t rat ament os necessri os a
at ender as necessi dades bsi cas de acesso e manut eno das i nformaes do si st ema.

Nest e t pi co sero abordadas as si nt axes convenci onai s para defi ni o das i nt erfaces vi suais
da li nguagem ADVPL e as i nt erfaces de manut eno di sponvei s no ambi ent e ERP Pr ot heus.


13.1. Si nt ax e e component es das i nt er f aces v i suai s

A si nt axe convenci onal para defi ni o de component es vi suai s da linguagem ADVPL depende
di ret ament e no i ncl ude especi fi cado no cabeal ho do font e. Os doi s i ncl udes di sponvei s para o
ambi ent e ADVPL Pr ot heus so:

E RWMAKE. CH: permi t e a ut ili zao da si nt axe CLI PPER na defi ni o dos component es
vi suai s.

E PROTHEUS.CH: permi t e a ut ili zao da si nt axe ADVPL convenci onal , a qual um
apri morament o da si nt axe CLI PPER, com a incluso de novos at ri but os para os
component es vi suai s di sponi bilizados no ERP Pr ot heus.

Para il ust rar a di ferena na ut ilizao dest es doi s i ncl udes, segue abai xo as di ferent es
defi ni es para o component es Di al og e MsDi al og:

Ex empl o 01 I ncl ude Rw mak e.ch

# i ncl ude rwmake. ch

@ 0,0 TO 400,600 DI ALOG oDl g TI TLE "Janel a em si nt axe Cl i pper"
ACTI VATE DI ALOG oDl g CENTERED


Ex empl o 02 I ncl ude Pr ot heu s.ch

# i ncl ude prot heus.ch

DEFI NE MSDI ALOG oDl g TI TLE "Janel a em si nt axe ADVPL "FROM 000,000 TO 400,600 PI XEL
ACTI VATE MSDI ALOG oDl g CENTERED



Ambas as si nt axes produzi ro o mesmo efei t o quando compi ladas e
execut adas no ambi ent e Pr ot heus, mas deve ser ut ili zada sempr e a si nt axe
ADVPL at ravs do uso do i ncl ude PROTHEUS.CH




- 143 -

ADVPL Compl et o


Os component es da i nt erface vi sual que ser o t rat ados nest e t pico, ut ili zando a si nt axe
ADVPL so:

MSDI ALOG( )
MSGET( )
SAY( )
BUTTON( )
SBUTTON( )

BUTTON( )

Si nt ax e
@ nLi n ha, nCol un a BUTTON cTex t o SI ZE nLar gur a,n Al t ur a UNI DADE
OF oObj et oRef ACTI ON AO
Descr i o
Defi ne o component e vi sual But t on, o qual per mi t e a i ncl uso de bot es de
operao na t el a da i nt erface, os quai s sero vi sualizados soment e com um
t ext o si mpl es para sua i dent i fi cao.

MSDI ALOG( )

Si nt ax e
DEFI NE MSDI ALOG oObj et oDLG TI TLE cTi t ul o FROM nLi nI n i ,n Col I n i
TO nLi Fi m,n Col Fi m OF oObj et oRef UNI DADE
Descr i o
Defi ne o component e MSDI ALOG( ) , o qual ut ili zado como base para os
demai s component es da i nt erface vi sual , poi s um component e MSDI ALOG( )
uma j anel a da apli cao.

MSGET( )

Si nt ax e
@ nLi nh a, nCol u na MSGET VARI AVEL SI ZE nLar gu r a,n Al t ur a
UNI DADE OF oObj et oRef F3 cF3 VALI D VALI D WHEN WHEN PI CTURE
cPi ct ur e
Descr i o
Defi ne o component e vi sual MSGET, o qual ut ilizado para capt ura de
i nformaes di gi t vei s na t el a da i nt erface.

SAY( )

Si nt ax e
@ nLi n ha, nCol un a SAY cTex t o SI ZE nLar gur a,n Al t u r a UNI DADE OF
oObj et oRef
Descr i o
Defi ne o component e vi sual SAY, o qual ut ili zado para exi bi o de t ext os
em uma t el a de i nt erface.

SBUTTON( )

Si nt ax e
DEFI NE SBUTTON FROM nLi nh a, nCol u na TYPE N ACTI ON AO
STATUS OF oObj et oRet
Descr i o
Defi ne o component e vi sual SBut t on, o qual per mi t e a i ncl uso de bot es de
operao na t el a da i nt erface, os quai s sero vi sualizados dependendo da
i nt erface do si st ema ERP ut ili zada soment e com um t ext o si mpl es para sua
i dent i fi cao, ou com uma i magem ( Bi t Map) pr- defi ni do.




- 144 -

ADVPL Compl et o


I nt er f ace v i sual compl et a

Abai xo segue um cdi go compl et o de i nt erface, ut ili zado t odos os el ement os da i nt erface vi sual
descri t os ant eri orment e:


DEFI 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 cText o SI ZE 55, 07 OF oDl g PI XEL

@ 010,050 MSGET cCGC SI ZE 55, 11 OF oDl g PI XEL PI CTURE " @R 99.999.999/ 9999- 99";
VALI D ! Vazi o( )

DEFI NE SBUTTON FROM 010, 120 TYPE 1 ACTI ON ( nOpca : = 1, oDl g: End( ) ) ;
ENABLE OF oDl g

DEFI NE SBUTTON FROM 020, 120 TYPE 2 ACTI ON ( nOpca : = 2, oDl g: End( ) ) ;
ENABLE OF oDl g

ACTI VATE MSDI ALOG oDl g CENTERED




O cdi go demonst rado ant eri orment e ut ilizados nos exer cci os de fi xao
dest e mat eri al e dever produzi r a segui nt e i nt er face:







- 145 -

ADVPL Compl et o



13.2. I nt er f aces padr es par a at ual i zaes de dados

Os pr ogramas de at ualizao de cadast ros e digi t ao de movi ment os seguem um padro que
se api a no Di ci onri o de Dados.

Basi cament e so duas as i nt erfaces quer permi t em a vi suali zao das i nformaes e a
mani pul ao dos dados do si st ema.

E Ax Cadast r o
E Mbr ow se

Ambos os model os ut ilizam como pr emi ssa que a est rut ura da t abel a a ser ut ilizada est ej a
defi ni da no di ci onri o de dados do si st ema ( SX3) .

13.2.1. Ax Cadast r o( )

O AxCadast r o( ) uma funci onali dade de cadast ro si mpl es, com poucas opes de
cust omi zao, a qual compost a de:

Browse padro para vi sualizao das i nformaes da base de dados, de acordo com as
confi guraes do SX3 Di ci onri o de Dados ( campo br owse) .

Funes de pesqui sa, vi sualizao, i ncl uso, al t erao e excl uso padr es para
vi suali zao de regi st r os si mpl es, sem a opo de cabeal ho e i t ens.

E Si nt ax e: Ax Cadast r o( cAl i as, cTi t u l o, cVl dEx c, cVl dAl t )

E Par met r os

cAl i as
Ali as padro do si st ema para ut i lizao, o qual deve est ar defi ni do no
di ci onri o de dados SX3.
cTi t ul o Tt ul o da Janel a
cVl dEx c Vali dao para Excl uso
cVl dAl t Vali dao para Al t erao

Ex empl o:

# i ncl ude "prot heus.ch"

User Funct i on XCadSA2( )

Local cAl i as : = "SA2"
Local cTi t ul o : = "Cadast ro de Fornecedores"
Local cVl dExc : = " .T. "
Local cVl dAlt : = ".T."

dbSel ect Area( cAli as)
dbSet Order( 1)
AxCadast r o( cAl i as,cTi t ulo,cVl dExc,cVl dAl t )
Ret urn



- 146 -

ADVPL Compl et o














13.2.2. MBr ow se( )

A Mbrowse( ) uma funci onali dade de cadast ro que permi t e a ut ilizao de r ecursos mai s
apri morados na vi suali zao e mani pul ao das i nformaes do si st ema, possui ndo os
segui nt es component es:

Browse padro para vi sualizao das i nformaes da base de dados, de acordo com as
confi guraes do SX3 Di ci onri o de Dados ( campo br owse) .

Paramet ri zao para funes especfi cas para as aes de vi sualizao, i ncluso,
al t erao e excl uso de i nformaes, o que vi abiliza a manut eno de i nformaes com
est rut ura de cabeal hos e i t ens.

Recur sos adi ci onai s como i dent i fi cador es de st at us de regi st ros, l egendas e fil t ros para
as i nformaes.

E Si nt ax e si mpl i f i cada: MBr ow se( nLi n1 , n Col 1, nLi n2 , n Col 2, cAl i as)

E Par met r os

nLi n 1, nCol 1,
nLi n 2, nCol 2
Coordenadas dos cant os aonde o browse ser exi bi do. Para segui r o
padro da AXCADASTRO( ) use 6,1,22,75 .
cAl i as
Ali as padro do si st ema para ut i lizao, o qual deve est ar defi ni do no
di ci onri o de dados SX3.


- 147 -

ADVPL Compl et o



E Var i v ei s pr i v at e adi ci on ai s

aRot i n a

Array cont endo as funes que sero execut adas pel a Mbr owse.
Est e array pode ser par amet ri zados com as funes bsi cas da
AxCadast r o conforme abai xo:

AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} )
AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} )
AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui " ,0,3} )
AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} )
AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} )


cCadast r o Tt ul o do browse que ser exi bido.

Ex empl o:

# i ncl ude "prot heus.ch"

User Funct i on MBrwSA2( )

Local cAl i as : = "SA2"
Pri vat e cCadast r o : = "Cadast ro de Fornecedor es"
Pri vat e aRot i na : = { }

AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} )
AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} )
AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui ",0,3} )
AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} )
AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} )

dbSel ect Area( cAli as)
dbSet Order( 1)
mBrowse( 6,1,22,75,cAl ias)
Ret urn



- 148 -

ADVPL Compl et o













1. Ut ilizando a paramet ri zao exempli fi cada, o efei t o obt i do com o uso
da Mbr owse( ) ser o mesmo obt i do com o uso da AxCadast ro( ) .

2. A posi o das funes no array aRot i na define o cont edo de uma
vari vel de cont rol e que ser r epassada para as funes chamadas a
part i r da Mbrowse, convenci onada como nOpc. Dest a forma, para
mant er o padr o da apli cao ERP a ordem a ser segui da na defi ni o
do aRot i na ;

1 Pesqui sar
2 Vi suali zar
3 I ncl ui r
4 Al t erar
5 Excl ui r
6 Li vre



Ao defi ni r as funes no array aRot i na, se o nome da funo no for
especi fi cado com ( ) , a Mbrowse passar como parmet ros as seguint es
vari vei s de cont r ol e:

cAl i as: Al i as at i vo defi ni do para a Mbrowse
nRecn o: Record number ( recno) do regi st r o posi ci onado no ali as
at i vo.
nOpc: Posi o da opo ut ili zada na Mbrowse de acordo com a ordem
da funo no array a Rot ina.




- 149 -

ADVPL Compl et o



Ex empl o: Funo BI n cl ui ( ) su bst i t ui ndo a f uno Ax I n cl u i ( )

# i ncl ude "prot heus.ch"

User Funct i on MBrwSA2( )

Local cAl i as : = "SA2"

Pri vat e cCadast r o : = "Cadast ro de Fornecedor es"
Pri vat e aRot i na : = { }

AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui " ,0,1} )
AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual " ,0,2} )
AADD( aRot i na,{ "I ncl ui r" ,"U_BI ncl ui " ,0,3} )
AADD( aRot i na,{ "Alt erar " ,"AxAl t era" ,0,4} )
AADD( aRot i na,{ "Excl ui r" ,"AxDel et a" ,0,5} )

dbSel ect Area( cAli as)
dbSet Order( 1)
mBrowse( 6,1,22,75,cAl ias)
Ret urn

USER FUNCTI ON BI ncl ui( cAli as, nReg, nOpc)

Local cTudoOk : = "( Al er t ( ' OK' ) ,. T.) "
AxI ncl ui ( cAli as,nReg,nOpc,,, ,cTudoOk)

RETURN

















- 150 -

ADVPL Compl et o



13.2.3. Ax Funct i ons( )

Conforme menci onado nos t pi cos sobre as i nt erfaces padres AxCadast ro( ) e Mbr owse( ) ,
exi st em funes padr es da apli cao ERP que permi t em a vi suali zao, i ncl uso, al t erao e
excl uso de dados em format o si mpl es.

Est as funes so padres na defi ni o da i nt erface AxCadast ro( ) e podem ser ut i lizadas
t ambm da const ruo no array aRot i na ut ilizado pel a Mbr owse( ) , as quai s est o l i st adas a
segui r:

AXPESQUI ( )
AXVI SUAL( )
AXI NCLUI ( )
AXALTERA( )
AXDELETA( )

AXALTERA( )

Si nt ax e
Ax Al t er a( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ;
cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed)
Descr i o
Funo de al t erao padro das i nformaes de um regi st ro, no format o
Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .

AXDELETA( )

Si nt ax e
AXDELETA( cAl i as, nReg, nOpc, cTr ansact , aCpos, aBut t ons, aPar am, ;
aAut o, l Max i mi zed)
Descr i o
Funo de excl uso padro das i nformaes de um regi st r o, no format o
Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .

AXI NCLUI ( )

Si nt ax e
Ax I ncl u i ( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ;
cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed)
Descr i o
Funo de i ncl uso padr o das i nformaes de um regi st r o, no format o
Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .

AXPESQUI ( )

Si nt ax e AXPESQUI ( )
Descr i o
Funo de pesqui sa padro em r egi st ros exi bi dos pel os br owses do si st ema,
a qual posi ci ona o br owse no regi st ro pesqui sado. Exi be uma t el a que
permi t e a sel eo do ndi ce a ser ut i lizado na pesqui sa e a di gi t ao das
i nformaes que compe a chave de busca.


- 151 -

ADVPL Compl et o



AXVI SUAL( )

Si nt ax e
AXVI SUAL( cAl i as, n Reg, nOpc, aAch o, nCol Men s, cMensagem, cFunc, ;
aBut t ons, l Max i mi zed )
Descr i o
Funo de vi suali zao padro das i nformaes de um regi st r o, no for mat o
Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .


- 152 -

ADVPL Compl et o



APNDI CES

BOAS PRTI CAS DE PROGRAMAO

14. Ut i l i zao de I dent ao

obri gat ri a a ut ilizao da i dent ao, poi s t orna o cdi go mui t o mai s l egvel . Vej a os
exempl os abai xo:


A ut ili zao da i dent ao segui ndo as est rut uras de cont rol e de fl uxo ( whil e, i f, caso et c) t orna
a compr eenso do cdi go mui t o mai s fcil :



Para i dent ar o cdi go ut ili ze a t ecl a < TAB> e na ferrament a DEV- St udi o, a qual pode ser
confi gurada at ravs da opo Pr efer nci as :


- 153 -

ADVPL Compl et o




15. Capi t ul ao de Pal av r as- Chave

Uma conveno ampl ament e ut i lizada a de capi t ul ar as pal avras chaves, funes, vari vei s e
campos ut ili zando uma combi nao de caract er es em mai scul o e mi nscul o, vi sando facili t ar
a l ei t ura do cdi go font e. O cdi go a segui r:

l ocal ncnt w hi l e ( ncn t + + < 10 ) nt ot al + = ncnt * 2 en ddo

Fi cari a melhor com as pal avras chaves e vari vei s capi t ul adas:

Local n Cnt Whi l e ( nCnt + + < 1 0 ) nTot al + = nCnt * 2 EndDo



Para funes de mani pul ao de dados que comecem por db , a capi t ulao
s ser efet uada aps o db :

E dbSeek ( )
E dbSel ect Ar ea( )








- 154 -

ADVPL Compl et o



15.1. Pal av r as em mai scul o

A regra ut i lizar caract er es em mai scul o para:

E Const ant es:
# defi ne NUMLI NES 60 # defi ne NUMPAGES 1000

E Var i v ei s de memr i a:
M- > CT2_CRCONV M- > CT2_MCONVER : = Cri aVar( "CT2_CONVER")

E Campos:
SC6- > C6_NUMPED

E Quer y s:
SELECT * FROM.. .


16. Ut i l i zao da Not ao Hngar a

A not ao hngara consi st e em adi ci onar os prefi xos aos nomes de vari vei s, de modo a
faci l ment e se i dent i fi car seu t i po. I st o facili t a na cri ao de cdi gos- font e ext ensos, poi s
usando a Not ao Hngara, voc no pr eci sa fi car o t empo t odo vol t ando defi ni o de uma
vari vel para se l embrar qual o t i po de dados que deve ser col ocado nel a. Vari vei s devem
t er um pr efi xo de Not ao Hngara em mi nscul as, segui do de um nome que i dent i fi que a
funo da vari vel , sendo que a i ni ci al de cada pal avra deve ser mai scul a.
obri gat ri a a ut ilizao dest a not ao para nomear vari vei s.
Not ao Ti po de dado Ex empl o
a Array aVal ores
b Bl oco de cdi go bSeek
c Caract er cNome
d Dat a dDat aBase
l Lgi co l Cont i nua
n Numri co nVal or
o Obj et o oMai nWindow
x I ndefi ni do xCont eudo







- 155 -

ADVPL Compl et o



17. Pal av r as r eser v adas

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 EOF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL FCOUNT MI N SQRT
CTOD FI ELDNAME MONTH STR DATE
FI LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED FOUND PROCEDURE
TRANSFORM DEVPOS FUNCTI ON PROW TRI M
DOW I F RECCOUNT TYPE DTOC
I I F RECNO UPPER TRY AS
CATCH THROW




E Pal avras reservadas no podem ser ut i lizadas para vari vei s,
procedi ment os ou funes;

E Funes r eservadas so pert encent es ao compi l ador e no podem ser
redefi nidas por uma aplicao;

E Todos os i dent i fi cadores que comearem com doi s ou mai s caract eres
_ so ut ili zados como i dent i fi cadores i nt ernos e so r eservados.

E I dent i fi cadores de escopo PRI VATE ou PUBLI C ut ili zados em apli caes
especfi cas desenvol vida por ou para client es devem t er sua
i dent i fi cao i ni ci ada por um caract ere _ .




- 156 -

ADVPL Compl et o



LI STAS DE EXERC CI OS

Mdul o 01: I nt r oduo pr ogr amao





01
Apri morar os segui nt es al gori t mos descri t os na apost i l a:

E Usar t el efone pbli co cart o
E Fri t ar um ovo
E Mascar um chi cl et e
E Tr ocar l mpadas
E Descascar bat at as
E Jogar o Jogo da Forca





02
Mont ar os di agramas de bl ocos para os al gori t mos desenvol vi dos no exercci o
ant eri or:

E Usar t el efone pbli co cart o
E Fri t ar um ovo
E Mascar um chi cl et e
E Tr ocar l mpadas
E Descascar bat at as
E Jogar o Jogo da Forca




- 157 -

ADVPL Compl et o



Mdul o 02: A l i nguagem ADVPL



01

Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as,
ut ili zando a est rut ura de r epet i o Whi l e, demonst rando quant as bat at as
foram descascadas:



02

Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as,
ut ili zando a est rut ura de repet i o FOR, demonst rando quant as bat at as foram
descascadas:



03

Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as,
ut ili zando a est rut ura de r epet i o FOR, demonst rando quant as bat at as fal t am
para serem descascadas:


- 158 -

ADVPL Compl et o



04 Desenvol ver um programa que i mpl ement e o algori t mo do Jogo da For ca:



05 Desenvol ver um programa que i mpl ement e o algori t mo do Jogo da Vel ha:



06
Desenvol ver um pr ogr ama que permi t a ao usuri o pesqui sar um cl i ent e
i nformando seu CNPJ e caso o mesmo exi st a na base, exi bi r suas pr i nci pai s
i nformaes.


07
Ut ilizando a int erface vi sual desenvol vi da para o exer cci o ant eri or,
desenvol ver a funo genri ca Get Text o( ) , par a ser ut ili zada nas apli caes do
Jogo da Vel ha e Jogo da For ca.


- 159 -

ADVPL Compl et o



08
Ut ilizando a funo AVI SO( ) desenvol ver um pr ograma que permi t a ao usuri o
sel eci onar a opo de busca de CNPJ por cli ent e ou fornecedor, e caso
encont re exi ba seus dados pri nci pai s.

09
Desenvol ver uma r ot i na que capt ure vri os CNPJs de cl i ent es i nformados pel o
usuri o, e veri fi que para cada um del es se o mesmo exi st e ou no na base de
dados. Ao fi nal i nformar quai s CNPJs for am i nfor mados, e de acordo com a
sel eo do usuri o, exi bi r os dados pri nci pai s de um dest es cl i ent es.

10
Ut ilizando a funo FORMBATCH( ) desenvol ver uma rot i na que veri fique se
para cada i t em de um not a fi scal de ent rada exi st e o r espect i vo cabeal ho, e
caso sej a encont rado al gum i t em i nconsi st ent e, comuni que est a ocor rnci a ao
usuri o que est real i zando o processament o.

11
Desenvol ver uma rot i na que, at ravs do uso de um bl oco de cdi go, convert a
a est rut ura da t abel a SA1 obt i da com a funo DBSTRUCT( ) em uma st ri ng
denomi nada cCampo.


- 160 -

ADVPL Compl et o



Mdul o 03: Desenvol vendo pequenas cust omi zaes



01
Desenvol ver uma val i dao para um campo especfi co do t i po caract ere, cuj o
cont edo est ej a rel aci onado a out ra t abel a, e que exi ba uma mensagem de
avi so caso o cdi go i nformado no exi st a nest a t abel a rel aci onada.


02
Desenvol ver uma vali dao para um campo car act ere exi st ent e na base, para
que sej a aval i ado se aquel e cdi go j exi st e cadast rado, e caso posi t i vo exi ba
uma mensagem de avi so al ert ando dest a ocorr nci a.



03
Desenvol ver um gat il ho que r et orne uma descri o compl ement ar para um
campo vi ncul ado ao campo cdi go ut ilizado nos exercci os ant eri ores.




- 161 -

ADVPL Compl et o



04
Cust omi zar o parmet r o que defi ne o pr efi xo do t t ul o de cont as a pagar
gerado pel a int egrao COMPRAS - > FI NANCEI RO at ravs da i ncluso de uma
not a fi scal de ent rada, de forma que o pr efi xo do t t ul o sej a gerado com o
cdi go da fi li al corr ent e.


05
Prot eger a r ot i na desenvol vi da no exer cci o ant eri or , de forma a garant i r que
na ut ili zao da fi li al como pr efi xo do t t ul o no i r ocorr er dupli cidade de
dados no cont as a pagar do fi nancei ro.




06
I mpl ement ar uma val idao adi ci onal no cadast ro de cl i ent es, at r avs do
pont o de ent rada adequado, de forma que o campo CNPJ ( A1_CGC) sej a
obri gat ri o para t odos os t i pos de cl i ent e, excet o os defi nidos como Ext eri or .














- 162 -

ADVPL Compl et o


MDULO 04: Desenv ol vendo apl i caes em ADVPL

18. A l i nguagem ADVPL

A Li nguagem ADVPL t eve seu i nci o em 1994, sendo na verdade uma evol uo na ut i lizao de
linguagens no padro xBase pel a Mi crosi ga Soft ware S.A. ( Cl i pper, Vi sual Obj ect s e depoi s
Fi veWi n) . Com a cri ao da t ecnol ogi a Prot heus, era necessri o criar uma linguagem que
suport asse o padro xBase para a manut eno de t odo o cdi go exi st ent e do si st ema de ERP
Si ga Advanced. Foi ent o cri ada a li nguagem chamada Advanced Pr ot heus Language.

O ADVPL uma ext enso do padro xBase de comandos e funes, operador es, est rut uras de
cont r ol e de fl uxo e pal avras reservadas, cont ando t ambm com funes e comandos
di sponi bili zados pel a Mi crosi ga que a t orna uma linguagem complet a para a cri ao de
apli caes ERP pront as para a I nt ernet . Tambm uma l i nguagem ori ent ada a obj et os e
event os, permi t indo ao programador desenvol ver apli caes vi suais e cri ar suas prpri as
cl asses de obj et os.

Quando compi l ados, t odos os arqui vos de cdi go t ornam- se uni dades de i nt eli gnci a bsi cas,
chamados APO s ( de Advanced Prot heus Obj ect s) . Tai s APO s so mant i dos em um
reposi t ri o e car regados di nami cament e pel o PROTHEUS Ser ver para a execuo. Como no
exi st e a li nkedi o, ou uni o fsi ca do cdigo compi l ado a um det ermi nado mdul o ou
apli cao, funes cri adas em ADVPL podem ser execut adas em qual quer pont o do ambi ent e
Advanced Pr ot heus.

O compil ador e o i nt erpret ador da li nguagem ADVPL o prpr i o ser vi dor PROTHEUS
( PROTHEUS Ser ver) , e exi st e um ambi ent e vi sual para desenvol vi ment o i nt egrado
( PROTHEUSI DE) onde o cdi go pode ser cri ado, compi l ado e depurado.

Os programas em ADVPL podem cont er comandos ou funes de i nt er face com o usuri o. De
acordo com t al caract erst i ca, t ai s programas so subdi vi di dos nas seguint es cat egori as:

Pr ogr amao Com I n t er f ace Pr pr i a com o Usu r i o

Nest a cat egori a ent ram os pr ogramas desenvol vi dos para serem execut ados at ravs do
t ermi nal remot o do Prot heus, o Pr ot heus Remot e. O Pr ot heus Remot e a apli cao
encar r egada da i nt erface e da i nt erao com o usuri o, sendo que t odo o pr ocessament o do
cdi go em ADVPL, o acesso ao banco de dados e o gerenci ament o de conexes efet uado no
Prot heus Ser ver. O Pr ot heus Remot e o pri nci pal mei o de acesso a execuo de r ot i nas
escri t as em ADVPL no Prot heus Server, e por i sso permi t e execut ar qual quer t i po de cdi go,
t enha el e i nt erface com o usuri o ou no. Por m nest a cat egori a so consi derados apenas os
programas que real i zem al gum t i po de i nt erface r emot a ut i lizando o prot ocol o de comuni cao
do Prot heus.

Podem- se cri ar r ot i nas para a cust omi zao do si st ema ERP Mi cr osi ga Prot heus, desde
processos adi ci onai s at mesmo rel at ri os. A grande vant agem apr ovei t ar t odo o ambi ent e
mont ado pel os mdul os do ERP Mi crosi ga Prot heus. Por m, com o ADVPL possvel at
mesmo cri ar t oda uma apli cao, ou mdul o, do comeo.

Todo o cdi go do si st ema ERP Mi crosi ga Prot heus escri t o em ADVPL.


- 163 -

ADVPL Compl et o



Pr ogr amao Sem I nt er f ace Pr pr i a com o Usu r i o

As rot i nas cri adas sem i nt erface so consi deradas nest a cat egori a porque geral ment e t m uma
ut ili zao mai s especfi ca do que um processo adi ci onal ou um rel at ri o novo. Tai s rot i nas no
t m i nt erface com o usuri o at ravs do Pr ot heus Remot e, e qual quer t ent at i va nesse sent i do
( como a cri ao de uma j anel a padro) ocasi onar uma exceo em t empo de execuo. Est as
rot i nas so apenas processos, ou Jobs, execut ados no Pr ot heus Ser ver. Al gumas vezes, a
i nt erface dest as rot i nas fi ca a cargo de apli caes ext ernas, desenvol vi das em out ras
linguagens, que so responsvei s por i ni ci ar os pr ocessos no ser vi dor Pr ot heus at ravs dos
mei os di sponvei s de i nt egrao e conect i vi dade no Prot heus.

De acordo com a ut ilizao e com o mei o de conect i vi dade ut ili zado, est as rot i nas so
subcat egori zadas assi m:

E Pr ogr amao por Pr ocessos

Rot i nas escri t as em ADVPL podem ser i ni ci adas como pr ocessos i ndi viduai s ( sem i nt erface) no
Prot heus Server at ravs de duas manei ras: I ni ci adas por out ra r ot i na ADVPL at ravs da
chamada de funes como St art Job( ) ou Call Proc( ) ou i ni ci adas aut omat i cament e na
i ni ci alizao do Pr ot heus Server ( quando pr opri ament e confi gurado) .

E Pr ogr amao de RPC

At ravs de uma bi bli ot eca de funes di sponvel no Prot heus ( uma API de comuni cao) ,
podem- se execut ar r ot inas escri t as em ADVPL di ret ament e no Prot heus Server, at r avs de
apli caes ext ernas escri t as em out ras l inguagens. I st o o que se chama de RPC ( de Remot e
Procedure Call, ou Chamada de Pr ocediment os Remot a) .

O servi dor Prot heus t ambm pode execut ar r ot i nas em ADVPL em out ros servi dores Pr ot heus
at ravs de conexo TCP/ I P di r et a ut ilizando o concei t o de RPC. Do mesmo modo, apl i caes
ext ernas podem r equi si t ar a execuo de r ot i nas escri t as em ADVPL at ravs de conexo
TCP/ I P di ret a.
Programao Web

O Pr ot heus Ser ver pode t ambm ser execut ado como um servi dor Web, r espondendo a
requi si es HTTP. No moment o dest as r equi si es, pode execut ar r ot inas escri t as em ADVPL
como pr ocessos i ndi vi duai s, envi ando o resul t ado das funes como ret orno das requi si es
para o cli ent e HTTP ( como por exempl o, um Br owser de I nt ernet ) . Qual quer rot i na escri t a em
ADVPL que no cont enha comandos de i nt erface pode ser execut ada at ravs de r equi si es
HTTP. O Pr ot heus permi t e a compil ao de arqui vos HTML cont endo cdi go ADVPL embut i do.
So os chamados arqui vos ADVPL ASP, para a cri ao de pgi nas di nmi cas.

E Pr ogr amao Tel Net

Tel Net part e da gama de pr ot ocol os TCP/ I P que permi t e a conexo a um comput ador remot o
at ravs de uma apl i cao cl i ent e dest e pr ot ocol o. O PROTHEUS Ser ver pode emul ar um
t ermi nal Tel Net , at ravs da execuo de r ot i nas escri t as em ADVPL. Ou sej a, pode- se escrever
rot i nas ADVPL cuj a i nt erface fi nal ser um t ermi nal Tel Net ou um col et or de dados mvel .





- 164 -

ADVPL Compl et o



19. Est r ut ur a de um Pr ogr ama ADVPL

Um programa de comput ador nada mai s do que um grupo de comandos l ogi cament e
di spost os com o obj et i vo de execut ar det ermi nada t arefa. Esses comandos so gravados em
um arqui vo t ext o que t ransformado em uma li nguagem execut vel por um comput ador
at ravs de um pr ocesso chamado compilao. A compi l ao subst i t ui os comandos de al t o
nvel ( que os humanos compr eendem) por inst rues de bai xo nvel ( compreendi da pelo
si st ema operaci onal em execuo no comput ador) . No caso do ADVPL, no o si st ema
operaci onal de um comput ador que i r execut ar o cdi go compil ado, mas si m o Prot heus
Ser ver.

Dent r o de um programa, os comandos e funes ut i lizados devem segui r regras de si nt axe da
linguagem ut ili zada, poi s caso cont rri o o pr ograma ser i nt errompi do por er ros. Os er ros
podem ser de compi l ao ou de execuo.

Er ros de compi l ao so aquel es encont rados na si nt axe que no per mi t em que o arqui vo de
cdi go do programa sej a compi l ado. Podem ser comandos especi fi cados de forma err nea,
ut ili zao i nvli da de operador es, et c.

Er ros de execuo so aquel es que acont ecem depoi s da compil ao, quando o programa est
sendo execut ado. Podem ocor rer por i nmeras razes, mas geral ment e se refer em as funes
no exi st ent es, ou vari vei s no cri adas ou i ni ciali zadas, et c.


Li nh as de Pr ogr ama

As li nhas exi st ent es dent ro de um arqui vo t ext o de cdi go de programa podem ser li nhas de
comando, l inhas de coment ri o ou l i nhas mi st as.

E Li nh as de Comando

Li nhas de comando possuem os comandos ou i nst rues que sero execut adas. Por exempl o:

Local nCnt
Local nSoma := 0
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

E Li nh as de Coment r i o

Li nhas de coment ri o possuem um t ext o qual quer, mas no so execut adas. Servem apenas
para document ao e para t ornar mai s fci l o ent endi ment o do pr ograma. Exi st em t r s formas
de se coment ar l i nhas de t ext o. A pri mei ra del as ut ili zar o si nal de * ( ast eri sco) no comeo
da li nha:

* Programa para clculo do total
* Autor: Microsiga Software S.A.
* Data: 2 de outubro de 2001

- 165 -

ADVPL Compl et o



Todas as l inhas i ni ci adas com um si nal de ast eri sco so consi deradas como coment ri o. Pode-
se ut ilizar a pal avra NOTE ou doi s smbol os da l et ra "e" comer ci al ( &&) para r eal izar a funo
do si nal de ast eri sco. Por m t odas est as for mas de coment ri o de li nhas so obsol et as e
exi st em apenas para compat i bili zao com o padro xBase. A mel hor manei ra de coment ar
linhas em ADVPL ut ili zar duas barr as t ransver sai s:

// Programa para clculo do total
// Autor: Microsiga Software S.A.
// Data: 2 de outubro de 2001

Out ra forma de document ar t ext os ut i lizar as barras t ransversai s j unt ament e com o
ast eri sco, podendo- se coment ar t odo um bl oco de t ext o sem pr eci sar coment ar l inha a linha:

/*
Programa para clculo do total
Autor: Microsiga Software S.A.
Data: 2 de outubro de 2001
*/

Todo o t ext o encont rado ent r e a abert ura ( i ndi cada pel os caract er es / * ) e o fechament o
( indi cada pel os caract er es * / ) consi derado como coment ri o.

E Li nh as Mi st as

O ADVPL t ambm per mi t e que exi st am l inhas de comando com coment ri o. I st o possvel
adi ci onando- se as duas barras t ransver sai s ( / / ) ao fi nal da linha de comando e adi ci onando- se
o t ext o do coment 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 Li n ha

Assi m como a li nha fsica, del i mit ada pel a quant i dade de caract er es que pode ser di gi t ado no
edi t or de t ext os ut ili zado, exi st e uma l inha consi derada li nha l gi ca. A li nha l gi ca, aquel a
consi derada para a compil ao como uma ni ca li nha de comando.

A pri ncpi o, cada li nha di gi t ada no arqui vo t ext o di ferenci ada aps o pressi onament o da t ecl a
< Ent er> . Ou sej a, a l inha l gi ca, a li nha fsi ca no arqui vo. Por m al gumas vezes, por
li mi t ao fsi ca do edi t or de t ext o ou por est t i ca, pode- se "quebrar" a linha l gi ca em mai s de
uma li nha fsi ca no arqui vo t ext o. I st o efet uado ut ili zando- se o si nal de pont o- e- vrgul 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 exempl o exi st e uma linha de comando para a checagem das var i vei s ut ilizadas. Como a
linha t orna- se mui t o grande, pode- se di vi di- l a em mai s de uma li nha fsi ca ut ilizando o si nal de

- 166 -

ADVPL Compl et o


pont o- e- vrgul a. Se um si nal de pont o- e- vr gul a for esqueci do nas duas pri mei ras li nhas,
durant e a execuo do programa ocor rer um err o, poi s a segunda li nha fsi ca ser
consi derada como uma segunda li nha de comando na compil ao. E durant e a execuo est a
linha no t er sent i do.

19.1. r eas de um Pr ogr ama ADVPL

Apesar de no ser uma li nguagem de padr es rgi dos com rel ao est rut ura do programa,
i mport ant e i dent i fi car al gumas de suas part es. Consi der e o pr ograma de exempl o abai 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 rut ura de um pr ogr ama ADVPL compost a pel as segui nt es reas:

E rea de I dent i fi cao
- Decl arao dos i ncl udes
- Decl arao da funo
- I dent i fi cao do pr ogr ama

E rea de Aj ust es I ni ci ai s
- Decl arao das vari vei s

E Corpo do Programa
- Preparao para o processament o
- Processament o

E rea de Encer rament o

- 167 -

ADVPL Compl et o



r ea de I dent i f i cao

Est a uma rea que no obri gat ri a e dedi cada a document ao do programa. Quando
exi st ent e, cont m apenas coment ri os expl i cando a sua finali dade, dat a de cri ao, aut or , et c. ,
e aparece no comeo do programa, ant es de qual quer li nha de comando.

O format o para est a rea no defi ni do. Pode- se col ocar qual quer t i po de i nformao
desej ada e escol her a format ao apr opri ada.

#include protheus.ch

/*
+==========================================+
| Programa: Clculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+==========================================+
*/

User Function CalcFator()


Opci onal ment e podem- se i nclui r defi ni es de const ant es ut ili zadas no programa ou i ncluso
de arqui vos de cabeal ho nest a r ea.

r ea de Aj u st es I ni ci ai s

Nest a rea geral ment e se fazem os aj ust es i ni ci ai s, i mport ant es para o cor ret o funci onament o
do programa. Ent re os aj ust es se encont ram decl araes de vari vei s, i ni ci ali zaes, abert ura
de arqui vos, et c. Apesar do ADVPL no ser uma li nguagem rgi da e as vari vei s poderem ser
decl aradas em qual quer l ugar do programa, aconsel hvel faz- l o nest a rea vi sando t ornar o
cdi go mai s l egvel e facili t ar a i dent i fi cao de vari vei s no ut ili zadas.

Local nCnt
Local nResultado := 0 // Resultado do fatorial
Local nFator := 10 // Nmero para o clculo

Cor po do Pr ogr ama

nest a r ea que se encont ram as l inhas de cdi go do pr ograma. onde se real i za a t arefa
necessri a at ravs da organi zao l gi ca dest as li nhas de comando. Espera- se que as l i nhas de
comando est ej am organizadas de t al modo que no fi nal dest a rea o resul t ado esperado sej a
obt i do, sej a el e armazenado em um arqui vo ou em vari vei s de memri a, pront o par a ser
exi bi do ao usuri o at ravs de um r el at ri o ou na t el a.

// Clculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

- 168 -

ADVPL Compl et o



A preparao para o pr ocessament o formada pel o conj unt o de vali daes e processament os
necessri os ant es da r eali zao do pr ocessament o em si .

Avali ando o processament o do cl cul o do fat orial descri t o ant eri orment e, pode- se defi ni r que a
vali dao i ni ci al a ser r eali zada o cont edo da vari vel nFat or, poi s a mesma det ermi nar a
corr et a execuo 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


r ea de Encer r ament o

nest a rea onde as fi nalizaes so efet uadas. onde os arqui vos abert os so fechados, e o
resul t ado da execuo do pr ogr ama ut ili zado. Pode- se exi bi r o r esult ado armazenado em
uma vari vel ou em um arqui vo ou si mpl esment e fi nali zar, caso a t arefa j t enha si do t oda
compl et ada no corpo do programa. nest a rea que se encont r a o encerrament o do
programa. Todo programa em ADVPL deve sempre t ermi nar com a pal avra chave r et urn.

// Exibe o resultado na tela, atravs da funo alert
Alert("O fatorial de " + cValToChar(nFator) + ;
" " + cValToChar(nResultado))

// Termina o programa
Return


- 169 -

ADVPL Compl et o



20. Decl ar ao e At r i bui o de Var i vei s

20.1. Ti po de Dados

O ADVPL no uma li nguagem de t i pos rgidos ( st rongl y t yped) , o que si gni fi ca que vari vei s
de memri a podem r eceber di fer ent es t i pos de dados durant e a execuo do programa.

As vari vei s podem t ambm cont er obj et os, mas os t i pos pri mri os da l i nguagem so:

Numr i co

O ADVPL no di fer enci a val ores i nt ei ros de val ores com pont o fl ut uant e, port ant o podem- se
cri ar vari vei s numri cas com qual quer val or dent ro do i nt erval o permi t i do. Os segui nt es
el ement os so do t i po de dado numri co:

2
43.53
0.5
0.00001
1000000

Uma vari vel do t i po de dado numri co pode cont er um nmer o de dezoi t o dgi t os i ncl uindo o
pont o fl ut uant e, no i nt erval o de 2.2250738585072014 E308 at 1.7976931348623158
E+ 308.

Lgi co

Val ores l gi cos em ADVPL so i dent i fi cados at r avs de .T. ou .Y. para verdadei ro e .F. ou .N.
para fal so ( i ndependent ement e se os caract er es est i ver em em mai scul o ou mi nscul o) .

Car act er e

St ri ngs ou cadei as de caract er es so i dent i fi cadas em ADVPL por bl ocos de t ext o ent r e aspas
dupl as ( ") ou aspas si mpl es ( ' ) :

"Ol mundo!"
'Esta uma string'
"Esta 'outra' string"

Uma vari vel do t i po caract er e pode cont er st ri ngs com no mxi mo 1 MB, ou sej a, 1048576
caract eres.

Dat a

O ADVPL t em um t i po de dados especfi co para dat as. I nt ernament e as vari vei s dest e t i po de
dado so armazenadas como um nmero cor respondent e a dat a Jul i ana.

Vari vei s do t i po de dados Dat a no podem ser decl aradas di ret ament e, e si m at ravs da
ut ili zao de funes especfi cas como por exempl o CTOD( ) que convert e uma st ri ng para
dat a.

- 170 -

ADVPL Compl et o



Ar r ay

O Ar ray um t i po de dado especi al . a di sposi o de out r os el ement os em col unas e li nhas. O
ADVPL suport a ar rays uni di mensi onai s ( vet or es) ou mul t i di mensi onai s ( mat ri zes) . Os
el ement os de um arr ay so acessados at r avs de ndi ces numri cos i ni ci ados em 1,
i dent i fi cando a li nha e col una para quant as di menses exi st i rem.

Arrays devem ser ut ilizadas com caut el a, poi s se forem mui t o grandes podem exauri r a
memri a do servi dor.

Bl oco de Cdi go

O bl oco de cdi go um t i po de dado especi al . ut ilizado para armazenar i nst rues escri t as
em ADVPL que podero ser execut adas post eri orment e.

20.2. Decl ar ao de v ar i vei s

Vari vei s de memri a so um dos r ecursos mai s i mport ant es de uma linguagem. So r eas de
memri a cri adas para armazenar i nformaes ut ili zadas por um progr ama para a execuo de
t arefas. Por exempl o, quando o usuri o di gi t a uma i nformao qual quer , como o nome de um
produt o, em uma t el a de um programa est a informao armazenada em uma vari vel de
memri a para post eri or ment e ser gravada ou i mpressa.

A part i r do moment o que uma vari vel cri ada, no necessri o mai s se r efer enci ar ao seu
cont edo, e si m ao seu nome.

O nome de uma vari vel um i dent i fi cador ni co o qual deve r espei t ar um mx i mo de 1 0
car act er es. O ADVPL no i mpede a cri ao de uma vari vel de memr i a cuj o nome cont enha
mai s de 10 caract er es, por m apen as os 10 pr i mei r os ser o consi der ados para a
l ocalizao do cont edo armazenado.

Port ant o se forem cri adas duas vari vei s cuj os 10 pri mei ros car act er es for em i guai s, como
nTot al Geral Anual e nTot al Geral Mensal , as refer nci as a qual quer uma del as no pr ograma
resul t aro o mesmo, ou sej a, sero a mesma vari vel :

nTotalGeralMensal := 100
nTotalGeralAnual := 300
Alert("Valor mensal: " + cValToChar(nTotalGeralMensal))

Quando o cont edo da vari vel nTot al Geral Mensal exi bi do, o seu val or ser de 300. I sso
acont ece porque no moment o que esse val or foi at ri budo vari vel nTot al Geral Anual , o
ADVPL consi der ou apenas os 10 pri mei ros caract er es ( assi m como o faz quando deve exi bi r o
val or da vari vel nTot alGeral Mensal ) , ou sej a, consi der ou- as como a mesma vari vel . Assi m o
val or ori ginal de 100 foi subst i t udo pel o de 300.


- 171 -

ADVPL Compl et o



20.3. Escopo de var i v ei s

O ADVPL no uma linguagem de t i pos rgidos para vari vei s, ou sej a, no necessri o
i nformar o t i po de dados que det ermi nada varivel i r cont er no moment o de sua decl arao,
e o seu val or pode mudar durant e a execuo do pr ograma.

Tambm no h necessi dade de decl arar vari vei s em uma seo especfi ca do seu cdi go
font e, embora sej a aconsel hvel decl arar t odas as vari vei s necessri as no comeo, t ornando
a manut eno mai s fci l e evi t ando a decl arao de vari vei s desnecessri as.

Para decl arar uma vari vel deve- se ut ili zar um ident ificador de escopo. Um i dent i fi cador de
escopo uma pal avra chave que i ndi ca a que cont ext o do pr ograma a vari vel decl arada
pert ence. O cont ext o de vari vei s pode ser l ocal ( vi suali zadas apenas dent r o do pr ograma
at ual) , pblico ( vi sualizadas por qual quer out ro programa) , ent r e out r os.

O Cont ex t o de Var i v ei s dent r o de um Pr ogr ama

As vari vei s decl aradas em um programa ou funo, so vi svei s de acordo com o escopo onde
so defi nidas. Como t ambm do escopo depende o t empo de exi st nci a das vari vei s. A
defi ni o do escopo de uma vari vel efet uada no moment o de sua decl arao.

Local nNumero : = 10

Est a li nha de cdi go decl ara uma vari vel chamada nNumero i ndi cando que pert ence seu
escopo l ocal .

Os i dent i fi cador es de escopo so:

E Local
E St at i c
E Pri vat e
E Publi c

O ADVPL no rgi do em rel ao decl arao de vari vei s no comeo do programa. A i ncluso
de um i dent i fi cador de escopo no necessri o para a decl arao de uma vari vel , cont ant o
que um val or l he sej a at ri budo.

nNumero2 := 15

Quando um val or at r i budo uma vari vel em um programa ou funo, o ADVPL cri ar a
vari vel caso el a no t enha si do decl arada ant eri orment e. A vari vel ent o cri ada como se
t i vesse si do decl arada como Pri vat e.

Devi do a essa caract erst i ca, quando se pret ende fazer uma at ri bui o a uma vari vel
decl arada pr evi ament e mas escr eve- se o nome da vari vel de forma i ncorr et a, o ADVPL no
gerar nenhum err o de compil ao ou de execuo. Poi s compr eender o nome da vari vel
escri t o de forma i ncorr et a como se fosse a cri ao de uma nova vari vel . I st o al t erar a l gi ca
do pr ograma, e um er ro mui t as vezes di fcil de i dent i fi car.

- 172 -

ADVPL Compl et o



Var i v ei s de escopo l ocal

Vari vei s de escopo l ocal so pert encent es apenas ao escopo da funo onde foram decl aradas
e devem ser expli ci t ament e decl aradas com o i dent i fi cador LOCAL, como no exempl o:


Function Pai()
Local nVar := 10, aMatriz := {0,1,2,3}
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


Nest e exempl o, a vari vel nVar foi decl arada como l ocal e at ri buda com o val or 10. Quando a
funo Fil ha execut ada, nVar ainda exi st e mas no pode ser acessada. Quando a execuo
da funo Pai t ermi nar, a vari vel nVar dest r uda. Qual quer vari vel com o mesmo nome no
programa que chamou a funo Pai no afet ada.

Vari vei s de escopo l ocal so cri adas aut omat i cament e cada vez que a funo onde for em
decl aradas for at i vada. El as cont i nuam a exi st i r e mant m seu val or at o fi m da at i vao da
funo ( ou sej a, at que a funo r et orne o cont rol e para o cdi go que a execut ou) . Se uma
funo chamada r ecursi vament e ( por exempl o, chama a si mesma) , cada chamada em
recurso cri a um novo conj unt o de vari vei s l ocai s.

A vi si bilidade de vari vei s de escopo l ocai s i dnt i ca ao escopo de sua decl arao, ou sej a, a
vari vel vi svel em qual quer l ugar do cdi go font e em que foi decl arada. Se uma funo
chamada r ecursi vament e, apenas as vari vei s de escopo l ocal cri adas na mai s r ecent e at i vao
so vi svei s.

Var i v ei s de escopo st at i c

Vari vei s de escopo st at i c funci onam basi cament e como as vari vei s de escopo l ocal , mas
mant m seu val or at ravs da execuo e devem ser decl aradas expl i ci t ament e no cdi go com
o i dent i fi cador STATI C.

O escopo das vari vei s st at i c depende de onde so decl aradas. Se for em decl aradas dent r o do
corpo de uma funo ou procedi ment o, seu escopo ser l i mit ado quel a rot i na. Se forem
decl aradas for a do corpo de qual quer rot i na, seu escopo afet a a t odas as funes decl aradas
no font e. Nest e exempl o, a vari vel nVar decl arada como st at i c e i ni ciali zada com o val or 10:

Function Pai()
Static nVar := 10
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


- 173 -

ADVPL Compl et o


Quando a funo Fil ha execut ada, nVar ai nda exi st e mas no pode ser acessada. Di fer ent e
de vari vei s decl aradas como LOCAL ou PRI VATE, nVar cont i nua a exist i r e mant m seu val or
at ual quando a execuo da funo Pai t ermina. Ent ret ant o, soment e pode ser acessada por
execues subseqent es da funo Pai .

Var i v ei s de escopo pr i v at e

A decl arao opci onal para vari vei s pri vadas. Mas podem ser decl aradas expl i ci t ament e com
o i dent i fi cador PRI VATE.

Adi ci onal ment e, a at ri bui o de val or a uma vari vel no cri ada ant eri orment e
aut omat i cament e cri a a vari vel como pri vada. Uma vez cri ada, uma vari vel pri vada cont i nua
a exi st i r e mant m seu val or at que o programa ou funo onde foi cri ada t ermi ne ( ou sej a,
at que a funo onde foi cri ada ret orne para o cdi go que a execut ou) . Nest e moment o,
aut omat i cament e dest r uda.

possvel cri ar uma nova vari vel pri vada com o mesmo nome de uma vari vel j exi st ent e.
Ent ret ant o, a nova ( dupli cada) vari vel pode apenas ser cri ada em um nvel de at i vao
i nferi or ao nvel onde a vari vel foi decl arada pel a pri mei ra vez ( ou sej a, apenas em uma
funo chamada pel a funo onde a vari vel j havi a si do cri ada) . A nova vari vel pri vada i r
esconder qual quer out r a vari vel pri vada ou pbli ca ( vej a a document ao sobr e vari vei s
pbli cas) com o mesmo nome enquant o exi st i r.

Uma vez cri ada, uma vari vel pri vada visvel em t odo o pr ogr ama enquant o no for
dest ruda aut omat i cament e quando a rot i na que a cri ou t ermi nar ou uma out ra vari vel
pri vada com o mesmo nome for cri ada em uma subfuno chamada ( nest e caso, a vari vel
exi st ent e t orna- se i nacessvel at que a nova vari vel pri vada sej a dest r uda) .
Em t ermos mai s si mpl es, uma vari vel pri vada vi svel dent ro da funo de cri ao e t odas as
funes chamadas por est a, a menos que uma funo chamada cri e sua pr pri a vari vel
pri vada com o mesmo nome.

Por ex empl o:


Function Pai()
Private nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Nest e exempl o, a vari vel nVar cri ada com escopo pri vat e e i ni ci ali zada com o val or 10.
Quando a funo Fi lha execut ada, nVar ai nda exi st e e, di ferent e de uma vari vel de escopo
l ocal , pode ser acessada pel a funo Fil ha. Quando a funo Pai t erminar, nVar ser dest ruda
e qual quer decl arao de nVar ant eri or se t ornar acessvel novament e.


No ambi ent e ERP Pr ot heus, exi st e uma conveno adi ci onal a qual deve ser
respei t ada que vari vei s em uso pel a apli cao no sej am i ncorr et ament e
mani pul adas. Por est a conveno deve ser adi ci onado o caract er _ ant es
do nome de vari vei s PRI VATE e PUBLI C. Mai ores i nformaes avali ar o
t pi co: Boas Prt i cas de Pr ogramao.

Ex empl o: Pri vat e _dDat a

- 174 -

ADVPL Compl et o




Var i v ei s de escopo publ i c

Podem- se cri ar vari vei s de escopo publi c di nami cament e no cdi go com o i dent i fi cador
PUBLI C. As vari vei s dest e escopo cont i nuam a exi st i r e mant m seu val or at o fi m da
execuo da t hread ( conexo) .

possvel cri ar uma vari vel de escopo pri vat e com o mesmo nome de uma vari vel de escopo
publi c exi st ent e, ent r et ant o, no permi t ido cri ar uma vari vel de escopo publi c com o mesmo
nome de uma vari vel de escopo pri vat e exi st ent e.

Uma vez cri ada, uma vari vel de escopo publi c vi svel em t odo o programa onde foi
decl arada at que sej a escondida por uma vari vel de escopo pri vat e cri ada com o mesmo
nome. A nova vari vel de escopo pri vat e cri ada esconde a vari vel de escopo publi c exi st ent e,
e est a se t ornar i nacessvel at que a nova var i vel pri vat e sej a dest ruda. Por exempl o:


Function Pai()
Public nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Nest e exempl o, nVar cri ada como publi c e i nici ali zada com o val or 10. Quando a funo Fi l ha
execut ada, nVar ai nda exi st e e pode ser acessada. Di fer ent e de vari vei s l ocai s ou pri vat es,
nVar ai nda exi st e aps o t rmi no da a execuo da funo Pai .

Di ferent ement e dos out ros i dent i fi cadores de escopo, quando uma var i vel decl arada como
pbli ca sem ser i ni ci ali zada, o val or assumi do fal so ( .F.) e no nul o ( nil) .


No ambi ent e ERP Pr ot heus, exi st e uma conveno adi ci onal a qual deve ser
respei t ada que vari vei s em uso pel a apli cao no sej am i ncorr et ament e
mani pul adas. Por est a conveno deve ser adi ci onado o caract er _ ant es
do nome de vari vei s PRI VATE e PUBLI C. Mai ores i nformaes avali ar o
t pi co: Boas Prt i cas de Pr ogramao.

Ex empl o: Publ i c _cRot ina






- 175 -

ADVPL Compl et o



20.4. Ent endendo a i nf l unci a do escopo das var i v ei s

Consi der e as li nhas de cdi go de exempl o:


nResultado := 250 * (1 + (nPercentual / 100))


Se est a l inha for execut ada em um programa ADVPL, ocorr er um err o de execuo com a
mensagem "vari abl e does not exi st : nPercent ual ", poi s est a vari vel est sendo ut ili zada em
uma expr esso de cl cul o sem t er si do decl arada. Para sol uci onar est e er ro, deve- se decl arar a
vari vel previ ament e:


Local nPercentual, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


Nest e exempl o, as vari vei s so decl aradas pr evi ament e ut ilizando o i dent i fi cador de escopo
local. Quando a li nha de cl cul o for execut ada, o er ro de vari vel no exi st ent e, no mai s
ocor rer. Por m vari vei s no i ni ci alizadas t m sempr e o val or default nul o ( Nil ) e est e val or
no pode ser ut ili zado em um cl cul o poi s t ambm gerar err os de execuo ( nul o no pode
ser di vi dido por 100) . A resol uo dest e pr obl ema efet uada i nici ali zando- se a vari vel
at ravs de uma das for mas:


Local nPercentual, nResultado
nPercentual := 10
nResultado := 250 * (1 + (nPercentual / 100))

ou

Local nPercentual := 10, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


A di ferena ent re o l t i mo exempl o e os doi s ant eri or es que a vari vel i ni ci ali zada no
moment o da decl arao. Em ambos os exempl os, a vari vel pri mei ro decl arada e ent o
i ni ci alizada em uma out ra l inha de cdi go.

aconsel hvel opt ar pel o operador de at ri bui o compost o de doi s pont os e si nal de i gual , poi s
o operador de at ri bui o ut ilizando soment e o si nal de igual pode ser faci l ment e confundi do
com o operador r el aci onal ( para comparao) durant e a cri ao do programa.


- 176 -

ADVPL Compl et o



21. Regr as adi ci onai s da l i nguagem ADVPL

21.1. Pal av r as r eser v adas

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 EOF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL FCOUNT MI N SQRT
CTOD FI ELDNAME MONTH STR DATE
FI LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED FOUND PROCEDURE
TRANSFORM DEVPOS FUNCTI ON PROW TRI M
DOW I F RECCOUNT TYPE DTOC
I I F RECNO UPPER TRY AS
CATCH THROW




E Pal avras reservadas no podem ser ut i lizadas para vari vei s,
procedi ment os ou funes;

E Funes r eservadas so pert encent es ao compi l ador e no podem ser
redefi nidas por uma aplicao;

E Todos os i dent i fi cadores que comearem com doi s ou mai s caract eres
_ so ut ili zados como i dent i fi cadores i nt ernos e so r eservados.

E I dent i fi cadores de escopo PRI VATE ou PUBLI C ut ili zados em apli caes
especfi cas desenvol vida por ou para client es devem t er sua
i dent i fi cao i ni ci ada por um caract ere _ .




- 177 -

ADVPL Compl et o



21.2. Pi ct ur es de f or mat ao di sponv ei s

Com base na document ao di sponvel no DEM Document ao El et r ni ca Mi crosi ga, a
linguagem ADVPL e a apli cao ERP Prot heus admi t em as segui nt es pi ct ures:

Di ci onr i o de Dados ( SX3) e GET

Funes
Cont edo Funci on al i dade
A Per mi t e apenas caract er es al fabt i cos.
C Exi be CR depoi s de nmer os posi t i vos.
E Exi be numri co com o pont o e vrgul a i nvert i dos ( format o Eur opeu) .
R I nser e caract eres di ferent es dos caract er es de t empl at e na exi bi o, mas no os
i nsere na vari vel do GET.
S< n> Per mi t e rol ament o hori zont al do t ext o dent ro do GET, < n> um nmer o i nt ei ro
que i dent i fi ca o t amanho da regi o.
X Exi be DB depoi s de nmer os negat i vos.
Z Exi be zeros como br ancos.
( Exi be nmeros negat i vos ent re par nt eses com os espaos em branco i ni ci ai s.
) Exi be nmeros negat i vos ent re par nt eses sem os espaos em branco i ni ci ai s.
! Convert e caract er es al fabt i cos para mai scul o.

Templ at es
Cont edo Funci on al i dade
X Per mi t e qual quer caract er e.
9 Per mi t e apenas dgit os para qual quer t i po de dado, i nclui ndo o si nal para
numri cos.
# Per mi t e dgi t os, si nai s e espaos em branco par a qual quer t i po de dado.
! Convert e caract er es al fabt i cos para mai scul o.
* Exi be um ast eri sco no lugar dos espaos em br anco i ni ci ai s em nmer 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 Compl et o



22. Pr ogr amas de At ual i zao

Os pr ogramas de at ualizao de cadast ros e digi t ao de movi ment os seguem um padro que
se api a no Di ci onri o de Dados.

Basi cament e so t r s os model os mai s ut ilizados:

E Model o 1 ou Ax Cadast r o: Para cadast rament os em t el a chei a.
Exempl o: Cadast r o de Cli ent e.

E Model o 2 : Cadast rament os envol vendo apenas uma
t abel a, mas com um cabeal ho e,
opci onal ment e, um r odap e um corpo com
quant i dade ili mi t ada de li nhas. I deal para
casos em que h dados que se r epet em
por vri os i t ens e que, por i sso, so
col ocados no cabeal ho. Exempl o: Pedi do de
Compra.

E Model o 3 : Cadast rament os envol vendo duas t abel as,
um com dados de cabeal ho e out ro di gi t ado
em l i nhas com os i t ens. Exempl o: Pedi do de
Vendas, Orament o et c.

Todos os model os so genri cos, ou sej a, o programa i ndepende da t abel a a ser t rat ada,
bast ando prat i cament e que se i nforme apenas o seu Ali as. O rest o obt i do do
Di ci onri o de Dados ( SX3) .



- 179 -

ADVPL Compl et o



22.1. Model o1( ) ou Ax Cadast r o( )

O AxCadast r o( ) uma funci onali dade de cadast ro si mpl es, com poucas opes de
cust omi zao, a qual compost a de:

Browse padro para vi sualizao das i nformaes da base de dados, de acordo com as
confi guraes do SX3 Di ci onri o de Dados ( campo br owse) .

Funes de pesqui sa, vi sualizao, i ncl uso, al t erao e excl uso padr es para
vi suali zao de regi st r os si mpl es, sem a opo de cabeal ho e i t ens.

E Si nt ax e: Ax Cadast r o( cAl i as, cTi t u l o, cVl dEx c, cVl dAl t )

E Par met r os:

cAl i as
Ali as padro do si st ema para ut i lizao, o qual deve est ar defi ni do no
di ci onri o de dados SX3.
cTi t ul o Tt ul o da Janel a
cVl dEx c Vali dao para Excl uso
cVl dAl t Vali dao para Al t erao


Ex empl o: Funo Ax Cadast r o( )


#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 Compl et o


Ex empl o: Funo de v al i dao da al t er ao



/*/
+------------------------------------------------------------------------------
| 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


Ex empl o: Funo de v al i dao da ex cl u so


/*/
+------------------------------------------------------------------------------
| 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 Compl et o



22.2. Model o2( )

O nome Model o 2 foi concei t uado pel a Mi crosi ga por se t r at ar de um prot t i po de t el a para
ent rada de dados. I ni ci al ment e vamos desmi st i ficar doi s pont os:

O Funo Model o2( ) Trat a- se de uma funo pront a que cont empl a o prot t i po
Model o 2, porm, est e um assunt o que no i remos t rat ar aqui , vi st o que
uma funci onali dade simpl es que quando necessri o i nt ervi r em al go na rot i na
no h mui t o recur so para t al .

O Pr ot t i po Model o 2 Trat a- se de uma t el a, como a fi gura abai xo, onde seu
obj et i vo efet uar a manut eno em vri os regi st ros de uma s vez. Por
exempl o: efet uar o movi ment o i nt erno de vr i os produt os do est oque em um
ni co l ot e.



22.2.1. Component es de uma t el a no f or mat o Model o 2

Obj et o MsDi al og( )

Deve ser ut i lizada como j anel a padro para ent rada de dados, um t i po de obj et o modal , ou
sej a, no permi t e que out ra j anel a at i va receba dados enquant o est a est i ver at i va.



- 182 -

ADVPL Compl et o


Toda vez que ut ili zar est e comando o ADVPL exi ge que sej a decl arado a di ret i va I ncl ude no
cabeal ho do programa o arqui vo Pr ot heus. ch , i st o porque o compil ador preci sar porque
est e comando t rat a- se de um pseudo cdi go e sua t raduo ser fei t a na compil ao. Val e
l embrar t ambm que est e s ser aci onado depoi s que i nst anci ado e at i vado por out r o
comando.


DEFINE MSDIALOG oDlg TITLE "Prottipo Modelo 2" FROM 0,0 TO 280,552 OF;
oMainWnd PIXEL

ACTIVATE MSDIALOG oDlg CENTER


Repar em que o comando DEFI NE MSDI ALOG i nst anci ou e o comando ACTI VATE MSDI ALOG
at i va t odos os obj et os, ou sej a, t odo ou qual quer out ro obj et o que preci sar col ocar nest a
j anel a ser preci so i nfor mar em qual obj et o, para est e caso sempr e ser ut ilizada a vari vel de
obj et o export vel oDl g.


Funo Enchoi ceBar ( )

Funo que cri a uma barra de bot es padro de Ok e Cancel ar, per mi t indo a i mpl ement ao
de bot es adi ci onai s.



E Si nt ax e: ENCHOI CEBAR( oDl g, bOk , bCancel ar , [ l Men sApag ] , [ aBot oes ] )

E Par met r os:

oDl g Obj et o Janel a onde a barra ser cri ada.
bOk Obj et o Bl oco de cdi go execut ado quando cl i cado bot o Ok.
bCancel ar Obj et o Bl oco de cdi go execut ado quando cl i cado.
l Men sApag Lgi co
I ndi ca se ao cl i car no bot o Ok aparecer uma t el a de
confi rmao de excl uso. Val or padro fal so.
aBot es Vet or
Vet or com i nformaes para cri ao de bot es
adi ci onai s na barra. Seu format o { bi t map, bl oco de
cdi go, mensagem} .

















- 183 -

ADVPL Compl et o




Fi gu r a: Pr ot t i po Model o2 Enchoi ce

Obj et o TPanel ( )

Repar e que para faci lit ar o desenvol vi ment o foi ut ilizado o obj et o TPanel para aj udar o
ali nhament o dos obj et os TSay e TGet , ou sej a, a ut ili zao dest e recur so per mi t e que o
programador no se pr eocupe com coordenadas compl exas para dei xar a uni o dos obj et os
si mt ri cos.

Ut ilize o obj et o TPanel quando desej ar cri ar um pai nel est t i co, onde podem ser cri ados out r os
cont r ol es com o obj et i vo de organi zar ou agrupar component es vi suai s.

E Si nt ax e: TPanel ( ) : New ( [ anRow ] , [ anCol ] , [ acTex t ] , [ aoWnd] , [ aoFont ] ,
[ al Cent er ed] , [ l Par 6] , [ anCl r Tex t ] , [ anCl r Back ] , [ anWi dt h] ,
[ anHei ght ] , [ al Low er ed] , [ al Rai sed] )

E Par met r os:

nRow Numri co vert i cal em pixel .
nCol Numri co hori zont al em pi xel .
cTex t Text o a ser exi bi do ao fundo.
oWnd Obj et o da j anel a ou cont rol e onde ser cri ado o obj et o.
oFont Caract erst i cas da font e do t ext o que aparecer ao fundo.
l Cent er ed Exi be o t ext o do t t ul o cent ral izado.
l Par 6 Reser vado.
nCl r Tex t Cor do t ext o de cont r ol e.
nCl r Back Cor do fundo de cont r ole.
nWi dt h Largura do cont rol e em pi xel .
nHei ght Al t ura do cont r ol e em pixel .
l Low er ed Exi be o pai nel rebai xado em r el ao ao cont r ol e de fundo.
l Rai sed
Exi be a borda do cont r ol e rebai xado em rel ao ao cont r ol e de
fundo.


- 184 -

ADVPL Compl et o



Comando SAY - Obj et o: TSay ( )

O comando SAY ou obj et o TSay exi be o cont edo de t ext o est t i co sobr e uma j anel a.

E Si nt ax e SAY:


@ 4,6 SAY " Cdi go: " SI ZE 70, 7 PI XEL OF oTPanel 1


E Si nt ax e TSay ( ) : TSay ( ) : New ( [ anRow ] , [ an Col ] , [ abTex t ] , [ aoWnd] ,
[ acPi ct ur e] , [ aoFont ] , [ l Par 7] , [ l Par 8] , [ l Par 9] , [ al Pi x el s] ,
[ an Cl r Tex t ] , [ anCl r Back ] , [ anWi dt h ] , [ an Hei ght ] , [ l Par 15] , [ l Par 1 6] ,
[ l Par 17 ] , [ l Par 18] , [ l Par 1 9] )

E Par met r os:

anRow
Numri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol
Numri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abTex t
Code- Bl ock, opci onal . Quando execut ado deve r et ornar uma
cadei a de caract eres a ser exi bi da.
aoWn d Obj et o, opci onal . Janel a ou di l ogo onde o cont r ol e ser cri ado.
acPi ct ur e
Caract er e, opci onal . Pi ct ure de format ao do cont edo a ser
exi bi do.
aoFont
Obj et o, opci onal . Obj et o t i po t Font para confi gurao do t i po de
font e que ser ut ili zado para exi bi r o cont edo.
l Par 7 Reser vado.
l Par 8 Reser vado.
l Par 9 Reser vado.
al Pi x el s
Lgi co, opci onal . Se . T. consi dera coordenadas passadas em
pi xel s se .F. , padro, consi dera as coordenadas passadas em
caract eres.
anCl r Tex t Numri co, opci onal . Cor do cont edo do cont rol e.
anCl r Back Numri co, opci onal . Cor do fundo do cont rol e.
anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s.
l Par 15 Reser vado.
l Par 16 Reser vado.
l Par 17 Reser vado.
l Par 18 Reser vado.
l Par 19 Reser vado.


- 185 -

ADVPL Compl et o



Comando MSGET - Obj et o: TGet ( )

O comando MsGet ou o obj et o TGet ut i lizado para cri ar um cont rol e que armazene ou al t ere
o cont edo de uma vari vel at ravs de di gi t ao. O cont edo da vari vel s modi fi cado
quando o cont r ol e perde o foco de edi o para out ro cont rol e.

E Si nt ax e MSGET:


@ 3,1 92 MSGET dDat a PI CTURE " 9 9/ 9 9/ 9 9" SI ZE 40 ,7 PI XEL OF oTPanel 1



E Si nt ax e TGet ( ) : New ( [ anRow ] , [ anCol ] , [ abSet Get ] , [ aoWnd] , [ anWi dt h] ,
[ anHei ght ] , [ acPi ct ] , [ abVal i d] , [ an Cl r For e] , [ an Cl r Back ] , [ aoFont ] ,
[ l Par 12 ] , [ oPar 1 3] , [ al Pi x el ] , [ cPar 15 ] , [ l Par 1 6] , [ abWh en] , [ l Par 1 8] ,
[ l Par 19 ] , [ abCh an ge] , [ al ReadOn l y ] , [ al Passw or d] , [ cPar 2 3] ,
[ acReadVar ] , [ cPar 25 ] , [ l Par 26 ] , [ nPar 2 7] , [ l Par 28] )

E Par met r os:

anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abSet Get Bl oco de cdi go, opci onal . Bl oco de cdi go no format o { | u| I F(
Pcount ( ) > 0, < var> : = u, < var > ) } que o cont rol e ut ili za para
at ualizar a vari vel < var> . < var> deve ser t i po caract er,
numri co ou dat a.
aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e ser
cri ado.
anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s.
acPi ct Caract er e, opci onal . Mscar a de format ao do cont edo a ser
exi bi do.
abVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for
vli do e .F. quando o cont edo for i nvli do.
anCl r For e Numri co, opci onal . Cor de fundo do cont rol e.
anCl r Back Numri co, opci onal . Cor do t ext o do cont rol e.
aoFont Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as
caract erst i cas da font e ut ili zada para exi bi r o cont edo do
cont r ol e.
l Par 12 Reser vado.
oPar 13 Reser vado.
al Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em
pi xel s, se .F. so em car act eres.
cPar 1 5 Reser vado.
l Par 16 Reser vado.
abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco
de ent rada de dados est sendo efet uada na j anel a onde o
cont r ol e foi cri ado. O bloco deve r et ornar .T. se o cont r ol e deve
permanecer habili t ado ou .F. se no.
l Par 18 Reser vado.

- 186 -

ADVPL Compl et o


l Par 19 Reser vado.
abChange Bl oco de cdi go, opci onal . Execut ado quando o cont r ol e
modi fi ca o val or da vari vel associ ada.
al ReadOnl y Lgi co, opci onal . Se . T. o cont r ol e no poder ser edi t ado.
al Passw or d Lgi co, opci onal . Se . T. o cont r ol e exi bi r ast eri scos * no
l ugar dos caract er es exibi dos pel o cont r ol e para si mul ar
ent rada de senha.
cPar 2 3 Reser vado.
acReadVar Caract er e, opci onal . Nome da vari vel que o cont rol e dever
mani pul ar, dever ser a mesma vari vel informada no
parmet ro abSet Get , e ser o r et orno da funo ReadVar( ) .
cPar 2 5 Reser vado.
l Par 26 Reser vado.
nPar 27 Reser vado.
l Par 18 Reser vado.


Obj et o MsGet Dados( )

Obj et o t i po li st a com uma ou mai s col unas para cadast rament o de dados baseado em um
vet or. Sua ut ili zao exi ge que sej a ut ilizado t rs vari vei s com seu escopo Pri vat e, so el as:
aRot i na, aHeader e aCOLS.

E Obser v aes i mpor t ant es:

O O vet or aHeader deve ser const rudo com base no di ci onri o de dados.
O O vet or aCOLS deve ser const rudo com base no vet or aHeader, por m deve-
se cri ar uma col una adi ci onal para o cont r ole de excl uso do r egi st ro, ou
sej a, quando o usuri o t ecl ar a t ecl a < DELETE> a linha fi car na cor ci nza e
est a col una est ar com o seu val or i gual a verdadei ro ( .T.) .
O Quando i nst anci ado est e obj et o possvel saber em que li nha o usuri o est
porque o obj et o t r abal ha com uma vari vel de escopo Publi c denominada n ,
seu val or numri co e t er sempr e no cont edo a linha em que o usuri o
encont ra- se com o cursor.








- 187 -

ADVPL Compl et o


E Si nt ax e: MSGETDADOS( ) : NEW( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a,
nOpc, [ cLi nh aOk ] , [ cTudoOk ] , [ cI n i Cpos ] , [ l Apagar ] , [ aAl t er ] , ,
[ uPar 1 ] , [ l Vazi o ] , [ nMax ] , [ cCampoOk ] , [ cSuper Apagar ] ,
[ uPar 2 ] , [ cApagaOk ] , [ oWnd ] )

E Par met r os:

nSuper i or
Di st anci a ent re a MsGet Dados e o ext remi dade superi or do
obj et o que a cont m.
nEsqu er da
Di st anci a ent re a MsGet Dados e o ext remi dade esquerda do
obj et o que a cont m.
nI nf er i or
Di st anci a ent re a MsGet Dados e o ext remi dade i nferi or do
obj et o que a cont m.
nDi r ei t a
Di st anci a ent re a MsGet Dados e o ext remi dade di rei t a do
obj et o que a cont m.
nOpc
Posi o do el ement o do vet or aRot i na que a MsGet Dados
usar como referenci a.
cLi nh aOk
Funo execut ada para vali dar o cont ext o da l i nha at ual do
aCol s.
cTudoOk
Funo execut ada para vali dar o cont ext o geral da
MsGet Dados ( t odo aCol s) .
cI ni Cpos
Nome dos campos do t ipo caract er que ut i lizaro i ncrement o
aut omt i co. Est e parmet r o deve ser no format o + < nome
do pri mei ro campo> + < nome do segundo campo> + . .. .
l Apagar Habili t a del et ar li nhas do aCol s. Val or padro fal so.
aAl t er Vet or com os campos que podero ser al t erados.
uPar 1 Parmet r o r eservado.
l Vazi o
Habili t a validao da primei ra col una do aCol s para est a no
poder est ar vazi a. Val or padro fal so.
nMax Nmer o mxi mo de l i nhas permi t idas. Val or padro 99.
cCampoOk Funo execut ada na vali dao do campo.
cSuper Apagar
Funo execut ada quando pr essi onada as t ecl as
< Ct rl > + < Del et e> .
uPar 2 Parmet r o r eservado.
cApagaOk
Funo execut ada para vali dar a excl uso de uma li nha do
aCol s.
oWnd Obj et o no qual a MsGet Dados ser cri ada.


Var i v el Pr i v at e aRot i na

Array com as rot i nas que sero execut adas na MBr owse e que defi ni r o t i po de operao que
est sendo execut ada, por exempl o: Pesqui sar, Vi suali zar, I ncl ui r, Al t erar, Excl ui r e out ros.

Est e vet or preci sa ser const rudo no format o:

El ement o Cont edo
1 Tt ul o da opo.
2 Nome da rot i na ( Funct i on) .
3 Reser vado.
4 Operao ( 1- Pesqui sar; 2- Vi sualizar; 3- I ncl ui r; 4- Al t erar; 5- Excl uso) .
5
Acesso r el aci onado a r ot i na, se est opo no for i nformada nenhum
acesso ser val i dado.


- 188 -

ADVPL Compl et o


Var i v el Pr i v at e aHeader

Array com i nformaes das col unas, ou sej a, com as caract erst i cas dos campos que est o
cont i das no di ci onri o de dados ( SX3) , est e vet or pr eci sa est ar no format o abai xo:

El ement o Cont edo
1 Tt ul o do campo
2 Nome do campo
3 Mscara do campo
4 Tamanho do campo
5 Deci mal do campo
6 Vali dao de usuri o do campo
7 Uso do campo
8 Ti po do campo ( caract er e, numri co, dat a e et c. )
9 Prefi xo da t abel a
10 Cont ext o do campo ( real ou vi rt ual )

Var i v el Pr i v at e aCol s

Vet or com as l inhas a serem edi t adas. As col unas devem ser const r udas com base no vet or
aHeader e mai s uma lt i ma coluna com o val or l gi co que det ermi na se a l i nha foi excl uda,
i ni ci al ment e est a dever t er o seu cont edo i gual a fal so ( .F.) .
























- 189 -

ADVPL Compl et o



22.2.2. Est r ut ur a de um pr ogr ama ut i l i zando a Model o2( )

O exempl o abai xo demonst ra a mont agem de um programa para a ut ili zao do prot t i po
Model o 2. Ant es de i ni ciarmos o exempl o vamos est rut urar o pr ograma.

Est r ut u r a do pr ogr ama

Li nhas Pr ogr ama
1 Funo pr i nci pal ;
2 Declar ao e at r ibuio de variveis;
3 Acesso a t abela pr incipal e sua or dem;
4 Chamada da funo MBrowse;
5 Fi m da f uno pr i nci pal .
6
7 Funo de vi sual i zao, al t er ao e ex cl uso;
8 Declar ao e at r ibuio de variveis;
9 Acesso ao pr imeiro r egist r o da chave em que est posicionado na MBrowse;
10 Mont agem das var iveis est t icas em t ela;
11 Mont agem do vet or aHeader por meio do dicionr io de dados;
12
Mont agem do vet or aCOLS de t odos os regist ros r efer ent e a chave pr incipal em que est
posicionado na MBr owse;
13 I nst ncia da MsDialog;
14 I nst ncia dos obj et os TSay e TGet ;
15 I nst ncia do obj et o MsGet Dados;
16 At ivar o obj et o pr incipal que o obj et o da j anela;
17 Se for oper ao difer ent e de visualizao e clicou no bot o OK;
18 A oper ao e de Alt er ao?
19 Chamar a funo par a alt er ar os dados;
20 Caso cont r r io
21 Chamar a funo par a excluir os dados;
22 Fi m da f uno de v i sual i zao, al t er ao e ex cl uso.
23
24 Funo de i ncl uso;
25 Declar ao e at r ibuio de variveis;
26 Mont agem das var iveis est t icas em t ela;
27 Mont agem do vet or aHeader por meio do dicionr io de dados;
28
Mont agem do vet or aCOLS com o seu cont edo confor me o inicializador padr o do campo ou
vazio, pois t r at a- se de uma incluso;
29 I nst ncia da MsDialog;
30 I nst ncia dos obj et os TSay e TGet ;
31 I nst ncia do obj et o MsGet Dados;
32 At ivar o obj et o pr incipal que o obj et o da j anela;
33 Se clicou no bot o OK;
34 Chamar a funo par a incluir os dados;
35 Fi m da f uno de i ncl uso.


- 190 -

ADVPL Compl et o



Rot i n a pr i nci pal


#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


Rot i n a de i ncl u so


//+--------------------------------------------------------------------+
//| 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 Compl et o


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


Rot i n a de Vi su al i zao, Al t er ao e Ex cl u so


//+--------------------------------------------------------------------+
//| 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 Compl et o


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 Compl et o



Mont agem do ar r ay 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


Mont agem do ar r ay aCol s


//+--------------------------------------------------------------------+
//| 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 Compl et o


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

Ef et i v ao da i ncl u so


//+--------------------------------------------------------------------+
//| 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 Compl et o



Ef et i v ao da al t er ao


//+--------------------------------------------------------------------+
//| 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 Compl et o



Ef et i v ao da ex cl uso

//+--------------------------------------------------------------------+
//| 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 aux i l i ar : Val i dao do cdi go do v endedor

//+--------------------------------------------------------------------+
//| 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 aux i l i ar : Val i dao do cdi go do cent r o de cust o n a mudana de l i nh a

//+--------------------------------------------------------------------+
//| 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 Compl et o


Funo aux i l i ar : Val i dao do cdi go do cent r o de cust o par a t odas as l i nh as


//+--------------------------------------------------------------------+
//| 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 Model o2( )

A funo Model o2( ) uma int erface pr - defi ni da pel a Mi crosi ga que i mpl ement a de forma
padroni zada os compont es necessri os a mani pul ao de est rut uras de dados nas quai s o
cabeal ho e os i t ens da i nformao compart i lham o mesmo r egi st ro fsico.

Seu obj et i vo at uar como um faci li t ador de codi fi cao, per mi t i ndo a ut ili zao dos r ecursos
bsi cos dos segui nt es component es vi suai s:

O MsDi al og( )
O TGet ( )
O TSay ( )
O MsNew Get Dados( )
O Enchoi ceBar ( )



O A funo Model o2( ) no i mpl ement a as regras de vi suali zao,
i ncl uso, al t erao e excl uso, como uma AxCadast ro( ) ou
AxFunct i on( ) .

O A i ni ci ali zao das vari vei s Pri vat e ut i lizada nos cabeal hos e rodaps,
bem como a i ni ci ali zao e gravao do aCol s devem ser r eal i zadas
pel a rot i na que suport a a execuo da Model o2( ) .

O Da mesma forma, o Browse deve ser t rat ado por est a rot i na, sendo
comum a Model o2( ) est ar vi ncul ada ao uso de uma MBr owse( ) .

- 198 -

ADVPL Compl et o



E Si nt ax e: Model o2( [ cTi t ul o] , [ aCab] , [ aRoda] , [ aGr i d] , [ nOpc] , [ cLi n haOk ] ,
[ cTudoOk ] )

E Par met r os:

cTi t ul o Tt ul o da j anel a
aCab Array cont endo as i nformaes que sero exi bidas no cabeal ho na for ma de
Enchoi ce( )
aCab[ n] [ 1] ( Caract er e) : = Nome da vari vel pri vat e que ser vi nculada ao
campo da Enchoi ce( ) .
aCab[ n] [ 2] ( Array) : = Array com as coordenadas do campo na t el a { Li nha,
Col una}
aCab[ n] [ 3] ( Caract ere) : = Tt ul o do campo na t el a
aCab[ n] [ 4] ( Caract ere) : = Pi ct ure de format ao do get ( ) do campo.
aCab[ n] [ 5] ( Caract ere) : = Funo de val i dao do get ( ) do campo.
aCab[ n] [ 6] ( Caract ere) : = Nome da consul t a padro que ser execut ada
para o campo vi a t ecl a F3
aCab[ n] [ 7] ( Lgi co) : = Se o campo est ar l i vre para di gi t ao.

aRoda Array cont endo as i nformaes que sero exi bidas no cabeal ho na for ma de
Enchoi ce( ) , no mesmo format o que o aCab.
aGr i d Array cont endo as coordenadas da Get Dados( ) na t el a. Padro : =
{ 44,5,118,315}
nOpc Opo sel eci onada na MBr owse, ou que desej e ser passada para cont rol e da
Model o2, aonde:
2 Vi suali zar
3 - I ncl ui r
4 - Al t erar
5 - Excl ui r
cLi nh aOk Funo para val i dao da li nha na Get Dados( )
cTudoOk Funo para val i dao na confi rmao da t el a de i nt erface da Model o2( ) .

E Ret or no:

Lgi co I ndi ca se a t el a da i nt er face Model o2( ) foi confi rmada ou cancel ada pel o
usuri o.










- 199 -

ADVPL Compl et o



Ex empl o: Ut i l i zao da Model o2( ) par a v i sual i zao do Cadast r o de Tabel as ( 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 Compl et o



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 Compl et o



22.3. Model o3( )

O nome Model o 3, assi m como a Model o 2 foi concei t uado pel a Mi crosi ga por se t rat ar de um
prot t i po de t el a para ent rada de dados. I ni ci alment e vamos desmi st i fica doi s pont os:

O Funo Model o3( ) Trat a- se de uma funo pront a que cont empl a o prot t i po
Model o 3, porm, est e um assunt o que no i remos t rat ar aqui , vi st o que
uma funci onali dade simpl es que quando necessri o i nt ervi r em al go na rot i na
no h mui t o recur so para t al .

O Pr ot t i po Model o 3 Trat a- se de uma t el a, como a fi gura abai xo, onde seu
obj et i vo efet uar a manut eno em vri os regi st ros de uma s vez r el aci onada
a out r o regi st r o de out ra t abel a, ou sej a, aqui t eremos o rel aci onament o de
regi st ros pai e fi lho , ent o pr eci so se pr eocupar com est e r el acionament o.
Por exempl o: efet uar a manut eno em um pedi do de vendas, onde t er um
regi st ro em uma t abela referent e cabea do pedi do e out ra t abela com os
regi st ros refer ent es aos i t ens dest e pedi do de vendas.

Para ganharmos t empo no ser apr esent ado aqui t oda a expl i cao e mont agens para a
funo Enchoi ceBar , comando MsDi al og, Say e MsGet e para os vet ores aHeader e
aCOLS, ent r et ant o t odos est es est aro na codi fi cao do cdi go font e. A fi gura abai xo most ra
exat ament e o que a t el a prot t i po Model o 3:



Fi gu r a: Pr ot t i po Model o 3

- 202 -

ADVPL Compl et o



Est e pr ot t i po const i t udo de MsDi al og, Enchoi ceBar , Enchoi ce, MsGet Dados, Say e Get .

Di ant e dos expost os at o moment o houve um novo nome para ns, el e a funo Enchoi ce, o
que ?

Funo Enchoi ce( ) Obj et o MsMGet ( )

A funo Enchoi ce ou o obj et o MsMGet so r ecur sos baseados no di ci onri o de dados para
veri fi car campos obrigatrios, vali daes, gat i l hos, consul t a padro e et c. Assi m t ambm par a
cri ar past as de cadast r os. Est es podem ser usados t ant o com vari vei s de memri as com o
escopo Pri vat e como di ret ament e os campos da t abel a que se r efer e. A diferena entre a funo
Enchoi ce e o obj et o MsMGet que a funo no ret orna o nome da vari vel de obj et o
export vel cri ado.

A est rut ura par a mont ar um pr ograma com o prot t i po model o 3 semel hant e ao pr ot t i po
model o 2, porm a di ferena real a ut ili zao da funo Enchoi ce ou o obj et o MsMGet , para
est e document o i remos t rabal har com a funo.

E Si nt ax e: Ench oi ce( cAl i as, nReg, nOpc, aAc, cOpc, cTex t Ex cl u i , aAcho, aPos,
aCpos, nNum, nCol Mens, cMen sagem, cTudOk , oObj , l Vi r t u al )

E Par met r os:

cAl i as Ali as do dados a ser em cadast rados.
nReg Nmer o do regi st ro da t abel a a ser edi t ado.
uPar 1 Parmet r o r eservado.
uPar 2 Parmet r o r eservado.
uPar 3 Parmet r o r eservado.
aAcho Vet or com os campos que sero apresent ados pel a MsMGet .
aPos Vet or com as coordenadas onde a MsMGet ser cri ada no
for mat o { coord. superi or, coord. esquerda, coor d. di rei t a,
coord. i nferi or} .Funo execut ada par a val i dar o cont ext o da
linha at ual do aCol s.
aCpos Vet or com os campos que podero ser al t erados.
uPar 4 Parmet r o r eservado. Nome dos campos do t i po caract er que
ut ili zaro i ncrement o aut omt i co. Est e parmet r o deve ser no
for mat o + < nome do pr i mei ro campo> + < nome do segundo
campo> + ... .
uPar 5 Parmet r o r eservado.
uPar 6 Parmet r o r eservado.
uPar 7 Parmet r o r eservado.
oWnd Obj et o no qual a MsMGet ser cri ada.
uPar 8 Parmet r o r eservado.
l Memor i a I ndi ca se ser usado vari vei s de memri a ou os campos da
t abel a para cadast rament o dos dados. Val or padro fal so.
l Col un a I ndi ca se a MsMGet ser apr esent ada com um obj et o por l inha
( uma col una) . Val or padro fal so. Parmet r o reser vado.
uPar 9 Parmet r o r eservado.
l SemPast as I ndi ca se no ser usado as Past as de Cadast ro na MsMGet .
Funo execut ada para vali dar a excl uso de uma li nha do
aCol s.



- 203 -

ADVPL Compl et o


Val e l embrar que ns programador es reapr ovei t amos mui t o o que j exi st e, i st o para
si mpl esment e ganharmos t empo, e no caso da ut ili zao da funo Enchoi ce preci so cri ar as
vari vei s de memri as que l evam o mesmo nome dos campos da t abel a em quest o. Por
exempl o o campo A2_NOME da t abel a SA2 ( cadast r o de fornecedores) quando quer emos
referenci ar o campo usa- se o prefi xo da t abel a e o campo em quest o, dest a forma:


SA2->A2_NOME


Agora quando queremos r efer enci ar a uma vari vel que est com o cont edo do mesmo
campo cri amos out r o recurso, dest a forma:


M->A2_NOME


E para cri ar vari vei s com o nome do campo ut ili zamos um cdi go de bl oco ( code- bl ock) e
mai s um l ao de l eit ura para at ri bui r val ores ini ci ai s a cada uma del a. Ent o fi ca assi m o
procedi ment o:


Private bCampo := { |nField| Field(nField) }


E em out ro moment o aprovei t amos est vari vel bCampo para faci li t ar a at ri bui o, vej a o
exempl o abai xo :


For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := Atribuio inicial ou atribuio de valor
Next nX


Ou sej a, fazer para t odos os campos, e a cada campo cri ar a vari vel com a at ri bui o ini cial
ou at ri bui o de val or.












- 204 -

ADVPL Compl et o



22.3.1. Est r ut ur a de um pr ogr ama ut i l i zando a Model o3( )

O exempl o abai xo demonst ra a mont agem de um programa para a ut ili zao do prot t i po
Model o 3. Ant es de i ni ciarmos o exempl o vamos est rut urar o pr ograma.

Est r ut u r a do pr ogr ama

Li nhas Pr ogr ama
1 Funo pr i nci pal ;
2 Declar ao e at r ibuio de variveis;
3 Acesso a t abela pr incipal e sua or dem;
4 Chamada da funo MBrowse;
5 Fi m da f uno pr i nci pal .
6
7 Funo de vi sual i zao, al t er ao e ex cl uso;
8 Declar ao e at r ibuio de variveis;
9 Acesso ao pr imeiro r egist r o da chave em que est posicionado na MBrowse;
10 Const r uo das var iveis de memr ia M- > ???;
11 Mont agem do vet or aHeader por meio do dicionr io de dados;
12
Mont agem do vet or aCOLS de t odos os r egist r os refer ent e a chave pr incipal em que est
posicionado na MBr owse;
13 I nst ncia da MsDialog;
14 Execuo da funo Enchoice;
15 I nst ncia do obj et o MsGet Dados;
16 At ivar o obj et o pr incipal que o obj et o da j anela;
17 Se for oper ao difer ent e de visualizao e clicou no bot o OK;
18 A oper ao e de Alt er ao?
19 Chamar a funo par a alt er ar os dados;
20 Caso cont r r io
21 Chamar a funo par a excluir os dados;
22 Fi m da f uno de v i sual i zao, al t er ao e ex cl uso.
23
24 Funo de i ncl uso;
25 Declar ao e at r ibuio de variveis;
26 Const r uo das var iveis de memr ia M- > ???;
27 Mont agem do vet or aHeader por meio do dicionr io de dados;
28
Mont agem do vet or aCOLS com o seu cont edo confor me o inicializador padr o do campo ou
vazio, pois t r at a- se de uma incluso;
29 I nst ncia da MsDialog;
30 I nst ncia dos obj et os TSay e TGet ;
31 I nst ncia do obj et o MsGet Dados;
32 At ivar o obj et o pr incipal que o obj et o da j anela;
33 Se clicou no bot o OK;
34 Chamar a funo par a incluir os dados;
35 Fi m da f uno de i ncl uso.









- 205 -

ADVPL Compl et o


Rot i n a pr i nci pal


//+--------------------------------------------------------------------+
//| 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 Compl et o


Funo de I ncl u so


//+--------------------------------------------------------------------+
//| 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 Compl et o



Funo de Vi su al i zao, Al t er ao e Ex cl u so


//+--------------------------------------------------------------------+
//| 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 Compl et o





Funo par a mont ar o v et or 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 par a mont ar o v et or aCol s


//+--------------------------------------------------------------------+
//| 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 Compl et o






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 par a at r i bu i r o nome do cl i ent e a v ar i v el


//+--------------------------------------------------------------------+
//| 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 Compl et o



Funo par a v al i dar a mudana de l i nh a n a MsGet Dados( )

//+--------------------------------------------------------------------+
//| 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 par a v al i dar se t odas as l i nh as est o pr eenchi das

//+--------------------------------------------------------------------+
//| 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 Compl et o


Funo par a ef et u ar a gr av ao dos dados em ZA1 e ZA2 na i ncl u so, al t er ao e
ex cl uso.


//+--------------------------------------------------------------------+
//| 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 Compl et o


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 Compl et o



22.3.2. Funo Model o3( )

A funo Model o3) uma i nt erface pr- defi ni da pel a Mi crosi ga que i mpl ement a de forma
padroni zada os compont es necessri os a mani pul ao de est rut uras de dados nas quai s o
cabeal ho e os i t ens da i nformao est o em t abel as separadas.

Seu obj et i vo at uar como um faci li t ador de codi fi cao, per mi t i ndo a ut ili zao dos r ecursos
bsi cos dos segui nt es component es vi suai s:

O MsDi al og( )
O Enchoi ce( )
O Enchoi ceBar ( )
O MsNew Get Dados( )




O A funo Model o3( ) no i mpl ement a as regras de vi suali zao,
i ncl uso, al t erao e excl uso, como uma AxCadast ro( ) ou
AxFunct i on( ) .

O A i ni ci ali zao dos campos ut i lizados na Enchoi ce( ) deve ser r eali zadas
pel a rot i na que suport a a execuo da Model o3( ) , normal ment e
at ravs do uso da funo RegToMemor y( ) .

O Da mesma forma, o Browse deve ser t rat ado por est a rot i na, sendo
comum a Model o3( ) est ar vi ncul ada ao uso de uma MBr owse( ) .


E Si nt ax e: Model o3 ( [ cTi t ul o] , [ cAl i asE] , [ cAl i asGet D] , [ aCposE] , [ cLi nOk ] ,
[ cTudOk ] , [ nOpcE] , [ nOpcG] , [ cFi el dOk ] )

E Par met r os:

cTi t ul o Tt ul o da j anel a
cAl i asE Ali as da t abel a que ser ut ilizada na Enchoi ce
cAl i asGet D Ali as da t abel a que ser ut ilizada na Get Dados
aCposE
Nome dos campos, pert encent es ao Al i as especi fi cado o parmet r o cAl i asE,
que devero ser exi bi dos na Enchoi ce:
AADD( aCposE,{ nome_campo } )
cLi nh aOk Funo para val i dao da li nha na Get Dados( )
cTudoOk Funo para val i dao na confi rmao da t el a de i nt erface da Model o2( ) .
nOpcE
Opo sel eci onada na MBrowse, ou que desej e ser passada para cont r ol e da
Enchoi ce da Model o3, aonde:
2 Vi suali zar
3 - I ncl ui r
4 - Al t erar
5 - Excl ui r
nOpcG
Opo sel eci onada na MBrowse, ou que desej e ser passada para cont r ol e da
Get Dados da Model o3, aonde:
2 Vi suali zar
3 - I ncl ui r
4 - Al t erar
5 - Excl ui r
cFi el dOk Vali dao dos campos da Enchoi ce( )

- 214 -

ADVPL Compl et o



E Ret or no:

Lgi co I ndi ca se a t el a da i nt er face Model o2( ) foi confi rmada ou cancel ada pel o
usuri o.

Ex empl o: Ut i l i zao da Model o3( ) par a Pedi dos de Ven das ( 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 Compl et o



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 Compl et o



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 Compl et o



22.4. Mbr ow se( )

A Mbrowse( ) uma funci onali dade de cadast ro que permi t e a ut ilizao de r ecursos mai s
apri morados na vi suali zao e mani pul ao das i nformaes do si st ema, possui ndo os
segui nt es component es:

Browse padro para vi sualizao das i nformaes da base de dados, de acordo com as
confi guraes do SX3 Di ci onri o de Dados ( campo br owse) .

Paramet ri zao para funes especfi cas para as aes de vi sualizao, i ncluso,
al t erao e excl uso de i nformaes, o que vi abiliza a manut eno de i nformaes com
est rut ura de cabeal hos e i t ens.

Recur sos adi ci onai s como i dent i fi cador es de st at us de regi st ros, l egendas e fil t ros para
as i nformaes.

E Si nt ax e: MBr ow se( n Li n1, nCol 1, nLi n2 , nCol 2, cAl i as, aFi x e, cCpo, nPar 08,
cFun, nCl i ck Def , aCol or s, cTopFun, cBot Fun, nPar 14, bI n i t Bl oc,
l NoMnuFi l t er , l SeeAl l , l ChgAl l )

E Par met r os:

nLi n 1 Nmer o da Li nha I ni ci al
nCol 1 Nmer o da Col una I ni cial
nLi n 2 Nmer o da Li nha Fi nal
nCol 2 Nmer o da Col una Final
cAl i as
Ali as do arqui vo que ser vi sualizado no br owse.
Para ut i lizar a funo MBrowse com arqui vos de t rabal ho, o al i as do
arqui vo de t rabal ho deve ser obri gat ori ament e ' TRB' e o par met ro
aFi xe t orna- se obri gat r i o.
aFi x e
Array bi - di mensi onal cont endo os nomes dos campos fi xos pr-
defi ni dos, obri gando a exi bi o de uma ou mai s col unas ou a defi ni o
das col unas quando a funo ut ili zada com ar qui vos de t rabal ho.
A est rut ura do ar ray di ferent e para arqui vos que fazem part e do
di ci onri o de dados e para arqui vos de t rabal ho.

Arqui vos que fazem par t e do di ci onri os de dados

[ n] [ 1] = > Descri o do campo
[ n] [ 2] = > Nome do campo

Arqui vos de t rabal ho

[ n] [ 1] = > Descri o do campo
[ n] [ 2] = > Nome do campo
[ n] [ 3] = > Ti po
[ n] [ 4] = > Tamanho
[ n] [ 5] = > Deci mal
[ n] [ 6] = > Pi ct ure




- 218 -

ADVPL Compl et o


E Par met r os:

cCpo
Campo a ser val idado se est vazi o ou no par a exi bi o do bi t map de
st at us. Quando esse par met r o ut ili zado, a pri mei ra col una do br owse
ser um bi t map i ndi cando o st at us do regi st r o, conforme as condi es
confi guradas nos par met r os cCpo, cFu n e aCol or s.
nPar 08 Parmet r o r eservado.
cFun
Funo que r et ornar um val or l gi co para exi bi o do bi t map de
st at us.
Quando esse parmet r o ut i lizado, o parmet r o cCpo
aut omat i cament e desconsi derado.
nCl i ck Def
Nmer o da opo do aRot i na que ser execut ada quando for efet uado
um dupl o cli que em um regi st ro do br owse. O defaul t execut ar a
rot i na de vi suali zao.
aCol or s
Array bi - di mensi onal para possi bili t ar o uso de di ferent es bi t maps de
st at us.
[ n] [ 1] = > Funo que r et ornar um val or l gi co para a exi bi o do
bi t map
[ n] [ 2] = > Nome do bi t map que ser exi bi do quando a funo ret ornar
.T. ( True) .
O nome do bi t map deve ser um r esource do reposi t ri o e quando esse
parmet ro ut ili zado os parmet r os cCpo e cFun so
aut omat i cament e desconsi derados.
cTopFun
Funo que r et orna o limi t e superi or do fi l t ro baseado na chave de
ndi ce sel eci onada.
Esse parmet r o deve ser ut ili zado em conj unt o com o parmet r o
cBot Fu n.
cBot Fu n
Funo que r et orna o limi t e inferi or do fi l t ro baseado na chave de ndi ce
sel eci onada.
Esse parmet r o deve ser ut ili zado em conj unt o com o parmet r o
cTopFun.
nPar 14 Parmet r o r eservado.
bI n i t Bl oc
Bl oco de cdi go que ser execut ado no ON I NI T da j anel a do br owse. O
bl oco de cdi go receber como parmet r o o obj et o da j anel a do
browse.
l NoMnuFi l t er
Val or l gi co que defi ne se a opo de fil t ro ser exi bi da no menu da
MBr owse.
.T. = > No exi be a opo no menu
.F. = > ( defaul t ) Exi be a opo no menu.
A opo de fi l t ro na MBr owse est di sponvel apenas para TopConnect .
l SeeAl l
I dent i fi ca se o Br owse dever most rar t odas as fili ai s.
O val or defaul t .F. ( Fal se ) , no most ra t odas as fi liai s. Caso os
parmet ros cTopFun ou cBot Fu n sej am i nfor mados esse parmet r o
ser confi gurado aut omat i cament e para .F. ( Fal se )
Parmet r o vl i do part ir da v er so 8.1 1.
A funo Set Br w SeeAl l muda o val or defaul t desse parmet r o.
l ChgAl l
I dent i fi ca se o regi st r o de out ra fi li al est aut or i zado para al t eraes.
O val or defaul t .F. ( Fal se ) , no permi t e al t erar r egi st ros de out ras
fili ai s. Quando esse par met r o est confi gurado para .T. ( True ) , o
parmet ro l SeeAl l confi gurado aut omat i cament e para . T. ( True ) .
Caso os parmet ros cTopFun ou cBot Fun sej am i nformados esse
parmet ro ser confi gurado aut omat i cament e para .F. ( Fal se ) .
Parmet r o vl i do part ir da v er so 8.1 1.
A funo Set Br w ChgAl l muda o val or defaul t desse parmet r o.

- 219 -

ADVPL Compl et o



E Var i v ei s pr i v at e adi ci on ai s

aRot i n a
Array cont endo as funes que sero execut adas pel a Mbrowse, nel e
ser defi ni do o t i po de operao a ser execut ada ( incl uso, al t erao,
excl uso, vi suali zao, pesqui sa, et c. ) , e sua est rut ura compost a de
5 ( ci nco) di menses:

[ n] [ 1] - Tt ul o;
[ n] [ 2] Rot i na;
[ n] [ 3] Reservado;
[ n] [ 4] Operao ( 1 - pesqui sa; 2 - vi suali zao; 3 - i ncl uso; 4 -
al t erao; 5 - excl uso) ;

El e ai nda pode ser paramet ri zado com as funes bsi cas da
AxCadast r o conforme abai xo:

AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} )
AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} )
AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui ",0,3} )
AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} )
AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} )
cCadast r o Tt ul o do browse que ser exi bido.

E I nf or maes passadas par a f unes do aRot i n a:

Ao defi ni r as funes no ar ray aRot i na, se o nome da funo no for especi fi cado com ( ) , a
Mbrowse passar como parmet ros as segui nt es vari vei s de cont r ol e:

cAl i as Nome da rea de t rabal ho defi ni da para a Mbr owse
nReg Recno do r egi st ro posi cionado no Br owse
nOpc
Posi o da opo ut ili zada na Mbr owse de acor do com a ordem da
funo no ar ray a Rot i na.



A posi o das funes no array aRot i na defi ne o cont edo de uma vari vel de
cont r ol e que ser repassada para as funes chamadas a part i r da Mbrowse,
convenci onada como nOpc. Dest a forma, para mant er o padro da apli cao
ERP a ordem a ser segui da na defi ni o do aRot i na :


1. Pesqui sar
2. Vi suali zar
3. I ncl ui r
4. Al t erar
5. Excl ui r
6. Li vre


- 220 -

ADVPL Compl et o



Ex empl o: Funo Mbr ow se( )

#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


Ex empl o: Funo I ncl ui ( ) subst i t u i ndo a f u no Ax I ncl ui ( ) Ch amada da Mbr ow se( )


#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 Compl et o



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


Ex empl o: Funo I ncl ui ( ) subst i t u i ndo a f u no Ax I ncl ui ( ) Fun o I ncl u i ( )


/*/
+-----------------------------------------------------------------------------
| 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 Compl et o



Ex empl o: Det er mi n an do a opo do aRot i n a pel a i nf or mao r ecebi da 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. Ax Funct i ons( )

Conforme menci onado nos t pi cos sobre as i nt erfaces padres AxCadast ro( ) e Mbr owse( ) ,
exi st em funes padr es da apli cao ERP que permi t em a vi suali zao, i ncl uso, al t erao e
excl uso de dados em format o si mpl es.

Est as funes so padres na defi ni o da i nt erface AxCadast ro( ) e podem ser ut i lizadas
t ambm da const ruo no array aRot i na ut ilizado pel a Mbr owse( ) , as quai s est o l i st adas a
segui r:

AXPESQUI ( )
AXVI SUAL( )
AXI NCLUI ( )
AXALTERA( )
AXDELETA( )

- 223 -

ADVPL Compl et o



AXPESQUI ( )

Si nt ax e AXPESQUI ( )
Descr i o
Funo de pesqui sa padro em r egi st ros exi bi dos pel os br owses do si st ema,
a qual posi ci ona o br owse no regi st ro pesqui sado. Exi be uma t el a que
permi t e a sel eo do ndi ce a ser ut i lizado na pesqui sa e a di gi t ao das
i nformaes que compe a chave de busca.

AXVI SUAL( )

Si nt ax e
AXVI SUAL( cAl i as, n Reg, nOpc, aAch o, nCol Men s, cMensagem, cFunc, ;
aBut t ons, l Max i mi zed )
Descr i o
Funo de vi suali zao padro das i nformaes de um regi st r o, no for mat o
Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .

AXI NCLUI ( )

Si nt ax e
Ax I ncl u i ( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ;
cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed)
Descr i o
Funo de i ncl uso padr o das i nformaes de um regi st r o, no format o
Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .

AXALTERA( )

Si nt ax e
Ax Al t er a( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ;
cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed)
Descr i o
Funo de al t erao padro das i nformaes de um regi st ro, no format o
Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .


AXDELETA( )

Si nt ax e
AXDELETA( cAl i as, nReg, nOpc, cTr ansact , aCpos, aBut t ons, aPar am, ;
aAut o, l Max i mi zed)
Descr i o
Funo de excl uso padro das i nformaes de um regi st r o, no format o
Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .









- 224 -

ADVPL Compl et o



22.4.2. Fi l Br ow se( )

A Fil Browse( ) uma funci onalidade que permi t e a ut ili zao de fi l t ros na MBr owse( ) .

E Si nt ax e: Fi l Br ow se( cAl i as, aQu er y , cFi l t r o, l Show Pr oc)

E Par met r os:

cAl i as Ali as at i vo defi ni do para a Mbr owse( )
aQuer y
Est e parmet ro dever ser i ni ci alizado sempre vazi o e sua passagem
obri gat ori ament e por r efernci a, poi s, seu r et or no ser envi ado para a
funo EndFil Brw( ) .

[ 1] = > Nome do Arqui vo Fsi co
[ 2] = > Ordem corr espondent e ao Si ndex
cFi l t r o Condi o de fi lt ro para a MBr owse( )
l Show Pr oc

Habili t a ( .T.) ou desabi li t a ( .F.) a apresent ao da mensagem
Sel eci onando r egi st ros ... , no pr ocessament o.



22.4.3. EndFi l Br w ( )

A EndFil Brw( ) uma funci onali dade que per mi t e eli minar o fil t ro e o arqui vo t emporri o
cri ados pel a Fil Browse( ) .

E Si nt ax e: EndFi l Br w ( cAl i as, aQu er y )

E Par met r os:

cAl i as Ali as at i vo defi ni do para a Mbr owse( )
aQuer y
Array de r et orno passado por refer nci a para a Fil Browse( ) .

[ 1] = > Nome do Arqui vo Fsi co
[ 2] = > Ordem corr espondent e ao Si ndex








- 225 -

ADVPL Compl et o



22.4.4. PesqBr w ( )

A PesqBrw( ) uma funci onalidade que permi t e a pesqui sa dent r o da MBr owse( ) . Est a funo
dever obri gat ori ament e subst i t ui r a funo AxPesqui , no array do aRot i na, sempr e que for
ut ili zada a funo Fil Browse( ) .

E Si nt ax e: PesqBr w ( cAl i as , nReg, bBr w Fi l t er )

E Par met r os:

cAl i as Ali as at i vo defi ni do para a Mbr owse( )
nReg Nmer o do regi st ro
bBr w Fi l t er
Bl oco de Cdi go que cont m a Fi l Browse( )

Ex: bBrwFi lt er : = { | | Fil Browse( cAli as, aQuery, cFil t ro, l ShowPr oc) }



22.4.5. Br w Legenda ( )

A BrwLegenda( ) uma funci onali dade que per mi t e a i ncl uso de l egendas na MBrowse( ) .

E Si nt ax e: Br w Legenda( cCadast r o , cTi t u l o, aLegenda)

E Par met r os:

cCadast r o
Mesma vari vel ut ili zada para a MBrowse, que ident i fi ca o cadast r o que
est em uso no moment o
cTi t ul o Tt ul o ( i dent i fi cao) da Legenda
aLegenda

Array cont endo de defi ni o da cor e do t ext o, expli cat i vo sobr e o que
el a represent a na MBr owse

Ex: { { Cor , Text o } }




Li st a de cor es di spon v ei s n o Pr ot heus

O BR_AMARELO
O BR_AZUL
O BR_BRANCO
O BR_CI NZA
O BR_LARANJA
O BR_MARRON
O BR_VERDE
O BR_VERMELHO
O BR_PI NK
O BR_PRETO




- 226 -

ADVPL Compl et o



Ex empl o: Mbr ow se( ) ut i l i zando as f unes acessr i as


#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 Compl et o



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 Compl et o



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 Compl et o



22.5. Mar k Br ow se( )

A funo MarkBrow( ) permi t e que os el ement os de um br owse, sej am mar cados ou
desmarcados. Para ut ilizao da MarkBrow( ) necessri o decl arar as vari vei s cCadast ro e
aRot i na como Pri vat e, ant es da chamada da funo.

E Si nt ax e: Mar k Br ow ( cAl i as, cCampo, cCpo, aCampos, l I nv er t , cMar ca, cCt r l M,
uPar 8, cEx pI n i , cEx pFi m, cAv al , bPar Bl oco)

E Par met r os:

cAl i as Ali as at i vo defi ni do para a Mbr owse( )
cCampo Campo do arqui vo onde ser fei t o o cont rol e ( gravao) da mar ca.
cCpo
Campo onde ser fei t a a vali dao para mar cao e exi bi o do bi t map
de st at us.
aCampos
Vet or de col unas a ser em exi bi das no browse, deve cont er as segui nt es
di menses:

[ n] [ 1] nome do campo;
[ n] [ 2] - Nul o ( Nil ) ;
[ n] [ 3] - Tt ul o do campo;
[ n] [ 4] - Mscara ( pi ct ure) .
l I n v er t I nvert e a mar cao.
cMar ca St ri ng a ser gravada no campo especi fi cado par a marcao.
cCt r l M Funo a ser execut ada caso desej e marcar t odos el ement os.
uPar 8 Parmet r o r eservado.
cEx pI ni
Funo que r et orna o cont edo i ni ci al do filt ro baseada na chave de
ndi ce sel eci onada.
cEx pFi m
Funo que r et orna o cont edo fi nal do fil t ro baseada na chave de
ndi ce sel eci onada.
cAv al Funo a ser execut ada no dupl o cli que em um el ement o no br owse.
bPar Bl oco Bl oco de cdi go a ser execut ado na i ni ci ali zao da j anel a


E I nf or maes passadas par a f unes do aRot i n a:

Ao defi ni r as funes no ar ray aRot i na, se o nome da funo no for especi fi cado com ( ) , a
MarkBrowse passar como par met ros as seguint es vari vei s de cont r ol e:

cAl i as Nome da rea de t rabal ho defi ni da para a Mbr owse
nReg Recno do r egi st ro posi cionado no Br owse
nOpc
Posi o da opo ut ili zada na Mbr owse de acor do com a ordem da
funo no ar ray a Rot i na.
cMar ca Marca em uso pel a Mar kBrw( )
l I n v er t e I ndi ca se foi ut ili zada a inver so da sel eo dos i t ens no br owse.


- 230 -

ADVPL Compl et o



Ex empl o: Funo Mar k Br ow ( ) e acessr i as


#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 Compl et o


Ex empl o: Funo Vi sLot e( ) ut i l i zao das f unes acessr i as da Mar k Br ow ( )


/*/
+-----------------------------------------------------------------------------
| 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 Compl et o


Ex empl o: Funo Li mpaMar ca( ) ut i l i zao das f u nes acessr i as da Mar k Br ow ( )


/*/
+-----------------------------------------------------------------------------
| 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 Compl et o



23. Ar qui v os e ndi ces Tempor r i os

23.1. Ut i l i zao de ar qui vos e ndi ces t empor r i os

Os arqui vos e ndi ces t emporri os ou de t rabal ho, so geral ment e ut ilizados em ambi ent e
CodeBase, poi s, nest e ambi ent e no h os recursos de Joi n e Order By , como exi st e nos
bancos de dados rel aci onai s. Por est e mot ivo quando necessi t ar gerar uma i nformao
ordenada e consol i dada, ou sej a, de vri as t abel as, dever emos recorr er ao uso dos arqui vos e
dos ndi ces t emporri os.


23.2. Funes par a mani pul ao de ar qui vos e ndi ces t empor r i os


23.2.1. Cr i aTr ab( )

A Cri aTrab( ) uma funci onali dade que permi t e cri ar um arqui vo fsi co ou ger ar um nome
al eat ri o.

E Si nt ax e: Cr i aTr ab( aCampo, l Cr i ar , cEx t )

E Par met r os

aCampo
Array com o nome, t i po, t amanho e deci mal do campo a ser cri ado no
arqui vo
l Cr i ar
Se verdadei ro ( . T.) cri ar o arqui vo, ou fal so ( .F. ) soment e r et orna um
nome al eat ri o
cEx t Qual ext enso dever ser cri ado o arqui vo de t r abal ho



Os arqui vos cri ados com a funo CRI ATRAB( ) sero gerados no di ret ri o
especi fi cado como St ar t Pat h , de acordo com o Root Pat h confi gurado no .ini
da apli cao.









- 234 -

ADVPL Compl et o



23.2.2. dbUseAr ea( )

A dbUseAr ea( ) uma funci onali dade que permi t e defi ni r um arqui vo de base de dados, com
uma rea de t rabal ho disponvel na apli cao.

E Si nt ax e: dbUseAr ea( l New Ar ea, cDr i v er , cName, cAl i as, l Sh ar ed, l ReadOn l y )

E Par met r os

l New Ar ea I ndi ca se e um novo al ias no conj unt o de al i as abert o
cDr i v er Dri ve ( RddName( ) ) do arqui vo - > DBFCDX / TOPCONN / DBFNTX
cName Nome fsi co da t abel a que ser usado
cAl i as Ali as que ser usado enquant o est i ve abert o
l Sh ar ed A t abel a t er acesso excl usi vo ou compart i l hado
l ReadOn l y Se verdadei ro a t abel a ser soment e l ei t ura


23.2.3. I ndRegua( )

A I ndRegua( ) uma funci onali dade que per mi t e cri ar ndi ces t emporri os para o al i as
especi fi cado, podendo ou no t er um fi l t ro.

E Si nt ax e: I ndRegua( cAl i as, cNI ndex , cEx pr ess, x Or dem, cFor , cMens, l Show )

E Par met r os

cAl i as Ali as da t abel a onde ser efet uada o ndi ce/ fil t ro t empor ri o
cNI n dex Nome do arqui vo de t rabal ho ret ornado pel a funo Cri aTrab( )
cEx pr ess Expresso utilizada na chave do novo ndice
x Or dem Parmet r o nul o
cFor Expresso utilizada para filtro
cMens Parmet r o nul o
l Show Apresent ar a t el a de pr ogresso do ndi ce/ fil t ro t emporri o




- 235 -

ADVPL Compl et o



Ex empl o 01 : Ger ao de ar qui v o e ndi ce t empor r i os


#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 Compl et o


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


Quando cri amos um arqui vo ou um ndi ce t empor ri o ( t rabal ho) ,
ut ili zando a funo I ndr egua, obri gat ri o apag- l os no fi nal do r ot i na.

A ut ili zao de arqui vo ou ndi ce t emporri o, dever ser bem anali sada
a fi m de evi t ar l ent i do no pr ocessament os da r ot i na.


O arr ay aSt r u foi cri ado com base nos campos exi st ent es no si st ema,
ao i nvs de cri armos novas est rut uras dos campos, ut i lizamos as j
exi st ent es no di ci onri os de dados ( SX3) .














- 237 -

ADVPL Compl et o


Ex empl o 02 : Ut i l i zando doi s n di ces t empor r i os 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 Compl et o



24. Rel at r i os no gr f i cos

Os rel at ri os desenvol vi dos em ADVPL possuem um padro de desenvol vi ment o que mai s
depende de l ayout e t i pos de parmet r os do que qual quer out ro t i po de i nformao, vi st o que
at o moment o percebemos que a li nguagem padro da Mi crosi ga muit o mai s compost a de
funes genri cas do que de comandos.

Est e t i po de r el at ri o caract eri zado por um format o de i mpresso t i po Post Scri pt , e permi t e
a gerao de um arqui vo em format o t ext o ( .t xt ) , com uma ext enso prpri a da apli cao ERP
( .# # R) .

A est rut ura de um r el at ri o no grfi co baseada no uso da f uno Set Pri nt ( ) , compl ement ada
pel o uso de out r as funes acessri as, as quai s est o det al hadas no Gui a de Refer nci a Rpi da
que acompanha est e mat eri al .

24.1.1. Est r ut ur a de r el at r i os baseados na Set Pr i nt ( )

Nest e t pi co ser demonst rada a const ruo de r el at ri o no grfi co baseado no uso da funo
Set Pri nt ( ) o qual at ende os format os de base de dados I SAM e Topconnect , por m no
cont empl ando a t ecnol ogi a Prot heus Embedded SQL.

Est r ut u r a do pr ogr ama

Li nhas Pr ogr ama
1 Funo pr i nci pal ;
2 Declar ao e at r ibuio de variveis;
3 At ualizao do ar quivo de pergunt as at r avs da funo especfica Cr iaSX1( ) ;
4 Definio as pergunt as at r avs da funo Per gunt e( ) ;
5 Definio das ordens disponveis par a impr esso do r elat r io;
6 Chamada da funo Set Pr int ;
7 At ualizao das configur aes de impr esso com a funo Set Default ( ) ;
8 Execuo da r ot ina de impr esso at r avs da funo Rpt St at us( )
9 Fi m da f uno pr i nci pal .

10 Funo de pr ocessament o e i mpr esso do r el at r i o
11 Declar ao e at r ibuio de variveis;
12 Definio dos filt ros de impr esso, avaliando o bando de dados em uso pela aplicao;
13 At ualizao da r gua de processament o com a quant idade de regist ros que ser processada;
14 Est r ut ur a pr incipal de r epet io par a impresso dos dados do r elat r io;
15 Cont role da impr esso do cabealho ut ilizando a funo Cabec( ) ;
16 I mpr esso dos t ot ais do relat r io;
17 I mpr esso do rodap da lt ima pgina do r elat r io ut ilizando a funo Roda( ) ;
18 Limpeza dos arquivos e ndices t empor r ios cr iados par a o processament o( ) ;
19 Tr at ament o da visualizao do r elat r io ( impr esso em disco) at r avs da funo Our Spool( )
20 Tr at ament os adicionais ao r elat r io, de acor do com necessidades especficas;
21 Liber ao do buffer de impr esso, sej a par a impr essor a, sej a par a limpeza do cont edo
visualizado em t ela, ut ilizando a funo MS_FLUSH( )

22 Fi m da f uno de pr ocessament o e i mpr esso do r el at r i o

23 Funo de at ual i zao do ar qui v o de per gunt as
24 Declar ao e at r ibuio de variveis;
25 Opo 01: Adio individual de cada pergunt a no SX1 ut ilizando a funo PUTSX1( )

Cr iao de um ar r ay individual no for mat o ut ilizado pela PUTSX1( ) cont endo apenas
as infor maes da pergunt a que ser adicionada no SX1.
25 Opo 02: Adio de um gr upo de per gunt as no SX1 ut ilizando a funo AJUSTASX1( )

Cr iao de um arr ay no format o ut ilizado pela AJUSTASX1( ) cont endo t odas as
pergunt as que ser o at ualizadas.

26 Fi m da f uno de at ual i zao do ar qui v o de per gunt as



- 239 -

ADVPL Compl et o


Funo Pr i nci pal


//+-----------------------------------------------------------------+
//| 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 Compl et o



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 Compl et o



//+-----------------------------------
//| Chama funo que processa os dados
//+-----------------------------------
RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo dados,;
aguarde...", .T. )

Return

Funo de pr ocessament o e i mpr esso


//+-----------------------------------------------------------------+
//| 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 Compl et o


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 Compl et o



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 Compl et o



@ 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 Compl et o



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 Compl et o



Funo par a ger ar o gr upo de par met r os 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 Compl et o


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 Compl et o


25. Mani pul ao de ar qui vos I


25.1. Ger ao e l ei t ur a de ar qui vos em f or mat o t ex t o

Arqui vos do t i po t ext o ( t ambm conheci dos como padro TXT) so ar qui vos com regi st ros de
t amanho vari vel . A indi cao do fi nal de cada regi st ro repr esent ada por doi s byt es, 0D
0A em hexadeci mal ou 13 10 em deci mal ou, ai nda, CR LF para padro ASCI I .

Apesar do t amanho dos regi st ros ser vari vel , a mai ori a dos si st emas gera est e t i po de arqui vo
com r egi st ros de t amanho fi xo, de acordo com um l ayout especfi co que i ndi ca quai s
so os dados gravados.

Para i l ust rar est es procedi ment os, sero ger ados arqui vos t ext os, com duas famli as de
funes:

1 ) Faml i a: nest a famli a sero ut i lizadas as funes: FCr eat e( ) , FWri t e( ) , FCl ose( ) ,
FSeek( ) , FOpen( ) e FRead( ) .


2 ) Faml i a: nest a famli a sero ut ili zadas as funes: FT_FUse( ) , FT_FGoTop( ) ,
FT_FLast Rec( ) , FT_FEof( ) , FT_FReadLn( ) , FT_FSki p( ) , FT_FGot o( ) , FT_FRecno( ) .




A di ferena ent re as duas famli as, est na l ei t ura do arqui vo t ext o.
Quando se t rat ar de arqui vo t ext o com t amanho fi xo das linhas, poder o
ser ut ilizadas as duas famli as para l ei t ura do arqui vo, por m, quando se
t rat ar de arqui vo t ext o com t amanho vari vel das li nhas, soment e
poder ser ut ili za a segunda famli a, repr esent ada pel as funes:
FT_FUse( ) , FT_FGoTo( ) , FT_FRecno( ) , FT_FGoTop( ) , FT_FLast Rec( ) ,
FT_FEof( ) , FT_FReadLn( ) e FT_FSki p( ) .














- 249 -

ADVPL Compl et o



1 . Faml i a de f unes de gr av ao e l ei t u r a de ar qui v os t ex t o

Ex empl o: Ger ao de ar qui v o TXT, ut i l i zan do a pr i mei r a f aml i a de f unes


#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 Compl et o


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 Compl et o



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 para a gerao do arqui vo TXT foram ut ili zadas, basi cament e, as funes
FCreat e, FWri t e e FCl ose que, respect i vament e, gera o arqui vo, adi ci ona dados e fecha
o arqui vo. No exempl o, o format o est abel eci do pel a concat enao dos dados na
vari vel cLi n a qual ut ili zada na gravao dos dados. Para a l ei t ura de dados TXT sero
ut ili zada as funes FOpen e FRead.

Ex empl o: Lei t u r a de ar qu i v o TXT, ut i l i zando a pr i mei r a f aml i a de f u nes


#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 Compl et o



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 Compl et o


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 Compl et o


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 . Faml i a de f unes de gr av ao e l ei t u r a de ar qui v os t ex t o


Ex empl o: Lei t u r a de ar qu i v o TXT, ut i l i zando a segu nda f aml i a de f u nes


#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 Compl et o


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 Compl et o



26. Of i ci na de pr ogr amao I

26.1. I nt er f aces com si nt ax e cl ssi ca

A si nt axe convenci onal para defi ni o de component es vi suai s da linguagem ADVPL depende
di ret ament e no i ncl ude especi fi cado no cabeal ho do font e. Os doi s i ncl udes di sponvei s para o
ambi ent e ADVPL Pr ot heus so:

E RWMAKE. CH: permi t e a ut ili zao da si nt axe CLI PPER na defi ni o dos component es
vi suai s.

E PROTHEUS.CH: permi t e a ut ili zao da si nt axe ADVPL convenci onal , a qual um
apri morament o da si nt axe CLI PPER, com a incluso de novos at ri but os para os
component es vi suai s di sponi bilizados no ERP Pr ot heus.

Para il ust rar a di ferena na ut ilizao dest es doi s i ncl udes, segue abai xo as di ferent es
defi ni es para o component 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 axes produzi ro o mesmo efei t o quando compi ladas e
execut adas no ambi ent e Pr ot heus, mas deve ser ut ili zada sempr e a si nt axe
ADVPL at ravs do uso do i ncl ude PROTHEUS.CH

Os component es da i nt erface vi sual que ser o t rat ados nest e t pico, ut ili zando a si nt axe
cl ssi ca da li nguagem ADVPL so:

BUTTON( )
CHECKBOX( )
COMBOBOX( )
FOLDER( )
MSDI ALOG( )
MSGET( )

- 257 -

ADVPL Compl et o


RADI O( )
SAY( )
SBUTTON( )

BUTTON( )

Si nt ax e
@ nLi n ha, nCol un a BUTTON cTex t o SI ZE nLar gur a,n Al t ur a UNI DADE
OF oObj et oRef ACTI ON AO
Descr i o
Defi ne o component e vi sual But t on, o qual permi t e a i ncl uso de bot es de
operao na t el a da int er face, os quai s ser o vi suali zados soment e com um
t ext o si mpl es para sua i dent i fi cao.

CHECKBOX( )

Si nt ax e
@ nLi n ha, nCol un a CHECKBOX oCheck Box VAR VARI AVEL PROMPT
cTex t o WHEN WHEN UNI DADE OF oObj et oRef SI ZE nLar gu r a, nAl t ur a
MESSAGE cMensagem
Descr i o
Defi ne o component e vi sual CheckBox, o qual permi t e a ut ili zao da uma
marca para habi li t ar ou no uma opo escol hi da, sendo est a marca
acompanhada de um t ext o expl i cat i vo. Di fere do Radi oMenu poi s cada
el ement o do check ni co, mas o Radi o per mi t e a ut ili zao de uma li st a
j unt o com um cont r ol e de sel eo.

COMBOBOX( )

Si nt ax e
@ nLi n ha, nCol una COMBOBOX VARI AVEL I TEMS AI TENS SI ZE
nLar gu r a, nAl t u r a UNI DADE OF oObj et oRef
Descr i o
Defi ne o component e vi sual ComboBox, o qual permi t e sel eo de um i t em
dent ro de uma li st a de opes de t ext os si mpl es no format o de um vet or.

FOLDER( )

Si nt ax e
@ nLi n ha, nCol un a FOLDER oFol der OF oObj et oRef PROMPT
&cTex t o1,,&cTex t oX PI XEL SI ZE nLar gur a,n Al t ur a
Descr i o
Defi ne o component e vi sual Folder, o qual permi t e a i ncl uso de di ver sos
Di al ogs dent ro de uma mesma i nt erface vi sual . Um Fol der pode ser
ent endi do como um array de Di al ogs, aonde cada pai nel recebe seus
component es e t em seus at ri but os defi ni dos i ndependent ement e dos demai s.

MSDI ALOG( )

Si nt ax e
DEFI NE MSDI ALOG oObj et oDLG TI TLE cTi t ul o FROM nLi nI n i ,n Col I n i
TO nLi Fi m,n Col Fi m OF oObj et oRef UNI DADE
Descr i o
Defi ne o component e MSDI ALOG( ) , o qual ut ilizado como base para os
demai s component es da i nt erface vi sual , poi s um component e MSDI ALOG( )
uma j anel a da apli cao.


- 258 -

ADVPL Compl et o



MSGET( )

Si nt ax e
@ nLi nh a, nCol u na MSGET VARI AVEL SI ZE nLar gu r a,n Al t ur a
UNI DADE OF oObj et oRef F3 cF3 VALI D VALI D WHEN WHEN PI CTURE
cPi ct ur e
Descr i o
Defi ne o component e vi sual MSGET, o qual ut ili zado para capt ura de
i nformaes di gi t vei s na t el a da i nt erface.


RADI O( )

Si nt ax e
@ nLi n ha, nCol un a RADI O oRadi o VAR nRadi o 3D SI ZE
nLar gu r a, nAl t u r a < I TEMS PROMPT> cI t em1,cI t em2,...,cI t emX OF
oObj et oRef UNI DADE ON CHANGE CHANGE ON CLI CK CLI CK
Descr i o
Defi ne o component e vi sual Radi o, t ambm conheci do como Radi oMenu, o
qual sel eo de uma opo ou de ml t i pl as opes at ravs de uma mar ca
para os i t ens exi bi dos de uma li st a. Di fere do component e CheckBox, poi s
cada el ement o de check sempr e ni co, e o Radi o pode cont er um ou mai s
el ement os.

SAY( )

Si nt ax e
@ nLi n ha, nCol un a SAY cTex t o SI ZE nLar gur a,n Al t u r a UNI DADE OF
oObj et oRef
Descr i o
Defi ne o component e vi sual SAY, o qual ut ilizado para exi bi o de t ext os
em uma t el a de i nt erface.

SBUTTON( )

Si nt ax e
DEFI NE SBUTTON FROM nLi nh a, nCol u na TYPE N ACTI ON AO
STATUS OF oObj et oRef
Descr i o
Defi ne o component e vi sual SBut t on, o qual permi t e a i ncl uso de bot es de
operao na t el a da i nt erface, os quai s sero vi suali zados dependendo da
i nt erface do si st ema ERP ut ili zada soment e com um t ext o si mpl es para sua
i dent i fi cao, ou com uma i magem ( Bi t Map) pr- defi ni do.


- 259 -

ADVPL Compl et o



26.2. Rguas de pr ocessament o

Os i ndi cadores de progr esso ou r guas de processament o di sponvei s na li nguagem ADVPL que
sero abordados nest e mat eri al so:

RPTSTATUS( )
PROCESSA( )
MSNEWPROCESS( )
MSAGUARDE( )
MSGRUN( )

26.2.1. Rpt St at us( )

Rgua de pr ocessament o si mpl es, com apenas um i ndi cador de progresso, ut i lizada no
processament o de rel at ri os do padro Set Pri nt ( ) .

E Si nt ax e: Rpt St at u s( bAcao, cMensagem)

E Ret or no: Ni l

E Par met r os:

bAcao
Bl oco de cdi go que especi fi ca a ao que ser execut ada com
o acompanhament o da rgua de processament o.
cMensagem
Mensagem que ser exibi da na rgua de processament o
durant e a execuo.
Apar nci a







- 260 -

ADVPL Compl et o



Ex empl o: Funo RPTSt at u s( ) e acessr i as


/*/
+---------------------------------------------------------------------------
| 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 Compl et o


Ex empl o: Funes acessr i as da RPTSt at u s( )


/*/
+-----------------------------------------------------------------------------
| 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 funo Set Regua( ) ut ili zada para defi ni r o val or mxi mo da rgua de progr esso cri ada
at ravs da funo Rpt St at us( ) .

E Si nt ax e: Set Regua( n Max Pr oc)

E Par met r os:

nMax Pr oc Vari vel que i ndi ca o val or mxi mo de pr ocessament o ( passos) que sero
i ndi cados pel a rgua.

E Ret or no:

Nen hum .



- 262 -

ADVPL Compl et o


Ex empl o:

...

dbSel ect Area( "SA1")
dbGoTop( )
Set Regua( Last Rec( ) )
Whil e ! Eof( )
I ncRegua( )
I f Li > 60
...


I NCREGUA( )

A funo I ncRegua( ) ut ili zada para i ncrement ar val or na rgua de progresso cri ada at ravs
da funo Rpt St at us( )

E Si nt ax e: I ncRegu a( cMensagem)

E Par met r os:

cMensagem Mensagem que ser exi bi da e at uali zada na rgua de processament o a cada
execuo da funo I ncRegua( ) , sendo que a t axa de at uali zao da
i nt erface cont r ol ada pel o Bi nri o.

E Ret or no:

Nen hum .

Ex empl o:

...

dbSel ect Area( "SA1")
dbGoTop( )
Set Regua( Last Rec( ) )
Whil e ! Eof( )
I ncRegua( Aval i ando cli ent e: + SA1- > A1_COD)
I f Li > 60
...




- 263 -

ADVPL Compl et o



26.2.2. Pr ocessa( )

Rgua de pr ocessament o si mpl es, com apenas um i ndi cador de progresso, ut i lizada no
processament o de rot i nas.

E Si nt ax e: Pr ocessa( bAcao, cMen sagem)

E Ret or no: Ni l

E Par met r os:

bAcao
Bl oco de cdi go que especi fi ca a ao que ser execut ada com
o acompanhament o da rgua de processament o.
cMensagem
Mensagem que ser exibi da na rgua de processament o
durant e a execuo.
Apar nci a




Ex empl o: Funo PROCESSA( ) e acessr i as


/*/
+-----------------------------------------------------------------------------
| 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 Compl et o



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 Compl et o



SETPROC( )

A funo Set Pr oc( ) ut ili zada para defi ni r o val or mxi mo da rgua de progr esso cri ada
at ravs da funo Pr ocessa( ) .

E Si nt ax e: Pr ocessa( nMax Pr oc)

E Par met r os:

nMax Pr oc Vari vel que i ndi ca o val or mxi mo de pr ocessament o ( passos) que sero
i ndi cados pel a rgua.

E Ret or no:

Nen hum .

Ex empl o:
...
dbSel ect Area( "SA1")
dbGoTop( )
Set Pr oc( Last Rec( ) )
Whil e ! Eof( )
I ncPr oc( )
I f Li > 60
...

I NCPROC( )

A funo I ncProc( ) ut ili zada para i ncrement ar val or na rgua de progr esso cri ada at ravs da
funo Pr ocessa( )

E Si nt ax e: I ncPr oc( cMensagem)

E Par met r os:

cMensagem Mensagem que ser exi bi da e at uali zada na rgua de processament o a cada
execuo da funo I ncProc( ) , sendo que a t axa de at ual izao da i nt erface
cont r ol ada pel o Bi nri o.

E Ret or no:

Nen hum .

Ex empl o:
...
dbSel ect Area( "SA1")
dbGoTop( )
Set Pr oc( Last Rec( ) )
Whil e ! Eof( )
I ncPr oc( Avali ando cli ent e: + SA1- > A1_COD)
I f Li > 60
...


- 266 -

ADVPL Compl et o




26.2.3. MsNew Pr ocess( ) .

Rgua de pr ocessament o dupl a, possui ndo doi s i ndi cadores de pr ogr esso i ndependent es,
ut ili zada no processament o de rot i nas.

E Si nt ax e: MsNew Pr ocess( ) : New ( bAcao, cMensagem)

E Ret or no: oPr ocess obj et o do t i po MsNew Pr ocess( )

E Par met r os:

bAcao
Bl oco de cdi go que especi fi ca a ao que ser execut ada com
o acompanhament o da rgua de processament o.
cMensagem
Mensagem que ser exibi da na rgua de processament o
durant e a execuo.
Apar nci a




E Mt odos:

Act i v at e( ) I ni ci a a execuo do obj et o MsNewPr ocess i nst anci ado.
Set Regua1( ) Defi ne a quant i dade de i nformaes que sero demonst radas
pel o i ndi cador de pr ogr esso superi or.
Par met r o: nMaxPr oc
I ncRegu a1( ) I ncrement a em uma uni dade o i ndi cador de pr ogresso
superi or , o qual i r demonst rar a evol uo do processament o
de acordo com a quant idade defi ni da pel o mt odo
Set Regua1( ) .
Par met r o: cMensagem
Set Regua2( ) Defi ne a quant i dade de i nformaes que sero demonst radas
pel o i ndi cador de pr ogr esso i nferi or.
Par met r o: nMaxPr oc
I ncRegu a2( ) I ncrement a em uma uni dade o i ndi cador de pr ogresso i nferi or,
o qual i r demonst rar a evol uo do processament o de acordo
com a quant i dade defi nida pel o mt odo Set Regua2( ) .
Par met r o: cMensagem


- 267 -

ADVPL Compl et o



Ex empl o: Obj et o MsNew Pr ocess( ) e mt odos acessr i os


/*/
+-----------------------------------------------------------------------------
| 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 Compl et o



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. MsAguar de( ) .

I ndi cador de processament o sem i ncrement o.

E Si nt ax e: Pr ocessa( bAcao, cMen sagem, cTi t ul o)

E Ret or no: Ni l

E Par met r os:

bAcao
Bl oco de cdi go que especi fi ca a ao que ser execut ada com
o acompanhament o da rgua de processament o.
cMensagem
Mensagem que ser exibi da na rgua de processament o
durant e a execuo.
cTi t ul o Tt ul o da j anel a da rgua de processament o.
Apar nci a





- 269 -

ADVPL Compl et o



Ex empl o: MSAguar de( )


/*/
+-----------------------------------------------------------------------------
| 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 Compl et o



26.2.5. MsgRun( ) .

I ndi cador de processament o sem i ncrement o.

E Si nt ax e: Pr ocessa( cMensagem, cTi t ul o, bAcao)

E Ret or no: Ni l

E Par met r os:

cMensagem
Mensagem que ser exibi da na rgua de processament o
durant e a execuo.
cTi t ul o Tt ul o da j anel a da rgua de processament o.
bAcao
Bl oco de cdi go que especi fi ca a ao que ser execut ada com
o acompanhament o da rgua de processament o.
Apar nci a




Ex empl o: 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 Compl et o



26.3. Li st Box ( )

A si nt axe cl ssi ca da linguagem ADVPL permi t e que o component e vi sual Li st Box i mpl ement e
doi s t i pos di st i nt os de obj et os:

E Li st a si mpl es: l i st a de apenas uma col una no format o de um vet or, a qual no
necessi t a da especi fi cao de um cabeal ho.

E Li st a com col un as: l ist a com di ver sas col unas que necessi t a de um cabeal ho no
for mat o de um aHeader ( array de cabeal ho) .

26.3.1. Li st Box si mpl es

E Si nt ax e:


@ nLi nh a,n Col un a LI STBOX oLi st box VAR nLi st a I TEMS aLi st a SI ZE nLar gur a,n Al t ur a
OF oObj et oRef UNI DADE ON CHANGE CHANGE


E Par met r os:

nLi n ha, nCol u na Posi o do obj et o Li st Box em funo da j anel a em que el e
ser defi ni do.
oLi st Box Obj et o Li st Box que ser cri ado.
nLi st a Vari vel numri ca que cont m o nmero do i t em
sel eci onado no Li st Box.
aLi st a Vet or si mpl es cont endo as st ri ngs que sero exi bi das no
Li st Box.
nLar gu r a, nAl t u r a Di menses do obj et o Li st Box.
oObj et oRef Obj et o di al og no qual o component e ser defi nido.
UNI DADE Uni dade de medi da das di menses: PI XEL.
CHANGE Funo ou l i st a de expr esses que ser execut ada na
sel eo de um i t em do Li st Box.

E Apar nci a:





- 272 -

ADVPL Compl et o



Ex empl o: LI STBOX como l i st a si mpl es


#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 Compl et o


Ex empl o: LI STBOX como l i st a si mpl es f u nes acessr i as


/*/
+-----------------------------------------------------------------------------
| 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 Compl et o



26.3.2. Li st Box ml t i pl as col unas

E Si nt ax e:


@ nLi nh a,nCol u n a LI STBOX oLi st box FI ELDS HEADER Header 1 , , Header X SI ZE
nLar gu r a, nAl t u r a OF oObj et oRef UNI DADE


E Par met r os:

nLi n ha, nCol u na Posi o do obj et o Li st Box em funo da
j anel a em que el e ser defi ni do.
oLi st Box Obj et o Li st Box que ser cri ado.
nLi st a Vari vel numri ca que cont m o nmero do
i t em sel eci onado no Li st Box.
Header 1 ,... , Header X St ri ngs i dent i fi cando os t t ul os das col unas do
Gri d.
nLar gu r a, nAl t u r a Di menses do obj et o Li st Box.
oObj et oRef Obj et o di al og no qual o component e ser
defi ni do.
UNI DADE Uni dade de medi da das di menses: PI XEL.
CHANGE Funo ou l i st a de expr esses que ser
execut ada na sel eo de um i t em do Li st Box.

E Mt odos:

Set Ar r ay ( ) Mt odo o obj et o Li st Box que defi ne qual o
array cont m os dados que sero exi bi dos no
gri d.

E At r i but os:

bLi n e At ri but o do obj et o Li st Box que vi ncul a cada
linha,col una do array, com cada cabeal ho do
gri d.

E Apar nci a:



- 275 -

ADVPL Compl et o



Ex empl o: LI STBOX com gr i d


#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 Compl et o


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. Scr ol l Box ( )

O Scr ol l Box o obj et o ut ili zado para permi t i r a um Di al og exi bi r barras de r ol agem vert i cai s e
Hori zont ai s. Al gumas apli caes com obj et os defi nem aut omat i cament e o Scr oll Box, t ai s como:

E Enchoi ce( ) ou MsMGet ( )
E NewGet Dados( )
E Li st Box( )

Quando defi ni do um obj et o Scrol l Box, os demai s component es da j anel a devero refer enci ar
est e obj et o e no mai s o obj et o Di al og.

Dest a forma o Scr oll Box at ri budo a um obj et o Di al og, e os component es ao Scr ol l Box.

O MsDi al og( ) Scr oll Box( )
O Scr oll Box( ) Component es Vi suai s

E Si nt ax e:


@ nLi n ha, nCol u na SCROLLBOX oScr ol l Box HORI ZONTAL VERTI CAL SI ZE
nLar gu r a, nAl t u r a OF oObj et oRef BORDER


E Par met r os:

nLi n ha, nCol u na Posi o do obj et o Scrol lBox em funo da
j anel a em que el e ser defi ni do.
oScr ol l Box Obj et o Scrol l Box que ser cri ado.
HORI ZONTAL Parmet r o que quando defi ni do habilit a a
rgua de rol agem hori zont al .
VERTI CAL Parmet r o que quando defi ni do habilit a a
rgua de rol agem vert i cal .
nLar gu r a, nAl t u r a Di menses do obj et o Scrol l Box.
oObj et oRef Obj et o di al og no qual o component e ser
defi ni do.
BORDER

Parmet r o que quando defi ni do habilit a a
exi bi o de uma borda de del i mi t ao do
Scr oll Box em r el ao a out ros obj et os.


- 277 -

ADVPL Compl et o


E Apar nci a:





Ex empl o: Ut i l i zao de m l t i pl os Scr ol l Box es


#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 Compl et o


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 Compl et o


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 Compl et o



26.5. Par amBox ( )

I mpl ement a uma t el a de parmet r os, que no necessi t a da cri ao de um grupo de pergunt as
no SX1, e com funci onalidades que a Pergunt e( ) no di sponi biliza, t ai s como CheckBox e
Radi oBut t ons.

Cada component e da ParamBox ser associ ado a um parmet r o Pri vat e denomi nado
MV_PARxx, de acordo com a ordem do component e na t el a. Os par met r os da ParamBox
podem ser ut ili zados de forma i ndependent e em uma r ot i na especfica, ou compl ement ando
opes de uma r ot i na padro.

Cui dados

A PARAMBOX defi ne os parmet ros segui ndo o pri ncpi o das vari vei s MV_PARxx. Caso
el a sej a ut ilizada em uma rot i na em conj unt o com parmet ros padres ( SX1 +
Pergunt e( ) ) necessrio sal var os parmet r os padres, chamar a Parambox( ) , sal var o
ret orno da Parambox( ) em vari vei s Pri vat e especfi cas ( MVPARBOXxx) e depoi s
rest aurar os parmet ros padres, conforme o exempl o dest a document ao.

O obj et o COMBO( ) da PARAMBOX( ) possui um probl ema em seu r et orno: Caso o combo
no sej a sel eci onado, el e mant er seu cont edo como numri co, caso sej a el e receber
o t ext o da opo e no o nmero da opo. O exempl o dest a document ao i lust ra o
t rat ament o de cdi go necessri o par a pr ot eger a apli cao.

Ao ut ilizar a ParamBox em uma funo que t ambm ut ili ze parmet ros defi ni dos pel a
funo Pergunt e( ) deve- se:

E Sal var e rest aurar os MV_PARs da Pergunt e( )
E Defi ni r vari vei s Pri vat e prpri as para a Par amBox, as quai s i ro armazenar o
cont edo das MV_PARs que est a r et orna.

E Si nt ax e: Par amBox ( aPar amBox , cTi t ul o, aRet , bOk , aBut t ons, l Cent er ed, ;
nPosx , nPosy , oMai n Dl g, cLoad, l CanSav e, l User Sav e)

E Ret or no: l OK i ndi ca se a t el a de par met r os f oi cancel ada ou conf i r mada

E Par met r os:

aPar amBox Array de parmet r os de acordo com a r egra da ParamBox
cTi t ul o Ti t ul o da j anel a de parmet r os
aRet
Array que ser passado por r efer enci a e ret ornado com o
cont edo de cada parmet r o
bOk Bl oco de cdi go para vali dao do OK da t el a de parmet r os
aBut t ons
Array cont endo a r egra para adi o de novos bot es ( al m do
OK e Cancel ar) / / AADD( aBut t ons,{ nType,bAct i on,cText o} )
l Cent er ed
Se a t el a ser exi bi da cent ral izada, quando a mesma no
est i ver vi ncul ada a out ra j anel a
nPosx Posi o i ni ci al - > linha ( Li nha fi nal : nPosX+ 274)
nPosy Posi o i ni ci al - > col una ( Col una fi nal: nPosY+ 445)
oMai nDl g Caso o ParamBox deva ser vi ncul ado a uma out ra t el a
cLoad
Nome do arqui vo aonde as respost as do usuri o sero sal vas /
li das
l CanSav e Se as r espost as para as pergunt as podem ser sal vas
l User Sav e Se o usuri o pode sal var sua prpri a confi gurao.

- 281 -

ADVPL Compl et o


E Apar nci a:





E Regr as do ar r ay aPar amBox :

[ 1] Ti po do par met r o: Para cada t i po de parmet r o as demai s posi es do array vari am de
cont edo conforme abai xo:

1 - MsGet
[ 2] : Descri o
[ 3] : St ri ng cont endo o i ni ci alizador do campo
[ 4] : St ri ng cont endo a Pi ct ure do campo
[ 5] : St ri ng cont endo a vali dao
[ 6] : Consul t a F3
[ 7] : St ri ng cont endo a vali dao When
[ 8] : Tamanho do MsGet
[ 9] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?

2 - Combo
[ 2] : Descri o
[ 3] : Numri co cont endo a opo i ni ci al do combo
[ 4] : Array cont endo as opes do Combo
[ 5] : Tamanho do Combo
[ 6] : Vali dao
[ 7] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?

- 282 -

ADVPL Compl et o



3 - Radi o
[ 2] : Descri o
[ 3] : Numri co cont endo a opo i ni ci al do Radio
[ 4] : Array cont endo as opes do Radi o
[ 5] : Tamanho do Radi o
[ 6] : Vali dao
[ 7] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?

4 - Check Box ( Com Say )
[ 2] : Descri o
[ 3] : I ndi cador Lgi co cont endo o i ni ci al do Check
[ 4] : Text o do CheckBox
[ 5] : Tamanho do Radi o
[ 6] : Vali dao
[ 7] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?

5 - Check Box ( l i n ha i nt ei r a )
[ 2] : Descri o
[ 3] : I ndi cador Lgi co cont endo o i ni ci al do Check
[ 4] : Tamanho do Radi o
[ 5] : Vali dao
[ 6] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?

6 - Fi l e
[ 2] : Descri o
[ 3] : St ri ng cont endo o i ni ci alizador do campo
[ 4] : St ri ng cont endo a Pi ct ure do campo
[ 5] : St ri ng cont endo a vali dao
[ 6] : St ri ng cont endo a vali dao When
[ 7] : Tamanho do MsGet
[ 8] : Fl ag . T./ .F. Parmet r o Obri gat ri o ?
[ 9] : Text o cont endo os t i pos de arqui vo
Ex.: "Arqui vos .CSV | * . CSV"
[ 10] : Di ret ri o i ni ci al do CGETFI LE( )
[ 11] : Parmet ros do CGETFI LE( )

7 - Mont agem de ex pr esso de f i l t r o
[ 2] : Descri o
[ 3] : Ali as da t abel a
[ 4] : Fil t ro i ni ci al
[ 5] : Opci onal - Cl ausula When Bot o Edi t ar Fi lt ro

8 - MsGet Passw or d
[ 2] : Descri o
[ 3] : St ri ng cont endo o i ni ci alizador do campo
[ 4] : St ri ng cont endo a Pi ct ure do campo
[ 5] : St ri ng cont endo a vali dao
[ 6] : Consul t a F3
[ 7] : St ri ng cont endo a vali dao When
[ 8] : Tamanho do MsGet
[ 9] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?

- 283 -

ADVPL Compl et o



9 - MsGet Say
[ 2] : St ri ng Cont endo o Text o a ser apr esent ado
[ 3] : Tamanho da St ri ng
[ 4] : Al t ura da St ri ng
[ 5] : Negri t o ( l gi co)

Ex empl o: Ut i l i zao da Par amBox ( )


#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 Compl et o


Ex empl o: Pr ot egendo os par met r os MV_PARs da Per gunt e( ) 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 Compl et o



MDULO 05: I nt r oduo a or i ent ao obj et os


27. Concei t os de or i ent ao obj et os

O t ermo ori ent ao a obj et os pressupe uma organi zao de soft war e em t ermos de col eo
de obj et os di scret os i ncorporando est rut ura e comport ament o prpri os. Est a abordagem de
organi zao essenci al ment e di ferent e do desenvol vi ment o t radi ci onal de soft war e, onde
est rut uras de dados e r ot i nas so desenvol vi das de forma apenas fracament e acopl adas.

Nest e t pi co sero os concei t os de programao ori ent ada a obj et os l i st ados abai xo. Est a
breve vi so geral do paradi gma permi t i r ent ender mel hor os concei t os associ ados
programao ori ent ada a obj et os e, em part i cul ar, s const rues i mpl ement adas at ravs da
linguagem ADVPL.

E Obj et os
E Her ana
E At r i but os
E Mt odos
E Cl asses
E Abst r ao
E Gen er al i zao
E Encapsu l ament o
E Pol i mor f i smo

27.1. Def i ni es

Obj et o

Um obj et o uma ent i dade do mundo real que t em uma i dent idade. Obj et os podem
represent ar ent i dades concr et as ( um arqui vo no meu comput ador, uma bi ci cl et a) ou ent i dades
concei t uai s ( uma est r at gi a de j ogo, uma polt i ca de escal onament o em um si st ema
operaci onal ) . Cada obj et o t er sua i dent i dade si gni fi ca que doi s obj et os so di st int os mesmo
que el es apr esent em exat ament e as mesmas caract erst i cas.

Embora obj et os t enham exi st nci a prpri a no mundo r eal , em t ermos de l i nguagem de
programao um obj et o necessi t a um mecani smo de i dent i fi cao. Est a i dent i fi cao de obj et o
deve ser ni ca, uni forme e i ndependent e do cont edo do obj et o. Est e um dos mecani smos
que permi t e a cri ao de col ees de obj et os, as quai s so t ambm obj et os em si .

A est rut ura de um obj et o r epr esent ada em t er mos de at ri but os. O comport ament o de um
obj et o r epr esent ado pel o conj unt o de operaes que podem ser execut adas sobr e o obj et o.


- 286 -

ADVPL Compl et o



Cl asse

Obj et os com a mesma est rut ura e o mesmo comport ament o so agr upados em cl asses. Uma
cl asse uma abst rao que descreve pr opri edades i mport ant es para uma apl i cao e
si mpl esment e i gnora o r est o.

Cada cl asse descr eve um conj unt o ( possi vel ment e i nfi nit o) de obj et os i ndi vi duai s. Cada obj et o
di t o ser uma i nst nci a de uma cl asse. Assi m, cada i nst nci a de uma cl asse t em seus prpri os
val ores para cada at ri but o, mas di vi dem os nomes dos at ri but os e mt odos com as out ras
i nst nci as da cl asse. I mpli ci t ament e, cada obj et o cont m uma r efer nci a para sua pr pri a
cl asse, em out ras pal avras, el e sabe o que el e .



Fi gu r a: Represent ao de uma cl asse de obj et os




Fi gu r a: Represent ao de um obj et o i nst anci ado de uma cl asse

- 287 -

ADVPL Compl et o




Pol i mor f i smo

Pol i morfi smo si gni fi ca que a mesma operao pode se comport ar de forma di fer ent e em
cl asses di fer ent es. Por exempl o, a oper ao move quando apl i cada a uma j anel a de um
si st ema de i nt erfaces t em um comport ament o di st i nt o do que quando apli cada a uma pea de
um j ogo de xadr ez. Um mt odo uma i mpl ement ao especfi ca de uma oper ao para uma
cert a cl asse.

Pol i morfi smo t ambm i mpli ca que uma operao de uma mesma cl asse pode ser
i mpl ement ada por mai s de um mt odo. O usuri o no pr eci sa saber quant as i mpl ement aes
exi st em para uma operao, ou expli ci t ar qual mt odo deve ser ut ili zado: a li nguagem de
programao deve ser capaz de sel eci onar o mt odo corr et o a part i r do nome da operao,
cl asse do obj et o e ar gument os para a oper ao. Dest a for ma, novas cl asses podem ser
adi ci onadas sem necessi dade de modi fi cao de cdi go j exi st ent e, poi s cada cl asse apenas
defi ne os seus mt odos e at ri but os.

No mundo r eal , al guns obj et os e cl asses podem ser descri t os como casos especi ai s, ou
especi ali zaes, de out r os obj et os e cl asses. Por exempl o, a cl asse de comput adores pessoai s
com pr ocessador da linha 80x86 uma especi ali zao de comput ador es pessoai s, que por sua
vez uma especi ali zao de comput adores. No desej vel que t udo que j foi descri t o para
comput adores t enha de ser repet i do para comput ador es pessoai s ou para comput ador es
pessoai s com pr ocessador da li nha 80x86.

Her ana

Herana o mecani smo do paradi gma de ori ent ao a obj et os que permi t e compart i lhar
at ri but os e operaes ent re cl asses baseada em um r el aci onament o hi errqui co. Uma cl asse
pode ser defi ni da de forma genri ca e depoi s refi nada sucessi vament e em t ermos de
subcl asses ou cl asses deri vadas. Cada subcl asse i ncorpora, or herda, t odas as pr opri edades de
sua super cl asse ( ou cl asse base) e adi ci ona suas propri edades ni cas e part i cul ares. As
propri edades da cl asse base no pr eci sam ser r epet i das em cada cl asse deri vada. Est a
capaci dade de fat orar as propri edades comuns de di versas cl asses em uma supercl asse pode
reduzi r dramat i cament e a r epet i o de cdi go em um proj et o ou pr ograma, sendo uma das
pri nci pai s vant agens da abordagem de ori ent ao a obj et os.


- 288 -

ADVPL Compl et o



27.2. Concei t os Bsi cos

A abordagem de ori ent ao a obj et os favor ece a apl i cao de di versos concei t os consi der ados
fundament ai s para o desenvol vi ment o de bons programas, t ai s como abst rao e
encapsul ament o.

Tai s concei t os no so excl usi vos dest a abordagem, mas so suport ados de forma mel hor no
desenvol vi ment o ori ent ado a obj et os do que em out ras met odol ogi as.

Abst r ao

Abst rao consi st e de focal i zar nos aspect os essenci ai s i nerent es a uma ent i dade e i gnorar
propri edades aci dent ai s . Em t ermos de desenvol vi ment o de si st emas, i st o si gni fi ca
concent rar- se no que um obj et o e faz ant es de se deci di r como el e ser i mpl ement ado. O
uso de abst rao pr eserva a li berdade par a t omar deci ses de desenvol vi ment o ou de
i mpl ement ao apenas quando h um mel hor ent endi ment o do pr obl ema a ser r esol vi do.

Mui t as linguagens de programao modernas suport am o concei t o de abst rao de dados;
por m, o uso de abst r ao j unt ament e com poli morfi smo e herana, como suport ado em
ori ent ao a obj et os, um mecani smo mui t o mai s poder oso.

O uso apr opri ado de abst rao permi t e que um mesmo model o concei t ual ( ori ent ao a
obj et os) sej a ut ilizado para t odas as fases de desenvol vi ment o de um si st ema, desde sua
anli se at sua document ao.

Encapsu l ament o

Encapsul ament o, t ambm r eferi do como esconder i nformao, consi st e em separar os
aspect os ext ernos de um obj et o, os quai s so acessvei s a out ros obj et os, dos det al hes
i nt ernos de i mpl ement ao do obj et o, os quai s permanecem escondi dos dos out r os obj et os. O
uso de encapsul ament o evi t a que um pr ogr ama t orne- se t o i nt erdependent e que uma
pequena mudana t enha grandes efei t os col at erai s.

O uso de encapsul ament o permi t e que a i mplement ao de um obj et o possa ser modi fi cada
sem afet ar as apl i caes que usam est e obj et o. Mot i vos para modi ficar a i mpl ement ao de
um obj et o podem ser , por exempl o, mel hori a de desempenho, corr eo de er ros e mudana de
pl at aforma de execuo.

Assi m como abst rao, o concei t o de Encapsul ament o no excl usi vo da abordagem de
ori ent ao a obj et os. Ent ret ant o, a habili dade de se combi nar est rut ura de dados e
comport ament o em uma ni ca ent i dade t or na a Encapsul ament o mai s el egant e e mai s
poderosa do que em linguagens convenci onai s que separam est rut uras de dados e
comport ament o.

Compar t i l h ament o

Tcni cas de ori ent ao a obj et os pr omovem compart il hament o em di versos nvei s di st i nt os.
Herana de est rut ura de dados e comport ament o permi t e que est rut uras comuns sej am
compart il hadas ent re di versas cl asses deri vadas si mil ares sem r edundnci a. O
compart il hament o de cdi go usando herana uma das grandes vant agens da ori ent ao a
obj et os. Ai nda mai s i mport ant e que a economi a de cdi go a cl areza concei t ual de reconhecer
que operaes di fer ent es so na verdade a mesma coi sa, o que reduz o nmero de casos
di st i nt os que devem ser ent endi dos e anali sados.


- 289 -

ADVPL Compl et o


O desenvol vi ment o ori ent ado a obj et os no apenas permi t e que a i nformao dent r o de um
proj et o sej a compart il hada como t ambm ofer ece a possi bili dade de reaprovei t ar pr oj et os e
cdi go em proj et os fut uros. As ferrament as para al canar est e compart il hament o, t ai s como
abst rao, Encapsul ament o e herana, est o present es na met odol ogi a; uma est rat gi a de
reuso ent re pr oj et os a defi ni o de bi bli ot ecas de el ement os reusvei s. Ent r et ant o,
ori ent ao a obj et os no uma frmul a mgi ca para al canar reusabilidade; para t ant o,
preci so pl anej ament o e di sci pli na para pensar em t ermos genri cos, no vol t ados
si mpl esment e para a apli cao cor rent e.

27.3. O Model o de Obj et os ( OMT)

Um model o de obj et os busca capt urar a est r ut ura est t i ca de um si st ema most rando os
obj et os exi st ent es, seus r el aci onament os, e at ri but os e operaes que caract eri zam cada
cl asse de obj et os. at ravs do uso dest e model o que se enfat i za o desenvol vi ment o em
t ermos de obj et os ao i nvs de mecani smos t radi ci onai s de desenvol vi ment o baseado em
funci onali dades, permi t indo uma r epr esent ao mai s prxi ma do mundo r eal .

Uma vez que as pri nci pai s defi ni es e concei t os da abordagem de ori ent ao a obj et os est o
defi ni dos, possvel i nt roduzi r o model o de obj et os que ser adot ado ao l ongo dest e t ext o. O
model o apr esent ado um subconj unt o do model o OMT ( Obj ect Model i ng Technique) , propost o
por Rumbaugh ent r e out ros. Est e model o t ambm i nt roduz uma repr esent ao di agramt i ca
para est e model o, a qual ser t ambm apresent ada aqui .

27.3.1. Obj et os e Cl asses

Obj et o defi ni do nest e model o como um concei t o, abst rao ou coi sa com li mi t es e
si gni fi cados bem defi ni dos para a apli cao em quest o. Obj et os t m doi s propsi t os:
promover o ent endi ment o do mundo r eal e suport ar uma base prt i ca para uma
i mpl ement ao comput aci onal . No exi st e uma manei ra corr et a de decompor um probl ema
em obj et os; est a decomposi o depende do j ul gament o do proj et i st a e da nat ureza do
probl ema. Todos os obj et os t m i dent idade prpri a e so di st i nguvei s.

Uma cl asse de obj et os descr eve um grupo de obj et os com propri edades ( at ri but os) si mil ares,
comport ament os ( oper aes) si mil ares, rel acionament os comuns com out ros obj et os e uma
semnt i ca comum. Por exempl o, Pessoa e Companhi a so cl asses de obj et os. Cada pessoa
t em um nome e uma i dade; est es seri am os at ri but os comuns da cl asse. Companhi as t ambm
podem t er os mesmos at ri but os nome e i dade defi ni dos. Ent ret ant o, devi do di st i no
semnt i ca el as provavel ment e est ari am agrupados em out ra cl asse que no Pessoa. Como se
pode obser var , o agrupament o em cl asses no l eva em cont a apenas o compart i l hament o de
propri edades.

Todo obj et o sabe a que cl asse el e pert ence, ou sej a, a cl asse de um obj et o um at ri but o
i mplci t o do obj et o. Est e concei t o suport ado na mai or part e das l inguagens de programao
ori ent ada a obj et os, i nclusi ve em ADVPL.

OMT defi ne doi s t i pos de di agramas de obj et os, di agramas de cl asses e di agramas de
i nst nci as. Um di agrama de cl asse um esquema, ou sej a, um padro ou gabari t o que
descr eve as mui t as possvei s inst nci as de dados. Um di agrama de i nst nci as descr eve como
um conj unt o part i cul ar de obj et os est r el acionado. Di agramas de i nst nci as so t ei s para
apresent ar exempl os e document ar casos de t est es; di agramas de cl asses t m uso mai s
ampl os. A Fi gura abai xo apresent a a not ao adot ada para est es di agramas.

- 290 -

ADVPL Compl et o





Fi gu r a: Represent ao di agramt i ca de OMT para cl asses e obj et os


O agrupament o de obj et os em cl asses um poder oso mecani smo de abst rao. Dest a forma,
possvel general i zar defi ni es comuns para uma cl asse de obj et os, ao i nvs de repet - l as
para cada obj et o em part i cul ar. Est a uma das formas de r eut ili zao e economi a que a
abordagem de ori ent ao a obj et os suport a.

27.3.2. At r i but os

Um at ri but o um val or de dado assumi do pelos obj et os de uma cl asse. Nome, i dade e peso
so exempl os de at ri but os de obj et os Pessoa. Cor , peso e model o so possvei s at ri but os de
obj et os Car ro. Cada at ri but o t em um val or para cada i nst nci a de obj et o. Por exempl o, o
at ri but o i dade t em val or ` ` 29' ' no obj et o Pedro Y. Em out ras pal avras, Pedr o Y t em 29 anos de
i dade. Di ferent es i nst nci as de obj et os podem t er o mesmo val or para um dado at ri but o.
Cada nome de at ri but o ni co para uma dada cl asse, mas no necessari ament e ni co ent r e
t odas as cl asses. Por exempl o, ambos Pessoa e Companhi a podem t er um at ri but o chamado
endereo.

No di agrama de cl asses, at ri but os so li st ados no segundo segment o da cai xa que r epr esent a
a cl asse. O nome do at ri but o pode ser segui do por det al hes opci onais, t ai s como o t i po de
dado assumi do e val or defaul t . A Fi gura abai xo most ra est a r epr esent ao.



Fi gu r a: Represent ao di agramt i ca de OMT para cl asses e obj et os com at ri but os

No se deve confundi r i dent i fi cadores i nt ernos de obj et os com at ri but os do mundo r eal .
I dent i fi cadores de obj et os so uma conveni nci a de i mpl ement ao, e no t m nenhum
si gni fi cado para o domni o da apli cao. Por exempl o, CI C e RG no so i dent i fi cador es de
obj et os, mas si m verdadei ros at ri but os do mundo r eal .


- 291 -

ADVPL Compl et o


27.3.3. Oper aes e Mt odos

Uma operao uma funo ou t ransformao que pode ser apli cada a ou por obj et os em uma
cl asse. Por exempl o, abri r, sal var e i mpri mi r so operaes que podem ser apl i cadas a obj et os
da cl asse Arqui vo. Todos os obj et os em uma cl asse compart i l ham as mesmas operaes.

Toda operao t em um obj et o- al vo como um argument o i mplci t o. O comport ament o de uma
operao depende da cl asse de seu al vo. Como um obj et o sabe qual sua cl asse, possvel
escol her a i mpl ement ao corr et a da operao. Al m di st o, out ros ar gument os ( parmet ros)
podem ser necessri os para uma operao.

Uma mesma operao pode se apl i car a di ver sas cl asses di fer ent es. Uma operao como est a
di t a ser pol i mrfi ca, ou sej a, el a pode assumir di st i nt as formas em cl asses di ferent es.

Um mt odo a i mpl ement ao de uma operao para uma cl asse. Por exempl o, a operao
i mpri mi r pode ser i mplement ada de forma di st int a, dependendo se o arqui vo a ser i mpresso
cont m apenas t ext o ASCI I , um arqui vo de um processador de t ext o ou bi nri o. Todos est es
mt odos execut am a mesma operao: i mpri mi r o arqui vo; por m, cada mt odo ser
i mpl ement ado por um di ferent e cdi go.

A assi nat ura de um mt odo dada pel o nmer o e t i pos de argument os do mt odo, assi m
como por seu val or de ret orno. Uma est rat gi a de desenvol vi ment o recomendvel mant er
assi nat uras coerent es para mt odos i mpl ement ando uma dada operao, assi m como um
comport ament o consi st ent e ent r e as i mpl ement aes.

Em t ermos de di agramas OMT, operaes so li st adas na t er cei ra part e da cai xa de uma
cl asse. Cada nome de operao pode ser segui da por det al hes opci onai s, t ai s como l i st a de
argument os e t i po de r et orno. A l i st a de argument os apr esent ada ent re par nt eses aps o
nome da operao. Uma li st a de argument os vazi a i ndi ca que a operao no t em
argument os; da ausnci a da li st a de argument os no se pode concl ui r nada. O t i po de
resul t ado vem aps a li st a de argument os, sendo precedi do por doi s pont os ( : ) . Caso a
operao r et orne r esul t ado, est e no deve ser omi t i do, poi s est a a for ma de di st i ngui - l a de
operaes que no ret ornam r esul t ado. Exempl os de r epr esent ao de operaes em OMT so
apresent ados na Fi gura abai xo:



Fi gu r a: Represent ao di agramt i ca de OMT para cl asses com at ri but os e operaes

- 292 -

ADVPL Compl et o



27.3.4. Sugest es de desenvol v i ment o

Na const ruo de um model o para uma apli cao, as segui nt es sugest es devem ser
observadas a fi m de se obt er r esul t ados cl aros e consi st ent es:

E No comece a const r ui r um model o de obj et os si mpl esment e defi ni ndo cl asses,
associ aes e heranas. A pri mei ra coi sa a se fazer ent ender o probl ema a ser
resol vi do.
E Tent e mant er seu model o si mpl es. Evi t e compl icaes desnecessri as.
E Escol ha nomes cui dadosament e. Nomes so i mport ant es e carr egam conot aes
poderosas. Nomes devem ser descri t i vos, cl aros e no dei xar ambi gidades. A escol ha
de bons nomes um dos aspect os mai s di fcei s da model agem.
E No ent er re apont ador es ou out ras r efer nci as a obj et os dent ro de obj et os como
at ri but os. Ao i nvs di st o, model e est as refer nci as como associ aes. I st o t orna o
model o mai s cl aro e i ndependent e da i mpl ement ao.
E Tent e evi t ar associ aes que envol vam t rs ou mai s cl asses de obj et os. Mui t as vezes,
est es t i pos de associ aes podem ser decompost os em t ermos de associ aes bi nri as,
t ornando o model o mai s cl aro.
E No t ransfi ra os at ri but os de l i gao para dent r o de uma das cl asses.
E Tent e evi t ar hi erarqui as de generali zao mui t o profundas.
E No se surpr eenda se o seu model o necessi t ar vri as revi ses; i st o o normal .
E Sempr e document e seus model os de obj et os. O di agrama pode especi fi car a est rut ur a
do model o, mas nem sempre sufi ci ent e para descr ever as razes por t rs da defi ni o
do model o. Uma expl icao escri t a pode cl ari fi car pont os t ai s como si gni fi cado de
nomes e expli car a razo para cada cl asse e r el aci onament o.
E Nem sempr e t odas as const rues OMT so necessri as para descrever uma apli cao.
Use apenas aquel as que forem adequadas para o pr obl ema anali sado.


- 293 -

ADVPL Compl et o



28. Or i ent ao a obj et os em ADVPL

Nest e t pi co ser det al hada a forma com a qual a li nguagem ADVPL impl ement a os concei t os
de ori ent ao a obj et os e a si nt axe ut ilizada no desenvol vi ment o de apl icaes.


28.1. Si nt ax e e oper ador es par a or i ent ao a obj et os

Pal av r as r eser v adas

CLASS
CONSTRUCTOR
DATA
ENDCLASS
FROM
METHOD
SELF

CLASS

Descr i o
Ut ilizada na decl arao de uma cl asse de obj et os, e para i dent i fi car a qual
cl asse um det ermi nado mt odo est rel aci onado.
Si nt ax e 1 CLASS < nome_da_cl asse>
Si nt ax e 2 METHOD < nome_do_mt odo> CLASS < nome_da_cl asse>

CONSTRUCTOR

Descr i o
Ut ilizada na especi fi cao de um mt odo especi al , defi ni do como const r ut or,
o qual t em a funo de ret ornar um novo obj et o com os at ri but os e mt odos
defi ni dos na cl asse.
Si nt ax e METHOD < nome_do_mt odo( ) > CONSTRUCTOR

DATA

Descr i o Ut ilizada na decl arao de um at ri but o da cl asse de obj et os.
Si nt ax e DATA < nome_do_at ri but o>

ENDCLASS

Descr i o Ut ilizada na fi nalizao da decl arao da cl asse.
Si nt ax e ENDCLASS



- 294 -

ADVPL Compl et o


FROM

Descr i o
Ut ilizada na decl arao de uma cl asse, a qual ser uma i nst nci a de uma
super cl asse, r ecebendo os at ri but os e mt odos nel a defi ni dos,
i mpl ement ando a herana ent re cl asses.
Si nt ax e CLASS < nome_da_cl asse> FROM < nome_da_supercl asse>


METHOD

Descr i o
Ut ilizada na decl arao do pr ot t i po do mt odo de uma cl asse de obj et os, e
na decl arao do mt odo efet i vament e desenvol vi do.
Si nt ax e 1 METHOD < nome_do_mt odo( ) >
Si nt ax e 2 METHOD < nome_do_mt odo( < parmet r os> ) > CLASS < nome_da_cl asse>

SELF

Descr i o
Ut ilizada pri nci pal ment e pel o mt odo const rut or para ret ornar o obj et o
cri ado para a apl i cao.
Si nt ax e Ret urn SELF


Oper ador es especf i cos


:
Ut ilizado para referenci ar um mt odo ou um at ri but o de um obj et o j
i nst anci ado.
Ex empl o 1 cNome : = oAl uno: sNome
Ex empl o 2 cNot a : = oAl uno: Get Not a( cCur so)


: :
Ut ilizado pel os mt odos de uma cl asse para r efer enci ar os at ri but os
di sponvei s para o obj et o.
Ex empl o

METHOD Get Not a( cCurso) CLASS ALUNO

Local nPosCur so : = 0
Local nNot a : = 0

nPosCur so : = aScan( : : aCur sos,{ | aCurso| aCur so[ 1] = = cCurso} )

I F nPosCurso > 0

nNot a : = : : aCur sos[ nPosCur so] [ 2]

ENDI F

Ret urn nNot a




- 295 -

ADVPL Compl et o



28.2. Est r ut ur a de uma cl asse de obj et os em ADVPL

Decl ar ao da cl asse

A decl arao de uma cl asse da li nguagem ADVPL real i zada de forma si mil ar a decl arao de
uma funo, com a diferena de que uma cl asse no possui di fer enci ao quant o a sua
procednci a, como uma Funct i on( ) e uma User Funct i on( ) , e no possui vi si bili dade li mi t ada
como uma St at i c Funct ion( ) .

Exemplo:

#include protheus.ch
CLASS Pessoa()



Def i ni o dos at r i but os

Segui ndo o mesmo pri ncpi o de vari vei s no t ipadas, os at ri but os das cl asses em ADVPL no
preci sam t er seu t i po especi fi cado, sendo necessri o apenas det ermi nar seus nomes.

Dest a forma recomendado o uso da not ao Hngara t ambm para a defi ni o dos at ri but os
de forma a faci lit ar a anli se, i nt erpret ao e ut i li zao da cl asse e seus obj et os i nst anci ados.

Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade



Pr ot ot i pao dos mt odos

A prot ot i pao dos mt odos uma r egra ut ili zada pel as li nguagens ori ent adas a obj et os,
at ravs da qual so especi fi cadas as operaes que podem ser real i zadas pel o obj et o,
di ferenci ando os mt odos de out ras funes i nt ernas de uso da cl asse, e para especi fi car quai s
so os mt odos const rut or es.

Em li nguagens t i padas, na prot ot i pao dos mt odos necessrio defi ni r quai s so os
parmet ros r ecebi dos e seus r espect i vos t i pos, al m de defi ni r o t ipo do ret orno que ser
forneci do. Em ADVPL necessri o apenas descrever a chamada do mt odo e caso necessri o
se o mesmo um const rut or .

- 296 -

ADVPL Compl et o



Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS


28.3. I mpl ement ao dos mt odos de uma cl asse em ADVPL

Mt odo Con st r ut or

O mt odo const rut or possui a caract erst i ca de ret ornar um obj et o com o t i po da cl asse da qual
o mesmo foi i nst anci ado. Por est a razo di z- se que o t i po do obj et o i nst anci ado a cl asse
daquel e obj et o.

Para produzi r est e efei t o, o mt odo const rut or ut ili za a pal avra r eservada SELF , a qual
ut ili zada pel a li nguagem ADVPL para r efer nci a a prpri a cl asse daquel 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 Compl et o



Man i pu l ao de at r i but os

Os at ri but os defi ni dos para uma cl asse com a ut ili zao da pal avra r eservada DATA em sua
decl arao podem ser mani pul ados por seus mt odos ut i lizando o operador : : .

A ut ilizao dest e operador permi t e ao i nt erpret ador ADVPL di ferenci ar vari vei s comuns
cri adas pel as funes e mt odos que ut ili zam est e obj et o dos at ri but os propri ament 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


Ut i l i zao de f unes em u ma cl asse de obj et os

Conforme menci onado ant eri orment e, a ut i lizao da pal avra reservada METHOD permi t e ao
i nt erpr et ador ADVPL di fer enci ar os mt odos que podem ser ut ili zados at ravs da refernci a do
obj et o de funes i nt ernas descri t as i nt ernament e na cl asse.

I st o permi t e a ut ili zao de funes t radi cionai s da li nguagem ADVPL, como as St at i c
Funct i ons( ) as quai s sero vi svei s apenas a cl asse, e no podero ser r efer enci adas
di ret ament e pel 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 Compl et o



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


Her ana ent r e cl asses

Segui ndo o principi o da ori ent ao a obj et os, a li nguagem ADVPL permi t e que uma cl asse
receba por herana os mt odos e at ri but os defi ni dos em uma out ra cl asse, a qual t ornasse a
super cl asse dest a i nst nci a.

Para ut ili zar est e r ecur so deve ser ut ili zada a pal avra reservada FROM na decl arao da
cl asse, especi fi cando a super cl asse que ser refer enci ada.

Em ADVPL o exempl o prt i co dest a si t uao a supercl asse TSr vObj ect , a qual ut ilizada pela
mai ori a das cl asses e component es da i nt erface vi sual , como demonst rado 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 Compl et o



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.


Const r ut or par a cl asses com her ana

Quant o ut ili zado o r ecurso de herana ent re cl asses, o const rut or da cl asse i nst anci ada deve
receber um t rat ament o adi ci onal , para que o obj et o i nst anci ado sej a cri ado com os at ri but os e
mt odos defi ni dos na super cl asse.

Nest es casos, l ogo aps a defi ni o do mt odo const rut or da cl asse, dever ser execut ado o
mt odo const rut 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 Compl et o



MDULO 06: ADVPL Or i ent ado obj et os I

Nest e mdul o sero t r at ados os component es e obj et os da i nt erface vi sual da li nguagem
ADVPL, permi t i ndo o desenvol vi ment o de apli caes com i nt erfaces grfi cas com si nt axe
ori ent ada a obj et os.

29. Component es da i nt er f ace vi sual do ADVPL

A linguagem ADVPL possui di versos component es vi suai s e auxiliares, os quai s podem ser
represent ados ut i lizando a est rut ura abai xo:

. Cl asses da I nt er f ace Vi sual




Tsr vobj ect
. Cl asses Aux i l i ar es


Tfont

. Cl asses de Janel as


Msdialog
Tdialog
Twindow

. Cl asses de Component es


Tcont r ol


.
Cl asses de Component es
Vi suai s
Br get ddb
Mscalend
Mscalendgr id
Msselbr
Msworkt ime
Sbut t on
Tbar
Tbit map
Tbr owsebut t on
Tbt nbmp
Tbt nbmp2
Tbut t on
Tcbr owse
Tcheckbox
Tcolor t r iangle
Tcombobox
Tfolder
Tfont
Tget
Tgr oup
Thbut t on
Tibrowser
Tlist box
Tmenu
Tmenubar
Tmet er
Tmsgr aphic
Tmsgbar
Tmult ibt n
Tmult iget
Tolecont ainer
Tpageview
Tpanel
Tr admenu
Tsbr owse
Tsay
Tscr ollbox
Tsimpleedit or
Tslider

- 301 -

ADVPL Compl et o






.
Cl asses de Component es
Vi suai s
Tsplit t er
Tt abs
Tt oolbox
Twbrowse
Vcbrowse

Cl asses da i nt er f ace v i su al

TSRVOBJECT( )

Descr i o
Cl asse abst rat a i ni ci al de t odas as cl asses de i nt erface do ADVPL. No deve
ser i nst anci ada di ret ament e.


Cl asses aux i l i ar es

TFONT( )

Descr i o
Cl asse de obj et os que defi ne a font e do t ext o ut ilizado nos cont r ol es
vi suai s.


Cl asses de j an el as

MSDI ALOG( )

Descr i o
Cl asse de obj et os que deve ser ut ili zada como padro de j anel a para
ent rada de dados. MSDi al og um t i po de j anel a di l ogo modal , i st o ,
no permi t e que out ra j anel a at i va receba dados enquant o est a est i ver
at i va.

TDI ALOG( )

Descr i o
Cl asse de obj et os do t i po di l ogo de ent rada de dados, sendo seu uso
reservado. Recomenda- se ut i lizar a cl asse MSDi al og que herdada dest a
cl asse.

TWI NDOW( )

Descr i o
Cl asse de obj et os do t i po di l ogo pri nci pal de pr ograma. Dever exi st i r
apenas uma i nst nci a dest e obj et o na execuo do programa.


Cl asses de componen t es

TCONTROL( )

Descr i o
Cl asse abst rat a comum ent re t odos os component es vi suai s edi t vei s.
No deve ser i nst anci ada di ret ament e.


- 302 -

ADVPL Compl et o



Cl asses de componen t es v i suai s

BRGETDDB( )

Descr i o Cl asse de obj et os vi suais do t i po Gri d.

MSCALEND( )

Descr i o Cl asse de obj et os vi suais do t i po Cal endri o.


MSCALENDGRI D( )

Descr i o Cl asse de obj et os vi suais do t i po Grade de Perodos.

MSSELBR( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Gri d

MSWORKTI ME( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Bar r a de Perodo.

SBUTTON( )

Descr i o
Cl asse de obj et os vi suais do t i po bot o, o qual pode possui r i magens
padres associ adas ao seu t i po.

TBAR( )

Descr i o Cl asse de obj et os vi suais do t i po Barra Superi or .

TBI TMAP( )

Descr i o Cl asse de obj et os vi suais que per mi t e a exi bi o de uma i magem.

TBROWSEBUTTON( )

Descr i o
Cl asse de obj et os vi suais do t i po bot o no format o padro ut ili zado
em br owses da apl i cao.

TBTNBMP( )

Descr i o
Cl asse de obj et os vi suais do t i po bot o, o qual permi t e que sej a
vi ncul ada uma i magem ao cont r ol e.


- 303 -

ADVPL Compl et o



TBTNBMP2 ( )

Descr i o
Cl asse de obj et os vi suais do t i po bot o, o qual permi t e a exi bi o de
uma i magem ou de um popup.

TBUTTON( )

Descr i o
Cl asse de obj et os vi suais do t i po bot o, o qual permi t e a ut i lizao de
t ext o para sua i dent i fi cao.

TCBROWSE( )

Descr i o Cl asse de obj et os vi suais do t i po Gri d.

TCHECKBOX( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - CheckBox.

TCOLORTRI ANGLE( )

Descr i o Cl asse de obj et os vi suais do t i po Pal et a de Cor es.

TCOMBOBOX( )

Descr i o
Cl asse de obj et os vi suais do t i po t ComboBox, a qual cri a uma ent rada
de dados com ml t ipla escol ha com i t em defi ni do em uma l i st a
vert i cal , aci onada por F4 ou pel o bot o esquer do l ocali zado na part e
di rei t a do cont rol e. A vari vel associ ada ao cont rol e t er o val or de
um dos i t ens sel eci onados ou no caso de uma li st a i ndexada, o val or
de seu ndi ce.

TFOLDER( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Fol der .

TGET( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Get , a qual cri a um
cont r ol e que armazena ou al t era o cont edo de uma vari vel at ravs
de di gi t ao. O cont edo da vari vel s modi fi cado quando o
cont r ol e perde o foco de edi o para out ro cont r ol e.

TGROUP( )

Descr i o
Cl asse de obj et os vi suais do t i po pai nel t Group, a qual cri a um
pai nel onde cont rol es vi suai s podem ser agrupados ou cl assi fi cados.
Nest e pai nel cri ada uma borda com t t ul o em vol t a dos cont rol es
agrupados.


- 304 -

ADVPL Compl et o



THBUTTON( )

Descr i o Cl asse de obj et os vi suais do t i po bot o com hi perl i nk.

TI BROWSER( )

Descr i o
Cl asse de obj et os vi suais do t i po Pgi na de I nt ernet , sendo necessri o
i ncl ui r a cl ausul a Browser Enabl ed= 1 no Confi g do Remot e. I NI

TLI STBOX( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Li st box, a qual cri a uma
j anel a com i t ens sel eci onvei s e barra de r ol agem. Ao sel eci onar um
i t em, uma vari vel at ualizada com o cont edo do i t em sel eci onado.

TMENU( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Menu.

TMENUBAR( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Bar r a de Menu.

TMETER( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Met er, a qual exi be uma
rgua ( gauge) de processament o, descr evendo o andament o de um
processo at ravs da exi bi o de uma barra horizont al .

TMSGRAPHI C( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Grfi co.

TMSGBAR( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Rodap.

TMULTI BTN( )

Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Ml t i pl os bot es.

TMULTI GET( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e - edi o de t ext o de
ml t ipl as linhas.


- 305 -

ADVPL Compl et o



TOLECONTAI NER( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e, a qual permi t e a cri ao de
um bot o vi ncul ado a um obj et o OLE.

TPAGEVI EW( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e, que permi t e a vi suali zao
de arqui vos no format o gerado pel o spool de i mpresso do Prot heus.

TPANEL( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Panel , a qual permi t e
cri ar um pai nel est t i co, onde podem ser cri ados out r os cont rol es com
o obj et i vo de organi zar ou agrupar component es vi suai s.

TRADMENU( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e TRadMenu, a qual permi t e
cri ar um cont r ol e vi sual no format o Radi o But t on.

TSBROWSE( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e TSBrowse, a qual permi t e
cri ar um cont r ol e vi sual do t i po Gri d.

TSAY( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Say, a qual exi be o
cont edo de t ext o est t i co sobre uma j anel a ou cont r ol e pr evi ament e
defi ni dos.

TSCROLLBOX( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Scr oll box, a qual permi t e
cri ar um pai nel com scr oll desli zant es nas l at er ai s ( hori zont ai s e
vert i cai s) do cont r ol e.

TSI MPLEEDI TOR( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Si mpl eEdi t or, a qual
permi t e cri ar um cont rol e vi sual para edi o de t ext os com r ecur sos
si mpl es, como o Not ePad

TSLI DER( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Slider, a qual permi t e
cri ar um cont r ol e vi sual do t i po bot o desli zant e.

TSPLI TTER( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Spli t t er, a qual permi t e
cri ar um cont r ol e vi sual do t i po di vi sor.

- 306 -

ADVPL Compl et o



TTABS( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e TTabs, a qual permi t e
cri ar um cont r ol e vi sual do t i po past a.

TTOOLBOX( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e t Tool box, a qual permi t e
cri ar um cont r ol e vi sual para agrupar di fer ent es obj et os.

TWBROWSE( )

Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e TWBrowse, a qual permi t e
cri ar um cont r ol e vi sual do t i po Gri d.

VCBROWSE( )
Descr i o
Cl asse de obj et os vi suais do t i po cont r ol e VCBrowse, a qual permi t e
cri ar um cont r ol e vi sual do t i po Gri d.


Document ao dos component es da i nt er f ace v i su al

Os component es da i nt er face vi sual da linguagem ADVPL ut ili zados nest e t r ei nament o est o
document ados na seo Gui a de Refernci a, ao fi nal dest e mat eri al .

Para vi sualizar a document ao compl et a de t odos os component es menci onados nest e
capt ul o deve ser acesso o si t e DEM Document ao El et r ni ca Mi crosi ga
( dem.mi crosi ga.com.br) confor me abai xo:









- 307 -

ADVPL Compl et o



29.1. Par t i cul ar i dades dos component es v i suai s


29.1.1. Conf i gur ando as cor es par a os component es

Os component es vi suai s da li nguagem ADVPL ut ilizam o padro de cores RGB.

As cor es dest e padro so defi ni das pel a seguint e fr mul a, a qual deve ser aval i ada t endo
como base a pal et a de cor es no format o RGB:


nCor : = n Ver mel ho + ( nVer de * 25 6) + ( n Azul * 65 536)





Fi gu r a: Pal et a de cor es no f or mat o RGB

Com base nest a pal et a, podemos defi ni r os val ores das segui nt es cores bsi cas:

Cor R G B Val or
Pret o 0 0 0 0
Azul 0 0 255 16711680
Verde 0 255 0 65280
Ci ano 0 255 255 16776960
Vermel ho 255 0 0 255
Rosa 255 0 255 16711935
Amarel o 255 255 0 65535
Branco 255 255 255 16777215



- 308 -

ADVPL Compl et o



Para at ri bui r as cor es aos obj et os vi suai s devem ser obser vados os at r i but os ut ili zados para
est es fi ns em cada obj et o, como por exempl o:

MSDI ALOG( )

nCl r Pane Cor de fundo do pai nel
nCl r Tex t Cor da font e das l et ras do pai nel


TSAY( )

nCl r Pane Cor de fundo do pai nel
nCl r Tex t Cor da font e das l et ras do pai nel


Funo RGB( )

A li nguagem ADVPL possui a funo RGB( ) a qual ret orna o val or da cor a ser defi ni do, de
acordo com a paramet ri zao de cada um dos el ement os da pal et a RGB.


RGB( nRed, nGr een, n Bl u e)

nRed Val or de 0- 255 para o el ement o vermel ho da pal et a RGB
nGr een Val or de 0- 255 para o el ement o verde da pal et a RGB
nBl ue Val or de 0- 255 para o el ement o azul da pal et a RGB
Ret or no Val or a ser defi ni do para o at ri but o cor do component e


- 309 -

ADVPL Compl et o



30. Apl i caes com a i nt er f ace vi sual do ADVPL

A li nguagem ADVPL possui int erfaces vi suai s pr- defi ni das que auxiliam no desenvol vi ment o
de apl i caes mai s compl et as, combi nando est as i nt erfaces com os component es vi suais
demonst rados ant eri or ment e.

Di dat i cament e as i nt erfaces vi suai s pr- defi ni das da li nguagem ADVPL podem ser di vidi das em
t rs grupos:

E Capt ur a de i nf or maes si mpl es ou Mul t i - Get s;
E Capt ur a de ml t i pl as i nf or maes ou Mu l t i - Li nes;
E Bar r as de bot es

30.1. Capt ur a de i nf or maes si mpl es ( Mul t i - Get s)

Em ADVPL, as t el as de capt ura de i nformaes compost as por ml t i pl os campos di gi t vei s
acompanhados de seus r espect i vos t ext os expl i cat i vos so comument e chamados de
Enchoi ces.

Um Enchoi ce pode ser facil ment e ent endi da como di versos conj unt os de obj et os TSay e TGet
ali nhados de forma a vi suali zar ou capt urar i nformaes, nor mal ment e vi ncul adas a arqui vos
de cadast r os ou movi ment aes si mpl es.

Abai xo t emos a vi sualizao de uma Enchoi ce para o arqui vo padr o do ERP Pr ot heus de
Cadast r o de Cl i ent es ( SA1 ) :



Fi gu r a: Enchoi ce do Cadast r o de Cl i ent es do ERP Pr ot h eu s


- 310 -

ADVPL Compl et o



A li nguagem ADVPL per mi t e a i mpl ement ao da Enchoi ce de duas for mas si mil ares:

E Funo Enchoi ce: Si nt axe t radi ci onal ment e ut ili zada em ADVPL, a qual no ret orna
um obj et o para a apl i cao chamadora;

E Cl asse MsMGet : Cl asse do obj et o Enchoi ce, a qual permit e a i nst anci ao di ret a de um
obj et o, t ornando- o di sponvel na apli cao chamadora.

A ut ili zao de um ou out ro obj et o depende unicament e da escol ha do desenvol vedor j que os
parmet ros para a funo Enchoi ce e para o mt odo New( ) da cl asse MsMGet so os mesmos,
l embrando que para mant er a coernci a com uma apli cao escri t a em ori ent ao a obj et os
dever ser ut i lizada a classe MsMGet ( ) .

30.1.1. Enchoi ce( )

E Si nt ax e: Enchoi ce( cAl i as, n Reg, nOpc, aCRA, cLet r a, cTex t o, aAcho, aPos,
aCpos, nModel o, n Col Mens, cMen sagem, cTudoOk , oWnd, l F3,
l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y )

E Ret or no: Ni l
E Par met r os:

cAl i as Tabel a cadast r ada no Di ci onri o de Tabel as ( SX2) que ser
edi t ada
nReg Parmet r o no ut ili zado
nOpc Nmer o da li nha do aRot ina que defi ni r o t i po de edi o
( I ncl uso, Al t erao, Excl uso, Vi sualizao)
aCRA Parmet r o no ut ili zado
cLet r a Parmet r o no ut ili zado
cTex t o Parmet r o no ut ili zado
aAcho Vet or com nome dos campos que sero exi bi dos. Os campos
de usuri o sempre sero exi bidos se no exi st i r no par met ro
um el ement o com a expresso " NOUSER"
aPos Vet or com coordenadas para cri ao da enchoi ce no format o
{ < t op> , < l eft > , < bot t om> , < ri ght > }
aCpos Vet or com nome dos campos que podero ser edi t ados
nModel o Se for di fer ent e de 1 desabili t a execuo de gat ilhos
est r angei ros
nCol Men s Parmet r o no ut ili zado
cMensagem Parmet r o no ut ili zado
cTudoOk Expresso par a val i dao da Enchoi ce
oWnd Obj et o ( j anel a, pai nel , et c.) onde a enchoi ce ser cri ada.
l F3 I ndi ca se a enchoi ce est a sendo cri ada em uma consul t a F3
para ut ili zar vari vei s de memri a
l Memor i a I ndi ca se a enchoi ce ut i li zar vari vei s de memri a ou os
campos da t abel a na edi o
l Col umn I ndi ca se a apresent ao dos campos ser em forma de
col una
caTel a Nome da vari vel t i po "pri vat e" que a enchoi ce ut ili zar no
l ugar da propri edade aTel a
l NoFol der I ndi ca se a enchoi ce no i r ut ili zar as Past as de Cadast r o
( SXA)
l Pr oper t y I ndi ca se a enchoi ce no ut ili zar as vari vei s aTel a e aGet s,
soment e suas propri edades com os mesmos nomes

- 311 -

ADVPL Compl et o




Ex empl o: Ut i l i zao da f uno Enchoi ce( )


#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 Compl et o



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 Si nt ax e: MsMGet ( ) : New ( cAl i as, nReg, nOpc, aCRA, cLet r a, cTex t o, aAcho,
aPos, aCpos, nModel o, n Col Mens, cMen sagem, cTudoOk , oWnd, l F3,
l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y )

E Ret or no: oMsMGet obj et o do t i po MsMGet ( )
E Par met r os:

cAl i as Tabel a cadast r ada no Di ci onri o de Tabel as ( SX2) que ser
edi t ada
nReg Parmet r o no ut ili zado
nOpc Nmer o da li nha do aRot ina que defi ni r o t i po de edi o
( I ncl uso, Al t erao, Excl uso, Vi sualizao)
aCRA Parmet r o no ut ili zado
cLet r a Parmet r o no ut ili zado
cTex t o Parmet r o no ut ili zado
aAcho Vet or com nome dos campos que sero exi bi dos. Os campos
de usuri o sempre sero exi bidos se no exi st i r no par met ro
um el ement o com a expresso " NOUSER"
aPos Vet or com coordenadas para cri ao da enchoi ce no format o
{ < t op> , < l eft > , < bot t om> , < ri ght > }
aCpos Vet or com nome dos campos que podero ser edi t ados
nModel o Se for di fer ent e de 1 desabili t a execuo de gat ilhos
est r angei ros
nCol Men s Parmet r o no ut ili zado
cMensagem Parmet r o no ut ili zado
cTudoOk Expresso par a val i dao da Enchoi ce
oWnd Obj et o ( j anel a, pai nel , et c.) onde a enchoi ce ser cri ada.
l F3 I ndi ca se a enchoi ce est a sendo cri ada em uma consul t a F3
para ut ili zar vari vei s de memri a

- 313 -

ADVPL Compl et o


l Memor i a I ndi ca se a enchoi ce ut i li zar vari vei s de memri a ou os
campos da t abel a na edi o
l Col umn I ndi ca se a apresent ao dos campos ser em forma de
col una
caTel a Nome da vari vel t i po "pri vat e" que a enchoi ce ut ili zar no
l ugar da propri edade aTel a
l NoFol der I ndi ca se a enchoi ce no i r ut ili zar as Past as de Cadast r o
( SXA)
l Pr oper t y I ndi ca se a enchoi ce no ut ili zar as vari vei s aTel a e aGet s,
soment e suas propri edades com os mesmos nomes

Ex empl o: Ut i l i zao do obj et o 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 Compl et o


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. Capt ur a de ml t i pl as i nf or maes ( Mul t i - Li nes)

A li nguagem ADVPL permi t e a ut ili zao de basi cament e doi s t i pos de obj et os do t i po gri d, ou
como t ambm so conheci dos: mul t i - li ne:

E Gr i ds di gi t v ei s: per mi t em a vi sualizao e capt ura de i nformaes, comument e
ut ili zados em i nt erfaces de cadast r o e manut eno, t ai s como:

MSGETDB( )
MSGETDADOS( )
MSNEWGETDADOS( )

E Gr i ds n o di gi t v ei s: permi t em soment e a vi suali zao de i nformaes, comument e
ut ili zados como browses do ERP Pr ot heus, t ai s como:

TWBROWSE( )
MAWNDBROWSE( )
MBROWSE( )

Nest e t pi co sero t rat adas as gri ds di gi t vei s di sponvei s na li nguagem ADVPL para o
desenvol vi ment o de i nt er faces de cadast r os e manut eno de i nformaes.

- 315 -

ADVPL Compl et o



30.2.1. MsGet DB( )

A cl asse de obj et os vi suai s MsGet DB( ) permi t e a cri ao de um gri d di gi t vel com uma ou mai s
col unas, baseado em uma t abel a t emporri a.

E Si nt ax e: MsGet DB( ) : New ( nTop, nLef t , n Bot t om, nRi ght , nOpc, cLi nh aOk ,
cTudoOk , cI n i Cpos, l Del et e, aAl t er , nFr eeze, l Empt y , u Par 1, cTRB,
cFi el dOk , l Condi ci on al , l Append, oWnd, l Di spar os, uPar 2, cDel Ok ,
cSuper Del )

E Ret or no: oMsGet DB obj et o do t i po MsGet DB( )

E Par met r os:

nTop Di st anci a ent re a MsGet DB e o ext r emi dade superi or do
obj et o que a cont m.
nLef t Di st anci a ent re a MsGet DB e o ext r emi dade esquerda do
obj et o que a cont m.
nBot t om Di st anci a ent re a MsGet DB e o ext r emi dade inferi or do obj et o
que a cont m.
nRi ght

Di st anci a ent re a MsGet DB e o ext r emi dade di rei t a do obj et o
que a cont m.
nOpc Posi o do el ement o do vet or aRot i na que a MsGet DB usar
como refernci a.
cLi nh aOk Funo execut ada para vali dar o cont ext o da linha at ual do
aCol s.
cTudoOk Funo execut ada para vali dar o cont ext o ger al da MsGet DB
( t odo aCol s) .
cI ni Cpos Nome dos campos do t ipo caract er que ut ili zaro i ncrement o
aut omt i co. Est e parmet r o deve ser no for mat o + < nome
do pri mei ro campo> + < nome do segundo campo> + . .. .
l Del et e Habili t a a opo de excl ui r li nhas do aCol s. Val or padro
fal so.
aAl t er Vet or com os campos que podero ser al t erados.
nFr eeze I ndi ca qual col una no fi cara congel ada na exi bio.
l Empt y Habili t a validao da pr i mei ra col una do aCol s para est a no
poder est ar vazi a. Val or padro fal so.
uPar 1 Parmet r o r eservado.
cFi el dOk Funo execut ada na vali dao do campo.
cTRB Ali as da t abel a t emporri a.
l Con di ci on al Reser vado
l Appen d I ndi ca se a MsGet DB i ra cri ar uma linha em branco
aut omat i cament e quando for i ncluso.
cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do
aCol s.
l Di spar os I ndi ca se ser ut ili zado o Di ci onri o de Dados para consul t a
padro, i ni ci ali zao padro e gat i l hos.
uPar 2 Parmet r o r eservado.
cSuper Del - Funo execut ada quando pressi onada as t ecl as
< Ct rl > + < Del et e> .
oWnd Obj et o no qual a MsGet DB ser cri ada.




- 316 -

ADVPL Compl et o


E Apar nci a:





E Var i v ei s pr i v at e:

aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e
que defi ni ra o t i po de operao que est a sendo execut ada
( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no
for mat o:
{ cTi t ul o, cRot i na, nOpo, nAcesso} , aonde:
nOpo segue o padro do ERP Prot heus para:
1- Pesqui sar
2- Vi suali zar
3- I ncl ui r
4- Al t erar
5- Excl ui r
aHeader Vet or com i nformaes das col unas no format o:

{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,;
cVali dao, cReservado, cTi po, xReservado1, xReser vado2}

A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada
com base no aHeader mai s um l t i mo campo t i po l gi co que
det ermi na se a l i nha foi excl uda.


l Ref r esh Vari vel t i po l gi ca para uso r eser vado.


- 317 -

ADVPL Compl et o



E Var i v ei s p bl i cas:

nBr Li n I ndi ca qual a li nha posi ci onada do aCol s.

E Funes de v al i dao:

cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No
pode ser defi ni da como St at i c Funct i on.
cTudoOk Funo de val idao da confi rmao da operao com o gri d.
No pode ser defi ni da como St at i c Funct i on.

E Mt odos adi ci on ai s:

For ceRef r esh( ) At uali za a MsGet DB com a t abel a e posi ci ona na pri mei ra
linha.

Ex empl o: Ut i l i zao do obj et o MsGet DB( )


#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 Compl et o


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 Compl et o



30.2.2. MsGet Dados( )

A cl asse de obj et os vi suai s MsGet Dados( ) per mi t e a cri ao de um gri d di git vel com uma ou
mai s col unas, baseado em um array.

E Si nt ax e: MsGet Dados( ) : New ( nTop, nLef t , nBot t om, nRi ght , n Opc, cLi nh aOk ,
cTudoOk , cI ni Cpos, l Del et e, aAl t er , uPar 1, l Empt y , nMax , cFi el dOk ,
cSuper Del , uPar 2, cDel Ok , oWnd)

E Ret or no: oMsGet Dados obj et o do t i po MsGet Dados( )

E Par met r os:

nTop Di st anci a ent re a MsGet Dados e o ext r emi dade superi or do
obj et o que a cont m.
nLef t Di st anci a ent re a MsGet Dados e o ext r emi dade esquerda do
obj et o que a cont m.
nBot t om Di st anci a ent re a MsGet Dados e o ext r emi dade i nferi or do
obj et o que a cont m.
nRi ght

Di st anci a ent re a MsGet Dados e o ext remi dade di rei t a do
obj et o que a cont m.
nOpc Posi o do el ement o do vet or aRot i na que a MsGet Dados
usar como referenci a.
cLi nh aOk Funo execut ada par a vali dar o cont ext o da linha at ual do
aCol s.
cTudoOk Funo execut ada para val i dar o cont ext o geral da
MsGet Dados ( t odo aCol s) .
cI ni Cpos Nome dos campos do t i po caract er que ut ili zaro i ncrement o
aut omt i co. Est e parmet r o deve ser no for mat o + < nome
do pri mei ro campo> + < nome do segundo campo> + . .. .
l Del et e Habili t a excl ui r li nhas do aCol s. Val or padro fal so.
aAl t er Vet or com os campos que podero ser al t erados.
uPar 1 Parmet r o r eservado.
l Empt y Habili t a validao da pr i mei ra col una do aCol s para est a no
poder est ar vazi a. Val or padro fal so.
nMax Nmer o mxi mo de l i nhas permi t idas. Val or padro 99.
cFi el dOk Funo execut ada na vali dao do campo.
cSuper Del Funo execut ada quando pressi onada as t ecl as
< Ct rl > + < Del et e> .
uPar 2 Parmet r o r eservado.
cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do
aCol s.
oWnd Obj et o no qual a MsGet Dados ser cri ada.


- 320 -

ADVPL Compl et o


E Apar nci a:





E Var i v ei s pr i v at e:

aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e
que defi ni ra o t i po de operao que est a sendo execut ada
( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no
for mat o:
{ cTi t ul o, cRot i na, nOpo, nAcesso} , aonde:
nOpo segue o padro do ERP Prot heus para:
6- Pesqui sar
7- Vi suali zar
8- I ncl ui r
9- Al t erar
10- Excl ui r
aHeader Vet or com i nformaes das col unas no format o:

{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,;
cVali dao, cReservado, cTi po, xReservado1, xReser vado2}

A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada
com base no aHeader mai s um l t i mo campo t i po l gi co que
det ermi na se a l i nha foi excl uda.


l Ref r esh Vari vel t i po l gi ca para uso r eser vado.


- 321 -

ADVPL Compl et o



E Var i v ei s p bl i cas:

N I ndi ca qual a li nha posi ci onada do aCol s.

E Funes de v al i dao:

cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No
pode ser defi ni da como St at i c Funct i on.
cTudoOk Funo de val idao da confi rmao da operao com o gri d.
No pode ser defi ni da como St at i c Funct i on.

E Mt odos adi ci on ai s:

For ceRef r esh( ) At uali za a MsGet Dados com a t abel a e posi ci ona na pri mei ra
linha.
Hi de( ) Ocul t a a MsGet Dados.
Show ( ) Most ra a MsGet Dados.


Ex empl o: Ut i l i zao do obj et o MsGet Dados( )


#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 Compl et o



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 Compl et o



30.2.3. MsNew Get Dados( )

A cl asse de obj et os vi suai s MsNewGet Dados( ) permi t e a cri ao de um gri d di git vel com uma
ou mai s col unas, baseado em um array.

E Si nt ax e: MsNew Get Dados( ) : New ( nSuper i or , nEsqu er da ,n I n f er i or , nDi r ei t a,
nOpc, cLi nOk , cTu doOk , cI ni Cpos, aAl t er GDa, nFr eeze, nMax ,
cFi el dOk , cSuper Del , cDel Ok , oDLG, aHeader , aCol s)

E Ret or no: oMsGet Dados obj et o do t i po MsNew Get Dados( )

E Par met r os:

nSuper i or Di st anci a ent re a MsNewGet Dados e o ext r emi dade superi or
do obj et o que a cont em
nEsqu er da Di st anci a ent re a MsNewGet Dados e o ext r emi dade esquerda
do obj et o que a cont em
nI nf er i or Di st anci a ent re a MsNewGet Dados e o ext r emi dade i nferi or do
obj et o que a cont em
nDi r ei t a Di st anci a ent re a MsNewGet Dados e o ext r emi dade di rei t a do
obj et o que a cont em
nOpc Operao em execuo: 2- Vi suali zar, 3- I ncl ui r, 4- Al t erar , 5-
Excl ui r
cLi nOk Funo execut ada para vali dar o cont ext o da l i nha at ual do
aCol s
cTudoOk Funo execut ada para vali dar o cont ext o geral da
MsNewGet Dados ( t odo aCol s)
cI ni Cpos Nome dos campos do t ipo caract er que ut i lizaro i ncrement o
aut omt i co.
aAl t er GDa Campos al t ervei s da Get Dados
nFr eeze Campos est t i cos na Get Dados, part i ndo sempr e da posi o
i ni ci al da get dados aonde:
1- Pri mei ro campo congel ado
2- Pri mei ro e segundo campos congel ados...
nMax Nmer o mxi mo de l i nhas permi t idas. Val or padro 99
cFi el dOk Funo execut ada na vali dao do campo
cSuper Del Funo execut ada quando pr essi onada as t ecl as
< Ct rl > + < Del et e>
cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do
aCol s
oDLG Obj et o no qual a MsNewGet Dados ser cri ada
aHeader Array a ser t r at ado i nt er nament e na MsNewGet Dados como
aHeader
aCol s Array a ser t r at ado i nt er nament e na MsNewGet Dados como
aCol s


- 324 -

ADVPL Compl et o


E Apar nci a:





E Var i v ei s pr i v at e:

aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e
que defi ni ra o t i po de operao que est a sendo execut ada
( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no
for mat o:
{ cTi t ul o, cRot i na, nOpo, nAcesso} , aonde:

nOpo segue o padro do ERP Prot heus para:
1- Pesqui sar
2- Vi suali zar
3- I ncl ui r
4- Al t erar
5- Excl ui r
aHeader Vet or com i nformaes das col unas no format o:

{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,;
cVali dao, cReservado, cTi po, xReservado1, xReser vado2}

A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada
com base no aHeader mai s um l t i mo campo t i po l gi co que
det ermi na se a l i nha foi excl uda.

l Ref r esh Vari vel t i po l gi ca para uso r eser vado.

- 325 -

ADVPL Compl et o



E Var i v ei s p bl i cas:

N I ndi ca qual a li nha posi ci onada do aCol s.

E Funes de v al i dao:

cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No
pode ser defi ni da como St at i c Funct i on.
cTudoOk Funo de val idao da confi rmao da operao com o gri d.
No pode ser defi ni da como St at i c Funct i on.

E Mt odos adi ci on ai s:

For ceRef r esh( ) At uali za a MsNewGet Dados com a t abel a e posi ci ona na
pri mei ra linha.
Hi de( ) Ocul t a a MsNewGet Dados.
Show ( ) Most ra a MsNewGet Dados.

Ex empl o: Ut i l i zao dos obj et os MsNew Get Dados( ) 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 Compl et o



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 Compl et o



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 Compl et o



30.2.3. 1. Def i ni n do cor es per sonal i zadas par a o obj et o MsNew Get Dados( )

Conforme vi st o no t pico sobr e defi ni o das propri edades de cor es para os component es
vi suai s, cada obj et o possui caract erst i cas que devem ser respei t adas para corr et a ut i lizao
dest e r ecurso.

E At r i but os adi ci on ai s:

l UseDef aul t Col or s At ri but o que dever ser defi ni do como .F. par a que as
al t eraes nas cor es sej am permi t i das.


E Mt odos adi ci on ai s:

Set Bl k Back Col or Mt odo que defi ne a cor que ser ut ili zada para cada li nha do
gri d. No necessri o ut ilizar o mt odo Refr esh( ) aps a
defi ni o da cor por est e mt odo.

E Apar nci a:






- 329 -

ADVPL Compl et o



Ex empl o: Def i ni ndo cor es per son al i zadas par a o obj et o MsNew Get Dados( )


#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 Compl et o


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 Compl et o



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 Compl et o



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 Compl et o



30.3. Bar r as de bot es

A linguagem ADVPL permi t e a i mpl ement ao de bar ras de bot es ut ili zando funes pr-
defi ni das desenvol vi das com o obj et i vo de facili t ar sua ut ilizao, ou at ravs da ut ili zao
di ret a dos component es vi suai s di sponvei s. Dent re os r ecur sos da li nguagem que podem ser
ut ili zados com est a fi nali dade sero abordados:

E Funo Ench oi ceBar : Sint axe t radi ci onal ment e ut ili zada em ADVPL, a qual no
ret orna um obj et o par a a apli cao chamadora;

E Cl asse TBar : Cl asse do obj et o TBar( ) , a qual permi t e a i nst anci ao di ret a de um
obj et o do t i po bar ra de bot es superi or, t ornando- o di sponvel na apli cao chamadora.

E Cl asse But t onBar : Cl asse do obj et o But t onBar( ) , a qual permi t e a i nst anci ao di ret a
de um obj et o bar ra de bot es genri co, o qual pode ser ut ili zado em qual quer posi o
da t el a, t ornando- o di sponvel na apli cao chamadora.


30.3.1. Enchoi ceBar ( )

Funo que cri a uma barra de bot es no format o padro ut ili zado pel as i nt erfaces de cadast r o
da apli cao Prot heus.

Est a bar ra possui os bot es padres para confirmar ou cancel ar a i nt erface e ai nda permi t e a
adi o de bot es adi ci onai s com a ut ili zao do parmet r o aBut t ons.


E Si nt ax e:


Enchoi ceBar ( oDl g, bOk , bCancel , l MsgDel , aBut t ons, nRecno, cAl i as)


E Par met r os:

oDl g Di al og onde i r cri ar a barra de bot es
bOk Bl oco de cdi go a ser execut ado no bot o Ok
bCancel Bl oco de cdi go a ser execut ado no bot o Cancel ar
l MsgDel Exi be di al og para confi r mar a excl uso
aBut t ons
Array cont endo bot es adi ci onai s.
aArray[ n] [ 1] - > I magem do bot o
aArray[ n] [ 2] - > bl oco de cdi go cont endo a ao do bot o
aArray[ n] [ 3] - > t t ul o do bot o
nRecn o Regi st ro a ser posi ci onado aps a execuo do bot o Ok.
cAl i as
Ali as do regi st r o a ser posi ci onado aps a execuo do bot o
Ok. Se o parmet r o nRecno for i nformado, o cAl i as passa ser
obri gat ri o.

E Apar nci a:





- 334 -

ADVPL Compl et o


Ex empl o: Ut i l i zao da f uno Enchoi ceBar ( )


#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 Compl et o



30.3.2. TBar ( )

Cl asse de obj et os vi suai s que permi t e a i mpl ement ao de um component e do t i po barr a de
bot es para a part e superi or de uma j anel a previ ament e defi ni da.

E Si nt ax e: New ( oWnd, nBt nWi dt h, nBt nHei ght , l 3D, cMode, oCur sor , cResour ce,
l NoAut oAdj u st )

E Ret or no: oTBar obj et o do t i po TBar ( )

E Par met r os:

oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser
cri ado.
nBt nWi dt h Numri co, opci onal . Lar gura do bot o cont i do na barr a
nBt nHei ght Numri co, opci onal . Al t ura do bot o cont i do na barra
l 3D Lgi co, opci onal . Defi ne t i po da barra
cMode No ut i lizado.
oCur sor
Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e a
barra.
cResour ce
Caract er , opci onal . I magem do r ecurso a ser i nseri do como
fundo da bar ra.
l NoAut oAdj u st Lgi co.

E Apar nci a:





Ex empl o: Ut i l i zao da f uno Enchoi ceBar ( )


#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 Compl et o



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. But t onBar

A si nt axe But t on Bar a forma cl ssi ca ut ili zada na li nguagem ADVPL para i mpl ement ar um
obj et o da cl asse TBar( ) , o qual possui as caract erst i cas menci onadas no t pi co ant eri or .

E Si nt ax e:


DEFI NE BUTTONBAR oBar SI ZE nWi dt h, nHei ght 3D MODE OF oDl g
CURSOR


E Ret or no: ( ) .

E Par met r os:

oBar Obj et o do t i po TBar( ) que ser cri ado com a ut i li zao da
si nt axe But t onBar( ) .
nWi dt h Numri co, opci onal . Lar gura do bot o cont i do na barr a.
nHei ght Numri co, opci onal . Al t ura do bot o cont i do na barra.
3D Se defi ni do habilit a a visuali zao em 3D da barra de bot es.
oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser
cri ado.
MODE Defi ne a forma de ori ent ao do obj et o But t onBar ut ili zando
os segui nt es t ermos pr- defi ni dos:
TOP, BOTTOM, FLOAT

CURSOR Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e
a barr a.


- 337 -

ADVPL Compl et o


A si nt axe But t onBar requer a adi o dos bot es como recur sos adi ci onai s da barr a
previ ament e defi ni da ut ilizando a si nt axe abai xo:

E Bot es: BUTTON RESOURCE

E Si nt ax e adi ci onal :


DEFI NE BUTTON RESOURCE cBi t Map OF oBar ACTI ON cAcao TOOLTI P
cTex t o


E Par met r os:

cBi t Map Nome da i magem di sponvel na apli cao.
oBar Obj et o do t i po TBar( ) no qual o bot o ser adi ci onado.
cAcao Funo ou l i st a de expr esses que det ermi na a ao que ser
real i zada pel o bot o.
cTex t o Text o no est il o t ool t i p t ext que ser exi bi do quando o
cursor do mouse for posi ci onado sobre o bot o na barra de
ferrament as.

E Apar nci a:





Ex empl o: Ut i l i zao da si nt ax e But t on Bar


#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 Compl et o



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 Compl et o



30.3.4. I magens pr - def i ni das par a as bar r as de bot es

Conforme menci onado nos t pi cos ant eri ores, os bot es vi suai s do t i po bar ra de bot es
permi t em a defi ni o de i t ens com aes e i magens vi ncul adas.

Dent r e os obj et os e funes menci onados, foi cit ada a Enchoi ceBar( ) , a qual permi t e a adi o
de bot es adi ci onai s at ravs do parmet r o aBu t t on, sendo que os i t ens dest e ar ray devem
possui r o segui nt e format o:

E Si nt ax e: AADD( aBut t ons,{ cBi t Map, bAcao, cText o} )

E Est r ut u r a:

cBi t Map
Nome da i magem pr- defi ni da exi st ent e na apl icao ERP que
ser vi ncul ada ao bot o.
bAcao
Bl oco de cdi go que defi ne a ao que ser execut ada com a
ut ili zao do bot o.
cTex t o
Text o no est il o t ool t i p t ext que ser exi bi do quando o cursor
do mouse for posi ci onado sobr e o bot o na bar ra de
ferrament as.

E Al gun s Bi t Maps di sponv ei s:


DESTI NOS

DI SCAGEM

EDI T

EDI TABLE

EXCLUI R

FORM

GRAF2D

GRAF3D

LI NE

NOTE

OBJETI VO

OK

PENDENTE

PRECO

PRODUTO

S4SB0 14N

S4WB00 1N

S4WB00 5N

S4WB00 6N

S4WB00 7N

S4WB00 8N

S4WB00 9N

S4WB01 0N

S4WB01 1N

S4WB01 3N

S4WB01 4A

S4WB01 6N

SI MULACA

VENDEDOR

USER

E Ex empl o:


AADD(aButtons,{"USER",{||AllwaysTrue()},"Usurio"})



- 340 -

ADVPL Compl et o



APNDI CES

BOAS PRTI CAS DE PROGRAMAO

31. Ar r edondament o

Al gumas operaes numri cas podem causar di ferenas de ar r edondament o. I sso ocor r e
devi do a di ferenas no armazenament o de vari vei s numri cas nos di versos pr ocessadores,
di ferena est a, i ncl usi ve, pr esent e no ADVPL, mesmo ant es do surgi ment o do Pr ot heus.

Para evi t ar esses probl emas de arr edondament o, deve ser ut ili zada a funo Round( ) ,
pri nci pal ment e ant es de r eali zar uma comparao e ant es de se ut ili zar a funo I nt ( ) .

Desse modo, assegura- se que o resul t ado ser cor r et o i ndependent ement e do pr ocessador ou
pl at aforma.

Ex empl o 01 :


If (Valor/30) == 50 // pode ser falso ou invlido
If Round(Valor/30, 0) == 50 // correto


Ex empl o 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. Ut i l i zao de I dent ao

obri gat ri a a ut ilizao da i dent ao, poi s t orna o cdi go mui t o mai s l egvel . Vej a os
exempl os abai 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 Compl et o




A ut ili zao da i dent ao segui ndo as est rut uras de cont r ol e de fl uxo ( whil e, I F, caso et c.)
t orna a compr eenso do cdi go mui t o mai s fci 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


Para i dent ar o cdi go ut ili ze a t ecl a < TAB> e na ferrament a DEV- St udi o, a qual pode ser
confi gurada at ravs da opo Pr efer nci as :



- 342 -

ADVPL Compl et o




33. Capi t ul ao de Pal av r as- Chave

Uma conveno ampl ament e ut i lizada a de capi t ul ar as pal avras chaves, funes, vari vei s e
campos ut ili zando uma combi nao de caract er es em mai scul o e mi nscul o, vi sando facili t ar
a l ei t ura do cdi go font e. O cdi go a segui r:


Local ncnt w h i l e ( ncnt + + < 1 0 ) nt ot al + = ncnt * 2 enddo


Fi cari a melhor com as pal avras chaves e vari vei s capi t ul adas:


Local n Cnt Whi l e ( nCnt + + < 1 0 ) nTot al + = nCnt * 2 EndDo




Para funes de mani pul ao de dados que comecem por db , a capi t ulao
s ser efet uada aps o db :

E dbSeek ( )
E dbSel ect Ar ea( )


33.1. Pal av r as em mai scul o

A regra ut i lizar caract er es em mai scul o para:

E Const ant es:


# defi ne NUMLI NES 60 # defi ne NUMPAGES 1000


E Var i v ei s de memr i a:


M- > CT2_CRCONV M- > CT2_MCONVER : = Cri aVar( "CT2_CONVER")


E Campos:


SC6- > C6_NUMPED


E Quer y s:


SELECT * FROM.. .


- 343 -

ADVPL Compl et o



34. Ut i l i zao da Not ao Hngar a

A not ao hngara consi st e em adi ci onar os prefi xos aos nomes de vari vei s, de modo a
faci l ment e se i dent i fi car seu t i po. I st o facili t a na cri ao de cdi gos- font e ext ensos, poi s
usando a Not ao Hngara, voc no pr eci sa fi car o t empo t odo vol t ando defi ni o de uma
vari vel para se l embrar qual o t i po de dados que deve ser col ocado nel a. Vari vei s devem
t er um pr efi xo de Not ao Hngara em mi nscul as, segui do de um nome que i dent i fi que a
funo da vari vel , sendo que a i ni ci al de cada pal avra deve ser mai scul a.
obri gat ri a a ut ilizao dest a not ao para nomear vari vei s.
Not ao Ti po de dado Ex empl o
a Array aVal ores
b Bl oco de cdi go bSeek
c Caract er cNome
d Dat a dDat aBase
l Lgi co l Cont i nua
n Numri co nVal or
o Obj et o oMai nWindow
x I ndefi ni do xCont eudo

35. Tcni cas de pr ogr amao ef i ci ent e

Para o desenvol vi ment o de si st emas e a pr ogramao de r ot i nas, sempr e esperado que
qual quer cdi go escri t o sej a:

O Funci on al ment e cor r et o
O Ef i ci ent e
O Legv el
O Reut i l i zv el
O Ex t ensv el
O Por t v el

Aps anos de experi nci a na ut ili zao de li nguagens padro xBase e do desenvol vi ment o da
linguagem ADVPL, al gumas t cni cas para uma progr amao ot i mizada e efi ci ent e foram
reconheci das. A ut ili zao das t cni cas a segui r, vi sa buscar o mxi mo apr ovei t ament o dos
recursos da l inguagem com o obj et i vo de cri ar programas com est as car act erst i cas.

Cr i ao de f unes segundo a necessi dade

Observe o cdi go de exempl o:


User Function GetAnswer(lDefault)
Local lOk
lOk := GetOk(lDefault)
If lOk
Return .T.
Else
Return .F.
Endif
Return nil


- 344 -

ADVPL Compl et o




Ut ilizando- se apenas o cri t ri o "a funo funci ona corr et ament e?", a funo Get Answer
perfei t a. Recebe um parmet ro l gi co com a respost a padro e r et orna um val or l gi co
dependent e da opo escol hi da pel o usuri o em uma funo de di l ogo "si m/ no" desi gnada
para i sso. Pode ent r et ant o ser mel horada, part i cul arment e se efi ci ncia for consi derada como
um cri t ri o para um cdi go mel hor. Efi ci ncia t i pi cament e envol ve a ut ili zao de poucos
recursos de mqui na, poucos chamadas de funes ou t ornar mai s rpi do um pr ocesso.

Segundo esse raci ocni o, poderi 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 apri morado confor me abai xo:


User Function GetAnswer(lDefault)
Return GetOk(lDefault)


Com a ot i mi zao do cdi go da funo Get Answer( ) , pode faci l ment e veri fi car que a mesma
no r eal iza nada adi ci onal chamada de Get Ok( ) , podendo ser subst i t uda por uma chamada
di ret a dest a, cont i nuando a funci onar cor ret ament e.

Codi f i cao aut o- document v el

Nenhum coment ri o subst i t ui um cdi go cl arament e escri t o, e est e no um aci dent e.
Consi der e o exempl o:


cVar := " " // 11 espaos


O t amanho da vari vel cVar no evi dent e por si s e no faci lment e veri fi cado. Est es
mesmos 10 espaos est ari am mai s bvi os e ai nda assi m garant i dos se a inst ruo fosse escri t a
como:


cVar := Space(11)


O mesmo pri ncpi o pode ser apli cado para qual quer st ri ng l onga de caract eres r epet i dos. A
funo Repli cat e pode ser ut ilizada como a segui r:


cVar := Replicate( "*", 80 )


Est e t i po de programao dei xa o cdi go fci l de di git ar, fci l de l er e mai s fl exvel .



- 345 -

ADVPL Compl et o



Ut i l i zao de sol ues si mpl es

Si mpli ci dade na cri ao de i nst rues t orna a programao e at mesmo a execuo mai s
rpi da. Consi der e a l i nha de cdi go:


If nVar > 0 .Or. nVar < 0


Se o val or da vari vel nVar for i gual a zero ( 0) no moment o da execuo dest a l inha de
cdi go, ambas as comparaes separadas pel o operador l gi co .Or. sero efet uadas: Aps ser
avali ada, a pri mei ra comparao i r fal har. A segunda comparao ser ent o avali ada e
fal har t ambm. Como resul t ado, o cdi go exi st ent e dent ro da est rut ura de fl uxo I f no ser
execut ado. Tal cdi go soment e ser execut ado quando o val or dest a vari vel for mai or OU
menor do que zero. Ou sej a, sempr e que for DI FERENTE de zero, o que t orna a li nha a segui r
mai s efi ci ent e:


If nVar != 0


Est e t i po de al t erao t orna o cdi go mai s l egvel e o pr ocessament o mai s rpi do, evi t ando a
avali ao de i nst rues desnecessari ament e.

Exi st em out ras si t uaes onde a si mpli fi cao pode ser ut ili zada. A expresso de aval i ao a
segui r:


If cVar == "A" .Or. cVar == "B" .Or cVar == "C" .Or. cVar == "D"


Pode ser subst i t udo pel o operador de cont eno:


If cVar $ "ABCD"


Opo por f l ex i bi l i dade

A mel hor sol uo aquel a que envol ve o probl ema i medi at o e previ ne probl emas no fut ur o.
Consi der e o exempl o:


@nRow,nCol PSAY cVar Picture "!!!!!!!!!!!!!!!!!!!!"


Excet o cont ando- se os caract eres, no exi st e manei ra de saber se o nmero de car act er es de
excl amao o esperado. Enquant o i st o um probl ema, exi st em al go mai s grave. A expresso
de pi ct ure est t i ca. Se no fut ur o for necessri o aj ust ar o t amanho da vari vel cVar, ser
necessri o l ocali zar t odos os l ugares no cdi go onde est a mscara de pi ct ure est sendo
ut ili zada para aj ust e manual .




- 346 -

ADVPL Compl et o



Exi st e uma opo de sol uo de aut o- aj ust e di sponvel que fcil de di git ar e t em a garant i a
de execut ar a t ar efa i gual ment e ( t ornar t odos os caract er es mai scul os) :


@nRow,nCol PSAY cVar Picture "@!"


Opo da pr at i ci dade ao dr ama

Se a sol uo par ece compl exa, pr ovavel ment e porque o cami nho escol hi do est l evando a
i sso. Deve- se sempr e se pergunt ar porque al gum desenvol veri a uma linguagem que requi si t e
t ant os comandos compli cados para fazer al go si mpl es. Na grande mai ori a dos casos, exi st e
uma sol uo mai s si mples. O exempl o abai xo dei xa i sso bem cl aro:


@ 10,25 Say Substr(cCep,1,5) + "-" + Substr(cCep,6,3) Picture "!!!!!!!!!"


Est e cdi go pode ser escri t o de uma forma muit o mai s si mpl es, confor me demonst rado abai xo:


@ 10,25 Say cCep Picture "@R 99999-999"


Ut i l i zao de oper ador es de i ncr ement o/ decr ement o

Ut ilizados devi dament e, os operador es de i ncrement o e decrement o t ornam o cdi go mai s fcil
de l er e possi vel ment e um pouco mai s rpi dos. Ao cont rri o de escrever adi es si mpl es como:


nVar := nVar + 1
nVar := nVar -1


Pode- se escrev- l as assi m:


++nVar
--nVar


Deve- se apenas t omar cui dado com a precednci a dest es operador es, poi s o "+ + " ou o " - - "
podem aparecer ant es ou depoi s de uma varivel , e em al guns casos quando a vari vel for
ut ili zada dent ro de uma expresso, a prefi xao ou sufi xao dest es operador es afet ar o
resul t ado. Para mai ores det al hes, consul t e a document ao de operador es da l i nguagem
ADVPL.


- 347 -

ADVPL Compl et o



Ev i t ar passos desnecessr i os

Exi st e uma di ferena ent re um bom hbi t o e perda de t empo. Al gumas vezes est es concei t os
podem est ar mui t o pr xi mos, mas um modo de di fer enci - l os bal ancear os benefci os de
real i zar al guma ao cont ra o pr obl ema que resul t ari a se no fosse execut ada. Obser ve o
exempl o:


Local nCnt := 0
For nCnt := 1 To 10
<cdigo>
Next nCnt


I ni ci ali zar a vari vel no moment o da decl arao no um probl ema. Se o 0 fosse necessri o
no exempl o, t eri a sido t il a i ni ci alizao na decl arao. Mas nest e caso a est rut ura de
repet i o For .. .Nex t at ri bui o seu val or i medi at ament e com 1, port ant o no houve ganho em
at ri bui r a vari vel com 0 no comeo.

Nest e exempl o no h nenhum pont o negat i vo e nada er rado ocorr er se a vari vel no for
i ni ci alizada, port ant o aconsel hvel evi t ar est e t i po de i ni ci ali zao, poi s no t orna o cdi go
mai s segur o e t ambm no expr essa a i nt eno do cdi go mai s cl arament e.

Por m not e est e exempl o, onde a vari vel no i ni ci ali zada:


Local nCnt
While ( nCnt++ < 10 )
<cdigo>
EndDo


Em ADVPL, vari vei s no i ni ci ali zadas sempre t em seu val or cont endo nul o ( nil ) a princpi o, o
que far com que uma exceo em t empo de execuo acont ea quando a i nst ruo de
repet i o whi l e for execut ada.

Di ferent ement e do pri mei ro exempl o, onde a i ni ci ali zao da vari vel no fazi a di ferena
al guma, nest e segundo exempl o a i ni ci alizao absol ut ament e necessri a. Deve- se pr ocurar
i ni ci alizar vari vei s numri cas com zer o ( 0) e vari vei s caract er com st ri ng nul a ( "") apenas
quando real ment e necessri o.




- 348 -

ADVPL Compl et o




Ut i l i zao de al t er n at i v as

Quando se est t rabal hando em uma si mples r ot i na, deve- se t omar al gum t empo par a
expl orar duas ou t r s di ferent es abordagens. Quando se est t r abal hando em al go mai s
compl exo, deve- se pl anej ar prot ot i par al gumas a mai s. Consi der e o seguint 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 uma nica l et ra, ( A at E) , foi i nformado para i ndi car a cor de cabel o. Est e
cdi go foi ent o conver t i do e ar mazenado como uma st ri ng. Pode- se not ar que a cor "Pret o"
ser at ri buda se nenhuma out ra opo for verdadei ra.

Uma alt ernat i va que reduz o nvel de i dent ao t orna o cdi go mai s fcil de l er enquant o reduz
o nmero de comandos repl 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 Compl et o



Ut i l i zao de ar qui v os de cabeal ho qu an do necessr i o

Se um arqui vo de cdi go cri ado se refer enci a a comandos para i nt erpr et ao e t rat ament o de
arqui vos XML, est e deve se i ncl ui r o arqui vo de cabeal ho prpri o para t ai s comandos
( XMLXFUN.CH no exempl o) . Por m no deve- se i nclui r arqui vos de cabeal ho apenas por
segurana. Se no se est r efer enci ando nenhuma das const ant es ou ut ilizando nenhum dos
comandos cont i dos em um dest es arqui vos, a i ncl uso apenas t ornar a compi l ao mai s
demorada.

Const ant es em mai scul o

I st o uma conveno que faz sent i do. Em ADVPL, como em C por exempl o, a regra ut i lizar
t odos os caract eres de uma const ant e em mai scul o, a fi m de que possam ser cl arament e
reconheci dos como const ant es no cdi go, e que no sej a necessri os l embrar onde for am
decl arados.

Ut i l i zao de i dent ao

Est e um hbi t o que t odo programador deve desenvol ver. No consome mui t o esforo para
mant er o cdi go ali nhado durant e o t r abal ho, porm quando necessri o pode- se ut ilizar a
ferrament a TOTVS DevSt udi o para a re- i dent ao de cdi go. Para mai or es det al hes, consul t e a
document ao sobre a i dent ao de cdi gos font es di sponvel nos demai s t pi cos dest e
mat eri al .

Ut i l i zao de espaos em br anco

Espaos em branco ext r as t ornam o cdi go mais fci l para a l ei t ura. No necessri o i mensas
reas em br anco, mas agrupar pedaos de cdi go at ravs da ut ili zao de espaos em branco
funci ona mui t o bem. Cost uma- se separar parmet r os com espaos em branco.

Quebr a de l i nh as mu i t o l ongas

Com o obj et i vo de t ornar o cdi go mai s fcil de l er e i mpri mi r, as li nhas do cdi go no devem
est ender o li mi t e da t ela ou do papel . Podem ser "quebradas" em mai s de uma li nha de t ext o
ut ili zando o pont o- e- vrgul a ( ; ) .

Capi t u l ao de pal av r as- chav e

Uma conveno ampl ament e ut i lizada a de capi t ul ar as pal avras chaves, f unes, vari vei s e
campos ut i lizando uma combi nao de caract er es em mai scul o e mi nscul o, vi sando facili t ar
a l ei t ura do cdi go font e.

Avali ando o cdi go a segui r:


local ncnt
while ( ncnt++ < 10 )
ntotal += ncnt * 2
enddo




- 350 -

ADVPL Compl et o



O mesmo fi cari a mui t o mai s cl aro se r e- escri t o conforme abai xo:


Local nCnt

While ( nCnt++ < 10 )
nTotal += nCnt * 2
EndDo


Ut i l i zao da Not ao Hngar a

A Not ao Hngara mui t o comum ent re pr ogramador es xBase e de out ras li nguagens. A
document ao do ADVPL ut ili za est a not ao para a descri o das funes e comandos e
aconsel hvel sua ut ilizao na cri ao de rot i nas, poi s aj uda a evi t ar pequenos err os e facili t a
a l ei t ura do cdi go. Para mai ores det al hes, consul t e a document ao sobr e a ut ili zao da
Not ao Hngara de cdi gos font es di sponvel nos demai s t pi cos dest e mat eri al .

Ut i l i zao de n omes si gn i f i cant es par a v ar i v ei s

A pri nci pal vant agem da li berdade na cri ao dos nomes de vari vei s a facili dade de
i dent i fi cao da sua ut ili dade. Port ant o deve- se ut ili zar essa facili dade o mxi mo possvel .
Nomes sem sent i do apenas t ornaro di fcil a ident i fi cao da ut ili dade de uma det ermi nada
vari vel , assi m como nomes ext r emament e curt os. Nem sempr e a ut ili zao de uma vari vel
chamada i a mel hor sada. Cl aro, no convm cri ar uma vari vel com um nome mui t o l ongo
que ser ut ili zada como um cont ador, e r efer enci ada mui t as vezes no cdi go. O bom senso
deve ser ut ili zado.

Cri ar vari vei s como nNumer o ou dDat a t ambm no aj udam na ident i fi cao. A Not ao
Hngara j est sendo ut ilizada para i sso e o obj et i vo do nome da vari vel deveri a ser
i dent i fi car sua ut ili zao, no o t i po de dado ut ili zado. Deve- se procurar subst i t ui r t ai s
vari vei s por al go como nTot al ou dCompra.

O mesmo vli do para nomes de funes, que devem descrever um pouco sobr e o que a
funo faz. Novament e nomes ext r emament e curt os no so aconsel hvei s.

Ut i l i zao de coment r i os

Coment ri os so mui t o t ei s na document ao de pr ogramas cri ados e para faci li t ar a
i dent i fi cao de pr ocessos i mport ant es no fut ur o e devem sempr e ser ut ilizados.

Sempr e que possvel , funes cri adas devem t er uma breve descri o do seu obj et i vo,
parmet ros e ret orno. Al m de servi r como document ao, os coment ri os embel ezam o
cdi go ao separar as funes umas das out ras. Os coment ri os devem ser ut ilizados com bom
senso, poi s r eescrever a si nt axe ADVPL em port ugus t orna- se apenas perda de t empo:


If nLastKey == 27 // Se o nLastKey for igual a 27



- 351 -

ADVPL Compl et o



Cr i ao de men sagen s si st mi cas si gn i f i cant es e con si st ent es

Sej a oferecendo assi st nci a, exi bi ndo mensagens de avi so ou mant endo o usuri o i nformado
do est ado de al gum processo, as mensagens devem r efl et i r o t om geral e a i mport nci a da
apli cao. Em t ermos gerai s, deve- se evi t ar ser mui t o i nformal e ao mesmo t empo mui t o
t cni co.


"Aguarde. Reindexando (FILIAL+COD+ LOCAL) do arquivo: \DADOSADV\SB1990.DBF"


Esse t i po de mensagem pode dar i nformaes demai s para o usurio e dei x- l o sent i ndo- se
desconfort vel se no souber o que si gni fi ca "rei ndexando", et c. E de fat o, o usuri o no devi a
ser i ncomodado com t ai s det al hes. Apenas a frase "Aguarde, i ndexando." funci onaria
corr et ament e, assi m como pal avras "pr ocessando" ou "r eorgani zando".

Out ra boa i di a evi t ar a r efer enci a a um i t em corr ent e de uma t abel a como um " r egi st ro":


"Deletar este registro?"


Se a operao est i ver sendo efet uada em um arqui vo de cli ent es, o usuri o deve ser
quest i onado sobre a remoo do cli ent e cor rent e, se possvel informando val ores de
i dent i fi cao como o cdi go ou o nome.

Ev i t ar abr ev i ao de coman dos em 4 l et r as

Apesar do ADVPL supor t ar a abr evi ao de comandos em quat r o l et r as ( por exempl o, r epl no
l ugar de r epl ace) no h necessi dade de ut ili zar t al funci onali dade. I st o apenas t orna o cdi go
mai s di fcil de l er e no t orna a compi l ao mai s rpi da ou si mpl es.

Ev i t ar " di sf ar ces" no cdi go

No deve- se cri ar const ant es para expr esses compl exas. I st o t ornar o cdi go mui t o di fcil de
compreender e poder causar er r os pri mri os, poi s pode- se i magi nar que uma at ri bui o
efet uada a uma vari vel quando na verdade h t oda uma expr esso di sfarada:


#define NUMLINES aPrintDefs[1]
#define NUMPAGES aPrintDefs[2]
#define ISDISK aReturn[5]

If ISDISK == 1
NUMLINES := 55
Endif

NUMPAGES += 1




- 352 -

ADVPL Compl et o



A i mpresso que se t em aps uma l ei t ura dest e cdi go de que val or es est o sendo at ri budos
s vari vei s ou que const ant es est o sendo ut ilizadas. Se o obj et i vo fl exi bilidade, o cdi go
ant eri or deve ser subst i t udo por:


#define NUMLINES 1
#define NUMPAGES 2
#define ISDISK 5

If aReturn[ISDISK] == 1
aPrintDefs[ NUMLINES ] := 55
Endif

aPrintDefs[ NUMPAGES ] += 1


Ev i t ar cdi go de segu r an a desnecessr i o

Dada sua nat ur eza bi nri a, t udo pode ou no acont ecer dent r o de um comput ador . Adi ci onar
pedaos de cdi go apenas para "garant i r a segurana" fr eqent ement e ut ilizado como uma
descul pa para evi t ar cor ri gi r o pr obl ema r eal . I st o pode i nclui r a checagem para val i dar
i nt erval os de dat as ou para t i pos de dados corr et os, o que comument e ut ilizando em
funes:


Static Function MultMalor( nVal )
If ValType( nVal ) != "N"
nVal := 0
Endif
Return ( nVal * nVal )


O ganho i rri sri o na checagem do t i po de dado do parmet ro j que nenhum pr ograma
corr et ament e escri t o em execuo poderi a envi ar uma st ring ou uma dat a para a funo. De
fat o, est e t i po de "capt ura" o que t orna a depurao di fcil , j que o ret orno ser sempr e um
val or vl i do ( mesmo que o par met ro r ecebi do sej a de t i po de dado i ncor ret o) . Se est a
capt ura no t i ver si do efet uada quando um possvel er r o de t i po de dado i nvli do ocor rer, o
cdi go pode ser cor ri gi do para que est e er r o no mai s acont ea.

I sol ament o de st r i ngs de t ex t o

No caso de mensagens e st ri ngs de t ext o, a cent rali zao um bom negci o. Pode- se col ocar
mensagens, cami nhos para arqui vos, e mesmo out ros val or es em um l ocal especfi co. I st o os
t orna acessvei s de qual quer l ugar no programa e fcei s de ger enci ar.

Por exempl o, se exi st e uma mensagem comum como " I mpr i mi n do, por f av or aguar de.. . "
em mui t as part es do cdi go, corr e- se o ri sco de no segui r um padro para uma das
mensagens em al gum lugar do cdi go. E mant - l as em um ni co l ugar, como um arqui vo de
cabeal ho, t orna fci l a produo de document ao e a i nt ernaci onalizao em out r os i di omas.



- 353 -

ADVPL Compl et o




LI STAS DE EXERC CI OS

Mdul o 04.1.: Desenvol vendo apl i caes em ADVPL



01

Desenvol ver um progr ama que i mpl ement e a funo AxCadast ro( ) para a
t abel a padro do si st ema SA2 Cadast ro de Fornecedor es.



02

I mpl ement ar no AxCadast ro( ) desenvol vi do no i t em ant eri or as funes de
vali dao de al t erao e vali dao de excl uso.



03

Desenvol ver um programa que i mpl ement e a funo Mbrowse( ) ut ili zando as
funes padres de cadast ro, para a t abel a padro do si st ema SA2 Cadast ro
de Fornecedor es.




- 354 -

ADVPL Compl et o


04

I mpl ement ar no Mbr owse( ) desenvol vi do no i t em ant eri or a funo de
l egenda.


05

I mpl ement ar no Mbrowse( ) desenvol vi do no i t em ant eri or uma funo
especfi ca de i ncluso ut ilizando os r ecur sos adi ci onai s da funo AxI ncl ui( ) .


06

Desenvol ver um pr ogr ama que i mpl ement e uma MarkBr owse ut i lizando as
funes padres de cadast ro, para a t abel a padro do si st ema SA2 Cadast ro
de Fornecedor es.


07

I mpl ement ar na Mar kBr owse( ) desenvol vi da no i t em ant eri or uma funo para
excl uso de ml t i pl os regi st ros da t abel a padro do si st ema SA2 Cadast ro
de Fornecedor es.



- 355 -

ADVPL Compl et o


08

Desenvol ver um programa que i mpl ement e uma Mar kBr owse( ) para a t abel a
padro do si st ema SA1 Cadast r o de Cli ent e, cont empl ando uma funo que
permi t a a vi suali zao dos dados pri nci pai s de ml t ipl os cl i ent es sel eci onados.


09

Desenvol ver um progr ama que i mpl ement e uma Model o2( ) para a t abel a
padro do si st ema SX5 Cadast r o de t abel as, cont empl ando a funci onali dade
de i ncl uso.


10

I mpl ement ar na Model o2( ) desenvol vi da no it em ant eri or as funci onali dades
de Vi sualizao, Al t erao e Excl uso.


11
Desenvol ver um programa que i mpl ement e uma Model o3( ) para as t abel as
padres do si st ema SF1 Cabeal ho do Document o de Ent r ada e SD1 I t ens
do document o de ent rada, cont empl ando as funci onali dades de Vi sualizao e
I ncl uso.


- 356 -

ADVPL Compl et o



12

I mpl ement ar na Model o3( ) desenvol vi da no i t em ant eri or as funci onalidades e
Al t erao e Excl uso.


13

Desenvol ver um progr ama que cri e um arqui vo de t rabal ho com est rut ura
si mil ar ao SA1 e receba as i nformaes dest a t abel a.


14

I mpl ement ar na r ot i na desenvol vi da no i t em ant eri or, um Mar kBr owse que
permi t e a sel eo e vi suali zao de apenas um r egi st ro sel eci onado.


15

Desenvol ver um progr ama que i mpl ement e um r el at ri o que permi t a a
i mpresso de uma li st agem si mpl es dos dados da t abel a padro SA1
Cadast r o de cl i ent es.



- 357 -

ADVPL Compl et o


16

Desenvol ver um progr ama que i mpl ement e um r el at ri o que permi t a a
i mpresso de uma l i st agem si mpl es das not as fi scai s e seus r espect i vos i t ens.


17

Desenvol ver um programa que real i ze a export ao dos i t ens marcados no
SA1 Cadast ro de Cli ent es para um arqui vo no format o .TXT em um di ret ri o
especi fi cado pel o usuri o.


18

Desenvol ver um programa que r eal i ze a i mport ao das i nformaes cont i das
em um arqui vo no format o .TXT sel eci onado pel o usuri o e as at ual ize no SA1
Cadast r o de Cl i ent es.


19

Desenvol ver o mesmo programa do i t em ant eri or ut ili zando as funes da
famli a FT.



- 358 -

ADVPL Compl et o



Mdul o 04.2.: Of i ci na de Pr ogr amao I


20

Desenvol ver uma apli cao vi sual que i mpl ement e cada um dos component es
di sponvei s no font e DI ALOG_OBJETOS.PRW.




21

I mpl ement ar as r ot i nas de i mport ao e expor t ao desenvol vi das nos i t ens
ant eri or as r guas de pr ocessament o mai s adequadas.




22

Subst i t ui r em uma das r ot i nas desenvol vidas ant eri orment e a funo
Pergunt e( ) pel a funo ParamBox( ) .




- 359 -

ADVPL Compl et o



23

Desenvol ver uma rot i na que i mpl ement ar um Li st Box si mpl es que permi t a
vi suali zar as t abel as cadast radas no SX5 Cadast ro de Tabel as.


25

I mpl ement ar na r ot i na desenvol vi da no i t em ant eri or a opo de vi suali zao
dos i t ens de uma das t abel as sel eci onadas, demonst rando- os em uma Li st Box
Gri d.


26

Desenvol ver uma r ot i na que i mpl ement e uma Model o2( ) ut ilizando os
component es vi suai s necessri os, compl ement ados com os r ecur sos de
rol agem do obj et o Scr ol l Box( ) .



- 360 -

ADVPL Compl et o




Mdul o 05: I nt r oduo a or i ent ao obj et os



27

I mpl ement ar a cl asse Al uno( ) com os mt odos New( ) , BuscaAl uno( ) e
Sal vaAl uno( ) .




28

Desenvol ver a i nt erface vi sual para int eragi r com a cl asse Al uno( )
i mpl ement ada ant eri or ment e.




29

I mpl ement ar na rot i na desenvol vi da no i t em ant eri or os r ecursos necessri os
para persi st i r as i nfor maes e r ecuperar os dados de i t ens pr evi ament e
sal vos.




- 361 -

ADVPL Compl et o




Mdul o 06: ADVPL or i ent ado obj et os I



30

Desenvol ver uma rot i na que i mpl ement e uma Enchoi ce( ) para o SA1
Cadast r o de cl i ent es.


31

Adequar a r ot i na desenvol vi da no i t em ant eri or para permi t i r o uso da cl asse
de obj et os MsMGet ( ) .



32

Desenvol ver uma i nt erface de cadast ro combi nando os r ecursos de um obj et o
MsMGet ( ) e um obj et o MsNewGet Dados( ) causando o mesmo efei t o de uma
i nt erface no padr o da Model o3( ) .





- 362 -

ADVPL Compl et o



33

I mpl ement ar na r ot i na desenvol vi da no it em ant eri or o uso da funo
Enchoi ceBar( ) com um bot o que permi t a ao usuri o vi suali zar um dos i t ens
exi bi dos na i nt erface.


34

Adequar a r ot i na desenvol vi da no it em ant eri or de for ma a subst i t ui r o uso da
funo Enchoi ceBar( ) pel a cl asse de obj et o TBar( ) .


35

Convert er a si nt axe cl ssi ca ut ili zada no font e DI ALOG_OBJETOS. PRW para a
si nt axe ori ent ada a obj et os.


36

Convert er a si nt axe cl ssi ca dos font es Li st Box para a si nt axe ori ent ada a
obj et os.



- 363 -

ADVPL Compl et o



Pr oj et o: Av al i ao pr t i ca do t r ei nament o de ADVPL I nt er medi r i o

Obj et ivos do proj et o

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 ent rega e apresent ao

E Dever ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos
necessrios. A avaliao do projeto 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 proj et o

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 proj et o

Desenvolver uma aplicao utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:

01

Efet ue a l ei t ura de um arqui vo em format o . TXT com os dados necessri os
para real i zar o cadast ro de fornecedor es no si st ema Pr ot heus, e grave est as
i nformaes em um arqui vo int ermedi ri o.


02
A part i r da sel eo dos r egi st ros di sponvei s nest e arqui vo i nt ermedi ri o, o
usuri o poder:

O I mpri mi r os i t ens sel eci onados;
O Efet i var os i t ens sel eci onados, gravando- os no SA2 Cadast r o de
Fornecedores;
O Est ornar i t ens j efet i vados, el i mi nando- os do SA2 - Cadast r o de
Fornecedores;
O Excl ui r os regi st ros sel eci onados do arqui vo i nt ermedi ri o;
O Excl ui r t odos os r egi st r os i mport ados de um arqui vo em for mat o .TXT
especi fi cado.
O Vi suali zar as i nformaes do r egi st ro gerado no arqui vo i nt ermedi ri o;
O Vi suali zar o r egi st ro gerado no SA2 Cadast ro de Fornecedor es a
part i r de um i t em sel eci onado no arqui vo i nt er medi ri o.



- 364 -

ADVPL Compl et o



MDULO 07: ADVPL Or i ent ado obj et os I I

Nest e mdul o sero t r at ados os component es e obj et os da i nt erface vi sual da li nguagem
ADVPL, permi t i ndo o desenvol vi ment o de apli caes com i nt erfaces grfi cas com si nt axe
ori ent ada a obj et os.

36. Component es da i nt er f ace vi sual do ADVPL

A linguagem ADVPL possui di versos component es vi suai s e auxiliares, os quai s podem ser
represent ados ut i lizando a est rut ura abai xo:

. Cl asses da I nt er f ace Vi sual




Tsr vobj ect
. Cl asses Aux i l i ar es


Tfont

. Cl asses de Janel as


Msdialog
Tdialog
Twindow

. Cl asses de Component es


Tcont r ol


.
Cl asses de Component es
Vi suai s
Br get ddb
Mscalend
Mscalendgr id
Msselbr
Msworkt ime
Sbut t on
Tbar
Tbit map
Tbr owsebut t on
Tbt nbmp
Tbt nbmp2
Tbut t on
Tcbr owse
Tcheckbox
Tcolor t r iangle
Tcombobox
Tfolder
Tfont
Tget
Tgr oup
Thbut t on
Tibrowser
Tlist box
Tmenu
Tmenubar
Tmet er
Tmsgr aphic
Tmsgbar
Tmult ibt n
Tmult iget
Tolecont ainer
Tpageview
Tpanel
Tr admenu
Tsbr owse
Tsay
Tscr ollbox
Tsimpleedit or
Tslider

- 365 -

ADVPL Compl et o






.
Cl asses de Component es
Vi suai s
Tsplit t er
Tt abs
Tt oolbox
Twbrowse
Vcbrowse

At r i but os comu ns as cl asses de componen t es v i suai s

cCapt i on Tt ul o ou cont edo do obj et o.
cF3
Consul t a F3 ao qual o obj et o est vi ncul ado, quando o
mesmo do t i po get .
cMsg
Mensagem exi bi da na barra de st at us da j anel a pri nci pal
quando o obj et o ganha foco.
cName Nome do obj et o
cTool t i p Mensagem exi bi da quando obj et o exi be seu t ool t i p.
cVar i abl e
Vari vel que receber o cont edo sel eci onado ou di git ado no
obj et o, quando o mesmo for t o t i po get ou si milar.
l Passw or d
I ndi ca se o t ext o di gi t ado no obj et o ser exi bi do no f ormat o
de password, quando o mesmo do t i po get .
l ReadOn l y Fl ag que indi ca se o obj et o pode ou no ser edit ado.
l Show Hi nt
Fl ag que at i va .T. ou desat i va .F. a exi bi o do t ool t i p do
obj et o.
l Vi si bl eCont r ol Se . T. o obj et o vi svel , se .F. o obj et o i nvi svel .
nHei ght Al t ura em pi xel s.
nLef t Coordenada hori zont al em pi xel s.
nTop Coordenada vert i cal em pi xel s.
nWi dt h Largura em pi xel s.
Pi ct ur e
Pi ct ure de di gi t ao do obj et o, quando o mesmo do t i po
get .

Ev ent os comun s as cl asses de compon ent es v i su ai s

bAct i on
Bl oco de cdi go execut ado quando o obj et o ut ilizado,
quando o mesmo do t i po bot o ou si mil ar.
bCh ange
Bl oco de cdi go execut ado quando ocor re uma mundana na
sel eo de i t ens que compe o obj et o, como por exempl o
em l i st as ou gri ds.
bF3
Bl oco de cdi go execut ado quando ut ili zado o r ecurso de
consul t a F3 vi ncul ado ao obj et o.
bGot Focus Execut ado quando obj et o ganha foco.
bl Cl i ck ed
Execut ado quando aci onado cl i ck do bot o esquerdo do
mouse sobr e o obj et o.
bl Dbl Cl i ck
Execut ado quando aci onado dupl o cli ck do bot o esquerdo
do mouse sobr e o obj et o.
bLost Focus Execut ado quando obj et o perde foco.
br Cl i ck ed
Execut ado quando aci onado cl i ck do bot o di rei t o do mouse
sobr e o obj et o.
bVal i d
Execut ado quando o cont edo do obj et o modi fi cado e
dever ser vali dado. Deve ret ornar . T. se o cont edo
vli do e .F. se cont edo i nvli do.
bWhen
Execut ado quando h movi ment ao de foco na j anel a.Se
ret ornar . T. o obj et o cont i nua habilit ado, se ret ornar .F. o
obj et o ser desabili t ado.

- 366 -

ADVPL Compl et o




Cl asses da i nt er f ace v i su al

TSRVOBJECT( )

E Descr i o: Cl asse abst rat a i ni ci al de t odas as cl asses de i nt erface do ADVPL. No deve
ser i nst anci ada di ret ament e.

E Pr opr i edades:

nLef t Coordenada hori zont al em pi xel s.
nTop Coordenada vert i cal em pi xel s.
nWi dt h Largura em pi xel s.
nHei ght Al t ura em pi xel s.
cCapt i on Tt ul o ou cont edo do obj et o.
cTool t i p Mensagem exi bi da quando obj et o exi be seu t ool t i p.
l Show Hi nt
Fl ag que at i va .T. ou desat i va .F. a exi bi o do t ool t i p do
obj et o.
cMsg
Mensagem exi bi da na barra de st at us da j anel a pri nci pal
quando o obj et o ganha foco.
nCl r Tex t Cor do t ext o do obj et o.
nCl r Pane Cor do fundo do obj et o.
bWhen
Execut ado quando h movi ment ao de foco na j anel a.Se
ret ornar . T. o obj et o cont i nua habilit ado, se ret ornar .F. o
obj et o ser desabili t ado.
bVal i d
Execut ado quando o cont edo do obj et o modi fi cado e
dever ser vali dado. Deve ret ornar . T. se o cont edo
vli do e .F. se cont edo i nvli do.
bl Cl i ck ed
Execut ado quando aci onado cl i ck do bot o esquerdo do
mouse sobr e o obj et o.
br Cl i ck ed
Execut ado quando aci onado cl i ck do bot o di rei t o do mouse
sobr e o obj et o.
bl Dbl Cl i ck
Execut ado quando aci onado dupl o cli ck do bot o esquerdo
do mouse sobr e o obj et o.
oWnd Janel a onde o obj et o foi cri ado.
l Vi si bl e Se . T. o obj et o vi svel , se .F. o obj et o i nvi svel .
Car go Cont edo associ ado ao obj et o.
bLost Focus Execut ado quando obj et o perde foco.
bGot Focus Execut ado quando obj et o ganha foco.

E Const r ut or : No pode ser i nst an ci ada.

E Par met r os:

Nen hum -

- 367 -

ADVPL Compl et o



E Mt odos aux i l i ar es:

Set Focu s

O Descr i o: Fora mudana do foco de ent rada de dados para o cont r ole.
O Si nt ax e: Set Focus( )
O Par met r os:

Nen hum -

O Ret or no:

Ni l

Hi de

O Descr i o: Torna obj et o i nvi svel .
O Si nt ax e: Hi de( )
O Par met r os:

Nen hum -

O Ret or no:

Ni l

Show

O Descr i o: Torna obj et o vi svel .
O Si nt ax e: Show( )
O Par met r os:

Nen hum -

O Ret or no:

Ni l

Enabl e

O Descr i o: Habili t a o obj et o.
O Si nt ax e: En abl e( )
O Par met r os:

Nen hum -

O Ret or no:

Ni l


- 368 -

ADVPL Compl et o



Di sabl e

O Descr i o: Desabi li t a o obj et o.
O Si nt ax e: Di sabl e( )
O Par met r os:

Nen hum -

O Ret or no:

Ni l

Ref r esh

O Descr i o: Fora at ualizao ( si ncr oni a) de pr opri edades ent re o programa e o
Prot heus Remot e.
O Si nt ax e: Ref r esh( )
O Par met r os:

Nen hum -

O Ret or no:

Ni l


Ex empl o:


CLASS TCONTROL FROM TSRVOBJECT



- 369 -

ADVPL Compl et o



Cl asses aux i l i ar es

TFONT( )

E Descr i o: Cl asse de obj et os que defi ne a font e do t ext o ut ili zado nos cont rol es
vi suai s.

E Pr opr i edades:

- Herdadas as cl asses superi or es

E Const r ut or : New( [ acName] , [ nPar2] , [ anHeight ] , [ l Par4] , [ al Bol d] , [ nPar6] ,
[ l Par7] , [ nPar8] , [ al I t alic] , [ al Underli ne] )

E Par met r os:

acName Caract er e, opci onal . Nome da font e, o padro Ari al .
nPar 2 Reser vado.
anHei ght Numri co, opci onal . Tamanho da font e. O padr o - 11.
l Par 4 Reser vado.
al Bol d Lgi co, opci onal . Se . T. o est i l o da font e ser negri t o.
nPar 6 Reser vado.
l Par 7 Reser vado.
nPar 8 Reser vado.
al I t al i c Lgi co, opci onal . Se . T. o est i l o da font e ser i t li co.
al Under l i ne Lgi co, opci onal . Se . T. o est i l o da font e ser sublinhado.

E Apar nci a:



Ex empl o:

#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 Compl et o



Cl asses de j an el as

MSDI ALOG( )

E Descr i o: Cl asse de obj et os que deve ser ut ilizada como padr o de j anel a para
ent rada de dados. MSDi al og um t i po de j anel a di l ogo modal , i st o
, no permi t e que out ra j anel a at i va receba dados enquant o est a
est i ver at i va.

E Pr opr i edades:

- Herdadas as cl asses superi or es


E Const r ut or : New( [ anTop] , [ anLeft ] , [ anBot t om] , [ anRi ght ] , [ acCapt i on] ,
[ cPar6] , [ nPar7] , [ l Par8] , [ nPar9] , [ anCl rText ] , [ anCl rBack] , [ oPar12] ,
[ aoWnd] , [ al Pi xel ] , [ oPar15] , [ oPar16] , [ l Par17] )


E Par met r os:

anTop
Numri co, opci onal . Coordenada vert i cal superi or em pi xel s
ou caract er es.
anLef t
Numri co, opci onal . Coordenada hori zont al esquerda em
pi xel s ou caract eres.
an Bot om
Numri co, opci onal . Coordenada vert i cal i nferi or em pi xel s
ou caract er es.
anRi ght
Numri co, opci onal . Coordenada hori zont al di reit a em pi xel s
ou caract er es.
acCapt i on Caract er e, opci onal . Tt ul o da j anel a.
cPar 6 Reser vado.
nPar 7 Reser vado.
l Par 8 Reser vado.
nPar 9 Reser vado.
anCl r Tex t Numri co,opci onal . Cor do t ext o.
anCl r Back Numri co,opci onal . Cor de fundo.
oPar 12 Reser vado.
aoWn d
Obj et o, opci onal . Janel a me da j anel a a ser cri ada, padro
a j anel a pri nci pal do programa.
al Pi x el
Lgi co, opci onal . Se . T. consi dera as coordenadas passadas
em pi xel s, se .F. consi dera caract er es.
oPar 15 Reser vado.
oPar 16 Reser vado.
nPar 17 Reser vado.


- 371 -

ADVPL Compl et o



E Apar nci a:



Ex empl o:

#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


TDI ALOG( )

E Descr i o: Cl asse de obj et os do t i po di l ogo de ent rada de dados, sendo seu
uso reservado. Recomenda- se ut ili zar a cl asse MSDi al og que
herdada dest a cl asse.


E Pr opr i edades:

- Herdadas as cl asses superi or es


E Const r ut or : New( [ anTop] , [ anLeft ] , [ anBot t om] , [ anRi ght ] , [ acCapt i on] ,
[ cPar6] , [ nPar7] , [ l Par8] , [ nPar9] , [ anCl rText ] , [ anCl rBack] , [ oPar12] ,
[ aoWnd] , [ al Pi xel ] , [ oPar15] , [ oPar16] , [ nPar17] , [ anWi dt h] ,
[ anHei ght ] )


E Par met r os:

anTop
Numri co, opci onal . Coordenada vert i cal superi or em pi xel s
ou caract er es.
anLef t
Numri co, opci onal . Coordenada hori zont al esquerda em
pi xel s ou caract eres.
an Bot om
Numri co, opci onal . Coordenada vert i cal i nferi or em pi xel s
ou caract er es.
anRi ght Numri co, opci onal . Coordenada hori zont al di reit a em pi xel s

- 372 -

ADVPL Compl et o


ou caract er es.
acCapt i on Caract er e, opci onal . Tt ul o da j anel a.
cPar 6 Reser vado.
nPar 7 Reser vado.
l Par 8 Reser vado.
nPar 9 Reser vado.
anCl r Tex t Numri co,opci onal . Cor do t ext o.
anCl r Back Numri co,opci onal . Cor de fundo.
oPar 12 Reser vado.
aoWn d
Obj et o, opci onal . Janel a me da j anel a a ser cri ada, padro
a j anel a pri nci pal do programa.
al Pi x el
Lgi co, opci onal . Se . T. consi dera as coordenadas passadas
em pi xel s, se .F. consi dera caract er es.
oPar 15 Reser vado.
oPar 16 Reser vado.
nPar 17 Reser vado.
anWi dt h Numri co, opci onal . Lar gura da j anel a em pi xel s.
anHei ght Numri co, opci onal . Al t ura da j anel a em pi xel s.


E Mt odos aux i l i ar es:

Act i v at e

O Descr i o: At i va ( exi be) o di l ogo. Chamar soment e uma vez est e
mt odo.
O Si nt ax e: Act i vat e( [ bPar1] , [ bPar2] , [ bPar3] , [ al Cent er ed] , [ abValid] ,
[ l Par6] , [ abI ni t ] , [ bPar8] , [ bPar9] )
O Par met r os:

bPar 1 Reser vado.
bPar 2 Reser vado.
bPar 3 Reser vado.
al Cent er ed
Lgi co, opci onal . Se .T. exi be a j anel a cent ralizada, .F.
padro.
abVal i d
Bl oco de cdi go, opci onal . Deve ret ornar .T. se cont edo
do di l ogo vl i do, se ret ornar .F. o di l ogo no fechar
quando sol i ci t ada de encerrar.
l Par 6 Reser vado.
abI ni t
Bl oco de cdi go, opci onal . Execut ado quando o di l ogo
i ni ci a exi bi o.
bPar 8 Reser vado.
bPar 9 Reser vado.

O Ret or no:

Nen hum -


- 373 -

ADVPL Compl et o



End

O Descr i o: Encerr a ( fecha) o di l ogo.
O Si nt ax e: End( )
O Par met r os:

Nen hum -

O Ret or no: Lgi co .T. se o di l ogo foi encer rado.

Lgi co I ndi ca se o di l ogo foi encer rado.


E Apar nci a:



Ex empl o:

#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 Compl et o



TWI NDOW( )

E Descr i o: Cl asse de obj et os do t i po di l ogo pri nci pal de programa. Dever
exi st i r apenas uma i nst nci a dest e obj et o na execuo do programa.

E Pr opr i edades:

- Herdadas das cl asses superi or es


E Const r ut or : New( [ anTop] , [ anLeft ] ,[ anBot t om] , [ anRi ght ] , [ acTi t l e] , [ nPar6] ,
[ oPar7] ,[ oPar8] ,[ oPar9] , [ aoPar ent ] , [ l Par11] , [ l Par12] , [ anCl rFore] ,
[ anCl rBack] , [ oPar15] , [ cPar16] , [ l Par17] , [ l Par18] , [ l Par19] ,
[ l Par20] , [ al Pi xel ] ) ;

E Par met r os:

nTop
Numri co, opci onal . Coordenada vert i cal superi or em pi xel s
ou caract er es.
nLef t
Numri co, opci onal . Coordenada hori zont al esquerda em
pi xel s ou caract eres.
nBot t om
Numri co, opci onal . Coordenada vert i cal i nferi or em pi xel s
ou caract er es.
nRi ght
Numri co, opci onal . Coordenada hori zont al i nferi or em pi xel s
ou caract er es.
cTi t l e Caract er e, opci onal . Tt ul o da j anel a.
nPar 6 Reser vado.
oPar 7 Reser vado.
oPar 8 Reser vado.
oPar 9 Reser vado.
oPar ent Obj et o, opci onal . Janel a me da j anel a corr ent e.
l Par 11 Reser vado.
l Par 12 Reser vado.
nCl r For e Numri co, opci onal . Cor de fundo da j anel a.
nCl r Tex t Numri co, opci onal . Cor do t ext o da j anel a.
oPar 15 Reser vado.
cPar 1 6 Reser vado.
l Par 17 Reser vado.
l Par 18 Reser vado.
l Par 19 Reser vado.
l Par 20 Reser vado.
l Pi x el
Lgi co, opci onal . Se . T. ( padro) consi dera coor denadas
passadas em pi xel s, se .F. consi dera caract er es.


- 375 -

ADVPL Compl et o


E Mt odos aux i l i ar es:

Act i v at e

O Descr i o: At i va ( exi be) a j anel a. Chamar esse mt odo apenas uma vez.
O Si nt ax e: Act i vat e( [ acShow] , [ bPar2] , [ bPar3] , [ bPar4] , [ bPar5] , [ bPar 6] ,
[ abI ni t ] , [ bPar8] , [ bPar9] , [ bPar10] , [ bPar11] , [ bPar12] ,[ bPar13] ,
[ bPar14] , [ bPar15] , [ abVali d] , [ bPar17] , [ bPar18] ) .
O Par met r os:

acShow
Caract er , opci onal . I CONI ZED para j anel a i coni zada ou
MAXI MI ZED para j anel a maxi mizada.
bPar 2 Reser vado.
bPar 3 Reser vado.
bPar 4 Reser vado.
bPar 5 Reser vado.
bPar 6 Reser vado.
abI ni t
Bl oco de cdi go. Execut ado quando j anel a est sendo
exi bi da.
bPar 8 Reser vado.
bPar 9 Reser vado.
bPar 10 Reser vado.
bPar 11 Reser vado.
bPar 12 Reser vado.
bPar 13 Reser vado.
bPar 14 Reser vado.
bPar 15 Reser vado.
abVal i d
Bl oco de cdi go. Execut ado quando a j anel a for sol i ci t ada
de fechar. Dever ret or nar .T. se o cont edo da j anel a for
vli do, ou .F. se no. Se o bl oco r et ornar .F. a j anel a no
fechar.
bPar 17 Reser vado.
bPar 18 Reser vado.


O Ret or no:

Nen hum -


End

O Descr i o: Sol i ci t a encer rament o da j anel a.
O Si nt ax e: End( )
O Par met r os:

Nen hum -

O Ret or no: Lgi co .T. se o di l ogo foi encer rado.

Lgi co I ndi ca se a j anel a foi encerrada.


- 376 -

ADVPL Compl et o


Cent er

O Descr i o: Cent ral iza a j anel a.
O Si nt ax e: Cent er( )
O Par met r os:

Nen hum -

O Ret or no: Lgi co .T. se o di l ogo foi encer rado.

Nen hum -

E Apar nci a:



Ex empl o:

#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 Compl et o



Cl asses de componen t es

TCONTROL( )

E Descr i o: Cl asse abst rat a comum ent r e t odos os component es vi suai s
edi t vei s. No deve ser i nst anci ada di ret ament e.


E Pr opr i edades:

Al i gn
Numri co. Al inhament o do cont r ol e no espao
di sponi bili zado pel o seu obj et o par ent e. 0 = Nenhum
( padro) , 1= no t opo, 2 = no r odap, 3= a esquerda, 4 = a
di rei t a e 5 = em t odo o parent e.
l Modi f i ed
Lgi co. Se .T. i ndi ca que o cont edo da vari vel associ ada
ao cont r ol e foi modi fi cado.
l ReadOn l y
Lgi co. Se .T. o cont edo da vari vel associ ada ao cont r ol e
permanecer apenas para l ei t ura.
hPar ent
Numri co. Handl e ( i dent i fi cador) do obj et o sobr e o qual o
cont r ol e foi cri ado.
bCh ange
Bl oco de cdi go. Execut ado quando o est ado ou cont edo do
cont r ol e modi fi cado pel a ao sobre o cont rol e.

E Const r ut or : No pode ser i nst an ci ada.

E Par met r os:

Nen hum -

E Mt odos aux i l i ar es:

Set Focu s

O Descr i o: Fora mudana do foco de ent rada de dados para o cont r ole.
O Si nt ax e: Set Focus( )
O Par met r os:

Nenhum -

O Ret or no:

Ni l


Ex empl o:


CLASS TSay FROM Tcontrol


- 378 -

ADVPL Compl et o



Cl asses de componen t es v i suai s

BRGETDDB( )

E Descr i o: Cl asse de obj et os vi suai s do t i po Gr i d.

E Pr opr i edades:

+ Herdadas da cl asse superi or
nAt Li nha at ual ment e sel eci onada / posi ci onada no obj et o
nLen Nmer o t ot al de li nhas do obj et o

E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ aHeader s] ,
[ aCol Si zes] , [ oDl g] , [ cFi eld] , [ uVal ue1] , [ uValue2] , [ uChange] ,
[ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCur sor] , [ nCl rFore] , [ nCl rBack] ,
[ cMsg] , [ l Updat e] , [ cAli as] , [ l Pi xel ] , [ bWhen] , [ l Desi gn] , [ bVali d] ,
[ aAl t er] , [ oMot her] )

E Par met r os:

nRow Numri co, opci onal . Coordenada vert i cal
nCol Numri co, opci onal . Coordenada hori zont al
nWi dt h Numri co, opci onal . Lar gura do obj et o
nHei ght Numri co, opci onal . Al t ura do obj et o
bFi el ds Bl oco de cdi go, Li st a de Campos
aHeader s Vet or, Descri o dos campos para no cabeal ho
aCol Si zes Vet or, Largur a das col unas
oDl g
Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever
ser cri ado.
cFi el d Caract er , opci onal . Campos necessri os ao fil t ro
uVal ue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro
uVal ue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro
bCh ange
Bl oco de cdi go, opci onal . Execut ado quando o i t em
sel eci onado al t erado.
bLDbl Cl i ck
Bl oco de cdi go, opci onal . Execut ado quando aci onado dupl o
cli ck do bot o esquerdo do mouse sobr e o cont r ol e.
bRCl i ck No ut i lizado
oFont Obj et o, opci onal . Font e
oCur sor Obj et o, opci onal . Ti po do Cur sor
nCl r For e Numri co, opci onal . Cor do t ext o da j anel a.
nCl r Back Numri co, opci onal . Cor de fundo da j anel a.
cMsg
Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o
obj et o
l Updat e No ut i lizado
cAl i as
Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o
se ut i lizado com Tabel a
l Pi x el
Lgi co, opci onal . Se . T. as coordenadas i nformadas so em
pi xel s, se .F. so em car act eres.
bWhen
Bl oco de cdi go, opci onal . Execut ado quando mudana de
foco de ent rada de dados est sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se no.
l Desi gn No Ut i li zado

- 379 -

ADVPL Compl et o


bVal i d
Bl oco de cdi go, opci onal . Execut ado quando o cont edo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo
for vl i do e .F. quando o cont edo for i nvli do.
aAl t er No Ut i li zado
oMot her No Ut i li zado

E Mt odos aux i l i ar es:

GoUp

O Descr i o: Sal t a uma linha para ci ma.
O Si nt ax e: GoUp( )
O Par met r os:

Nenhum -

O Ret or no:

Ni l

GoDow n

O Descr i o: Sal t a uma linha para bai xo.
O Si nt ax e: GoDow n( )
O Par met r os:

Nenhum -

O Ret or no:

Ni l

GoTop

O Descr i o: Sal t a para pri mei ra linha.
O Si nt ax e: GoTop( )
O Par met r os:

Nenhum -

O Ret or no:

Ni l

GoBot t om

O Descr i o: Sal t a para ult i ma linha.
O Si nt ax e: GoBot t om( )
O Par met r os:

Nenhum -

O Ret or no:

Ni l

- 380 -

ADVPL Compl et o



Row Count

O Descr i o: Ret orna numer o de l i nhas vi si vei s.
O Si nt ax e: Row Count ( )
O Par met r os:

Nenhum -

O Ret or no:

Ni l


E Apar nci a:



- 381 -

ADVPL Compl et o



Ex empl o:

#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 Descr i o: Cl asse de obj et os vi suai s do t i po Cal endri o.

E Pr opr i edades:

+ Herdadas da cl asse superi or
bCh ange
Bl oco de cdi go execut ado na mudana de sel eo de um
di a.
bCh angeMes
Bl oco de cdi go execut ado na mundaa de sel eo de um
ms.
dDi aAt u Di a at ual ment e sel eci onado

E Const r ut or : New( [ nRow] , [ nCol ] , [ oDl g] , [ l CanMult Sel ] )

- 382 -

ADVPL Compl et o



E Par met r os:

nRow Numri co, opci onal . Coordenada vert i cal
nCol Numri co, opci onal . Coordenada hori zont al
oDl g
Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever
ser cri ado.

l CanMul t Sel Logi co, opci onal . Permi t e sel eo de mul t i pl os di as


E Apar nci a:



Ex empl o:

#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 Compl et o



MSCALENDGRI D( )

E Descr i o: Cl asse de obj et os vi suai s do t i po Grade de Perodos.

E Pr opr i edades:

bAct i on
Bl oco de cdi go. Execut ado quando o bot o esquerdo do
mouse pr essi onado.
bRCl i ck
Bl oco de cdi go. Execut ado quando o bot o di r ei t o do mouse
pr essi onado.

E Const r ut or : New( [ aoWnd] , [ anRow] , [ anCol ] , [ anHei ght ] , [ anWi dt h] ,
[ dDat eI ni ] , [ nResol ut ion] , [ abWhen] , [ abAct i on] , [ nDefCol or] ,
[ bRCli ck] , [ lFill All ] )

E Par met r os:

aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser
cri ado.

anRow
Numri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anCol
Numri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
anHei ght Numri co, opci onal . Al t ura do bot o em pi xel s.
anWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s.

dDat eI n i Dat a, Dat a i ni ci al do Calendri o
nResol ut i on Numri co, Resol uo a ser apl i cada na gri d do Cal endri o
abWh en
Bl oco de cdi go, opci onal . Execut ado quando mudana de
foco de ent rada de dados est sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se no.

abAct i on
Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado
quando o bot o for pressi onado.

nDef Col or Numri co, opci onal . Cor do Fundo da Gri d.
bRCl i ck
Bl oco de cdi go, opci onal . Execut ado quando aci onado o
bot o di rei t o do mouse sobr e o cont r ol e.
l Fi l l Al l Lgi co, opci onal . Pr eenche t odo o peri odo

E Mt odos aux i l i ar es:

Add

O Descr i o: Adi ci ona peri odo na Gri d.
O Si nt ax e: Add( cCapt i on, nLi n, nI ni t i al , nFi nal , nCol or, cDescri )
O Par met r os:

cCapt i on Caract er . Descri o a ser i nseri da a esquerda da Gri d
nLi n Numeri co. Numer o da l inha a ser i nseri do o i t em
nI n i t i al Numeri co. Di a i ni ci al
nFi n al Numeri co. Di a Fi nal

- 384 -

ADVPL Compl et o


nCol or Numeri co. Cor que dest acara o i t em
cDescr i Caract er , Opi ci onal . Descri o do t i po t ool t i p( hint ) do i t em

O Ret or no:

Ni l

E Apar nci a:



Ex empl o:

#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 Compl et o



MSSELBR( )

E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Gri d

E Pr opr i edades:

+ Herdadas da cl asse superi or
nAt Li nha at ual ment e sel eci onada / posi ci onada no obj et o
nLen Nmer o t ot al de li nhas do obj et o

E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ aHeader s] ,
[ aCol Si zes] , [ oDl g] , [ cFi eld] , [ uVal ue1] , [ uValue2] , [ uChange] ,
[ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCur sor] , [ nCl rFore] , [ nCl rBack] ,
[ cMsg] , [ l Updat e] , [