You are on page 1of 660

Educao Corporativa

Programao em ADVPL
Completo




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

www. micr osi ga. co m. br



- 2 -

ADVPL Completo



ESTRUTURA DO TREINAMENTO

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

- 3 -

ADVPL Completo


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

- 4 -

ADVPL Completo


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

- 5 -

ADVPL Completo


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

- 6 -

ADVPL Completo


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

- 7 -

ADVPL Completo


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

- 8 -

ADVPL Completo


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

- 9 -

ADVPL Completo


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

- 10 -

ADVPL Completo


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


- 11 -

ADVPL Completo


MDULO 01: Introduo programao

1. Lgica de Programao e Algoritmos

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

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

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

1.1. Lgica de Programao

Lgica

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


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


Seqncia Lgica

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


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


Instrues

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

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

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

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

- 12 -

ADVPL Completo




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


Algoritmo

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

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

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

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

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


1.2. Desenvolvendo algoritmos

Pseudocdigo

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

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

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

- 13 -

ADVPL Completo



Regras para construo do Algoritmo

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

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

Fases

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

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


1.2.1. Estudando algoritmos

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

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

Mascar um chiclete

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

Utilizar um telefone pblico - carto

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

- 14 -

ADVPL Completo



Fritar um ovo

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

Trocar lmpadas

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

Descascar batatas

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

Jogar o jogo da forca

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

Calcular a mdia de notas

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

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


Jogar o jogo da velha contra o algoritmo

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

- 15 -

ADVPL Completo



1.2.2. Teste de mesa

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

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

Algoritmo: Calcular a mdia de notas

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

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


Teste de mesa:

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

ID Nota


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

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

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






- 16 -

ADVPL Completo



2. Estruturas de programao

2.1. Diagrama de bloco

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

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

Simbologia

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

Smbolo Funo

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

Processamento
Processa me nt o e m ger al .

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

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

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

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



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


- 17 -

ADVPL Completo



Representao de algoritmos atravs de diagramas de bloco

Algoritmo 01: Fritar um ovo

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




- 18 -

ADVPL Completo



Algoritmo 02: Calcular a mdia de notas

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

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



- 19 -

ADVPL Completo



2.2. Estruturas de deciso e repetio

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

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

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

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


2.2.1. Estruturas de deciso

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

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

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

IF...ELSE

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

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

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


- 20 -

ADVPL Completo


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

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

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




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



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

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






- 21 -

ADVPL Completo



DO CASE...CASE

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

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

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



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

- 22 -

ADVPL Completo



2.2.2. Estruturas de repetio

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

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

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

WHILE...END

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

Representao: WHILE...END

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






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

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


- 23 -

ADVPL Completo


FOR...TO...NEXT

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

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

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

Representao: FOR...TO...NEXT

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





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

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


- 24 -

ADVPL Completo



MDULO 02: A linguagem ADVPL

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

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

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

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

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

Programao Com Interface Prpria com o Usurio

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

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

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


Programao Sem Interface Prpria com o Usurio

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

- 25 -

ADVPL Completo


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

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

E Programao por Processos

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

E Programao de RPC

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

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

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

E Programao TelNet

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





- 26 -

ADVPL Completo



3. Estrutura de um Programa ADVPL

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

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

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

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


Linhas de Programa

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

E Linhas de Comando

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

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

E Linhas de Comentrio

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

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

- 27 -

ADVPL Completo



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

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

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

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

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

E Linhas Mistas

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

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

E Tamanho da Linha

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

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

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

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

Endi f


- 28 -

ADVPL Completo


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

3.1. reas de um Programa ADVPL

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

# i ncl ude prot he us. ch

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

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

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

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

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

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

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

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

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

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

E r e a de Encer r a me nt o

- 29 -

ADVPL Completo



rea de Identificao

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

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

# i ncl ude prot he us. ch

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

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


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

rea de Ajustes Iniciais

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

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

Corpo do Programa

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

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

- 30 -

ADVPL Completo



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

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


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

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

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


rea de Encerramento

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

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

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










- 31 -

ADVPL Completo



4. Declarao e Atribuio de Variveis

4.1. Tipo de Dados

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

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

Numrico

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

2
43. 53
0. 5
0. 00001
1000000

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

Lgico

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

Caractere

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

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

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

Data

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

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

- 32 -

ADVPL Completo



Array

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

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

Bloco de Cdigo

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


4.2. Declarao de variveis

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

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

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

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

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

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


- 33 -

ADVPL Completo



4.3. Escopo de variveis

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

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

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

O Contexto de Variveis dentro de um Programa

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

Local nNu mero : = 10

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

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

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

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

nNu mer o2 : = 15

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

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



- 34 -

ADVPL Completo



Variveis de escopo local

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


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


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

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

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

Variveis de escopo static

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

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

- 35 -

ADVPL Completo



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

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

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

Variveis de escopo private

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

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

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

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


- 36 -

ADVPL Completo



Por exemplo:


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


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


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

Exemplo: Pri v a t e _dDa t a


Variveis de escopo public

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

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

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


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



- 37 -

ADVPL Completo


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

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


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

Exemplo: Publ i c _cRot i n a


4.4. Entendendo a influncia do escopo das variveis

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


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


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


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


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


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

ou

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

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


- 38 -

ADVPL Completo


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

4.5. Operaes com Variveis


4.5.1. Atribuio de variveis

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

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

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

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

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

- 39 -

ADVPL Completo



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

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


4.5.2. Operadores da linguagem ADVPL

Operadores comuns

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

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

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


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


Operadores Matemticos

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

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


Operadores de String

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

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


- 40 -

ADVPL Completo



Operadores Relacionais

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

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


Operadores Lgicos

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

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


Operadores de Atribuio

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

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


E Atribuio Simples

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


E Atribuio em Linha

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

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


- 41 -

ADVPL Completo


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

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

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

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

E Atribuio Composta

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

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

Operadores de Incremento / Decremento

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

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

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

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

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

No e nt a nt o :

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


- 42 -

ADVPL Completo


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

Operadores Especiais

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


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

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

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

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

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

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

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

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

- 43 -

ADVPL Completo



Ordem de Precedncia dos Operadores

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

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

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

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

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

Consi der e o e x e mpl o :

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

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

E Alterao da Precedncia

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

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

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

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







- 44 -

ADVPL Completo



4.5.3. Operao de Macro Substituio

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

Consi der e o e x e mpl o :

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

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

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

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

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

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

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













- 45 -

ADVPL Completo



4.5.4. Funes de manipulao de variveis

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

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

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

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


Converses entre tipos de variveis

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

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

CTOD( )


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



CVALTOCHAR( )


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


- 46 -

ADVPL Completo




DTOC( )


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



DTOS( )


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



STOD( )


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


STR( )


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


STRZERO( )


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


VAL( )


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

- 47 -

ADVPL Completo




Manipulao de strings

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

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

ALLTRIM( )


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

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


ASC( )


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


AT( )


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



- 48 -

ADVPL Completo



CHR( )


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



LEN( )


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


LOWER( )


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


RAT( )


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


STUFF( )


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


SUBSTR( )


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


- 49 -

ADVPL Completo


UPPER( )


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


Manipulao de variveis numricas

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

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

ABS( )

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



INT( )

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


NOROUND( )

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



ROUND( )

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



- 50 -

ADVPL Completo



Verificao de tipos de variveis

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

TYPE( )
VALTYPE( )

TYPE( )

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


VALTYPE( )

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






















- 51 -

ADVPL Completo



5. Estruturas bsicas de programao

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

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

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

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

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

5.1. Estruturas de repetio

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

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

O Comando FOR...NEXT

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


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

- 52 -

ADVPL Completo



E Parmetros

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




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

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

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

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

- 53 -

ADVPL Completo


Exemplo:

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

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


O Comando WHILE...ENDDO

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

E Sintaxe

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

E Parmetros

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



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




- 54 -

ADVPL Completo


Exemplo :

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


5.1.1. Influenciando o fluxo de repetio

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

E LOOP
E EXIT

LOOP

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

Exemplo:

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

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

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

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

End

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




- 55 -

ADVPL Completo


EXIT

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

Exemplo:

Whil e . T.

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

MSGI NF O( Fi n al de Jogo)

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





















- 56 -

ADVPL Completo



5.2. Estruturas de deciso

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

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

O Comando IF...ELSE...ENDIF

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


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

E Parmetros

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



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


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

- 57 -

ADVPL Completo



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

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

E Sintaxe

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

E Parmetros

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



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


- 58 -

ADVPL Completo



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


O Comando DO CASE...ENDCASE

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

E Sintaxe

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

E Parmetros

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


- 59 -

ADVPL Completo




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


Exemplo:

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

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

Ret ur n





















- 60 -

ADVPL Completo



6. Arrays e Blocos de Cdigo

6.1. Arrays

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

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

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

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

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

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


Arrays como Estruturas

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

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

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

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

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

- 61 -

ADVPL Completo



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

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

Os nomes pode m ser i mpr essos assi m:

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

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

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

Que equi v al e nt e a i sso :

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

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

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

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

Cuidados com Arrays

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

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

- 62 -

ADVPL Completo




6.1.1. Inicializando arrays

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

Se o tamanho do array conhecido

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

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

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

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

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

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

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

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

- 63 -

ADVPL Completo



Se o tamanho do array no conhecido

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

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

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

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

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

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


6.1.2. Funes de manipulao de arrays

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

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


- 64 -

ADVPL Completo



ARRAY( )

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

AADD( )

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

ACLONE( )

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

ADEL( )

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

ASIZE( )

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


ASORT( )

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


- 65 -

ADVPL Completo



ASCAN( )

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

AINS( )

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



6.1.3. Cpia de arrays

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

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

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


nPessoas : = 10
nAl unos : = nPessoas


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

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


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



- 66 -

ADVPL Completo


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



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



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

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


- 67 -

ADVPL Completo




6.2. Listas de Expresses e Blocos de Cdigo

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

6.2.1. Premissas para utilizao de Blocos de Cdigo

Primeira premissa

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

Assim, ao invs de escrever:

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

Pode-se escrever:

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

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

Z : = Y : = X : = 0

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

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

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

- 68 -

ADVPL Completo


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

Segunda premissa

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

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

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

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

6.2.2. Lista de expresses

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

Duas Linhas de Cdigo

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

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

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

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

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

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

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

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




- 69 -

ADVPL Completo


Convertendo para uma lista de expresses

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

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

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

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

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

Onde pode-se utilizar uma lista de expresses?

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

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

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

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

De listas de expresses para blocos de cdigo

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

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

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

- 70 -

ADVPL Completo



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

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

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

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

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

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

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

6.2.3. Blocos de Cdigo

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

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

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

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

Passando Parmetros

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

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

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

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


- 71 -

ADVPL Completo


Utilizando Blocos de Cdigo

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- 72 -

ADVPL Completo



6.2.4. Funes para manipulao de blocos de cdigo

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

EVAL( )
DBEVAL( )
AEVAL( )

EVAL( )

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

DBEVAL( )

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

AEVAL( )

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













- 73 -

ADVPL Completo


20

7. Funes

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

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

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

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

E a funo estar escrita:

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

. . . Coma ndos da F un o

Ret ur n . . .


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

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

Return(campo)

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

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



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

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

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

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

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

- 74 -

ADVPL Completo


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

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


7.1. Tipos e escopos de funes

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

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

Function( )

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

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

Exemplo:

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

F unct i on MATA100I NCL01( )

ALERT( " 01 " )
Ret ur n

F unct i on MATA100I NCL02( )

ALERT( " 02 " )
Ret ur n

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



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

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

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


- 75 -

ADVPL Completo



User Function( )

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

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



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

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



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

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


Static Function( )

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

Exemplo:

/ / Font e F I NA010. PRW

F unct i on F I NA010( )

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

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

F unct i on F I NA020( )

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

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


- 76 -

ADVPL Completo



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

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

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

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

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

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

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



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


Main Function( )

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

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

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

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

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

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

- 77 -

ADVPL Completo



7.2. Passagem de parmetros entre funes

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

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

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

Passagem de parmetros por contedo

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


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

Local nCnt
Local nResul t a do : = 0

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

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

Ret ur n



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

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

E Passagem de contedos diretos
E Passagem de variveis como contedos

Exemplo 01 Passagem de contedos diretos

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

Local nResul t a do : = 0

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



- 78 -

ADVPL Completo


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

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

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



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

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

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





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

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

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


Exemplo 02 Passagem de variveis como contedos

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

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

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

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


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

- 79 -

ADVPL Completo



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

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



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

Dest a f or ma pode mos t er :

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

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

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

. . .


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


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


Passagem de parmetros por referncia

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

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


- 80 -

ADVPL Completo




Passagem de parmetros tradicional Duas variveis x Duas reas de memria



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






- 81 -

ADVPL Completo


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




Tratamento de contedos padres para parmetros de funes

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


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

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

Exemplo:

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

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

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

Ret ur n nResul t a do


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


- 82 -

ADVPL Completo


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

Exemplo:

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

Local nCnt
Local nResul t a do : = 0

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

Ret ur n nResul t a do


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


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




















- 83 -

ADVPL Completo



8. Diretivas de compilao

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

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

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

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

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


Lembre-se

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


Diretiva: #INCLUDE

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

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

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

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

- 84 -

ADVPL Completo



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

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



Fique atento

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


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

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

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

o TCQUERY

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

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

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

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

- 85 -

ADVPL Completo


o ADDI TEM TAG
o ADDNODE NODE
o DELETENODE


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



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

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

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




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


Diretiva: #DEFINE

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

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



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

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





- 86 -

ADVPL Completo



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

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

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

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

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

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


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

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

# ENDI F




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



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

E PORTUGUESE
E SPANI SH
E ENGLI SH




- 87 -

ADVPL Completo


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


# I F DEF TOP

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

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



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

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

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


Diretiva: #COMMAND

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

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

Trecho do arquivo PROTHEUS.CH

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


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

- 88 -

ADVPL Completo



MDULO 03: Desenvolvendo pequenas customizaes

9. ADVPL e o ERP Microsiga Protheus

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

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

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

9.1. O Ambiente Protheus

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




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


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


- 89 -

ADVPL Completo


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


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


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

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


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

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

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


- 90 -

ADVPL Completo




Figura: Diagrama esquemtico de objetos Protheus

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



Figura: Estrutura de interconexo do Protheus


- 91 -

ADVPL Completo


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

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

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

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

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

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

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

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

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

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

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

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

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

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

- 92 -

ADVPL Completo



9.2. Organizao e configurao inicial do ambiente Protheus

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



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

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




- 93 -

ADVPL Completo


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

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


Figura: Formas de instalao e uso do Protheus

- 94 -

ADVPL Completo



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

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






Figura: Links dos parmetros de configurao

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

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


- 95 -

ADVPL Completo



Propriedades dos atalhos


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

E -Console ou - Debug

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

E - Install

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

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


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

E -Q (Quiet)

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

E -P (Main Program)

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

E -E (Environment)

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

E -C (Connection)

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

E -M (AllowMultiSession)

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


- 96 -

ADVPL Completo


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

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

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

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

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



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

[DRIVERS]
ACTI VE = TCP

[TCP]
TYPE = TCPI P
PORT = 1234


Figura: Exemplo de um ambiente em um arquivo de parmetros

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

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


- 97 -

ADVPL Completo



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

[DRIVERS]
ACTI VE = TCP

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

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


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

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

Exemplo:

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



- 98 -

ADVPL Completo



9.3. O Configurador do Protheus

9.3.1. Funcionalidades Abordadas

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

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

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

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

9.3.2. Estruturas bsicas da aplicao ERP Protheus

Arquivos de configurao do sistema

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

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

- 99 -

ADVPL Completo


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

Ambientes e tabelas

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

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

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

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

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

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

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

F X X E E 0


- 100 -

ADVPL Completo


Onde :

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

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

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

- 101 -

ADVPL Completo



ndices

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

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

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

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

Menus

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

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

9.3.3. Acessando o mdulo Configurador

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



Figura: Parmetros de inicializao do sistema



- 102 -

ADVPL Completo




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


Figura: Validao de acesso



Figura: Confirmao do acesso ao mdulo Configurador




- 103 -

ADVPL Completo



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



Figura: Interface principal do mdulo Configurador














- 104 -

ADVPL Completo



9.4. Funcionalidades do Configurador

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

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

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




Figura: Principais funcionalidades do mdulo Configurador


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

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

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







- 105 -

ADVPL Completo


9.4.1. Dicionrio de Dados da aplicao ERP

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

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



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




Procedimento

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

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





- 106 -

ADVPL Completo





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

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









- 107 -

ADVPL Completo




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


) .


Orientaes para o cadastramento de uma nova tabela

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


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

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

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

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

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

- 108 -

ADVPL Completo


f unci on ali da de do mdul o.

9.4.3. Adio de campos as tabelas do Dicionrio de Dados

Procedimento

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

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



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

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


- 109 -

ADVPL Completo




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

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


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

- 110 -

ADVPL Completo


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


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

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


Figura: Atualizao dos dados do sistema

- 111 -

ADVPL Completo


20


Orientaes para o cadastramento de um novo campo

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

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

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

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

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

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

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

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


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


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

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

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

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




- 112 -

ADVPL Completo


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


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

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


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


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


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

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

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


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













- 113 -

ADVPL Completo



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

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

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

Procedimento

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

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


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

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

- 114 -

ADVPL Completo




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


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




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


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




- 115 -

ADVPL Completo






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


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



Figura: Atualizao dos dados do sistema

- 116 -

ADVPL Completo



Orientaes para o cadastramento de um novo ndice

E O Nickname u ma i de nti fi cao compl e me nt a r do ndi ce o qu al pode ser ut ili z a da par a
a uxili ar o dese nv ol v edor na ut ili z ao dest a or de m e m u ma a pl i cao, a qu al pode ser
pa dr o do si st e ma ou espec fi ca de u m cli e nt e.

E Par a sel eci on ar os ca mpos j ca dast r a dos n a t a bel a , pode ser ut ili z a do o bot o Ca mpos
( ) . Est a f aci li da de pr e e nche, a ut oma t i ca me nt e, os ca mpos d e descri o.

E O ca mpo r el a t i vo fili al se mpr e f a z par t e dos ndi ces, com e xceo do SM2, pa r a que
os r egi st ros n as t a bel as est ej a m a gr upa dos por fi li ai s, i ndepe nde nt e dest a t a bel a ser
compa r t il h a da e nt r e as fili ai s.

E Uma t a bel a poder t er v ri os ndi ces ca d ast r a dos no Di ci on ri o de Da dos. E m
det er mi n a do mome nt o, por m, a p e nas u m d el es of er ecer acesso ao r egi st ro. Essa
or d e m pode ser al t er a d a e m t e mpo de e x ecu o p el os pr ogr a mas da a pli cao, a t r a v s
do coma ndo DBSet Or d er ( ) , ou a t r a v s da d efi ni o de u ma or d e m espec fi ca n a
utili z ao de queri es par a acesso as da dos di r et a me nt e e m ba ncos d e da dos de
a mbi e nt es TOPCONNECT ( DbAcess) .


9.4.5. Adio de gatilhos para os campos das tabelas do sistema

Procedimento

1. Par a a di ci on ar u m ga t il ho a u m ca mpo d e u ma t a bel a do di ci on ri o de da dos d e u ma
e mpr esa , sel eci one a opo Ga t il ho a bai xo da e mpr esa qu e ser a t ual i z a da . ( r vor e de
opes da pa r t e esquer da da i nt erf ace vi su al do Ger e nci a dor de Bases de Da dos) .

2. Aps a sel e o da op o Ga t il hos ser o e xi bi dos os i t e ns j ca dast r a das no ar qui vo de
si st e ma SX7.



Figura: Conjunto de gatilhos j cadastros no SX7

- 117 -

ADVPL Completo



3. Aps a vi su ali z ao dos ga t il hos j ca dast r a dos no SX7 da e mpr esa sel eci on a da , ut ili z e
o bot o I ncl ui r ( ) par a r e ali z ar o ca dast r o d e u m nov o ga t il ho no si st e ma :



4. Re ali z e o pr e e nchi me nt o das i nf or maes sol i ci t a das de acor do co m as ori e nt aes a
segui r, e a o t r mi no confi r me o ca dast r a me nt o do nov o ga t i l ho de si t e ma com o bot o
Confi r mar (
Figura: Dados para o cadastro de um novo gatilho no sistema


) .

Orientaes para o cadastramento de um novo gatilho


E Pode h a v er v ri os ga t i l hos par a o mesmo ca mpo. A or de m d e e x ecuo det er mi n a da
pel o ca mpo Seq nci a .

E Os t i pos do Ga t i l ho Pri mri o, Est r a ngei ro e d e Posi ci ona me nt o defi ne m se o Cont r a
Dom ni o u m ca mpo da mesma t a bel a , de out r a t a bel a ou se o ga t il ho de v e r e al i z ar
u m posi ci on a me nt o, r espect i v a me nt e.

E A r egr a pode ser u ma e x pr ess o que r esul t a e m u m v al or a ser pr e e nchi do no Cont r a
Dom ni o.

E O posi ci on a me nt o i gu al a Si m i ndi ca que ser e x ecut a do u m coma ndo de busca do
r egi st ro de acor do com a cha v e i ndi ca da .

E O Ali as, a Or de m e a Ch a v e descr e v e m a t a bel a e nvol vi da no ga til ho, se u ndi ce e a
ch a v e pa r a qu e a f unci onali da de se posi ci one no r egi st ro a dequ a do.

- 118 -

ADVPL Completo



9.4.6. Criao de Tabelas Genricas

Procedimento

1. Par a a di ci onar u ma t a bel a ge nri ca , sel eci one os me nus Ambi e nt e, Ca d ast ros, Ta bel as.

2. Aps a sel e o da op o Ta b el as ser o e xi bi dos os i t e ns j ca dast r a das no a r qui vo de
si st e ma SX5.


3. Aps a vi su ali z ao das t a bel as j ca dast r a dos no SX5 da e mpr esa sel eci ona da , utili z e o
bot o I ncl ui r (
Figura: Conjunto de Tabelas j cadastras no SX5

) par a r e ali z ar o ca dast ro d e u ma nov a t a bel a no si st e ma :


Figura: Dados para o cadastro de uma nova tabela no sistema

- 119 -

ADVPL Completo



4. Re ali z e o pr e e nchi me nt o das i nf or maes sol i ci t a das de acor do co m as ori e nt aes a
segui r, e ao t r mi no confi r me o ca dast r a me nt o da nov a t a b el a do si st e ma com o bot o
Confi r mar ( ) .


9.4.7. Criao de Parmetros

Procedimento

1. Par a a di ci onar u m Pa r met r o, sel eci one os me nus Ambi e nt e, Ca dast ros, Pa r met r os.

2. Aps a sel e o da op o Ta b el as ser o e xi bi dos os i t e ns j ca dast r a das no a r qui vo de
si st e ma SX6.




3. Aps a vi suali z ao dos Par met r os j ca dast r a dos no SX6 da e mpr esa sel eci on a da ,
utili z e o bot o I ncl ui r (
Figura: Conjunto de Parmetros j cadastras no SX6

) par a r e al i z ar o ca dast ro de u ma nov a t a b el a no si st e ma :


- 120 -

ADVPL Completo




4. Re ali z e o pr e e nchi me nt o das i nf or maes sol i ci t a das de acor do co m as ori e nt aes a
segui r, e ao t r mi no confi r me o ca dast r a me nt o do nov o Pa r met ro do si st e ma com o
bot o Confi r mar (
Figura: Dados para o cadastro de um novo parmetro no sistema

) .

- 121 -

ADVPL Completo




10. TOTVS Development Studio

A f er r a me nt a TOTVS De v el op me nt St udi o u m progr a ma que f a z par t e do Prot h e us e per mi t e
o t r a bal ho de edi o, co mpil ao e d epur a o d e pr ogr a mas escri t os e m ADVPL.

Projeto

Um progr a ma par a ser compi l a do de v e ser vi ncul a do a u m proj et o. Nor mal me nt e, pr ogr a mas
que f a z e m par t e d e u m det er mi n a do mdul o ou a mbi e nt e est o e m u m mesmo proj et o.

A vi ncul ao dos progr a mas a u m pr oj et o f ei t a por mei o dos a r qui vos do t i po PRW. Na
v er da de, u m proj et o pode ser const i t u do de u m ou mai s ar qui vos dest e t i po, que por su a v e z ,
pode m t er u ma ou mai s f unes, conf or me i l ust r a o di a gr a ma a segui r :



Figura: Representao da estrutura de um projeto no DEV-Studio


- 122 -

ADVPL Completo


Compilao

Uma v e z a di ci on a do a u m proj et o e compil a do se m i nci d nci as de err os d e cdi go, o obj e t o
r esul t a nt e ser ca dast r a do no RPO ( Reposi t ri o de Obj et os) e poder ser ut ili z a do pel a
a pli cao ERP.

A compi l ao dos i t e ns de u m pr oj et o pod e ser r e al i z a da i ndi vi du al me nt e, por gr upo de f ont es
( past as) ou ai nda sel eci on a ndo- o i nt ei r a me nt e. Ca da u ma dos f ont es ser pr ocessa do e
compi l a do separ a da me nt e, p er mi t i ndo a vi su ali z ao do pr ogr esso da op er ao e das
me nsa ge ns d e a vi so ( war ni ngs) ou er ros ( cri t i cal err ors) n a gui a Me nsa ge ns.

Execuo

Par a qu e os obj et os co mpil a dos e di spon v ei s n RPO sej a m ut ili z a dos, de v e m ser obser v a das as
segui nt es r egr as :

E Se o pr ogr a ma n o ma ni pul a ar qui vos, pod e - se ch a m -l o di r et a me nt e do DEV- St udi o
( nome no l a do di r ei t o da barr a de f er r a me nt as) ;

E Se o pr ogr a ma ma ni pul a t a bel as e xi st e m du as opes :

. Adi ci on ar o progr a ma no me nu de u m dos a mbi e nt es e e x ecut a -l o a t r a v s do
Re mot e.

. Re ali z ar a pr epar ao do a mbi e nt e n a prpri a r ot i na , per mi ti ndo su a e x ecu o
di r et a me nt e p el o DEV- St udi o.

E No se pode compil ar u m progr a ma com o Re mot e e o Moni t or a ber t os, t e nh a est e
fi n ali z a do ou n o por er ro.

Anlise e depurao de erros

Par a i de nt i fi car as ca usas d e err os, a f err a me nt a DEV- St udi o possui di v ersos r ecursos qu e
a uxili a m o DEBUG.

A ao de DEBUG necessi t a que o progr a ma sej a e x ecut a do a par t i r do DEV- St udi o, se ndo
necess ri o obser v a r as segui nt es r egr as :

E Defi ni r e marcar os pont os d e pa r a da mai s a dequ a dos a a n l i se do f ont e ;

E Ex ecut ar a r ot i na a t r a v s do DEV- St udi o, sel eci ona ndo se u nome di r et a me nt e , ou o
mdul o que cont m a opo ou a ao que i r e x ecut -l a ;

E A par t i r do mome nt o e m que o DEV- St udi o pa usar o processa me nt o e m u m dos pont os
de par a da esp eci fi ca dos pr e vi a me nt e pode m ser ut ili z a das as j a nel as de vi su ali z ao
di spon v ei s no DEV- St udi o, que s o :

. Vari v ei s Locai s
. Vari v ei s Pri v a t es
. Vari v ei s Publi cs
. Vari v ei s St a t i cs
. Ja nel a da Wa t chs
. Ja nel a de Ta bel as e Ca mpos
. Pil h a de Ch a ma das

E At r a v s da Ja n el a de Wa t chs poss v el det er mi nar qu ai s v ari v ei s de v e m ser e xi bi das ;

- 123 -

ADVPL Completo


E Na pil h a de cha ma das, v eri fi ca - se a se q nci a de ch a ma das das f unes ;
E Na past a de Coma ndos, pod e - se, e nqu a nt o o pr ogr a ma est i v er pa usa do, escr e v er
qu al quer coma ndo e a o dar Ent er , el e e x ecut a do, per mi t i ndo pesqui sar pal a vr as e
e x pr esses no pr pri o f ont e ou e m qu al quer f ont e ar ma z e na do no HD;

E Ao par ar pode- se ou conti nu ar o progr a ma a t o prxi mo pont o de p ar a da , caso h a j a
u m out ro defi ni do, ou e x ecut a r l i nha a li nh a da rot i n a .

Interface da aplicao

Por ser u m a mbi e nt e i nt egr a do d e dese nv ol vi me nt o, o DEV- St udi o proporci on a t odas essas
f aci li da des, por mei o de i nt erf ace ni ca como il ust r a a fi gur a a segui r :



E O DEV- St udi o a pr ese nt a , no t opo da t el a , u m conj unt o de opes de me nu e u ma sri e
de bot es que f acili t a m a su a ma ni pul ao.
Figura: Interface principal do TOTVS Development Studio


E Na t el a ce nt r al , a pr ese nt a do o cdi go das f unes e m ADVPL. Na par t e i nf eri or s o
e xi bi das al gu mas past as que f aci li t a m a e x ecuo d e coma ndos, e xi bio d e cont e dos
de v a ri v ei s e me nsa g e ns, be m como da dos sobr e o proj et o.


- 124 -

ADVPL Completo



Desenvolvimento de pequenas customizaes


11. Acesso e manipulao de bases de dados em ADVPL

Como a l i ngu a ge m ADVPL ut ili z a da no dese nvol vi me nt o de a pli cao par a o si st e ma ERP
Prot h e us, el a de v e possui r r ecursos que p er mi t a m o acesso e a ma ni pul ao de i nf or maes
i ndepe nde nt e me nt e da base d e da dos pa r a o qual o si st e ma f oi confi gur a do.

Dest a f or ma a l i ngu a ge m possui doi s gr upos de f unes di st i nt os par a a t u ar com os ba ncos d e
da dos :

E F unes de ma ni pul ao de da dos g e nri cas
E F unes d e ma ni pul ao de da dos esp ec fi cas par a a mbi e nt es TOPC ONNECT /
DBACCESS

Funes de manipulao de dados genricas

As f unes de ma ni pul ao de da dos di t as como ge nri cas per mi t e m que u ma a pli cao ADVPL
sej a escri t a da mesma f or ma , i ndepe nde nt e se a base d e da dos confi gur a da par a o si st e ma
ERP f or do t i po I SAM ou pa dr o SQL.

Mui t as dest as f unes f or a m i ni ci al me nt e her da das da l i ngu a ge m CLI PPER, e medi a nt e nov as
i mpl e me nt aes da r e a de Tecnol ogi a da Mi crosi ga f or a m mel hor a das e a d equ a das s
necessi da des do ERP. Por est a r a z o poss v el e ncont r ar e m docu me nt aes da l i ngu a ge m
CLI PPER i nf or maes sobr e f unes de ma ni pul ao d e da dos ut i li z a das n a f er r a me nt a ERP.

De nt r e as mel hori as i mpl e me nt a das pel a r e a de Tecnol ogi a da Mi crosi ga , pode mos me nci on ar
o dese nv ol vi me nt o de nov as f unes como por e x e mpl o a f uno MsSe e k( ) - v ers o d a
Mi crosi ga par a a f uno DbSe e k( ) , e a i nt egr ao e nt r e a si nt a x e ADVPL conv e nci on al e a
f err a me nt a de acesso a ba ncos d e da dos no pa dr o S QL T OPC ONNECT ( DbAcess) .

A i nt egr ao e nt r e a a pli cao ERP e a f err a me nt a T OPC ONNECT p er mi t e que as f unes de
acesso e ma ni pul ao de da dos escri t as e m ADVPL sej a m i nt er pr et a das e conv er t i das par a
u ma si nt a x e compa t v el com o pa dr o S QL ANSI e d est a f or ma a pl i ca das aos SG DBs ( Si st e mas
Ger e nci a dor es d e Ba ncos de Da dos) com su a si nt a x e n a t i v a .

Funes de manipulao de dados para ambientes TOPCONNECT / DBACCESS

Par a i mpl e me nt ar u m acesso mai s ot i mi z a do e di sponi bili z ar no a mbi e nt e ERP f unci on ali da des
que ut ili z e m de f or ma mai s a dequ a da os r ecursos dos SGDBs homol oga dos par a o si st e ma ,
f or a m i mpl e me nt a das f unes de acesso e ma ni pul ao d e da dos esp ec fi cas par a a mbi e nt es
TOPC ONNECT/ DBACCESS.

Est as f unes per mi t e m que o dese nv ol v edor ADVPL e x ecut e co ma ndos e m si nt a x e S QL
di r et a me nt e d e u m cdi go f ont e da a pli cao, di sponi bili z a ndo r ecursos como e x ecu o d e
queri es d e consul t a , ch a ma das de pr ocedur es e comuni cao com out ros ba ncos de da dos
a t r a v s d e ODBCs.


As f unes espec fi cas par a a mbi e nt es T OPCONNECT ser o a bor d as no
ma t eri al de ADVPL Av a na do.

- 125 -

ADVPL Completo



11.1. Diferenas e compatibilizaes entre bases de dados

Como a a pli cao ERP pode ser confi gur a da par a ut ili z ar di f er e nt es t i pos d e bases d e da dos
i mpor t a nt e me nci on ar as pri nci pai s di f er e nas e nt r e est es r ecursos, o que pod e det er mi n ar a
f or ma como o dese nv ol v edor i r opt ar por escr e v er su a a pl i cao.

Acesso a dados e ndices

No acesso a i nf or maes e m bases de da dos do pa dr o I SAM so se mpr e l i dos os r egi st r os
i nt ei ros, e nqu a nt o no S QL pode - se l er a p e n as os ca mpos n ecessri os n a quel e processa me nt o.

O acesso di r et o f ei t o a t r a v s de ndi ces que so t a bel as par al el as s t a bel as de da dos e que
cont m a ch a v e e o e nder eo do r egi st ro, d e f or ma a n l oga ao ndi ce de u m li vro. Pa r a ca da
cha v e, cri a do u m ndice prpri o.

Nas bases de da dos pa dr o I SAM os ndi ces so a r ma z e n a dos e m u m ni co ar qui vo do t i po
CDX, j nos ba ncos de da dos pa dr o SQL ca da ndi ce cri a do com u ma nu mer a o seqe nci al
t e ndo como base o nome da t a b el a ao qu al el e est r el aci on a do.

A ca da i ncl uso ou al t er ao de u m r egi st r o t odos os ndi ces s o a t u ali z a dos, t or na ndo
necess ri o pl a nej ar a dequ a da me nt e qu ai s e qua nt os ndi ces ser o d efi ni dos par a u ma t a bel a ,
poi s u ma qu a nti da de e xcessi v a pod e compr ome t er o d ese mpe nho dest as op er aes.

De v e ser consi der a da a possi bili da de de utili z ao de ndi ces t e mpor ri os par a pr ocessos
esp ec fi cos, os qu ai s ser o cri a dos e m t e mpo d e e x ecu o da rot i n a . Est e f a t or de v e l e v ar e m
consi der ao o esf oro do a mbi e nt e a ca da e x ecuo da rot i n a e a p eri odi ci da de com a qual
e x ecut a da .

Estrutura dos registros (informaes)

Nas bases de da dos pa dr o I SAM, ca da r e gi st ro possui u m i de nt i fi ca dor na ti vo ou I D
seqe nci al e asce nde nt e que f unci on a como o e nder eo b ase da quel a i nf or mao.

Est e I D, mas conheci do como RECNO ou RECNUMBER g er a do no mome nt o de i ncl uso do
r egi st ro n a t a bel a e some nt e ser al t er a do caso a est r ut ur a dos d a dos d est a t a bel a sofr a
al gu ma ma nut e no. De nt r e as ma nut e nes que u ma t a bel a de da dos I SAM pode sofr er
pode- se ci t ar a ut ili z ao do coma ndo PACK, o qu al i r a pa gar fi si ca me nt e os r egi st ros
del et a dos da t a bel a f ora ndo u ma r e nu mer a o dos i de nti fi ca dor es de t odos os r egi st r os. Est a
si t u ao t a mb m t or na necess ri a a r ecri ao d e t odos os ndi ces vi ncul a dos qu el a t a bel a .

I st o ocorr e nas bases d e da dos I SAM d e vi do ao concei t o de e xcl uso l gi ca de r egi st ros que as
mesmas possu e m. J os ba ncos de da dos pa dr o S QL n a t i v a me nt e ut ili z a m a pe n as o concei t o
de e xcl uso f si ca de r e gi st ros, o qu e pa r a out r as a pl i caes seri a t r a nspar e nt e, mas n o o
caso do ERP Prot he us.

Par a ma nt er a compa t i bili da de das a pli caes dese nv ol vi das par a bases de da dos pa dr o
I SAM, a r e a de Tecnol ogi a e Ba nco de Da dos da Mi crosi ga i mpl e me nt ou nos ba ncos de da dos
pa dr o SQL o concei t o de e xcl uso l gi ca de r egi st ros e xi st e nt e n as bases d e da dos I SAM
a t r a v s da cri ao d e ca mpos de cont r ol e esp ec fi cos : R_E_ C_ N_ O_, D_E_L_E_T_ e
R_E_C_ D_E_L.

Est es ca mpos p er mi t e m que a a pli cao ERP ger e nci e as i nf or maes do ba nco d e da dos da
mesma f or ma qu e as i nf or maes e m bases d e da dos I SAM.


- 126 -

ADVPL Completo


Com i sso o ca mpo R_E_C_N_ O_ ser u m i de nt i fi ca dor ni co do r e gi st ro de nt r o da t a bel a ,
f unci on a ndo como o I D ou RECNUMBER de u ma t a bel a I SAM, mas utili z a ndo u m r ecurso
a di ci onal di spon v el nos ba ncos d e da dos r el aci onai s conheci do com Chave Primria
11.2. Funes de acesso e manipulao de dados
.

Par a a a pli cao ERP Prot h e us o ca mpo d e cont r ol e R_E_C_ N_ O_ defi ni do e m t odas as
t a bel as como se ndo su a cha v e pri mri a , o que t r a nsf er e o cont r ol e de su a nu mer a o
seqe nci al ao ba nco de da dos.

O ca mpo D_E_L_E_T_ t r a t a do i nt er n a me nt e p el a a pli cao ERP como u m fl a g ou marca de
e xcl uso. Dest a f or ma os r egi st ros que est i v er e m com est e ca mpo ma rca do ser o
consi der a dos como e xcl u dos l ogi ca me nt e. A e x ecuo do coma ndo PACK e m u ma t a b el a de
u m ba nco d e da dos pa dr o SQL vi sa e xcl ui r fi sica me nt e os r egi st r os co m o ca mpo D_E_L_E_T_
marca do, mas n o ca usar o ef ei t o de r e nu mer ao de RECNO ( no caso R_E_C_N_ O_) qu e
ocor r e n as t a b el a de bases de da dos I SAM.


As f unes d e acesso e ma ni pul ao de da dos d escri t as nest e t pi co so as cl assi fi ca das
a nt eri or me nt e como f unes g e nri cas da li ngua ge m ADVPL, per mi t i ndo que as mesmas sej a m
utili z a das i ndepe nde nt e me nt e da base de da dos par a a qu al a a pli cao ERP est confi gur a da .

As f unes de acesso e ma ni pul ao de da dos d efi ne m basi ca me nt e :

E Ta bel a que est se ndo t r a t a da ;
E Ca mpos que d e v er o ser l i dos ou a t u ali z a dos ;
E Mt odo d e acesso di r et o as i nf or maes ( r egi st ros e ca mpos) .

De nt r e as f unes ADVPL di spon v ei s par a acesso e ma ni pul ao de i nf or maes, est e ma t eri al
i r det al h ar as segui nt es opes :

SELECT( )
DBSELECTAREA( )
DBSETORDER( )
DBSEEK( ) E MSSEEK( )
DBSKIP( )
DBGOTO( )
DBGOTOP( )
DBGOBOTTON( )
DBSETFILTER( )
RECLOCK( )
SOFTLOCK( )
MSUNLOCK( )
DBDELETE( )
DBUSEAREA( )
DBCLOSEAREA( )

- 127 -

ADVPL Completo


DBRLOCK( )

Sintaxe DBRLOCK(xIdentificador)
Descrio
F uno de base d e da dos, que ef et u a o l ock ( t r a v a me nt o) do r e gi st ro
i de nti fi ca do pel o par met r o x I d e nt i fi ca dor. Est e par met r o pode ser o
Recno( ) pa r a t a bel as e m f or ma do I SAM, ou a ch a v e pri mri a par a ba ncos d e
da dos r el aci on ai s.

Se o pa r met ro x I de nt i fi ca dor n o f or esp eci fi ca do, t odos os l ocks da r e a de
t r a bal ho ser o li ber a dos, e o r egi st r o posi ci on a do ser t r a v a do e a di ci on a do
e m u ma l i st a de r egi st ros bl oque a dos.

DBCLOSEAREA( )

Sintaxe DbCloseArea( )
Descrio
Per mi t e que u m ali as pr ese nt e n a con e x o sej a f ech a do, o qu e vi a bili z a se u
r e uso e m out r o oper a o. Est e coma ndo t e m ef ei t o a pe n as no al i as a ti vo na
cone x o, se ndo necessri a su a utili z ao e m conj unt o com o co ma ndo
DbSel ect Ar e a ( ) .

DBCOMMIT( )

Sintaxe DBCOMMIT( )
Descrio Ef et u a t odas as a t u ali z aes p e nde nt es na r e a de t r a bal ho a t i v a .

DBCOMMITALL( )

Sintaxe DBCOMMITALL( )
Descrio
Ef et u a t odas as a t uali z aes p e nde nt es e m t od as as r e a d e t r a bal ho e m uso
pel a t hr e a d ( cone x o) a t i v a .

DBDELETE( )

Sintaxe DbDelete( )
Descrio
Ef et u a a e xcl uso l gi ca do r egi st ro posi ci ona do n a r e a d e t r a bal ho a t i v a ,
se ndo necess ri a su a utili z ao e m conj unt o com as f unes RecLock( ) e
MsUnLock( ) .

DBGOTO( )

Sintaxe DbGoto(nRecno)
Descrio
Mov e o cursor da r e a de t r a bal ho a t i v a par a o r ecor d nu mber ( r ecno)
esp eci fi ca do, r e ali z a ndo u m posi ci on a me nt o di r et o, se m a necessi da de u ma
busca ( se e k) pr vi o.


- 128 -

ADVPL Completo



DBGOTOP( )

Sintaxe DbGoTop( )
Descrio Mov e o cursor da r e a d e t r a bal ho a t i v a par a o pri mei ro r egi st ro l gi co.

DBGOBOTTON( )

Sintaxe DbGoBotton( )
Descrio Mov e o cursor da r e a d e t r a bal ho a t i v a par a o l ti mo r egi st r o l gi co.

DBRLOCKLIST( )

Sintaxe DBRLOCKLIST( )
Descrio
Ret or n a u m ar r a y cont e ndo o r ecor d nu mb er ( r ecno) de t odos os r egi st ros
t r a v a dos da r e a d e t r a bal ho a ti v a .

DBSEEK( ) E MSSEEK( )

Sintaxe DbSeek(cChave, lSoftSeek, lLast)
Descrio
DbSeek: Per mi t e posi ci on ar o cursor da r e a d e t r a bal ho a t i vo no r egist ro
com as i nf or maes esp eci fi ca das n a ch a v e de busca , f or nece ndo u m r et or no
l gi co i ndi ca ndo se o posi ci on a me nt o f oi ef et u a do com sucesso, ou sej a , se a
i nf or mao especi fi ca da na ch a v e de busca f oi l ocal i z a da n a r e a de
t r a bal ho.

MsSeek( ): F uno dese nvol vi da pel a r e a d e Tecnol ogi a da Mi crosi ga , a
qu al possui as mesmas f unci onali da des bsi cas da f uno DbSe e k( ) , com a
v a nt a ge m de n o n ecessi t ar acessar nov a me nt e a base de da dos par a
l ocali z ar u ma i nf or ma o j ut ili z a da pel a t hr e a d ( cone x o) a t i v a .

DBSKIP( )

Sintaxe DbSkip(nRegistros)
Descrio
Mov e o cursor do r egi st ro posi ci on a do par a o pr xi mo ( ou a nt eri or
depe nde ndo do pa r met r o) , e m f uno da or d e m a t i v a par a a r e a de
t r a bal ho.

DBSELECTAREA( )

Sintaxe DbSelectArea(nArea | cArea)
Descrio
Defi ne a r e a d e t r a bal ho especi fi ca da com se ndo a r e a a t i v a . Tod as as
oper aes subseqe nt es que fi z er e m r ef er nci a a u ma r e a de t r a bal ho a
utili z ao, a me nos que a r e a d esej a da sej a i nf or ma da e x pli ci t a me nt e.


- 129 -

ADVPL Completo



DBSETFILTER( )

Sintaxe DbSetFilter(bCondicao, cCondicao)
Descrio
Defi ne u m fi l t ro par a a r e a d e t r a bal ho a t i v a , o qu al pode ser d escri t o n a
f or ma de u m bl oco de cdi go ou a t r a v s d e u ma e x pr ess o si mpl es.

DBSETORDER( )

Sintaxe DbSetOrder(nOrdem)
Descrio
Defi ne qu al ndi ce ser ut ili z a da pel a r e a d e t r a bal ho a t i v a , ou sej a , pel a
r e a pr e vi a me nt e sel eci ona da a t r a v s do coma ndo DbSel ect Ar e a ( ) . As
or d e ns di spon v ei s no a mbi e nt e Prot he us s o a quel as defi ni das no SI NDEX
/ SI X, ou as or d e ns di sponi bili z adas por mei o d e ndi ces t e mpor ri os.

DBORDERNICKNAME( )

Sintaxe DbOrderNickName(NickName)
Descrio
Defi ne qu al ndi ce cri a do pel o usu ri o sej a ut ili z a do. O usu ri o pode i ncl ui r os
se us prpri os ndi ces e no mome nt o da i ncl uso de v e cri ar o NI CKNAME par a
o mesmo.

DBUNLOCK( )

Sintaxe DBUNLOCK( )
Descrio
Mesma f unci on ali da de da f uno UNLOCK( ) , s que r ecome nda da par a
a mbi e nt es de r ede nos qu ai s os ar qui vos so compar t i l h ados.

Li ber a o t r a v a me nt o do r egi st ro posi ci on a do n a r e a de t r a bal ho a t i v a e
confi r ma as a t u ali z aes ef e t u a das n a quel e r egi st ro.

DBUNLOCKALL( )

Sintaxe DBUNLOCKALL( )
Descrio
Li ber a o t r a v a me nt o de t odos os r egi st ros d e t odas as r e as de t r a bal ho
di spon v ei s na t hr e a d ( cone x o) a t i v a .

DBUSEAREA( )

Sintaxe
DbUseArea(lNovo, cDriver, cArquivo, cAlias, lComparilhado,;
lSoLeitura)
Descrio
Defi ne u m ar qui vo de base de da dos co mo u ma r e a de t r a bal ho di spon v el
na a pli cao.

MSUNLOCK( )

Sintaxe MsUnLock( )
Descrio
Li ber a o t r a v a me nt o (l ock) do r egi st r o posi ci on a do confi r ma ndo as
a t uali z aes ef et u a das n est e r egi st ro.


- 130 -

ADVPL Completo


RECLOCK( )

Sintaxe RecLock(cAlias,lInclui)
Descrio
Ef et u a o t r a v a me nt o do r egi st ro posi ci on a do n a r e a d e t r a bal ho a t i v a ,
per mi t i ndo a i ncl uso ou al t er ao das i nf or maes do mesmo.

RLOCK( )

Sintaxe RLOCK( ) lSucesso
Descrio Ef et u a o t r a v a me nt o do r egi st ro posi ci on a do na r e a de t r a bal ho a t i v a .

SELECT( )

Sintaxe Select(cArea)
Descrio
Det er mi n a o n mer o de r ef er nci a de u m det er mi n a do ali as e m u m
a mbi e nt e de t r a bal ho. Caso o al i as especi fica do n o est ej a e m uso no
a mbi e nt e, ser r et or n a do o v al or 0 ( z ero) .


SOFTLOCK( )

Sintaxe SoftLock(cAlias)
Descrio
Per mi t e a r eser v a do r e gi st ro posi ci on a do n a r e a de t r a bal ho a ti v a de f or ma
que out r as op er aes, com e xceo da a t u al , n o possa m a t u ali z ar est e
r egi st ro. Di f er e da f u no RecLock( ) poi s n o ger a u ma obri gao d e
a t u ali z ao, e pod e ser sucedi do por el e.

Na a pli cao ERP Pr ot he us, o Sof t Lock( ) ut ili z a do nos browses, a nt es da
confi r ma o da op er ao d e al t er ao e e xcl uso, poi s nest e mome nt o a
mesma ai nda no f oi ef et i v a d a , mas out r as cone xes n o pod e m acessa r
a quel e r egi st ro poi s o mesmo est e m ma nut e no, o que i mpl e me nt a da
i nt egri da de da i nf or mao.

UNLOCK( )

Sintaxe UNLOCK( )
Descrio
Li ber a o t r a v a me nt o do r egi st ro posi ci on a do n a r e a de t r a bal ho a t i v a e
confi r ma as a t u ali z aes ef et u a das n a quel e r egi st ro.



- 131 -

ADVPL Completo



11.3. Diferenciao entre variveis e nomes de campos

Mui t as v e z es u ma v ari v el pode t er o mesmo nome que u m ca mpo d e u m ar qui vo ou de u ma
t a bel a a ber t a no mome nt o. Nest e caso, o ADVPL pri vil egi ar o ca mpo, de f or ma que u ma
r ef er nci a a u m nome que i de nti fi que t a nt o u ma v ari v el como u m ca mpo, r esul t ar no
cont e do do ca mpo.

Par a esp eci fi car qu al de v e ser o el e me nt o r ef er e nci a do, de v e - se utili z ar o op er a dor d e
i de nti fi cao de a pel i do ( - > ) e u m dos doi s i de nt i fi ca dor es de r ef er nci a , MEMVAR ou F I ELD.

cRes : = MEMVAR- > NOME

Est a l i nh a de coma ndo i de nti fi ca que o v al or a t ri bu do v ari v el cRes de v e ser o v al or da
v ari v el de me mri a cha ma da NOME.

cRes : = F I ELD- > NOME

Nest e caso, o v al or a t ri bu do v ari v el cRes ser o v al or do ca mpo NOME e xi st e nt e no a r qui vo
ou t a bel a a ber t o n a r e a a t ual .

O i de nti fi ca dor F I ELD pode ser subst i t u do pel o a peli do de u m ar qui vo ou t a bel a a ber t o, par a
e vi t ar a necessi da de d e sel eci on ar a r e a a nt es de acessar o cont e do d e t er mi n a do ca mpo.

cRes : = CLI ENTES- > NOME

As t a bel as de da dos ut ili z a das pel a a pli cao ERP r eceb e m a ut oma t i ca me nt e do si st e ma o
a peli do ou ALI AS especi fi ca do par a as mes mas no ar qui vo d e si st e ma SX2. Assi m se o ca mpo
NOME p er t e nce a u ma t a bel a da a pli cao PROTHEUS, o mesmo pod er ser r ef er e nci a do com a
i ndi cao do ALI AS pr - defi ni do dest a t a b el a .

cRes : = SA1- > NOME / / SA1 Ca dast ro d e Cl i e nt es



Par a mai or es det al hes sobr e a ber t ur a de ar qui vos com a t ri bui o de a peli dos,
consul t e a docu me nt ao sobr e acesso a ba nco de da dos ou a docu me nt ao
da f uno dbUse Ar e a ( ) .

Os al i as das t a bel as da a pli cao ERP s o pa droni z a dos e m t r s l et r as, que
corr esponde m as i ni ci ais da t a b el a . As confi gur aes d e ca da ALI AS ut ili z a do
pel o si st e ma pod e m ser vi su ali z a das a t r a v s do mdul o Confi gur a dor - >
Bases d e Da dos - > Di ci on ri os - > Bases d e Da dos.



- 132 -

ADVPL Completo



11.4. Controle de numerao seqencial

Al guns ca mpos de nu mer ao do Pr ot he us s o f or neci dos pel o si st e ma e m or de m asce nde nt e.
o caso, por e x e mpl o, do n mero do pedi do de v e nda e out ros que ser v e m como i de nti fi ca dor
das i nf or maes das t a bel as. pr eci so t er u m cont r ol e do f or neci me nt o desses n mer os, e m
esp eci al qu a ndo v ri os usuri os est o t r a bal ha ndo si mul t a ne a me nt e.



Os ca mpos qu e r ece be m o t r a t a me nt o d e nu mer ao seq e nci al pel a
a pli cao ERP n o de v e m ser consi der a dos co mo ch a v e pri mri a das t a bel as
aos qu ai s est o vi ncul a dos.

No caso esp ec fi co da a pli cao ERP Pr ot he us a cha v e pri mri a e m a mbi e nt es
TOPC ONNECT ser o ca mpo R_E_C_ N_ O_, e par a bases de da dos pa dr o
I SAM o concei t o de ch a v e pri mri a i mpl e me nt a do pel a r egr a de negci o do
si st e ma , poi s est e pa dr o de da dos no possui o concei t o de uni ci da de d e
da dos.


Semforos

Par a defi ni r o concei t o do que u m se mf oro d e nu mer ao d e v e - se a v al i ar a segui nt e
seq nci a de e v e nt os no si st e ma :

E Ao ser f or neci do u m n mer o, el e per ma nece r eser v a do a t a concl uso da op er ao
que o sol i ci t ou ;

E Se est a op er a o f or confi r ma da , o n mer o i ndi sponi bili z a do, mas se a oper a o f or
ca ncel a da , o n mer o vol t ar a ser di spon v el mesmo que n a quel e mome nt o n meros
mai or es j t e nh a m si do of er eci dos e ut i li z a dos.

Com i sso, mesmo que t e nh a mos v ri os pr ocessos sol i ci t a ndo nu mer aes seq e nci ai s par a
u ma mesma t a bel a , co mo por e x e mpl o i ncl uses si mul t ne as de pedi dos de v e ndas, t er e mos
par a ca da pedi do u m n mer o e xcl usi vos e se m o i nt er v al os e nu mer aes n o ut ili z a das.

Funes de controle de semforos e numerao seqencial

A li ngu a ge m ADVPL per mi t e a utili z ao das se gui nt es f unes par a o cont r ol e das nu mer aes
seqe nci ai s utili z a das n as t a bel as da a pl i cao ERP:

GETSXENUM( )
CONFIRMSXE( )
ROLLBACKSXE( )

GETSXENUM( )

Sintaxe GETSXENUM(cAlias, cCampo, cAliasSXE, nOrdem)
Descrio
Obt m o n mero seq nci a do ali as especi fi cado no par met ro, a t r a v s d a
r ef er nci a aos ar qui vos de si st e ma SXE/ SXF ou ao ser vi dor de nu mer a o,
qu a ndo est a confi gur ao est h a bi li t a da no a mbi e nt e Prot h e us.


- 133 -

ADVPL Completo


CONFIRMSXE( )

Sintaxe CONFIRMSXE(lVerifica)
Descrio Confi r ma o n mer o al oca do a t r a v s do l ti mo coma ndo GETSXENUM( ) .


ROLLBACKSXE( )

Sintaxe ROLLBACKSXE( )
Descrio
Descar t a o n mer o f or n eci do pel o l ti mo coma ndo GETSXENUM( ) ,
r et or n a ndo a nu mer a o di spon v el par a out r as con e x es.


12. Customizaes para a aplicao ERP

Nest e t pi co ser o a bor das as f or mas p el as qu ai s a a pli cao ERP Pr ot he us pod e ser
cust omi z a da com a ut ili z ao da l i ngu a ge m ADVPL.

Pel os r ecursos de confi gur ao da a pl i cao ERP di spon v ei s no mdul o Confi gur a dor poss v el
i mpl e me nt ar as segui nt es cust omi z aes :

E Vali daes d e ca mpos e per gunt as do si st e ma e de usu ri os
E I ncl uso d e ga t i l hos e m ca mpos d e si st e mas e de usu ri os
E I ncl uso d e r egr as e m par met ros d e si st e mas e d e usu ri os
E Dese nv ol vi me nt o de pont os de e nt r a da par a i nt er a gi r com f unes pa dr es do si st e ma





- 134 -

ADVPL Completo



12.1. Customizao de campos Dicionrio de Dados


12.1.1. Validaes de campos e perguntas

As f unes de v al i dao t m como car act er st i ca f unda me nt al u m r et or no do t i po l gi co, ou
sej a , u m cont e do . T. Ver da d ei ro ou . F. F al so.

Com base nest a pr e mi ssa , a ut i li z ao de v al i daes no Di ci on ri o de Da dos ( SX3) ou n as
Per gunt as d e Pr ocessos e Rel a t ri os ( SX1) de v er f oca r se mpr e n a utili z ao de f unes ou
e x pr esses que r esul t e m e m u m r et or no l gi co.

At r a v s do mdul o Confi gur a dor poss v el al t er a r as propri eda des d e u m ca mpo ou de u ma
per gunt a de f or ma a i ncl ui r r egr as de v al i dao par a as segui nt es si t u aes :

E SX3 Validao de usurio (X3_VLDUSER)
E SX1 Validao da pergunta (X1_VALID)

De nt r e as f unes que a li ngu a ge m ADVPL e m conj unt o co m os r ecursos d ese nv ol vi dos pel a
a pli cao ERP par a v al i dao d e ca mpos e p er gunt as ser o det al ha das :

VAZIO( )
NAOVAZIO( )
EXISTCPO( )
EXISTCHAV( )
PERTENCE( )
POSITIVO( )
NEGATIVO( )
TEXTO( )

EXISTCHAV( )

Sintaxe ExistChav(cAlias, cConteudo, nIndice)
Descrio
Ret or n a . T. ou . F. se o cont e do esp eci fi ca do e xi st e no ali as especi fi ca do.
Caso e xi st a ser e xi bi do u m hel p de si st e ma com u m a vi so i nf or ma ndo da
ocor r nci a .

F uno utili z a da nor mal me nt e par a v eri fi car se u m det er mi n a do cdi go de
ca dast r o j e xi st e n a t a bel a n a qu al a i nf or mao ser i nseri da , co mo por
e x e mpl o o CNPJ no ca d ast ro de cl i e nt es ou f or n ecedor es.


- 135 -

ADVPL Completo



EXISTCPO( )

Sintaxe ExistCpo(cAlias, cConteudo, nIndice)
Descrio
Ret or n a . T. ou . F. se o cont e do esp eci fi ca do n o e xi st e no ali as
esp eci fi ca do. Caso n o e xi st a ser e xi bi do u m hel p de si st e ma com u m a vi so
i nf or ma ndo da ocor r nci a .

F uno ut ili z ada nor mal me nt e pa r a v eri fi car se a i nf or mao di gi t a da e m u m
ca mpo, a qu al depe nde de out r a t a bel a , r e al me nt e e xi st e nest a out r a t a bel a ,
como por e x e mpl o o cdi go de u m cl i e nt e e m u m pedi do de v e nda .

NAOVAZIO( )

Sintaxe NaoVazio( )
Descrio
Ret or n a . T. ou . F. se o cont e do do ca mpo posi ci on a do no mome nt o n o
est v a zi o.

NEGATIVO( )

Sintaxe Negativo( )
Descrio Ret or n a . T. ou . F. se o cont e do di gi t a do par a o ca mpo nega t i vo.

PERTENCE( )

Sintaxe Pertence(cString)
Descrio
Ret or n a . T. ou . F. se o cont e do di gi t a do par a o ca mpo est cont i do n a
st ri ng defi ni da como par met ro da f uno. Nor mal me nt e ut ili z a da e m
ca mpos com a opo d e combo, poi s caso cont r ri o seri a utili z a da a f uno
Exi st Cpo( ) .

POSITIVO( )

Sintaxe Positivo( )
Descrio Ret or n a . T. ou . F. se o cont e do di gi t a do par a o ca mpo posi ti vo.

TEXTO( )

Sintaxe Texto( )
Descrio
Ret or n a . T. ou . F. se o cont e do di gi t a do par a o ca mpo cont m a pe n as
n meros ou al f a nu mri cos.

VAZIO( )

Sintaxe Vazio( )
Descrio
Ret or n a . T. ou . F. se o cont e do do ca mpo posi ci on a do no mome nt o est
v a zi o.


- 136 -

ADVPL Completo



12.1.2. Pictures de formao disponveis

Com base na docu me nt ao di spon v el no DEM Docu me nt ao El et r ni ca Mi crosi ga , a
li ngua ge m ADVPL e a a pli cao ERP Prot he us a d mi t e m as segui nt es pi ct ur es :

Dicionrio de Dados (SX3) e GET

Funes
Contedo Funcionalidade
A Per mi t e a pe n as car act er es al f a bt i cos.
C Exi be CR d epoi s de n mer os posi t i vos.
E Exi be nu mri co com o pont o e v r gul a i nv er t i dos ( f or ma t o Eur op e u) .
R I nser e ca r act er es di f er e nt es dos car act er es de t e mpl a t e n a e xi bi o, mas n o os
i nser e na v ari v el do GET.
S<n> Per mi t e rol a me nt o hori z ont al do t e xt o de nt ro do GET, < n > u m n mer o i nt ei ro
que i de nti fi ca o t a ma nho da r egi o.
X Exi be DB d epoi s d e n mer os nega t i vos.
Z Exi be z eros como br a ncos.
( Exi be n meros nega t i vos e nt r e pa r nt eses com os espaos e m br a nco i ni ci ai s.
) Exi be n meros nega t i vos e nt r e pa r nt eses se m os espaos e m br a nco i ni ci ai s.
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o.

Templates
Contedo Funcionalidade
X Per mi t e qual quer ca r act er e.
9 Per mi t e a pe nas d gi t os par a qu al quer ti po de da do, i ncl ui ndo o si n al par a
nu mri cos.
# Per mi t e d gi t os, si nai s e espaos e m br a nco par a qu al quer t i po de da do.
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o.
* Exi be u m ast eri sco no l ugar dos espaos e m br a nco i ni ci ai s e m n mer os.
. Exi be o pont o deci mal .
, Exi be a posi o do mi l har .

Exemplo 01 Picture campo numrico

CT2_VALOR Nu mri co 17, 2
Pi ct ur e : @E 99, 999, 999, 999, 999. 99


Exemplo 02 Picture campo texto, com digitao apenas em caixa alta

A1_NOME Car act er - 40
Pi ct ur e : @!


- 137 -

ADVPL Completo



SAY e PSAY

Funes
Contedo Funcionalidade
C Exi be CR d epoi s de n mer os posi t i vos
E Exi be nu mri co com o pont o e a v r gul a i nv er t i dos ( f or ma t o Eur op e u)
R I nser e car act er es di f er e nt es dos car act er es d e t e mpl a t e
X Exi be DB d epoi s d e n mer os nega t i vos
Z Exi be z eros como br a ncos
( Envol v e n mer os nega t i vos e nt r e pa r nt eses
! Conv er t e t odos os ca r act er es al f a bt i cos par a mai scul o

Templates
Contedo Funcionalidade
X Exi be d gi t os par a qu al quer t i po de da do
9 Exi be d gi t os par a qu al quer t i po de da do
# Exi be d gi t os par a qu al quer t i po de da do
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o
* Exi be ast eri sco no l ugar de espaos e m br a nco i ni ci as e m n mer os
. Exi be a posi o do pont o deci mal
, Exi be a posi o do mi l har

Exemplo 01 Picture campo numrico

CT2_VALOR Nu mri co 17, 2
Pi ct ur e : @E 99, 999, 999, 999, 999. 99



















- 138 -

ADVPL Completo



12.2. Customizao de gatilhos Configurador

A a pli cao ERP ut ili z a o r ecurso d e ga t il hos e m ca mpo com a fi nali da de de a uxi li ar o usuri o
no pr e e nchi me nt o d e i nf or maes dur a nt e a di gi t ao de i nf or maes. As f unes que pode m
ser ut ili z a das no ga til ho est o di r et a me nt e r el aci ona das a defi ni o da e x pr ess o de r et or no
que ser e x ecut a da na a v ali ao do ga t i l ho do ca mpo.

As r egr as que de v e m ser obser v a das n a mont a ge m de u m ga til ho e confi gur ao de se u
r et or no s o :

E Na defi ni o da ch a v e de busca do ga t il ho de v e ser a v ali a da qu al fili al de v er ser
utili z a da como par t e d a ch a v e : a fi li al da t abel a de ori ge m do ga t il ho ou a fili al da
t a bel a que ser consul t a da . O que nor mal me nt e det er mi n a a fili al que ser ut ili z a da
como par t e da ch a v e j ust a me nt e a i nf or ma o que ser consul t a da , aonde :

o Consul t as de i nf or maes e nt r e t a b el as com est r ut ur a d e ca b eal ho e i t e ns
de v e m ut ili z ar a fili al da t a bel a de ori ge m, poi s a mbas as t a bel as de v e m possui r
o mesmo t r a t a me nt o d e fili al ( compar t il ha do ou e xcl usi vo) .

Exemplos:

Pedi do de v e ndas - > SC5 x SC6
Not a fi scal de e nt r a da - > SF 1 x SD1
Fi ch a de i mobili z a do - > SN1 x SN3
Ora me nt o cont bil - > CV1 x CV2

o Consul t a de i nf or maes de t a bel as de ca dast r os de v e m ut ili z ar a fili al da t a bel a
a ser consul t a da , pois o compa r t il h a me nt o dos ca dast r os nor mal me nt e
i ndepe nde nt e e m r el ao s movi me nt aes e out ros ca dast ros do si st e ma .

Exemplos:

Ca dast r o de cl i e nt es - > SA1 ( compa r t il h a do)
Ca dast r o de f or n ecedor es - > SA2 ( compar t i l h ado)
Ca dast r o de v e ndedor es - > SA3 ( e xcl usi vo)
Ca dast r o de t r a nspor t a dor as - > SA4 ( e xcl usi vo)

o Consul t a a i nf or maes de t a bel as d e movi me nt os de v e m ut ili z ar a fi li al da
t a bel a a ser consul t a da , poi s a pesar das movi me nt aes de u m mdul o
segui r e m u m det er mi na do pa dr o, a consul t a pode ser r e al i z a da e nt r e t a bel as
de mdul os di st i nt os, o que poderi a ger a r u m r et or no i ncor r et o base a do nas
di f er e nt es par a met ri z aes d est es a mbi e nt es.

Exemplos:

Cont as a pa ga r - > SE2 ( compar t i l h a do)
Movi me nt os cont bei s - > CT2 ( e xcl usi vo)
Pedi dos de compr as - > SC7 ( compa r t il h a do)
I t e ns da not a fi scal de e nt r a da - > SD1 ( e xcl usi vo)

E Na defi ni o da r egr a de r et or no d e v e ser consi der a do o t i po do ca mpo que ser
a t u ali z a do, poi s est e ca mpo que d et er mi n a qu al ti po do r et or no ser consi der a do
v li do par a o ga t il ho.


- 139 -

ADVPL Completo



12.3. Customizao de parmetros Configurador

Os par met r os d e si st e ma ut ili z a dos pel a apli cao ERP e defi ni dos a t r a v s do mdul o
confi gur a dor possue m as segui nt es car act er st i cas f unda me nt ai s :

E Ti po do par met r o : de f or ma si mil ar a u ma v ari v el , u m par met ro t er u m ti po de
cont e do pr - defi ni do e m se u ca dast ro.
Est a i nf or mao ut ili z a da pel as f unes da a pli cao ERP n a i nt er pr et a o do
cont e do do par met r o e r et or no dest a i nf or mao a r ot i n a que o consul t ou.

E I nt er pr et a o do cont e do do par met r o : di v ersos par met r os do si st e ma t m se u
cont e do macr o e x ecut a do dur a nt e a e x ecuo de u ma r ot i n a do ERP. Est es
par met ros macr o e x ecut v ei s t e m como nica ca r act er st i ca e m comu m se u t i po :
car act er e , mas no e xi st e ne nhu m i de nti fi ca dor e x pl i ci t o que per mi t e a f ci l
vi su ali z ao de qu ai s par met ros possu e m u m r et or no si mpl es e de qu ai s par met ros
t er o se u cont e do macro e x ecut a do par a det er mi nar o r et or no r e al .

A ni ca f or ma efi ca z de a v al i ar como u m par met ro t r a t a do ( si mpl es r et or no ou
macr o e x ecu o) a t r a v s do cdi go f ont e da rot i n a , no qual de v er ser a v al i a do como
t r a t a do o r et or no de u ma dest as f unes :

o GETMV( )
o SUPERGETMV( )
o GETNEWPAR( )

Um r et or no macr o e x ecut a do d et er mi n a do a t r a v s do uso do oper a dor & ou d e u ma
das f unes d e e x ecu o d e bl ocos d e cdi go e m conj unt o com u ma d as f unes ci t a das
a nt eri or me nt e.

12.3.1. Funes para manipulao de parmetros

A a pli cao ERP di sponi bili z a as segui nt es f unes par a consul t a e a t u ali z ao de par met ros :

GETMV( )
SUPERGETMV( )
GETNEWPAR( )
PUTMV( )

GETMV( )

Sintaxe GETMV(cParametro)
Descrio
Ret or n a o cont e do do par met ro esp eci fi ca do no ar qui vo SX6, consi der a ndo
a fili al par a met ri z a da na con e x o. Caso o pa r met r o n o e xi st a ser e xi bi do
u m hel p do si st e ma i nf or ma ndo a ocorr nci a .


- 140 -

ADVPL Completo



GETNEWPAR( )

Sintaxe GETNEWPAR(cParametro, cPadrao, cFilial)
Descrio
Ret or n a o cont e do do par met ro esp eci fi ca do no ar qui vo SX6, consi der a ndo
a fili al par a met ri z a da na con e x o. Caso o pa r met r o n o e xi st a ser e xi bi do
u m hel p do si st e ma i nf or ma ndo a ocorr nci a .

Di f er e do Super Get MV( ) poi s consi der a que o p ar met ro pode n o e xi st i r n a
v ers o a t ual do si st e ma , e por conseq nci a n o ser e xi bi da a me nsa ge m
de hel p.

PUTMV( )

Sintaxe PUTMV(cParametro, cConteudo)
Descrio
At uali z a o cont e do do par met ro esp eci fi ca do no ar qui vo SX6, de acor do
com as pa r a met ri z aes i nf or ma das.


SUPERGETMV( )

Sintaxe SUPERGETMV(cParametro , lHelp , cPadrao , cFilial)
Descrio
Ret or n a o cont e do do par met ro esp eci fi ca do no ar qui vo SX6, consi der a ndo
a fili al par a met ri z a da na con e x o. Caso o pa r met r o n o e xi st a ser e xi bi do
u m hel p do si st e ma i nf or ma ndo a ocorr nci a .

Di f er e do Get Mv( ) poi s os par met ros consul t ados s o a di ci on a dos e m u ma
r e a de me mri a , que per mi t e que e m u ma nov a consul t a no sej a
necess ri o acessar e p esqui sar o pa r met ro n a base d e da dos.


12.3.2. Cuidados na utilizao de um parmetro

Um par met ro d e si st e ma t e m a fi n ali da de de pr opi ci ar u m r et or no v li do a u m cont e do
pr e vi a me nt e d efi ni do na confi gur ao do mdul o par a u ma rot i n a , processo ou qu ai squer
out ros t i pos d e f unci on ali da des di spon v ei s n a a pli cao.

Apesa r de h a v er par met r os que p er mi t a m a confi gur ao de e x pr esses, e por conseq nci a
a utili z ao de f unes par a defi ni r o r et or no que ser obt i do co m a consul t a dest e par met ro,
expressamente proibido o uso de funes em parmetros para manipular
informaes da base de dados do sistema.

Caso h a j a a n ecessi da de d e ser i mpl e me nt a do u m t r a t a me nt o a di ci on al a u m processo pa dr o
do si st e ma , o mesmo d e v er ut ili z ar o r ecurso de pont o de e nt r a da .

A r a z o dest a r est ri o si mpl es :

E As r ot i nas da a pli cao ERP n o prot ege m a consul t a de cont e dos de pa r met r os
qu a nt o a gr a v aes r e al i z a das de nt ro ou f or a d e u ma t r a nsao.

E Dest a f or ma , quai squer al t er ao n a base r e al i z a da por u ma r ot i n a confi gur a da e m u m
par met ro pod e ocasi on ar a p er da da i nt egri da de das i nf or maes do si st e ma .

- 141 -

ADVPL Completo



12.4. Pontos de Entrada Conceitos, Premissas e Regras

Conceitos

Um pont o de e nt r a da u ma User F unct i on dese nvol vi da com a fi n ali da de de i nt er a gi r com u ma
rot i n a pa dr o da a pli cao ERP.

A User F unct i on de v er t er u m nome pr - est a bel eci do no dese nv ol vi me nt o da rot i na pa dr o do
ERP, e de acor do est a pr - di sposi o e o mo me nt o no qu al o pont o de e nt r a da e x ecut a do
dur a nt e u m pr ocessa me nt o, el e poder :

E Compl e me nt ar u ma v al i dao r e ali z a da pel a a pli cao ;

E Compl e me nt ar as a t ual i z aes r e al i z a das pel o processa me nt o e m t a b el as pa dres do
ERP;

E I mpl e me nt ar a a t uali z ao de t a bel as esp eci ficas dur a nt e o pr ocessa me nt o de u ma
rot i n a pa dr o do ERP;

E Ex ecut ar u ma ao se m processos d e a t u ali z aes, mas que necessi t e ut ili z ar as
i nf or maes a t uai s do a mbi e nt e dur a nt e o processa me nt o da rot i n a pa dr o par a
det er mi n ar as ca r act er st i cas do pr ocesso ;

E Subst i t ui r u m processa me nt o pa dr o do si st e ma por u ma r egr a esp ec fi ca do cl i e nt e no
qu al o mesmo ser i mpl e me nt a do.


Premissas e Regras

E Um pont o de e nt r a da n o de v e ser ut ili z a do par a out r as fi n ali da des se n o par a as qu ai s
o mesmo f oi pr - defi ni do, sob p e n a de ca usar a per da da i nt egri da de das i nf or maes
da base de da dos ou pr ovoca r e v e nt os d e er r o dur a nt e a e x ecu o da r ot i n a pa dr o.

E Um pont o de e nt r a da de v e ser t r a nspar e nt e par a o pr ocesso pa dr o, d e f or ma qu e
t odas as t a bel as acessa das pel o pont o de e nt r a da e que sej a m ut ili z a das pel a rot i n a
pa dr o, de v er o t er su a si t u ao i medi a t a me nt e a nt eri or e x ecuo do pont o
r est a ur a da ao t r mi no do mesmo, e par a i st o r ecome nda - se o uso das f unes
GETAREA( ) e RESTAREA( ) .

E Como u m pont o d e e nt r a da no e x ecut a do da f or ma t r a di ci onal , ou sej a , el e n o
cha ma do como u ma f uno, el e no r eceb e p ar met ros. A a pli cao ERP di sponi bili z a
u ma v ari v el de si st e ma de nomi n a da PARAMI XB, a qu al r ecebe os pa r met r os da
f uno ch a ma dor a e os di sponi bili z a par a ser e m ut ili z a dos pel a rot i n a cust omi z a da .

E A v ari v el PARAMI XB no possui u m pa dr o d e d efi ni o nos cdi gos f ont es da
a pli cao ERP, d est a f or ma se u t i po pode v a ri ar dest e u m cont e do si mpl es ( car act er e,
nu mri co, l gi co e et c. ) a u m t i po compl e xo co mo u m a r r a y ou u m obj et o. Dest a f or ma
necess ri o se mpr e a v ali ar a docu me nt ao sobr e o pont o b e m como prot eg er a
f uno cust omi z a da de t i pos de PARAMI XB n o t r a t a dos por el a .


- 142 -

ADVPL Completo



13. Interfaces visuais

A li ngua ge m ADVPL possui duas f or mas di st i nt as par a defi ni o de i nt erf aces vi su ai s no
a mbi e nt e ERP: si nt a x e conv e nci on al , nos pa dr es da l i ngu a ge m CLI PPER e a si nt a x e ori e nt a da
a obj et os.

Al m das di f er e nt es si nt a x es di spon v ei s par a defi ni o das i nt erf aces vi su ai s o ERP Prot he us
possui f unci on ali da des pr - d efi ni das, as qu ai s j cont m t odos os t r a t a me nt os n ecessri os a
a t e nder as n ecessi da des bsi cas d e acesso e ma nut e no das i nf or maes do si st e ma .

Nest e t pi co ser o a bor da das as si nt a x es conv e nci onai s par a defi ni o das i nt erf aces vi suais
da li ngua ge m ADVPL e as i nt erf aces de ma nut e no di spon v ei s no a mbi e nt e ERP Pr ot he us.


13.1. Sintaxe e componentes das interfaces visuais

A si nt a x e conv e nci onal par a defi ni o de compone nt es vi su ai s da li ngu a ge m ADVPL de p e nde
di r et a me nt e no i ncl ude esp eci fi ca do no ca beal ho do f ont e. Os doi s i ncl udes di spon v ei s par a o
a mbi e nt e ADVPL Pr ot he us s o :

E RWMAKE. CH: p er mi t e a utili z ao da si nt a x e CLI PPER n a defi ni o dos compon e nt es
vi su ai s.

E PROTHEUS. CH: per mi t e a utili z ao da si nt a x e ADVPL conv e nci onal , a qu al u m
a pri mor a me nt o da si nt a x e CLI PPER, com a i ncl uso de novos a t ri but os par a os
compone nt es vi su ai s di sponi bili z a dos no ERP Pr ot he us.

Par a il ust r ar a di f er e na n a utili z ao dest es doi s i ncl udes, segue a bai xo as di f er e nt es
defi ni es par a o co mpone nt es Di al og e MsDi al og :

Exemplo 01 Include Rwmake.ch

# i ncl ude r wma k e. ch

@ 0, 0 TO 400, 600 DI ALOG oDl g TI TLE " Ja nel a e m si nt a x e Cl i pper "
ACTI VATE DI ALOG oDl g CENTERED


Exemplo 02 Include Protheus.ch

# i ncl ude prot he us. ch

DEF I NE MSDI ALOG oDl g TI TLE " Ja nel a e m si nt a x e ADVPL " FROM 000, 0 00 TO 400, 600 PI XEL
ACTI VATE MSDI ALOG oDl g CENTERED



Ambas as si nt a x es produzi r o o mesmo ef ei t o qu a ndo compi l a das e
e x ecut a das no a mbi e nt e Pr ot he us, mas d e v e ser ut ili z ada se mpr e a si nt a x e
ADVPL a t r a v s do uso do i ncl ude PROTHEUS. CH




- 143 -

ADVPL Completo


Os compon e nt es da i nt erf ace vi su al que ser o t r a t a dos nest e t pico, ut ili z a ndo a si nt a x e
ADVPL so :

MSDIALOG( )
MSGET( )
SAY( )
BUTTON( )
SBUTTON( )

BUTTON( )

Sintaxe
@ nLinha,nColuna BUTTON cTexto SIZE nLargura,nAltura UNIDADE
OF oObjetoRef ACTION AO
Descrio
Defi ne o compon e nt e vi sual But t on, o qu al per mi t e a i ncl uso de bot es d e
oper a o n a t el a da i nt erf ace, os qu ai s ser o vi su ali z a dos some nt e com u m
t e xt o si mpl es par a su a i de nt i fi cao.

MSDIALOG( )

Sintaxe
DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni
TO nLiFim,nColFim OF oObjetoRef UNIDADE
Descrio
Defi ne o compon e nt e MSDI ALOG( ) , o qual ut ili z a do como base par a os
de mai s compone nt es da i nt erf ace vi sual , poi s u m compone nt e MSDI ALOG( )
u ma j a nel a da a pli cao.

MSGET( )

Sintaxe
@ nLinha, nColuna MSGET VARIAVEL SIZE nLargura,nAltura
UNIDADE OF oObjetoRef F3 cF3 VALID VALID WHEN WHEN PICTURE
cPicture
Descrio
Defi ne o compon e nt e vi su al MSGET, o qual ut ili z a do par a ca pt ur a d e
i nf or maes di gi t v ei s na t el a da i nt erf ace .

SAY( )

Sintaxe
@ nLinha, nColuna SAY cTexto SIZE nLargura,nAltura UNIDADE OF
oObjetoRef
Descrio
Defi ne o compon e nt e vi su al SAY, o qu al ut ili z a do par a e xi bi o de t e xt os
e m u ma t el a de i nt erf ace.

SBUTTON( )

Sintaxe
DEFINE SBUTTON FROM nLinha, nColuna TYPE N ACTION AO
STATUS OF oObjetoRet
Descrio
Defi ne o compon e nt e vi sual SBut t on, o qual per mi t e a i ncl uso de bot es d e
oper a o n a t el a da i nt erf ace, os qu ai s ser o vi su ali z a dos dep e nde ndo d a
i nt erf ace do si st e ma ERP ut ili z a da some nt e com u m t e xt o si mpl es par a sua
i de nti fi cao, ou com u ma i ma ge m ( Bi t Ma p) pr - defi ni do.




- 144 -

ADVPL Completo


Interface visual completa

Abai xo segue u m cdi go compl et o de i nt erf ace, utili z a do t odos os el e me nt os da i nt erf ace vi su al
descri t os a nt eri or me nt e :


DEF I NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 000, 000 TO 080, 300 PI XEL

@ 001, 001 TO 040, 150 OF oDl g PI XEL

@ 010, 010 SAY cTe xt o SI Z E 55, 07 OF oDl g PI XEL

@ 010, 050 MSGET cCGC SI Z E 55, 11 OF oDl g PI XEL PI CTURE " @R 99. 999. 999 / 9999- 99 " ;
VALI D !Va zi o( )

DEF I NE SBUTT ON FROM 010, 120 TYPE 1 ACTI ON ( n Opca : = 1, oDl g : End( ) ) ;
ENABLE OF oDl g

DEF I NE SBUTT ON FROM 020, 120 TYPE 2 ACTI ON ( n Opca : = 2, oDl g : End( ) ) ;
ENABLE OF oDl g

ACTI VATE MSDI ALOG oDl g CENTERED




O cdi go de monst r a do a nt eri or me nt e ut ili z a dos nos e x erc ci os de fi x ao
dest e ma t eri al e de v er produzi r a segui nt e i nt erf ace :







- 145 -

ADVPL Completo



13.2. Interfaces padres para atualizaes de dados

Os pr ogr a mas de a t u ali z ao de ca dast ros e di gi t ao de movi me nt os segue m u m pa dr o que
se a pi a no Di ci onri o de Da dos.

Basi ca me nt e so du as as i nt erf aces quer p er mi t e m a vi su ali z ao das i nf or maes e a
ma ni pul ao dos da dos do si st e ma .

E AxCadastro
E Mbrowse

Ambos os model os ut ili z a m como pr e mi ssa que a est r ut ur a da t a bel a a ser ut ili z a da est ej a
defi ni da no di ci on ri o de da dos do si st e ma ( SX3) .

13.2.1. AxCadastro( )

O Ax Ca dast r o( ) u ma f unci on ali da de de ca dast ro si mpl es, com poucas opes d e
cust omi z ao, a qu al compost a d e :

Browse pa dr o par a vi suali z ao das i nf or maes da base de da dos, de acor do com as
confi gur aes do SX3 Di ci on ri o de Da dos ( ca mpo br owse) .

F unes de pesqui sa , vi suali z ao, i ncl uso, al t er a o e e xcl uso pa dr es pa r a
vi su ali z ao de r egi st r os si mpl es, se m a op o de ca b eal ho e i t e ns.

E Sintaxe: AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt)

E Parmetros

cAlias
Ali as pa dr o do si st e ma par a ut i li z ao, o qu al de v e est ar defi ni do no
di ci onri o de da dos SX3.
cTitulo T t ul o da Ja nel a
cVldExc Vali dao par a Excl uso
cVldAlt Vali dao par a Al t er a o

Exemplo:

# i ncl ude " prot he us. ch "

User F unct i on XCa dSA2( )

Local cAl i as : = " SA2 "
Local cTi t ul o : = " Ca dast ro d e F or n ecedor es "
Local cVl dExc : = " . T. "
Local cVl dAl t : = " . T. "

dbSel ect Ar e a ( cAli as)
dbSet Or d er ( 1)
Ax Ca dast r o( cAl i as, cTi t ul o, cVl dExc, cVl dAl t )
Ret ur n



- 146 -

ADVPL Completo














13.2.2. MBrowse( )

A Mbrowse( ) u ma f unci on ali da de de ca dast ro que per mi t e a utili z ao de r ecursos mai s
a pri mor a dos n a vi su ali z ao e ma ni pul ao das i nf or maes do si st e ma , possui ndo os
segui nt es compone nt es :

Browse pa dr o par a vi su ali z ao das i nf or maes da base de da dos, de acor do com as
confi gur aes do SX3 Di ci on ri o de Da dos ( ca mpo br owse) .

Par a met ri z ao par a f unes esp ec fi cas par a as aes de vi su ali z ao, i ncl uso,
al t er ao e e xcl uso d e i nf or maes, o que vi a bili z a a ma nut e no de i nf or maes com
est r ut ur a de ca b eal hos e i t e ns.

Recursos a di ci onai s como i de nti fi ca dor es de st a t us de r egi st ros, l ege ndas e fil t ros par a
as i nf or maes.

E Sintaxe simplificada: MBrowse(nLin1, nCol1, nLin2, nCol2, cAlias)

E Parmetros

nLin1, nCol1,
nLin2, nCol2
Coor de n a das dos ca nt os aonde o browse ser e xi bi do. Par a segui r o
pa dr o da AXCADASTRO( ) use 6, 1, 22, 75 .
cAlias
Ali as pa dr o do si st e ma par a ut i li z ao, o qu al de v e est ar defi ni do no
di ci onri o de da dos SX3.


- 147 -

ADVPL Completo



E Variveis private adicionais

aRotina

Arr a y cont e ndo as f unes qu e ser o e x ecut a das pel a Mbr owse.
Est e a rr a y pod e ser pa r a met ri z a dos com as f unes bsi cas da
Ax Ca dast r o conf or me a bai xo :

AADD( aRot i n a , { " Pesqui sar " , " AxPesqui " , 0, 1 } )
AADD( aRot i n a , { " Vi su ali z ar " , " Ax Vi su al " , 0, 2 } )
AADD( aRot i n a , { " I ncl ui r " , " Ax I ncl ui " , 0, 3 } )
AADD( aRot i n a , { " Al t er ar " , " Ax Al t er a " , 0, 4 } )
AADD( aRot i n a , { " Excl ui r " , " Ax Del et a " , 0, 5 } )


cCadastro T t ul o do browse que ser e xi bi do.

Exemplo:

# i ncl ude " prot he us. ch "

User F unct i on MBr wSA2( )

Local cAl i as : = " SA2 "
Pri v a t e cCa dast r o : = " Ca dast ro de For necedor es "
Pri v a t e aRot i na : = { }

AADD( aRot i n a , { " Pesqui sar " , " AxPesqui " , 0, 1 } )
AADD( aRot i na , { " Vi su ali z ar " , " Ax Vi su al " , 0, 2 } )
AADD( aRot i n a , { " I ncl ui r " , " Ax I ncl ui " , 0, 3 } )
AADD( aRot i n a , { " Al t er ar " , " Ax Al t er a " , 0, 4 } )
AADD( aRot i n a , { " Excl ui r " , " Ax Del et a " , 0, 5 } )

dbSel ect Ar e a ( cAli as)
dbSet Or d er ( 1)
mBrowse( 6, 1, 22, 75, cAl i as)
Ret ur n



- 148 -

ADVPL Completo













1. Ut ili z a ndo a par a met ri z ao e x e mpli fi ca da , o ef ei t o obt i do com o uso
da Mbr owse ( ) ser o mesmo obt i do com o uso da Ax Ca dast ro( ) .

2. A posi o das f unes no arr a y aRot i n a defi ne o cont e do d e u ma
v ari v el de cont rol e que ser r epassa da par a as f unes ch a ma das a
par t i r da Mbrowse, conv e nci on a da como n Opc. Dest a f or ma , par a
ma nt er o pa dr o da a pli cao ERP a or d e m a ser segui da n a defi ni o
do aRot i na ;

1 Pesqui sar
2 Vi suali z ar
3 I ncl ui r
4 Al t er ar
5 Excl ui r
6 Li vr e



Ao d efi ni r as f unes no a rr a y aRot i n a , se o nome da f un o n o f or
esp eci fi ca do com ( ) , a Mbrowse passa r como par met ros as se gui nt es
v ari v ei s de cont r ol e :

cAlias: Al i as a ti vo defi ni do par a a Mbrowse
nRecno: Recor d nu mber ( r ecno) do r egi st r o posi ci on a do no ali as
a t i vo.
nOpc: Posi o da op o ut ili z a da n a Mbrowse de acor do com a or d e m
da f uno no a rr a y a Rot i na .




- 149 -

ADVPL Completo



Exemplo: Funo BInclui( ) substituindo a funo AxInclui( )

# i ncl ude " prot he us. ch "

User F unct i on MBr wSA2( )

Local cAl i as : = " SA2 "

Pri v a t e cCa dast r o : = " Ca dast ro de For necedor es "
Pri v a t e aRot i na : = { }

AADD( aRot i n a , { " Pesqui sar " , " AxPesqui " , 0, 1 } )
AADD( aRot i na , { " Vi su ali z ar " , " Ax Vi su al " , 0, 2 } )
AADD( aRot i n a , { " I ncl ui r " , " U_BI ncl ui " , 0, 3 } )
AADD( aRot i n a , { " Al t er ar " , " Ax Al t er a " , 0, 4 } )
AADD( aRot i n a , { " Excl ui r " , " Ax Del et a " , 0, 5 } )

dbSel ect Ar e a ( cAli as)
dbSet Or d er ( 1)
mBrowse( 6, 1, 22, 75, cAl i as)
Ret ur n

USER FUNCTI ON BI ncl ui ( cAli as, nReg, n Opc)

Local cTudoOk : = " ( Al er t (' OK') , . T. ) "
Ax I ncl ui ( cAli as, nReg, n Opc, , , , cTudoOk)

RETURN

















- 150 -

ADVPL Completo



13.2.3. AxFunctions( )

Conf or me me nci on a do nos t pi cos sobr e as i nt erf aces pa dres Ax Ca dast ro( ) e Mbr owse( ) ,
e xi st e m f unes pa dr es da a pli cao ERP que per mi t e m a vi su ali z ao, i ncl uso, al t er ao e
e xcl uso d e da dos e m f or ma t o si mpl es.

Est as f unes s o pa dres na defi ni o da i nt erf ace Ax Ca dast ro( ) e pod e m ser ut i li z a das
t a mb m da const r u o no a rr a y aRot i n a ut ili z a do pel a Mbr owse( ) , as quai s est o l i st a das a
segui r :

AXPESQUI ( )
AXVISUAL( )
AXINCLUI ( )
AXALTERA( )
AXDELETA( )

AXALTERA( )

Sintaxe
AxAltera(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
F uno de al t er a o pa dr o das i nf or maes d e u m r egi st ro, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXDELETA( )

Sintaxe
AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,;
aAuto, lMaximized)
Descrio
F uno de e xcl uso pa dr o das i nf or maes de u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXINCLUI ( )

Sintaxe
AxInclui(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
F uno de i ncl uso pa dr o das i nf or maes d e u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXPESQUI ( )

Sintaxe AXPESQUI ( )
Descrio
F uno de pesqui sa pa dr o e m r egi st ros e xi bi dos pel os br owses do si st e ma ,
a qu al posi ci on a o br owse no r egi st ro pesqui sa do. Exi be u ma t el a que
per mi t e a sel e o do ndi ce a ser ut i li z a do n a pesqui sa e a di gi t ao das
i nf or maes que compe a cha v e de busca .


- 151 -

ADVPL Completo



AXVISUAL( )

Sintaxe
AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,;
aButtons, lMaximized )
Descrio
F uno de vi su ali z ao pa dr o das i nf or maes de u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .


- 152 -

ADVPL Completo



APNDICES

BOAS PRTICAS DE PROGRAMAO

14. Utilizao de Identao

obri ga t ri a a ut ili z ao da i de nt ao, poi s t or n a o cdi go mui t o mai s l eg v el . Vej a os
e x e mpl os a bai xo :


A utili z ao da i de nt ao segui ndo as est r ut ur as de cont rol e de fl uxo ( whil e, i f , caso et c) t or na
a compr e e ns o do cdi go mui t o mai s f cil :



Par a i de nt ar o cdi go utili z e a t ecl a < TAB > e n a f err a me nt a DEV- St udi o, a qu al pode ser
confi gur a da a t r a v s da op o Pr ef er nci as :


- 153 -

ADVPL Completo




15. Capitulao de Palavras-Chave

Uma conv e n o a mpl a me nt e ut i li z a da a de ca pi t ul ar as pal a vr as ch a v es, f unes, v ari v ei s e
ca mpos ut ili z a ndo u ma combi n ao d e ca r act er es e m mai scul o e mi nscul o, vi sa ndo f acili t ar
a l ei t ur a do cdi go f ont e . O cdi go a s egui r :

local ncnt while ( ncnt+ + < 10 ) ntotal + = ncnt * 2 enddo

Fi cari a mel hor com as p al a vr as ch a v es e v ari v ei s ca pi t ul a das :

Local nCnt While ( nCnt+ + < 10 ) nTotal + = nCnt * 2 EndDo



Par a f unes d e ma ni pul ao de da dos qu e comece m por db, a ca pi t ul ao
s ser ef et u a da a ps o db :

E dbSeek( )
E dbSelectArea( )








- 154 -

ADVPL Completo



15.1. Palavras em maisculo

A r egr a ut i li z ar car act er es e m mai scul o par a :

E Constantes:
# defi ne NUMLI NES 60 # defi ne NUMPAGES 100 0

E Variveis de memria:
M- > CT2_CRC ONV M- > CT2_MC ONVER : = Cri a Var ( " CT2_C ONVER" )

E Campos:
SC6- > C6_NUMPED

E Querys:
SELECT * FROM. . .


16. Utilizao da Notao Hngara

A not ao hngar a consi st e e m a di ci on ar os pr efi xos a os nomes d e v ari v ei s, de modo a
f aci l me nt e se i de nti fi car se u t i po. I st o f acili t a n a cri ao de cdi gos- f ont e e xt e nsos, poi s
usa ndo a Not a o Hngar a , v oc n o pr eci sa fi car o t e mpo t odo vol t a ndo defi ni o de u ma
v ari v el par a se l e mbr a r qu al o t i po de da dos que d e v e ser col oca do nel a . Vari v ei s de v e m
t er u m pr efi xo d e Not ao Hngar a e m mi nscul as, segui do de u m nome que i de nt i fi que a
f uno da v ari v el , se ndo que a i ni ci al de ca da pal a vr a de v e ser mai scul a .
obri ga t ri a a ut ili z ao dest a not ao par a no me ar v a ri v ei s.
Notao Tipo de dado Exemplo
a Arr a y a Val or es
b Bl oco de cdi go bSe e k
c Car act er cNome
d Da t a dDa t a Base
l Lgi co l Conti nu a
n Nu mri co nVal or
o Obj et o oMai n Wi ndow
x I ndefi ni do x Cont e udo







- 155 -

ADVPL Completo



17. Palavras reservadas

AADD DTOS I NKEY REPLI CATE VAL
ABS ELSE I NT RLOCK VALTYPE
ASC ELSEI F LASTREC ROUND WHI LE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRI M YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDI F LOWER SELECT CHR E OF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL F COUNT MI N SQRT
CTOD F I ELDNAME MONTH STR DATE
F I LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED F OUND PROCEDURE
TRANSF ORM DEVPOS FUNCTI ON PROW TRI M
DOW I F RECCOUNT TYPE DT OC
I I F RECNO UPPER TRY AS
CATCH THROW




E Pal a vr as r eser v a das n o pod e m ser ut i li z a das par a v ari v ei s,
procedi me nt os ou f unes ;

E F unes r eser v a das s o per t e nce nt es ao compi l a dor e no pod e m ser
r ed efi ni das por u ma a plica o ;

E Todos os i de nt i fi ca dor es que comea r e m com doi s ou mai s car act er es
_ s o ut ili z a dos como i de nti fi ca dor es i nt er nos e s o r eser v a dos.

E I d e nt i fi ca dor es de escopo PRI VATE ou PUBLI C utili z a dos e m a pli caes
esp ec fi cas dese nvol vi da por ou par a cli e nt es d e v e m t er su a
i de nti fi cao i ni ci a da por u m ca r act er e _.




- 156 -

ADVPL Completo



LISTAS DE EXERCCIOS

Mdulo 01: Introduo programao





01
Apri mor ar os segui nt es al gori t mos descri t os na a post i l a :

E Usar t el ef on e pbli co car t o
E Fri t ar u m ov o
E Masca r u m chi cl et e
E Tr oca r l mpa das
E Descascar ba t a t as
E Jogar o Jogo da Forca





02
Mont ar os di a gr a mas de bl ocos par a os al gori t mos dese nv ol vi dos no e x erc ci o
a nt eri or :

E Usar t el ef on e pbli co car t o
E Fri t ar u m ov o
E Masca r u m chi cl et e
E Tr oca r l mpa das
E Descascar ba t a t as
E Jogar o Jogo da Forca




- 157 -

ADVPL Completo



Mdulo 02: A linguagem ADVPL



01

Dese nv ol v er u m pr ogr a ma que i mpl e me nt e o al gori t mo de descasca r b a t a t as,
utili z a ndo a est r ut ur a de r epet i o Whi l e, de monst r a ndo qua nt as ba t a t as
f or a m descasca das :



02

Dese nv ol v er u m pr ogr a ma que i mpl e me nt e o al gori t mo de descasca r b a t a t as,
utili z a ndo a est r ut ur a d e r ep et i o F OR, d e monst r a ndo qu a nt as ba t a t as f or a m
descasca das :



03

Dese nv ol v er u m pr ogr a ma que i mpl e me nt e o al gori t mo de descasca r b a t a t as,
utili z a ndo a est r ut ur a de r ep et i o F OR, de monst r a ndo qu a nt as ba t a t as f al t a m
par a ser e m descasca das :


- 158 -

ADVPL Completo



04 Dese nv ol v er u m progr a ma que i mpl e me nt e o al gori t mo do Jogo da F orca :



05 Dese nv ol v er u m progr a ma que i mpl e me nt e o al gori t mo do Jogo da Vel ha :



06
Dese nv ol v er u m pr ogr a ma que p er mi t a ao usuri o pesqui sar u m cl i e nt e
i nf or ma ndo se u CNPJ e caso o mesmo e xi st a n a base, e xi bi r suas pri nci pai s
i nf or maes.


07
Ut ili z a ndo a i nt erf ace vi su al dese nv ol vi da par a o e x erc ci o a nt eri or,
dese nvol v er a f uno ge nri ca Get Te xt o( ) , par a ser ut ili z a da n as a pli caes do
Jogo da Vel ha e Jogo da Forca .


- 159 -

ADVPL Completo



08
Ut ili z a ndo a f uno AVI SO( ) dese n vol v er u m pr ogr a ma que per mi t a ao usu ri o
sel eci on ar a opo de busca d e CNPJ por cli e nt e ou f or necedor, e caso
e ncont r e e xi ba se us da dos pri nci pai s.

09
Dese nv ol v er u ma r ot i na que ca pt ur e v ri os CNPJs de cl i e nt es i nf or ma dos p el o
usu ri o, e v eri fi que par a ca da u m del es se o mesmo e xi st e ou n o n a base de
da dos. Ao fi n al i nf or mar qu ai s CNPJs f or a m i nf or ma dos, e de acor do com a
sel e o do usu ri o, e xi bi r os da dos pri nci pai s de u m dest es cl i e nt es.

10
Ut ili z a ndo a f uno F ORMBATCH( ) dese nv ol v er u ma rot i n a que v eri fi que se
par a ca da i t e m de u m not a fi scal de e nt r a da e xi st e o r esp ect i vo ca beal ho, e
caso sej a e ncont r a do al gu m i t e m i nconsi st e nt e, co muni que est a ocor r nci a ao
usu ri o que est r e al i z a ndo o processa me nt o.

11
Dese nv ol v er u ma rot i n a que, a t r a v s do uso de u m bl oco de cdi go, conv er t a
a est r ut ur a da t a bel a SA1 obt i da com a f uno DBSTRUCT( ) e m u ma st ri ng
de nomi n a da cCa mpo.


- 160 -

ADVPL Completo



Mdulo 03: Desenvolvendo pequenas customizaes



01
Dese nv ol v er u ma v al i dao pa r a u m ca mpo espec fi co do t i po car act er e , cuj o
cont e do est ej a r el aci on a do a out r a t a bel a , e que e xi ba u ma me nsa ge m de
a vi so caso o cdi go i nf or ma do n o e xi st a nest a t a bel a r el aci on a da .


02
Dese nv ol v er u ma v ali dao par a u m ca mpo ca r act er e e xi st e nt e n a base, par a
que sej a a v al i a do se a quel e cdi go j e xi st e ca dast r a do, e caso posi t i vo e xi ba
u ma me nsa g e m d e a vi so al er t a ndo d est a ocorr nci a .



03
Dese nv ol v er u m ga t il ho que r et or ne u ma d escri o compl e me nt a r par a u m
ca mpo vi ncul a do ao ca mpo cdi go ut ili z a do nos e x erc ci os a nt eri or es.




- 161 -

ADVPL Completo



04
Cust omi z ar o par met r o que d efi ne o pr efi xo do t t ul o de cont as a pa gar
ger a do pel a i nt egr ao COMPRAS - > F I NANCEI RO a t r a v s da i ncl uso de u ma
not a fi scal de e nt r a da , de f or ma que o pr efi x o do t t ul o sej a ger a do com o
cdi go da fi li al corr e nt e.


05
Prot eger a r ot i n a dese n vol vi da no e x erc ci o a nt eri or , de f or ma a ga r a nt i r que
na utili z ao da fi li al como pr efi xo do t t ul o n o i r ocorr er dupli ci da de de
da dos no cont as a pa gar do fi n a ncei ro.




06
I mpl e me nt ar u ma v al i dao a di ci on al no ca dast ro de cl i e nt es, a t r a v s do
pont o de e nt r a da a d e qua do, de f or ma que o ca mpo CNPJ ( A1_CGC) sej a
obri ga t ri o par a t odos os t i pos de cl i e nt e, e xcet o os d efi ni dos como Ext eri or .














- 162 -

ADVPL Completo


MDULO 04: Desenvolvendo aplicaes em ADVPL

18. A linguagem ADVPL

A Li ngu a ge m ADVPL t e v e se u i n ci o e m 1994, se ndo na v er da d e u ma e vol uo n a ut i li z ao de
li ngua ge ns no pa dr o x Base pel a Mi crosi ga Sof t wa r e S. A. ( Cl i pper, Vi su al Obj ect s e d epoi s
Fi v e Wi n) . Com a cri ao da t ecnol ogi a Prot he us, er a necess ri o cri ar u ma li ngu a ge m que
supor t asse o pa dr o x Base pa r a a ma nut e no de t odo o cdi go e xi st e nt e do si st e ma de ERP
Si ga Adv a nced. Foi e nt o cri a da a li ngu a ge m cha ma da Adv a nced Pr ot he us La ngu a ge.

O ADVPL u ma e xt e nso do pa dr o x Base de coma ndos e f unes, oper a dor es, est r ut ur as d e
cont r ol e de fl uxo e pal a vr as r eser v a das, cont a ndo t a mb m co m f unes e coma ndos
di sponi bili z a dos pel a Mi crosi ga que a t or n a u ma li ngu a ge m compl et a par a a cri ao d e
a pli caes ERP pront as par a a I nt er net . Ta mb m u ma l i ngu a ge m ori e nt a da a obj et os e
e v e nt os, p er mi t i ndo a o progr a ma dor d ese nv ol v er a pli caes vi suais e cri ar su as prpri as
cl asses de obj et os.

Qu a ndo compi l a dos, t odos os ar qui vos d e cdi go t or na m- se uni da des de i nt eli g nci a bsi cas,
cha ma dos APO s ( d e Adv a nced Prot he us Obj ect s) . Tai s APO s s o ma nt i dos e m u m
r eposi t ri o e car r ega dos di n a mi ca me nt e pel o PROTHEUS Ser v er par a a e x ecu o. Como n o
e xi st e a li nk edi o, ou uni o f si ca do cdi go compi l a do a u m det er mi n a do mdul o ou
a pli cao, f unes cri a das e m ADVPL pod e m ser e x ecut a das e m qual quer pont o do a mbi e nt e
Adv a nced Pr ot he us.

O compil a dor e o i nt er pr et a dor da li ngua ge m ADVPL o prpri o ser vi dor PROTHEUS
(PROTHEUS Ser v er ) , e e xi st e u m a mbi e nt e vi su al par a dese nvol vi me nt o i nt egr a do
(PROTHEUSI DE) onde o cdi go pod e ser cri a do, compi l a do e depur a do.

Os progr a mas e m ADVPL pod e m cont er coma ndos ou f unes de i nt erf ace com o usu ri o. De
acor do com t al car act er st i ca , t ai s progr a mas s o subdi vi di dos n as segui nt es ca t egori as :

Programao Com Interface Prpria com o Usurio

Nest a ca t egori a e nt r a m os pr ogr a mas d ese nvol vi dos par a ser e m e x ecut a dos a t r a v s do
t er mi n al r e mot o do Prot he us, o Pr ot he us Re mot e. O Pr ot he us Re mot e a a pli cao
e ncar r ega da da i nt erf ace e da i nt er a o com o usu ri o, se ndo que t odo o pr ocessa me nt o do
cdi go e m ADVPL, o acesso a o ba nco de da dos e o ger e nci a me nt o de cone xes ef et u a do no
Prot h e us Ser v er. O Pr ot he us Re mot e o pri nci pal mei o de acesso a e x ecuo de r ot i n as
escri t as e m ADVPL no Prot h e us Ser v er, e por i sso per mi t e e x ecut ar qu al quer t i po de cdi go,
t e nh a el e i nt erf ace com o usu ri o ou n o. Por m nest a ca t egori a so consi der a dos a p e n as os
progr a mas qu e r e al i z e m al gu m ti po de i nt erf ace r e mot a ut i li z a ndo o prot ocol o d e comuni cao
do Prot he us.

Pode m- se cri ar r ot i n as par a a cust omi z ao do si st e ma ERP Mi cr osi ga Prot he us, desde
processos a di ci on ai s a t mesmo r el a t ri os. A gr a nde v a nt a ge m a pr ov ei t ar t odo o a mbi e nt e
mont a do pel os mdul os do ERP Mi crosi ga Prot he us. Por m, com o ADVPL poss v el a t
mesmo cri ar t oda u ma a pli cao, ou mdul o, do comeo.

Todo o cdi go do si st e ma ERP Mi crosi ga Prot he us escri t o e m ADVPL.


- 163 -

ADVPL Completo



Programao Sem Interface Prpria com o Usurio

As rot i n as cri a das se m i nt erf ace so consi der a d as nest a ca t egori a por que ger al me nt e t m u ma
utili z ao mai s espec fi ca do que u m processo a di ci on al ou u m r el a t ri o nov o. Tai s rot i n as n o
t m i nt erf ace com o usu ri o a t r a v s do Pr ot he us Re mot e , e qu al quer t e nt a t i v a nesse se nt i do
( como a cri ao de u ma j a nel a pa dr o) ocasi on ar u ma e xceo e m t e mpo de e x ecu o. Est as
rot i n as so a p e n as processos, ou Jobs, e x ecut a dos no Pr ot he us Ser v er. Al gu mas v e z es, a
i nt erf ace dest as rot i n as fi ca a car go d e a pli caes e xt er n as, dese nvol vi das e m out r as
li ngua ge ns, que s o r espons v ei s por i ni ci ar os pr ocessos no ser vi dor Pr ot he us a t r a v s dos
mei os di spon v ei s de i nt egr ao e con ect i vi da de no Prot h e us.

De acor do com a ut ili z ao e com o mei o de conect i vi da de utili z a do, est as rot i n as so
subca t egori z a das assi m:

E Programao por Processos

Rot i n as escri t as e m ADVPL pode m ser i ni ci a das como pr ocessos i ndi vi du ai s ( se m i nt erf ace) no
Prot h e us Ser v er a t r a v s d e du as ma n ei r as : I ni ci a das por out r a r ot i n a ADVPL a t r a v s d a
cha ma da de f unes como St a r tJob( ) ou CallProc( ) ou i ni ci a das a ut oma t i ca me nt e na
i ni ci ali z ao do Pr ot he us Ser v er ( qu a ndo pr opri a me nt e confi gur a do) .

E Programao de RPC

At r a v s d e u ma bi bli ot eca d e f unes di spon v el no Prot he us ( u ma API de comuni cao) ,
pode m- se e x ecut ar r ot i n as escri t as e m ADVPL di r et a me nt e no Prot h e us Ser v er, a t r a v s de
a pli caes e xt er n as escri t as e m out r as l i ngu a ge ns. I st o o que se ch a ma de RPC ( d e Re mot e
Procedur e Call , ou Cha ma da de Pr ocedi me nt os Re mot a ) .

O ser vi dor Prot h e us t a mb m pod e e x ecut a r r ot i nas e m ADVPL e m out ros ser vi dor es Pr ot he us
a t r a v s d e cone x o TCP/ I P di r et a ut ili z a ndo o concei t o de RPC. Do mesmo modo, a pl i caes
e xt er n as pod e m r equi si t ar a e x ecu o de r ot i n as escri t as e m ADVPL a t r a v s de con e x o
TCP/ I P di r et a .
Progr a mao Web

O Pr ot he us Ser v er pode t a mb m ser e x ecut a do como u m ser vi dor Web, r esponde ndo a
r equi si es HTTP. No mome nt o dest as r equi si es, pod e e x ecut ar r ot i n as escri t as e m ADVPL
como pr ocessos i ndi vi duai s, e nvi a ndo o r esul t a do das f unes como r et or no das r equi si es
par a o cli e nt e HTTP ( co mo por e x e mpl o, u m Br owser d e I nt er net ) . Qu al quer rot i na escri t a e m
ADVPL que n o cont e n h a coma ndos de i nt erf ace pode ser e x ecut a d a a t r a v s d e r equi si es
HTTP. O Pr ot he us per mi t e a compil ao de ar qui vos HTML cont e ndo cdi go ADVPL e mbut i do.
So os ch a ma dos ar qui vos ADVPL ASP, par a a cri ao d e p gi n as di n mi cas.

E Programao TelNet

Tel Net par t e da ga ma de pr ot ocol os TCP/ I P que per mi t e a con e x o a u m comput a dor r e mot o
a t r a v s de u ma a pl i cao cl i e nt e dest e pr ot ocol o. O PROTHEUS Ser v er pod e e mul ar u m
t er mi n al Tel Net , a t r a v s da e x ecu o de r ot i n as escri t as e m ADVPL. Ou sej a , pode - se escr e v er
rot i nas ADVPL cuj a i nt erf ace fi nal ser u m t er mi n al Tel Net ou u m col et or de da dos mv el .





- 164 -

ADVPL Completo



19. Estrutura de um Programa ADVPL

Um progr a ma de comput a dor n a da mai s do que u m gr upo de coma ndos l ogi ca me nt e
di spost os com o obj et i vo de e x ecut ar d et er mi na da t ar ef a . Esses coma ndos s o gr a v a dos e m
u m ar qui vo t e xt o que t r a nsf or ma do e m u ma li ngu a ge m e x ecut v el por u m comput a dor
a t r a v s d e u m pr ocesso cha ma do co mpil ao. A compi l ao subst i t ui os coma ndos d e al t o
n v el ( que os hu ma nos compr e e nde m) por i nst r ues de bai xo n v el ( compr e e ndi da pel o
si st e ma oper aci onal e m e x ecu o no co mput a dor ) . No caso do ADVPL, n o o si st e ma
oper aci on al de u m comput a dor que i r e x ecut ar o cdi go compil a do, mas si m o Prot he us
Ser v er.

De nt r o d e u m progr a ma , os coma ndos e f unes ut i li z a dos de v e m segui r r egr as d e si nt a x e da
li ngua ge m utili z a da , poi s caso cont r ri o o pr ogr a ma ser i nt errompi do por er ros. Os er ros
pode m ser d e compi l ao ou de e x ecuo.

Er ros de compi l ao s o a quel es e ncont r a dos n a si nt a x e que n o per mi t e m que o ar qui vo de
cdi go do progr a ma se j a compi l a do. Pode m ser coma ndos esp eci fi ca dos d e f or ma err ne a ,
utili z ao i nv li da de op er a dor es, et c.

Er ros de e x ecuo so a quel es que acont ece m depoi s da compil ao, qu a ndo o progr a ma est
se ndo e x ecut a do. Pod e m ocor r er por i n mer as r a z es, mas g er al me nt e se r ef er e m as f unes
no e xi st e nt es, ou v ari v ei s n o cri a das ou i ni ci ali z a das, et c.


Linhas de Programa

As li nh as e xi st e nt es d e nt ro de u m ar qui vo t e x t o de cdi go de progr a ma pode m ser li nh as de
coma ndo, l i nh as de come nt ri o ou l i nhas mi st as.

E Linhas de Comando

Li nh as de coma ndo possue m os co ma ndos ou i nst r ues que ser o e x ecut a das. Por e x e mpl o :

Local nCnt
Local nSoma := 0
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

E Linhas de Comentrio

Li nh as de come nt ri o possu e m u m t e xt o qu al quer, mas no s o e x ecut a das. Ser v e m a pe n as
par a docu me nt a o e p ar a t or n ar mai s f ci l o e nt e ndi me nt o do pr ogr a ma . Exi st e m t r s f or mas
de se co me nt ar l i nh as de t e xt o. A pri mei r a del as ut ili z ar o si n al de * ( ast eri sco) no comeo
da li nh a :

* Programa para clculo do total
* Autor: Microsiga Software S.A.
* Data: 2 de outubro de 2001

- 165 -

ADVPL Completo



Todas as l i nh as i ni ci a das com u m si nal de ast eri sco s o consi der a das como come nt ri o. Pod e -
se ut ili z ar a pal a vr a NOTE ou doi s s mbol os da l et r a " e " comerci al (&&) par a r e al i z ar a f un o
do si n al de ast eri sco. Por m t odas est as f or mas de come nt ri o de li nhas so obsol et as e
e xi st e m a pe n as par a compa t i bili z ao com o pa dr o x Base. A mel hor ma nei r a de come nt ar
li nhas e m ADVPL ut ili z ar duas ba rr as t r a nsv ersai s :

// Programa para clculo do total
// Autor: Microsiga Software S.A.
// Data: 2 de outubro de 2001

Out r a f or ma d e docu me nt ar t e xt os ut i li z ar as barr as t r a nsv ersai s j unt a me nt e com o
ast eri sco, pod e ndo- se come nt ar t odo u m bl oco de t e xt o se m pr eci sar come nt ar l i nh a a li nh a :

/*
Programa para clculo do total
Autor: Microsiga Software S.A.
Data: 2 de outubro de 2001
*/

Todo o t e xt o e ncont r a do e nt r e a a ber t ur a (i ndi ca da pel os car act er es / *) e o f ech a me nt o
(i ndi ca da pel os ca r act er es * / ) consi der a do co mo come nt ri o.

E Linhas Mistas

O ADVPL t a mb m per mi t e que e xi st a m l i nh as de coma ndo com co me nt ri o. I st o poss v el
a di ci ona ndo- se as du as barr as t r a nsv ersai s ( / / ) ao fi n al da li nh a de coma ndo e a di ci on a ndo- se
o t e xt o do come nt ri o :

Local nCnt
Local nSoma := 0 // Inicializa a varivel com zero para a soma
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

E Tamanho da Linha

Assi m como a li nh a f sica , del i mi t a da pel a qu a nti da de de car act er es que pode ser di gi t a do no
edi t or de t e xt os ut ili z ado, e xi st e u ma l i nh a consi der a da li nh a l gi ca . A li nh a l gi ca , a quel a
consi der a da pa r a a compil ao como u ma ni ca li nh a de coma ndo.

A pri nc pi o, ca da li nha di gi t ada no ar qui vo t e xt o di f er e nci a da a ps o pr essi ona me nt o da t ecl a
< Ent er > . Ou sej a , a l i nh a l gi ca , a li nh a f si ca no a r qui vo. Por m al gu mas v e z es, por
li mi t ao f si ca do edi t or de t e xt o ou por est t i ca , pod e - se " quebr a r " a li nh a l gi ca e m mai s de
u ma li nh a f si ca no ar qui vo t e xt o. I st o ef et u a do ut ili z a ndo- se o si n al de pont o- e- v r gul a ( ; ) .

If !Empty(cNome) .And. !Empty(cEnd) .And. ; <enter>
!Empty(cTel) .And. !Empty(cFax) .And. ; <enter>
!Empty(cEmail)

GravaDados(cNome,cEnd,cTel,cFax,cEmail)

Endif

Nest e e x e mpl o e xi st e u ma li nh a de coma ndo par a a checa ge m das v ari v ei s utili z a das. Como a
li nha t or n a - se mui t o gr a nde, pode - se di vi di -l a e m mai s de u ma li nh a f si ca utili z a ndo o si n al de

- 166 -

ADVPL Completo


pont o- e- v r gul a . Se u m si nal de pont o- e- v r gul a f or esqueci do n as duas pri mei r as li nhas,
dur a nt e a e x ecu o do progr a ma ocor r er u m err o, poi s a segunda li nh a f si ca ser
consi der a da como u ma segunda li nh a de coma ndo n a compil ao. E dur a nt e a e x ecu o est a
li nha n o t er se nt i do.

19.1. reas de um Programa ADVPL

Apesa r de n o ser u ma li ngua ge m de pa dr es r gi dos com r el ao est r ut ur a do progr a ma ,
i mpor t a nt e i de nti fi car al gu mas de su as pa r t es. Consi der e o pr ogr a ma d e e x e mpl o a bai xo :

#include protheus.ch

/*
+===========================================+
| Programa: Clculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+===========================================+
*/

User Function CalcFator()

Local nCnt
Local nResultado := 1 // Resultado do fatorial
Local nFator := 5 // Nmero para o clculo

// Clculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

// Exibe o resultado na tela, atravs da funo alert
Alert("O fatorial de " + cValToChar(nFator) + ;
" " + cValToChar(nResultado))

// Termina o programa
Return

A est r ut ur a d e u m pr ogr a ma ADVPL compost a pel as segui nt es r e as :

E r e a de I d e nt i fi cao
- Decl ar a o dos i ncl udes
- Decl ar a o da f uno
- I d e nt i fi cao do pr ogr a ma

E r e a de Aj ust es I ni ci ai s
- Decl ar a o das v a ri v ei s

E Cor po do Progr a ma
- Pr epa r ao pa r a o processa me nt o
- Processa me nt o

E r e a de Encer r a me nt o

- 167 -

ADVPL Completo



rea de Identificao

Est a u ma r e a que n o obri ga t ri a e d e di ca da a docu me nt ao do progr a ma . Qua ndo
e xi st e nt e, cont m a pe n as come nt ri os e x pl i ca ndo a su a fi nali da de, da t a de cri ao, a ut or , et c. ,
e a pa r ece no comeo do progr a ma , a nt es de qu al quer li nh a de coma ndo.

O f or ma t o pa r a est a r e a no d efi ni do. Pode - se col ocar qu al quer t i po de i nf or ma o
desej a da e escol her a f or ma t a o a pr opri a da .

#include protheus.ch

/*
+==========================================+
| Programa: Clculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+==========================================+
*/

User Function CalcFator()


Opci onal me nt e pode m- se i ncl ui r defi ni es de const a nt es ut ili z a das no progr a ma ou i ncl uso
de ar qui vos de ca b eal ho nest a r e a .

rea de Ajustes Iniciais

Nest a r e a ger al me nt e se f a z e m os a j ust es i ni ci ai s, i mpor t a nt es par a o cor r et o f unci on a me nt o
do progr a ma . Ent r e os a j ust es se e ncont r a m decl ar aes de v ari v ei s, i ni ci ali z aes, a b er t ur a
de ar qui vos, et c. Apesa r do ADVPL no ser u ma li ngu a ge m r gi da e as v ari v ei s poder e m ser
decl ar a das e m qual quer l ugar do progr a ma , aconsel h v el f a z -l o nest a r e a vi sa ndo t or n a r o
cdi go mai s l eg v el e f acili t ar a i de nti fi cao d e v ari v ei s n o ut ili z a das.

Local nCnt
Local nResultado := 0 // Resultado do fatorial
Local nFator := 10 // Nmero para o clculo

Corpo do Programa

nest a r e a que se e ncont r a m as l i nh as de cdi go do pr ogr a ma . onde se r e al i z a a t ar ef a
necess ri a a t r a v s da or ga ni z ao l gi ca dest as li nh as de coma ndo. Esp er a - se que as l i nhas de
coma ndo est ej a m or ga ni z a das de t al modo que no fi n al dest a r e a o r esul t a do esper a do sej a
obt i do, sej a el e ar ma z e n a do e m u m ar qui vo ou e m v ari v ei s de me mri a , pront o par a ser
e xi bi do ao usu ri o a t r a v s d e u m r el a t ri o ou n a t el a .

// Clculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

- 168 -

ADVPL Completo



A pr epar a o par a o pr ocessa me nt o f or ma da pel o conj unt o de v ali daes e processa me nt os
necess ri os a nt es da r e ali z ao do pr ocessa me nt o e m si .

Av ali a ndo o processa me nt o do cl cul o do f a t ori al descri t o a nt eri or me nt e , pod e - se d efi ni r que a
v ali dao i ni ci al a ser r e ali z a da o cont e do d a v ari v el nF a t or, poi s a mesma d et er mi n ar a
corr et a e x ecu o do cdi go.


// Clculo do fatorial
nFator := GetFator()
// GetFator funo ilustrativa na qual a varivel recebe a informao do
usurio.

If nFator <= 0
Alert(Informao invlida)
Return
Endif

For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt


rea de Encerramento

nest a r e a onde as fi n ali z aes s o ef et u a das. onde os a r qui vos a ber t os so f ech a dos, e o
r esul t a do da e x ecuo do pr ogr a ma ut ili z a do. Pod e - se e xi bi r o r esul t a do ar ma z e n a do e m
u ma v ari v el ou e m u m ar qui vo ou si mpl esme nt e fi n ali z ar, caso a t ar ef a j t e nh a si do t od a
compl et a da no cor po do progr a ma . nest a r e a que se e ncont r a o e ncerr a me nt o do
progr a ma . Todo progr a ma e m ADVPL de v e se mpr e t er mi n ar com a pal a vr a ch a v e r et ur n.

// Exibe o resultado na tela, atravs da funo alert
Alert("O fatorial de " + cValToChar(nFator) + ;
" " + cValToChar(nResultado))

// Termina o programa
Return


- 169 -

ADVPL Completo



20. Declarao e Atribuio de Variveis

20.1. Tipo de Dados

O ADVPL no u ma li ngua ge m de t i pos r gi dos ( st rongl y t y ped) , o que si gni fi ca que v ari v ei s
de me mri a pode m r eceber di f er e nt es t i pos de da dos dur a nt e a e x ecuo do progr a ma .

As v a ri v ei s pode m t a mb m cont er obj et os, mas os t i pos pri mri os da l i ngu a ge m so :

Numrico

O ADVPL n o di f er e nci a v al or es i nt ei ros de v al or es com pont o fl ut ua nt e, por t a nt o pode m- se
cri ar v ari v ei s nu mri cas co m qu al quer v al or de nt ro do i nt er v al o per mi t i do. Os segui nt es
el e me nt os s o do t i po de da do nu mri co :

2
43.53
0.5
0.00001
1000000

Uma v ari v el do t i po de da do nu mri co pode cont er u m n mer o de d e z oi t o d gi t os i ncl ui ndo o
pont o fl ut u a nt e, no i nt er v al o de 2. 2250738 585072014 E308 a t 1. 7976931348623158
E + 308.

Lgico

Val or es l gi cos e m ADVPL s o i de nti fi ca dos a t r a v s d e . T. ou . Y. par a v er da d ei ro e . F. ou . N.
par a f al so (i ndepe nde nt e me nt e se os ca r act er es est i v er e m e m mai scul o ou mi nscul o) .

Caractere

St ri ngs ou ca dei as de car act er es so i de nti fi cadas e m ADVPL por bl ocos d e t e xt o e nt r e aspas
dupl as ( " ) ou aspas si mpl es (') :

"Ol mundo!"
'Esta uma string'
"Esta 'outra' string"

Uma v a ri v el do t i po car act er e pode cont er st ri ngs com no m xi mo 1 MB, ou sej a , 104857 6
car act er es.

Data

O ADVPL t e m u m t i po de da dos espec fi co par a da t as. I nt er n a me nt e as v ari v ei s dest e t i po de
da do s o a r ma z e na das como u m n mero cor r esponde nt e a data Juliana.

Vari v ei s do t i po de d a dos Da t a n o pod e m ser d ecl ar a das di r et a me nt e, e si m a t r a v s da
utili z ao de f unes espec fi cas como por e x e mpl o CTOD( ) que conv er t e u ma st ri ng par a
da t a .

- 170 -

ADVPL Completo



Array

O Ar r a y u m t i po de da do especi al . a di sposi o de out r os el e me nt os e m col un as e li nhas. O
ADVPL supor t a ar r a ys uni di me nsi on ai s ( v et or es) ou mul t i di me nsi on ai s ( ma t ri z es) . Os
el e me nt os d e u m a rr a y so acessa dos a t r a v s d e ndi ces nu mri cos i ni ci a dos e m 1,
i de nti fi ca ndo a li nh a e col un a par a qu a nt as di me nses e xi st i r e m.

Arr a ys d e v e m ser ut ili z a das com ca ut el a , poi s se f or e m mui t o gr a ndes pode m e x a uri r a
me mri a do ser vi dor.

Bloco de Cdigo

O bl oco de cdi go u m t i po de da do especi al . ut ili z a do par a a r ma z e n ar i nst r ues escri t as
e m ADVPL que pod er o ser e x ecut a das post eri or me nt e .

20.2. Declarao de variveis

Vari v ei s de me mri a so u m dos r ecursos mai s i mpor t a nt es de u ma li ngu a ge m. So r e as d e
me mri a cri a das par a ar ma z e n ar i nf or maes utili z a das por u m progr a ma par a a e x ecuo d e
t ar ef as. Por e x e mpl o, qu a ndo o usu ri o di gi t a u ma i nf or mao qu al quer , como o nome de u m
produt o, e m u ma t el a de u m progr a ma est a i nf or mao ar ma z e n a da e m u ma v ari v el de
me mri a par a post eri or me nt e ser gr a v a da ou i mpr essa .

A par t i r do mome nt o que u ma v ari v el cri a da , no necess ri o mai s se r ef er e nci ar ao se u
cont e do, e si m ao se u nome.

O nome de u ma v ari v el u m i de nti fi ca dor ni co o qu al de v e r esp ei t ar u m mximo de 10
caracteres. O ADVPL n o i mpede a cri ao d e u ma v ari v el de me mri a cuj o nome cont e nha
mai s de 10 car act er es, porm apenas os 10 primeiros sero considerados par a a
l ocali z ao do cont e do ar ma z e n a do.

Por t a nt o se f or e m cri a das duas v ari v ei s cuj os 10 pri mei ros car act er es f or e m i gu ai s, como
nTot al Ger al Anu al e nTot al Ger al Me nsal , as r ef er nci as a qu al quer u ma del as no pr ogr a ma
r esul t ar o o mesmo, ou sej a , ser o a mesma v ari v el :

nTotalGeralMensal := 100
nTotalGeralAnual := 300
Alert("Valor mensal: " + cValToChar(nTotalGeralMensal))

Qu a ndo o cont e do da v ari v el nTot al Ger al Me nsal e xi bi do, o se u v al or ser de 300. I sso
acont ece por qu e no mome nt o qu e esse v al or f oi a t ri bu do v ari v el nTot al Ger al Anu al , o
ADVPL consi der ou a pe n as os 10 pri mei ros ca r act er es ( assi m como o f a z qu a ndo de v e e xi bi r o
v al or da v ari v el nTot al Ger al Me nsal ) , ou sej a , consi der ou- as como a mesma v ari v el . Assi m o
v al or ori gi n al de 100 f oi subst i t u do pel o de 300.


- 171 -

ADVPL Completo



20.3. Escopo de variveis

O ADVPL n o u ma li ngu a ge m de t i pos r gi dos par a v a ri v ei s, ou sej a , n o necess ri o
i nf or mar o t i po de da dos que det er mi n a da v ari v el i r cont er no mome nt o de su a d ecl ar a o,
e o se u v al or pod e mud ar dur a nt e a e x ecu o do pr ogr a ma .

Ta mb m n o h necessi da de de decl ar ar v a ri v ei s e m u ma seo espec fi ca do se u cdi go
f ont e, e mbor a sej a aconsel h v el decl ar ar t odas as v a ri v ei s necess ri as no comeo, t or na ndo
a ma nut e no mai s f ci l e e vi t a ndo a decl ar a o de v a ri v ei s desn ecessri as.

Par a d ecl ar ar u ma v a ri v el de v e - se ut ili z ar u m i de nt ifica dor d e escopo. Um i de nt i fi ca dor d e
escopo u ma pal a vr a ch a v e que i ndi ca a que cont e xt o do pr ogr a ma a v ari v el decl ar a da
per t e nce . O cont e xt o d e v ari v ei s pod e ser l ocal ( vi su ali z a das a pe n as de nt r o do pr ogr a ma
a t ual ) , pblico ( vi su ali z a das por qu al quer out ro progr a ma ) , e nt r e out r os.

O Contexto de Variveis dentro de um Programa

As v ari v ei s decl ar a das e m u m progr a ma ou f uno, s o vi s v ei s de acor do com o escopo ond e
so d efi ni das. Como t a mb m do escopo d ep e nde o t e mpo d e e xi st nci a das v ari v ei s. A
defi ni o do escopo d e u ma v ari v el ef et ua da no mome nt o de su a d ecl ar ao.

Local nNu mero : = 10

Est a li nh a de cdi go decl ar a u ma v ari v el cha ma da nNu mero i ndi ca ndo que per t e nce se u
escopo l ocal .

Os i de nt i fi ca dor es d e escopo s o :

E Local
E St a t i c
E Pri v a t e
E Publi c

O ADVPL n o r gi do e m r el ao decl ar a o de v ari v ei s no comeo do progr a ma . A i ncl uso
de u m i de nti fi ca dor de escopo n o necess ri o par a a d ecl ar a o d e u ma v ari v el , cont a nt o
que u m v al or l he sej a a t ri bu do.

nNumero2 := 15

Qu a ndo u m v al or a t ri bu do u ma v ari v el e m u m progr a ma ou f uno, o ADVPL cri ar a
v ari v el caso el a n o t e nha si do decl ar a da a nt eri or me nt e. A v ari v el e nt o cri a da como se
t i v esse si do decl ar a da como Pri v a t e.

De vi do a essa car act er st i ca , qu a ndo se pr e t e nde f a z er u ma a t ri bui o a u ma v ari v el
decl ar a da pr e vi a me nt e mas escr e v e - se o no me da v a ri v el de f or ma i ncorr et a , o ADVPL n o
ger a r ne nhu m err o de compil ao ou de e x ecuo. Poi s compr e e nder o nome da v ari v el
escri t o de f or ma i ncorr e t a como se f osse a cri ao de u ma nov a v a ri v el . I st o al t er ar a l gi ca
do pr ogr a ma , e u m er ro mui t as v e z es di f cil de i de nt i fi car.

- 172 -

ADVPL Completo



Variveis de escopo local

Vari v ei s de escopo l ocal so per t e nce nt es a pe n as ao escopo da f uno onde f or a m decl ar a das
e d e v e m ser e x pli ci t a me nt e d ecl ar a das com o i de nt i fi ca dor LOCAL, co mo no e x e mpl o :


Function Pai()
Local nVar := 10, aMatriz := {0,1,2,3}
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


Nest e e x e mpl o, a v a ri v el nVar f oi decl ar a da como l ocal e a t ri bu da com o v al or 10. Qu a ndo a
f uno Fil ha e x ecut a da , nVar ai nda e xi st e mas n o pode ser acessa da . Qu a ndo a e x ecu o
da f uno Pai t er mi n ar, a v ari v el nVar d est r u da . Qual quer v ari v el com o mesmo nome no
progr a ma que ch a mou a f uno Pai no af et a da .

Vari v ei s de escopo l ocal so cri a das a ut oma t i ca me nt e ca da v e z qu e a f uno onde f or e m
decl ar a das f or a t i v a da . El as cont i nu a m a e xi st i r e ma nt m se u v al or a t o fi m da a t i v ao da
f uno ( ou sej a , a t qu e a f un o r et or ne o cont rol e par a o cdi go que a e x ecut ou) . Se u ma
f uno ch a ma da r ecursi v a me nt e ( por e x e mpl o, ch a ma a si mes ma ) , ca da ch a ma da e m
r ecurs o cri a u m nov o conj unt o de v a ri v ei s l ocai s.

A vi si bili da de de v ari v ei s de escopo l ocai s i d nt i ca ao escopo d e su a decl ar a o, ou sej a , a
v ari v el vi s v el e m qual quer l ugar do cdi go f ont e e m que f oi decl ar a da . Se u ma f uno
cha ma da r ecursi v a me nt e, a p e n as as v a ri v ei s de escopo l ocal cri a das n a mai s r ece nt e a t i v ao
so vi s v ei s.

Variveis de escopo static

Vari v ei s de escopo st a t i c f unci on a m basi ca me nt e como as v a ri v ei s de escopo l ocal , mas
ma nt m se u v al or a t r a v s da e x ecuo e d e v e m ser decl ar a das e x pl i ci t a me nt e no cdi go co m
o i de nt i fi ca dor STATI C.

O escopo das v a ri v ei s st a t i c depe nde de onde so d ecl ar a das. Se f or e m decl ar a das de nt r o do
cor po de u ma f un o ou procedi me nt o, se u escopo ser l i mi t a do quel a rot i na . Se f or e m
decl ar a das f or a do cor po de qu al quer rot i n a , se u escopo af et a a t odas as f unes d ecl ar a das
no f ont e. Nest e e x e mpl o, a v ari v el nVar d ecl ar a da como st a t i c e i ni ci ali z a da com o v al or 10 :

Function Pai()
Static nVar := 10
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


- 173 -

ADVPL Completo


Qu a ndo a f uno Fil ha e x ecut a da , nVar ai nda e xi st e mas n o pod e ser acessa da . Di f er e nt e
de v ari v ei s decl ar a das como LOCAL ou PRI VATE, nVa r cont i nu a a e xist i r e ma nt m se u v al or
a t ual qu a ndo a e x ecuo da f uno Pai t er mi na . Ent r et a nt o, some nt e pode ser acessa da por
e x ecues subseq e nt es da f un o Pai .

Variveis de escopo private

A decl ar ao opci on al par a v ari v ei s pri v a das. Mas pod e m ser d ecl ar a das e x pl i ci t a me nt e com
o i de nt i fi ca dor PRI VATE.

Adi ci on al me nt e, a a t ri bui o de v al or a u ma v ari v el n o cri a da a nt eri or me nt e
a ut oma t i ca me nt e cri a a v ari v el como pri v a da . Uma v e z cri a da , u ma v ari v el pri v a da conti nu a
a e xi st i r e ma nt m se u v al or a t que o progr a ma ou f uno onde f oi cri a da t er mi ne ( ou sej a ,
a t que a f uno onde f oi cri a da r et or n e par a o cdi go que a e x ecut ou) . Nest e mome nt o,
a ut oma t i ca me nt e dest r u da .

poss v el cri ar u ma nov a v ari v el pri v a da co m o mesmo nome d e u ma v ari v el j e xi st e nt e .
Ent r et a nt o, a nov a ( dupli ca da ) v ari v el pode a pe n as ser cri a da e m u m n v el de a ti v ao
i nf eri or ao n v el onde a v ari v el f oi decl ar a da pel a pri mei r a v e z ( ou sej a , a pe n as e m u ma
f uno ch a ma da p el a f uno onde a v a ri v el j h a vi a si do cri a da ) . A nov a v ari v el pri v a d a i r
esconder qu al quer out r a v ari v el pri v a da ou pbli ca ( v ej a a docu me nt ao sobr e v a ri v ei s
pbli cas) com o mesmo nome e nqu a nt o e xi st i r.

Uma v e z cri a da , u ma v ari v el pri v a da vis v el e m t odo o pr ogr a ma e nqua nt o no f or
dest r u da a ut oma t i ca me nt e qu a ndo a rot i n a que a cri ou t er mi n ar ou u ma out r a v ari v el
pri v a da com o mesmo nome f or cri a da e m u ma subf uno ch a ma da ( nest e caso, a v ari v el
e xi st e nt e t or n a - se i n acess v el a t que a nov a v a ri v el pri v a da sej a dest r u da) .
E m t er mos mai s si mpl es, u ma v ari v el pri v a da vi s v el de nt ro da f uno de cri ao e t odas as
f unes ch a ma das por est a , a me nos que u ma f uno ch a ma da cri e su a pr pri a v ari v el
pri v a da com o mesmo nome .

Por exemplo:


Function Pai()
Private nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Nest e e x e mpl o, a v a ri v el nVar cri a da com escopo pri v a t e e i ni ci ali z a da com o v al or 10.
Qu a ndo a f un o Fi l h a e x ecut a da , nVar ai nda e xi st e e, di f er e nt e de u ma v ari v el de escopo
l ocal , pode ser acessa d a pel a f uno Fil h a . Qua ndo a f uno Pai t er mi nar, nVar ser dest r u da
e qu al quer decl ar ao d e nVar a nt eri or se t or na r acess v el nov a me nt e.


No a mbi e nt e ERP Pr ot he us, e xi st e u ma conv e no a di ci on al a qu al de v e ser
r espei t a da que v ari v ei s e m uso pel a a pli cao n o sej a m i ncorr et a me nt e
ma ni pul a das. Por est a conv e no de v e ser a di ci ona do o ca r act er _ a nt es
do nome d e v ari v ei s PRI VATE e PUBLI C. Mai or es i nf or maes a v ali ar o
t pi co : Boas Pr t i cas de Pr ogr a mao.

Exemplo: Pri v a t e _dDa t a

- 174 -

ADVPL Completo




Variveis de escopo public

Pode m- se cri ar v ari v ei s de escopo publi c di n a mi ca me nt e no cdi go com o i de nti fi ca dor
PUBLI C. As v a ri v ei s dest e escopo cont i nu a m a e xi sti r e ma nt m se u v al or a t o fi m da
e x ecu o da t hr e a d ( cone x o) .

poss v el cri ar u ma v ari v el de escopo pri v a t e com o mesmo nome d e u ma v ari v el de escopo
publi c e xi st e nt e, e nt r et a nt o, n o per mi t i do cri ar u ma v ari v el de escopo publi c com o mesmo
nome d e u ma v ari v el de escopo pri v a t e e xi st e nt e.

Uma v e z cri a da , u ma v ari v el de escopo publi c vi s v el e m t odo o progr a ma onde f oi
decl ar a da a t que sej a escondi da por u ma v a ri v el de escopo pri v a t e cri a da com o mesmo
nome. A nov a v ari v el de escopo pri v a t e cri a da esconde a v a ri v el de escopo publi c e xi st e nt e ,
e est a se t or nar i n acess v el a t que a nov a v ari v el pri v a t e sej a dest r u da . Por e x e mpl o :


Function Pai()
Public nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Nest e e x e mpl o, nVar cri a da como publi c e i nici ali z a da com o v al or 10. Qu a ndo a f uno Fi l h a
e x ecut a da , nVar ai nda e xi st e e pod e ser acessa da . Di f er e nt e d e v a ri v ei s l ocai s ou pri v a t es,
nVar ai nda e xi st e a ps o t r mi no da a e x ecu o da f un o Pai .

Di f er e nt e me nt e dos out ros i de nti fi ca dor es d e escopo, qu a ndo u ma v a ri v el decl ar a da como
pbli ca se m ser i ni ci ali z a da , o v al or assu mi do f al so ( . F. ) e n o nul o ( nil ) .


No a mbi e nt e ERP Pr ot he us, e xi st e u ma conv e no a di ci on al a qu al de v e ser
r espei t a da que v ari v ei s e m uso pel a a pli cao n o sej a m i ncorr et a me nt e
ma ni pul a das. Por est a conv e no de v e ser a di ci on a do o ca r act er _ a nt es
do nome d e v ari v ei s PRI VATE e PUBLI C. Mai or es i nf or maes a v ali ar o
t pi co : Boas Pr t i cas de Pr ogr a mao.

Exemplo: Publ i c _cRot i n a






- 175 -

ADVPL Completo



20.4. Entendendo a influncia do escopo das variveis

Consi der e as li nhas de cdi go de e x e mpl o :


nResultado := 250 * (1 + (nPercentual / 100))


Se est a l i nh a f or e x ecut a da e m u m progr a ma ADVPL, ocorr er u m err o de e x ecuo com a
me nsa ge m " v a ri a bl e does not e xi st : nPerce nt ual " , poi s est a v ari v el est se ndo ut ili z a da e m
u ma e x pr esso d e cl cul o se m t er si do decl ar a d a . Par a sol uci onar est e er ro, de v e - se decl ar ar a
v ari v el pr e vi a me nt e :


Local nPercentual, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


Nest e e x e mpl o, as v a ri v ei s so decl ar a das pr e vi a me nt e ut ili z a ndo o i de nti fi ca dor de escopo
l ocal . Qu a ndo a li nh a de cl cul o f or e x ecut a da , o e r ro d e v ari v el n o e xi st e nt e , no mai s
ocor r er . Por m v a ri v ei s n o i ni ci ali z a das t m se mpr e o v al or def a ul t nul o ( Nil ) e est e v al or
n o pod e ser ut ili z ado e m u m cl cul o poi s t a mb m g er a r err os de e x ecu o ( nul o n o pode
ser di vi di do por 100) . A r esol uo d est e pr obl e ma ef et ua da i nici ali z a ndo- se a v ari v el
a t r a v s d e u ma das f or mas :


Local nPercentual, nResultado
nPercentual := 10
nResultado := 250 * (1 + (nPercentual / 100))

ou

Local nPercentual := 10, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


A di f er e na e nt r e o l ti mo e x e mpl o e os doi s a nt eri or es que a v a ri v el i ni ci ali z a da no
mome nt o da decl ar a o. E m a mbos os e x e mpl os, a v ari v el pri mei ro decl ar a da e e nt o
i ni ci ali z a da e m u ma out r a l i nha de cdi go.

aconsel h v el opt ar p el o oper a dor d e a t ri bui o compost o de doi s pont os e si n al de i gu al , poi s
o oper a dor de a t ri bui o ut ili z a ndo some nt e o si n al de i gu al pode ser f aci l me nt e conf undi do
com o oper a dor r el aci onal ( par a compa r a o) dur a nt e a cri ao do progr a ma .


- 176 -

ADVPL Completo



21. Regras adicionais da linguagem ADVPL

21.1. Palavras reservadas

AADD DTOS I NKEY REPLI CATE VAL
ABS ELSE I NT RLOCK VALTYPE
ASC ELSEI F LASTREC ROUND WHI LE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRI M YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDI F LOWER SELECT CHR E OF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL F COUNT MI N SQRT
CTOD F I ELDNAME MONTH STR DATE
F I LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED F OUND PROCEDURE
TRANSF ORM DEVPOS FUNCTI ON PROW TRI M
DOW I F RECCOUNT TYPE DT OC
I I F RECNO UPPER TRY AS
CATCH THROW




E Pal a vr as r eser v a das no pod e m ser ut i li z a das par a v ari v ei s,
procedi me nt os ou f unes ;

E F unes r eser v a das s o per t e nce nt es ao compi l a dor e n o pod e m ser
r ed efi ni das por u ma a plica o ;

E Todos os i de nt i fi ca dor es que comea r e m com doi s ou mai s car act er es
_ s o ut ili z a dos como i de nti fi ca dor es i nt er nos e s o r eser v a dos.

E I d e nt i fi ca dor es de escopo PRI VATE ou PUBLI C utili z a dos e m a pli caes
esp ec fi cas dese nvol vi da por ou par a cli e nt es d e v e m t er su a
i de nti fi cao i ni ci a da por u m ca r act er e _.




- 177 -

ADVPL Completo



21.2. Pictures de formatao disponveis

Com base na docu me nt ao di spon v el no DEM Docu me nt ao El et r ni ca Mi crosi ga , a
li ngua ge m ADVPL e a a pli cao ERP Prot he us a d mi t e m as segui nt es pi ct ur es :

Dicionrio de Dados (SX3) e GET

Funes
Contedo Funcionalidade
A Per mi t e a pe n as car act er es al f a bt i cos.
C Exi be CR d epoi s de n mer os posi t i vos.
E Exi be nu mri co com o pont o e v r gul a i nv er t i dos ( f or ma t o Eur op e u) .
R I nser e ca r act er es di f er e nt es dos car act er es de t e mpl a t e n a e xi bi o, mas n o os
i nser e n a v ari v el do GET.
S<n> Per mi t e rol a me nt o hori z ont al do t e xt o de nt ro do GET, < n > u m n mer o i nt ei ro
que i de nti fi ca o t a ma nho da r egi o.
X Exi be DB d epoi s d e n mer os nega t i vos.
Z Exi be z eros como br a ncos.
( Exi be n meros nega t i vos e nt r e pa r nt eses com os espaos e m br a nco i ni ci ai s.
) Exi be n meros nega t i vos e nt r e pa r nt eses se m os espaos e m br a nco i ni ci ai s.
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o.

Templates
Contedo Funcionalidade
X Per mi t e qual quer ca r act er e.
9 Per mi t e a pe nas d gi t os par a qu al quer ti po de da do, i ncl ui ndo o si n al par a
nu mri cos.
# Per mi t e d gi t os, si nai s e espaos e m br a nco par a qu al quer t i po de da do.
! Conv er t e ca r act er es al f a bt i cos pa r a mai scul o.
* Exi be u m ast eri sco no l ugar dos espaos e m br a nco i ni ci ai s e m n mer os.
. Exi be o pont o deci mal .
, Exi be a posi o do mi l har.

Exemplo 01 Picture campo numrico

CT2_VALOR Numrico 17,2
Picture: @E 99,999,999,999,999.99


Exemplo 02 Picture campo texto, com digitao apenas em caixa alta

A1_NOME Caracter - 40
Picture: @!



- 178 -

ADVPL Completo



22. Programas de Atualizao

Os pr ogr a mas de a t u ali z ao de ca dast ros e di gi t ao de movi me nt os segue m u m pa dr o que
se a pi a no Di ci onri o de Da dos.

Basi ca me nt e so t r s os mod el os mai s ut ili z a dos :

E Modelo 1 ou AxCadastro: Par a ca dast r a me nt os e m t el a chei a .
Ex e mpl o : Ca dast r o d e Cli e nt e.

E Modelo 2: Ca dast r a me nt os e nv ol v e ndo a pe n as u ma
t a bel a , mas com u m ca beal ho e,
opci on al me nt e, u m r od a p e u m cor po com
qu a nti da de ili mi t a da de li nh as. I de al par a
casos e m que h dados que se r epet e m
por v ri os i t e ns e que, por i sso, s o
col oca dos no ca b eal ho. Ex e mpl o : Pedi do de
Compr a .

E Modelo 3: Ca dast r a me nt os e nv ol v e ndo duas t a b el as,
u m com da dos d e ca beal ho e out ro di gi t a do
e m l i nhas com os i t e ns. Ex e mpl o : Pedi do de
Ve ndas, Ora me nt o et c.

Todos os model os s o ge nri cos, ou sej a , o progr a ma i ndepe nde da t a bel a a ser t r a t a da ,
bast a ndo pr a t i ca me nt e que se i nf or me a pe n as o se u Ali as. O r est o obt i do do
Di ci on ri o de Da dos ( SX3) .



- 179 -

ADVPL Completo



22.1. Modelo1( ) ou AxCadastro( )

O Ax Ca dast r o( ) u ma f unci on ali da de de ca dast ro si mpl es, com poucas opes d e
cust omi z ao, a qu al compost a d e :

Browse pa dr o par a vi suali z ao das i nf or maes da base de da dos, de acor do com a s
confi gur aes do SX3 Di ci on ri o de Da dos ( ca mpo br owse) .

F unes de pesqui sa , vi suali z ao, i ncl uso, al t er a o e e xcl uso pa dr es pa r a
vi su ali z ao de r egi st r os si mpl es, se m a op o de ca b eal ho e i t e ns.

E Sintaxe: AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt)

E Parmetros:

cAlias
Ali as pa dr o do si st e ma par a ut i li z ao, o qu al de v e est ar defi ni do no
di ci onri o de da dos SX3.
cTitulo T t ul o da Ja nel a
cVldExc Vali dao par a Excl uso
cVldAlt Vali dao par a Al t er a o


Exemplo: Funo AxCadastro( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | XCADSA2 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo AXCADASTRO() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/

User Function XCadSA2()

Local cAlias := "SA2"
Local cTitulo := "Cadastro de Fornecedores"
Local cVldExc := ".T."
Local cVldAlt := ".T."

dbSelectArea(cAlias)
dbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)

Return Nil


- 180 -

ADVPL Completo


Exemplo: Funo de validao da alterao



/*/
+------------------------------------------------------------------------------
| Funo | VLDALT | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrio | Funo de validao de alterao para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/

User Function VldAlt(cAlias,nReg,nOpc)

Local lRet := .T.
Local aArea := GetArea()
Local nOpcao := 0

nOpcao := AxAltera(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo(Aterao concluda com sucesso!)
Endif

RestArea(aArea)

Return lRet


Exemplo: Funo de validao da excluso


/*/
+------------------------------------------------------------------------------
| Funo | VLDEXC | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrio | Funo de validao de excluso para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/

User Function VldExc(cAlias,nReg,nOpc)

Local lRet := .T.
Local aArea := GetArea()
Local nOpcao := 0

nOpcao := AxExclui(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo(Excluso concluda com sucesso!)
Endif

RestArea(aArea)
Return lRet


- 181 -

ADVPL Completo



22.2. Modelo2( )

O nome Mod el o 2 f oi concei t u a do pel a Mi crosi ga por se t r a t ar d e u m prot t i po de t el a par a
e nt r a da d e da dos. I ni ci al me nt e v a mos desmi st i ficar doi s pont os :

O Funo Modelo2( ) Tr a t a - se d e u ma f un o pront a que cont e mpl a o prot t i po
Model o 2, por m, est e u m assunt o qu e n o i r e mos t r a t ar a qui , vi st o que
u ma f unci onali da de si mpl es que qu a ndo necessri o i nt er vi r e m al go n a rot i na
no h mui t o r ecurso p ar a t al .

O Prottipo Modelo 2 Tr a t a - se de u ma t el a , como a fi gur a a bai xo, onde se u
obj et i vo ef et u ar a ma nut e no e m v ri os r egi st ros de u ma s v e z . Por
e x e mpl o : ef et u ar o movi me nt o i nt er no de v ri os produt os do est oqu e e m u m
ni co l ot e.



22.2.1. Componentes de uma tela no formato Modelo 2

Objeto MsDialog( )

De v e ser ut i li z a da como j a nel a pa dr o pa r a e nt r a da de da dos, u m t i po de obj et o modal , ou
sej a , n o p er mi t e que out r a j a nel a a t i v a r eceba da dos e nqua nt o est a est i v er a t i v a .



- 182 -

ADVPL Completo


Toda v e z que ut ili z ar est e coma ndo o ADVPL e xi ge que sej a d ecl ar a do a di r et i v a I ncl ude no
ca beal ho do progr a ma o ar qui vo Pr ot he us. ch, i st o por que o compil a dor pr eci sar por qu e
est e coma ndo t r a t a - se de u m pse udo cdi go e su a t r a du o ser f ei t a n a compil ao. Val e
l e mbr ar t a mb m que est e s ser aci on a do depoi s que i nst a nci a do e a t i v a do por out r o
coma ndo.


DEFINE MSDIALOG oDlg TITLE "Prottipo Modelo 2" FROM 0,0 TO 280,552 OF;
oMainWnd PIXEL

ACTIVATE MSDIALOG oDlg CENTER


Repar e m que o coma ndo DEF I NE MSDI ALOG i nst a nci ou e o coma ndo ACTI VATE MSDI ALOG
a t i v a t odos os obj et os, ou sej a , t odo ou qual quer out ro obj et o qu e pr eci sar col ocar nest a
j a nel a ser pr eci so i nf or mar e m qu al obj et o, pa r a est e caso se mpr e ser ut ili z a da a v ari v el de
obj et o e x por t v el oDlg.


Funo EnchoiceBar( )

F uno que cri a u ma b arr a de bot es pa dr o de Ok e Ca ncel ar, p er mi ti ndo a i mpl e me nt ao
de bot es a di ci on ai s.



E Sintaxe: ENCHOICEBAR( oDlg, bOk, bCancelar, [ lMensApag ] , [ aBotoes ] )

E Parmetros:

oDlg Obj et o Ja nel a onde a ba rr a ser cri a da .
bOk Obj et o Bl oco de cdi go e x ecut a do qua ndo cl i ca do bot o Ok .
bCancelar Obj et o Bl oco de cdi go e x ecut a do qua ndo cl i ca do.
lMensApag Lgi co
I ndi ca se ao cl i car no bot o Ok a pa r ecer u ma t el a de
confi r ma o d e e xcl uso. Val or pa dr o f al so.
aBotes Vet or
Vet or com i nf or maes par a cri ao d e bot es
a di ci on ai s n a barr a . Se u f or ma t o { bi t ma p, bl oco d e
cdi go, me nsa ge m } .

















- 183 -

ADVPL Completo




Figura: Prottipo Modelo2 Enchoice

Objeto TPanel( )

Repar e que par a f aci li t ar o dese nv ol vi me nt o f oi ut ili z a do o obj et o TPa nel par a a j udar o
ali nh a me nt o dos obj et os TSa y e T Get , ou sej a , a ut ili z ao dest e r ecurso p er mi t e que o
progr a ma dor n o se pr eocupe com coor de na d as compl e x as par a dei x ar a uni o dos obj et os
si mt ri cos.

Ut ili z e o obj et o TPa nel qu a ndo desej ar cri ar u m pai nel est t i co, ond e pode m ser cri a dos out r os
cont r ol es com o obj et i vo de or ga ni z ar ou a gr up ar compon e nt es vi su ai s.

E Sintaxe: TPanel( ) :New( [anRow], [anCol], [acText], [aoWnd], [aoFont],
[alCentered], [lPar6], [anClrText], [anClrBack], [anWidth],
[anHeight], [alLowered], [alRaised] )

E Parmetros:

nRow Nu mri co v er t i cal e m pi x el .
nCol Nu mri co hori z ont al e m pi x el .
cText Te xt o a ser e xi bi do ao f undo.
oWnd Obj et o da j a nel a ou cont rol e ond e se r cri a do o obj et o.
oFont Car act er st i cas da f ont e do t e xt o qu e a pa r ecer ao f undo.
lCentered Exi be o t e xt o do t t ul o ce nt r al i z a do.
lPar6 Reser v a do.
nClrText Cor do t e xt o d e cont r ol e.
nClrBack Cor do f undo d e cont r ol e.
nWidth Lar gur a do cont rol e e m pi x el .
nHeight Al t ur a do cont r ol e e m pi x el .
lLowered Exi be o pai nel r ebai x a do e m r el ao a o cont r ol e d e f undo.
lRaised
Exi be a bor da do cont r ol e r ebai x a do e m r el ao ao cont r ol e de
f undo.


- 184 -

ADVPL Completo



Comando SAY - Objeto: TSay( )

O coma ndo SAY ou obj e t o TSa y e xi be o cont e do de t e xt o est t i co sobr e u ma j a nel a .

E Sintaxe SAY:


@ 4,6 SAY "Cdigo:" SIZE 70,7 PIXEL OF oTPanel1


E Sintaxe TSay( ) : TSay( ):New( [anRow], [anCol], [abText], [aoWnd],
[acPicture], [aoFont], [lPar7], [lPar8], [lPar9], [alPixels],
[anClrText], [anClrBack], [anWidth], [anHeight], [lPar15], [lPar16],
[lPar17], [lPar18], [lPar19] )

E Parmetros:

anRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
anCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
abText
Code- Bl ock, opci on al . Qu a ndo e x ecut a do de v e r et or n ar u ma
ca dei a de car act er es a ser e xi bi da .
aoWnd Obj et o, opci on al . Ja nel a ou di l ogo onde o cont r ol e ser cri a do.
acPicture
Car act er e, opci on al . Pi ct ur e d e f or ma t a o do cont e do a ser
e xi bi do.
aoFont
Obj et o, opci on al . Obj et o t i po t Font par a confi gur ao do t i po de
f ont e qu e ser ut ili z a do par a e xi bi r o cont e do.
lPar7 Reser v a do.
lPar8 Reser v a do.
lPar9 Reser v a do.
alPixels
Lgi co, opci on al . Se . T. consi der a coor de n a das passa das e m
pi x el s se . F. , pa dr o, consi der a as coor d e n a das passa das e m
car act er es.
anClrText Nu mri co, opci onal . Cor do cont e do do cont rol e.
anClrBack Nu mri co, opci onal . Cor do f undo do cont rol e.
anWidth Nu mri co, opci onal . Lar gur a do cont rol e e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
lPar15 Reser v a do.
lPar16 Reser v a do.
lPar17 Reser v a do.
lPar18 Reser v a do.
lPar19 Reser v a do.


- 185 -

ADVPL Completo



Comando MSGET - Objeto: TGet( )

O coma ndo MsGet ou o obj et o TGet ut i li z a do par a cri ar u m cont rol e que ar ma z e ne ou al t er e
o cont e do de u ma v a ri v el a t r a v s de di gi t ao. O cont e do da v a ri v el s modi fi ca do
qu a ndo o cont r ol e per d e o f oco d e edi o par a out ro cont rol e.

E Sintaxe MSGET:


@ 3,192 MSGET dData PICTURE "99 / 99 / 99" SIZE 40,7 PIXEL OF oTPanel1



E Sintaxe TGet( ) :New( [anRow], [anCol], [abSetGet], [aoWnd], [anWidth],
[anHeight], [acPict], [abValid], [anClrFore], [anClrBack], [aoFont],
[lPar12], [oPar13], [alPixel], [cPar15], [lPar16], [abWhen], [lPar18],
[lPar19], [abChange], [alReadOnly], [alPassword], [cPar23],
[acReadVar], [cPar25], [lPar26], [nPar27], [lPar28] )

E Parmetros:

anRow Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
anCol Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
abSetGet Bl oco de cdi go, opci on al . Bl oco de cdi go no f or ma t o { | u | I F(
Pcount ( ) > 0, < v a r > : = u, < v ar > ) } qu e o cont rol e ut ili z a par a
a t u ali z ar a v ari v el < v a r > . < v a r > d e v e ser t i po car act er,
nu mri co ou da t a .
aoWnd Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser
cri a do.
anWidth Nu mri co, opci onal . Lar gur a do cont rol e e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
acPict Car act er e, opci onal . Mscar a de f or ma t ao do cont e do a ser
e xi bi do.
abValid Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or na r . T. se o cont e do f or
v li do e . F. qua ndo o cont e do f or i nv li do.
anClrFore Nu mri co, opci onal . Cor de f undo do cont rol e.
anClrBack Nu mri co, opci onal . Cor do t e xt o do cont rol e.
aoFont Obj et o, opci on al . Obj et o t i po t Font utili z a do par a defi ni r as
car act er st i cas da f ont e utili z a da par a e xi bi r o cont e do do
cont r ol e.
lPar12 Reser v a do.
oPar13 Reser v a do.
alPixel Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
cPar15 Reser v a do.
lPar16 Reser v a do.
abWhen Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de f oco
de e nt r a da d e da dos est se ndo ef et u a da n a j a nel a onde o
cont r ol e f oi cri a do. O bl oco de v e r et or n ar . T. se o cont r ol e de v e
per ma n ecer h a bili t a do ou . F. se n o.
lPar18 Reser v a do.

- 186 -

ADVPL Completo


lPar19 Reser v a do.
abChange Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont r ol e
modi fi ca o v al or da v ari v el associ a da .
alReadOnly Lgi co, opci onal . Se . T. o cont r ol e no poder ser edi t a do.
alPassword Lgi co, opci onal . Se . T. o cont r ol e e xi bi r ast eri scos * no
l ugar dos ca r act er es e xi bi dos pel o cont r ol e par a si mul ar
e nt r a da d e se nh a .
cPar23 Reser v a do.
acReadVar Car act er e, opci on al . Nome da v ari v el que o cont rol e de v er
ma ni pul ar, de v er ser a mesma v a ri v el i nf or ma da no
par met ro a bSet Get , e ser o r et or no da f un o Re a dVar ( ) .
cPar25 Reser v a do.
lPar26 Reser v a do.
nPar27 Reser v a do.
lPar18 Reser v a do.


Objeto MsGetDados( )

Obj et o t i po li st a com u ma ou mai s col un as par a ca dast r a me nt o de da dos base a do e m u m
v et or. Su a ut ili z ao e xi ge que sej a ut ili z a do t r s v a ri v ei s com se u escopo Pri v a t e, s o el as :
aRot i na , a He a d er e a COLS.

E Observaes importantes:

O O v et or a He a der d e v e ser const r u do co m base no di ci onri o de da dos.
O O v et or a COLS de v e ser const r u do com base no v et or a He a der, por m de v e -
se cri ar u ma col un a adi ci on al par a o cont r ol e de e xcl uso do r egi st ro, ou
sej a , qu a ndo o usu ri o t ecl ar a t ecl a < DELETE > a li nh a fi car n a cor ci nz a e
est a col un a est ar com o se u v al or i gu al a v er d a dei ro ( . T. ) .
O Qu a ndo i nst a nci a do est e obj et o poss v el sa ber e m que li nh a o usu ri o est
por que o obj et o t r a bal ha com u ma v ari v el de escopo Publi c de nomi n ada n,
se u v al or nu mri co e t er se mpr e no cont e do a li nha e m que o usu ri o
e ncont r a - se com o cursor.








- 187 -

ADVPL Completo


E Sintaxe: MSGETDADOS( ):NEW( nSuperior, nEsquerda, nInferior, nDireita,
nOpc, [ cLinhaOk ], [ cTudoOk ], [ cIniCpos ], [ lApagar ], [ aAlter], ,
[ uPar1 ], [ lVazio ], [ nMax], [ cCampoOk ], [ cSuperApagar ],
[ uPar2 ], [ cApagaOk ], [ oWnd ] )

E Parmetros:

nSuperior
Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de superi or do
obj et o que a cont m.
nEsquerda
Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de esquer da do
obj et o que a cont m.
nInferior
Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de i nf eri or do
obj et o que a cont m.
nDireita
Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de di r ei t a do
obj et o que a cont m.
nOpc
Posi o do el e me nt o do v et or aRot i n a que a MsGet Da dos
usar como r ef er e nci a .
cLinhaOk
F uno e x ecut a da par a v ali dar o cont e xt o da l i nh a a t u al do
a Col s.
cTudoOk
F uno e x ecut a da par a v ali dar o cont e xt o g er al da
MsGet Da dos ( t odo a Col s) .
cIniCpos
Nome dos ca mpos do t i po ca r act er que ut i li z ar o i ncr e me nt o
a ut om t i co. Est e par met r o d e v e ser no f or ma t o + < nome
do pri mei ro ca mpo > + < nome do segundo ca mpo > + . . . .
lApagar Ha bili t a del et ar li nh as do a Col s. Val or pa dr o f al so.
aAlter Vet or com os ca mpos que pod er o ser al t er a dos.
uPar1 Par met r o r eser v a do.
lVazio
Ha bili t a v ali dao da pri mei r a col un a do a Col s par a est a n o
poder est ar v a zi a . Val or pa dr o f al so.
nMax N mer o m xi mo de l i nhas per mi t i das. Val or pa dr o 99.
cCampoOk F uno e x ecut a da n a v ali dao do ca mpo.
cSuperApagar
F uno e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e > .
uPar2 Par met r o r eser v a do.
cApagaOk
F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.
oWnd Obj et o no qu al a MsGet Da dos ser cri a da .


Varivel Private aRotina

Arr a y com as rot i n as que ser o e x ecut a das na MBr owse e que defi ni r o t i po de op er a o que
est se ndo e x ecut a da , por e x e mpl o : Pesqui sar, Vi suali z ar, I ncl ui r, Al t er ar, Excl ui r e out ros.

Est e v et or pr eci sa ser const r u do no f or ma t o :

Elemento Contedo
1 T t ul o da opo.
2 Nome da rot i n a ( F unct i on) .
3 Reser v a do.
4 Oper a o ( 1-Pesqui sar ; 2- Vi suali z ar ; 3- I ncl ui r ; 4- Al t er ar ; 5- Excl uso) .
5
Acesso r el aci on a do a r ot i n a , se est op o n o f or i nf or ma da ne nh u m
acesso ser v al i da do.


- 188 -

ADVPL Completo


Varivel Private aHeader

Arr a y com i nf or maes das col un as, ou sej a , com as car act er st i cas dos ca mpos que est o
cont i das no di ci on ri o de da dos ( SX3) , est e v et or pr eci sa est ar no f or ma t o a bai xo :

Elemento Contedo
1 T t ul o do ca mpo
2 Nome do ca mpo
3 Msca r a do ca mpo
4 Ta ma nho do ca mpo
5 Deci mal do ca mpo
6 Vali dao de usu ri o do ca mpo
7 Uso do ca mpo
8 Ti po do ca mpo ( ca r act er e, nu mri co, da t a e et c. )
9 Pr efi xo da t a b el a
10 Cont e xt o do ca mpo ( r e al ou vi r t u al )

Varivel Private aCols

Vet or com as l i nh as a ser e m edi t a das. As col un as de v e m ser const r u das com base no v et or
a He a d er e mai s u ma l t i ma col un a com o v al or l gi co que det er mi n a se a l i nha f oi e xcl u da ,
i ni ci al me nt e est a d e v er t er o se u cont e do i gual a f al so ( . F. ) .
























- 189 -

ADVPL Completo



22.2.2. Estrutura de um programa utilizando a Modelo2( )

O e x e mpl o a bai xo de monst r a a mont a ge m d e u m progr a ma par a a utili z ao do prot t i po
Model o 2. Ant es de i ni ci ar mos o e x e mpl o v a mos est r ut ur a r o pr ogr a ma .

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Decl ar ao e at ri buio de v ari v eis ;
3 Acesso a t a bel a pri nci pal e sua or de m;
4 Cha ma da da f uno MBrowse ;
5 Fim da funo principal.
6
7 Funo de visualizao, alterao e excluso;
8 Decl ar ao e at ri buio de v ari v eis ;
9 Acesso ao pri mei ro r e gist r o da cha v e e m que est posici ona do na MBrowse ;
10 Mont a ge m das v ari v eis est ticas e m t el a ;
11 Mont a ge m do v e t or a He ader por mei o do dici onrio de da dos ;
12
Mont a ge m do v e t or a COLS de t odos os r e gist ros r ef er ent e a cha v e pri nci pal e m que est
posici onado na MBr owse ;
13 I nst nci a da MsDi al og ;
14 I nst nci a dos obj e t os TSa y e TGe t ;
15 I nst nci a do obj e t o MsGe t Da dos ;
16 Ati v ar o obj e t o pri nci pal que o obj e t o da j a nel a ;
17 Se f or oper ao dif er e nt e de visuali z ao e clicou no bot o OK;
18 A oper ao e de Al t er ao?
19 Cha mar a f uno par a al t er ar os da dos ;
20 Caso cont r ri o
21 Cha mar a f uno par a e xcl ui r os da dos ;
22 Fim da funo de visualizao, alterao e excluso.
23
24 Funo de incluso;
25 Decl ar ao e at ri buio de v ari v eis ;
26 Mont a ge m das v ari v eis est ticas e m t el a ;
27 Mont a ge m do v e t or a He ader por mei o do dici onrio de da dos ;
28
Mont a ge m do v e t or a COLS co m o se u cont e do conf or me o i nici ali z a dor padr o do ca mpo ou
v a zi o, pois t r at a -se de u ma i ncl uso ;
29 I nst nci a da MsDi al og ;
30 I nst nci a dos obj e t os TSa y e TGe t ;
31 I nst nci a do obj e t o MsGe t Da dos ;
32 Ati v ar o obj e t o pri nci pal que o obj e t o da j a nel a ;
33 Se clicou no bot o OK;
34 Cha mar a f uno par a i ncl ui r os da dos ;
35 Fim da funo de incluso.


- 190 -

ADVPL Completo



Rotina principal


#include "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | xModelo2 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Funo exemplo do prottipo Modelo2. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function xModelo2()
Private cCadastro := "Prottipo Modelo 2"
Private aRotina := {}

AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})
AADD( aRotina, {"Visualizar" ,'U_Mod2Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod2Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod2Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod2Mnt',0,5})

dbSelectArea("ZA3")
dbSetOrder(1)
dbGoTop()

MBrowse(,,,,"ZA3")
Return


Rotina de incluso


//+--------------------------------------------------------------------+
//| Rotina | Mod2Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para incluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

User Function Mod2Inc( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2

Local cCodigo := ZA3->ZA3_CODIGO
Local cNome := ZA3->ZA3_NOME
Local dData := dDataBase

Private aHeader := {}
Private aCOLS := {}
Private aREG := {}

dbSelectArea( cAlias )
dbSetOrder(1)


- 191 -

ADVPL Completo


Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd

oTPanel1 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)

oTPanel1:Align := CONTROL_ALIGN_TOP

@ 4, 006 SAY "Cdigo:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 062 SAY "Nome:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 166 SAY "Emissao:" SIZE 70,7 PIXEL OF oTPanel1

@ 3, 026 MSGET cCodigo F3 "SA3" PICTURE "@!" VALID;
Mod2Vend(cCodigo, @cNome);
SIZE 030,7 PIXEL OF oTPanel1

@ 3, 080 MSGET cNome When .F. SIZE 78,7 PIXEL OF oTPanel1
@ 3, 192 MSGET dData PICTURE "99/99/99" SIZE 40,7 PIXEL OF
oTPanel1

oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",;
".T.","+ZA3_ITEM",.T.)
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

ACTIVATE MSDIALOG oDlg CENTER ON INIT ;
EnchoiceBar(oDlg,{|| IIF(U_Mod2TOk(), Mod2GrvI(),;
( oDlg:End(), NIL ) )},{|| oDlg:End() })

Return


Rotina de Visualizao, Alterao e Excluso


//+--------------------------------------------------------------------+
//| Rotina | Mod2Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para Visualizar, Alterar e Excluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

User Function Mod2Mnt( cAlias, nReg, nOpc )

Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2

Local cCodigo := Space(Len(Space(ZA3->ZA3_CODIGO)))
Local cNome := Space(Len(Space(ZA3->ZA3_NOME)))
Local dData := Ctod(Space(8))

Private aHeader := {}

- 192 -

ADVPL Completo


Private aCOLS := {}
Private aREG := {}

dbSelectArea( cAlias )
dbGoTo( nReg )

cCodigo := ZA3->ZA3_CODIGO
cNome := ZA3->ZA3_NOME
cData := ZA3->ZA3_DATA

Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd

oTPane1 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPane1:Align := CONTROL_ALIGN_TOP

@ 4, 006 SAY "Cdigo:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 062 SAY "Nome:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 166 SAY "Emissao:" SIZE 70,7 PIXEL OF oTPanel1

@ 3, 026 MSGET cCodigo When .F. SIZE 30,7 PIXEL OF oTPanel1
@ 3, 080 MSGET cNome When .F. SIZE 78,7 PIXEL OF oTPanel1
@ 3, 192 MSGET dData When .F. SIZE 40,7 PIXEL OF oTPanel1

oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

If nOpc == 4
oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",;
".T.","+ZA3_ITEM",.T.)
Else
oGet := MSGetDados():New(0,0,0,0,nOpc)
Endif
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

ACTIVATE MSDIALOG oDlg CENTER ON INIT ;
EnchoiceBar(oDlg,{|| ( IIF( nOpc==4, Mod2GrvA(), ;
IIF( nOpc==5, Mod2GrvE(), oDlg:End() ) ), oDlg:End() ) },;
{|| oDlg:End() })
Return



- 193 -

ADVPL Completo



Montagem do array aHeader


//+--------------------------------------------------------------------+
//| Rotina | Mod2aHeader | Autor | Robson Luiz (rleg) |Data|01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aHeader. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

Static Function Mod2aHeader( cAlias )
Local aArea := GetArea()

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek( cAlias )
While !EOF() .And. X3_ARQUIVO == cAlias
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL
AADD( aHeader, { Trim( X3Titulo() ),;
X3_CAMPO,;
X3_PICTURE,;
X3_TAMANHO,;
X3_DECIMAL,;
X3_VALID,;
X3_USADO,;
X3_TIPO,;
X3_ARQUIVO,;
X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return


Montagem do array aCols


//+--------------------------------------------------------------------+
//| Rotina | Mod2aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aCOLS. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2aCOLS( cAlias, nReg, nOpc )
Local aArea := GetArea()
Local cChave := ZA3->ZA3_CODIGO
Local nI := 0

If nOpc <> 3
dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )
While !EOF() .And. ;
ZA3->( ZA3_FILIAL + ZA3_CODIGO ) == xFilial( cAlias ) + cChave
AADD( aREG, ZA3->( RecNo() ) )

- 194 -

ADVPL Completo


AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZA3_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return

Efetivao da incluso


//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvI | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para gravar os dados na incluso. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvI()
Local aArea := GetArea()
Local nI := 0
Local nX := 0

dbSelectArea("ZA3")
dbSetOrder(1)
For nI := 1 To Len( aCOLS )
If ! aCOLS[nI,Len(aHeader)+1]
RecLock("ZA3",.T.)
ZA3->ZA3_FILIAL := xFilial("ZA3")
ZA3->ZA3_CODIGO := cCodigo
ZA3->ZA3_DATA := dData
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
MsUnLock()
Endif
Next nI

RestArea(aArea)
Return



- 195 -

ADVPL Completo



Efetivao da alterao


//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvA | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para gravar os dados na alterao. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvA()
Local aArea := GetArea()
Local nI := 0
Local nX := 0

dbSelectArea("ZA3")
For nI := 1 To Len( aREG )
If nI <= Len( aREG )
dbGoTo( aREG[nI] )
RecLock("ZA3",.F.)
If aCOLS[nI, Len(aHeader)+1]
dbDelete()
Endif
Else
RecLock("ZA3",.T.)
Endif

If !aCOLS[nI, Len(aHeader)+1]
ZA3->ZA3_FILIAL := xFilial("ZA3")
ZA3->ZA3_CODIGO := cCodigo
ZA3->ZA3_DATA := dData
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
Endif
MsUnLock()
Next nI
RestArea( aArea )
Return



- 196 -

ADVPL Completo



Efetivao da excluso

//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvE | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para excluir os registros. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvE()
Local nI := 0

dbSelectArea("ZA3")
For nI := 1 To Len( aCOLS )
dbGoTo(aREG[nI])
RecLock("ZA3",.F.)
dbDelete()
MsUnLock()
Next nI
Return

Funo auxiliar: Validao do cdigo do vendedor

//+--------------------------------------------------------------------+
//| Rotina | Mod2Vend | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar o cdigo do vendedor. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod2Vend( cCodigo, cNome )
If ExistCpo("SA3",cCodigo) .And. ExistChav("ZA3",cCodigo)
cNome := Posicione("SA3",1,xFilial("SA3")+cCodigo,"A3_NOME")
Endif
Return(!Empty(cNome))


Funo auxiliar: Validao do cdigo do centro de custo na mudana de linha

//+--------------------------------------------------------------------+
//| Rotina | Mod2LOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar a linha de dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function Mod2LOk()
Local lRet := .T.
Local cMensagem := "No ser permitido linhas sem o centro de custo."
If !aCOLS[n, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Endif
Endif
Return( lRet )



- 197 -

ADVPL Completo


Funo auxiliar: Validao do cdigo do centro de custo para todas as linhas


//+--------------------------------------------------------------------+
//| Rotina | Mod2TOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar toda as linhas de dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

User Function Mod2TOk()
Local lRet := .T.
Local nI := 0
Local cMensagem := "No ser permitido linhas sem o centro de custo."

For nI := 1 To Len( aCOLS )
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If !aCOLS[nI, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Exit
Endif
Endif
Next nI
Return( lRet )


22.2.3. Funo Modelo2( )

A f uno Model o2( ) u ma i nt erf ace pr - d efi ni da pel a Mi crosi ga que i mpl e me nt a de f or ma
pa droni z a da os compont es necessri os a ma ni pul ao de est r ut ur as de da dos n as qu ai s o
ca beal ho e os i t e ns da i nf or mao compar t i l h a m o mesmo r egi st ro f sico.

Se u obj et i vo a t ua r co mo u m f aci li t a dor de codi fi cao, per mi ti ndo a utili z ao dos r ecursos
bsi cos dos segui nt es compon e nt es vi su ai s :

O MsDialog( )
O TGet( )
O TSay( )
O MsNewGetDados( )
O EnchoiceBar( )



O A f uno Mod el o2( ) no i mpl e me nt a as r egr as de vi su ali z ao,
i ncl uso, al t er ao e e xcl uso, como u ma Ax Ca dast ro( ) ou
Ax F unct i on( ) .

O A i ni ci ali z ao das v a ri v ei s Pri v a t e ut i li z a da nos ca b eal hos e roda p s,
be m como a i ni ci ali z ao e gr a v a o do a Col s de v e m ser r e al i z a das
pel a rot i n a que supor t a a e x ecu o da Mod el o2( ) .

O Da mesma f or ma , o Browse de v e ser t r a t a do por est a rot i n a , se ndo
comu m a Mod el o2( ) est ar vi ncul a da ao uso d e u ma MBr owse( ) .

- 198 -

ADVPL Completo



E Sintaxe: Modelo2( [cTitulo], [aCab], [aRoda], [aGrid], [nOpc], [cLinhaOk],
[cTudoOk] )

E Parmetros:

cTitulo T t ul o da j a nel a
aCab Arr a y cont e ndo as i nf or maes que ser o e xi bi das no ca beal ho na f or ma de
Enchoi ce( )
a Ca b[ n] [ 1] ( Car act er e) : = Nome da v a ri v el pri v a t e que ser vi ncul a da ao
ca mpo da Enchoi ce( ) .
a Ca b[ n] [ 2] ( Arr a y) : = Arr a y com as coor de na das do ca mpo n a t el a { Li nh a ,
Col un a }
a Ca b[ n] [ 3] ( Car act er e) : = T t ul o do ca mpo n a t el a
a Ca b[ n] [ 4] ( Car act er e) : = Pi ct ur e d e f or ma t a o do get ( ) do ca mpo.
a Ca b[ n] [ 5] ( Car act er e) : = F uno d e v al i dao do get ( ) do ca mpo.
a Ca b[ n] [ 6] ( Car act er e) : = Nome da consul t a pa dr o qu e ser e x ecut a da
par a o ca mpo vi a t ecl a F 3
a Ca b[ n] [ 7] (Lgi co) : = Se o ca mpo est a r l i vr e par a di gi t ao.

aRoda Arr a y cont e ndo as i nf or maes que ser o e xi bi das no ca beal ho na f or ma de
Enchoi ce( ) , no mesmo f or ma t o que o a Ca b.
aGrid Arr a y cont e ndo as coor de n a das da Get Da dos( ) n a t el a . Pa dr o : =
{ 44, 5, 118, 315 }
nOpc Op o sel eci on a da na MBr owse, ou que desej e ser passa da par a cont rol e da
Model o2, a onde :
2 Vi su ali z ar
3 - I ncl ui r
4 - Al t er ar
5 - Excl ui r
cLinhaOk F uno par a v al i dao da li nh a n a Get Da dos( )
cTudoOk F uno par a v al i dao n a confi r ma o da t el a de i nt erf ace da Mod el o2( ) .

E Retorno:

Lgico I ndi ca se a t el a da i nt erf ace Model o2( ) f oi confi r ma da ou ca ncel a da pel o
usu ri o.










- 199 -

ADVPL Completo



Exemplo: Utilizao da Modelo2( ) para visualizao do Cadastro de Tabelas (SX5)


#include "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | MBRW2SX5| Autor | ARNALDO RAYMUNDO JR. | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | UTILIZACAO DA MODELO2() PARA VISUALIZAO DO SX5. |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+

USER FUNCTION MBrw2Sx5()

Local cAlias := "SX5"

Private cCadastro := "Arquivo de Tabelas"
Private aRotina := {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"U_SX52Vis" ,0,2})
AADD(aRotina,{"Incluir" ,"U_SX52Inc" ,0,3})
AADD(aRotina,{"Alterar" ,"U_SX52Alt" ,0,4})
AADD(aRotina,{"Excluir" ,"U_SX52Exc" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)

Return

USER FUNCTION SX52INC(cAlias,nReg,nOpc)

//Local nUsado := 0
Local cTitulo := "Inclusao de itens - Arquivo de Tabelas"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo
2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no
modelo2 - Padrao: {44,5,118,315}
// Linha Inicial - Coluna Inicial - +Qts Linhas - +Qts
Colunas : {080,005,050,300}
Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da
Modelo 2
Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2
Local lRetMod2 := .F. // Retorno da funo Modelo2 - .T. Confirmou / .F.
Cancelou
Local nColuna := 0

// Variaveis para GetDados()
Private aCols := {}
Private aHeader := {}

- 200 -

ADVPL Completo



Exemplo (continuao):

// Variaveis para campos da Enchoice()
Private cX5Filial := xFilial("SX5")
Private cX5Tabela := SPACE(5)

// Montagem do array de cabealho
// AADD(aCab,{"Varivel" ,{L,C} ,"Ttulo","Picture","Valid","F3",lEnable})
AADD(aCab,{"cX5Filial" ,{015,010} ,"Filial","@!",,,.F.})
AADD(aCab,{"cX5Tabela" ,{015,080} ,"Tabela","@!",,,.T.})

// Montagem do aHeader
AADD(aHeader,{"Chave" ,"X5_CHAVE","@!",5,0,"AllwaysTrue()",;
"","C","","R"})
AADD(aHeader,{"Descricao" ,"X5_DESCRI","@!",40,0,"AllwaysTrue()",;
"","C","","R"})

// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)

// Inicializao do aCols
For nColuna := 1 to Len(aHeader)

If aHeader[nColuna][8] == "C"
aCols[1][nColuna] := SPACE(aHeader[nColuna][4])
ElseIf aHeader[nColuna][8] == "N"
aCols[1][nColuna] := 0
ElseIf aHeader[nColuna][8] == "D"
aCols[1][nColuna] := CTOD("")
ElseIf aHeader[nColuna][8] == "L"
aCols[1][nColuna] := .F.
ElseIf aHeader[nColuna][8] == "M"
aCols[1][nColuna] := ""
Endif

Next nColuna

aCols[1][Len(aHeader)+1] := .F. // Linha no deletada
lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)

IF lRetMod2
//MsgInfo("Voc confirmou a operao","MBRW2SX5")
For nLinha := 1 to len(aCols)
// Campos de Cabealho
Reclock("SX5",.T.)
SX5->X5_FILIAL := cX5Filial
SX5->X5_TABELA := cX5Tabela
// Campos do aCols
//SX5->X5_CHAVE := aCols[nLinha][1]
//SX5->X5_DESCRI := aCols[nLinha][2]
For nColuna := 1 to Len(aHeader)
SX5->&(aHeader[nColuna][2]) := aCols[nLinha][nColuna]
Next nColuna
MsUnLock()
Next nLinha
ELSE
MsgAlert("Voc cancelou a operao","MBRW2SX5")
ENDIF
Return

- 201 -

ADVPL Completo



22.3. Modelo3( )

O nome Mod el o 3, assi m como a Model o 2 f oi concei t ua do pel a Mi crosi ga por se t r a t a r d e u m
prot t i po d e t el a par a e nt r a da de da dos. I ni ci al me nt e v a mos d esmi st i fica doi s pont os :

O Funo Modelo3( ) Tr a t a - se d e u ma f un o pront a que cont e mpl a o prot t i po
Model o 3, por m, est e u m assunt o qu e n o i r e mos t r a t ar a qui , vi st o que
u ma f unci onali da de si mpl es que qu a ndo necessri o i nt er vi r e m al go n a rot i n a
no h mui t o r ecurso p ar a t al .

O Prottipo Modelo 3 Tr a t a - se de u ma t el a , como a fi gur a a bai xo, onde se u
obj et i vo ef et u ar a ma nut e no e m v ri os r egi st ros de u ma s v e z r el aci on a da
a out r o r egi st r o d e out r a t a bel a , ou sej a , a qui t er e mos o r el aci on a me nt o d e
r egi st ros pai e fi l ho, e nt o pr eci so se pr e ocupar com est e r el aci ona me nt o.
Por e x e mpl o : ef et u ar a ma nut e no e m u m pedi do de v e ndas, ond e t er u m
r egi st ro e m u ma t a b el a r ef er e nt e ca b ea do pedi do e out r a t a b el a com os
r egi st ros r ef er e nt es a os i t e ns dest e pedi do d e v e ndas.

Par a ga nh ar mos t e mpo n o ser a pr ese nt a do a qui t oda a e x pl i cao e mont a g e ns pa r a a
f uno EnchoiceBar, coma ndo MsDialog, Say e MsGet e par a os v et or es aHeader e
aCOLS, e nt r et a nt o t odos est es est a r o na codi fi cao do cdi go f ont e. A fi gur a a bai xo most r a
e x a t a me nt e o que a t el a prot t i po Model o 3 :



Figura: Prottipo Modelo 3

- 202 -

ADVPL Completo



Est e pr ot t i po const i t u do de MsDi al og, Enchoi ce Bar , Enchoi ce, MsGet Da dos, Sa y e Get .

Di a nt e dos e x post os a t o mome nt o houv e u m novo nome par a ns, el e a f uno Enchoi ce , o
que ?

Funo Enchoice( ) Objeto MsMGet( )

A f uno Enchoi ce ou o obj et o MsMGet s o r ecursos base a dos no di ci on ri o de da dos pa r a
v eri fi car ca mpos obrigatrios, v ali daes, ga t i l hos, consul t a pa dr o e et c. Assi m t a mb m par a
cri ar past as d e ca dast r os. Est es pode m ser usa dos t a nt o co m v ari v ei s de me mri as com o
escopo Pri v a t e co mo di r et a me nt e os ca mpos da t a bel a que se r ef er e. A diferena entre a f uno
Enchoi ce e o obj et o MsMGet que a f uno no r et or n a o nome da v ari v el de obj et o
e x por t v el cri a do.

A est r ut ur a par a mont a r u m pr ogr a ma com o prot t i po model o 3 se mel h a nt e ao pr ot t i po
model o 2, por m a di f er e na r e al a utili z ao da f uno Enchoi ce ou o obj et o MsMGet , par a
est e docu me nt o i r e mos t r a bal h ar com a f un o.

E Sintaxe: Enchoice( cAlias, nReg, nOpc, aAc, cOpc, cTextExclui, aAcho, aPos,
aCpos, nNum, nColMens, cMensagem, cTudOk, oObj, lVirtual)

E Parmetros:

cAlias Ali as do da dos a ser e m ca dast r a dos.
nReg N mer o do r egi st ro da t a bel a a ser edi t a do.
uPar1 Par met r o r eser v a do.
uPar2 Par met r o r eser v a do.
uPar3 Par met r o r eser v a do.
aAcho Vet or com os ca mpos que ser o a pr ese nt a dos pel a MsMGet .
aPos Vet or com as coor d e n a das ond e a MsMGet ser cri a da no
f or ma t o { coor d. sup eri or, coor d. esquer da , coor d. di r ei t a ,
coor d. i nf eri or } . F uno e x ecut a da par a v al i dar o cont e xt o da
li nh a a t u al do a Col s.
aCpos Vet or com os ca mpos que pod er o ser al t er a dos.
uPar4 Par met r o r eser v a do. Nome dos ca mpos do t i po ca r act er que
utili z ar o i ncr e me nt o a ut om t i co. Est e par met r o de v e ser no
f or ma t o + < nome do pri mei ro ca mpo > + < nome do segundo
ca mpo > + . . . .
uPar5 Par met r o r eser v a do.
uPar6 Par met r o r eser v a do.
uPar7 Par met r o r eser v a do.
oWnd Obj et o no qual a MsMGet ser cri a da .
uPar8 Par met r o r eser v a do.
lMemoria I ndi ca se ser usa do v a ri v ei s de me mri a ou os ca mpos da
t a bel a par a ca dast r a me nt o dos da dos. Val or pa dr o f al so.
lColuna I ndi ca se a MsMGet ser a pr ese nt a da com u m obj et o por l i nh a
( u ma col una ) . Val or pa dr o f al so. Par met r o r eser v a do.
uPar9 Par met r o r eser v a do.
lSemPastas I ndi ca se no ser usa do as Past as d e Ca dast r o n a MsMGet .
F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.



- 203 -

ADVPL Completo


Val e l e mbr ar que ns progr a ma dor es r e a pr ov ei t a mos mui t o o que j e xi st e, i st o pa r a
si mpl esme nt e ga nh ar mos t e mpo, e no caso da utili z ao da f uno Enchoi ce pr eci so cri ar as
v ari v ei s de me mri as que l e v a m o mesmo nome dos ca mpos da t a bel a e m quest o. Por
e x e mpl o o ca mpo A2_ NOME da t a bel a SA2 ( ca dast r o de f or n ecedor es) qu a ndo quer e mos
r ef er e nci ar o ca mpo usa - se o pr efi xo da t a bel a e o ca mpo e m quest o, dest a f or ma :


SA2->A2_NOME


Agor a qu a ndo quer e mos r ef er e nci ar a u ma v ari v el que est com o cont e do do mesmo
ca mpo cri a mos out r o r ecurso, d est a f or ma :


M->A2_NOME


E pa r a cri ar v a ri v ei s com o nome do ca mpo utili z a mos u m cdi go de bl oco ( code - bl ock) e
mai s u m l ao de l ei t ur a par a a t ri bui r v al or es i ni ci ai s a ca da u ma del a . Ent o fi ca assi m o
procedi me nt o :


Private bCampo := { |nField| Field(nField) }


E e m out ro mome nt o a prov ei t a mos est v ari v el bCa mpo pa r a f aci li t ar a a t ri bui o, v ej a o
e x e mpl o a bai xo :


For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := Atribuio inicial ou atribuio de valor
Next nX


Ou sej a , f a z er par a t odos os ca mpos, e a ca da ca mpo cri ar a v ari v el com a a t ri bui o i ni ci al
ou a t ri bui o de v al or.












- 204 -

ADVPL Completo



22.3.1. Estrutura de um programa utilizando a Modelo3( )

O e x e mpl o a bai xo de monst r a a mont a ge m d e u m progr a ma par a a utili z ao do prot t i po
Model o 3. Ant es de i ni ci ar mos o e x e mpl o v a mos est r ut ur a r o pr ogr a ma .

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Decl ar ao e at ri buio de v ari v eis ;
3 Acesso a t a bel a pri nci pal e sua or de m;
4 Cha ma da da f uno MBrowse ;
5 Fim da funo principal.
6
7 Funo de visualizao, alterao e excluso;
8 Decl ar ao e at ri buio de v ari v eis ;
9 Acesso ao pri mei ro r e gist r o da cha v e e m que est posici ona do na MBrowse ;
10 Const r uo das v ari v eis de me mri a M- > ???;
11 Mont a ge m do v e t or a He ader por mei o do dici onrio de da dos ;
12
Mont a ge m do v e t or a COLS de t odos os r egist r os r ef er e nt e a cha v e pri nci pal e m que est
posici onado na MBr owse ;
13 I nst nci a da MsDi al og ;
14 Ex ecuo da f uno Enchoice ;
15 I nst nci a do obj e t o MsGe t Da dos ;
16 Ati v ar o obj e t o pri nci pal que o obj e t o da j a nel a ;
17 Se f or oper ao dif er e nt e de visuali z ao e clicou no bot o OK;
18 A oper ao e de Al t er ao?
19 Cha mar a f uno par a al t er ar os da dos ;
20 Caso cont r ri o
21 Cha mar a f uno par a e xcl ui r os da dos ;
22 Fim da funo de visualizao, alterao e excluso.
23
24 Funo de incluso;
25 Decl ar ao e at ri buio de v ari v eis ;
26 Const r uo das v ari v eis de me mri a M- > ???;
27 Mont a ge m do v e t or a He ader por mei o do dici onrio de da dos ;
28
Mont a ge m do v e t or a COLS com o se u cont e do confor me o i nici ali z a dor padr o do ca mpo ou
v a zi o, pois t r at a -se de u ma i ncl uso ;
29 I nst nci a da MsDi al og ;
30 I nst nci a dos obj e t os TSa y e TGe t ;
31 I nst nci a do obj e t o MsGe t Da dos ;
32 Ati v ar o obj e t o pri nci pal que o obj e t o da j a nel a ;
33 Se clicou no bot o OK;
34 Cha mar a f uno par a i ncl ui r os da dos ;
35 Fim da funo de incluso.









- 205 -

ADVPL Completo


Rotina principal


//+--------------------------------------------------------------------+
//| Rotina | xModelo3 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Funo exemplo do prottipo Modelo3. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
#Include "Protheus.ch"

User Function xModelo3()
Private cCadastro := "Prottipo Modelo 3"
Private aRotina := {}
Private oCliente
Private oTotal
Private cCliente := ""
Private nTotal := 0

Private bCampo := {|nField| FieldName(nField) }

Private aSize := {}
Private aInfo := {}
Private aObj := {}
Private aPObj := {}
Private aPGet := {}

// Retorna a rea til das janelas Protheus
aSize := MsAdvSize()

// Ser utilizado trs reas na janela
// 1 - Enchoice, sendo 80 pontos pixel
// 2 - MsGetDados, o que sobrar em pontos pixel para este objeto
// 3 - Rodap que a prpria janela, sendo 15 pontos pixel
AADD( aObj, { 100, 080, .T., .F. })
AADD( aObj, { 100, 100, .T., .T. })
AADD( aObj, { 100, 015, .T., .F. })

// Clculo automtico da dimenses dos objetos (altura/largura) em pixel
aInfo := { aSize[1], aSize[2], aSize[3], aSize[4], 3, 3 }
aPObj := MsObjSize( aInfo, aObj )

// Clculo automtico de dimenses dos objetos MSGET
aPGet := MsObjGetPos( (aSize[3] - aSize[1]), 315, { {004, 024, 240, 270} } )

AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})
AADD( aRotina, {"Visualizar" ,'U_Mod3Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod3Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod3Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod3Mnt',0,5})

dbSelectArea("ZA1")
dbSetOrder(1)
dbGoTop()
MBrowse(,,,,"ZA1")
Return

- 206 -

ADVPL Completo


Funo de Incluso


//+--------------------------------------------------------------------+
//| Rotina | Mod3Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para incluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function Mod3Inc( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0

Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}

dbSelectArea( cAlias )
dbSetOrder(1)

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := CriaVar( FieldName( nX ), .T. )
Next nX

Mod3aHeader()
Mod3aCOLS( nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro FROM ;
aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])

// Atualizao do nome do cliente
@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL

// Atualizao do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal ;
PICT "@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL

oGet := MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],;
nOpc,"U_Mod3LOk()",".T.","+ZA2_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;
{|| IIF( Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),
NIL) },;
{|| oDlg:End() })

If nOpcA == 1 .And. nOpc == 3
Mod3Grv( nOpc )
ConfirmSXE()
Endif
Return


- 207 -

ADVPL Completo



Funo de Visualizao, Alterao e Excluso


//+--------------------------------------------------------------------+
//| Rotina | Mod3Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para Visualizar, Alterar e Excluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function Mod3Mnt( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0
Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}
Private aREG := {}

dbSelectArea( cAlias )
dbSetOrder(1)

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := FieldGet( nX )
Next nX

Mod3aHeader()
Mod3aCOLS( nOpc )
DEFINE MSDIALOG oDlg TITLE cCadastro FROM ;
aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])

// Atualizao do nome do cliente
@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL

// Atualizao do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal PICTURE ;
"@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL

U_Mod3Cli()

oGet := MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],;
nOpc,"U_Mod3LOk()",".T.","+ZA2_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;
{|| IIF( Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),
NIL ) },;
{|| oDlg:End() })

If nOpcA == 1 .And. ( nOpc == 4 .Or. nOpc == 5 )
Mod3Grv( nOpc, aREG )
Endif
Return


- 208 -

ADVPL Completo





Funo para montar o vetor aHeader


//+--------------------------------------------------------------------+
//| Rotina | Mod3aHeader | Autor | Robson Luiz (rleg) |Data|01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aHeader. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod3aHeader()
Local aArea := GetArea()

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("ZA2")
While !EOF() .And. X3_ARQUIVO == "ZA2"
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL
AADD( aHeader, { Trim( X3Titulo() ),;
X3_CAMPO,;
X3_PICTURE,;
X3_TAMANHO,;
X3_DECIMAL,;
X3_VALID,;
X3_USADO,;
X3_TIPO,;
X3_ARQUIVO,;
X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return

Funo para montar o vetor aCols


//+--------------------------------------------------------------------+
//| Rotina | Mod3aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aCOLS. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod3aCOLS( nOpc )
Local aArea := GetArea()
Local cChave := ""
Local cAlias := "ZA2"
Local nI := 0

If nOpc <> 3
cChave := ZA1->ZA1_NUM

dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )

- 209 -

ADVPL Completo






Continuao:

While !EOF() .And. ZA2->( ZA2_FILIAL + ZA2_NUM ) == xFilial( cAlias ) +
cChave
AADD( aREG, ZA2->( RecNo() ) )
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZA2_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return


Funo para atribuir o nome do cliente a varivel


//+--------------------------------------------------------------------+
//| Rotina | Mod3Cli | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para atualizar a varivel com o nome do cliente. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+

User Function Mod3Cli()
cCliente := Posicione( "SA1", 1, xFilial("SA1") + M->(ZA1_CLIENT + ZA1_LOJA),
"A1_NREDUZ" )
oCliente:Refresh()
Return(.T.)



- 210 -

ADVPL Completo



Funo para validar a mudana de linha na MsGetDados( )

//+--------------------------------------------------------------------+
//| Rotina | Mod3LOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para atualizar a varivel com o total dos itens. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
User Function Mod3LOk()
Local nI := 0
nTotal := 0
For nI := 1 To Len( aCOLS )
If aCOLS[nI,Len(aHeader)+1]
Loop
Endif
nTotal+=Round(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]*;
aCOLS[nI,GdFieldPos("ZA2_PRCVEN")],2)
Next nI
oTotal:Refresh()
Return(.T.)

Funo para validar se todas as linhas esto preenchidas

//+--------------------------------------------------------------------+
//| Rotina | Mod3TOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar os itens se foram preenchidos. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod3TOk()
Local nI := 0
Local lRet := .T.

For nI := 1 To Len(aCOLS)
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_PRODUT")]) .And. lRet
MsgAlert("Campo PRODUTO preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]) .And. lRet
MsgAlert("Campo QUANTIDADE preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_PRCVEN")]) .And. lRet
MsgAlert("Campo PRECO UNITARIO preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif

If !lRet
Exit
Endif
Next i
Return( lRet )


- 211 -

ADVPL Completo


Funo para efetuar a gravao dos dados em ZA1 e ZA2 na incluso, alterao e
excluso.


//+--------------------------------------------------------------------+
//| Rotina | Mod3Grv | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para efetuar a gravao nas tabelas. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+--------------------------------------------------------------------+
Static Function Mod3Grv( nOpc, aAltera )
Local nX := 0
Local nI := 0

// Se for incluso
If nOpc == 3
// Grava os itens
dbSelectArea("ZA2")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If !aCOLS[ nX, Len( aCOLS ) + 1 ]
RecLock( "ZA2", .T. )
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[nI, 2] ) ),
aCOLS[nX,nI] )
Next nI
ZA2->ZA2_FILIAL := xFilial("ZA2")
ZA2->ZA2_NUM := M->ZA1_NUM
MsUnLock()
Endif
Next nX

// Grava o Cabealho
dbSelectArea( "ZA1" )
RecLock( "ZA1", .T. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial( "ZA1" ) )
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next nX
MsUnLock()
Endif

// Se for alterao
If nOpc == 4
// Grava os itens conforme as alteraes
dbSelectArea("ZA2")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If nX <= Len( aREG )
dbGoto( aREG[nX] )
RecLock("ZA2",.F.)
If aCOLS[ nX, Len( aHeader ) + 1 ]
dbDelete()
Endif
Else


- 212 -

ADVPL Completo


Continuao:

If !aCOLS[ nX, Len( aHeader ) + 1 ]
RecLock( "ZA2", .T. )
Endif
Endif

If !aCOLS[ nX, Len(aHeader)+1 ]
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[ nI, 2] ) ),;
aCOLS[ nX, nI ] )
Next nI
ZA2->ZA2_FILIAL := xFilial("ZA2")
ZA2->ZA2_NUM := M->ZA1_NUM
Endif
MsUnLock()
Next nX

// Grava o Cabealho
dbSelectArea("ZA1")
RecLock( "ZA1", .F. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial("ZA1"))
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next
MsUnLock()
Endif

// Se for excluso
If nOpc == 5
// Deleta os Itens
dbSelectArea("ZA2")
dbSetOrder(1)
dbSeek(xFilial("ZA2") + M->ZA1_NUM)
While !EOF() .And. ZA2->(ZA2_FILIAL + ZA2_NUM) == xFilial("ZA2") +;
M->ZA1_NUM
RecLock("ZA2")
dbDelete()
MsUnLock()
dbSkip()
End

// Deleta o Cabealho
dbSelectArea("ZA1")
RecLock("ZA1",.F.)
dbDelete()
MsUnLock()
Endif
Return



- 213 -

ADVPL Completo



22.3.2. Funo Modelo3( )

A f uno Mod el o3) u ma i nt erf ace pr - d efi ni da pel a Mi crosi ga que i mpl e me nt a de f or ma
pa droni z a da os compont es necessri os a ma ni pul ao de est r ut ur as de da dos n as qu ai s o
ca beal ho e os i t e ns da i nf or mao est o e m t a bel as sepa r a das.

Se u obj et i vo a t u a r co mo u m f aci li t a dor de codi fi cao, per mi ti ndo a utili z ao dos r ecursos
bsi cos dos segui nt es compon e nt es vi su ai s :

O MsDialog( )
O Enchoice( )
O EnchoiceBar( )
O MsNewGetDados( )




O A f uno Mod el o3( ) no i mpl e me nt a as r egr as de vi su ali z ao,
i ncl uso, al t er ao e e xcl uso, como u ma Ax Ca dast ro( ) ou
Ax F unct i on( ) .

O A i ni ci ali z a o dos ca mpos ut i li z a dos n a Enchoi ce( ) de v e ser r e ali z a das
pel a rot i n a que supor t a a e x ecu o da Mod el o3( ) , nor mal me nt e
a t r a v s do uso da f un o RegToMe mor y( ) .

O Da mesma f or ma , o Browse de v e ser t r a t a do por est a rot i n a , se ndo
comu m a Mod el o3( ) est ar vi ncul a da ao uso d e u ma MBr owse( ) .


E Sintaxe: Modelo3 ( [cTitulo], [cAliasE], [cAliasGetD], [aCposE], [cLinOk],
[cTudOk], [nOpcE], [nOpcG], [cFieldOk] )

E Parmetros:

cTitulo T t ul o da j a nel a
cAliasE Ali as da t a bel a que ser ut ili z a da n a Enchoi ce
cAliasGetD Ali as da t a bel a que ser ut ili z a da na Get Da dos
aCposE
Nome dos ca mpos, p er t e nce nt es a o Al i as especi fi ca do o pa r met r o cAl i asE,
que de v er o ser e xi bi dos na Enchoi ce :
AADD( a CposE, { nome _ca mpo } )
cLinhaOk F uno par a v al i dao da li nh a n a Get Da dos( )
cTudoOk F uno par a v al i dao n a confi r ma o da t el a de i nt erf ace da Mod el o2( ) .
nOpcE
Op o sel eci ona da n a MBrowse, ou que d esej e ser passa da pa r a cont r ol e da
Enchoi ce da Model o3, a onde :
2 Vi su ali z ar
3 - I ncl ui r
4 - Al t er ar
5 - Excl ui r
nOpcG
Op o sel eci on a da n a MBrowse, ou que d esej e ser passa da pa r a cont r ol e da
Get Da dos da Model o3, aonde :
2 Vi su ali z ar
3 - I ncl ui r
4 - Al t er ar
5 - Excl ui r
cFieldOk Vali dao dos ca mpos d a Enchoi ce( )

- 214 -

ADVPL Completo



E Retorno:

Lgico I ndi ca se a t el a da i nt erf ace Model o2( ) f oi confi r ma da ou ca ncel a da pel o
usu ri o.

Exemplo: Utilizao da Modelo3( ) para Pedidos de Vendas (SC5,SC6)


#INCLUDE "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | MBRWMOD3| Autor | ARNALDO RAYMUNDO JR. |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | EXEMPLO DE UTILIZACAO DA MODELO3(). |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+

User Function MbrwMod3()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock
Private cAlias := "SC5"

AADD(aRotina,{ "Pesquisa","AxPesqui" ,0,1})
AADD(aRotina,{ "Visual" ,"U_Mod3All" ,0,2})
AADD(aRotina,{ "Inclui" ,"U_Mod3All" ,0,3})
AADD(aRotina,{ "Altera" ,"U_Mod3All" ,0,4})
AADD(aRotina,{ "Exclui" ,"U_Mod3All" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)

Return

User Function Mod3All(cAlias,nReg,nOpcx)

Local cTitulo := "Cadastro de Pedidos de Venda"
Local cAliasE := "SC5"
Local cAliasG := "SC6"
Local cLinOk := "AllwaysTrue()"
Local cTudOk := "AllwaysTrue()"
Local cFieldOk:= "AllwaysTrue()"
Local aCposE := {}
Local nUsado, nX := 0


- 215 -

ADVPL Completo



Exemplo (continuao):

//
// Opcoes de acesso para a Modelo 3
//
Do Case
Case nOpcx==3; nOpcE:=3 ; nOpcG:=3 // 3 - "INCLUIR"
Case nOpcx==4; nOpcE:=3 ; nOpcG:=3 // 4 - "ALTERAR"
Case nOpcx==2; nOpcE:=2 ; nOpcG:=2 // 2 - "VISUALIZAR"
Case nOpcx==5; nOpcE:=2 ; nOpcG:=2 // 5 - "EXCLUIR"
EndCase

//
// Cria variaveis M->????? da Enchoice
//
RegToMemory("SC5",(nOpcx==3 .or. nOpcx==4 )) // Se for inclusao ou alteracao
permite alterar o conteudo das variaveis de memoria

//
// Cria aHeader e aCols da GetDados
//
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If Alltrim(x3_campo)=="C6_ITEM"
dbSkip()
Loop
Endif
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
Aadd(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpcx==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
aCols[1,nX]:=CriaVar(aHeader[nX,2])
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

- 216 -

ADVPL Completo



Exemplo (continuao):

If Len(aCols)>0
//
// Executa a Modelo 3
//
aCposE := {"C5_CLIENTE"}

lRetMod3 := Modelo3(cTitulo, cAliasE, cAliasG, aCposE, cLinOk, cTudOk,;
nOpcE, nOpcG,cFieldOk)
//
// Executar processamento
//
If lRetMod3
Aviso("Modelo3()","Confirmada operacao!",{"Ok"})
Endif
Endif

Return





























- 217 -

ADVPL Completo



22.4. Mbrowse( )

A Mbrowse( ) u ma f unci on ali da de de ca dast ro que per mi t e a utili z ao de r ecursos mai s
a pri mor a dos n a vi su ali z ao e ma ni pul ao das i nf or maes do si st e ma , possui ndo os
segui nt es compone nt es :

Browse pa dr o par a vi suali z ao das i nf or maes da base de da dos, de acor do com as
confi gur aes do SX3 Di ci on ri o de Da dos ( ca mpo br owse) .

Par a met ri z ao par a f unes esp ec fi cas par a as aes de vi su ali z ao, i ncl uso,
al t er ao e e xcl uso d e i nf or maes, o que vi a bili z a a ma nut e no de i nf or maes com
est r ut ur a de ca b eal hos e i t e ns.

Recursos a di ci onai s como i de nti fi ca dor es de st a t us de r egi st ros, l ege ndas e fil t ros par a
as i nf or maes.

E Sintaxe: MBrowse(nLin1, nCol1, nLin2, nCol2, cAlias, aFixe, cCpo, nPar08,
cFun, nClickDef, aColors, cTopFun, cBotFun, nPar14, bInitBloc,
lNoMnuFilter, lSeeAll, lChgAll)

E Parmetros:

nLin1 N mer o da Li nh a I ni ci al
nCol1 N mer o da Col una I ni ci al
nLin2 N mer o da Li nh a Fi n al
nCol2 N mer o da Col un a Fi n al
cAlias
Ali as do ar qui vo que ser vi su ali z a do no br owse .
Par a ut i li z ar a f uno MBrowse com a r qui vos d e t r a bal ho, o al i as do
ar qui vo de t r a bal ho de v e ser obri ga t ori a me nt e ' TRB' e o par met ro
a Fi x e t or n a - se obri ga t ri o.
aFixe
Arr a y bi - di me nsi on al cont e ndo os nomes dos ca mpos fi xos pr -
defi ni dos, obri ga ndo a e xi bi o de u ma ou mai s col un as ou a d efi ni o
das col un as qu a ndo a f uno ut ili z a da com ar qui vos de t r a bal ho.
A est r ut ur a do ar r a y di f er e nt e par a a r qui vos que f a z e m par t e do
di ci on ri o de da dos e pa r a a r qui vos de t r a bal ho.

Ar qui vos que f a z e m pa r t e do di ci on ri os de da dos

[ n] [ 1] = > Descri o do ca mpo
[ n] [ 2] = > Nome do ca mpo

Ar qui vos de t r a bal ho

[ n] [ 1] = > Descri o do ca mpo
[ n] [ 2] = > Nome do ca mpo
[ n] [ 3] = > Ti po
[ n] [ 4] = > Ta ma nho
[ n] [ 5] = > Deci mal
[ n] [ 6] = > Pi ct ur e




- 218 -

ADVPL Completo


E Parmetros:

cCpo
Ca mpo a ser v al i da do se est v a zi o ou n o pa r a e xi bi o do bi t ma p de
st a t us. Qu a ndo esse pa r met r o ut ili z a do, a pri mei r a col un a do br owse
ser u m bi t ma p i ndi ca ndo o st a t us do r egi st r o, conf or me as condi es
confi gur a das nos par met r os cCpo, cFun e aColors.
nPar08 Par met r o r eser v a do.
cFun
F uno que r et or n ar u m v al or l gi co par a e xi bi o do bi t ma p de
st a t us.
Qu a ndo esse pa r met r o ut i li z a do, o pa r met r o cCpo
a ut oma t i ca me nt e desconsi der a do.
nClickDef
N mer o da op o do aRot i n a que ser e x ecut a d a qu a ndo f or ef et ua do
u m dupl o cli que e m u m r egi st ro do br owse. O d ef a ul t e x ecut ar a
rot i n a de vi su ali z ao.
aColors
Arr a y bi - di me nsi on al par a possi bili t ar o uso d e di f er e nt es bi t ma ps de
st a t us.
[ n] [ 1] = > F uno qu e r et or n a r u m v al or l gi co par a a e xi bi o do
bi t ma p
[ n] [ 2] = > Nome do bi t ma p que ser e xi bi do qu a ndo a f un o r et or na r
. T. ( Tr ue) .
O nome do bi t ma p de v e ser u m r esource do r eposi t ri o e qu a ndo esse
par met ro ut ili z ado os par met r os cCpo e cFun so
a ut oma t i ca me nt e desconsi der a dos.
cTopFun
F uno que r et or na o li mi t e superi or do fi l t ro base a do n a ch a v e de
ndi ce sel eci on a da .
Esse pa r met r o d e v e ser ut ili z a do e m conj unt o com o pa r met r o
cBotFun.
cBotFun
F uno que r et or na o li mi t e i nf eri or do fi l t ro base a do n a ch a v e d e ndi ce
sel eci on a da .
Esse pa r met r o d e v e ser ut ili z a do e m conj unt o com o pa r met r o
cTopFun.
nPar14 Par met r o r eser v a do.
bInitBloc
Bl oco de cdi go que ser e x ecut a do no ON I NI T da j a nel a do br owse. O
bl oco de cdi go r eceb er como pa r met r o o obj et o da j a nel a do
browse .
lNoMnuFilter
Val or l gi co que defi ne se a opo de fil t ro ser e xi bi da no me nu da
MBr owse.
. T. = > N o e xi be a opo no me nu
. F. = > ( def a ul t ) Exi be a op o no me nu.
A op o d e fi l t ro n a MBr owse est di spon v el a pe n as pa r a TopCon nect .
lSeeAll
I d e nt i fi ca se o Br owse d e v er most r a r t odas as fili ai s.
O v al or def a ul t . F. ( F al se ) , no most r a t odas as fi li ai s. Caso os
par met ros cTopFun ou cBotFun sej a m i nf or ma dos esse par met r o
ser confi gur a do a ut oma t i ca me nt e par a . F. ( F al se )
Par met r o v l i do par t i r da verso 8.11.
A f uno SetBrwSeeAll muda o v al or d ef a ul t desse pa r met r o.
lChgAll
I d e nt i fi ca se o r egi st r o de out r a fi li al est a ut ori z a do par a al t er aes.
O v al or def a ul t . F. ( F al se ) , n o p er mi t e al t er ar r egi st ros d e out r as
fili ai s. Qu a ndo esse pa r met r o est confi gur a do par a . T. ( Tr u e ) , o
par met ro lSeeAll confi gur a do a ut oma t i ca me nt e pa r a . T. ( Tr u e ) .
Caso os par met ros cTopFun ou cBotFun sej a m i nf or ma dos esse
par met ro ser confi gur a do a ut oma t i ca me nt e p ar a . F. ( F al se ) .
Par met r o v l i do par t i r da verso 8.11.
A f uno SetBrwChgAll muda o v al or d ef a ul t desse pa r met r o.

- 219 -

ADVPL Completo



E Variveis private adicionais

aRotina
Arr a y cont e ndo as f unes que ser o e x ecut a das pel a Mbrowse, nel e
ser defi ni do o t i po de oper a o a ser e x ecut a da (i ncl uso, al t er ao,
e xcl uso, vi su ali z ao, pesqui sa , et c. ) , e su a est r ut ur a co mpost a d e
5 ( ci nco) di me nses :

[ n] [ 1] - T t ul o ;
[ n] [ 2] Rot i n a ;
[ n] [ 3] Reser v a do ;
[ n] [ 4] Oper ao ( 1 - pesqui sa ; 2 - vi su ali z ao ; 3 - i ncl uso ; 4 -
al t er ao ; 5 - e xcl uso) ;

El e ai nda pode ser par a met ri z a do com as f unes bsi cas da
Ax Ca dast r o conf or me a bai xo :

AADD( aRot i n a , { " Pesqui sar " , " AxPesqui " , 0, 1 } )
AADD( aRot i n a , { " Vi su ali z ar " , " Ax Vi su al " , 0, 2 } )
AADD( aRot i n a , { " I ncl ui r " , " Ax I ncl ui " , 0, 3 } )
AADD( aRot i n a , { " Al t er ar " , " Ax Al t er a " , 0, 4 } )
AADD( aRot i n a , { " Excl ui r " , " Ax Del et a " , 0, 5 } )
cCadastro T t ul o do browse que ser e xi bi do.

E Informaes passadas para funes do aRotina:

Ao defi ni r as f unes no ar r a y aRot i n a , se o nome da f uno n o f or esp eci fi ca do com ( ) , a
Mbrowse passar como par met ros as segui nt es v a ri v ei s de cont r ol e :

cAlias Nome da r e a de t r a bal ho defi ni da par a a Mbr owse
nReg Recno do r egi st ro posi ci on a do no Br owse
nOpc
Posi o da opo ut ili z ada n a Mbr owse d e acor do com a or de m da
f uno no ar r a y a Rot i n a .



A posi o das f unes no arr a y aRot i n a defi ne o cont e do de u ma v ari v el de
cont r ol e que ser r epassa da par a as f unes ch a ma das a par t i r da Mbrowse ,
conv e nci on a da como n Opc. Dest a f or ma , par a ma nt er o pa dr o da a pli cao
ERP a or de m a ser segui da n a defi ni o do aRot i na :


1. Pesqui sar
2. Vi suali z ar
3. I ncl ui r
4. Al t er ar
5. Excl ui r
6. Li vr e


- 220 -

ADVPL Completo



Exemplo: Funo Mbrowse( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA1()

Local cAlias := "SA1"
Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual",0,2})
AADD(aRotina,{"Incluir" ,"AxInclui",0,3})
AADD(aRotina,{"Alterar" ,"AxAltera",0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta",0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)

Return Nil


Exemplo: Funo Inclui( ) substituindo a funo AxInclui( ) Chamada da Mbrowse( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA1()

Local cAlias := "SA1"
Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_Inclui" ,0,3})


- 221 -

ADVPL Completo



Exemplo (continuao):

AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)

Return Nil


Exemplo: Funo Inclui( ) substituindo a funo AxInclui( ) Funo Inclui( )


/*/
+-----------------------------------------------------------------------------
| Funo | INCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de incluso especfica chamando a AXINCLUI() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function Inclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"
Local nOpcao := 0

nOpcao := AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)

If nOpcao == 1
MsgInfo(Incluso concluda com sucesso!)
ElseIf == 2
MsgInfo(Incluso cancelada!)
Endif

Return Nil









- 222 -

ADVPL Completo



Exemplo: Determinando a opo do aRotina pela informao recebida em nOpc

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | EXCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de excluso especifica chamando a AxDeleta |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function Exclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"
Local nOpcao := 0

nOpcao := AxDeleta(cAlias,nReg,aRotina[nOpc,4])
// Identifica corretamente a opo definida para o funo em aRotinas com mais
// do que os 5 elementos padres.

If nOpcao == 1
MsgInfo(Excluso realizada com sucesso!)
ElseIf == 2
MsgInfo(Excluso cancelada!)
Endif

Return Nil


22.4.1. AxFunctions( )

Conf or me me nci on a do nos t pi cos sobr e as i nt erf aces pa dres Ax Ca dast ro( ) e Mbr owse( ) ,
e xi st e m f unes pa dr es da a pli cao ERP que per mi t e m a vi su ali z ao, i ncl uso, al t er ao e
e xcl uso d e da dos e m f or ma t o si mpl es.

Est as f unes s o pa dres na defi ni o da i nt erf ace Ax Ca dast ro( ) e pod e m ser ut i li z a da s
t a mb m da const r u o no a rr a y aRot i n a ut ili z a do pel a Mbr owse( ) , as qu ai s est o l i st a das a
segui r :

AXPESQUI ( )
AXVISUAL( )
AXINCLUI ( )
AXALTERA( )
AXDELETA( )

- 223 -

ADVPL Completo



AXPESQUI ( )

Sintaxe AXPESQUI ( )
Descrio
F uno de pesqui sa pa dr o e m r egi st ros e xi bi dos pel os br owses do si st e ma ,
a qu al posi ci on a o br owse no r egi st ro pesqui sa do. Exi be u ma t el a que
per mi t e a sel e o do ndi ce a ser ut i li z a do n a pesqui sa e a di gi t ao das
i nf or maes que compe a ch a v e de busca .

AXVISUAL( )

Sintaxe
AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,;
aButtons, lMaximized )
Descrio
F uno de vi su ali z ao pa dr o das i nf or maes de u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXINCLUI ( )

Sintaxe
AxInclui(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
F uno de i ncl uso pa dr o das i nf or maes d e u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .

AXALTERA( )

Sintaxe
AxAltera(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
F uno de al t er a o pa dr o das i nf or maes d e u m r egi st ro, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .


AXDELETA( )

Sintaxe
AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,;
aAuto, lMaximized)
Descrio
F uno de e xcl uso pa dr o das i nf or maes de u m r egi st r o, no f or ma t o
Enchoi ce, conf or me de monst r a do no t pi co sobr e a i nt erf ace Ax Ca dast ro( ) .









- 224 -

ADVPL Completo



22.4.2. FilBrowse( )

A Fil Browse( ) u ma f unci on ali da de que per mi t e a ut ili z ao de fi l t ros na MBr owse( ) .

E Sintaxe: FilBrowse(cAlias, aQuery, cFiltro, lShowProc)

E Parmetros:

cAlias Ali as a ti vo defi ni do par a a Mbr owse( )
aQuery
Est e par met ro d e v er ser i ni ci ali z a do se mpr e v a zi o e sua passa g e m
obri ga t ori a me nt e por r ef er nci a , poi s, se u r et or no ser e nvi a do pa r a a
f uno EndFil Br w( ) .

[ 1] = > Nome do Ar qui vo F si co
[ 2] = > Or d e m corr esponde nt e a o Si nde x
cFiltro Condi o de fi l t ro par a a MBr owse( )
lShowProc

Ha bili t a ( . T. ) ou d esa bi li t a ( . F. ) a a pr ese nt a o da me nsa g e m
Sel eci on a ndo r egi st ros . . . , no pr ocessa me nt o.



22.4.3. EndFilBrw( )

A EndFil Br w( ) u ma f unci onali da de que per mi t e eli mi n ar o fil t ro e o a r qui vo t e mpor ri o
cri a dos p el a Fil Browse( ) .

E Sintaxe: EndFilBrw(cAlias, aQuery)

E Parmetros:

cAlias Ali as a ti vo defi ni do par a a Mbr owse( )
aQuery
Arr a y de r et or no passa do por r ef er nci a par a a Fil Browse( ) .

[ 1] = > Nome do Ar qui vo F si co
[ 2] = > Or d e m corr esponde nt e a o Si nde x








- 225 -

ADVPL Completo



22.4.4. PesqBrw( )

A PesqBr w( ) u ma f unci onali da de que per mi t e a pesqui sa de nt r o da MBr owse( ) . Est a f un o
de v er obri ga t ori a me nt e subst i t ui r a f uno AxPesqui , no arr a y do a Rot i n a , se mpr e que f or
utili z a da a f uno Fil Browse( ) .

E Sintaxe: PesqBrw(cAlias , nReg, bBrwFilter)

E Parmetros:

cAlias Ali as a ti vo defi ni do par a a Mbr owse( )
nReg N mer o do r egi st ro
bBrwFilter
Bl oco de Cdi go que cont m a Fi l Browse( )

Ex : bBr wFi l t er : = { | | Fil Browse( cAli as, a Qu er y , cFil t ro, l ShowPr oc) }



22.4.5. BrwLegenda ( )

A Br wLeg e nda ( ) u ma f unci on ali da de que per mi t e a i ncl uso de l ege ndas n a MBrowse( ) .

E Sintaxe: BrwLegenda(cCadastro , cTitulo, aLegenda)

E Parmetros:

cCadastro
Mesma v a ri v el utili z a da par a a MBrowse , que i de nt i fi ca o ca dast r o que
est e m uso no mome nt o
cTitulo T t ul o (i de nti fi cao) da Leg e nda
aLegenda

Arr a y cont e ndo de d efi ni o da cor e do t e xt o, e x pli ca ti vo sobr e o que
el a r epr ese nt a n a MBr owse

Ex : { { Cor, Te xt o } }




Lista de cores disponveis no Protheus

O BR_AMARELO
O BR_AZ UL
O BR_BRANCO
O BR_CI NZ A
O BR_LARANJA
O BR_MARRON
O BR_VERDE
O BR_VERMELHO
O BR_PI NK
O BR_PRET O




- 226 -

ADVPL Completo



Exemplo: Mbrowse( ) utilizando as funes acessrias


#Include "Protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | MBrwSA2 | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo da MBrowse utilizando a tabela de Cadastro de |
| | Fornecedores |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA2()

Local cAlias := "SA2"
Local aCores := {}
Local cFiltra := "A2_FILIAL == '"+xFilial('SA2')+"' .And. A2_EST == 'SP'"

Private cCadastro := "Cadastro de Fornecedores"
Private aRotina := {}
Private aIndexSA2 := {}
Private bFiltraBrw:= { || FilBrowse(cAlias,@aIndexSA2,@cFiltra) }

AADD(aRotina,{"Pesquisar" ,"PesqBrw" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_BInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"U_BAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"U_BDeleta" ,0,5})
AADD(aRotina,{"Legenda" ,"U_BLegenda" ,0,3})

/*
-- CORES DISPONIVEIS PARA LEGENDA --
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARRON
BR_VERDE
BR_VERMELHO
BR_PINK
BR_PRETO
*/

AADD(aCores,{"A2_TIPO == 'F'" ,"BR_VERDE" })
AADD(aCores,{"A2_TIPO == 'J'" ,"BR_AMARELO" })
AADD(aCores,{"A2_TIPO == 'X'" ,"BR_LARANJA" })
AADD(aCores,{"A2_TIPO == 'R'" ,"BR_MARRON" })
AADD(aCores,{"Empty(A2_TIPO)" ,"BR_PRETO" })

dbSelectArea(cAlias)
dbSetOrder(1)


- 227 -

ADVPL Completo



Exemplo (continuao):

//+------------------------------------------------------------
//| Cria o filtro na MBrowse utilizando a funo FilBrowse
//+------------------------------------------------------------
Eval(bFiltraBrw)

dbSelectArea(cAlias)
dbGoTop()
mBrowse(6,1,22,75,cAlias,,,,,,aCores)

//+------------------------------------------------
//| Deleta o filtro utilizado na funo FilBrowse
//+------------------------------------------------
EndFilBrw(cAlias,aIndexSA2)

Return Nil

//+---------------------------------------
//|Funo: BInclui - Rotina de Incluso
//+---------------------------------------
User Function BInclui(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxInclui(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Incluso efetuada com sucesso!")
Else
MsgInfo("Incluso cancelada!")
Endif

Return Nil

//+-----------------------------------------
//|Funo: BAltera - Rotina de Alterao
//+-----------------------------------------
User Function BAltera(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxAltera(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Alterao efetuada com sucesso!")
Else
MsgInfo("Alterao cancelada!")
Endif

Return Nil


- 228 -

ADVPL Completo



Exemplo (continuao):

//+-----------------------------------------
//|Funo: BDeleta - Rotina de Excluso
//+-----------------------------------------
User Function BDeleta(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxDeleta(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Excluso efetuada com sucesso!")
Else
MsgInfo("Excluso cancelada!")
Endif

Return Nil

//+-------------------------------------------
//|Funo: BLegenda - Rotina de Legenda
//+-------------------------------------------
User Function BLegenda()

Local aLegenda := {}

AADD(aLegenda,{"BR_VERDE" ,"Pessoa Fsica" })
AADD(aLegenda,{"BR_AMARELO" ,"Pessoa Jurdica" })
AADD(aLegenda,{"BR_LARANJA" ,"Exportao" })
AADD(aLegenda,{"BR_MARRON" ,"Fornecedor Rural" })
AADD(aLegenda,{"BR_PRETO" ,"No Classificado" })

BrwLegenda(cCadastro, "Legenda", aLegenda)

Return Nil














- 229 -

ADVPL Completo



22.5. MarkBrowse( )

A f uno Ma r k Brow( ) per mi t e que os el e me nt os de u m br owse, sej a m marca dos ou
desma rca dos. Pa r a ut ili z ao da Mar k Brow( ) necessri o decl ar a r as v ari v ei s cCa dast ro e
aRot i na como Pri v a t e, a nt es da ch a ma da da f uno.

E Sintaxe: MarkBrow (cAlias, cCampo, cCpo, aCampos, lInvert, cMarca, cCtrlM,
uPar8, cExpIni, cExpFim, cAval, bParBloco)

E Parmetros:

cAlias Ali as a ti vo defi ni do par a a Mbr owse( )
cCampo Ca mpo do a r qui vo onde ser f ei t o o cont rol e ( gr a v a o) da marca .
cCpo
Ca mpo onde ser f ei t a a v ali dao par a marcao e e xi bi o do bi t ma p
de st a t us.
aCampos
Vet or de col un as a ser e m e xi bi das no browse, de v e cont er as segui nt es
di me nses :

[ n] [ 1] nome do ca mpo ;
[ n] [ 2] - Nul o ( Nil ) ;
[ n] [ 3] - T t ul o do ca mpo ;
[ n] [ 4] - Mscar a ( pi ct ur e) .
lInvert I nv er t e a marca o.
cMarca St ri ng a ser gr a v a da no ca mpo esp eci fi ca do par a marca o.
cCtrlM F uno a ser e x ecut a da caso desej e ma rca r t odos el e me nt os.
uPar8 Par met r o r eser v a do.
cExpIni
F uno que r et or na o cont e do i ni ci al do fil t ro b ase a da na ch a v e d e
ndi ce sel eci on a da .
cExpFim
F uno que r et or n a o cont e do fi n al do fil t ro base a da n a ch a v e d e
ndi ce sel eci on a da .
cAval F uno a ser e x ecut a da no dupl o cli que e m u m el e me nt o no br owse .
bParBloco Bl oco de cdi go a ser e x ecut a do n a i ni ci ali z ao da j a nel a


E Informaes passadas para funes do aRotina:

Ao defi ni r as f unes no ar r a y aRot i n a , se o nome da f uno n o f or esp eci fi ca do com ( ) , a
Mar k Browse passar co mo par met ros as segui nt es v a ri v ei s de cont r ol e :

cAlias Nome da r e a de t r a bal ho defi ni da par a a Mbr owse
nReg Recno do r egi st ro posi ci on a do no Br owse
nOpc
Posi o da opo ut ili z ada n a Mbr owse d e acor do com a or de m da
f uno no ar r a y a Rot i n a .
cMarca Marca e m uso pel a Mar k Br w( )
lInverte I ndi ca se f oi utili z a da a i nv erso da sel e o dos i t e ns no br owse.


- 230 -

ADVPL Completo



Exemplo: Funo MarkBrow( ) e acessrias


#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Programa | MkBrwSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | MarkBrowse Genrico |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION MkBrwSA1()

Local aCpos := {}
Local aCampos := {}
Local nI := 0
Local cAlias := "SA1"

Private aRotina := {}
Private cCadastro := "Cadastro de Clientes"
Private aRecSel := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"AxInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})
AADD(aRotina,{"Visualizar Lote" ,"U_VisLote" ,0,5})

AADD(aCpos, "A1_OK" )
AADD(aCpos, "A1_FILIAL" )
AADD(aCpos, "A1_COD" )
AADD(aCpos, "A1_LOJA" )
AADD(aCpos, "A1_NOME" )
AADD(aCpos, "A1_TIPO" )

dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len(aCpos)
IF dbSeek(aCpos[nI])
AADD(aCampos,{X3_CAMPO,"",IIF(nI==1,"",Trim(X3_TITULO)),;
Trim(X3_PICTURE)})
ENDIF
Next

DbSelectArea(cAlias)
DbSetOrder(1)

MarkBrow(cAlias,aCpos[1],"A1_TIPO == ' '",aCampos,.F.,GetMark(,"SA1","A1_OK"))

Return Nil

- 231 -

ADVPL Completo


Exemplo: Funo VisLote( ) utilizao das funes acessrias da MarkBrow( )


/*/
+-----------------------------------------------------------------------------
| Programa | VisLote() | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Funo utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
USER FUNCTION VisLote()
Local cMarca := ThisMark()
Local nX := 0
Local lInvert := ThisInv()
Local cTexto := ""
Local cEOL := CHR(10)+CHR(13)
Local oDlg
Local oMemo

DbSelectArea("SA1")
DbGoTop()
While SA1->(!EOF())

// IsMark("A1_OK", cMarca, lInverte)
IF SA1->A1_OK == cMarca .AND. !lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD, SA1->A1_LOJA, SA1->A1_NREDUZ})
ELSEIF SA1->A1_OK != cMarca .AND. lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD,SA1->A1_LOJA, SA1->A1_NREDUZ})
ENDIF

SA1->(dbSkip())
Enddo

IF Len(aRecSel) > 0
cTexto := "Cdigo | Loja | Nome Reduzido "+cEol
// "1234567890123456789012345678901234567890
// "CCCCCC | LL | NNNNNNNNNNNNNNNNNNNN +cEol

For nX := 1 to Len(aRecSel)

cTexto += aRecSel[nX][2]+Space(1)+ "|"+Space(2) +
aRecSel[nX][3]+Space(3)+"|"
cTexto += Space(1)+SUBSTRING(aRecSel[nX][4],1,20)+Space(1)
cTexto += cEOL

Next nX

DEFINE MSDIALOG oDlg TITLE "Clientes Selecionados" From 000,000 TO 350,400
PIXEL
@ 005,005 GET oMemo VAR cTexto MEMO SIZE 150,150 OF oDlg PIXEL
oMemo:bRClicked := {||AllwaysTrue()}
DEFINE SBUTTON FROM 005,165 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg PIXEL
ACTIVATE MSDIALOG oDlg CENTER
LimpaMarca()
ENDIF

RETURN

- 232 -

ADVPL Completo


Exemplo: Funo LimpaMarca( ) utilizao das funes acessrias da MarkBrow( )


/*/
+-----------------------------------------------------------------------------
| Programa | LimpaMarca | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Funo utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION LimpaMarca()

Local nX := 0

For nX := 1 to Len(aRecSel)
SA1->(DbGoto(aRecSel[nX][1]))
RecLock("SA1",.F.)
SA1->A1_OK := SPACE(2)
MsUnLock()
Next nX

RETURN

























- 233 -

ADVPL Completo



23. Arquivos e ndices Temporrios

23.1. Utilizao de arquivos e ndices temporrios

Os ar qui vos e ndi ces t e mpor ri os ou d e t r a bal ho, so g er al me nt e ut ili z a dos e m a mbi e nt e
Code Base, poi s, nest e a mbi e nt e no h os r ecursos d e Joi n e Or d er By, como e xi st e nos
ba ncos d e da dos r el aci on ai s. Por est e mot i vo qu a ndo n ecessi t ar ger a r u ma i nf or mao
or d e n a da e consol i da da, ou sej a , d e v ri as t a b el as, de v er e mos r ecorr er ao uso dos ar qui vos e
dos ndi ces t e mpor ri os.


23.2. Funes para manipulao de arquivos e ndices temporrios


23.2.1. CriaTrab( )

A Cri a Tr a b( ) u ma f u nci on ali da de que per mi t e cri ar u m ar qui vo f si co ou ger ar u m nome
al e a t ri o.

E Sintaxe: CriaTrab(aCampo, lCriar, cExt)

E Parmetros

aCampo
Arr a y com o nome, t i po, t a ma nho e deci mal do ca mpo a ser cri a do no
ar qui vo
lCriar
Se v er da d ei ro ( . T. ) cri ar o a r qui vo, ou f al so ( . F. ) some nt e r et or na u m
nome al e a t ri o
cExt Qu al e xt e ns o d e v er ser cri a do o a r qui vo de t r a bal ho



Os ar qui vos cri a dos co m a f uno CRI ATRAB( ) ser o ger a dos no di r et ri o
esp eci fi ca do como St a r t Pa t h, de acor do com o Root Pa t h confi gur a do no .i ni
da a pli cao.









- 234 -

ADVPL Completo



23.2.2. dbUseArea( )

A dbUse Ar e a ( ) u ma f unci onali da de que per mi t e defi ni r u m ar qui vo de base de da dos, co m
u ma r e a de t r a bal ho dispon v el n a a pli cao.

E Sintaxe: dbUseArea(lNewArea, cDriver, cName, cAlias, lShared, lReadOnly)

E Parmetros

lNewArea I ndi ca se e u m nov o al i as no conj unt o d e al i as a ber t o
cDriver Dri v e ( RddNa me( ) ) do a r qui vo - > DBF CDX / T OPCONN / DBF NTX
cName Nome f si co da t a bel a que ser usa do
cAlias Ali as que ser usa do e nqu a nt o est i v e a b er t o
lShared A t a bel a t er acesso e xcl usi vo ou compar t i l h a do
lReadOnly Se v er da d ei ro a t a bel a ser some nt e l ei t ur a


23.2.3. IndRegua( )

A I ndRegu a ( ) u ma f unci on ali da de que per mi t e cri ar ndi ces t e mpor ri os pa r a o al i as
esp eci fi ca do, pod e ndo ou n o t er u m fi l t ro.

E Sintaxe: IndRegua(cAlias, cNIndex, cExpress, xOrdem, cFor, cMens, lShow)

E Parmetros

cAlias Ali as da t a bel a onde ser ef et ua da o ndi ce / fil t ro t e mpor ri o
cNIndex Nome do ar qui vo d e t r a bal ho r et or n a do p el a f uno Cri a Tr a b( )
cExpress Expresso utilizada na chave do novo ndice
xOrdem Par met r o nul o
cFor Expresso utilizada para filtro
cMens Par met r o nul o
lShow Apr ese nt ar a t el a de pr ogr esso do ndi ce / fil t ro t e mpor ri o




- 235 -

ADVPL Completo



Exemplo 01: Gerao de arquivo e ndice temporrios


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Programa | GeraTrab | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Desc. | Utilizao de arquivos e ndices temporrios |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GeraTrab()

Local aStru := {}
Local aArqTRB := {}
Local nI := 0
Local cIndTRB := ""
Local cNomArq := ""

AADD( aStru, { "PRODUTO" ,"B1_COD" } )
AADD( aStru, { "DESCRICAO" ,"B1_DESC" } )
AADD( aStru, { "GRUPO" ,"BM_GRUPO" } )
AADD( aStru, { "DESCGRUPO" ,"BM_DESC" } )
AADD( aStru, { "TIPO" ,"B1_TIPO" } )
AADD( aStru, { "DESCTIPO" ,"B1_DESC" } )
AADD( aStru, { "CC" ,"CTT_CC" } )
AADD( aStru, { "DESC_CC" ,"CTT_DESC" } )
AADD( aStru, { "SERIE" ,"D2_SERIE" } )
AADD( aStru, { "DOCTO" ,"D2_COD" } )
AADD( aStru, { "TIPONOTA" ,"D2_TP" } )
AADD( aStru, { "EMISSAO" ,"D2_EMISSAO" } )
AADD( aStru, { "CLIENTE" ,"D2_CLIENTE" } )
AADD( aStru, { "LOJA" ,"D2_LOJA" } )
AADD( aStru, { "NOME" ,"A1_NOME" } )
AADD( aStru, { "QTDE" ,"D2_QUANT" } )
AADD( aStru, { "UNIT" ,"D2_PRCVEN" } )
AADD( aStru, { "TOTAL" ,"D2_TOTAL" } )
AADD( aStru, { "ALIQICMS" ,"D2_PICM" } )
AADD( aStru, { "VALICMS" ,"D2_VALICM" } )
AADD( aStru, { "ALIQIPI" ,"D2_IPI" } )
AADD( aStru, { "VALIPI" ,"D2_VALIPI" } )
AADD( aStru, { "VALMERC" ,"D2_TOTAL" } )
AADD( aStru, { "TOTSEMICMS" ,"D2_TOTAL" } )
AADD( aStru, { "VALPIS" ,"D2_TOTAL" } )
AADD( aStru, { "LIQUIDO" ,"D2_TOTAL" } )
AADD( aStru, { "CUSTO" ,"D2_TOTAL" } )

dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len( aStru )
dbSeek( aStru[nI,2] )
AADD( aArqTRB, { aStru[nI,1], X3_TIPO, X3_TAMANHO, X3_DECIMAL } )
Next nI


- 236 -

ADVPL Completo


Exemplo (continuao):

// ndice que ser criado
cIndTRB := "PRODUTO+DTOS(EMISSAO)"

cNomArq := CriaTrab( aArqTRB, .T. )

dbUseArea( .T., "DBFCDX", cNomArq, "TRB", .T. ,.T. )

IndRegua( "TRB", cNomArq, cIndTRB )
dbSetOrder(1)

// ( ... ) fazer o processamento necessrio

dbSelectArea("TRB")
dbCloseArea()

If MsgYesNo("Apagar o arquivo gerado \system\"+cNomArq+".dbf ?",FunName())
Ferase(cNomArq+".dbf")
Ferase(cNomArq+OrdBagExt())
Endif

Return Nil


Qu a ndo cri a mos u m ar qui vo ou u m ndi ce t e mpor ri o ( t r a bal ho) ,
utili z a ndo a f uno I ndr egua , obri ga t ri o a pa g -l os no fi n al do r ot i n a.

A utili z ao de ar qui vo ou ndi ce t e mpor ri o, d e v er ser be m a nali sa da
a fi m de e vi t ar l e nti do no pr ocessa me nt os da r ot i n a .


O arr a y aStru f oi cri a do com base nos ca mpos e xi st e nt es no si st e ma ,
ao i nv s de cri ar mos nov as est r ut ur as dos ca mpos, ut i li z a mos as j
e xi st e nt es no di ci on ri os de da dos ( SX3) .














- 237 -

ADVPL Completo


Exemplo 02: Utilizando dois ndices temporrios com RDD DBFCDX


/*/
+-----------------------------------------------------------------------------
| Programa | IndTwoReg | Autor | MICHEL DANTAS | Data | |
+-----------------------------------------------------------------------------
| Desc. | Utilizao de dois ndices temporrios com DBFCDX |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function IndTwoReg()

LOCAL nOrder := 0
LOCAL cArq1 := CriaTrab(NIL,.F.)
LOCAL cChave1 := "A1_FILIAL+A1_EST"
LOCAL cArq2 := CriaTrab(NIL,.F.)
LOCAL cChave2 := "A1_FILIAL+A1_NOME"

dbSelectArea("SA1")
IndRegua("SA1",cArq1,cChave1,,,"Selecionando Regs...")
IndRegua("SA1",cArq2,cChave2,,,"Selecionando Regs...")

nOrder := RetIndex("SA1")

dbSetIndex(cArq1+OrdBagExt())
dbSetIndex(cArq2+OrdBagExt())

Alert("Agora vai por estado")

dbsetOrder(nOrder+1)
dbGoTop()
While !Eof()
Alert("Estado : " + SA1->A1_EST +" "+" Nome : " + SA1->A1_NOME)
dbSkip()
End

Alert("Agora vai por nome")

dbSetOrder(nOrder+2)
dbGoTop()
While !Eof()
Alert("Estado : " + SA1->A1_EST +" "+" Nome : " + SA1->A1_NOME)
dbSkip()
End

RetIndex("SA1")
Ferase(cArq1+OrdBagext())
Ferase(cArq2+OrdBagext())

Return



- 238 -

ADVPL Completo



24. Relatrios no grficos

Os r el a t ri os d ese nvol vi dos e m ADVPL possu e m u m pa dr o de d ese nvol vi me nt o que mai s
depe nde d e l a yout e t i pos d e par met r os do que qu al quer out ro t i po de i nf or ma o, vi st o que
a t o mome nt o percebe mos que a li ngu a ge m pa dr o da Mi crosi ga mui t o mai s compost a de
f unes g e nri cas do que d e coma ndos.

Est e t i po de r el a t ri o car act eri z a do por u m f or ma t o d e i mpr esso t i po Post Scri pt , e per mi t e
a ger a o de u m ar qui vo e m f or ma t o t e xt o ( . t x t ) , com u ma e xt e nso prpri a da a pli cao ERP
( . # # R) .

A est r ut ur a de u m r el a t ri o n o gr fi co base a da no uso da f uno Set Pri nt ( ) , compl e me nt a da
pel o uso de out r as f unes acessri as, as qu ai s est o d et al h a das no Gui a de Ref er nci a R pi da
que acompa nh a est e ma t eri al .

24.1.1. Estrutura de relatrios baseados na SetPrint( )

Nest e t pi co ser de monst r a da a const r u o d e r el a t ri o n o gr fi co base a do no uso da f un o
Set Pri nt ( ) o qual a t e nde os f or ma t os de base de da dos I SAM e Topconnect , por m n o
cont e mpl a ndo a t ecnol ogi a Prot he us E mb edded SQL.

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Decl ar ao e at ri buio de v ari v eis ;
3 At uali z ao do ar qui vo de pergunt as at r a v s da f uno especfica Cri a SX1( ) ;
4 Defi nio as pergunt as at r a v s da f uno Per gunt e ( ) ;
5 Defi nio das orde ns dispon v eis par a i mpr esso do r el at rio ;
6 Cha ma da da f uno Se tPri nt ;
7 At uali z ao das confi gur aes de i mpr esso com a f uno Se t Def a ul t ( ) ;
8 Ex ecuo da r oti na de i mpr esso at r a v s da f uno Rpt St at us( )
9 Fim da funo principal.

10 Funo de processamento e impresso do relatrio
11 Decl ar ao e at ri buio de v ari v eis ;
12 Defi nio dos fil t ros de i mpr esso, a v ali a ndo o ba ndo de dados e m uso pel a a plicao ;
13 At uali z ao da r gua de processa me nt o com a qua nti da de de r e gist ros que ser processada ;
14 Est r ut ur a pri nci pal de r epe tio par a i mpr esso dos da dos do r el at rio ;
15 Cont rol e da i mpr esso do ca beal ho utili z a ndo a f uno Ca bec( ) ;
16 I mpr esso dos t ot ais do r el at ri o ;
17 I mpr esso do roda p da l ti ma p gi na do r el at rio utili z a ndo a f uno Roda ( ) ;
18 Li mpe z a dos arqui vos e ndices t e mpor ri os cri a dos par a o processa me nt o( ) ;
19 Tr at a me nt o da visuali z ao do r el at rio (i mpr esso e m disco) at r a v s da f uno Our Spool ( )
20 Tr at a me nt os adici onais ao r el at ri o, de acor do co m necessida des especficas ;
21 Li ber ao do buff er de i mpr esso, se j a par a i mpr essor a, se j a par a li mpe z a do cont e do
visuali z a do e m t el a, utili z a ndo a f uno MS_FLUSH( )

22 Fim da funo de processamento e impresso do relatrio

23 Funo de atualizao do arquivo de perguntas
24 Decl ar ao e at ri buio de v ari v eis ;
25 Opo 01 : Adio i ndi vi dual de cada pergunt a no SX1 utili z a ndo a f uno PUTSX1( )

Cri ao de u m ar r a y i ndi vi dual no f or mat o utili z a do pel a PUTSX1( ) cont e ndo ape nas
as i nf or maes da pergunt a que ser adici ona da no SX1.
25 Opo 02 : Adio de u m gr upo de per gunt as no SX1 utili z a ndo a f uno AJUSTASX1( )

Cri ao de u m arr a y no f or mat o utili z a do pel a AJUSTASX1( ) cont e ndo t odas as
pergunt as que ser o at uali z a das.

26 Fim da funo de atualizao do arquivo de perguntas



- 239 -

ADVPL Completo


Funo Principal


//+-----------------------------------------------------------------+
//| Rotina | Inform | Autor | Robson Luiz (rleg) | Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina para gerar relatrio utilizando as funes |
//| | SetPrint() e SetDefault(). |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+-----------------------------------------------------------------+

User Function INFORM()
//+-------------------------
//| Declaraes de variveis
//+-------------------------

Local cDesc1 := "Este relatrio ir imprimir informaes do contas a pagar
conforme"
Local cDesc2 := "parmetros informado. Ser gerado um arquivo no diretrio "
Local cDesc3 := "Spool - INFORM_????.XLS, onde ???? e o nome do usurio."

Private cString := "SE2"
Private Tamanho := "M"
Private aReturn := { "Zebrado",2,"Administrao",2,2,1,"",1 }
Private wnrel := "INFORM"
Private NomeProg := "INFORM"
Private nLastKey := 0
Private Limite := 132
Private Titulo := "Ttulo a Pagar - Ordem de "
Private cPerg := "INFORM"
Private nTipo := 0
Private cbCont := 0
Private cbTxt := "registro(s) lido(s)"
Private Li := 80
Private m_pag := 1
Private aOrd := {}
Private Cabec1 := "PREFIXO TITULO PARCELA TIP EMISSAO VENCTO VENCTO"
Private Cabec1 += "REAL VLR. ORIGINAL PAGO SALDO "
Private Cabec2 := ""
/*
+----------------------
| Parmetros do aReturn
+----------------------
aReturn - Preenchido pelo SetPrint()
aReturn[1] - Reservado para formulrio
aReturn[2] - Reservado para numero de vias
aReturn[3] - Destinatrio
aReturn[4] - Formato 1=Paisagem 2=Retrato
aReturn[5] - Mdia 1-Disco 2=Impressora
aReturn[6] Porta ou arquivo 1-Lpt1... 4-Com1...
aReturn[7] - Expresso do filtro
aReturn[8] - Ordem a ser selecionada
aReturn[9] [10] [n] - Campos a processar se houver
*/




Continuao:

- 240 -

ADVPL Completo



AADD( aOrd, "Fornecedor" )
AADD( aOrd, "Titulo" )
AADD( aOrd, "Emisso" )
AADD( aOrd, "Vencimento" )
AADD( aOrd, "Vencto. Real" )

//Parmetros de perguntas para o relatrio
//+-------------------------------------------------------------+
//| mv_par01 - Fornecedor de ? 999999 |
//| mv_par02 - Fornecedor ate ? 999999 |
//| mv_par03 - Tipo de ? XXX |
//| mv_par04 - Tipo ate ? XXX |
//| mv_par05 - Vencimento de ? 99/99/99 |
//| mv_par06 - Vencimento ate ? 99/99/99 |
//| mv_par07 - Aglut.Fornecedor ? Sim/No |
//+-------------------------------------------------------------+
CriaSx1()

//+-------------------------------------------------
//| Disponibiliza para usurio digitar os parmetros
//+-------------------------------------------------
Pergunte(cPerg,.F.)
//cPerg -> Nome do grupo de perguntas, .T. mostra a tela,;
// .F. somente carrega as variveis

//+---------------------------------------------------
//| Solicita ao usurio a parametrizao do relatrio.
//+---------------------------------------------------
wnrel :=
SetPrint(cString,wnrel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F., ;
Tamanho,.F.,.F.)
//SetPrint(cAlias,cNome,cPerg,cDesc,cCnt1,cCnt2,cCnt3,lDic,aOrd,lCompres,;
//cSize,aFilter,lFiltro,lCrystal,cNameDrv,lNoAsk,lServer,cPortToPrint)

//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif

//+------------------------------------------------------------------
//| Estabelece os padres para impresso, conforme escolha do usurio
//+------------------------------------------------------------------
SetDefault(aReturn,cString)

//+-------------------------------------
//| Verificar se ser reduzido ou normal
//+-------------------------------------
nTipo := IIF(aReturn[4] == 1, 15, 18)

//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif

Continuao:

- 241 -

ADVPL Completo



//+-----------------------------------
//| Chama funo que processa os dados
//+-----------------------------------
RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo dados,;
aguarde...", .T. )

Return

Funo de processamento e impresso


//+-----------------------------------------------------------------+
//| Rotina | ImpRel | Autor | Robson Luiz (rleg) | Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina de processamento e impresso. |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+-----------------------------------------------------------------+

Static Function ImpRel(lEnd)

Local nIndice := 0
Local cArq := ""
Local cIndice := ""
Local cFiltro := ""
Local aCol := {}
Local cFornec := ""
Local nValor := 0
Local nPago := 0
Local nSaldo := 0
Local nT_Valor := 0
Local nT_Pago := 0
Local nT_Saldo := 0
Local cArqExcel := ""
Local cAliasImp
Local oExcelApp

Titulo += aOrd[aReturn[8]]

#IFNDEF TOP
cAliasImp := "SE2"

cFiltro := "E2_FILIAL == '"+xFilial("SE2")+"' "
cFiltro += ".And. E2_FORNECE >= '"+mv_par01+"' "
cFiltro += ".And. E2_FORNECE <= '"+mv_par02+"' "
cFiltro += ".And. E2_TIPO >= '"+mv_par03+"' "
cFiltro += ".And. E2_TIPO <= '"+mv_par04+"' "
cFiltro += ".And. Dtos(E2_VENCTO) >= '"+Dtos(mv_par05)+"' "
cFiltro += ".And. Dtos(E2_VENCTO) <= '"+Dtos(mv_par06)+"' "

If aReturn[8] == 1 //Fornecedor
cIndice := "E2_FORNECE+E2_LOJA+E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cIndice := "E2_NUM+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 3 //Emissao

Continuao:


- 242 -

ADVPL Completo


cIndice := "Dtos(E2_EMISSAO)+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cIndice := "Dtos(E2_VENCTO)+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 5 //Vencimento Real
cIndice := "Dtos(E2_VENCREA)+E2_FORNECE+E2_LOJA"
Endif

cArq := CriaTrab(NIL,.F.)
dbSelectArea(cAliasImp)
IndRegua(cAliasImp,cArq,cIndice,,cFiltro)
nIndice := RetIndex()
nIndice := nIndice + 1
dbSetIndex(cArq+OrdBagExt())
dbSetOrder(nIndice)
#ELSE
cAliasImp := GetNextAlias()

cQuery := "SELECT "
cQuery += "E2_PREFIXO, E2_NUM, E2_PARCELA, E2_TIPO, E2_FORNECE, E2_LOJA,
E2_NOMFOR, "
cQuery += "E2_EMISSAO, E2_VENCTO, E2_VENCREA, E2_VALOR, E2_SALDO "
cQuery += "FROM "+RetSqlName("SE2")+" "
cQuery += "WHERE E2_FILIAL = '"+xFilial("SE2")+"' "
cQuery += "AND E2_FORNECE >= '"+mv_par01+"' "
cQuery += "AND E2_FORNECE <= '"+mv_par02+"' "
cQuery += "AND E2_TIPO >= '"+mv_par03+"' "
cQuery += "AND E2_TIPO <= '"+mv_par04+"' "
cQuery += "AND E2_VENCTO >= '"+Dtos(mv_par05)+"' "
cQuery += "AND E2_VENCTO <= '"+Dtos(mv_par06)+"' "
cQuery += "AND D_E_L_E_T_ <> '*' "
cQuery += "ORDER BY "

If aReturn[8] == 1 //Fornecedor
cQuery += "E2_FORNECE,E2_LOJA,E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cQuery += "E2_NUM,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 3 //Emissao
cQuery += "E2_EMISSAO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cQuery += "E2_VENCTO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 5 //Vencimento Real
cQuery += "E2_VENCREA,E2_FORNECE,E2_LOJA"
Endif

dbUseArea( .T., "TOPCONN", TcGenQry(,,cQuery), cAliasImp, .T., .F. )
dbSelectArea(cAliasImp)

/* Instruo SQL Embedded
----------------------
If aReturn[8] == 1 //Fornecedor
cOrder := "E2_FORNECE,E2_LOJA,E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cOrder := "E2_NUM,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 3 //Emissao
cOrder := "E2_EMISSAO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cOrder := "E2_VENCTO,E2_FORNECE,E2_LOJA"


Continuao:

- 243 -

ADVPL Completo



Elseif aReturn[8] == 5 //Vencimento Real
cOrder := "E2_VENCREA,E2_FORNECE,E2_LOJA"
Endif

BeginSQL Alias cAliasImp
Column E2_EMISSAO As Date
Column E2_VENCTO As Date
Column E2_VENCREA As Date
Column E2_VALOR As Numeric(12)
Column E2_SALDO As Numeric(12)
%NoParser%

SELECT E2_PREFIXO, E2_NUM, E2_PARCELA, E2_TIPO, E2_FORNECE,
E2_LOJA, E2_NOMFOR, E2_EMISSAO, E2_VENCTO, E2_VENCREA, E2_VALOR,
E2_SALDO
FROM %Table:SE2
WHERE
E2_FILIAL = %xFilial% AND
E2_FORNECE BETWEEN %Exp:mv_par01% AND %Exp:mv_par02% AND
E2_TIPO BETWEEN%Exp:mv_par03% AND %Exp:mv_par04% AND
E2_VENCTO BETWEEN %Exp:mv_par05% AND %Exp:mv_par06% AND
%NotDel%
ORDER BY %Order:cOrder%
EndSQL
*/
#ENDIF

dbGoTop()
SetRegua(0)

//+--------------------
//| Coluna de impresso
//+--------------------
AADD( aCol, 004 ) //Prefixo
AADD( aCol, 012 ) //Titulo
AADD( aCol, 024 ) //Parcela
AADD( aCol, 031 ) //Tipo
AADD( aCol, 036 ) //Emissao
AADD( aCol, 046 ) //Vencimento
AADD( aCol, 058 ) //Vencimento Real
AADD( aCol, 070 ) //Valor Original
AADD( aCol, 090 ) //Pago
AADD( aCol, 110 ) //Saldo

cFornec := (cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA

While !Eof() .And. !lEnd

If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif







Continuao:

- 244 -

ADVPL Completo



@ Li, aCol[1] PSay "Cod/Loj/Nome: "+(cAliasImp)->E2_FORNECE+;
"-"+(cAliasImp)->E2_LOJA+" "+(cAliasImp)->E2_NOMFOR
Li ++

While !Eof() .And. !lEnd .And.;
(cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA == cFornec

IncRegua()

If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif

If mv_par07 == 2
@ Li, aCol[1] PSay (cAliasImp)->E2_PREFIXO
@ Li, aCol[2] PSay (cAliasImp)->E2_NUM
@ Li, aCol[3] PSay (cAliasImp)->E2_PARCELA
@ Li, aCol[4] PSay (cAliasImp)->E2_TIPO
@ Li, aCol[5] PSay (cAliasImp)->E2_EMISSAO
@ Li, aCol[6] PSay (cAliasImp)->E2_VENCTO
@ Li, aCol[7] PSay (cAliasImp)->E2_VENCREA
@ Li, aCol[8] PSay (cAliasImp)->E2_VALOR ;
PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay (cAliasImp)->E2_VALOR -;
(cAliasImp)->E2_SALDO ;
PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay (cAliasImp)->E2_SALDO ;
PICTURE "@E 99,999,999,999.99"
Li ++
Endif

nValor += (cAliasImp)->E2_VALOR
nPago += ((cAliasImp)->E2_VALOR-(cAliasImp)->E2_SALDO)
nSaldo += (cAliasImp)->E2_SALDO

nT_Valor += (cAliasImp)->E2_VALOR
nT_Pago += ((cAliasImp)->E2_VALOR-(cAliasImp)->E2_SALDO)
nT_Saldo += (cAliasImp)->E2_SALDO

dbSkip()
End

@ Li, 000 PSay Replicate("-",Limite)
Li ++
@ Li, aCol[1] PSay "TOTAL....."
@ Li, aCol[8] PSay nValor PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay nPago PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay nSaldo PICTURE "@E 99,999,999,999.99"
Li +=2

cFornec := (cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA
nValor := 0
nPago := 0
nSaldo := 0

End


Continuao:

- 245 -

ADVPL Completo



If lEnd
@ Li, aCol[1] PSay cCancel
Return
Endif

@ Li, 000 PSay Replicate("=",Limite)
Li ++
@ Li, aCol[1] PSay "TOTAL GERAL....."
@ Li, aCol[8] PSay nT_Valor PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay nT_Pago PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay nT_Saldo PICTURE "@E 99,999,999,999.99"

If Li <> 80
Roda(cbCont,cbTxt,Tamanho)
Endif

//+----------------------------------------------------------------------
//| Gera arquivo do tipo .DBF com extenso .XLS p/ usurio abrir no Excel
//+----------------------------------------------------------------------
cArqExcel := __RELDIR+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS"
Copy To &cArqExcel

#IFNDEF TOP
dbSelectArea(cAliasImp)
RetIndex(cAliasImp)
Set Filter To
#ELSE
dbSelectArea(cAliasImp)
dbCloseArea()
#ENDIF
dbSetOrder(1)
dbGoTop()

If aReturn[5] == 1
Set Printer TO
dbCommitAll()
OurSpool(wnrel)
EndIf

//+------------------------
//| Abrir planilha MS-Excel
//+------------------------
If mv_par08 == 1
__CopyFile(cArqExcel,"c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS")
If ! ApOleClient("MsExcel")
MsgAlert("MsExcel no instalado")
Return
Endif
oExcelApp := MsExcel():New()
oExcelApp:WorkBooks:Open( "c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS" )
oExcelApp:SetVisible(.T.)
Endif

Ms_Flush()

Return

- 246 -

ADVPL Completo



Funo para gerar o grupo de parmetros no SX1


//+-----------------------------------------------------------------+
//| Rotina | CriaSX1 | Autor | Robson Luiz (rleg)| Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina para criar o grupo de parmetros. |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitao. |
//+-----------------------------------------------------------------+
Static Function CriaSx1()
Local aP := {}
Local i := 0
Local cSeq
Local cMvCh
Local cMvPar
Local aHelp := {}

/******
Parmetros da funo padro
---------------------------
PutSX1(cGrupo,;cOrdem,;
cPergunt,cPerSpa,cPerEng,;
cVar,;
cTipo,;
nTamanho,;
nDecimal,;
nPresel,;
cGSC,;
cValid,;
cF3,;
cGrpSxg,;
cPyme,;
cVar01,;
cDef01,cDefSpa1,cDefEng1,;
cCnt01,;
cDef02,cDefSpa2,cDefEng2,;
cDef03,cDefSpa3,cDefEng3,;
cDef04,cDefSpa4,cDefEng4,;
cDef05,cDefSpa5,cDefEng5,;
aHelpPor,aHelpEng,aHelpSpa,;
cHelp)

Caracterstica do vetor p/ utilizao da funo SX1
---------------------------------------------------
[n,1] --> texto da pergunta
[n,2] --> tipo do dado
[n,3] --> tamanho
[n,4] --> decimal
[n,5] --> objeto G=get ou C=choice
[n,6] --> validao
[n,7] --> F3
[n,8] --> definio 1
[n,9] --> definio 2
[n,10] -> definio 3
[n,11] -> definio 4
[n,12] -> definio 5
***/


- 247 -

ADVPL Completo


Continuao:

AADD(aP,{"Fornecedor de","C",6,0,"G","","SA2","" ,"" ,"","",""})
AADD(aP,{"Fornecedor ate","C",6,0,"G","(mv_par02>=mv_par01)","SA2",;
"" ,"" ,"","",""})
AADD(aP,{"Tipo de","C",3,0,"G","","05" ,"" ,"" ,"","",""})
AADD(aP,{"Tipo ate","C",3,0,"G","(mv_par04>=mv_par03)","05" ,"" ,;
"" ,"","",""})
AADD(aP,{"Vencimento de","D",8,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Vencimento ate","D",8,0,"G","(mv_par06>=mv_par05)","" ,;
"" ,"" ,"","",""})
AADD(aP,{"Aglutinar pagto.de fornec.","N",1,0,"C","","",;
"Sim","No","","",""})
AADD(aP,{"Abrir planilha MS-Excel" ,"N",1,0,"C","","",;
"Sim","No","","",""})

AADD(aHelp,{"Informe o cdigo do fornecedor.","inicial."})
AADD(aHelp,{"Informe o cdigo do fornecedor.","final."})
AADD(aHelp,{"Tipo de ttulo inicial."})
AADD(aHelp,{"Tipo de ttulo final."})
AADD(aHelp,{"Digite a data do vencimento inicial."})
AADD(aHelp,{"Digite a data do vencimento final."})
AADD(aHelp,{"Aglutinar os ttulos do mesmo forne-",;
"cedor totalizando seus valores."})
AADD(aHelp,{"Ser gerada uma planilha para ",;
"MS-Excel, abrir esta planilha?"})

For i:=1 To Len(aP)
cSeq := StrZero(i,2,0)
cMvPar := "mv_par"+cSeq
cMvCh := "mv_ch"+IIF(i<=9,Chr(i+48),Chr(i+87))

PutSx1(cPerg,;
cSeq,;
aP[i,1],aP[i,1],aP[i,1],;
cMvCh,;
aP[i,2],;
aP[i,3],;
aP[i,4],;
0,;
aP[i,5],;
aP[i,6],;
aP[i,7],;
"",;
"",;
cMvPar,;
aP[i,8],aP[i,8],aP[i,8],;
"",;
aP[i,9],aP[i,9],aP[i,9],;
aP[i,10],aP[i,10],aP[i,10],;
aP[i,11],aP[i,11],aP[i,11],;
aP[i,12],aP[i,12],aP[i,12],;
aHelp[i],;
{},;
{},;
"")
Next i

Return


- 248 -

ADVPL Completo


25. Manipulao de arquivos I


25.1. Gerao e leitura de arquivos em formato texto

Ar qui vos do t i po t e xt o ( t a mb m conheci dos co mo pa dr o TXT) so ar qui vos com r egi st ros de
t a ma nho v ari v el . A i ndi cao do fi n al de cada r egi st ro r epr ese nt a da por doi s byt es, 0 D
0A e m he x a d eci mal ou 13 10 e m d eci mal ou, ai nda , CR LF par a pa dr o ASCI I .

Apesa r do t a ma nho dos r egi st ros ser v ari v el , a mai ori a dos si st e mas ger a est e t i po de ar qui vo
com r egi st ros de t a ma nho fi xo, de acor do com u m l a yout espec fi co que i ndi ca qu ai s
so os da dos gr a v a dos.

Par a i l ust r ar est es procedi me nt os, ser o ger a dos a r qui vos t e xt os, com du as f a m li as de
f unes :

1 ) Famlia: n est a f a mli a ser o ut i li z a das as f unes : F Cr e a t e( ) , F Wri t e( ) , F Cl ose( ) ,
FSe e k( ) , F Op e n( ) e FRe a d( ) .


2 ) Famlia: nest a f a mli a ser o ut ili z a das as f unes : F T_FUse( ) , FT_F GoTop( ) ,
FT_FLast Rec( ) , FT_F Eof ( ) , FT_FRe a dLn( ) , F T_F Ski p( ) , FT_F Got o( ) , F T_FRecno( ) .




A di f er e na e nt r e as duas f a m li as, est n a l ei t ur a do ar qui vo t e xt o.
Qu a ndo se t r a t a r de ar qui vo t e xt o com t a ma nho fi xo das li nh as, poder o
ser ut ili z a das as du as f a mli as par a l ei t ur a do ar qui vo, por m, qua ndo se
t r a t ar d e a r qui vo t e xt o com t a ma nho v ari v el das li nhas, some nt e
poder ser ut ili z a a segunda f a mli a , r epr ese nt a da pel as f unes :
FT_FUse( ) , FT_F GoTo( ) , FT_FRecno( ) , FT_F GoTop( ) , FT_FLast Rec( ) ,
FT_F Eof ( ) , FT_FRe a dLn( ) e FT_FSki p( ) .














- 249 -

ADVPL Completo



1. Famlia de funes de gravao e leitura de arquivos texto

Exemplo: Gerao de arquivo TXT, utilizando a primeira famlia de funes


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | GeraTXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Gera o arquivo TXT, a partir do Cadastro de Clientes |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GeraTXT()

//+--------------------------------+
//| Declarao de Variveis |
//+--------------------------------+
Local oGeraTxt
Private cPerg := "EXPSA1"
Private cAlias := "SA1"

//CriaSx1(cPerg)
//Pergunte(cPerg,.F.)
dbSelectArea(cAlias)
dbSetOrder(1)

//+-----------------------------------+
//| Montagem da tela de processamento.|
//+-----------------------------------+

DEFINE MSDIALOG oGeraTxt TITLE OemToAnsi("Gerao de Arquivo Texto") ;
FROM 000,000 TO 200,400 PIXEL

@ 005,005 TO 095,195 OF oGeraTxt PIXEL
@ 010,020 Say " Este programa ira gerar um arquivo texto, conforme os parame- ";
OF oGeraTxt PIXEL
@ 018,020 Say " tros definidos pelo usurio, com os registros do arquivo de ";
OF oGeraTxt PIXEL
@ 026,020 Say " SA1 " OF oGeraTxt PIXEL

DEFINE SBUTTON FROM 070, 030 TYPE 1 ;
ACTION (OkGeraTxt(),oGeraTxt:End()) ENABLE OF oGeraTxt

DEFINE SBUTTON FROM 070, 070 TYPE 2 ;
ACTION (oGeraTxt:End()) ENABLE OF oGeraTxt

DEFINE SBUTTON FROM 070, 110 TYPE 5 ;
ACTION (Pergunte(cPerg,.T.)) ENABLE OF oGeraTxt

ACTIVATE DIALOG oGeraTxt CENTERED

Return Nil


- 250 -

ADVPL Completo


Exemplo (continuao):

/*/
+-----------------------------------------------------------------------------
| Funo | OKGERATXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo chamada pelo boto OK na tela inicial de processamento. |
| | Executa a gerao do arquivo texto. |
+-----------------------------------------------------------------------------
/*/

Static Function OkGeraTxt

//+-----------------------------------------------------------------------------
//| Cria o arquivo texto
//+-----------------------------------------------------------------------------
Private cArqTxt := "\SYSTEM\EXPSA1.TXT"
Private nHdl := fCreate(cArqTxt)

If nHdl == -1
MsgAlert("O arquivo de nome "+cArqTxt+" no pode ser executado! Verifique os
parmetros.","Ateno!")
Return
Endif


// Inicializa a rgua de processamento
Processa({|| RunCont() },"Processando...")

Return Nil

/*/
+-----------------------------------------------------------------------------
| Funo | RUNCONT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo auxiliar chamada pela PROCESSA. A funo PROCESSA |
| | monta a janela com a rgua de processamento. |
+-----------------------------------------------------------------------------
/*/

Static Function RunCont

Local cLin

dbSelectArea(cAlias)
dbGoTop()
ProcRegua(RecCount()) // Numero de registros a processar

While (cAlias)->(!EOF())
//Incrementa a rgua
IncProc()

cLin := (cAlias)->A1_FILIAL
cLin += (cAlias)->A1_COD
cLin += (cAlias)->A1_LOJA
cLin += (cAlias)->A1_NREDUZ
cLin += STRZERO((cAlias)->A1_MCOMPRA*100,16) // 14,2
cLin += DTOS((cAlias)->A1_ULTCOM)//AAAAMMDD
cLin += CRLF


- 251 -

ADVPL Completo



Exemplo (continuao):

//+-------------------------------------------------------------------+
//| Gravao no arquivo texto. Testa por erros durante a gravao da |
//| linha montada. |
//+-------------------------------------------------------------------+

If fWrite(nHdl,cLin,Len(cLin)) != Len(cLin)
If !MsgAlert("Ocorreu um erro na gravao do arquivo."+;
"Continua?","Ateno!")
Exit
Endif
Endif

(cAlias)->(dbSkip())
EndDo

// O arquivo texto deve ser fechado, bem como o dialogo criado na funo
anterior
fClose(nHdl)

Return Nil


Not e que par a a g er a o do a r qui vo TXT f or a m ut ili z a das, basi ca me nt e, as f unes
F Cr e a t e, F Wri t e e F Cl ose que, r espect i v a me nt e, ger a o a r qui vo, a di ci on a da dos e f ech a
o ar qui vo. No e x e mpl o, o f or ma t o est a bel eci do pel a conca t e n a o dos da dos n a
v ari v el cLin a qu al utili z a da na gr a v a o dos da dos. Par a a l ei t ur a d e da dos TXT ser o
utili z a da as f unes F Op e n e FRe a d.

Exemplo: Leitura de arquivo TXT, utilizando a primeira famlia de funes


#Include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Programa | LeTXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------
| Descrio | Leitura de arquivo TXT |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
User Function LeTXT()

//+-------------------------------------------------------------------+
//| Declarao de Variveis |
//+-------------------------------------------------------------------+

Local cPerg := "IMPSA1"
Local oLeTxt

Private cAlias := "SA1"

//CriaSx1(cPerg)
//Pergunte(cPerg,.F.)


- 252 -

ADVPL Completo



Exemplo (continuao):

dbSelectArea(cAlias)
dbSetOrder(1)

//+-------------------------------------------------------------------+
// Montagem da tela de processamento |
//+-------------------------------------------------------------------+

DEFINE MSDIALOG oLeTxt TITLE OemToAnsi("Leitura de Arquivo Texto");
FROM 000,000 TO 200,400 PIXEL
@ 005,005 TO 095,195 OF oLeTxt PIXEL
@ 10,020 Say " Este programa ira ler o contedo de um arquivo texto, conforme";
OF oLeTxt PIXEL
@ 18,020 Say " os parmetros definidos pelo usurio, com os registros do
arquivo";
OF oLeTxt PIXEL
@ 26,020 Say " SA1" OF oLeTxt PIXEL

DEFINE SBUTTON FROM 070, 030 TYPE 1 ;
ACTION (OkLeTxt(),oLeTxt:End()) ENABLE OF oLeTxt

DEFINE SBUTTON FROM 070, 070 TYPE 2 ;
ACTION (oLeTxt:End()) ENABLE OF oLeTxt

DEFINE SBUTTON FROM 070, 110 TYPE 5 ;
ACTION (Pergunte(cPerg,.T.)) ENABLE OF oLeTxt
ACTIVATE DIALOG oLeTxt CENTERED

Return Nil

/*/
+-----------------------------------------------------------------------------
| Funo | OKLETXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo chamada pelo boto OK na tela inicial de processamento |
| | Executa a leitura do arquivo texto |
+-----------------------------------------------------------------------------
/*/

Static Function OkLeTxt()

//+-------------------------------------------------------------------+
//| Abertura do arquivo texto |
//+-------------------------------------------------------------------+

Private cArqTxt := "\SYSTEM\EXPSA1.TXT"
Private nHdl := fOpen(cArqTxt,68)

If nHdl == -1
MsgAlert("O arquivo de nome "+cArqTxt+" no pode ser aberto! Verifique os
parmetros.","Ateno!")
Return
Endif

// Inicializa a rgua de processamento
Processa({|| RunCont() },"Processando...")
Return Nil


- 253 -

ADVPL Completo


Exemplo (continuao):

/*/
+-----------------------------------------------------------------------------
| Funo | RUNCONT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo auxiliar chamada pela PROCESSA. A funo PROCESSA |
| | monta a janela com a rgua de processamento. |
+-----------------------------------------------------------------------------
/*/

Static Function RunCont

Local nTamFile := 0
Local nTamLin := 56
Local cBuffer := ""
Local nBtLidos := 0
Local cFilSA1 := ""
Local cCodSA1 := ""
Local cLojaSA1 := ""

//1234567890123456789012345678901234567890123456789012345678901234567890
//00000000010000000002000000000300000000040000000005000000000600000000070
//FFCCCCCCLLNNNNNNNNNNNNNNNNNNNNVVVVVVVVVVVVVVVVDDDDDDDD
//A1_FILIAL - 01, 02 - TAM: 02
//A1_COD - 03, 08 - TAM: 06
//A1_LOJA - 09, 10 - TAM: 02
//A1_NREDUZ - 11, 30 - TAM: 20
//A1_MCOMPRA - 31, 46 - TAM: 14,2
//A1_ULTCOM - 47, 54 - TAM: 08

nTamFile := fSeek(nHdl,0,2)
fSeek(nHdl,0,0)
cBuffer := Space(nTamLin) // Varivel para criao da linha do registro para
leitura

ProcRegua(nTamFile) // Numero de registros a processar
While nBtLidos < nTamFile

//Incrementa a rgua
IncProc()

// Leitura da primeira linha do arquivo texto
nBtLidos += fRead(nHdl,@cBuffer,nTamLin)

cFilSA1 := Substr(cBuffer,01,02) //- 01, 02 - TAM: 02
cCodSA1 := Substr(cBuffer,03,06) //- 03, 08 - TAM: 06
cLojaSA1 := Substr(cBuffer,09,02) //- 09, 10 - TAM: 02

While .T.
IF dbSeek(cFilSA1+cCodSA1+cLojaSA1)
cCodSA1 := SOMA1(cCodSA1)
Loop
Else
Exit
Endif
Enddo


- 254 -

ADVPL Completo


Exemplo (continuao):

dbSelectArea(cAlias)
RecLock(cAlias,.T.)
(cAlias)->A1_FILIAL := cFilSA1 //- 01, 02 - TAM: 02
(cAlias)->A1_COD := cCodSA1 //- 03, 08 - TAM: 06
(cAlias)->A1_LOJA := cLojaSA1 //- 09, 10 - TAM: 02
(cAlias)->A1_NREDUZ := Substr(cBuffer,11,20)
//- 11, 30 - TAM: 20
(cAlias)->A1_MCOMPRA := Val(Substr(cBuffer,31,16))/100
//- 31, 46 - TAM: 14,2
(cAlias)->A1_ULTCOM := STOD(Substr(cBuffer,47,08))
//- 47, 54 - TAM: 08
MSUnLock()

EndDo

// O arquivo texto deve ser fechado, bem como o dialogo criado na funo
anterior.
fClose(nHdl)

Return Nil


2. Famlia de funes de gravao e leitura de arquivos texto


Exemplo: Leitura de arquivo TXT, utilizando a segunda famlia de funes


#Include "Protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | LeArqTXT | Autor | Robson Luiz | Data | |
+-----------------------------------------------------------------------------
| Descrio | Leitura de arquivo TXT |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
User Function LeArqTxt()

Private nOpc := 0
Private cCadastro := "Ler arquivo texto"
Private aSay := {}
Private aButton := {}

AADD( aSay, "O objetivo desta rotina e efetuar a leitura em um arquivo texto" )

AADD( aButton, { 1,.T.,{|| nOpc := 1,FechaBatch()}})
AADD( aButton, { 2,.T.,{|| FechaBatch() }} )

FormBatch( cCadastro, aSay, aButton )

If nOpc == 1
Processa( {|| Import() }, "Processando..." )
Endif
Return Nil

- 255 -

ADVPL Completo


Exemplo (continuao):

//+-------------------------------------------
//| Funo - Import()
//+-------------------------------------------
Static Function Import()

Local cBuffer := ""
Local cFileOpen := ""
Local cTitulo1 := "Selecione o arquivo"
Local cExtens := "Arquivo TXT | *.txt"

/***
* _________________________________________________________
* cGetFile(<ExpC1>,<ExpC2>,<ExpN1>,<ExpC3>,<ExpL1>,<ExpN2>)
*
* <ExpC1> - Expresso de filtro
* <ExpC2> - Titulo da janela
* <ExpN1> - Numero de mascara default 1 para *.Exe
* <ExpC3> - Diretrio inicial se necessrio
* <ExpL1> - .F. boto salvar - .T. boto abrir
* <ExpN2> - Mascara de bits para escolher as opes de visualizao do objeto
* (prconst.ch)
*/
cFileOpen := cGetFile(cExtens,cTitulo1,,cMainPath,.T.)

If !File(cFileOpen)
MsgAlert("Arquivo texto: "+cFileOpen+" no localizado",cCadastro)
Return
Endif

FT_FUSE(cFileOpen) //ABRIR
FT_FGOTOP() //PONTO NO TOPO
ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER

While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO
IncProc()

// Capturar dados
cBuffer := FT_FREADLN() //LENDO LINHA

cMsg := "Filial: " +SubStr(cBuffer,01,02) + Chr(13)+Chr(10)
cMsg += "Cdigo: " +SubStr(cBuffer,03,06) + Chr(13)+Chr(10)
cMsg += "Loja: " +SubStr(cBuffer,09,02) + Chr(13)+Chr(10)
cMsg += "Nome fantasia: " +SubStr(cBuffer,11,15) + Chr(13)+Chr(10)
cMsg += "Valor: " +SubStr(cBuffer,26,14) + Chr(13)+Chr(10)
cMsg += "Data: " +SubStr(cBuffer,40,08) + Chr(13)+Chr(10)

MsgInfo(cMsg)

FT_FSKIP() //prximo registro no arquivo txt
EndDo

FT_FUSE() //fecha o arquivo txt
MsgInfo("Processo finalizada")
Return Nil


- 256 -

ADVPL Completo



26. Oficina de programao I

26.1. Interfaces com sintaxe clssica

A si nt a x e conv e nci onal par a defi ni o de compone nt es vi su ai s da li ngu a ge m ADVPL dep e nde
di r et a me nt e no i ncl ude esp eci fi ca do no ca beal ho do f ont e. Os doi s i ncl udes di spon v ei s par a o
a mbi e nt e ADVPL Pr ot he us s o :

E RWMAKE. CH: p er mi t e a utili z ao da si nt a x e CLI PPER n a defi ni o dos compon e nt es
vi su ai s.

E PROTHEUS. CH: per mi t e a utili z ao da si nt a x e ADVPL conv e nci on al , a qu al u m
a pri mor a me nt o da si nt a x e CLI PPER, com a i ncl uso de novos a t ri but os par a os
compone nt es vi su ai s di sponi bili z a dos no ERP Pr ot he us.

Par a il ust r ar a di f er e na n a utili z ao dest es doi s i ncl udes, segue a bai xo as di f er e nt es
defi ni es par a o co mpone nt es Di al og e MsDi al og :

Exemplo 01 Include Rwmake.ch

#include rwmake.ch

@ 0,0 TO 400,600 DIALOG oDlg TITLE "Janela em sintaxe Clipper"
ACTIVATE DIALOG oDlg CENTERED


Exemplo 02 Include Protheus.ch

#include protheus.ch

DEFINE MSDIALOG oDlg TITLE "Janela em sintaxe ADVPL "FROM 000,000 TO 400,600
PIXEL
ACTIVATE MSDIALOG oDlg CENTERED



Ambas as si nt a x es produzi r o o mesmo ef ei t o qu a ndo compi l a das e
e x ecut a das no a mbi e nt e Pr ot he us, mas d e v e ser ut ili z ada se mpr e a si nt a x e
ADVPL a t r a v s do uso do i ncl ude PROTHEUS. CH

Os compon e nt es da i nt erf ace vi su al que ser o t r a t a dos nest e t pico, ut ili z a ndo a si nt a x e
cl ssi ca da li ngua ge m ADVPL so :

BUTTON( )
CHECKBOX( )
COMBOBOX( )
FOLDER( )
MSDIALOG( )
MSGET( )

- 257 -

ADVPL Completo


RADIO( )
SAY( )
SBUTTON( )

BUTTON( )

Sintaxe
@ nLinha,nColuna BUTTON cTexto SIZE nLargura,nAltura UNIDADE
OF oObjetoRef ACTION AO
Descrio
Defi ne o compon e nt e vi su al But t on, o qual per mi t e a i ncl uso de bot es d e
oper a o n a t el a da i nt erf ace, os qu ai s ser o vi suali z a dos some nt e com u m
t e xt o si mpl es par a su a i de nt i fi cao.

CHECKBOX( )

Sintaxe
@ nLinha,nColuna CHECKBOX oCheckBox VAR VARIAVEL PROMPT
cTexto WHEN WHEN UNIDADE OF oObjetoRef SIZE nLargura,nAltura
MESSAGE cMensagem
Descrio
Defi ne o compon e nt e vi su al Check Box, o qual per mi t e a ut ili z ao da u ma
marca pa r a ha bi li t ar ou n o u ma op o escol hi da , se ndo est a marca
acompa nh a da de u m t e xt o e x pl i ca ti vo. Di f er e do Ra di oMe nu poi s ca da
el e me nt o do ch eck ni co, mas o Ra di o p er mi t e a utili z ao de u ma li st a
j unt o com u m cont r ol e de sel e o.

COMBOBOX( )

Sintaxe
@ nLinha,nColuna COMBOBOX VARIAVEL ITEMS AITENS SIZE
nLargura,nAltura UNIDADE OF oObjetoRef
Descrio
Defi ne o compone nt e vi su al ComboBox, o qual per mi t e sel eo de u m i t e m
de nt ro de u ma li st a de opes de t e xt os si mpl es no f or ma t o de u m v et or.

FOLDER( )

Sintaxe
@ nLinha,nColuna FOLDER oFolder OF oObjetoRef PROMPT
&cTexto1,,&cTextoX PIXEL SIZE nLargura,nAltura
Descrio
Defi ne o compone nt e vi su al Fol der, o qu al per mi t e a i ncl uso de di v ersos
Di al ogs de nt ro d e u ma mesma i nt erf ace vi sual . Um Fol der pode ser
e nt e ndi do como u m arr a y de Di al ogs, aond e ca da pai nel r eceb e se us
compone nt es e t e m se us a t ri but os defi ni dos i ndepe nd e nt e me nt e dos d e mai s.

MSDIALOG( )

Sintaxe
DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni
TO nLiFim,nColFim OF oObjetoRef UNIDADE
Descrio
Defi ne o compon e nt e MSDI ALOG( ) , o qu al ut ili z a do como base p ar a os
de mai s compon e nt es d a i nt erf ace vi su al , poi s u m compon e nt e MSDI ALOG( )
u ma j a nel a da a pli cao.


- 258 -

ADVPL Completo



MSGET( )

Sintaxe
@ nLinha, nColuna MSGET VARIAVEL SIZE nLargura,nAltura
UNIDADE OF oObjetoRef F3 cF3 VALID VALID WHEN WHEN PICTURE
cPicture
Descrio
Defi ne o compon e nt e vi sual MSGET, o qu al ut ili z a do par a ca pt ur a de
i nf or maes di gi t v ei s na t el a da i nt erf ace .


RADIO( )

Sintaxe
@ nLinha,nColuna RADIO oRadio VAR nRadio 3D SIZE
nLargura,nAltura <ITEMS PROMPT> cItem1,cItem2,...,cItemX OF
oObjetoRef UNIDADE ON CHANGE CHANGE ON CLICK CLICK
Descrio
Defi ne o compone nt e vi su al Ra di o, t a mb m conheci do como Ra di oMe nu, o
qu al sel eo de u ma op o ou de ml ti pl as opes a t r a v s d e u ma marca
par a os i t e ns e xi bi dos de u ma li st a . Di f er e do compon e nt e Check Box , poi s
ca da el e me nt o d e check se mpr e ni co, e o Ra di o pode cont er u m ou mai s
el e me nt os.

SAY( )

Sintaxe
@ nLinha, nColuna SAY cTexto SIZE nLargura,nAltura UNIDADE OF
oObjetoRef
Descrio
Defi ne o compone nt e vi su al SAY, o qu al utili z a do par a e xi bi o de t e xt os
e m u ma t el a de i nt erf ace.

SBUTTON( )

Sintaxe
DEFINE SBUTTON FROM nLinha, nColuna TYPE N ACTION AO
STATUS OF oObjetoRef
Descrio
Defi ne o compone nt e vi su al SBut t on, o qu al per mi t e a i ncl uso de bot es de
oper a o na t el a da i nt erf ace , os qu ai s ser o vi su ali z a dos depe nde ndo da
i nt erf ace do si st e ma ERP utili z a da some nt e co m u m t e xt o si mpl es par a su a
i de nti fi cao, ou com u ma i ma ge m ( Bi t Ma p) pr - defi ni do.


- 259 -

ADVPL Completo



26.2. Rguas de processamento

Os i ndi ca dor es de progr esso ou r gu as de processa me nt o di spon v ei s n a li ngu a ge m ADVPL que
ser o a bor da dos nest e ma t eri al so :

RPTSTATUS( )
PROCESSA( )
MSNEWPROCESS( )
MSAGUARDE( )
MSGRUN( )

26.2.1. RptStatus( )

Rgu a de pr ocessa me nt o si mpl es, co m a p e n as u m i ndi ca dor d e progr esso, ut i li z a da no
processa me nt o d e r el a t ri os do pa dr o Set Pri nt ( ) .

E Sintaxe: RptStatus(bAcao, cMensagem)

E Retorno: Nil

E Parmetros:

bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
Aparncia







- 260 -

ADVPL Completo



Exemplo: Funo RPTStatus( ) e acessrias


/*/
+---------------------------------------------------------------------------
| Funo | GRPTSTATUS | Autor | ROBSON LUIZ | Data | |
+---------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao das funes RPTSTATUS() |
| | SETREGUA() E INCREGUA() |
+---------------------------------------------------------------------------
| Uso | Curso ADVPL |
+---------------------------------------------------------------------------
/*/

User Function GRptStatus()
Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de Funes"
Local cDesc1 := "Este programa exemplifica a utilizao da funo Processa() em
conjunto"
Local cDesc2 := "com as funes de incremento ProcRegua() e IncProc()"

Private cPerg := "RPTSTA"

CriaSX1()
Pergunte(cPerg,.F.)

AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )

AADD( aButton, { 5, .T., {|| Pergunte(cPerg,.T. ) }} )
AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc <> 1
Return Nil
Endif

RptStatus( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )

Return Nil


- 261 -

ADVPL Completo


Exemplo: Funes acessrias da RPTStatus( )


/*/
+-----------------------------------------------------------------------------
| Funo | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de processamento executada atravs da RPTSTATUS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/


Static Function RunProc(lEnd)
Local nCnt := 0

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5")+mv_par01,.T.)

While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
nCnt++
dbSkip()
End

dbSeek(xFilial("SX5")+mv_par01,.T.)

SetRegua(nCnt)
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
IncRegua()
If lEnd
MsgInfo(cCancel,"Fim")
Exit
Endif
dbSkip()
End
Return .T.


SETREGUA( )

A f uno Set Regua ( ) utili z a da par a defi ni r o v al or m xi mo da r gu a de progr esso cri a da
a t r a v s da f uno Rpt St a t us( ) .

E Sintaxe: SetRegua(nMaxProc)

E Parmetros:

nMaxProc Vari v el que i ndi ca o v al or m xi mo de pr ocessa me nt o ( passos) que ser o
i ndi ca dos pel a r gu a .

E Retorno:

Nenhum .



- 262 -

ADVPL Completo


Exemplo:

. . .

dbSel ect Ar e a ( " SA1 " )
dbGoTop( )
Set Regua (Last Rec( ) )
Whil e ! Eof ( )
I ncRegu a ( )
I f Li > 60
. . .


INCREGUA( )

A f uno I ncRegu a ( ) utili z a da par a i ncr e me nt ar v al or n a r gu a de progr ess o cri a da a t r a v s
da f uno Rpt St a t us( )

E Sintaxe: IncRegua(cMensagem)

E Parmetros:

cMensagem Me nsa g e m que ser e xi bi da e a t u ali z a da n a r gua de processa me nt o a ca da
e x ecu o da f un o I ncRegua ( ) , se ndo que a t a x a de a t uali z ao da
i nt erf ace cont r ol a da pel o Bi n ri o.

E Retorno:

Nenhum .

Exemplo:

. . .

dbSel ect Ar e a ( " SA1 " )
dbGoTop( )
Set Regua (Last Rec( ) )
Whil e ! Eof ( )
I ncRegu a ( Av al i a ndo cli e nt e : + SA1- > A1_COD)
I f Li > 60
. . .




- 263 -

ADVPL Completo



26.2.2. Processa( )

Rgu a de pr ocessa me nt o si mpl es, co m a p e n as u m i ndi ca dor d e progr esso, ut i li z a da no
processa me nt o d e rot i n as.

E Sintaxe: Processa(bAcao, cMensagem)

E Retorno: Nil

E Parmetros:

bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
Aparncia




Exemplo: Funo PROCESSA( ) e acessrias


/*/
+-----------------------------------------------------------------------------
| Funo | GPROCES1 | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao das funes PROCESSA() |
| | PROCREGUA() E INCPROC() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GProces1()
Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de Funes"
Local cDesc1 := "Este programa exemplifica a utilizao da funo Processa()"
Local cDesc2 := " em conjunto com as funes de incremento ProcRegua() e"
Local cDesc3 := " IncProc()"



- 264 -

ADVPL Completo



Exemplo (continuao):

Private cPerg := "PROCES"

CriaSX1()
Pergunte(cPerg,.F.)

AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )

AADD( aButton, { 5, .T., {|| Pergunte(cPerg,.T. ) }} )
AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc <> 1
Return Nil
Endif

Processa( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )

Return Nil

/*/
+-----------------------------------------------------------------------------
| Funo | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de processamento executada atravs da PROCRSSA() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd)
Local nCnt := 0

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5")+mv_par01,.T.)

dbEval( {|x| nCnt++ },,{||X5_FILIAL==xFilial("SX5").And.X5_TABELA<=mv_par02})

dbSeek(xFilial("SX5")+mv_par01,.T.)

ProcRegua(nCnt)
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
IncProc("Processando tabela: "+SX5->X5_CHAVE)
If lEnd
MsgInfo(cCancela,"Fim")
Exit
Endif
dbSkip()
End
Return .T.



- 265 -

ADVPL Completo



SETPROC( )

A f uno Set Pr oc( ) utili z a da par a defi ni r o v al or m xi mo da r gu a de progr esso cri a da
a t r a v s da f uno Pr ocessa ( ) .

E Sintaxe: Processa(nMaxProc)

E Parmetros:

nMaxProc Vari v el que i ndi ca o v al or m xi mo de pr ocessa me nt o ( passos) que ser o
i ndi ca dos pel a r gu a .

E Retorno:

Nenhum .

Exemplo:
. . .
dbSel ect Ar e a ( " SA1 " )
dbGoTop( )
Set Pr oc( Last Rec( ) )
Whil e ! Eof ( )
I ncPr oc( )
I f Li > 60
. . .

INCPROC( )

A f uno I ncProc( ) ut ili z a da par a i ncr e me nt ar v al or n a r gu a de progr esso cri a da a t r a v s da
f uno Pr ocessa ( )

E Sintaxe: IncProc(cMensagem)

E Parmetros:

cMensagem Me nsa g e m que ser e xi bi da e a t u ali z a da n a r gua de processa me nt o a ca da
e x ecu o da f uno I ncProc( ) , se ndo que a t a x a de a t ual i z ao da i nt erf ace
cont r ol a da pel o Bi n ri o.

E Retorno:

Nenhum .

Exemplo:
. . .
dbSel ect Ar e a ( " SA1 " )
dbGoTop( )
Set Pr oc( Last Rec( ) )
Whil e ! Eof ( )
I ncPr oc( Av ali a ndo cli e nt e : + SA1- > A1_COD)
I f Li > 60
. . .


- 266 -

ADVPL Completo




26.2.3. MsNewProcess( ).

Rgu a de pr ocessa me nt o dupl a , possui ndo doi s i ndi ca dor es de pr ogr esso i ndepe nde nt es,
utili z a da no processa me nt o de rot i nas.

E Sintaxe: MsNewProcess( ) :New(bAcao, cMensagem)

E Retorno: oProcess objeto do tipo MsNewProcess( )

E Parmetros:

bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
Aparncia




E Mtodos:

Activate( ) I ni ci a a e x ecu o do obj et o MsNe wPr ocess i nst a nci a do.
SetRegua1( ) Defi ne a qua nt i da de de i nf or maes que ser o de monst r a das
pel o i ndi ca dor de pr ogr esso superi or.
Parmetro: nMa xPr oc
IncRegua1( ) I ncr e me nt a e m u ma uni da de o i ndi ca dor d e pr ogr esso
superi or , o qu al i r de monst r a r a e v ol uo do processa me nt o
de acor do com a qua nt i da de defi ni da pel o mt odo
Set Regu a 1( ) .
Parmetro: cMe nsa g e m
SetRegua2( ) Defi ne a qu a nt i da de de i nf or maes que ser o de monst r a das
pel o i ndi ca dor de pr ogr esso i nf eri or.
Parmetro: nMa xPr oc
IncRegua2( ) I ncr e me nt a e m u ma uni da de o i ndi ca dor d e pr ogr esso i nf eri or,
o qu al i r de monst r a r a e v ol uo do processa me nt o d e acor do
com a qu a nt i da de defi ni da pel o mt odo Set Regu a 2( ) .
Parmetro: cMe nsa ge m


- 267 -

ADVPL Completo



Exemplo: Objeto MsNewProcess( ) e mtodos acessrios


/*/
+-----------------------------------------------------------------------------
| Funo | GPROCES2 | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsNewProcess() |
| | e seus mtodos IncReguaX() e SetReguaX() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GProces2()
Private oProcess := NIL

oProcess := MsNewProcess():New({|lEnd| RunProc(lEnd,oProcess)};
"Processando","Lendo...",.T.)
oProcess:Activate()

Return Nil

/*/
+-----------------------------------------------------------------------------
| Funo | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de processamento executada atravs da MsNewProcess() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd,oObj)
Local i := 0
Local aTabela := {}
Local nCnt := 0

aTabela := {{"00",0},{"13",0},{"35",0},{"T3",0}}

dbSelectArea("SX5")
cFilialSX5 := xFilial("SX5")
dbSetOrder(1)
For i:=1 To Len(aTabela)
dbSeek(cFilialSX5+aTabela[i,1])
While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1]
If lEnd
Exit
Endif
nCnt++
dbSkip()
End
aTabela[i,2] := nCnt
nCnt := 0
Next i

- 268 -

ADVPL Completo



Exemplo (continuao):

oObj:SetRegua1(Len(aTabela))
For i:=1 To Len(aTabela)
If lEnd
Exit
Endif
oObj:IncRegua1("Lendo Tabela: "+aTabela[i,1])
dbSelectArea("SX5")
dbSeek(cFilialSX5+aTabela[i,1])
oObj:SetRegua2(aTabela[i,2])
While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1]
oObj:IncRegua2("Lendo chave: "+X5_CHAVE)
If lEnd
Exit
Endif
dbSkip()
End
Next i
Return



26.2.4. MsAguarde( ).

I ndi ca dor d e processa me nt o se m i ncr e me nt o.

E Sintaxe: Processa(bAcao, cMensagem, cTitulo)

E Retorno: Nil

E Parmetros:

bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
cTitulo T t ul o da j a nel a da r gu a de processa me nt o.
Aparncia





- 269 -

ADVPL Completo



Exemplo: MSAguarde( )


/*/
+-----------------------------------------------------------------------------
| Funo | GMSAGUARDE | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao das funes MSAGUARDE() |
| | e MSPROCTXT() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION GMsAguarde()
PRIVATE lEnd := .F.

MsAguarde({|lEnd| RunProc(@lEnd)},"Aguarde...","Processando Clientes",.T.)

RETURN

/*/
+-----------------------------------------------------------------------------
| Funo | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de processamento |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION RunProc(lEnd)

dbSelectArea("SX5")
dbSetOrder(1)
dbGoTop()

While !Eof()
If lEnd
MsgInfo(cCancel,"Fim")
Exit
Endif
MsProcTxt("Tabela: "+SX5->X5_TABELA+" Chave: "+SX5->X5_CHAVE)
dbSkip()
End

RETURN



- 270 -

ADVPL Completo



26.2.5. MsgRun( ).

I ndi ca dor d e processa me nt o se m i ncr e me nt o.

E Sintaxe: Processa(cMensagem, cTitulo, bAcao)

E Retorno: Nil

E Parmetros:

cMensagem
Me nsa g e m que ser e xi bi da n a r gu a de processa me nt o
dur a nt e a e x ecu o.
cTitulo T t ul o da j a nel a da r gu a de processa me nt o.
bAcao
Bl oco de cdi go que esp eci fi ca a ao que ser e x ecut a da com
o acompa nh a me nt o da r gu a d e processa me nt o.
Aparncia




Exemplo: MSGRun( )


/*/
+-----------------------------------------------------------------------------
| Funo | GMSGRUN | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao das funes MSGRUN() |
| | e DBEVAL() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION GMsgRun()
LOCAL nCnt := 0

dbSelectArea("SX1")
dbGoTop()

MsgRun("Lendo arquivo, aguarde...","Ttulo opcional",{|| dbEval({|x| nCnt++}) })

MsgInfo("Ufa!!!, li "+AllTrim(Str(nCnt))+" registros",FunName())

RETURN



- 271 -

ADVPL Completo



26.3. ListBox( )

A si nt a x e cl ssi ca da li ngua ge m ADVPL p er mi t e que o compon e nt e vi su al Li st Box i mpl e me nt e
doi s t i pos di sti nt os de obj et os :

E Lista simples: l i st a de a p e n as u ma col un a no f or ma t o de u m v et or, a qu al n o
necessi t a da especi fi cao d e u m ca b eal ho.

E Lista com colunas: l ist a com di v ersas col un as que n ecessi t a de u m ca beal ho no
f or ma t o d e u m a He a der ( arr a y d e ca b eal ho) .

26.3.1. ListBox simples

E Sintaxe:


@ nLinha,nColuna LISTBOX oListbox VAR nLista ITEMS aLista SIZE nLargura,nAltura
OF oObjetoRef UNIDADE ON CHANGE CHANGE


E Parmetros:

nLinha,nColuna Posi o do obj et o Li st Box e m f uno da j a n el a e m que el e
ser d efi ni do.
oListBox Obj et o Li st Box qu e ser cri a do.
nLista Vari v el nu mri ca que cont m o n mero do i t e m
sel eci on a do no Li st Box .
aLista Vet or si mpl es cont e ndo as st ri ngs que ser o e xi bi das no
Li st Box.
nLargura,nAltura Di me nses do obj et o Li st Box .
oObjetoRef Obj et o di al og no qual o compone nt e ser d efi ni do.
UNIDADE Uni da de de medi da das di me nses : PI XEL.
CHANGE F uno ou l i st a de e x pr esses qu e ser e x ecut a da n a
sel e o d e u m i t e m do Li st Box.

E Aparncia:





- 272 -

ADVPL Completo



Exemplo: LISTBOX como lista simples


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | LISTBOXITE | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do LISTBOX() como lista |
| | simples. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
User Function ListBoxIte()

Local aVetor := {}
Local oDlg := Nil
Local oLbx := Nil
Local cTitulo := "Consulta Tabela"
Local nChave := 0
Local cChave := ""

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5"))

CursorWait()

//+-----------------------------------------+
//| Carrega o vetor conforme a condio |
//+-----------------------------------------+
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA=="00"
AADD( aVetor, Trim(X5_CHAVE)+" - "+Capital(Trim(X5_DESCRI)) )
dbSkip()
End

CursorArrow()

If Len( aVetor ) == 0
Aviso( cTitulo, "No existe dados a consultar", {"Ok"} )
Return
Endif

//+-----------------------------------------------+
//| Monta a tela para usurio visualizar consulta |
//+-----------------------------------------------+
DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL
@ 10,10 LISTBOX oLbx VAR nChave ITEMS aVetor SIZE 230,95 OF oDlg PIXEL
oLbx:bChange := {|| cChave := SubStr(aVetor[nChave],1,2) }
DEFINE SBUTTON FROM 107,183 TYPE 14 ACTION LoadTable(cChave) ENABLE OF oDlg
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg

ACTIVATE MSDIALOG oDlg CENTER

Return


- 273 -

ADVPL Completo


Exemplo: LISTBOX como lista simples funes acessrias


/*/
+-----------------------------------------------------------------------------
| Funo | LISTBOXITE | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo que carrega os dados da tabela selecionada em um |
| | listbox. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION LoadTable(cTabela)

LOCAL aTabela := {}
LOCAL oDlg := NIL
LOCAL oLbx := NIL

dbSelectArea("SX5")
dbSeek(xFilial("SX5")+cTabela)

//+-------------------------------------------------------------
//| O vetor pode receber carga de duas maneiras, acompanhe... |
//+-------------------------------------------------------------
//| Utilizando While/End |
//+-------------------------------------------------------------

dbEval({|| AADD(aTabela,{X5_CHAVE,Capital(X5_DESCRI)})},,{||
X5_TABELA==cTabela})

If Len(aTabela)==0
Aviso( "FIM", "Necessrio selecionar um item", {"Ok"} )
Return
Endif

DEFINE MSDIALOG oDlg TITLE "Dados da tabela selecionada" FROM 300,400 TO 540,900
PIXEL
@ 10,10 LISTBOX oLbx FIELDS HEADER "Tabela", "Descrio" SIZE 230,095 OF oDlg
PIXEL
oLbx:SetArray( aTabela )
oLbx:bLine := {|| {aTabela[oLbx:nAt,1],aTabela[oLbx:nAt,2]} }
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg

RETURN




- 274 -

ADVPL Completo



26.3.2. ListBox mltiplas colunas

E Sintaxe:


@ nLinha,nColuna LISTBOX oListbox FIELDS HEADER Header1, , HeaderX SIZE
nLargura,nAltura OF oObjetoRef UNIDADE


E Parmetros:

nLinha,nColuna Posi o do obj et o Li st Box e m f uno da
j a nel a e m que el e ser defi ni do.
oListBox Obj et o Li st Box qu e ser cri a do.
nLista Vari v el nu mri ca que cont m o n mero do
i t e m sel eci ona do no Li st Box.
Header1,...,HeaderX St ri ngs i de nt i fi ca ndo os t t ul os das col un as do
Gri d.
nLargura,nAltura Di me nses do obj et o Li st Box .
oObjetoRef Obj et o di al og no qu al o compone nt e ser
defi ni do.
UNIDADE Uni da de de medi da das di me nses : PI XEL.
CHANGE F uno ou l i st a de e x pr esses qu e ser
e x ecut a da n a sel e o d e u m i t e m do Li st Box.

E Mtodos:

SetArray( ) Mt odo o obj et o Li st Box que defi ne qu al o
arr a y cont m os da dos que ser o e xi bi dos no
gri d.

E Atributos:

bLine At ri but o do obj et o Li st Box qu e vi ncul a ca da
li nha , col un a do arr a y, com ca da ca b eal ho do
gri d.

E Aparncia:



- 275 -

ADVPL Completo



Exemplo: LISTBOX com grid


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Funo | LIST_BOX | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao de um LISTBOX() com |
| | grid. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function List_Box()

Local aVetor := {}
Local oDlg
Local oLbx
Local cTitulo := "Cadastro de Bancos"
Local cFilSA6

dbSelectArea("SA6")
dbSetOrder(1)
cFilSA6 := xFilial("SA6")
dbSeek(cFilSA6)

// Carrega o vetor conforme a condio.
While !Eof() .And. A6_FILIAL == cFilSA6
AADD( aVetor, { A6_COD, A6_AGENCIA, A6_NUMCON, A6_NOME, A6_NREDUZ, A6_BAIRRO,
A6_MUN } )
dbSkip()
End

// Se no houver dados no vetor, avisar usurio e abandonar rotina.
If Len( aVetor ) == 0
Aviso( cTitulo, "No existe dados a consultar", {"Ok"} )
Return
Endif

// Monta a tela para usurio visualizar consulta.
DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL

// Primeira opo para montar o listbox.
@ 10,10 LISTBOX oLbx FIELDS HEADER ;
"Banco", "Agencia", "C/C", "Nome Banco", "Fantasia", "Bairro", "Municpio" ;
SIZE 230,95 OF oDlg PIXEL

oLbx:SetArray( aVetor )
oLbx:bLine := {|| {aVetor[oLbx:nAt,1],;
aVetor[oLbx:nAt,2],;
aVetor[oLbx:nAt,3],;
aVetor[oLbx:nAt,4],;
aVetor[oLbx:nAt,5],;
aVetor[oLbx:nAt,6],;
aVetor[oLbx:nAt,7]}}


- 276 -

ADVPL Completo


Exemplo (continuao):

// Segunda opo para monta o listbox
/*
oLbx :=
TWBrowse():New(10,10,230,95,,aCabecalho,,oDlg,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
oLbx:SetArray( aVetor )
oLbx:bLine := {|| aEval(aVetor[oLbx:nAt],{|z,w| aVetor[oLbx:nAt,w] } ) }
*/

DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg CENTER

Return


26.4. ScrollBox( )

O Scr ol l Box o obj et o utili z a do par a per mi ti r a u m Di al og e xi bi r barr as de r ol a ge m v er t i cai s e
Hori z ont ai s. Al gu mas a pli caes com obj et os defi ne m a ut oma t i ca me nt e o Scr oll Box, t ai s como :

E Enchoi ce( ) ou MsMGet ( )
E Ne wGet Da dos( )
E Li st Box( )

Qu a ndo d efi ni do u m obj et o Scrol l Box, os d e mai s compone nt es da j a nel a de v er o r ef er e nci ar
est e obj et o e n o mai s o obj et o Di al og.

Dest a f or ma o Scr oll Box a t ri bu do a u m obj et o Di al og, e os compon e nt es a o Scr ol l Box.

O MsDi al og( ) Scr oll Box( )
O Scr oll Box( ) Compone nt es Vi su ai s

E Sintaxe:


@ nLinha,nColuna SCROLLBOX oScrollBox HORIZONTAL VERTICAL SIZE
nLargura,nAltura OF oObjetoRef BORDER


E Parmetros:

nLinha,nColuna Posi o do obj et o Scrol l Box e m f uno da
j a nel a e m que el e ser defi ni do.
oScrollBox Obj et o Scrol l Box que ser cri a do.
HORIZONTAL Par met r o que qu a ndo defi ni do h a bili t a a
r gu a d e rol a ge m hori z ont al .
VERTICAL Par met r o que qu a ndo defi ni do h a bili t a a
r gu a d e rol a ge m v er t i cal .
nLargura,nAltura Di me nses do obj et o Scrol l Box.
oObjetoRef Obj et o di al og no qu al o compone nt e ser
defi ni do.
BORDER

Par met r o que qu a ndo defi ni do h a bili t a a
e xi bi o de u ma bor da de del i mi t ao do
Scr oll Box e m r el ao a out ros obj et os.


- 277 -

ADVPL Completo


E Aparncia:





Exemplo: Utilizao de mltiplos ScrollBoxes


#INCLUDE "PROTHEUS.CH"

/*/
+------------------------------------------------------------------------
| Funo | SCROLL() | Autor | ROBSON LUIZ |Data | |
+------------------------------------------------------------------------
| Descrio | Programa que demonstra como montar uma enchoice apenas |
| | com variveis, incluindo o recurso de rolagem. |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/

USER FUNCTION Scroll()

LOCAL oDlg := NIL
LOCAL oScroll := NIL
LOCAL oLbx1 := NIL
LOCAL oLbx2 := NIL
LOCAL bGet := NIL
LOCAL oGet := NIL
LOCAL aAIIPM := {}
LOCAL aTitulo := {}
LOCAL nTop := 5
LOCAL nWidth := 0
LOCAL cGet := ""
LOCAL cPict := ""
LOCAL cVar := ""
LOCAL n := 0


- 278 -

ADVPL Completo


Exemplo (continuao):

PRIVATE cTitulo := "Consulta Parcelamento"
PRIVATE aSay := {}
PRIVATE cProcesso,cPrefixo,cTipo,cCliente,cLoja,cNome,cCGC
PRIVATE dData,nTotal,nUFESP,cStatus,cCond

cProcesso := "P00001"
cPrefixo := "UNI"
cTipo := "MAN"
cCliente := "000001"
cLoja := "01"
cNome := "JOSE DA SILVA SANTOS SOARES"
cCGC := "00.000.000/0001-91"
dData := "26/03/03"
nTotal := 5922.00
nUFESP := 1000.00
cStatus := "Z"
cCond := "001"

// Vetor para os campos no Scrooll Box
//+-------------------------------------+
//| aSay[n][1] - Titulo |
//| aSay[n][2] - Tipo |
//| aSay[n][3] - Tamanho |
//| aSay[n][4] - Decimal |
//| aSay[n][5] - Contedo/Varivel |
//| aSay[n][6] - Formato |
//+-------------------------------------+
AADD(aSay,{"Processo" ,"C",06,0,"cProcesso" ,"@!"})
AADD(aSay,{"Prefixo" ,"C",03,0,"cPrefixo" ,"@!"})
AADD(aSay,{"Tipo" ,"C",03,0,"cTipo" ,"@!"})
AADD(aSay,{"Cliente" ,"C",06,0,"cCliente" ,"@!"})
AADD(aSay,{"Loja" ,"C",02,0,"cLoja" ,"@!"})
AADD(aSay,{"Nome" ,"C",30,0,"cNome" ,"@!"})
AADD(aSay,{"CNPJ/CPF" ,"C",14,0,"cCGC" ,"@!"})
AADD(aSay,{"Dt.Processo" ,"D",08,0,"dData" ,"@!"})
AADD(aSay,{"Total R$" ,"N",17,2,"nTotal" ,"@!"})
AADD(aSay,{"Total UFESP" ,"N",17,2,"nUFESP" ,"@!"})
AADD(aSay,{"Status" ,"C",01,0,"cStatus" ,"@!"})
AADD(aSay,{"Cond.Pagto" ,"C",03,0,"cCond" ,"@!"})

// Vetor para List Box
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})

// Vetor para List Box
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})

DEFINE MSDIALOG oDlg TITLE cTitulo FROM 122,0 TO 432,600 OF oDlg PIXEL
@ 013,002 TO 154,192 LABEL "Parcelamento" OF oDlg PIXEL
@ 013,195 TO 082,298 LABEL "Ttulos" OF oDlg PIXEL
@ 083,195 TO 154,298 LABEL "AIIPM" OF oDlg PIXEL

//scrollbox
@ 019,006 SCROLLBOX oScroll HORIZONTAL VERTICAL SIZE 131,182 OF oDlg BORDER
For n:=1 TO Len(aSay)

- 279 -

ADVPL Completo


Exemplo (continuao):

bGet := &("{|| '"+aSay[n][1]+"'}")
cVar := aSay[n][5]
cGet := "{|u| IIF(PCount()>0,"+cVar+":=u,"+cVar+")}"
cPict := aSay[n][6]

TSay():New(nTop,5,bGet,oScroll,,,.F.,.F.,.F.,.T.,,,;
GetTextWidth(0,Trim(aSay[n][1])),15,;
.F.,.F.,.F.,.F.,.F.)
oGet:=TGet():New(nTop-2,40,&cGet,oScroll,,7,cPict,,,,,.F.,,.T.,;
,.F.,,.F.,.F.,,.T.,.F.,,(cVar),,,,.T.)
nTop+=11
Next n

//listbox ttulos
@ 019,199 LISTBOX oLbx1 FIELDS HEADER ;
"Parcela","Vencto","Vencto.Real","Valor R$","Qtd.UFESP";
COLSIZES 21,24,33,63,100;
SIZE 095,059 OF oDlg PIXEL
oLbx1:SetArray( aTitulo )
oLbx1:bLine := {||{aTitulo[oLbx1:nAt,1],aTitulo[oLbx1:nAt,2],;
aTitulo[oLbx1:nAt,3],aTitulo[oLbx1:nAt,4],aTitulo[oLbx1:nAt,5]}}

//listbox aiipm
@ 089,199 LISTBOX oLbx2 FIELDS HEADER "AIIPM","Placa","Data Multa" ;
COLSIZES 24,21,30 SIZE 095,061 OF oDlg PIXEL
oLbx2:SetArray( aAIIPM )
oLbx2:bLine :=
{||{aAIIPM[oLbx2:nAt,1],aAIIPM[oLbx2:nAt,2],aAIIPM[oLbx2:nAt,3]}}

ACTIVATE MSDIALOG oDlg CENTER ON INIT
EnchoiceBar(oDlg,{||oDlg:End()},{||oDlg:End()})

RETURN














- 280 -

ADVPL Completo



26.5. ParamBox( )

I mpl e me nt a u ma t el a de par met r os, que n o necessi t a da cri ao d e u m gr upo de per gunt as
no SX1, e com f unci on ali da des que a Per gunt e( ) n o di sponi bili z a , t ai s como Check Box e
Ra di oBut t ons.

Ca da compon e nt e da Par a mBox ser associ a do a u m pa r met r o Pri v a t e d e nomi n a do
MV_PARx x, de acor do com a or d e m do compone nt e n a t el a . Os par met r os da Pa r a mBox
pode m ser ut ili z a dos de f or ma i ndepe nde nt e e m u ma r ot i n a espec fica , ou compl e me nt a ndo
opes de u ma r ot i n a pa dr o.

Cuidados

A PARAMBOX defi ne os par met ros segui ndo o pri nc pi o das v ari v ei s MV_PARx x. Caso
el a sej a ut ili z a da e m u ma rot i n a e m conj unt o com pa r met ros pa dres ( SX1 +
Per gunt e( ) ) necess ri o sal v ar os par met r os pa dres, ch a ma r a Par a mbox( ) , sal v ar o
r et or no da Par a mbox( ) e m v ari v ei s Pri v a t e espec fi cas (MVPARBOXx x) e depoi s
r est a ur ar os pa r met ros pa dres, conf or me o e x e mpl o dest a docu me nt ao.

O obj et o COMBO( ) da PARAMBOX( ) possui u m probl e ma e m se u r et or no : Caso o combo
n o sej a sel eci ona do, el e ma nt er se u cont e do como nu mri co, caso sej a el e r eceb er
o t e xt o da opo e n o o n mero da op o. O e x e mpl o dest a docu me nt ao i l ust r a o
t r a t a me nt o de cdi go n ecessri o par a pr ot eg er a a pli cao.

Ao ut ili z ar a Par a mBox e m u ma f uno que t a mb m ut ili z e par met ros defi ni dos pel a
f uno Per gunt e( ) de v e - se :

E Sal v ar e r est a ur a r os MV_PARs da Per gunt e( )
E Defi ni r v ari v ei s Pri v a t e prpri as par a a Par a mBox, as qu ai s i r o ar ma z e na r o
cont e do das MV_PARs que est a r et or n a .

E Sintaxe: ParamBox (aParamBox, cTitulo, aRet, bOk, aButtons, lCentered,;
nPosx, nPosy, oMainDlg, cLoad, lCanSave, lUserSave)

E Retorno: lOK indica se a tela de parmetros foi cancelada ou confirmada

E Parmetros:

aParamBox Arr a y de par met r os de acor do com a r egr a da Par a mBox
cTitulo Ti t ul o da j a nel a de par met r os
aRet
Arr a y que ser passa do por r ef er e nci a e r et or na do com o
cont e do de ca da pa r met r o
bOk Bl oco de cdi go par a v ali dao do OK da t el a de par met r os
aButtons
Arr a y cont e ndo a r egr a par a a di o d e novos bot es ( al m do
OK e Ca ncel ar ) / / AADD( a But t ons, { nTy pe , bAct i on, cTe xt o } )
lCentered
Se a t el a ser e xi bi da ce nt r al i z a da , qu a ndo a mesma n o
est i v er vi ncul a da a out r a j a nel a
nPosx Posi o i ni ci al - > li nha (Li nh a fi n al : nPosX + 274)
nPosy Posi o i ni ci al - > col un a ( Col un a fi nal : nPosY + 4 45)
oMainDlg Caso o Par a mBox de v a ser vi ncul a do a u ma out r a t el a
cLoad
Nome do ar qui vo a onde as r espost as do usu ri o ser o sal v as /
li das
lCanSave Se as r espost as par a as per gunt as pod e m ser sal v as
lUserSave Se o usu ri o pode sal v ar su a prpri a confi gur ao.

- 281 -

ADVPL Completo


E Aparncia:





E Regras do array aParamBox:

[1] Tipo do parmetro: Par a ca da t i po de par met r o as de mai s posi es do a rr a y v ari a m de
cont e do conf or me a bai xo :

1 - MsGet
[ 2] : Descri o
[ 3] : St ri ng cont e ndo o i ni ci ali z a dor do ca mpo
[ 4] : St ri ng cont e ndo a Pi ct ur e do ca mpo
[ 5] : St ri ng cont e ndo a v ali dao
[ 6] : Consul t a F 3
[ 7] : St ri ng cont e ndo a v ali dao Whe n
[ 8] : Ta ma nho do MsGe t
[ 9] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

2 - Combo
[ 2] : Descri o
[ 3] : Nu mri co cont e ndo a op o i ni ci al do combo
[ 4] : Arr a y cont e ndo as opes do Co mbo
[ 5] : Ta ma nho do Combo
[ 6] : Vali dao
[ 7] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

- 282 -

ADVPL Completo



3 - Radio
[ 2] : Descri o
[ 3] : Nu mri co cont e ndo a op o i ni ci al do Ra di o
[ 4] : Arr a y cont e ndo as opes do Ra di o
[ 5] : Ta ma nho do Ra di o
[ 6] : Vali dao
[ 7] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

4 - CheckBox ( Com Say )
[ 2] : Descri o
[ 3] : I ndi ca dor Lgi co cont e ndo o i ni ci al do Check
[ 4] : Te xt o do Ch eck Box
[ 5] : Ta ma nho do Ra di o
[ 6] : Vali dao
[ 7] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

5 - CheckBox ( linha inteira )
[ 2] : Descri o
[ 3] : I ndi ca dor Lgi co cont e ndo o i ni ci al do Check
[ 4] : Ta ma nho do Ra di o
[ 5] : Vali dao
[ 6] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

6 - File
[ 2] : Descri o
[ 3] : St ri ng cont e ndo o i ni ci ali z a dor do ca mpo
[ 4] : St ri ng cont e ndo a Pi ct ur e do ca mpo
[ 5] : St ri ng cont e ndo a v ali dao
[ 6] : St ri ng cont e ndo a v ali dao Whe n
[ 7] : Ta ma nho do MsGe t
[ 8] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?
[ 9] : Te xt o cont e ndo os t i pos de a r qui vo
Ex. : " Ar qui vos . CSV | *. CSV "
[ 10] : Di r et ri o i ni ci al do CGETF I LE( )
[ 11] : Par met ros do CGETF I LE( )

7 - Montagem de expresso de filtro
[ 2] : Descri o
[ 3] : Ali as da t a bel a
[ 4] : Fil t ro i ni ci al
[ 5] : Opci on al - Cl a usul a Whe n Bot o Edi t ar Fi l t ro

8 - MsGet Password
[ 2] : Descri o
[ 3] : St ri ng cont e ndo o i ni ci ali z a dor do ca mpo
[ 4] : St ri ng cont e ndo a Pi ct ur e do ca mpo
[ 5] : St ri ng cont e ndo a v ali dao
[ 6] : Consul t a F 3
[ 7] : St ri ng cont e ndo a v ali dao Whe n
[ 8] : Ta ma nho do MsGe t
[ 9] : Fl a g . T. / . F. Pa r met r o Obri ga t ri o ?

- 283 -

ADVPL Completo



9 - MsGet Say
[ 2] : St ri ng Cont e ndo o Te xt o a ser a pr ese nt a do
[ 3] : Ta ma nho da St ri ng
[ 4] : Al t ur a da St ri ng
[ 5] : Negri t o (l gi co)

Exemplo: Utilizao da ParamBox( )


#include protheus.ch

/*/
+-----------------------------------------------------------------------
| Funo | xParamBox | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da PARAMBOX como |
| | forma alternativa de disponibilizar parmetros em um |
| | processamento. |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function xParamBox()

Local aRet := {}
Local aParamBox := {}
Local aCombo :=
{"Janeiro","Fevereiro","Maro","Abril","Maio","Junho","Julho","Agosto","Setembro
","Outubro","Novembro","Dezembro"}
Local i := 0
Private cCadastro := "xParambox"

AADD(aParamBox,{1,"Produto",Space(15),"","","SB1","",0,.F.})
AADD(aParamBox,{2,"Tipo de cliente",1,aCombo,50,"",.F.})

AADD(aParamBox,{3,"Mostra
deletados",IIF(Set(_SET_DELETED),1,2),{"Sim","No"},50,"",.F.})

AADD(aParamBox,{4,"Marca todos ?",.F.,"Marque todos se necessrio
for.",50,"",.F.})

AADD(aParamBox,{5,"Marca todos ?",.F.,50,"",.F.})

AADD(aParamBox,{6,"Qual arquivo",Space(50),"","","",50,.F.,;
"Arquivo .DBF |*.DBF"})

AADD(aParamBox,{7,"Monte o filtro","SX5","X5_FILIAL==xFilial('SX5')"})
AADD(aParamBox,{8,"Digite a senha",Space(15),"","","","",80,.F.})

If ParamBox(aParamBox,"Teste Parmetros...",@aRet)
For i:=1 To Len(aRet)
MsgInfo(aRet[i],"Opo escolhida")
Next
Endif

Return


- 284 -

ADVPL Completo


Exemplo: Protegendo os parmetros MV_PARs da Pergunte( ) em uso.


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | XPARBOX() | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo utilizando a PARAMBOX() e protegendo os MV_PARs |
| | ativos do programa principal. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
Static Function XPARBOX(cPerg)

Local aParamBox := {}
Local cTitulo := "Transferncia para Operao"
Local bOk := {|| .T.}
Local aButtons := {}; Local aRet := {}
Local nPosx; Local nPosy; Local nX := 0
Local cLoad := ""
Local lCentered := .T.; Local lCanSave := .F.; Local lUserSave := .F.
Local aParamAtu := Array(4)

// Salva as perguntas padres antes da chamada da ParamBox
For nX := 1 to Len(aParamAtu)
aParamAtu [nX] := &("Mv_Par"+StrZero(nX,2))
Next nX

AADD(aParamBox,{2,"Atualiza taxa de depreciao?", 2, {"Sim","No"}, 100,;
"AllwaysTrue()",.T.})

ParamBox(aParamBox, cTitulo, aRet, bOk, aButtons, lCentered, nPosx, nPosy,
/*oMainDlg*/ ,;
cLoad, lCanSave, lUserSave)

IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox)
For nX := 1 to Len(aParamBox)
If aParamBox[nX][1] == 1
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C"
&("MvParBox"+StrZero(nX,2)) := aScan(aParamBox[nX][4],;
{|x| Alltrim(x) == aRet[nX]})
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N"
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
Endif
Next nX
ENDIF

// Restaura as perguntas padres apos a chamada da ParamBox
For nX := 1 to Len(aParamAtu)
&("Mv_Par"+StrZero(nX,2)) := aParamAtu[nX]
Next nX

Return


- 285 -

ADVPL Completo



MDULO 05: Introduo a orientao objetos


27. Conceitos de orientao objetos

O t er mo ori e nt a o a obj et os pr essupe u ma or ga ni z ao de sof t war e e m t er mos d e col e o
de obj et os di scr et os i ncor por a ndo est r ut ur a e compor t a me nt o prpri os. Est a a bor da ge m de
or ga ni z ao esse nci al me nt e di f er e nt e do d ese nvol vi me nt o t r a di ci on al de sof t war e, ond e
est r ut ur as d e da dos e r ot i n as so d ese n vol vi das de f or ma a pe n as fr aca me nt e acopl a das.

Nest e t pi co ser o os concei t os d e progr a mao ori e nt a da a obj et os l i st a dos a bai xo. Est a
br e v e vi so g er al do par a di g ma per mi t i r e nt e nd er mel hor os concei t os associ a dos
progr a ma o ori e nt a da a obj et os e , e m pa r t i cul ar, s const r ues i mpl e me nt a das a t r a v s d a
li ngua ge m ADVPL.

E Objetos
E Herana
E Atributos
E Mtodos
E Classes
E Abstrao
E Generalizao
E Encapsulamento
E Polimorfismo

27.1. Definies

Objeto

Um obj et o u ma e nt i da de do mundo r e al que t e m u ma i de nt i da de. Obj et os pode m
r epr ese nt a r e nt i da des concr et as ( u m ar qui vo no me u comput a dor, u ma bi ci cl et a ) ou e nt i da des
concei t u ai s ( u ma est r a t gi a de j ogo, u ma pol ti ca de escal on a me nt o e m u m si st e ma
oper aci onal ) . Ca da obj et o t er sua i de nt i da de si gni fi ca que doi s obj et os so di st i nt os mesmo
que el es a pr ese nt e m e x a t a me nt e as mesmas ca r act er st i cas.

E mbor a obj et os t e nh a m e xi st nci a prpri a no mundo r e al , e m t er mos d e l i ngu a ge m de
progr a ma o u m obj et o necessi t a u m meca ni smo de i de nt i fi cao. Est a i de nti fi cao de obj et o
de v e ser ni ca , uni f or me e i ndepe nde nt e do cont e do do obj et o. Est e u m dos meca ni smos
que per mi t e a cri ao d e col ees de obj et os, as qu ai s so t a mb m obj et os e m si .

A est r ut ur a d e u m obj et o r epr ese nt a da e m t er mos d e a t ri but os. O compor t a me nt o d e u m
obj et o r epr ese nt a do p el o conj unt o d e op er aes qu e pod e m ser e x ecut a das sobr e o obj et o.


- 286 -

ADVPL Completo



Classe

Obj et os co m a mesma est r ut ur a e o mesmo compor t a me nt o so a gr upa dos e m cl asses. Uma
cl asse u ma a bst r ao que descr e v e pr opri eda des i mpor t a nt es par a u ma a pl i cao e
si mpl esme nt e i gnor a o r est o.

Ca da cl asse d escr e v e u m conj unt o ( possi v el me nt e i nfi ni t o) de obj et os i ndi vi du ai s. Ca da obj et o
di t o ser u ma i nst nci a de u ma cl asse. Assi m, ca da i nst nci a de u ma cl asse t e m se us prpri os
v al or es par a ca da a t ri but o, mas di vi de m os nomes dos a t ri but os e mt odos com as out r as
i nst nci as da cl asse. I mpli ci t a me nt e, ca da obj et o cont m u ma r ef er nci a par a su a pr pri a
cl asse, e m out r as pal a vr as, el e sa be o qu e el e .



Figura: Repr ese nt a o de u ma cl asse d e obj et os




Figura: Repr ese nt a o de u m obj et o i nst a nci a do de u ma cl asse

- 287 -

ADVPL Completo




Polimorfismo

Pol i morfi smo si gni fi ca que a mesma op er a o pod e se compor t ar de f or ma di f er e nt e e m
cl asses di f er e nt es. Por e x e mpl o, a op er a o mov e qu a ndo a pl i ca da a u ma j a nel a de u m
si st e ma de i nt erf aces t e m u m compor t a me nt o di sti nt o do que qu a ndo a pli ca da a u ma pea de
u m j ogo de x a dr e z . Um mt odo u ma i mpl e me nt ao esp ec fi ca de u ma oper a o par a u ma
cer t a cl asse.

Pol i morfi smo t a mb m i mpli ca que u ma oper a o d e u ma mesma cl asse pod e ser
i mpl e me nt a da por mai s de u m mt odo. O usu ri o n o pr eci sa sa b er qu a nt as i mpl e me nt aes
e xi st e m par a u ma op er a o, ou e x pli ci t ar qual mt odo de v e ser ut ili z a do : a li ngua ge m de
progr a ma o d e v e ser ca pa z de sel eci on ar o mt odo corr et o a pa r t i r do nome da op er ao,
cl asse do obj et o e a r gu me nt os par a a op er ao. Dest a f or ma , nov as cl asses pod e m ser
a di ci ona das se m necessi da de de modi fi cao de cdi go j e xi st e nt e , poi s ca da cl asse a pe n as
defi ne os se us mt odos e a t ri but os.

No mundo r e al , al guns obj et os e cl asses pode m ser d escri t os co mo casos esp eci ai s, ou
esp eci ali z aes, d e out r os obj et os e cl asses. Por e x e mpl o, a cl asse de comput a dor es p essoai s
com pr ocessa dor da li nh a 80x 86 u ma especi ali z ao de comput a dor es pessoai s, que por su a
v e z u ma especi ali z ao d e comput a dor es. No d esej v el que t udo que j f oi descri t o pa r a
comput a dor es t e nh a de ser r ep et i do par a comput a dor es p essoai s ou par a comput a dor es
pessoai s com pr ocessa dor da li nh a 80x 86.

Herana

Her a na o meca ni smo do par a di g ma de ori e nt ao a obj et os que per mi t e compa r t i l har
a t ri but os e oper aes e nt r e cl asses base a da e m u m r el aci on a me nt o hi er r qui co. Uma cl asse
pode ser defi ni da de f or ma g e nri ca e de poi s r efi n a da sucessi v a me nt e e m t er mos d e
subcl asses ou cl asses d eri v a das. Ca da subcl asse i ncor por a , or her da , t odas as pr opri eda des d e
sua supercl asse ( ou cl asse base) e a di ci on a suas propri eda des ni cas e par t i cul ar es. As
propri eda des da cl asse base n o pr eci sa m ser r epet i das e m ca da cl asse deri v a da . Est a
ca paci da de de f a t or a r as propri eda des comuns de di v ersas cl asses e m u ma supercl asse pod e
r eduzi r dr a ma t i ca me nt e a r epet i o d e cdi go e m u m proj et o ou pr ogr a ma , se ndo u ma das
pri nci pai s v a nt a ge ns da a bor da g e m d e ori e nt a o a obj et os.


- 288 -

ADVPL Completo



27.2. Conceitos Bsicos

A a bor da g e m de ori e nt ao a obj et os f a vor ece a a pl i cao de di v ersos concei t os consi der a dos
f unda me nt ai s par a o dese nv ol vi me nt o de bons progr a mas, t ai s como a bst r ao e
e nca psul a me nt o.

Tai s concei t os no s o e xcl usi vos dest a a bor da ge m, mas so supor t a dos de f or ma mel hor no
dese nvol vi me nt o ori e nt a do a obj et os do que e m out r as met odol ogi as.

Abstrao

Abst r a o consi st e de f ocal i z ar nos aspect os esse nci ai s i ner e nt es a u ma e nt i da de e i gnor a r
propri eda des aci de nt ai s. E m t er mos de dese nvol vi me nt o de si st e mas, i st o si gni fi ca
conce nt r a r - se no que u m obj et o e f a z a nt es de se deci di r como el e ser i mpl e me nt a do. O
uso de a bst r ao pr eser v a a li ber da de par a t omar deci ses de dese nvol vi me nt o ou de
i mpl e me nt ao a p e n as qu a ndo h u m mel hor e nt e ndi me nt o do pr obl e ma a ser r esol vi do.

Mui t as li ngu a ge ns de progr a ma o mod er nas supor t a m o concei t o de a bst r ao de da dos ;
por m, o uso de a bst r ao j unt a me nt e co m poli morfi smo e her a na , como supor t a do e m
ori e nt ao a obj et os, u m meca ni smo mui t o mai s poder oso.

O uso a pr opri a do de a bst r a o p er mi t e que u m mesmo mod el o concei t u al ( ori e nt ao a
obj et os) sej a ut ili z a do par a t odas as f ases de dese nv ol vi me nt o de u m si st e ma , desde su a
a n li se a t su a docu me nt ao.

Encapsulamento

Enca psul a me nt o, t a mb m r ef eri do como esconder i nf or mao, consi st e e m sepa r ar os
aspect os e xt er nos d e u m obj et o, os quai s so acess v ei s a out ros obj et os, dos det al hes
i nt er nos d e i mpl e me nt ao do obj et o, os quai s per ma nece m escondi dos dos out r os obj et os. O
uso d e e nca psul a me nt o e vi t a que u m pr ogr a ma t or ne - se t o i nt er dep e nde nt e que u ma
peque n a muda na t e nha gr a ndes ef ei t os col a t er ai s.

O uso d e e nca psul a me nt o per mi t e que a i mpl e me nt a o de u m obj e t o possa ser modi fi ca da
se m af et a r as a pl i caes qu e usa m est e obj e t o. Mot i vos pa r a modi ficar a i mpl e me nt ao d e
u m obj et o pod e m ser , por e x e mpl o, mel hori a de d ese mpe nho, corr e o d e er ros e muda na d e
pl a t af or ma de e x ecuo.

Assi m como a bst r a o, o concei t o de Enca psul a me nt o no e xcl usi vo da a bor da ge m de
ori e nt ao a obj et os. Ent r et a nt o, a h a bili da de de se combi nar est r ut ur a d e da dos e
compor t a me nt o e m u ma ni ca e nti da de t or na a Enca psul a me nt o mai s el ega nt e e mai s
poderosa do que e m li ngu a ge ns conv e nci on ai s que separ a m est r ut ur as d e da dos e
compor t a me nt o.

Compartilhamento

Tcni cas de ori e nt ao a obj et os pr omov e m compa r t il ha me nt o e m di v ersos n v ei s di sti nt os.
Her a na d e est r ut ur a de da dos e compor t a me nt o p er mi t e que est r ut ur as comuns sej a m
compa r t il h a das e nt r e di v ersas cl asses deri v a das si mil ar es se m r edund nci a . O
compa r t il h a me nt o de cdi go usa ndo her a na u ma das gr a ndes v a nt a ge ns da ori e nt ao a
obj et os. Ai nda mai s i mpor t a nt e que a economi a de cdi go a cl ar e z a concei t u al de r econhecer
que op er aes di f er e nt es so n a v er da de a mesma coi sa , o que r e duz o n mero d e casos
di sti nt os que de v e m ser e nt e ndi dos e a n ali sa dos.


- 289 -

ADVPL Completo


O dese nv ol vi me nt o ori e nt a do a obj et os n o a p e nas per mi t e que a i nf or mao d e nt r o de u m
proj et o sej a compa r t il ha da como t a mb m of er ece a possi bili da de de r e a prov ei t ar pr oj et os e
cdi go e m proj et os f ut uros. As f err a me nt as par a al ca nar est e comp ar t il ha me nt o, t ai s como
a bst r a o, Enca psul a me nt o e her a na , est o pr ese nt es n a met odol ogi a ; u ma est r a t gi a de
r e uso e nt r e pr oj et os a defi ni o de bi bli ot ecas de el e me nt os r e us v ei s. Ent r et a nt o,
ori e nt ao a obj et os n o u ma f r mul a m gi ca par a al ca nar r e usa bili da de ; par a t a nt o,
pr eci so pl a nej a me nt o e di sci pli n a par a pe nsar e m t er mos ge nri cos, n o v ol t a dos
si mpl esme nt e pa r a a a pli cao cor r e nt e.

27.3. O Modelo de Objetos (OMT)

Um model o de obj et os busca ca pt ur a r a est r ut ur a est t i ca de u m si st e ma most r a ndo os
obj et os e xi st e nt es, se us r el aci on a me nt os, e a t ri but os e op er aes que car act eri z a m ca da
cl asse de obj et os. a t r a v s do uso dest e model o que se e nf a t i z a o dese nvol vi me nt o e m
t er mos d e obj et os a o i nv s de meca ni smos t r a di ci on ai s de dese n vol vi me nt o base a do e m
f unci on ali da des, per mi t i ndo u ma r epr ese nt a o mai s prxi ma do mundo r e al .

Uma v e z que as pri nci pai s defi ni es e concei t os da a bor da g e m d e ori e nt ao a obj et os est o
defi ni dos, poss v el i nt roduzi r o model o de obj et os qu e ser a dot a do ao l ongo dest e t e xt o. O
model o a pr ese nt a do u m subconj unt o do model o OMT ( Obj ect Model i ng Techni que) , propost o
por Ru mba ugh e nt r e out ros. Est e model o t a mb m i nt roduz u ma r epr ese nt ao di a gr a m t i ca
par a est e mod el o, a qu al ser t a mb m a pr ese nt a da a qui .

27.3.1. Objetos e Classes

Obj et o defi ni do nest e model o como u m concei t o, a bst r a o ou coi sa com li mi t es e
si gni fi ca dos be m defi ni dos par a a a pli cao e m quest o. Obj et os t m doi s propsi t os :
promov er o e nt e ndi me nt o do mundo r e al e supor t ar u ma base pr t i ca par a u ma
i mpl e me nt ao comput aci onal . No e xi st e u ma ma nei r a corr et a de decompor u m probl e ma
e m obj et os ; est a d ecomposi o dep e nde do j ul ga me nt o do proj e t i st a e da n a t ur e z a do
probl e ma . Todos os obj et os t m i de nt i da de prpri a e s o di st i ngu v ei s.

Uma cl asse d e obj et os descr e v e u m gr upo de obj et os com propri eda des ( a t ri but os) si mil ar es,
compor t a me nt os ( oper aes) si mil ar es, r el aci on a me nt os comuns co m out ros obj et os e u ma
se m nt i ca comu m. Por e x e mpl o, Pessoa e Co mpa nhi a so cl asses d e obj et os. Ca da pessoa
t e m u m nome e u ma i da de ; est es seri a m os a t ri but os comuns da cl asse. Compa nhi as t a mb m
pode m t er os mesmos a t ri but os nome e i da de d efi ni dos. Ent r et a nt o, de vi do di st i no
se m nt i ca el as prov a v el me nt e est ari a m a gr upa dos e m out r a cl asse qu e n o Pessoa . Co mo se
pode obser v ar , o a gr up a me nt o e m cl asses n o l e v a e m cont a a p e n as o compar t i l h a me nt o de
propri eda des.

Todo obj et o sa b e a que cl asse el e per t e nce, ou sej a , a cl asse de u m obj et o u m a t ri but o
i mpl ci t o do obj et o. Est e concei t o supor t a do n a mai or par t e das l i ngua ge ns de progr a ma o
ori e nt a da a obj et os, i ncl usi v e e m ADVPL.

OMT defi ne doi s ti pos de di a gr a mas de obj et os, di a gr a mas de cl asses e di a gr a mas de
i nst nci as. Um di a gr a ma de cl asse u m esque ma , ou sej a , u m pa dr o ou ga bari t o que
descr e v e as mui t as poss v ei s i nst nci as de da dos. Um di a gr a ma de i nst nci as descr e v e como
u m conj unt o par t i cul ar de obj et os est r el aci on a do. Di a gr a mas d e i nst nci as so t ei s par a
a pr ese nt ar e x e mpl os e docu me nt ar casos de t est es ; di a gr a mas de cl asses t m uso mai s
a mpl os. A Fi gur a a bai xo a pr ese nt a a not ao a dot a da par a est es di a gr a mas.

- 290 -

ADVPL Completo





Figura: Repr ese nt a o di a gr a m ti ca de OMT pa r a cl asses e obj et os


O a gr upa me nt o d e obj e t os e m cl asses u m poder oso meca ni smo de a bst r a o. Dest a f or ma ,
poss v el ge ner al i z ar defi ni es comuns par a u ma cl asse d e obj et os, ao i n v s d e r ep et -l as
par a ca da obj et o e m par t i cul ar. Est a u ma das f or mas de r e ut ili z ao e economi a que a
a bor da g e m d e ori e nt a o a obj et os supor t a .

27.3.2. Atributos

Um a t ri but o u m v al or de da do assu mi do pel os obj et os d e u ma cl asse. Nome , i da de e p eso
so e x e mpl os d e a t ri but os d e obj et os Pessoa . Cor , p eso e model o s o poss v ei s a t ri but os de
obj et os Car ro. Ca da a t ri but o t e m u m v al or par a ca da i nst nci a de obj et o. Por e x e mpl o, o
a t ri but o i da de t e m v al or ` ` 29'' no obj et o Pedro Y. E m out r as pal a vr as, Pedr o Y t e m 29 a nos de
i da de. Di f er e nt es i nst nci as de obj et os pod e m t er o mesmo v al or pa r a u m da do a t ri but o.
Ca da nome d e a t ri but o ni co par a u ma da d a cl asse, mas n o necessari a me nt e ni co e nt r e
t odas as cl asses. Por e x e mpl o, a mbos Pessoa e Compa nhi a pode m t er u m a t ri but o ch a ma do
e nder eo.

No di a gr a ma de cl asses, a t ri but os so li st a dos no segundo seg me nt o da cai x a que r epr ese nt a
a cl asse. O nome do a t ri but o pode ser segui do por d et al hes opci on ais, t ai s como o t i po de
da do assu mi do e v al or def a ul t . A Fi gur a a bai xo most r a est a r epr ese nt ao.



Figura: Repr ese nt a o di a gr a m ti ca de OMT pa r a cl asses e obj et os co m a t ri but os

No se de v e conf undi r i de nti fi ca dor es i nt er nos de obj et os com a t ri but os do mundo r e al .
I d e nt i fi ca dor es d e obj e t os s o u ma conv e ni nci a de i mpl e me nt ao, e n o t m ne nhu m
si gni fi ca do par a o dom ni o da a pli cao. Por e x e mpl o, CI C e RG n o so i de nt i fi ca dor es d e
obj et os, mas si m v er da dei ros a t ri but os do mundo r e al .


- 291 -

ADVPL Completo


27.3.3. Operaes e Mtodos

Uma oper a o u ma f u no ou t r a nsf or mao que pode ser a pli ca da a ou por obj et os e m u ma
cl asse. Por e x e mpl o, a bri r, sal v ar e i mpri mi r so op er aes que pode m ser a pl i ca das a obj et os
da cl asse Ar qui vo. Todos os obj et os e m u ma cl asse compar t i l h a m as mesmas op er aes.

Toda oper a o t e m u m obj et o- al vo como u m ar gu me nt o i mpl ci t o. O compor t a me nt o d e u ma
oper a o d epe nde da cl asse de se u al vo. Como u m obj et o sa be qu al su a cl asse, poss v el
escol her a i mpl e me nt ao corr et a da oper ao. Al m di st o, out ros ar gu me nt os ( pa r met ros)
pode m ser n ecessri os par a u ma oper a o.

Uma mesma oper ao pode se a pl i car a di v ersas cl asses di f er e nt es. Uma op er ao como est a
di t a ser pol i mrfi ca , ou sej a , el a pode assu mi r di st i nt as f or mas e m cl asses di f er e nt es.

Um mt odo a i mpl e me nt ao d e u ma op er ao par a u ma cl asse. Por e x e mpl o, a op er ao
i mpri mi r pode ser i mpl e me nt a da de f or ma di st i nt a , depe nde ndo se o ar qui vo a ser i mpr esso
cont m a p e n as t e xt o ASCI I , u m a r qui vo de u m processa dor de t e xt o ou bi n ri o. Todos est es
mt odos e x ecut a m a mesma op er ao : i mpri mi r o a r qui vo ; por m, ca da mt odo ser
i mpl e me nt a do por u m di f er e nt e cdi go.

A assi n a t ur a de u m mt odo da da p el o n mer o e t i pos d e a r gu me nt os do mt odo, assi m
como por se u v al or de r et or no. Uma est r a t gi a de dese nvol vi me nt o r ecome nd v el ma nt er
assi n a t ur as coer e nt es par a mt odos i mpl e me nt a ndo u ma da da oper a o, assi m como u m
compor t a me nt o consi st e nt e e nt r e as i mpl e me nt aes.

E m t er mos d e di a gr a mas OMT, oper aes s o li st a das n a t ercei r a par t e da cai x a de u ma
cl asse. Ca da nome d e oper a o pode ser segui da por det al hes opci onai s, t ai s como l i st a de
ar gu me nt os e t i po de r et or no. A l i st a de ar gu me nt os a pr ese nt a da e nt r e pa r nt eses a ps o
nome da op er ao. Uma li st a de ar gu me nt os v a zi a i ndi ca que a op er ao n o t e m
ar gu me nt os ; da a us nci a da li st a de ar gu me nt os n o se pode concl ui r na da . O t i po de
r esul t a do v e m a ps a li st a de ar gu me nt os, se ndo pr ecedi do por doi s pont os ( : ) . Caso a
oper a o r et or ne r esul t a do, est e no de v e ser omi ti do, poi s est a a f or ma de di sti ngui -l a de
oper aes qu e n o r et or n a m r esul t a do. Ex e mpl os d e r epr ese nt a o d e oper aes e m OMT so
a pr ese nt a dos na Fi gur a a bai xo :



Figura: Repr ese nt a o di a gr a m ti ca de OMT pa r a cl asses co m a t ri but os e oper aes

- 292 -

ADVPL Completo



27.3.4. Sugestes de desenvolvimento

Na const r uo d e u m model o par a u ma a pli cao, as segui nt es sugest es de v e m ser
obser v a das a fi m de se obt er r esul t a dos cl aros e consi st e nt es :

E No comece a const r ui r u m model o d e obj et os si mpl esme nt e defi ni ndo cl asses,
associ aes e h er a nas. A pri mei r a coi sa a se f a z er e nt e nder o probl e ma a ser
r esol vi do.
E Te nt e ma nt er se u mod el o si mpl es. Evi t e compl icaes desnecess ri as.
E Escol h a nomes cui da dosa me nt e. Nomes s o i mpor t a nt es e ca rr e ga m conot aes
poderosas. Nomes d e v e m ser d escri t i vos, cl aros e n o d ei x ar a mbi gi da des. A escol h a
de bons nomes u m dos asp ect os mai s di f cei s da model a ge m.
E No e nt er r e a pont a dor es ou out r as r ef er nci as a obj et os de nt ro de obj et os como
a t ri but os. Ao i nv s di st o, mod el e est as r ef er nci as como associ aes. I st o t or n a o
model o mai s cl aro e i ndepe nd e nt e da i mpl e me nt ao.
E Te nt e e vi t ar associ aes que e nv ol v a m t r s ou mai s cl asses d e obj et os. Mui t as v e z es,
est es t i pos d e associ aes pod e m ser d ecompost os e m t er mos d e associ aes bi n ri as,
t or n a ndo o model o mai s cl aro.
E No t r a nsfi r a os a t ri but os d e l i gao par a d e nt r o de u ma das cl asses.
E Te nt e e vi t ar hi er a r qui as de g e ner ali z ao mui t o prof undas.
E No se sur pr e e nda se o se u model o necessi t ar v ri as r e vi ses ; i st o o nor mal .
E Se mpr e docu me nt e se us mod el os de obj et os. O di a gr a ma pode esp eci fi car a est r ut ur a
do mod el o, mas ne m se mpr e sufi ci e nt e par a descr e v er as r a z es por t r s da defi ni o
do mod el o. Uma e x pl ica o escri t a pode cl ari fi car pont os t ai s como si gni fi ca do de
nomes e e x pli car a r a z o par a ca da cl asse e r el aci on a me nt o.
E Ne m se mpr e t odas as const r ues OMT s o necess ri as par a descr e v er u ma a pli cao.
Use a p e n as a quel as que f or e m a dequ a das par a o pr obl e ma a nali sa do.


- 293 -

ADVPL Completo



28. Orientao a objetos em ADVPL

Nest e t pi co ser det al ha da a f or ma com a qu al a li ngu a ge m ADVPL i mpl e me nt a os concei t os
de ori e nt ao a obj et os e a si nt a x e ut ili z a da no dese n vol vi me nt o de a pl icaes.


28.1. Sintaxe e operadores para orientao a objetos

Palavras reservadas

CLASS
CONSTRUCTOR
DATA
ENDCLASS
FROM
METHOD
SELF

CLASS

Descrio
Ut ili z a da n a decl ar ao de u ma cl asse d e obj et os, e pa r a i de nt i fi car a qu al
cl asse u m d et er mi na do mt odo est r el aci ona do.
Sintaxe 1 CLASS < nome _da _cl asse >
Sintaxe 2 METHOD < nome _do_ mt odo > CLASS < nome _da _cl asse >

CONSTRUCTOR

Descrio
Ut ili z a da n a especi fi cao de u m mt odo especi al , defi ni do como const r ut or,
o qu al t e m a f un o d e r et or n a r u m novo obj et o com os a t ri but os e m t odos
defi ni dos n a cl asse .
Sintaxe METHOD < nome _do_ mt odo( ) > C ONSTRUCTOR

DATA

Descrio Ut ili z a da n a decl ar ao de u m a t ri but o da cl asse d e obj et os.
Sintaxe DATA < nome _do_a t ri but o >

ENDCLASS

Descrio Ut ili z a da na fi n ali z ao da decl ar a o da cl asse .
Sintaxe ENDCLASS



- 294 -

ADVPL Completo


FROM

Descrio
Ut ili z a da n a decl ar ao de u ma cl asse, a qu al ser u ma i nst nci a de u ma
supercl asse, r eceb e ndo os a t ri but os e mt odos nel a defi ni dos,
i mpl e me nt a ndo a her a na e nt r e cl asses.
Sintaxe CLASS < nome _da _cl asse > FROM < nome _da _supercl asse >


METHOD

Descrio
Ut ili z a da n a decl ar ao do pr ot t i po do mt odo de u ma cl asse d e obj et os, e
na decl ar a o do mt odo ef et i v a me nt e dese nv ol vi do.
Sintaxe 1 METHOD < nome _do_ mt odo( ) >
Sintaxe 2 METHOD < nome _do_ mt odo( < par met r os > ) > CLASS < nome _da _cl asse >

SELF

Descrio
Ut ili z a da pri nci pal me nt e pel o mt odo const r ut or par a r et or n a r o obj et o
cri a do par a a a pl i cao.
Sintaxe Ret ur n SELF


Operadores especficos


:
Ut ili z a do par a r ef er e nci ar u m mt odo ou u m a t ri but o de u m obj et o j
i nst a nci a do.
Exemplo 1 cNome : = oAl uno:sNome
Exemplo 2 cNot a : = oAl uno:GetNota(cCurso)


::
Ut ili z a do pel os mt odos de u ma cl asse pa r a r ef er e nci ar os a t ri but os
di spon v ei s par a o obj et o.
Exemplo

METHOD Get Not a ( cCurso) CLASS ALUNO

Local nPosCurso : = 0
Local nNot a : = 0

nPosCurso : = a Sca n( ::aCursos, { | a Curso | a Curso[ 1] = = cCurso } )

I F nPosCurso > 0

nNot a : = ::aCursos[ nPosCurso] [ 2]

ENDI F

Ret ur n nNot a




- 295 -

ADVPL Completo



28.2. Estrutura de uma classe de objetos em ADVPL

Declarao da classe

A decl ar ao d e u ma cl asse da li ngu a ge m ADVPL r e al i z a da de f or ma si mil ar a decl ar ao d e
u ma f uno, com a dif er e na de que u ma cl asse n o possui di f er e nci ao qua nt o a su a
proced nci a , como u ma F unct i on( ) e u ma User F unct i on( ) , e n o possui vi si bili da de li mi t a da
como u ma St a t i c F unct i on( ) .

Exemplo:

#include protheus.ch
CLASS Pessoa()



Definio dos atributos

Segui ndo o mesmo pri nc pi o de v ari v ei s n o t i pa das, os a t ri but os das cl asses e m ADVPL n o
pr eci sa m t er se u t i po especi fi ca do, se ndo n ecessri o a pe n as det er mi n ar se us nomes.

Dest a f or ma r ecome nda do o uso da not ao Hngar a t a mb m par a a defi ni o dos a t ri but os
de f or ma a f aci li t ar a a nli se, i nt er pr et ao e ut i li z ao da cl asse e se us obj et os i nst a nci a dos.

Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade



Prototipao dos mtodos

A prot ot i pao dos m t odos u ma r egr a ut ili z a da pel as li ngu a ge ns ori e nt a das a obj et os,
a t r a v s da qual so esp eci fi ca das as oper aes que pode m ser r e al i z a das pel o obj et o,
di f er e nci a ndo os mt odos d e out r as f unes i nt er n as de uso da cl asse , e par a especi fi car qu ai s
so os mt odos const r ut or es.

E m li ngua ge ns ti pa das, n a prot ot i pao dos mt odos necess ri o defi ni r qu ai s so os
par met ros r ecebi dos e se us r esp ect i vos t i pos, al m de defi ni r o t i po do r et or no que ser
f or n eci do. E m ADVPL necess ri o a pe n as d escr e v er a ch a ma da do mt odo e caso necessri o
se o mesmo u m const r ut or .

- 296 -

ADVPL Completo



Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS


28.3. Implementao dos mtodos de uma classe em ADVPL

Mtodo Construtor

O mt odo const r ut or possui a car act er st i ca de r et or n a r u m obj et o com o ti po da cl asse da qu al
o mesmo f oi i nst a nci a do. Por est a r a z o di z - se que o t i po do obj et o i nst a nci a do a cl asse
da quel e obj et o.

Par a produzi r est e ef ei t o, o mt odo const r ut or ut ili z a a pal a vr a r eser v a da SELF, a qu al
utili z a da pel a li ngu a ge m ADVPL pa r a r ef er nci a a prpri a cl asse da qu el e obj et o.

Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS

METHOD Create(cNome, nIdade) CLASS Pessoa

::cNome := cNome
::nIdade := nIdade

Return SELF



- 297 -

ADVPL Completo



Manipulao de atributos

Os a t ri but os defi ni dos par a u ma cl asse com a utili z ao da pal a vr a r eser v a da DATA e m su a
decl ar a o pod e m ser ma ni pul a dos por se us mt odos ut i li z a ndo o op er a dor : : .

A ut ili z ao dest e op er a dor p er mi t e a o i nt er pr et a dor ADVPL di f er e nci ar v ari v ei s comuns
cri a das pel as f unes e mt odos qu e ut ili z a m est e obj et o dos a t ri but os propri a me nt e di t os.

Exemplo:

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()
ENDCLASS

METHOD Create(cNome, nIdade) CLASS Pessoa

::cNome := cNome
::nIdade := nIdade

Return SELF


Utilizao de funes em uma classe de objetos

Conf or me me nci on a do a nt eri or me nt e, a ut i li z ao da pal a vr a r eser v a d a METHOD p er mi t e ao
i nt er pr et a dor ADVPL di f er e nci ar os mt odos que pod e m ser ut ili z a dos a t r a v s da r ef er nci a do
obj et o de f unes i nt er nas descri t as i nt er n a me nt e n a cl asse.

I st o p er mi t e a ut ili z ao d e f unes t r a di ci on ai s da li ngua ge m ADVPL, como as St a t i c
F unct i ons( ) as quai s ser o vi s v ei s a pe n as a cl asse, e n o poder o s er r ef er e nci a das
di r et a me nt e p el o obj et o.

Exemplo parte 01: Funo CadPessoa (usuria da classe Pessoa)

#include protheus.ch

USER FUNCTION CadPessoa()

Local oPessoa
Local cNome :=
Local dNascimento:= CTOD()
Local aDados := {}

aDados := GetDados()
oPessoa := Pessoa():Create(cNome,dNascimento)

Return

- 298 -

ADVPL Completo



Exemplo parte 02: Classe Pessoa

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade
DATA dNascimento

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS

METHOD Create(cNome, dNascimento) CLASS Pessoa
::cNome := cNome
::dNascimento := dNascimento
::nIdade := CalcIdade(dNascimento)
Return SELF

STATIC FUNCTION CalcIdade(dNascimento)
Local nIdade
nIdade := dDataBase - dNascimento
RETURN nIdade


Herana entre classes

Segui ndo o pri nci pi o da ori e nt ao a obj et os, a li ngu a ge m ADVPL per mi t e que u ma cl asse
r eceba por her a na os mt odos e a t ri but os d efi ni dos e m u ma out r a cl asse, a qu al t or n asse a
supercl asse d est a i nst nci a .

Par a ut ili z ar est e r ecurso d e v e ser ut ili z a da a pal a vr a r eser v a da FROM n a decl ar ao da
cl asse, especi fi ca ndo a supercl asse qu e ser r ef er e nci a da .

E m ADVPL o e x e mpl o pr t i co dest a si t u ao a supercl asse TSr v Obj ect , a qu al utili z a da pel a
mai ori a das cl asses e co mpone nt es da i nt erf ace vi su al , como de monst r a do no mdul o 06.


Exemplo parte 01: Declarao da classe Pessoa

#include protheus.ch
CLASS Pessoa()

DATA cNome
DATA nIdade
DATA dNascimento

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS


- 299 -

ADVPL Completo



Exemplo parte 02: Declarao da classe Aluno

#include protheus.ch
CLASS Aluno() FROM Pessoa

DATA nID
DATA aCursos

METHOD Create() CONSTRUCTOR
METHOD Inscrever()
METHOD Avaliar()
METHOD GetNota()
METHOD GetStatus()

ENDCLASS

// Os objetos da classe Aluno, possuem todos os mtodos e atributos da classe
Pessoa, alm
// dos mtodos e atributos declarados na prpria classe.


Construtor para classes com herana

Qu a nt o ut ili z a do o r ecurso de h er a na e nt r e cl asses, o const r ut or da cl asse i nst a nci a da de v e
r eceb er u m t r a t a me nt o a di ci on al , par a que o obj et o i nst a nci a do sej a cri a do com os a t ri but os e
mt odos d efi ni dos n a supercl asse.

Nest es casos, l ogo a ps a defi ni o do mt odo const r ut or da cl asse, d e v er ser e x ecut a do o
mt odo const r ut or da supercl asse.

Exemplo parte 03: Mtodo Construtor da classe Aluno

METHOD Create(cNome,dNascimento,nID)
:Create(cNome,dNascimento) // Chamada do mtodo construtor da classe Pessoa.

::nID := ID

Return SELF




- 300 -

ADVPL Completo



MDULO 06: ADVPL Orientado objetos I

Nest e mdul o ser o t r a t a dos os compon e nt es e obj et os da i nt erf ace vi su al da li ngu a ge m
ADVPL, p er mi ti ndo o dese nvol vi me nt o de a pli caes com i nt erf aces gr fi cas com si nt a x e
ori e nt a da a obj et os.

29. Componentes da interface visual do ADVPL

A li ngu a ge m ADVPL possui di v ersos compon e nt es vi su ai s e a uxili ar es, os quai s pode m ser
r epr ese nt a dos ut i li z a ndo a est r ut ur a a bai xo :

. Classes da Interface Visual




Tsr vobj ect
. Classes Auxiliares


Tf ont

. Classes de Janelas


Msdi al og
Tdi al og
Twi ndow

. Classes de Componentes


Tcont r ol


.
Classes de Componentes
Visuais
Br ge t ddb
Mscal e nd
Mscal e ndgri d
Mssel br
Mswor k ti me
Sbut t on
Tbar
Tbi t ma p
Tbr owsebut t on
Tbt nb mp
Tbt nb mp2
Tbut t on
Tcbr owse
Tcheck box
Tcolor t ri a ngl e
Tcombobox
Tfol der
Tfont
Tge t
Tgr oup
Thbut t on
Ti browser
Tlist box
T me nu
T me nubar
T me t er
T msgr a phic
T msgbar
T mul ti bt n
T mul ti ge t
Tol econt ai ner
Tpa ge vi e w
Tpa nel
Tr ad me nu
Tsbr owse
Tsa y
Tscr oll box
Tsi mpl e edi t or
Tsli der

- 301 -

ADVPL Completo






.
Classes de Componentes
Visuais
Tspli t t er
Tt a bs
Tt oolbox
Twbrowse
Vcbrowse

Classes da interface visual

TSRVOBJECT( )

Descrio
Cl asse a bst r a t a i ni ci al de t odas as cl asses d e i nt erf ace do ADVPL. N o de v e
ser i nst a nci a da di r et a me nt e.


Classes auxiliares

TFONT( )

Descrio
Cl asse de obj et os que d efi ne a f ont e do t e x t o ut ili z a do nos cont r ol es
vi su ai s.


Classes de janelas

MSDIALOG( )

Descrio
Cl asse de obj et os que d e v e ser ut ili z a da como p a dr o d e j a nel a par a
e nt r a da d e da dos. MSDi al og u m t i po de j a nel a di l ogo modal , i st o ,
no per mi t e que out r a j a nel a a ti v a r eceba da dos e nqu a nt o est a est i v er
a t i v a .

TDIALOG( )

Descrio
Cl asse de obj et os do t i po di l ogo de e nt r a da d e da dos, se ndo se u uso
r eser v a do. Recome nda - se ut i li z ar a cl asse MSDi al og que h er da da d est a
cl asse.

TWINDOW( )

Descrio
Cl asse de obj et os do t i po di l ogo pri nci pal de pr ogr a ma . De v er e xi st i r
a pe n as u ma i nst nci a dest e obj et o n a e x ecuo do progr a ma .


Classes de componentes

TCONTROL( )

Descrio
Cl asse a bst r a t a comu m e nt r e t odos os compon e nt es vi su ai s edi t v ei s.
No d e v e ser i nst a nci a da di r et a me nt e.


- 302 -

ADVPL Completo



Classes de componentes visuais

BRGETDDB( )

Descrio Cl asse de obj et os vi su ais do t i po Gri d.

MSCALEND( )

Descrio Cl asse de obj et os vi su ais do t i po Cal e ndri o.


MSCALENDGRID( )

Descrio Cl asse de obj et os vi su ais do t i po Gr a d e d e Per odos.

MSSELBR( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Gri d

MSWORKTIME( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Bar r a de Per odo.

SBUTTON( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o, o qu al pode possui r i ma ge ns
pa dres associ a das a o se u t i po.

TBAR( )

Descrio Cl asse de obj et os vi su ais do t i po Barr a Superi or .

TBITMAP( )

Descrio Cl asse de obj et os vi su ais que p er mi t e a e xi bi o de u ma i ma ge m.

TBROWSEBUTTON( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o no f or ma t o pa dr o ut ili z a do
e m br owses da a pl i cao.

TBTNBMP( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o, o qu al per mi t e que sej a
vi ncul a da u ma i ma ge m ao cont r ol e.


- 303 -

ADVPL Completo



TBTNBMP2( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o, o qu al per mi t e a e xi bi o de
u ma i ma ge m ou de u m popup.

TBUTTON( )

Descrio
Cl asse de obj et os vi su ais do t i po bot o, o qu al per mi t e a ut i li z ao de
t e xt o par a su a i de nt i fi cao.

TCBROWSE( )

Descrio Cl asse de obj et os vi su ais do t i po Gri d.

TCHECKBOX( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Check Box.

TCOLORTRIANGLE( )

Descrio Cl asse de obj et os vi su ais do t i po Pal et a de Cor es.

TCOMBOBOX( )

Descrio
Cl asse d e obj et os vi su ais do t i po t ComboBox, a qu al cri a u ma e nt r a da
de da dos com ml t i pl a escol ha com i t e m d efi ni do e m u ma l i st a
v er t i cal , aci on a da por F 4 ou pel o bot o esqu er do l ocali z a do n a par t e
di r ei t a do cont rol e. A v ari v el associ a da ao cont rol e t er o v al or d e
u m dos i t e ns sel eci ona dos ou no caso d e u ma li st a i nde x a da , o v al or
de se u ndi ce.

TFOLDER( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Fol der .

TGET( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Get , a qu al cri a u m
cont r ol e que a r ma z e n a ou al t er a o cont e do de u ma v ari v el a t r a v s
de di gi t ao. O cont e do da v ari v el s modi fi ca do qua ndo o
cont r ol e per de o f oco de edi o pa r a out ro cont r ol e.

TGROUP( )

Descrio
Cl asse de obj et os vi su ais do t i po pai nel t Group, a qu al cri a u m
pai nel onde cont rol es vi su ai s pode m ser a gr upa dos ou cl assi fi ca dos.
Nest e pai nel cri a da u ma bor da com t t ul o e m vol t a dos cont rol es
a gr upa dos.


- 304 -

ADVPL Completo



THBUTTON( )

Descrio Cl asse de obj et os vi su ais do t i po bot o com hi perl i nk.

TIBROWSER( )

Descrio
Cl asse de obj et os vi su ais do t i po P gi n a de I nt er net , se ndo necess ri o
i ncl ui r a cl a usul a Browser En a bl ed = 1 no Confi g do Re mot e. I NI

TLISTBOX( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Li st box, a qu al cri a u ma
j a nel a com i t e ns sel eci on v ei s e ba rr a de r ol a ge m. Ao sel eci on ar u m
i t e m, u ma v ari v el a t u ali z a da com o cont e do do i t e m sel eci on a do.

TMENU( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Me nu.

TMENUBAR( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Bar r a de Me nu.

TMETER( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Me t er, a qu al e xi be u ma
r gu a ( ga uge) de processa me nt o, d escr e v e ndo o a nda me nt o de u m
processo a t r a v s da e xi bi o de u ma ba rr a hori z ont al .

TMSGRAPHIC( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Gr fi co.

TMSGBAR( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Rod a p.

TMULTIBTN( )

Descrio Cl asse de obj et os vi su ais do t i po cont r ol e - Ml ti pl os bot es.

TMULTIGET( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e - edi o d e t e xt o d e
ml ti pl as li nhas.


- 305 -

ADVPL Completo



TOLECONTAINER( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e, a qu al per mi t e a cri ao de
u m bot o vi ncul a do a u m obj et o OLE.

TPAGEVIEW( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e, que per mi t e a vi su ali z ao
de ar qui vos no f or ma t o ger a do p el o spool de i mpr e ss o do Prot he us.

TPANEL( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Pa nel , a qu al per mi t e
cri ar u m pai nel est t i co, onde pod e m ser cri a dos out r os cont rol es com
o obj et i vo de or ga ni z ar ou a gr upar compon e nt es vi su ai s.

TRADMENU( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e TRa dMe nu, a qu al per mi t e
cri ar u m cont r ol e vi su al no f or ma t o Ra di o But t on.

TSBROWSE( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e TSBrowse , a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po Gri d.

TSAY( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Sa y, a qu al e xi be o
cont e do de t e xt o est t i co sobr e u ma j a nel a ou cont r ol e pr e vi a me nt e
defi ni dos.

TSCROLLBOX( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Scr oll box, a qu al per mi t e
cri ar u m pai nel com scr oll desli z a nt es n as l a t er ai s ( hori z ont ai s e
v er t i cai s) do cont r ol e.

TSIMPLEEDITOR( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Si mpl e Edi t or, a qu al
per mi t e cri ar u m cont rol e vi sual par a edi o d e t e xt os com r ecursos
si mpl es, como o Not ePa d

TSLIDER( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Sli der, a qual per mi t e
cri ar u m cont r ol e vi su al do t i po bot o desli z a nt e.

TSPLITTER( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Spli t t er, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po di vi sor.

- 306 -

ADVPL Completo



TTABS( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e TTa bs, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po past a .

TTOOLBOX( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e t Tool box, a qu al per mi t e
cri ar u m cont r ol e vi su al par a a gr upa r di f er e nt es obj et os.

TWBROWSE( )

Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e TWBrowse, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po Gri d.

VCBROWSE( )
Descrio
Cl asse de obj et os vi su ais do t i po cont r ol e VCBrowse , a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po Gri d.


Documentao dos componentes da interface visual

Os compon e nt es da i nt erf ace vi su al da li ngu age m ADVPL ut ili z ados nest e t r ei n a me nt o est o
docu me nt a dos n a seo Gui a de Ref er nci a , ao fi n al dest e ma t eri al .

Par a vi su ali z ar a docu me nt ao compl et a de t odos os compon e nt es me nci on a dos nest e
ca p t ul o de v e ser acesso o si t e DEM Docu me nt a o El et r ni ca Mi crosi ga
( de m. mi crosi ga . com. br ) conf or me a bai xo :









- 307 -

ADVPL Completo



29.1. Particularidades dos componentes visuais


29.1.1. Configurando as cores para os componentes

Os compone nt es vi suai s da li ngua ge m ADVPL ut ili z a m o pa dr o d e cor es RGB.

As cor es d est e pa dr o so d efi ni das pel a segui nt e f r mul a , a qu al de v e ser a v al i a da t e ndo
como base a pal et a de cor es no f or ma t o RGB :


nCor : = nVermelho + (nVerde * 256) + (nAzul * 65536)





Figura: Paleta de cores no formato RGB

Com base n est a pal et a , pode mos d efi ni r os v al or es das segui nt es cor es bsi cas :

Cor R G B Valor
Pr et o 0 0 0 0
Az ul 0 0 255 16711680
Ver d e 0 255 0 65280
Ci a no 0 255 255 16776960
Ver mel ho 255 0 0 255
Rosa 255 0 255 16711935
Amar el o 255 255 0 65535
Br a nco 255 255 255 16777215



- 308 -

ADVPL Completo



Par a a t ri bui r as cor es a os obj et os vi su ai s de v e m ser obser v a dos os a t ri but os ut ili z a dos par a
est es fi ns e m ca da obj e t o, como por e x e mpl o :

MSDIALOG( )

nClrPane Cor de f undo do pai nel
nClrText Cor da f ont e das l et r as do pai nel


TSAY( )

nClrPane Cor de f undo do pai nel
nClrText Cor da f ont e das l et r as do pai nel


Funo RGB( )

A li ngu a ge m ADVPL possui a f uno RGB( ) a qu al r et or n a o v al or da cor a ser defi ni do, de
acor do com a pa r a met ri z ao d e ca da u m dos el e me nt os da pal et a RGB.


RGB(nRed, nGreen, nBlue)

nRed Val or de 0- 255 pa r a o el e me nt o v er mel ho da pal et a RGB
nGreen Val or de 0- 255 pa r a o el e me nt o v er d e da pal et a RGB
nBlue Val or de 0- 255 pa r a o el e me nt o a z ul da pal et a RGB
Retorno Val or a ser defi ni do par a o a t ri but o cor do compone nt e


- 309 -

ADVPL Completo



30. Aplicaes com a interface visual do ADVPL

A li ngu a ge m ADVPL possui i nt erf aces vi suai s pr - d efi ni das que a uxili a m no dese nv ol vi me nt o
de a pl i caes mai s co mpl et as, combi n a ndo est as i nt erf aces com os co mpone nt es vi su ais
de monst r a dos a nt eri or me nt e.

Di da ti ca me nt e as i nt erf aces vi suai s pr - defi ni das da li ngu a ge m ADVPL pode m ser di vi di das e m
t r s gr upos :

E Captura de informaes simples ou Multi-Gets;
E Captura de mltiplas informaes ou Multi-Lines;
E Barras de botes

30.1. Captura de informaes simples (Multi-Gets)

E m ADVPL, as t el as de ca pt ur a de i nf or maes compost as por ml ti pl os ca mpos di gi t v ei s
acompa nh a dos d e se us r esp ect i vos t e xt os e x pl i ca ti vos s o co mu me nt e ch a ma dos de
Enchoi ces.

Um Enchoi ce pode ser f acil me nt e e nt e ndi da como di v ersos conj unt os de obj et os TSa y e TGet
ali nh a dos de f or ma a vi suali z ar ou ca pt ur ar i nf or maes, nor mal me nt e vi ncul a das a ar qui vos
de ca dast r os ou movi me nt aes si mpl es.

Abai xo t e mos a vi suali z ao de u ma Enchoi ce par a o ar qui vo pa dr o do ERP Pr ot he us d e
Ca dast r o de Cl i e nt es ( SA1) :



Figura: Enchoice do Cadastro de Clientes do ERP Protheus


- 310 -

ADVPL Completo



A li ngua ge m ADVPL p er mi t e a i mpl e me nt ao d a Enchoi ce de duas f or mas si mil ar es :

E Funo Enchoice: Si nt a x e t r a di ci on al me nt e utili z a da e m ADVPL, a qu al n o r et or n a
u m obj et o par a a a pl i cao ch a ma dor a ;

E Classe MsMGet: Cl asse do obj et o Enchoi ce, a qu al per mi t e a i nst a nci ao di r et a d e u m
obj et o, t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .

A utili z ao de u m ou out ro obj et o dep e nde unica me nt e da escol h a do dese nvol v edor j que os
par met ros par a a f uno Enchoi ce e pa r a o mt odo Ne w( ) da cl asse MsMGet s o os mesmos,
l e mbr a ndo que par a ma nt er a coer nci a com u ma a pli cao escri t a e m ori e nt ao a obj et os
de v er ser ut i li z a da a cl asse MsMGet ( ) .

30.1.1. Enchoice( )

E Sintaxe: Enchoice( cAlias, nReg, nOpc, aCRA, cLetra, cTexto, aAcho, aPos,
aCpos, nModelo, nColMens, cMensagem, cTudoOk, oWnd, lF3,
lMemoria, lColumn, caTela, lNoFolder, lProperty)

E Retorno: Nil
E Parmetros:

cAlias Ta bel a ca dast r a da no Di ci on ri o de Ta b el as ( SX2) que ser
edi t a da
nReg Par met r o n o ut ili z a do
nOpc N mer o da li nh a do aRot i na que defi ni r o t i po de edi o
( I ncl uso, Al t er ao, Excl uso, Vi suali z ao)
aCRA Par met r o n o ut ili z a do
cLetra Par met r o n o ut ili z a do
cTexto Par met r o n o ut ili z a do
aAcho Vet or com nome dos ca mpos qu e ser o e xi bi dos. Os ca mpos
de usu ri o se mpr e ser o e xi bi dos se n o e xi st i r no par met ro
u m el e me nt o com a e x pr ess o " NOUSER"
aPos Vet or com coor d e n a das par a cri ao da e nchoi ce no f or ma t o
{ < t op > , < l ef t > , < bot t o m > , < ri ght > }
aCpos Vet or com nome dos ca mpos qu e pod er o ser e di t a dos
nModelo Se f or di f er e nt e d e 1 d esa bili t a e x ecu o d e ga t il hos
est r a ngei ros
nColMens Par met r o n o ut ili z a do
cMensagem Par met r o n o ut ili z a do
cTudoOk Ex pr ess o par a v al i dao da Enchoi ce
oWnd Obj et o ( j a nel a , pai nel , et c. ) ond e a e nchoi ce ser cri a da .
lF3 I ndi ca se a e nchoi ce est a se ndo cri a da e m u ma consul t a F 3
par a ut ili z ar v ari v ei s de me mri a
lMemoria I ndi ca se a e nchoi ce ut i li z ar v ari v ei s de me mri a ou os
ca mpos da t a bel a na edi o
lColumn I ndi ca se a a pr ese nt a o dos ca mpos ser e m f or ma de
col un a
caTela Nome da v ari v el t i po " pri v a t e " que a e nchoi ce utili z ar no
l ugar da propri eda de a Tel a
lNoFolder I ndi ca se a e nchoi ce n o i r ut ili z ar as Past as d e Ca dast r o
( SXA)
lProperty I ndi ca se a e nchoi ce n o ut ili z ar as v a ri v ei s a Tel a e a Get s,
some nt e suas propri eda des com os mesmos no mes

- 311 -

ADVPL Completo




Exemplo: Utilizao da funo Enchoice( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da funo Enchoice() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwEnch()

Private cCadastro := " Cadastro de Clientes"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)

Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)



- 312 -

ADVPL Completo



Exemplo (continuao):

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL
RegToMemory("SA1", If(nOpc==3,.T.,.F.))

Enchoice(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/, /*cTexto*/, ;
aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/,/*cTudoOk*/, oDlg, lF3, lMemoria, lColumn,;
caTela, lNoFolder, lProperty)

ACTIVATE MSDIALOG oDlg CENTERED

Return


30.1.2. MsMGet( )

E Sintaxe: MsMGet( ):New( cAlias, nReg, nOpc, aCRA, cLetra, cTexto, aAcho,
aPos, aCpos, nModelo, nColMens, cMensagem, cTudoOk, oWnd, lF3,
lMemoria, lColumn, caTela, lNoFolder, lProperty)

E Retorno: oMsMGet objeto do tipo MsMGet( )
E Parmetros:

cAlias Ta bel a ca dast r a da no Di ci on ri o de Ta b el as ( SX2) que ser
edi t a da
nReg Par met r o n o ut ili z a do
nOpc N mer o da li nha do aRot i na que defi ni r o t i po de edi o
( I ncl uso, Al t er ao, Excl uso, Vi suali z ao)
aCRA Par met r o n o ut ili z a do
cLetra Par met r o n o ut ili z a do
cTexto Par met r o n o ut ili z a do
aAcho Vet or com nome dos ca mpos qu e ser o e xi bi dos. Os ca mpos
de usu ri o se mpr e ser o e xi bi dos se n o e xi st i r no par met ro
u m el e me nt o com a e x pr ess o " NOUSER"
aPos Vet or com coor d e n a das par a cri ao da e nchoi ce no f or ma t o
{ < t op > , < l ef t > , < bot t o m > , < ri ght > }
aCpos Vet or com nome dos ca mpos qu e pod er o ser e di t a dos
nModelo Se f or di f er e nt e d e 1 d esa bili t a e x ecu o d e ga t il hos
est r a ngei ros
nColMens Par met r o n o ut ili z a do
cMensagem Par met r o n o ut ili z a do
cTudoOk Ex pr ess o par a v al i dao da Enchoi ce
oWnd Obj et o ( j a nel a , pai nel , et c. ) ond e a e nchoi ce ser cri a da .
lF3 I ndi ca se a e nchoi ce est a se ndo cri a da e m u ma consul t a F 3
par a ut ili z ar v ari v ei s de me mri a

- 313 -

ADVPL Completo


lMemoria I ndi ca se a e nchoi ce ut i li z ar v ari v ei s de me mri a ou os
ca mpos da t a bel a na edi o
lColumn I ndi ca se a a pr ese nt a o dos ca mpos ser e m f or ma de
col un a
caTela Nome da v ari v el t i po " pri v a t e " que a e nchoi ce utili z ar no
l ugar da propri eda de a Tel a
lNoFolder I ndi ca se a e nchoi ce n o i r ut ili z ar as Past as d e Ca dast r o
( SXA)
lProperty I ndi ca se a e nchoi ce n o ut ili z ar as v a ri v ei s a Tel a e a Get s,
some nt e suas propri eda des com os mesmos no mes

Exemplo: Utilizao do objeto MsMGet( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsMget() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwMsGet()

Private cCadastro := " Cadastro de Clientes"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)
Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

- 314 -

ADVPL Completo


Exemplo (continuao):

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

oDlg := MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)

RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/,;
/*cTexto*/, aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/, /*cTudoOk*/,oDlg,lF3,lMemoria,lColumn, caTela,;
lNoFolder, lProperty)

oDlg:lCentered := .T.
oDlg:Activate()

Return


30.2. Captura de mltiplas informaes (Multi-Lines)

A li ngu a ge m ADVPL per mi t e a utili z ao de basi ca me nt e doi s ti pos de obj et os do t i po gri d, ou
como t a mb m s o conh eci dos : mul ti -li ne :

E Grids digitveis: per mi t e m a vi su ali z ao e ca pt ur a de i nf or maes, co mu me nt e
utili z a dos e m i nt erf aces de ca dast r o e ma nut e n o, t ai s como :

MSGETDB( )
MSGETDADOS( )
MSNEWGETDADOS( )

E Grids no digitveis: per mi t e m some nt e a vi suali z ao de i nf or maes, comu me nt e
utili z a dos como browses do ERP Pr ot he us, t ai s como :

TWBROWSE( )
MAWNDBROWSE( )
MBROWSE( )

Nest e t pi co ser o t r a t a das as gri ds di gi t v ei s di spon v ei s n a li ngu a ge m ADVPL par a o
dese nvol vi me nt o de i nt erf aces d e ca dast r os e ma nut e no d e i nf or maes.

- 315 -

ADVPL Completo



30.2.1. MsGetDB( )

A cl asse de obj et os vi su ai s MsGet DB( ) per mi t e a cri ao de u m gri d di gi t v el com u ma ou mai s
col un as, base a do e m u ma t a bel a t e mpor ri a .

E Sintaxe: MsGetDB( ) :New(nTop, nLeft, nBottom, nRight, nOpc, cLinhaOk,
cTudoOk, cIniCpos, lDelete, aAlter, nFreeze, lEmpty, uPar1, cTRB,
cFieldOk, lCondicional, lAppend, oWnd, lDisparos, uPar2, cDelOk,
cSuperDel)

E Retorno: oMsGetDB objeto do tipo MsGetDB( )

E Parmetros:

nTop Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de superi or do
obj et o que a cont m.
nLeft Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de esquer da do
obj et o que a cont m.
nBottom Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de i nf eri or do obj et o
que a cont m.
nRight

Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de di r ei t a do obj et o
que a cont m.
nOpc Posi o do el e me nt o do v et or aRot i n a que a MsGet DB usa r
como r ef er nci a .
cLinhaOk F uno e x ecut a da pa r a v ali dar o cont e xt o da li nh a a t ual do
a Col s.
cTudoOk F uno e x ecut a da par a v ali dar o cont e xt o ger al da MsGet DB
( t odo a Col s) .
cIniCpos Nome dos ca mpos do t i po ca r act er que ut ili z ar o i ncr e me nt o
a ut om t i co. Est e par met r o de v e ser no f or ma t o + < nome
do pri mei ro ca mpo > + < nome do segundo ca mpo > + . . . .
lDelete Ha bili t a a opo de e xcl ui r li nhas do a Col s. Val or pa dr o
f al so.
aAlter Vet or com os ca mpos que pod er o ser al t er a dos.
nFreeze I ndi ca qu al col una n o fi car a cong el a da n a e xi bio.
lEmpty Ha bili t a v ali dao da pri mei r a col un a do a Col s par a est a n o
poder est ar v a zi a . Val or pa dr o f al so.
uPar1 Par met r o r eser v a do.
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo.
cTRB Ali as da t a bel a t e mpor ri a .
lCondicional Reser v a do
lAppend I ndi ca se a MsGet DB i r a cri ar u ma li nha e m br a nco
a ut oma t i ca me nt e qua ndo f or i ncl uso.
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.
lDisparos I ndi ca se ser ut ili z a do o Di ci on ri o de Da dos par a consul t a
pa dr o, i ni ci ali z ao pa dr o e ga t i l hos.
uPar2 Par met r o r eser v a do.
cSuperDel - F un o e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e > .
oWnd Obj et o no qu al a MsGet DB ser cri a da .




- 316 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi suali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i n a , n Op o, nAcesso } , a onde :
n Opo segue o pa dr o do ERP Prot h e us pa r a :
1- Pesqui sar
2- Vi suali z ar
3- I ncl ui r
4- Al t er ar
5- Excl ui r
aHeader Vet or com i nf or maes das col unas no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nh a f oi e xcl u da .


lRefresh Vari v el ti po l gi ca par a uso r eser v a do.


- 317 -

ADVPL Completo



E Variveis pblicas:

nBrLin I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i dao na muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsGet DB co m a t a bel a e posi ci on a n a pri mei r a
li nha .

Exemplo: Utilizao do objeto MsGetDB( )


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Funo | GETDBSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsGetDB() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDbSA1()

Local nI
Local oDlg
Local oGetDB
Local nUsado := 0
Local aStruct := {}

Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")


- 318 -

ADVPL Completo


Exemplo (continuao):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
AADD(aStruct,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3->X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
DbSkip()
End

AADD(aStruct,{"FLAG","L",1,0})

cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)

oDlg := MSDIALOG():New(000,000,300,400, MsGetDB SA1,,,,,,,,,.T.)

oGetDB := MsGetDB():New(05,05,145,195,3,"U_LINHAOK", "U_TUDOOK", "+A1_COD", ;
.T.,{"A1_NOME"},1,.F.,,cCriaTrab,"U_FIELDOK",,.T.,oDlg, .T., ,"U_DELOK",;
"U_SUPERDEL")

oDlg:lCentered := .T.
oDlg:Activate()
DbSelectArea(cCriaTrab)
DbCloseArea()

Return

User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()
ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.



- 319 -

ADVPL Completo



30.2.2. MsGetDados( )

A cl asse de obj et os vi su ai s MsGet Da dos( ) per mi t e a cri ao de u m gri d di gi t v el com u ma ou
mai s col unas, base a do e m u m a rr a y.

E Sintaxe: MsGetDados( ):New( nTop, nLeft, nBottom, nRight, nOpc, cLinhaOk,
cTudoOk, cIniCpos, lDelete, aAlter, uPar1, lEmpty, nMax, cFieldOk,
cSuperDel, uPar2, cDelOk, oWnd)

E Retorno: oMsGetDados objeto do tipo MsGetDados( )

E Parmetros:

nTop Di st a nci a e nt r e a MsGe t Da dos e o e xt r e mi da de superi or do
obj et o que a cont m.
nLeft Di st a nci a e nt r e a MsGe t Da dos e o e xt r e mi da de esqu er da do
obj et o que a cont m.
nBottom Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de i nf eri or do
obj et o que a cont m.
nRight

Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de di r ei t a do
obj et o que a cont m.
nOpc Posi o do el e me nt o do v et or aRot i n a que a MsGet Da dos
usar como r ef er e nci a .
cLinhaOk F uno e x ecut a da par a v ali dar o cont e xt o da li nh a a t u al do
a Col s.
cTudoOk F uno e x ecut a da p ar a v al i dar o cont e xt o g er al da
MsGet Da dos ( t odo a Col s) .
cIniCpos Nome dos ca mpos do t i po ca r act er qu e ut ili z ar o i ncr e me nt o
a ut om t i co. Est e par met r o de v e ser no f or ma t o + < nome
do pri mei ro ca mpo > + < nome do segundo ca mpo > + . . . .
lDelete Ha bili t a e xcl ui r li nhas do a Col s. Val or pa dr o f al so.
aAlter Vet or com os ca mpos que pod er o ser al t er a dos.
uPar1 Par met r o r eser v a do.
lEmpty Ha bili t a v ali dao da pri mei r a col un a do a Col s par a est a no
poder est ar v a zi a . Val or pa dr o f al so.
nMax N mer o m xi mo de l i nhas per mi t i das. Val or pa dr o 99.
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo.
cSuperDel F uno e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e > .
uPar2 Par met r o r eser v a do.
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.
oWnd Obj et o no qu al a MsGet Da dos ser cri a da .


- 320 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi suali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i na , n Op o, nAcesso } , a onde :
n Opo segue o pa dr o do ERP Prot h e us pa r a :
6- Pesqui sar
7- Vi su ali z ar
8- I ncl ui r
9- Al t er ar
10- Excl ui r
aHeader Vet or com i nf or maes das col unas no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nha f oi e xcl u da .


lRefresh Vari v el ti po l gi ca par a uso r eser v a do.


- 321 -

ADVPL Completo



E Variveis pblicas:

N I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i dao na muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsGet Da dos com a t a bel a e posi ci on a n a pri mei r a
li nha .
Hide( ) Ocul t a a MsGet Da dos.
Show( ) Most r a a MsGet Da dos.


Exemplo: Utilizao do objeto MsGetDados( )


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Funo | GETDADOSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MSGETADOS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDadoSA1()

Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}

Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")


- 322 -

ADVPL Completo



Exemplo (continuao):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
EndIf
DbSkip()
End

AADD(aCols,Array(nUsado+1))

For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next

aCols[1][nUsado+1] := .F.

oDlg := MSDIALOG():New(000,000,300,400, MsGetDados SA1,,,,,,,,,.T.)

oGetDados := MsGetDados():New(05, 05, 145, 195, 4, "U_LINHAOK", "U_TUDOOK",;
"+A1_COD", .T., {"A1_NOME"}, , .F., 200, "U_FIELDOK", "U_SUPERDEL",,;
"U_DELOK", oDlg)

oDlg:lCentered := .T.
oDlg:Activate()

Return

User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()
ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.



- 323 -

ADVPL Completo



30.2.3. MsNewGetDados( )

A cl asse de obj et os vi su ai s MsNe wGet Da dos( ) per mi t e a cri ao de u m gri d di gi t v el com u ma
ou mai s col un as, base a do e m u m a rr a y .

E Sintaxe: MsNewGetDados( ) :New(nSuperior, nEsquerda ,nInferior, nDireita,
nOpc, cLinOk, cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,
cFieldOk, cSuperDel, cDelOk, oDLG, aHeader, aCols)

E Retorno: oMsGetDados objeto do tipo MsNewGetDados( )

E Parmetros:

nSuperior Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de sup eri or
do obj et o qu e a cont e m
nEsquerda Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de esquer da
do obj et o qu e a cont e m
nInferior Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de i nf eri or do
obj et o que a cont e m
nDireita Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de di r ei t a do
obj et o que a cont e m
nOpc Oper a o e m e x ecu o : 2- Vi suali z ar, 3- I ncl ui r, 4- Al t er ar , 5-
Excl ui r
cLinOk F uno e x ecut a da par a v ali dar o cont e xt o da l i nh a a t ual do
a Col s
cTudoOk F uno e x ecut a da par a v ali dar o cont e xt o g er al da
MsNe wGet Da dos ( t odo a Col s)
cIniCpos Nome dos ca mpos do t i po ca r act er que ut i li z ar o i ncr e me nt o
a ut om t i co.
aAlterGDa Ca mpos al t er v ei s da Get Da dos
nFreeze Ca mpos est t i cos na Ge t Da dos, par t i ndo se mpr e da posi o
i ni ci al da get da dos a onde :
1- Pri mei ro ca mpo congel a do
2- Pri mei ro e segundo ca mpos cong el a dos. . .
nMax N mer o m xi mo de l i nhas per mi t i das. Val or pa dr o 99
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo
cSuperDel F uno e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e >
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s
oDLG Obj et o no qual a MsNe wGet Da dos ser cri a da
aHeader Arr a y a ser t r a t a do i nt er n a me nt e na MsNe wGet Da dos co mo
a He a d er
aCols Arr a y a ser t r a t a do i nt er n a me nt e na MsNe wGet Da dos co mo
a Col s


- 324 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi su ali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i n a , n Op o, nAcesso } , a onde :

n Opo segue o pa dr o do ERP Prot h e us pa r a :
1- Pesqui sar
2- Vi su ali z ar
3- I ncl ui r
4- Al t er ar
5- Excl ui r
aHeader Vet or com i nf or maes das col unas no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nha f oi e xcl u da .

lRefresh Vari v el ti po l gi ca par a uso r eser v a do.

- 325 -

ADVPL Completo



E Variveis pblicas:

N I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i dao na muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsNe wGet Da dos com a t a bel a e posi ci on a na
pri mei r a li nh a .
Hide( ) Ocul t a a MsNe wGet Da dos.
Show( ) Most r a a MsNe wGet Da dos.

Exemplo: Utilizao dos objetos MsNewGetDados( ) e MsMGet( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao dos objetos |
| | MsNewGetDados() e MsMGet() combinados |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGetD()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}


- 326 -

ADVPL Completo



Exemplo (continuao):

Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.;
cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

- 327 -

ADVPL Completo



Exemplo (continuao):

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,;
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)
RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
/*cTudoOk*/, oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,;
lProperty)

oGetD:= MsNewGetDados():New(nSuperior, nEsquerda, nInferior, nDireita,;
nOpc,cLinOk,cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk,;
cSuperDel,cDelOk, oDLG, aHeader, aCols)

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()},{||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()
Return

- 328 -

ADVPL Completo



30.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados( )

Conf or me vi st o no t pico sobr e defi ni o das propri eda des de cor es par a os compone nt es
vi su ai s, ca da obj et o possui car act er st i cas que de v e m ser r espei t a das par a corr et a ut i li z ao
dest e r ecurso.

E Atributos adicionais:

lUseDefaultColors At ri but o que de v er ser defi ni do como . F . par a que as
al t er aes n as cor es sej a m per mi ti das.


E Mtodos adicionais:

SetBlkBackColor Mt odo que defi ne a cor que ser ut ili z a da par a ca da li nh a do
gri d. No n ecess ri o ut ili z ar o mt odo Refr esh( ) a ps a
defi ni o da cor por est e mt odo.

E Aparncia:






- 329 -

ADVPL Completo



Exemplo: Definindo cores personalizadas para o objeto MsNewGetDados( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao dos objetos |
| | MsNewGetDados() e MsMGet() combinados e tratamento de cores |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGtCl()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0

Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999


- 330 -

ADVPL Completo


Exemplo (continuao):

Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3-
>X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End


- 331 -

ADVPL Completo



Exemplo (continuao):

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado

IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF

Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)

RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,;
aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)

oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,;
cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,;
cDelOk, oDLG, aHeader, aCols)

// Tratamento para definio de cores especficas,
// logo aps a declarao da MsNewGetDados

oGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()

Return


- 332 -

ADVPL Completo



Exemplo (continuao):

// Funo para tratamento das regras de cores para a grid da MsNewGetDados

Static Function GETDCLR(aLinha,nLinha,aHeader)

Local nCor2 := 16776960 // Ciano - RGB(0,255,255)
Local nCor3 := 16777215 // Branco - RGB(255,255,255)
Local nPosProd := aScan(aHeader,{|x| Alltrim(x[2]) == "C6_PRODUTO"})
Local nUsado := Len(aHeader)+1
Local nRet := nCor3

If !Empty(aLinha[nLinha][nPosProd]) .AND. aLinha[nLinha][nUsado]
nRet := nCor2
ElseIf !Empty(aLinha[nLinha][nPosProd]) .AND. !aLinha[nLinha][nUsado]
nRet := nCor3
Endif

Return nRet





























- 333 -

ADVPL Completo



30.3. Barras de botes

A li ngu a ge m ADVPL per mi t e a i mpl e me nt ao de bar r as d e bot es utili z a ndo f unes pr -
defi ni das dese nvol vi das com o obj et i vo de f acili t ar su a ut ili z a o, ou a t r a v s da ut ili z ao
di r et a dos compone nt es vi suai s di spon v ei s. De nt r e os r ecursos da li ngu a ge m que pode m ser
utili z a dos com est a fi nali da de ser o a bor da dos :

E Funo EnchoiceBar: Si nt a x e t r a di ci onal ment e utili z a da e m ADVPL, a qu al no
r et or n a u m obj et o par a a a pli cao ch a ma dor a ;

E Classe TBar: Cl asse do obj et o TBar ( ) , a qual per mi t e a i nst a nci ao di r et a de u m
obj et o do t i po bar r a d e bot es superi or, t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .

E Classe ButtonBar: Cl asse do obj et o But t onBa r ( ) , a qual per mi t e a i nst a nci ao di r et a
de u m obj et o bar r a d e bot es g e nri co, o qu al pode ser ut ili z a do e m qu al quer posi o
da t el a , t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .


30.3.1. EnchoiceBar( )

F uno que cri a u ma barr a d e bot es no f or ma t o pa dr o ut ili z a do pel as i nt erf aces de ca dast r o
da a pli cao Prot he us.

Est a bar r a possui os bot es pa dres pa r a confi r mar ou ca ncel ar a i nt erf ace e ai nda per mi t e a
a di o de bot es a di ci on ai s com a ut ili z ao do par met r o aButtons.


E Sintaxe:


EnchoiceBar( oDlg, bOk, bCancel, lMsgDel, aButtons, nRecno, cAlias)


E Parmetros:

oDlg Di al og onde i r cri ar a b arr a de bot es
bOk Bl oco de cdi go a ser e x ecut a do no bot o Ok
bCancel Bl oco de cdi go a ser e x ecut a do no bot o Ca ncel ar
lMsgDel Exi be di al og par a confi r mar a e xcl uso
aButtons
Arr a y cont e ndo bot es a di ci on ai s.
a Arr a y[ n] [ 1] - > I ma g e m do bot o
a Arr a y[ n] [ 2] - > bl oco d e cdi go cont e ndo a a o do bot o
a Arr a y[ n] [ 3] - > t t ul o do bot o
nRecno Regi st ro a ser posi ci ona do a ps a e x ecuo do bot o Ok .
cAlias
Ali as do r e gi st r o a ser posi ci on a do a ps a e x ecuo do bot o
Ok. Se o pa r met r o nRecno f or i nf or ma do, o cAl i as passa ser
obri ga t ri o.

E Aparncia:





- 334 -

ADVPL Completo


Exemplo: Utilizao da funo EnchoiceBar( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da funo |
| | EnchoiceBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function DEnchBar()
Local oDlg, oBtn
Local aButtons := {}

DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF;
oMainWnd

AADD( aButtons, {"HISTORIC", {|| TestHist()}, "Histrico...",;
"Histrico",{|| .T.}} )

@ -15,-15 BUTTON oBtn PROMPT "..." SIZE 1,1 PIXEL OF oDlg

ACTIVATE MSDIALOG oDlg ;
ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))

Return















- 335 -

ADVPL Completo



30.3.2. TBar( )

Cl asse d e obj et os vi su ai s que per mi t e a i mpl e me nt ao de u m compone nt e do t i po barr a d e
bot es pa r a a par t e sup eri or de u ma j a nel a pr e vi a me nt e defi ni da .

E Sintaxe: New(oWnd, nBtnWidth, nBtnHeight, l3D, cMode, oCursor, cResource,
lNoAutoAdjust)

E Retorno: oTBar objeto do tipo TBar( )

E Parmetros:

oWnd
Obj et o, opci onal . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
nBtnWidth Nu mri co, opci on al . Lar gur a do bot o cont i do n a barr a
nBtnHeight Nu mri co, opci on al . Al t ur a do bot o cont i do n a barr a
l3D Lgi co, opci on al . Defi ne t i po da barr a
cMode No ut i li z a do.
oCursor
Obj et o, opci on al . Defi ne Cursor ao posi ci onar o mouse sobr e a
barr a .
cResource
Car act er , opci on al . I ma ge m do r ecurso a ser i nseri do como
f undo da bar r a .
lNoAutoAdjust Lgi co.

E Aparncia:





Exemplo: Utilizao da funo EnchoiceBar( )


#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------------
| Funo | TSTBAR | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function TstTBar()
Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

- 336 -

ADVPL Completo



Exemplo (continuao):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;
{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;
{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;
{||},oTBar,'Preo' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return



30.3.3. ButtonBar

A si nt a x e ButtonBar a f or ma cl ssi ca utili z ada na li ngu a ge m ADVPL par a i mpl e me nt ar u m
obj et o da cl asse TBar ( ) , o qual possui as car act er st i cas me nci ona das no t pi co a nt eri or .

E Sintaxe:


DEFINE BUTTONBAR oBar SIZE nWidth, nHeight 3D MODE OF oDlg
CURSOR


E Retorno: ( ).

E Parmetros:

oBar Obj et o do t i po TBa r ( ) que ser cri a do com a ut i li z ao da
si nt a x e But t onBar ( ) .
nWidth Nu mri co, opci on al . Lar gur a do bot o cont i do n a barr a .
nHeight Nu mri co, opci on al . Al t ur a do bot o cont i do n a barr a .
3D Se defi ni do h a bili t a a visu ali z ao e m 3 D da ba rr a d e bot es.
oDlg Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
MODE Defi ne a f or ma de ori e nt ao do obj et o But t onBar ut ili z a ndo
os segui nt es t er mos pr - defi ni dos :
TOP, BOTT OM, FLOAT

CURSOR Obj et o, opci on al . Defi ne Cursor ao posi ci on ar o mouse sobr e
a barr a .


- 337 -

ADVPL Completo


A si nt a x e But t onBar r equ er a a di o dos bot es como r ecursos a di ci on ai s da barr a
pr e vi a me nt e defi ni da utili z a ndo a si nt a x e a bai xo :

E Botes: BUTTON RESOURCE

E Sintaxe adicional:


DEFINE BUTTON RESOURCE cBitMap OF oBar ACTION cAcao TOOLTIP
cTexto


E Parmetros:

cBitMap Nome da i ma ge m di spon v el n a a pli cao.
oBar Obj et o do t i po TBa r ( ) no qual o bot o ser a di ci on a do.
cAcao F uno ou l i st a de e x pr esses qu e d et er mi na a ao que ser
r e al i z a da pel o bot o.
cTexto Te xt o no est il o t ool t i p t e xt qu e ser e xi bi do qu a ndo o
cursor do mouse f or posi ci on a do sobr e o bot o n a barr a de
f err a me nt as.

E Aparncia:





Exemplo: Utilizao da sintaxe ButtonBar


#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------
| Funo | TstBBar | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function TstBBar()

Local oDlg
Local oBtn1
Local oBtn2

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - BUTTONBAR',,,,,,,,,.T.)

DEFINE BUTTONBAR oBar SIZE 25,25 3D TOP OF oDlg

- 338 -

ADVPL Completo



Exemplo (continuao):

DEFINE BUTTON RESOURCE "S4WB005N" OF oBar ACTION NaoDisp() TOOLTIP "Recortar"
DEFINE BUTTON RESOURCE "S4WB006N" OF oBar ACTION NaoDisp() TOOLTIP "Copiar"
DEFINE BUTTON RESOURCE "S4WB007N" OF oBar ACTION NaoDisp() TOOLTIP "Colar"
DEFINE BUTTON oBtn1 RESOURCE "S4WB008N" OF oBar GROUP;
ACTION Calculadora() TOOLTIP "Calculadora"

oBtn1:cTitle:="Calc"
DEFINE BUTTON RESOURCE "S4WB009N" OF oBar ACTION Agenda() TOOLTIP "Agenda"
DEFINE BUTTON RESOURCE "S4WB010N" OF oBar ACTION OurSpool() TOOLTIP "Spool"
DEFINE BUTTON RESOURCE "S4WB016N" OF oBar GROUP;
ACTION HelProg() TOOLTIP "Ajuda"

DEFINE BUTTON oBtn2 RESOURCE "PARAMETROS" OF oBar GROUP;
ACTION Sx1C020() TOOLTIP "Parmetros"

oBtn2:cTitle:="Param."

DEFINE BUTTON oBtOk RESOURCE "FINAL" OF oBar GROUP;
ACTION oDlg:End()TOOLTIP "Sair"

oBar:bRClicked := {|| AllwaysTrue()}
oDlg:lCentered := .T.
oDlg:Activate()

Return





















- 339 -

ADVPL Completo



30.3.4. Imagens pr-definidas para as barras de botes

Conf or me me nci ona do nos t pi cos a nt eri or es, os bot es vi suai s do t i po bar r a d e bot es
per mi t e m a d efi ni o de i t e ns com aes e i ma ge ns vi ncul a das.

De nt r e os obj et os e f unes me nci on a dos, f oi ci t a da a Enchoi ce Bar ( ) , a qu al per mi t e a a di o
de bot es a di ci on ai s a t r a v s do par met r o aButton, se ndo que os i t e ns dest e ar r a y d e v e m
possui r o segui nt e f or ma t o :

E Sintaxe: AADD( a But t ons, { cBi t Ma p, bAca o, cTe x t o } )

E Estrutura:

cBitMap
Nome da i ma ge m pr - d efi ni da e xi st e nt e n a a pl ica o ERP que
ser vi ncul a da ao bot o.
bAcao
Bl oco de cdi go que d efi ne a ao qu e ser e x ecut a da com a
utili z ao do bot o.
cTexto
Te xt o no est il o t ool t i p t e xt qu e ser e xi bi do qu a ndo o cursor
do mouse f or posi ci on a do sobr e o bot o n a ba r r a de
f err a me nt as.

E Alguns BitMaps disponveis:


DESTINOS

DISCAGEM

EDIT

EDITABLE

EXCLUIR

FORM

GRAF2D

GRAF3D

LINE

NOTE

OBJETIVO

OK

PENDENTE

PRECO

PRODUTO

S4SB014N

S4WB001N

S4WB005N

S4WB006N

S4WB007N

S4WB008N

S4WB009N

S4WB010N

S4WB011N

S4WB013N

S4WB014A

S4WB016N

SIMULACA

VENDEDOR

USER

E Exemplo:


AADD(aButtons,{"USER",{||AllwaysTrue()},"Usurio"})



- 340 -

ADVPL Completo



APNDICES

BOAS PRTICAS DE PROGRAMAO

31. Arredondamento

Al gu mas oper aes nu mri cas pod e m ca usar di f er e nas d e ar r edonda me nt o. I sso ocor r e
de vi do a di f er e nas no ar ma z e n a me nt o de v a ri v ei s nu mri cas nos di v ersos pr ocessa dor es,
di f er e na est a , i ncl usi v e, pr ese nt e no ADVPL, mesmo a nt es do sur gi me nt o do Pr ot he us.

Par a e vi t ar esses probl e mas de a rr edonda me nt o, d e v e ser ut ili z a da a f uno Round( ) ,
pri nci pal me nt e a nt es d e r e ali z ar u ma compa r ao e a nt es de se ut ili z ar a f uno I nt ( ) .

Desse modo, assegur a - se que o r esul t a do ser cor r et o i ndepe nde nt e me nt e do pr ocessa dor ou
pl a t af or ma .

Exemplo 01:


If (Valor/30) == 50 // pode ser falso ou invlido
If Round(Valor/30, 0) == 50 // correto


Exemplo 02:


M->EE8_QTDEM1 := Int(M->EE8_SLDINI/M->EE8_QE) // pode ser falso ou invlido
M->EE8_QTDEM1 := Int(Round(M->EE8_SLDINI/M->EE8_QE,10)) // correto



32. Utilizao de Identao

obri ga t ri a a ut ili z ao da i de nt ao, poi s t or na o cdi go mui t o mai s l eg v el . Vej a os
e x e mpl os a bai xo :


While !SB1->(Eof())
If mv_par01 == SB1->B1_COD
dbSkip()
Loop
Endif
Do Case
Case SB1->B1_LOCAL == 01 .OR. SB1->B1_LOCAL == 02
TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)
Case SB1->B1_LOCAL == 03
TrataDefeito(SB1->B1_COD)
OtherWise
TrataCompra(SB1->B1_COD, SB1->B1_LOCAL)
EndCase
dbSkip()
EndDo


- 341 -

ADVPL Completo




A utili z ao da i de nt ao segui ndo as est r ut ur as de cont r ol e de fl uxo ( whil e, I F, caso et c. )
t or na a compr e e ns o do cdi go mui t o mai s f ci l :


While !SB1->(Eof())

If mv_par01 == SB1->B1_COD
dbSkip()
Loop
Endif

Do Case
Case SB1->B1_LOCAL == 01 .OR. SB1->B1_LOCAL == 02
TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)

Case SB1->B1_LOCAL == 03
TrataDefeito(SB1->B1_COD)

OtherWise
TrataCompra(SB1->B1_COD, SB1->B1_LOCAL)
EndCase
dbSkip()

EndDo


Par a i de nt ar o cdi go utili z e a t ecl a < TAB > e n a f err a me nt a DEV- St udi o, a qu al pode ser
confi gur a da a t r a v s da op o Pr ef er nci as :



- 342 -

ADVPL Completo




33. Capitulao de Palavras-Chave

Uma conv e n o a mpl a me nt e ut i li z a da a de ca pi t ul ar as pal a vr as ch a v es, f unes, v ari v ei s e
ca mpos ut ili z a ndo u ma combi n ao d e ca r act er es e m mai scul o e mi nscul o, vi sa ndo f acili t ar
a l ei t ur a do cdi go f ont e . O cdi go a segui r :


Local ncnt while ( ncnt+ + < 10 ) ntotal + = ncnt * 2 enddo


Fi cari a mel hor com as p al a vr as ch a v es e v ari v ei s ca pi t ul a das :


Local nCnt While ( nCnt+ + < 10 ) nTotal + = nCnt * 2 EndDo




Par a f unes d e ma ni pul ao de da dos qu e comece m por db, a ca pi t ul ao
s ser ef et u a da a ps o db :

E dbSeek( )
E dbSelectArea( )


33.1. Palavras em maisculo

A r egr a ut i li z ar car act er es e m mai scul o par a :

E Constantes:


# defi ne NUMLI NES 60 # defi ne NUMPAGES 100 0


E Variveis de memria:


M- > CT2_CRC ONV M- > CT2_MC ONVER : = Cri a Var ( " CT2_C ONVER" )


E Campos:


SC6- > C6_NUMPED


E Querys:


SELECT * FROM. . .


- 343 -

ADVPL Completo



34. Utilizao da Notao Hngara

A not ao hngar a consi st e e m a di ci on ar os pr efi xos a os nomes d e v ari v ei s, de modo a
f aci l me nt e se i de nti fi car se u t i po. I st o f acili t a n a cri ao de cdi gos- f ont e e xt e nsos, poi s
usa ndo a Not a o Hngar a , v oc n o pr eci sa fi car o t e mpo t odo vol t a ndo defi ni o de u ma
v ari v el par a se l e mbr a r qu al o t i po de da dos que d e v e ser col oca do nel a . Vari v ei s de v e m
t er u m pr efi xo d e Not ao Hngar a e m mi nscul as, segui do de u m nome que i de nt i fi que a
f uno da v ari v el , se ndo que a i ni ci al de ca da pal a vr a de v e ser mai scul a .
obri ga t ri a a ut ili z ao dest a not ao pa r a no me ar v a ri v ei s.
Notao Tipo de dado Exemplo
a Arr a y a Val or es
b Bl oco de cdi go bSe e k
c Car act er cNome
d Da t a dDa t a Base
l Lgi co l Conti nu a
n Nu mri co nVal or
o Obj et o oMai n Wi ndow
x I ndefi ni do x Cont e udo

35. Tcnicas de programao eficiente

Par a o d ese nvol vi me nt o de si st e mas e a pr ogr a ma o de r ot i n as, se mpr e esp er a do que
qu al quer cdi go escri t o sej a :

O Funcionalmente correto
O Eficiente
O Legvel
O Reutilizvel
O Extensvel
O Portvel

Aps a nos de e x peri nci a na utili z ao de li ngua ge ns pa dr o x Base e do dese nvol vi me nt o da
li ngua ge m ADVPL, al gu mas t cni cas par a u ma progr a ma o ot i mi z a da e efi ci e nt e f or a m
r econheci das. A utili z ao das t cni cas a segui r, vi sa buscar o m xi mo a pr ov ei t a me nt o dos
r ecursos da l i ngua ge m com o obj et i vo de cri ar progr a mas com est as ca r act er st i cas.

Criao de funes segundo a necessidade

Obser v e o cdi go de e x e mpl o :


User Function GetAnswer(lDefault)
Local lOk
lOk := GetOk(lDefault)
If lOk
Return .T.
Else
Return .F.
Endif
Return nil


- 344 -

ADVPL Completo




Ut ili z a ndo- se a pe n as o cri t ri o " a f uno f unci on a corr et a me nt e?" , a f uno Get Answer
perf ei t a . Receb e u m par met ro l gi co com a r espost a pa dr o e r e t or na u m v al or l gi co
depe nde nt e da op o escol hi da pel o usu ri o e m u ma f uno d e di l ogo " si m/ n o " desi gna da
par a i sso. Pod e e nt r et a nt o ser mel hor a da , pa r t i cul ar me nt e se efi ci nci a f or consi der a da como
u m cri t ri o par a u m cdi go mel hor. Efi ci nci a t i pi ca me nt e e nvol v e a utili z ao de poucos
r ecursos de m qui n a , poucos ch a ma das d e f unes ou t or n ar mai s r pi do u m pr ocesso.

Segundo esse r aci oc ni o, pod eri a se pr oduzi r o segui nt e cdi go :


User Function GetAnswer(lDefault)
Return If( GetOk(lDefault), .T., .F.)


O cdi go aci ma ai nda pode ser a pri mor a do conf or me a bai xo :


User Function GetAnswer(lDefault)
Return GetOk(lDefault)


Com a ot i mi z ao do cdi go da f uno Get Answer ( ) , pod e f aci l me nt e v eri fi car que a mesma
n o r e al i z a n a da a di ci onal cha ma da de Get Ok( ) , pod e ndo ser subst i t u da por u ma ch a ma da
di r et a dest a , cont i nu a ndo a f unci on ar cor r et a me nt e.

Codificao auto- documentvel

Ne nhu m come nt ri o subst i t ui u m cdi go cl ar a me nt e escri t o, e est e n o u m aci de nt e.
Consi der e o e x e mpl o :


cVar := " " // 11 espaos


O t a ma nho da v a ri v el cVar no e vi de nt e por si s e n o f aci l me nt e v eri fi ca do. Est es
mesmos 10 espaos est ari a m mai s bvi os e ai nda assi m gar a nti dos se a i nst r uo f osse escri t a
como :


cVar := Space(11)


O mesmo pri nc pi o pode ser a pli ca do par a qu al quer st ri ng l onga de car act er es r epet i dos. A
f uno Repli ca t e pod e ser ut ili z a da como a segui r :


cVar := Replicate( "*", 80 )


Est e t i po de progr a mao d ei x a o cdi go f ci l de di gi t ar, f ci l de l er e mai s fl e x v el .



- 345 -

ADVPL Completo



Utilizao de solues simples

Si mpli ci da de n a cri ao de i nst r ues t or n a a progr a ma o e a t mesmo a e x ecu o mai s
r pi da . Consi der e a l i nha de cdi go :


If nVar > 0 .Or. nVar < 0


Se o v al or da v ari v el nVar f or i gu al a z ero ( 0) no mome nt o da e x ecu o dest a l i nha de
cdi go, a mbas as comp ar aes separ a das pel o oper a dor l gi co . Or. ser o ef et u a das : Aps ser
a v ali a da , a pri mei r a compar ao i r f al h ar. A segunda compar a o ser e nt o a v ali a da e
f al har t a mb m. Como r esul t a do, o cdi go e xi st e nt e de nt ro da est r ut ur a de fl uxo I f n o ser
e x ecut a do. Tal cdi go some nt e ser e x ecut a do qu a ndo o v al or d est a v ari v el f or mai or OU
me nor do que z ero. Ou sej a , se mpr e que f or DI F ERENTE de z ero, o que t or na a li nh a a segui r
mai s efi ci e nt e :


If nVar != 0


Est e t i po de al t er ao t or na o cdi go mai s l eg v el e o pr ocessa me nt o mai s r pi do, e vi t a ndo a
a v ali ao de i nst r ues desnecessa ri a me nt e.

Exi st e m out r as si t u aes onde a si mpli fi cao pode ser ut ili z a da . A e x pr ess o de a v al i ao a
segui r :


If cVar == "A" .Or. cVar == "B" .Or cVar == "C" .Or. cVar == "D"


Pode ser subst i t u do pel o op er a dor d e cont e n o :


If cVar $ "ABCD"


Opo por flexibilidade

A mel hor sol uo a quel a que e nvol v e o probl e ma i medi a t o e pr e vi ne probl e mas no f ut ur o.
Consi der e o e x e mpl o :


@nRow,nCol PSAY cVar Picture "!!!!!!!!!!!!!!!!!!!!"


Excet o cont a ndo- se os car act er es, n o e xi st e ma nei r a de sa ber se o n mero d e car act er es d e
e xcl a mao o espe r a do. Enqua nt o i st o u m probl e ma , e xi st e m al go mai s gr a v e . A e x pr ess o
de pi ct ur e est t i ca . Se no f ut ur o f or n ecessri o a j ust ar o t a ma nho da v a ri v el cVar, ser
necess ri o l ocali z ar t odos os l ugar es no cdi go ond e est a msca r a de pi ct ur e est se ndo
utili z a da par a a j ust e ma nu al .




- 346 -

ADVPL Completo



Exi st e u ma opo de sol uo de a ut o- a j ust e di spon v el que f cil de di gi t ar e t e m a ga r a nt i a
de e x ecut ar a t ar ef a i gual me nt e ( t or n ar t odos os ca r act er es mai scul os) :


@nRow,nCol PSAY cVar Picture "@!"


Opo da praticidade ao drama

Se a sol uo pa r ece co mpl e x a , pr ov a v el me nt e por qu e o ca mi nho escol hi do est l e v a ndo a
i sso. De v e - se se mpr e se per gunt ar por que al gu m dese nv ol v eri a u ma li ngu a ge m que r equi si t e
t a nt os coma ndos compli ca dos par a f a z er al go si mpl es. Na gr a nde mai ori a dos casos, e xi st e
u ma sol uo mai s si mpl es. O e x e mpl o a bai xo d ei x a i sso be m cl aro :


@ 10,25 Say Substr(cCep,1,5) + "-" + Substr(cCep,6,3) Picture "!!!!!!!!!"


Est e cdi go pod e ser escri t o de u ma f or ma mui t o mai s si mpl es, conf or me d e monst r a do a bai xo :


@ 10,25 Say cCep Picture "@R 99999-999"


Utilizao de operadores de incremento / decremento

Ut ili z a dos de vi da me nt e, os op er a dor es de i ncr e me nt o e d ecr e me nt o t or n a m o cdi go mai s f cil
de l er e possi v el me nt e u m pouco mai s r pi dos. Ao cont r ri o de escr e v e r a di es si mpl es como :


nVar := nVar + 1
nVar := nVar -1


Pode- se escr e v -l as assi m:


++nVar
--nVar


De v e- se a pe n as t oma r cui da do com a pr eced nci a dest es oper a dor es, poi s o " + + " ou o " - - "
pode m a pa r ecer a nt es ou depoi s de u ma v a ri v el , e e m al guns casos qu a ndo a v ari v el f or
utili z a da de nt ro de u ma e x pr ess o, a pr efi x ao ou sufi x ao d est es op er a dor es af et a r o
r esul t a do. Par a mai or es det al hes, consul t e a docu me nt a o de op er a dor es da l i ngu a ge m
ADVPL.


- 347 -

ADVPL Completo



Evitar passos desnecessrios

Exi st e u ma di f er e na e nt r e u m bom h bi t o e per da d e t e mpo. Al gu mas v e z es est es concei t os
pode m est ar mui t o pr xi mos, mas u m modo de di f er e nci -l os bal a nce ar os b e nef ci os d e
r e al i z ar al gu ma ao cont r a o pr obl e ma que r esul t ari a se no f osse e x ecut a da . Obser v e o
e x e mpl o :


Local nCnt := 0
For nCnt := 1 To 10
<cdigo>
Next nCnt


I ni ci ali z ar a v ari v el no mome nt o da decl ar a o n o u m probl e ma . Se o 0 f osse necessri o
no e x e mpl o, t eri a si do til a i ni ci ali z ao n a decl ar ao. Mas nest e caso a est r ut ur a de
r ep et i o For...Next a t ri bui o se u v al or i medi at a me nt e com 1, por t a nt o n o houv e ga nho e m
a t ri bui r a v ari v el com 0 no comeo.

Nest e e x e mpl o n o h ne nhu m pont o n ega t i vo e n a da er r a do ocorr er se a v a ri v el n o f or
i ni ci ali z a da , por t a nt o aconsel h v el e vi t ar est e t i po d e i ni ci ali z ao, poi s no t or n a o cdi go
mai s segur o e t a mb m n o e x pr essa a i nt e no do cdi go mai s cl ar a me nt e.

Por m not e est e e x e mpl o, onde a v a ri v el no i ni ci ali z a da :


Local nCnt
While ( nCnt++ < 10 )
<cdigo>
EndDo


E m ADVPL, v ari v ei s no i ni ci ali z a das se mpr e t e m se u v al or cont e ndo nul o ( nil ) a pri nc pi o, o
que f ar com qu e u ma e xceo e m t e mpo de e x ecuo acont ea qua ndo a i nst r uo de
r ep et i o whi l e f or e x ecut a da .

Di f er e nt e me nt e do pri mei ro e x e mpl o, onde a i ni ci ali z ao da v ari v el no f a zi a di f er e na
al gu ma , nest e segundo e x e mpl o a i ni ci ali z ao a bsol ut a me nt e necessri a . De v e - se pr ocur a r
i ni ci ali z ar v ari v ei s nu mri cas com z er o ( 0) e v ari v ei s car act er com st ri ng nul a ( " " ) a pe n as
qu a ndo r e al me nt e necessri o.




- 348 -

ADVPL Completo




Utilizao de alternativas

Qu a ndo se est t r a bal h a ndo e m u ma si mpl es r ot i na , de v e - se t o mar al gu m t e mpo pa r a
e x pl or a r duas ou t r s di f er e nt es a bor da g e ns. Qu a ndo se est t r a bal h a ndo e m al go mai s
compl e xo, d e v e - se pl a nej ar prot ot i par al gu mas a mai s. Consi der e o segui nt e cdi go :


If cHair = "A"
Replace hair With "Loira"
Else
If cHair = "B"
Replace hair With "Morena"
Else
If cHair = "C"
Replace hair With "Ruiva"
Else
If cHair = "D"
Replace hair With "Grisalho"
Else
Replace hair With "Preto"
Endif
Endif
Endif
Endif


Um cdi go de u ma nica l et r a , ( A a t E) , f oi i nf or ma do par a i ndi car a cor de ca b el o. Est e
cdi go f oi e nt o conv er t i do e ar ma z e n a do como u ma st ri ng. Pod e - se not ar qu e a cor " Pr et o "
ser a t ri bu da se ne nhu ma out r a op o f or v er d a dei r a .

Uma al t er n a t i v a que r eduz o n v el de i de nt ao t or na o cdi go mai s f cil de l er e nqua nt o r eduz
o n mero de coma ndos r epl ace :


Do Case
Case cHair == "A"
cColor := "Loira"
Case cHair == "B"
cColor := "Morena"
Case cHair == "C"
cColor := "Ruiva"
Case cHair == "D"
cColor := "Grisalho"
OtherWise
cColor := "Preto"
EndCase

Replace hair With cColor



- 349 -

ADVPL Completo



Utilizao de arquivos de cabealho quando necessrio

Se u m ar qui vo de cdi go cri a do se r ef er e nci a a coma ndos par a i nt er pr et a o e t r a t a me nt o de
ar qui vos XML, est e d e v e se i ncl ui r o ar qui vo de ca beal ho prpri o par a t ai s coma ndos
( XMLXFUN. CH no e x e mpl o) . Por m n o de v e - se i ncl ui r ar qui vos d e ca b eal ho a pe n as por
segur a na . Se no se est r ef er e nci a ndo ne nhu ma das const a nt es ou ut ili z a ndo ne nhu m dos
coma ndos cont i dos e m u m dest es a r qui vos, a i ncl uso a pe n as t or n ar a compi l ao mai s
de mor a da .

Constantes em maisculo

I st o u ma conv e n o que f a z se nt i do. E m ADVPL, como e m C por e x e mpl o, a r egr a ut i li z ar
t odos os car act er es de u ma const a nt e e m mai scul o, a fi m de que possa m ser cl ar a me nt e
r econheci dos como const a nt es no cdi go, e que n o sej a necessri os l e mbr ar onde f or a m
decl ar a dos.

Utilizao de identao

Est e u m h bi t o que t odo progr a ma dor d e v e dese nvol v er. No conso me mui t o esf oro par a
ma nt er o cdi go ali nha do dur a nt e o t r a bal ho, por m qu a ndo necessri o pod e - se ut ili z ar a
f err a me nt a TOTVS De v St udi o par a a r e -i de nt ao de cdi go. Par a mai or es det al hes, consul t e a
docu me nt a o sobr e a i de nt ao de cdi gos f ont es di spon v el nos de mai s t pi cos dest e
ma t eri al .

Utilizao de espaos em branco

Espaos e m br a nco e xt r as t or n a m o cdi go mais f ci l par a a l ei t ur a . N o necess ri o i me nsas
r e as e m br a nco, mas a gr upar pedaos de cdi go a t r a v s da ut ili z ao de espaos e m br a nco
f unci ona mui t o be m. Cost u ma - se sepa r a r par met r os com espaos e m br a nco.

Quebra de linhas muito longas

Com o obj et i vo de t or n ar o cdi go mai s f cil de l er e i mpri mi r, as li nhas do cdi go no de v e m
est e nder o li mi t e da t el a ou do pa pel . Pode m ser " qu ebr a das " e m mai s de u ma li nh a de t e xt o
utili z a ndo o pont o- e- v r gul a ( ; ) .

Capitulao de palavras-chave

Uma conv e n o a mpl a me nt e ut i li z a da a de ca pi t ul ar as pal a vr as ch a v es, f unes, v ari v ei s e
ca mpos ut i li z a ndo u ma combi n ao de ca r act er es e m mai scul o e mi nscul o, vi sa ndo f acili t ar
a l ei t ur a do cdi go f ont e .

Av ali a ndo o cdi go a se gui r :


local ncnt
while ( ncnt++ < 10 )
ntotal += ncnt * 2
enddo




- 350 -

ADVPL Completo



O mesmo fi cari a mui t o mai s cl aro se r e - escri t o conf or me a bai xo :


Local nCnt

While ( nCnt++ < 10 )
nTotal += nCnt * 2
EndDo


Utilizao da Notao Hngara

A Not ao Hngar a mui t o comu m e nt r e pr ogr a ma dor es x Base e de out r as li ngua ge ns. A
docu me nt a o do ADVPL ut ili z a est a not ao par a a descri o das f unes e coma ndos e
aconsel h v el su a utili z ao n a cri ao de rot i n as, poi s a j uda a e vi t ar peque nos err os e f acili t a
a l ei t ur a do cdi go. Pa r a mai or es det al hes, consul t e a docu me nt a o sobr e a ut ili z ao da
Not a o Hngar a d e cdi gos f ont es di spon v el nos d e mai s t pi cos d est e ma t eri al .

Utilizao de nomes significantes para variveis

A pri nci pal v a nt a ge m da li ber da de na cri ao dos nomes de v a ri v ei s a f acili da de de
i de nti fi cao da sua utili da de. Por t a nt o de v e - se ut ili z ar essa f acili dade o m xi mo poss v el .
Nomes se m se nt i do a p e nas t or n a r o di f cil a i de nt i fi cao da ut ili da de d e u ma det er mi na da
v ari v el , assi m como nomes e xt r e ma me nt e cur t os. Ne m se mpr e a ut ili z ao de u ma v ari v el
cha ma da i a mel hor sa da . Cl aro, n o conv m cri ar u ma v ari v el co m u m nome mui t o l ongo
que ser ut ili z a da como u m cont a dor, e r ef er e nci a da mui t as v e z es no cdi go. O bom se nso
de v e ser ut ili z a do.

Cri ar v ari v ei s como n Nu mer o ou dDa t a t a mb m n o a j uda m n a i de nt i fi cao. A Not a o
Hngar a j est se ndo utili z a da par a i sso e o obj et i vo do nome d a v ari v el de v eri a ser
i de nti fi car su a ut ili z ao, n o o t i po de da do ut ili z a do. De v e - se procur ar subst i t ui r t ai s
v ari v ei s por al go como nTot al ou dCompr a .

O mes mo v li do par a nomes d e f unes, que de v e m descr e v er u m pouco sobr e o que a
f uno f a z . Nov a me nt e nomes e xt r e ma me nt e cur t os n o so aconsel h v ei s.

Utilizao de comentrios

Come nt ri os s o mui t o t ei s n a docu me nt ao d e pr ogr a mas cri a dos e par a f aci li t ar a
i de nti fi cao de pr ocessos i mpor t a nt es no f ut ur o e de v e m se mpr e ser ut ili z a dos.

Se mpr e que poss v el , f unes cri a das de v e m t er u ma br e v e d escri o do se u obj et i vo,
par met ros e r et or no. Al m de ser vi r como docu me nt ao, os co me nt ri os e mbel e z a m o
cdi go ao separ a r as f unes u mas das out r as. Os come nt ri os de v e m ser ut ili z a dos com bom
se nso, poi s r e escr e v er a si nt a x e ADVPL e m por t ugus t or n a - se a pe nas per da d e t e mpo :


If nLastKey == 27 // Se o nLastKey for igual a 27



- 351 -

ADVPL Completo



Criao de mensagens sistmicas significantes e consistentes

Sej a of er ece ndo assi st nci a , e xi bi ndo me nsa ge ns de a vi so ou ma nt e ndo o usu ri o i nf or ma do
do est a do de al gu m processo, as me nsa ge ns de v e m r efl et i r o t om ger al e a i mpor t nci a da
a pli cao. E m t er mos ger ai s, d e v e - se e vi t ar ser mui t o i nf or mal e a o mesmo t e mpo mui t o
t cni co.


"Aguarde. Reindexando (FILIAL+COD+ LOCAL) do arquivo: \DADOSADV\SB1990.DBF"


Esse t i po de me nsa ge m pode dar i nf or maes de mai s par a o usu ri o e dei x -l o se nti ndo- se
desconf or t v el se n o souber o qu e si gni fi ca " r ei nde x a ndo " , et c. E d e f a t o, o usu ri o n o d e vi a
ser i ncomoda do com t ai s det al hes. Ape n as a f r ase " Agu ar d e, i nde x a ndo. " f unci on ari a
corr et a me nt e, assi m co mo pal a vr as " pr ocessa ndo " ou " r e or ga ni z a ndo " .

Out r a boa i di a e vi t ar a r ef er e nci a a u m i t e m corr e nt e d e u ma t a b el a como u m " r egi st ro " :


"Deletar este registro?"


Se a op er ao est i v er se ndo ef et ua da e m u m ar qui vo de cli e nt es, o usu ri o de v e ser
quest i ona do sobr e a r e mo o do cli e nt e cor r e nt e, se poss v el i nf or ma ndo v al or es de
i de nti fi cao como o cdi go ou o nome.

Evitar abreviao de comandos em 4 letras

Apesa r do ADVPL supor t ar a a br e vi ao de co ma ndos e m qu a t r o l et r as ( por e x e mpl o, r epl no
l ugar de r epl ace) no h necessi da de de ut ili z ar t al f unci on ali da de. I st o a p e nas t or na o cdi go
mai s di f cil de l er e n o t or na a compi l ao mai s r pi da ou si mpl es.

Evitar "disfarces" no cdigo

No d e v e- se cri ar const a nt es pa r a e x pr esses compl e x as. I st o t or n ar o cdi go mui t o di f cil de
compr e e nder e poder ca usar er r os pri mri os, poi s pode - se i ma gi n ar que u ma a t ri bui o
ef et ua da a u ma v a ri v el qua ndo n a v er da d e h t oda u ma e x pr esso di sf ara da :


#define NUMLINES aPrintDefs[1]
#define NUMPAGES aPrintDefs[2]
#define ISDISK aReturn[5]

If ISDISK == 1
NUMLINES := 55
Endif

NUMPAGES += 1




- 352 -

ADVPL Completo



A i mpr esso qu e se t e m a ps u ma l ei t ur a dest e cdi go de qu e v al or es est o se ndo a t ri bu dos
s v a ri v ei s ou que const a nt es est o se ndo ut ili z a das. Se o obj et i vo fl e xi bili da de, o cdi go
a nt eri or d e v e ser subst i t u do por :


#define NUMLINES 1
#define NUMPAGES 2
#define ISDISK 5

If aReturn[ISDISK] == 1
aPrintDefs[ NUMLINES ] := 55
Endif

aPrintDefs[ NUMPAGES ] += 1


Evitar cdigo de segurana desnecessrio

Da da su a n a t ur e z a bi n ri a , t udo pod e ou n o acont ecer d e nt r o d e u m comput a dor . Adi ci onar
pedaos de cdi go a pe n as par a " gar a nt i r a se gur a na " fr eqe nt e me nt e ut ili z a do como u ma
descul pa par a e vi t ar cor ri gi r o pr obl e ma r e al . I st o pod e i ncl ui r a checa g e m pa r a v al i dar
i nt er v al os de da t as ou par a t i pos de da dos corr et os, o que co mu me nt e ut ili z a ndo e m
f unes :


Static Function MultMalor( nVal )
If ValType( nVal ) != "N"
nVal := 0
Endif
Return ( nVal * nVal )


O ga nho i rri sri o n a checa ge m do t i po de da do do par met ro j que ne nhu m pr ogr a ma
corr et a me nt e escri t o e m e x ecu o poderi a e nvi ar u ma st ri ng ou u ma da t a par a a f uno. De
f a t o, est e t i po de " ca pt ur a " o que t or n a a de pur ao di f cil , j que o r et or no ser se mpr e u m
v al or v l i do ( mesmo que o par met ro r ecebi do sej a d e t i po d e da do i ncor r et o) . Se est a
ca pt ur a n o t i v er si do ef et u a da qu a ndo u m poss v el er r o de t i po de da do i nv li do ocor r er, o
cdi go pod e ser cor ri gi do par a que est e er r o n o mai s acont ea .

Isolamento de strings de texto

No caso de me nsa ge ns e st ri ngs de t e xt o, a ce nt r ali z ao u m bom n egci o. Pod e - se col oca r
me nsa ge ns, ca mi nhos par a ar qui vos, e mesmo out ros v al or es e m u m l ocal espec fi co. I st o os
t or n a acess v ei s de qu al quer l ugar no progr a ma e f cei s de g er e nci ar.

Por e x e mpl o, se e xi st e u ma me nsa g e m comu m como "Imprimindo, por favor aguarde..."
e m mui t as par t es do cdi go, corr e - se o ri sco d e n o segui r u m pa dr o par a u ma das
me nsa ge ns e m al gu m l ugar do cdi go. E ma nt -l as e m u m ni co l ugar, como u m a r qui vo de
ca beal ho, t or n a f ci l a produ o d e docu me nt ao e a i nt er n aci onali z ao e m out r os i di omas.



- 353 -

ADVPL Completo




LISTAS DE EXERCCIOS

Mdulo 04.1.: Desenvolvendo aplicaes em ADVPL



01

Dese nv ol v er u m progr a ma que i mpl e me nt e a f uno Ax Ca dast ro( ) par a a
t a bel a pa dr o do si st e ma SA2 Ca dast ro de For necedor es.



02

I mpl e me nt ar no Ax Ca d ast ro( ) d ese nv ol vi do no i t e m a nt eri or as f unes d e
v ali dao de al t er ao e v ali dao de e xcl uso.



03

Dese nv ol v er u m progr a ma que i mpl e me nt e a f uno Mbrowse( ) utili z a ndo as
f unes pa dres de ca d ast ro, par a a t a bel a pa dr o do si st e ma SA2 Ca dast ro
de For necedor es.




- 354 -

ADVPL Completo


04

I mpl e me nt ar no Mbr owse( ) dese nvol vi do no i t e m a nt eri or a f u no de
l ege nda .


05

I mpl e me nt ar no Mbrowse( ) dese nv ol vi do no i t e m a nt eri or u ma f uno
esp ec fi ca de i ncl uso ut ili z a ndo os r ecursos a di ci on ai s da f uno Ax I ncl ui ( ) .


06

Dese nv ol v er u m pr ogr a ma que i mpl e me nt e u ma Mar k Br owse ut i li z a ndo as
f unes pa dres de ca d ast ro, par a a t a bel a pa dr o do si st e ma SA2 Ca dast ro
de For necedor es.


07

I mpl e me nt ar n a Mar k Br owse( ) dese nv ol vi da no i t e m a nt eri or u ma f uno par a
e xcl uso de ml ti pl os r egi st ros da t a bel a pa dr o do si st e ma SA2 Ca dast ro
de For necedor es.



- 355 -

ADVPL Completo


08

Dese nv ol v er u m progr a ma que i mpl e me nt e u ma Mar k Br owse( ) pa r a a t a bel a
pa dr o do si st e ma SA1 Ca dast r o d e Cli e nt e, cont e mpl a ndo u ma f uno que
per mi t a a vi su ali z ao dos da dos pri nci pai s de ml ti pl os cl i e nt es sel eci on a dos.


09

Dese nv ol v er u m progr a ma que i mpl e me nt e u ma Model o2( ) par a a t a bel a
pa dr o do si st e ma SX5 Ca dast r o de t a b el as, cont e mpl a ndo a f unci onali da de
de i ncl uso.


10

I mpl e me nt ar n a Mod el o2( ) dese nvol vi da no i t e m a nt eri or as f unci onali da des
de Vi su ali z ao, Al t er ao e Excl uso.


11
Dese nv ol v er u m progr a ma que i mpl e me nt e u ma Model o3( ) par a as t a bel as
pa dres do si st e ma SF 1 Ca beal ho do Docu me nt o d e Ent r a da e SD1 I t e ns
do docu me nt o de e nt r a da , cont e mpl a ndo as f unci onali da des de Vi su ali z ao e
I ncl uso.


- 356 -

ADVPL Completo



12

I mpl e me nt ar na Model o3( ) dese nvol vi da no i t e m a nt eri or as f unci onali da des e
Al t er ao e Excl uso.


13

Dese nv ol v er u m progr a ma que cri e u m ar qui vo de t r a bal ho com est r ut ur a
si mil ar ao SA1 e r eceba as i nf or maes d est a t a bel a .


14

I mpl e me nt ar n a r ot i n a dese nvol vi da no i t e m a nt eri or, u m Mar k Br owse qu e
per mi t e a sel e o e vi su ali z ao de a pe n as u m r egi st ro sel eci ona do.


15

Dese nv ol v er u m progr a ma que i mpl e me nt e u m r el a t ri o que per mi t a a
i mpr ess o de u ma li st a ge m si mpl es dos da dos da t a bel a pa dr o SA1
Ca dast r o de cl i e nt es.



- 357 -

ADVPL Completo


16

Dese nv ol v er u m progr a ma que i mpl e me nt e u m r el a t ri o que per mi t a a
i mpr ess o de u ma l i st age m si mpl es das not as fi scai s e se us r esp ect i vos i t e ns.


17

Dese nv ol v er u m progr a ma que r e al i z e a e x por t a o dos i t e ns marca dos no
SA1 Ca dast ro d e Cli e nt es par a u m ar qui vo no f or ma t o . TXT e m u m di r et ri o
esp eci fi ca do pel o usuri o.


18

Dese nv ol v er u m progr a ma que r e al i z e a i mpor t ao das i nf or maes cont i das
e m u m ar qui vo no f or ma t o . TXT sel eci ona do pel o usu ri o e as a t u al i z e no SA1
Ca dast r o d e Cl i e nt es.


19

Dese nv ol v er o mesmo progr a ma do i t e m a nt eri or ut ili z a ndo as f unes da
f a mli a FT.



- 358 -

ADVPL Completo



Mdulo 04.2.: Oficina de Programao I


20

Dese nv ol v er u ma a pli cao vi su al que i mpl e me nt e ca da u m dos compone nt es
di spon v ei s no f ont e DI ALOG_ OBJET OS. PRW.




21

I mpl e me nt ar as r ot i nas de i mpor t a o e e x por t ao d ese nvol vi das nos i t e ns
a nt eri or as r gu as de pr ocessa me nt o mai s a dequ a das.




22

Subst i t ui r e m u ma d as r ot i n as dese nvol vi das a nt eri or me nt e a f uno
Per gunt e( ) p el a f uno Par a mBox( ) .




- 359 -

ADVPL Completo



23

Dese nv ol v er u ma rot i na que i mpl e me nt ar u m Li st Box si mpl es que per mi t a
vi suali z ar as t a bel as ca d ast r a das no SX5 Ca dast ro de Ta b el as.


25

I mpl e me nt ar n a r ot i n a dese nvol vi da no i t e m a nt eri or a op o de vi su ali z ao
dos i t e ns d e u ma das t a bel as sel eci on a das, de monst r a ndo- os e m u ma Li st Box
Gri d.


26

Dese nv ol v er u ma r ot i na que i mpl e me nt e u ma Model o2( ) ut ili z a ndo os
compone nt es vi su ai s necess ri os, compl e me nt a dos com os r ecursos de
rol a ge m do obj et o Scr ol l Box( ) .



- 360 -

ADVPL Completo




Mdulo 05: Introduo a orientao objetos



27

I mpl e me nt ar a cl asse Al uno( ) com os m t odos Ne w( ) , Busca Al uno( ) e
Sal v a Al uno( ) .




28

Dese nv ol v er a i nt erf ace vi su al par a i nt er a gi r com a cl asse Al uno( )
i mpl e me nt a da a nt eri or me nt e.




29

I mpl e me nt ar n a rot i n a dese nvol vi da no i t e m a nt eri or os r ecursos necessri os
par a persi st i r as i nf or maes e r ecuper a r os da dos de i t e ns pr e vi a me nt e
sal vos.




- 361 -

ADVPL Completo




Mdulo 06: ADVPL orientado objetos I



30

Dese nv ol v er u ma rot i n a que i mpl e me nt e u ma Enchoi ce( ) par a o SA1
Ca dast r o de cl i e nt es.


31

Adequ ar a r ot i n a dese n vol vi da no i t e m a nt eri or par a per mi t i r o uso d a cl asse
de obj et os MsMGet ( ) .



32

Dese nv ol v er u ma i nt erf ace d e ca dast ro co mbi na ndo os r ecursos de u m obj et o
MsMGet ( ) e u m obj et o MsNe wGet Da dos( ) ca usa ndo o mes mo ef ei t o de u ma
i nt erf ace no pa dr o da Model o3( ) .





- 362 -

ADVPL Completo



33

I mpl e me nt ar n a r ot i n a dese nv ol vi da no i t e m a nt eri or o uso da f uno
Enchoi ce Ba r ( ) com u m bot o qu e p er mi t a ao usuri o vi su ali z ar u m dos i t e ns
e xi bi dos na i nt erf ace.


34

Adequar a r ot i na dese n vol vi da no i t e m a nt eri or de f or ma a subst i t ui r o uso da
f uno Enchoi ce Ba r ( ) p el a cl asse d e obj et o TBa r ( ) .


35

Conv er t er a si nt a x e cl ssi ca utili z a da no f ont e DI ALOG_ OBJETOS. PRW par a a
si nt a x e ori e nt a da a obj e t os.


36

Conv er t er a si nt a x e cl ssi ca dos f ont es Li st Box pa r a a si nt a x e ori e nt a da a
obj et os.



- 363 -

ADVPL Completo



Projeto: Avaliao prtica do treinamento de ADVPL Intermedirio

Objetivos do projeto

E Contemplar o contedo do curso e estimular a prtica da programao utilizando a linguagem
ADVPL;

E Acrescentar um grau de desafio ao treinamento;

Regras para entrega e apresentao

E Dever ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos
necessrios. A avaliao do proj eto ser realizada aps a entrega, no prazo estabelecido pelo
instrutor;

E Pode ser realizado em grupos de at 03 pessoas. Caso existam alunos sem grupos, estes podero
integrar equipes j formadas com o total de membros estabelecido, mediante aprovao do
instrutor;

Avaliao do projeto

E Mesmo peso da prova terica, podendo substitu-la integralmente.
E Sero considerados os quesitos:
O Funcionalidades
O Clareza da programao
O Apresentao
O Otimizao de tcnicas e recursos apresentados no treinamento

Funcionalidades que compe o projeto

Desenvolver uma aplicao utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:

01

Ef et ue a l ei t ur a de u m ar qui vo e m f or ma t o . TXT com os da dos necessri os
par a r e al i z ar o ca dast ro de f or necedor es no si st e ma Pr ot he us, e gr a v e est as
i nf or maes e m u m ar qui vo i nt er medi ri o.


02
A par t i r da sel e o dos r egi st ros di spon v ei s nest e ar qui vo i nt er medi ri o, o
usu ri o poder :

O I mpri mi r os i t e ns sel eci on a dos ;
O Ef et i v ar os i t e ns sel eci on a dos, gr a v a ndo- os no SA2 Ca dast r o de
For necedor es ;
O Est or nar i t e ns j ef et i v a dos, el i mi n a ndo- os do SA2 - Ca dast r o d e
For necedor es ;
O Excl ui r os r egi st ros sel eci on a dos do ar qui vo i nt er medi ri o ;
O Excl ui r t odos os r egi st r os i mpor t a dos d e u m ar qui vo e m f or ma t o . TXT
esp eci fi ca do.
O Vi suali z ar as i nf or maes do r egi st ro g er a do no ar qui vo i nt er medi ri o ;
O Vi suali z ar o r egi st ro g er a do no SA2 Ca dast ro de For necedor es a
par t i r de u m i t e m sel eci ona do no ar qui vo i nt er medi ri o.



- 364 -

ADVPL Completo



MDULO 07: ADVPL Orientado objetos I I

Nest e mdul o ser o t r a t a dos os compon e nt es e obj et os da i nt erf ace vi su al da li ngu a ge m
ADVPL, p er mi ti ndo o dese nvol vi me nt o de a pli caes com i nt erf aces gr fi cas com si nt a x e
ori e nt a da a obj et os.

36. Componentes da interface visual do ADVPL

A li ngu a ge m ADVPL possui di v ersos compon e nt es vi su ai s e a uxili ar es, os qu ai s pode m se r
r epr ese nt a dos ut i li z a ndo a est r ut ur a a bai xo :

. Classes da Interface Visual




Tsr vobj ect
. Classes Auxiliares


Tf ont

. Classes de Janelas


Msdi al og
Tdi al og
Twi ndow

. Classes de Componentes


Tcont r ol


.
Classes de Componentes
Visuais
Br ge t ddb
Mscal e nd
Mscal e ndgri d
Mssel br
Mswor k ti me
Sbut t on
Tbar
Tbi t ma p
Tbr owsebut t on
Tbt nb mp
Tbt nb mp2
Tbut t on
Tcbr owse
Tcheck box
Tcolor t ri a ngl e
Tcombobox
Tfol der
Tfont
Tge t
Tgr oup
Thbut t on
Ti browser
Tlist box
T me nu
T me nubar
T me t er
T msgr a phic
T msgbar
T mul ti bt n
T mul ti ge t
Tol econt ai ner
Tpa ge vi e w
Tpa nel
Tr ad me nu
Tsbr owse
Tsa y
Tscr oll box
Tsi mpl e edi t or
Tsli der

- 365 -

ADVPL Completo






.
Classes de Componentes
Visuais
Tspli t t er
Tt a bs
Tt oolbox
Twbrowse
Vcbrowse

Atributos comuns as classes de componentes visuais

cCaption T t ul o ou cont e do do obj et o.
cF3
Consul t a F 3 ao qu al o obj et o est vi ncul a do, qu a ndo o
mesmo do t i po get .
cMsg
Me nsa g e m e xi bi da na barr a de st a t us da j a nel a pri nci pal
qu a ndo o obj et o ga nh a f oco.
cName Nome do obj et o
cTooltip Me nsa g e m e xi bi da qu a ndo obj et o e xi be se u t ool t i p.
cVariable
Vari v el que r eceber o cont e do sel eci on a do ou di gi t a do no
obj et o, qu a ndo o mesmo f or t o t i po get ou si mil ar.
lPassword
I ndi ca se o t e xt o di gi t a do no obj et o ser e xi bi do no f or ma t o
de passwor d, qu a ndo o mesmo do t i po get .
lReadOnly Fl a g que i ndi ca se o obj et o pode ou n o ser edi t a do.
lShowHint
Fl a g que a ti v a . T. ou d esa t i v a . F. a e xi bi o do t ool t i p do
obj et o.
lVisibleControl Se . T. o obj et o vi s v el , se . F. o obj et o i nvi s v el .
nHeight Al t ur a e m pi x el s.
nLeft Coor de n a da hori z ont al e m pi x el s.
nTop Coor de n a da v er t i cal e m pi x el s.
nWidth Lar gur a e m pi x el s.
Picture
Pi ct ur e de di gi t ao do obj et o, qua ndo o mesmo do t i po
get .

Eventos comuns as classes de componentes visuais

bAction
Bl oco de cdi go e x ecut a do qu a ndo o obj et o ut ili z a do,
qu a ndo o mesmo do t i po bot o ou si mil ar.
bChange
Bl oco de cdi go e x ecut a do qu a ndo ocor r e u ma munda na n a
sel e o d e i t e ns que co mpe o obj et o, como por e x e mpl o
e m l i st as ou gri ds.
bF3
Bl oco de cdi go e x ecut a do qu a ndo ut ili z a do o r ecurso d e
consul t a F 3 vi ncul a do ao obj et o.
bGotFocus Ex ecut a do qua ndo obj et o ga nh a f oco.
blClicked
Ex ecut a do qua ndo aci ona do cl i ck do bot o esqu er do do
mouse sobr e o obj et o.
blDblClick
Ex ecut a do qu a ndo aci ona do dupl o cli ck do bot o esqu er do
do mouse sobr e o obj et o.
bLostFocus Ex ecut a do qua ndo obj et o per d e f oco.
brClicked
Ex ecut a do qua ndo aci ona do cl i ck do bot o di r ei t o do mouse
sobr e o obj et o.
bValid
Ex ecut a do qua ndo o cont e do do obj et o modi fi ca do e
de v er ser v ali da do. De v e r et or n a r . T. se o cont e do
v li do e . F. se cont e do i nv li do.
bWhen
Ex ecut a do qua ndo h movi me nt ao d e f oco n a j a nel a . Se
r et or n a r . T. o obj et o conti nu a h a bili t a do, se r et or n a r . F. o
obj et o ser desa bili t a do.

- 366 -

ADVPL Completo




Classes da interface visual

TSRVOBJECT( )

E Descrio: Cl asse a bst r a t a i ni ci al de t odas as cl asses de i nt erf ace do ADVPL. N o de v e
ser i nst a nci a da di r et a me nt e.

E Propriedades:

nLeft Coor de n a da hori z ont al e m pi x el s.
nTop Coor de n a da v er t i cal e m pi x el s.
nWidth Lar gur a e m pi x el s.
nHeight Al t ur a e m pi x el s.
cCaption T t ul o ou cont e do do obj et o.
cTooltip Me nsa g e m e xi bi da qu a ndo obj et o e xi be se u t ool t i p.
lShowHint
Fl a g que a ti v a . T. ou d esa t i v a . F. a e xi bi o do t ool t i p do
obj et o.
cMsg
Me nsa g e m e xi bi da n a barr a de st a t us da j a nel a pri nci pal
qu a ndo o obj et o ga nh a f oco.
nClrText Cor do t e xt o do obj et o.
nClrPane Cor do f undo do obj et o.
bWhen
Ex ecut a do qua ndo h movi me nt ao d e f oco n a j a nel a . Se
r et or n a r . T. o obj et o conti nu a h a bili t a do, se r et or n a r . F. o
obj et o ser desa bili t a do.
bValid
Ex ecut a do qua ndo o cont e do do obj et o modi fi ca do e
de v er ser v ali da do. De v e r et or n a r . T. se o cont e do
v li do e . F. se cont e do i nv li do.
blClicked
Ex ecut a do qua ndo aci ona do cl i ck do bot o esqu er do do
mouse sobr e o obj et o.
brClicked
Ex ecut a do qua ndo aci ona do cl i ck do bot o di r ei t o do mouse
sobr e o obj et o.
blDblClick
Ex ecut a do qua ndo aci ona do dupl o cli ck do bot o esqu er do
do mouse sobr e o obj et o.
oWnd Ja nel a onde o obj et o f oi cri a do.
lVisible Se . T. o obj et o vi s v el , se . F. o obj et o i nvi s v el .
Cargo Cont e do associ a do a o obj et o.
bLostFocus Ex ecut a do qua ndo obj et o per d e f oco.
bGotFocus Ex ecut a do qua ndo obj et o ga nh a f oco.

E Construtor: No pode ser instanciada.

E Parmetros:

Nenhum -

- 367 -

ADVPL Completo



E Mtodos auxiliares:

SetFocus

O Descrio: Fora muda na do f oco d e e nt r a da de da dos pa r a o cont r ol e.
O Sintaxe: Set F ocus( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Hide

O Descrio: Tor n a obj et o i nvi s v el .
O Sintaxe: Hi de( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Show

O Descrio: Tor n a obj et o vi s v el .
O Sintaxe: Show( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Enable

O Descrio: Ha bili t a o obj et o.
O Sintaxe: Enable( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 368 -

ADVPL Completo



Disable

O Descrio: Desa bi li t a o obj et o.
O Sintaxe: Disable( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Refresh

O Descrio: Fora a t u ali z ao ( si ncr oni a ) de pr opri eda des e nt r e o progr a ma e o
Prot h e us Re mot e.
O Sintaxe: Refresh( )
O Parmetros:

Nenhum -

O Retorno:

Nil


Exemplo:


CLASS TCONTROL FROM TSRVOBJECT



- 369 -

ADVPL Completo



Classes auxiliares

TFONT( )

E Descrio: Cl asse d e obj et os que d efi ne a f ont e do t e xt o ut ili z a do nos cont rol es
vi su ai s.

E Propriedades:

- Her da das as cl asses sup eri or es

E Construtor: Ne w( [ acNa me] , [ nPar 2] , [ a nHei ght ] , [lPar 4] , [ al Bol d] , [ nPar 6] ,
[lPar 7] , [ nPar 8] , [ al I t alic] , [ al Underli ne] )

E Parmetros:

acName Car act er e, opci on al . Nome da f ont e , o pa dr o Ari al .
nPar2 Reser v a do.
anHeight Nu mri co, opci on al . Ta ma nho da f ont e. O pa dr o - 11.
lPar4 Reser v a do.
alBold Lgi co, opci onal . Se . T. o est i l o da f ont e ser ne gri t o.
nPar6 Reser v a do.
lPar7 Reser v a do.
nPar8 Reser v a do.
alItalic Lgi co, opci onal . Se . T. o est i l o da f ont e ser i t li co.
alUnderline Lgi co, opci onal . Se . T. o est i l o da f ont e ser subli nha do.

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oSay
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE 'My dialog' PIXEL
// Cria font para uso
oFont:= TFont():New('Courier New',,-14,.T.)
// Apresenta o tSay com a fonte Courier New
oSay := TSay():New( 10, 10, {|| 'Mensagem'},oDlg,, oFont,,,, .T.,
CLR_WHITE,CLR_RED )
oSay:lTransparent:= .F.
ACTIVATE MSDIALOG oDlg CENTERED
Return


- 370 -

ADVPL Completo



Classes de janelas

MSDIALOG( )

E Descrio: Cl asse de obj et os que d e v e ser ut ili z a da como pa dr o de j a nel a par a
e nt r a da de da dos. MSDi al og u m ti po de j a nel a di l ogo modal , i st o
, n o per mi t e que out r a j a nel a a t i v a r eceba da dos e nqu a nt o est a
est i v er a t i v a .

E Propriedades:

- Her da das as cl asses sup eri or es


E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nBot t om] , [ a nRi ght ] , [ acCa pt i on] ,
[ cPar 6] , [ nPar 7] , [lPar 8] , [ nPar 9] , [ a nCl r Te xt ] , [ a nCl r Back] , [ oPa r 12] ,
[ aoWnd] , [ alPi x el ] , [ oPar 15] , [ oPar 16] , [lPar 17] )


E Parmetros:

anTop
Nu mri co, opci onal . Coor de n a da v er t i cal superi or e m pi x el s
ou ca r act er es.
anLeft
Nu mri co, opci onal . Coor de n a da hori z ont al esquer da e m
pi x el s ou car act er es.
anBotom
Nu mri co, opci onal . Coor de n a da v er t i cal i nf eri or e m pi x el s
ou ca r act er es.
anRight
Nu mri co, opci onal . Coor de n a da hori z ont al di r ei t a e m pi x el s
ou ca r act er es.
acCaption Car act er e, opci onal . T t ul o da j a nel a .
cPar6 Reser v a do.
nPar7 Reser v a do.
lPar8 Reser v a do.
nPar9 Reser v a do.
anClrText Nu mri co, opci on al . Cor do t e xt o.
anClrBack Nu mri co, opci on al . Cor de f undo.
oPar12 Reser v a do.
aoWnd
Obj et o, opci on al . Ja nel a m e da j a nel a a ser cri a da , pa dr o
a j a nel a pri nci pal do progr a ma .
alPixel
Lgi co, opci on al . Se . T. consi der a as coor d e na d as passa das
e m pi x el s, se . F . consi der a ca r act er es.
oPar15 Reser v a do.
oPar16 Reser v a do.
nPar17 Reser v a do.


- 371 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
// cria dilogo
Local oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)

// ativa dilogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando'
)} )
Return


TDIALOG( )

E Descrio: Cl asse de obj et os do t i po di l ogo de e nt r a da de da dos, se ndo se u
uso r eser v a do. Recome nda - se ut ili z ar a cl asse MSDi al og que
her da da d est a cl asse .


E Propriedades:

- Her da das as cl asses sup eri or es


E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nBot t om] , [ a nRi ght ] , [ acCa pt i on] ,
[ cPar 6] , [ nPar 7] , [lPar 8] , [ nPar 9] , [ a nCl r Te xt ] , [ a nCl r Back] , [ oPa r 12] ,
[ aoWnd] , [ alPi x el ] , [ oPar 15] , [ oPa r 16] , [ nPar 17] , [ a n Wi dt h] ,
[ a nHei ght ] )


E Parmetros:

anTop
Nu mri co, opci onal . Coor de n a da v er t i cal superi or e m pi x el s
ou ca r act er es.
anLeft
Nu mri co, opci on al . Coor de n a da hori z ont al esquer da e m
pi x el s ou car act er es.
anBotom
Nu mri co, opci onal . Coor de n a da v er t i cal i nf eri or e m pi x el s
ou ca r act er es.
anRight Nu mri co, opci onal . Coor de n a da hori z ont al di r ei t a e m pi x el s

- 372 -

ADVPL Completo


ou ca r act er es.
acCaption Car act er e, opci on al . T t ul o da j a nel a .
cPar6 Reser v a do.
nPar7 Reser v a do.
lPar8 Reser v a do.
nPar9 Reser v a do.
anClrText Nu mri co, opci on al . Cor do t e xt o.
anClrBack Nu mri co, opci on al . Cor de f undo.
oPar12 Reser v a do.
aoWnd
Obj et o, opci on al . Ja nel a m e da j a nel a a ser cri a da , pa dr o
a j a nel a pri nci pal do progr a ma .
alPixel
Lgi co, opci on al . Se . T. consi der a as coor d e na d as passa das
e m pi x el s, se . F . consi der a ca r act er es.
oPar15 Reser v a do.
oPar16 Reser v a do.
nPar17 Reser v a do.
anWidth Nu mri co, opci on al . Lar gur a da j a nel a e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a da j a nel a e m pi x el s.


E Mtodos auxiliares:

Activate

O Descrio: At i v a ( e xi be) o di l ogo. Ch a ma r some nt e u ma v e z est e
mt odo.
O Sintaxe: Act i v a t e( [ bPar 1] , [ bPar 2] , [ bPa r 3] , [ al Ce nt er ed] , [ a bVali d] ,
[lPar 6] , [ a bI ni t ] , [ bPar 8] , [ bPar 9] )
O Parmetros:

bPar1 Reser v a do.
bPar2 Reser v a do.
bPar3 Reser v a do.
alCentered
Lgi co, opci on al . Se . T. e xi be a j a nel a ce nt r ali z a da , . F.
pa dr o.
abValid
Bl oco de cdi go, opci on al . De v e r et or n ar . T. se cont e do
do di l ogo v l i do, se r et or n a r . F. o di l ogo n o f ech a r
qu a ndo sol i ci t a da de e ncerr a r.
lPar6 Reser v a do.
abInit
Bl oco d e cdi go, opci on al . Ex ecut a do qua ndo o di l ogo
i ni ci a e xi bi o.
bPar8 Reser v a do.
bPar9 Reser v a do.

O Retorno:

Nenhum -


- 373 -

ADVPL Completo



End

O Descrio: Encerr a ( f ech a ) o di l ogo.
O Sintaxe: End( )
O Parmetros:

Nenhum -

O Retorno: Lgi co . T. se o di l ogo f oi e ncer r a do.

Lgico I ndi ca se o di l ogo f oi e ncer r a do.


E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
// cria dilogo
oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)
// ativa dilogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando..
.')} )

/* os comandos abaixo proporcionam o mesmo resultado
// cria dilogo
DEFINE DIALOG oDlg TITLE 'Meu dialogo' FROM 10,10 TO 300,300 COLOR
CLR_BLACK,CLR_WHITE PIXEL
// ativa dilogo centralizado
ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop('iniciando...')) VALID
(msgstop('validou!'),.T.)
*/
Return Nil

- 374 -

ADVPL Completo



TWINDOW( )

E Descrio: Cl asse de obj et os do t i po di l ogo pri nci pal de progr a ma . De v er
e xi st i r a pe nas u ma i nst nci a dest e obj et o n a e x ecuo do progr a ma .

E Propriedades:

- Her da das das cl asses superi or es


E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nBot t o m] , [ a nRi ght ] , [ acTi tl e] , [ nPar 6] ,
[ oPar 7] , [ oPar 8] , [ oPa r 9] , [ aoPa r e nt ] , [lPar 11] , [lPar 12] , [ a nCl r For e] ,
[ a nCl r Back] , [ oPa r 15] , [ cPar 16] , [lPar 17] , [lPar 18] , [lPar 19] ,
[lPar 20] , [ alPi x el ] ) ;

E Parmetros:

nTop
Nu mri co, opci onal . Coor de n a da v er t i cal superi or e m pi x el s
ou ca r act er es.
nLeft
Nu mri co, opci onal . Coor de n a da hori z ont al esquer da e m
pi x el s ou car act er es.
nBottom
Nu mri co, opci on al . Coor de n a da v er t i cal i nf eri or e m pi x el s
ou ca r act er es.
nRight
Nu mri co, opci onal . Coor de n a da hori z ont al i nf eri or e m pi x el s
ou ca r act er es.
cTitle Car act er e, opci onal . T t ul o da j a nel a .
nPar6 Reser v a do.
oPar7 Reser v a do.
oPar8 Reser v a do.
oPar9 Reser v a do.
oParent Obj et o, opci on al . Ja nel a m e da j a nel a corr e nt e .
lPar11 Reser v a do.
lPar12 Reser v a do.
nClrFore Nu mri co, opci on al . Cor de f undo da j a nel a .
nClrText Nu mri co, opci onal . Cor do t e xt o da j a nel a .
oPar15 Reser v a do.
cPar16 Reser v a do.
lPar17 Reser v a do.
lPar18 Reser v a do.
lPar19 Reser v a do.
lPar20 Reser v a do.
lPixel
Lgi co, opci on al . Se . T. ( pa dr o) consi der a coor de n a das
passa das e m pi x el s, se . F. consi der a car act er es.


- 375 -

ADVPL Completo


E Mtodos auxiliares:

Activate

O Descrio: At i v a ( e xi be) a j a nel a . Ch a mar esse mt odo a p e n as u ma v e z .
O Sintaxe: Act i v a t e( [ acShow] , [ bPar 2] , [ bPar 3] , [ bPar 4] , [ bPar 5] , [ bPar 6] ,
[ a bI ni t ] , [ bPar 8] , [ bPar 9] , [ bPa r 10] , [ bPa r 11] , [ bPa r 12] , [ bPa r 1 3] ,
[ bPar 14] , [ bPa r 15] , [ a bVali d] , [ bPar 17] , [ bPar 1 8] ) .
O Parmetros:

acShow
Car act er , opci on al . I C ONI Z ED pa r a j a nel a i coni z a da ou
MAXI MI Z ED pa r a j a n el a ma xi mi z a da .
bPar2 Reser v a do.
bPar3 Reser v a do.
bPar4 Reser v a do.
bPar5 Reser v a do.
bPar6 Reser v a do.
abInit
Bl oco de cdi go. Ex ecut a do qu a ndo j a nel a est se ndo
e xi bi da .
bPar8 Reser v a do.
bPar9 Reser v a do.
bPar10 Reser v a do.
bPar11 Reser v a do.
bPar12 Reser v a do.
bPar13 Reser v a do.
bPar14 Reser v a do.
bPar15 Reser v a do.
abValid
Bl oco de cdi go. Ex ecut a do qua ndo a j a n el a f or sol i ci t a da
de f ech a r. De v er r et or n ar . T. se o cont e do d a j a nel a f or
v li do, ou . F. se n o. Se o bl oco r et or n ar . F. a j a nel a n o
f ech a r .
bPar17 Reser v a do.
bPar18 Reser v a do.


O Retorno:

Nenhum -


End

O Descrio: Sol i ci t a e ncer r a me nt o da j a nel a .
O Sintaxe: End( )
O Parmetros:

Nenhum -

O Retorno: Lgi co . T. se o di l ogo f oi e ncer r a do.

Lgico I ndi ca se a j a nel a f oi e ncerr a da .


- 376 -

ADVPL Completo


Center

O Descrio: Ce nt r al i z a a j a nel a .
O Sintaxe: Ce nt er ( )
O Parmetros:

Nenhum -

O Retorno: Lgi co . T. se o di l ogo f oi e ncer r a do.

Nenhum -

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oWindow
Local abInit:= {||conout('ativando!')}
Local abValid:= {||conout('encerrando!'),.T.}
oWindow:= tWindow():New( 10, 10, 200, 200, 'Meu
programa',,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. )
oWindow:Activate('MAXIMIZED',,,,,,abInit,,,,,,,,,abValid,,)

/* os comandos abaixo proporcionam o mesmo resultado
DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE 'Meu programa'
COLOR CLR_WHITE,CLR_BLACK
ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid
*/
Return
.


- 377 -

ADVPL Completo



Classes de componentes

TCONTROL( )

E Descrio: Cl asse a bst r a t a comu m e nt r e t odos os compone nt es vi su ai s
edi t v ei s. No d e v e ser i nst a nci a da di r et a me nt e .


E Propriedades:

Align
Nu mri co. Al i nh a me nt o do cont r ol e no espao
di sponi bili z a do pel o se u obj et o par e nt e. 0 = Ne n hu m
( pa dr o) , 1 = no t opo, 2 = no r oda p, 3 = a esquer da , 4 = a
di r ei t a e 5 = e m t odo o par e nt e .
lModified
Lgi co. Se . T. i ndi ca que o cont e do da v a ri v el associ a da
ao cont r ol e f oi modi fi ca do.
lReadOnly
Lgi co. Se . T. o cont e do da v ari v el associ a da ao cont r ol e
per ma n ecer a pe n as pa r a l ei t ur a .
hParent
Nu mri co. Ha ndl e (i de nt i fi ca dor ) do obj et o sobr e o qual o
cont r ol e f oi cri a do.
bChange
Bl oco de cdi go. Ex ecut a do qu a ndo o est a do ou cont e do do
cont r ol e modi fi ca do pel a ao sobr e o cont rol e.

E Construtor: No pode ser instanciada.

E Parmetros:

Nenhum -

E Mtodos auxiliares:

SetFocus

O Descrio: Fora muda na do f oco d e e nt r a da de da dos pa r a o cont r ol e.
O Sintaxe: Set F ocus( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


Exemplo:


CLASS TSay FROM Tcontrol


- 378 -

ADVPL Completo



Classes de componentes visuais

BRGETDDB( )

E Descrio: Cl asse de obj et os vi su ai s do t i po Gri d.

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci ona da / posi ci on a da no obj et o
nLen N mer o t ot al de li nhas do obj et o

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ a He a d ers] ,
[ a Col Si z es] , [ oDl g] , [ cFi el d] , [ uVal ue 1] , [ uVal ue 2] , [ uCh a nge] ,
[ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCursor ] , [ nCl r For e] , [ nCl r Back] ,
[ cMsg] , [l Upda t e] , [ cAli as] , [lPi x el ] , [ bWhe n] , [l Desi gn] , [ bVali d] ,
[ a Al t er ] , [ oMot h er ] )

E Parmetros:

nRow Nu mri co, opci on al . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
nWidth Nu mri co, opci onal . Lar gur a do obj et o
nHeight Nu mri co, opci onal . Al t ur a do obj et o
bFields Bl oco de cdi go, Li st a de Ca mpos
aHeaders Vet or, Descri o dos ca mpos pa r a no ca b eal ho
aColSizes Vet or, Lar gur a das col unas
oDlg
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
cField Car act er , opci on al . Ca mpos n ecessri os a o fil t ro
uValue1 I ndefi ni do, opci on al . I ni ci o do i nt er v al o par a o fi l t ro
uValue2 I ndefi ni do, opci on al . Fi m do i nt er v al o par a o fi l t ro
bChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
bLDblClick
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci ona do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
bRClick No ut i li z a do
oFont Obj et o, opci on al . Font e
oCursor Obj et o, opci on al . Ti po do Cursor
nClrFore Nu mri co, opci onal . Cor do t e xt o da j a nel a .
nClrBack Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci on ar o mouse sobr e o
obj et o
lUpdate No ut i li z a do
cAlias
Car act er , opci on al se obj et o ut ili z a do com Vet or , obri ga t ori o
se ut i li z a do com Ta b el a
lPixel
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lDesign No Ut i li z ado

- 379 -

ADVPL Completo


bValid
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
aAlter No Ut i li z ado
oMother No Ut i li z ado

E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nh a par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

- 380 -

ADVPL Completo



RowCount

O Descrio: Ret or n a nu mer o d e l i nh as vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


E Aparncia:



- 381 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

DbSelectArea('SA1')
oBrowse := BrGetDDB():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)


ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

MSCALEND( )

E Descrio: Cl asse de obj et os vi su ai s do t i po Cal e ndri o.

E Propriedades:

+ Her da das da cl asse sup eri or
bChange
Bl oco de cdi go e x ecut a do n a muda na d e sel eo d e u m
di a .
bChangeMes
Bl oco de cdi go e x ecut a do n a mundaa d e sel eo d e u m
ms.
dDiaAtu Di a a t u al me nt e sel eci ona do

E Construtor: Ne w( [ nRow] , [ nCol ] , [ oDl g] , [l Ca nMul t Sel ] )

- 382 -

ADVPL Completo



E Parmetros:

nRow Nu mri co, opci on al . Coor de n a da v er t i cal
nCol Nu mri co, opci on al . Coor de n a da hori z ont al
oDl g
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.

l Ca nMul t Sel Logi co, opci on al . Per mi t e sel e o de mul ti pl os di as


E Aparncia:



Exemplo:

#include 'protheus.ch'
user function Calend_Ex()
DEFINE MSDIALOG oDlg FROM 0,0 TO 1000,1000 PIXEL TITLE 'Exemplo de
MsCalend'
// Cria objeto
oCalend:=MsCalend():New(01,01,oDlg,.T.)
// Code-Block para mudana de Dia
oCalend:bChange := {|| Alert('Dia Selecionado: ' +
dtoc(oCalend:dDiaAtu)) }
// Code-Block para mudana de mes
oCalend:bChangeMes := {|| alert('Mes alterado') }
ACTIVATE MSDIALOG oDlg CENTERED
Return


- 383 -

ADVPL Completo



MSCALENDGRID( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po Gr a d e d e Per odos.

E Propriedades:

bAction
Bl oco de cdi go. Ex ecut a do qu a ndo o bot o esquer do do
mouse pr essi on a do.
bRClick
Bl oco de cdi go. Ex ecut a do qu a ndo o bot o di r ei t o do mouse
pr essi on a do.

E Construtor: Ne w( [ aoWnd] , [ a nRow] , [ a nCol ] , [ a nHei ght ] , [ a n Wi dt h] ,
[ dDa t e I ni ] , [ nResol uti on] , [ a bWhe n] , [ a bAct i on] , [ n Def Col or ] ,
[ bRCli ck] , [l Fill All ] )

E Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.

anRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
anHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
anWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.

dDateIni Da t a , Da t a i ni ci al do Cal e ndri o
nResolution Nu mri co, Resol uo a ser a pl i ca da n a gri d do Cal e ndri o
abWhen
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.

abAction
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qu a ndo o bot o f or pr essi on a do.

nDefColor Nu mri co, opci on al . Cor do F undo da Gri d.
bRClick
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci ona do o
bot o di r ei t o do mouse sobr e o cont r ol e.
lFillAll Lgi co, opci onal . Pr e e nche t odo o peri odo

E Mtodos auxiliares:

Add

O Descrio: Adi ci on a peri odo n a Gri d.
O Sintaxe: Add( cCa pt i on, nLi n, nI ni ti al , nFi n al , nCol or, cDescri )
O Parmetros:

cCaption Car act er . Descri o a ser i nseri da a esquer da d a Gri d
nLin Nu meri co. Nu mer o da l i nh a a ser i nseri do o i t e m
nInitial Nu meri co. Di a i ni ci al
nFinal Nu meri co. Di a Fi nal

- 384 -

ADVPL Completo


nColor Nu meri co. Cor qu e d est acar a o i t e m
cDescri Car act er , Opi ci on al . Descri o do t i po t ool ti p( hi nt ) do i t e m

O Retorno:

Nil

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
nResolution := 1
oMsCalendGrid := MsCalendGrid():New( oDlg, 01, 01, 500,300,;
date(), nResolution, ,{|x,y| Alert(x) },;
RGB(255,255,196), {|x,y|Alert(x,y)}, .T.
)
oMsCalendGrid:Add('caption 01', 1, 10, 20, RGB(255,000,0),
'Descricao 01')
oMsCalendGrid:Add('caption 02', 2, 20, 30, RGB(255,255,0),
'Descricao 02')
oMsCalendGrid:Add('caption 03', 3, 01, 05, RGB(255,0,255),
'Descricao 03')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 385 -

ADVPL Completo



MSSELBR( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Gri d

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci on a da / posi ci ona da no obj et o
nLen N mer o t ot al de li nhas do obj et o

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ a He a d ers] ,
[ a Col Si z es] , [ oDl g] , [ cFi el d] , [ uVal ue 1] , [ uVal ue 2] , [ uCh a nge] ,
[ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCursor ] , [ nCl r For e] , [ nCl r Back] ,
[ cMsg] , [l Upda t e] , [ cAl i as] , [lPi x el ] , [ bWhe n] , [ l Desi gn] , [ bVali d] )

E Parmetros:

nRow Nu mri co, opci onal . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
nWidth Nu mri co, opci on al . Lar gur a do obj e t o
nHeight Nu mri co, opci onal . Al t ur a do obj et o
bFields Bl oco de cdi go, Li st a de Ca mpos
aHeaders Vet or, Descri o dos ca mpos pa r a no ca b eal ho
aColSizes Vet or, Lar gur a das col unas
oDlg
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
cField Car act er , opci on al . Ca mpos n ecessri os a o fil t ro
uValue1 I ndefi ni do, opci on al . I ni ci o do i nt er v al o par a o fi l t ro
uValue2 I ndefi ni do, opci on al . Fi m do i nt er v al o par a o fi l t ro
bChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
bLDblClick
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci ona do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
bRClick No ut i li z a do
oFont Obj et o, opci on al . Font e
oCursor Obj et o, opci on al . Ti po do Cursor
nClrFore Nu mri co, opci on al . Cor do t e xt o da j a nel a .
nClrBack Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci on ar o mouse sobr e o
obj et o
lUpdate No ut i li z a do
cAlias
Car act er , opci on al se obj et o ut ili z a do com Vet or , obri ga t ori o
se ut i li z a do com Ta b el a
lPixel
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lDesign No Ut i li z ado
bValid
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.


- 386 -

ADVPL Completo


E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nha par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


- 387 -

ADVPL Completo



RowCount

O Descrio: Ret or n a nu mer o d e l i nhas vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

E Aparncia:




- 388 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

DbSelectArea('SA1')
oBrowse := MsSelBr():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,{||
Alert(oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)


ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
.

MSWORKTIME( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Bar r a d e Per odo.

E Propriedades:

bChange
Bl oco de cdi go. Ex ecut a do ao di spar ar qu al quer a o sobr e
o obj et o.

E Construtor: Ne w( [ aoWnd] , [ a nRow] , [ a nCol ] , [ a nHei ght ] , [ a n Wi dt h] ,
[ nResol uti on] , [ cVal ue] , [ a bWhe n] , [ a bCha nge] )

E Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
anRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anCol Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou

- 389 -

ADVPL Completo


car act er es.
anHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
anWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.
nResolution Nu mri co, Resol uo a ser a pl i ca da n a gri d do Cal e ndri o
cValue Car act er , opci on al . Descri ti vo
abWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
abChange
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci ona do
qu a ndo o bot o f or pr essi ona do.

E Mtodos auxiliares:

GetValue

O Descrio: Ret or na os i t e m sel eci on a dos no f or ma t o XX X XX.
O Sintaxe: Get Val ue( )
O Parmetros:

Nenhum -

O Retorno:

Caracter Ret or n a os i t e m sel eci on a dos no f or ma t o XX X XX.

GetInterTime

O Descrio: Ret or na peri odo sel eci ona do.
O Sintaxe: Get I nt er Ti me( )
O Parmetros:

Nenhum -

O Retorno:

Caracter Ret or n a o per odo sel eci ona da no f or ma t o HH: MM: SS

SetResol

O Descrio: Defi ne a r esol uo da de monst r a o da bar r a d e per odos.
O Sintaxe: Set Resol ( nResol uti on)
O Parmetros:

nResolution Resol uo

O Retorno:

Nil


- 390 -

ADVPL Completo



SetValue

O Descrio: At ri bui u m det er mi ndo cont e do par a u m obj et o ou a t ri but o
de u m obj et o.
O Sintaxe: Set Val ue( x Val ue, cPi ct ur e)
O Parmetros:

x Val ue Val or que ser a t ri bu do ao obj et o ou a t ri but o do obj et o.
cPi ct ur e Pi ct ur e de f or mao opci on al par a o cont e do a t ri bu do.

O Retorno:

Nenhum


E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMsWorkTime := MsWorkTime():New(oDlg,04,04,280,133,0,'',{||.T.},;
{|oWorkTime|Alert('GetValue():
'+oWorkTime:GetValue()+chr(13)+;
'GetInterTime():
'+oWorkTime:GetInterTime())} )
oMsWorkTime:SetValue('X X XX X')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


- 391 -

ADVPL Completo



SBUTTON( )

E Descrio: Cl asse de obj et os vi su ai s do ti po bot o que Defi ne o compon e nt e
vi su al SBut t on, o qual per mi t e a i ncl uso de bot es d e op er ao n a
t el a da i nt erf ace, os qu ai s ser o vi su ali z a dos dep e nde ndo da
i nt erf ace do si st e ma ERP utili z a da some nt e com u m t e xt o si mpl es
par a sua i de nt i fi cao, ou com u ma i ma ge m ( Bi t Ma p) pr - defi ni do.

E Propriedades:

bAction
Bl oco de cdi go. Ex ecut a do ao pr eci on ar o bot o esquer do
do mouse .

E Construtor: Ne w( [ nTop] , [ nLef t ] , [ nTy p e] , [ bActi on] , [ oWnd] , [l En a bl e] ,
[ cMsg] , [ bWh e n] )

E Parmetros:

Parmetro Ti po / Descri o
nTop
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
nLeft
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
nType Nu mri co. Ti po do Bot o
bAction
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qua ndo o bot o f or pr essi ona do.
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
lEnable Logi co, opci on al . Ha bili t a / Desa bi li t a bot o
cMsg Car act er , Opi ci on al . Descri o do t i po t ool ti p( hi nt ) do i t e m
abWhen
Bl oco de cdi go, opci on al . Ex ecut a do qua ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.

E Mtodos auxiliares:

Create

O Descrio: Ret or n a M t odo const r ut or opci on al da cl asse .
O Sintaxe: Cr e a t e( )
O Parmetros:

Nenhum -

O Retorno:

Objeto
Obj et o da cl asse Sbut t on com t odos os a t ri but os com
cont e dos pa dres.


- 392 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oSButton1 := SButton():New( 01,01,1,{||Alert('SButton
01')},oDlg,.T.,,)
oSButton2 := SButton():New( 21,01,2,{||Alert('SButton
02')},oDlg,.T.,,)
oSButton3 := SButton():New( 41,01,3,{||Alert('SButton
03')},oDlg,.T.,,)
oSButton4 := SButton():New( 61,01,4,{||Alert('SButton
04')},oDlg,.T.,,)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL











- 393 -

ADVPL Completo



TBAR( )

E Descrio: Cl asse d e obj et os vi suai s que per mi t e a i mpl e me nt ao de u m
compone nt e do t i po barr a de bot es pa r a a p ar t e superi or d e u ma
j a nel a pr e vi a me nt e d efi ni da .

E Propriedades:

- Her da dos das cl asses superi or es.

E Construtor:

E Parmetros:

oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
nBtnWidth Nu mri co, opci on al . Lar gur a do bot o cont i do n a barr a
nBtnHeight Nu mri co, opci on al . Al t ur a do bot o cont i do n a barr a
l3D Lgi co, opci on al . Defi ne t i po da barr a
cMode No ut i li z a do.
oCursor
Obj et o, opci on al . Defi ne Cursor ao posi ci on ar o mouse sobr e a
barr a .
cResource
Car act er , opci on al . I ma ge m do r ecurso a ser i nseri do como
f undo da bar r a .
lNoAutoAdjust Lgi co.

E Aparncia:



- 394 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'

/*/
+------------------------------------------------------------------------
| Funo | TSTBAR | Autor | MICROSIGA |Data | |
+------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/

User Function TstTBar()
Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

Exemplo (continuao):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;
{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;
{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;
{||},oTBar,'Preo' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return










- 395 -

ADVPL Completo



TBITMAP( )

E Descrio: Cl asse de obj et os vi su ai s que per mi t e a e xi bi o de u ma i ma ge m.

E Propriedades:

cResNa me Car act er e, Nome do r esource
cBmpFil e Car act er e, Nome do a r qui vo
l St r et ch Lgi co, opci on al . St r ech da i ma ge m
l Aut oSi z e Lgi co, opci on al . Ta ma nho a ut om t i co
l Tr a nspar e nt Lgi co, opci onal . Tr a nsp ar e nt e

E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a n Wi dt h] , [ a nHei ght ] , [ acResNa me] ,
[ acBmpFil e] , [ al NoBor der ] , [ aoWnd] , [ a bLCl i ck ed] , [ a bRCli ck ed] ,
[ al Scroll ] , [ al St r et ch] , [ aoCursor ] , [ acMsg] , [ al Upda t e] , [ a bWhe n] ,
[ alPi x el ] , [ a bVali d] , [ al Desi gn] , [ al I sI con] , [ al I sJpeg] )

E Parmetros:

anTop
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anLeft
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
anWidth Nu mri co, opci on al . Lar gur a e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a e m pi x el s.
acResName Car act er e, Nome do r esource.
acBmpFile Car act er e, Nome do a r qui vo.
alNoBorder Lgi co, opci onal . Exi be bor da
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a i ma ge m d e v er
ser cri a da .
abLClicked
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
bot o esqu er do do mouse f or pr essi on a do.
abRClicked
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
bot o di r ei t o do mouse f or pr essi on a do.
alScroll Lgi co, opci onal . At i v a o scrol l
alStretch Lgi co, opci on al . St r ech da i ma ge m
aoCursor Obj et o, opci on al . Cursor a ser e xi bi do
acMsg No ut i li z a do
alUpdate No ut i li z a do
abWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
alPixel Lgi co, opci onal . Ut ili z a coor d e n a das e m pi x el
abValid
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do n a
v ali dao.
alDesign No ut i li z a do
alIsIcon
Lgi co, opci onal . con e. No ut i li z a do a par t i r da v ers o
Prot h e us 8
alIsJpeg
Lgi co, opci on al . Jpeg. No ut i li z a do a par t i r da v ers o
Prot h e us 8


- 396 -

ADVPL Completo



E Mtodos auxiliares:

Create

O Descrio: Ret or na M t odo const r ut or opci onal da cl asse .
O Sintaxe: Cr e a t e( )
O Parmetros:

Ne nhu m -

O Retorno:

Objeto
Obj et o da cl asse TBar com t odos os a t ri but os com
cont e dos pa dres.

SetBmp

O Descrio: Mt odo par a car r egar u ma i ma ge m do r eposi t ri o.
O Sintaxe: Set Bmp( acResNa me )
O Parmetros:

acResNa me Car act er e, Nome do r esource

O Retorno:

Nenhum -

Load

O Descrio: Mt odo par a car r egar u ma i ma ge m do r eposi t ri o ou l ocal .
O Sintaxe: Loa d( acResNa me, acBmpFi l e )
O Parmetros:

acResNa me Car act er e, Nome do r esource.
acBmpFil e Car act er e, Nome do a r qui vo.

O Retorno:

Nenhum -

E Aparncia:



- 397 -

ADVPL Completo



Exemplo:


#include protheus.ch


User Function tBitmapTst()
Local oDlg
Local oBmp

DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 280,330 PIXEL

@ 10, 10 BITMAP oBmp RESOURCE 'totvs.bmp' SIZE 150,150 OF oDlg PIXEL
oBmp:lAutoSize := .T.

ACTIVATE MSDIALOG oDlg CENTERED

Return

.

TBROWSEBUTTON( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po bot o no f or ma t o pa dr o utili z a do
e m br owses da a pl i cao.

E Propriedades:

bAction
Bl oco de cdi go. Ex ecut a do ao pr eci on ar o bot o esquer do
do mouse .

E Construtor: Ne w( [ nRow] , [ nCol ] , [ cCa pt i on] , [ oWnd] , [ bAct i on] , [ n Wi dt h] ,
[ nHei ght ] , [ nHel pI d] , [ oFont ] , [l Def a ul t ] , [lPi x el ] , [l Desi gn] , [ cMsg] ,
[l Updat e] , [ bWhe n] , [ bVali d] , [l Ca ncel ] )

E Parmetros:

nRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
nCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
cCaption Car act er e, opci on al . Ti t ul o do bot o.
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
bAction
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qu a ndo o bot o f or pr essi ona do.
nWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s
nHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.

nHelpId Reser v a do
oFont
Obj et o, opci on al . Obj et o t i po t Font com propri eda des da
f ont e ut i li z a da par a o t t ul o do bot o.
lDefault Reser v a do
lPixel
Lgi co, opci on al . Se . T. consi der a as coor d e n a d as passa das
e m pi x el s, se . F . ( pa dr o) consi der a e m car act er es.

- 398 -

ADVPL Completo


lDesign Reser v a do
cMsg Reser v a do
lUpdate Reser v a do
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
bValid Reser v a do
lCancel Reser v a do

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBrowseButton := TBrowseButton():New( 01,01,'TBrowseButton',oDlg,;

{||Alert('TBrowseButton')},40,10,,,.F.,.T.,.F.,,.F.,,,)

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL















- 399 -

ADVPL Completo



TBTNBMP( )

E Descrio: Cl asse de obj et os vi su ai s do ti po bot o, o qu al per mi t e que sej a
vi ncul a da u ma i ma ge m ao cont r ol e.

E Propriedades:

bAction
Bl oco de cdi go. Ex ecut a do ao pr eci on ar o bot o esquer do
do mouse .

E Construtor: Ne wBa r ( [ cResNa me 1] , [ cResNa me 2] , [ cBmpFil e 1] , [ cBmpFil e 2] ,
[ cMsg] , [ bAct i on] , [l Group] , [ oWnd] , [l Adj ust ] , [ bWhe n] , [ cTool Ti p] ,
[lPr essed] , [ bDr op] , [ cAct i on] , [ nPos] , [ cPr ompt ] , [ oFont ] ,
[ cResNa me 3] , [ cBmpFi l e 3] , [l Bor d er ] )

E Parmetros:

cResName1 Car act er e, Nome do r esource
cResName2 Car act er e, Nome do r esource
cBmpFile1 Car act er e, N O UTI LI Z ADO
cBmpFile2 Car act er e, N O UTI LI Z ADO
cMsg Car act er e, Me nsa ge m d e Hi nt
bAction Bl oco de cdi go. A o e x ecut a da
lGroup Lgi co. Defi ne gr upo
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
lAdjust Lgi co, NO UTI LI Z ADO
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
cToolTip Me nsa g e m e xi bi da qu a ndo obj et o e xi be se u t ool t i p.
lPressed No ut i li z a do
bDrop No ut i li z a do
cAction No ut i li z a do
nPos No ut i li z a do
cPrompt Car act er , opci on al . Ca pt i on do bot o.
oFont
Obj et o, opci on al . Obj et o t i po t Font utili z a do par a defi ni r as
car act er st i cas da f ont e utili z a da par a e xi bi r o cont e do do
cont r ol e.
cResName3 No ut i li z a do
cBmpFile3 No ut i li z a do
lBorder No ut i li z a do


- 400 -

ADVPL Completo



E Mtodos auxiliares:

LoadBitmaps

O Descrio: At ri bui ao bot o os bi t ma ps ou r ecursos pa r a e xi bi o.
O Sintaxe: Loa dBi t ma ps( [ cResNa me 1] , [ cResNa me 2] , [ cBmpFi l e 1] ,
[ cBmpFil e 2] , [ cResNa me 3] , [ cB mpFil e 3] )

O Parmetros:

cResNa me 1 Car act er e, Nome do r esource
cResNa me 2 Car act er e, Nome do r esource
cBmpFil e 1 Car act er e, Nome do a r qui vo BMP
cBmpFil e 2 Car act er e, Nome do a r qui vo BMP
cResNa me 3 Car act er e, Nome do r esource
cBmpFil e 3 Car act er e, Nome do r esource

O Retorno:

Nenhum


SetPopUpMenu

O Descrio: Set a o obj e t o do t i po TMe nu r ef er e nt e ao bot o.
O Sintaxe: Set PopupMe nu( oMe nu)
O Parmetros:

Ne nhu m -

O Retorno:

Nenhum -

E Aparncia:



- 401 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. ) // Orig: 25,45
oTBtnBmp1 := TBtnBmp() :NewBar('RPMNEW',,,,'Msg 01',;
{||Alert('TBtnBmp
01')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
oTBtnBmp2 := TBtnBmp() :NewBar('copyuser',,,,'Msg 02',;
{||Alert('TBtnBmp
02')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


TBTNBMP2( )

E Descrio: Cl asse de obj et os vi suai s do t i po bot o, o qu al per mi t e a e xi bi o de
u ma i ma ge m ou de u m popup.

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nWi dt h] , [ a nHei ght ] , [ acResNa me 1] ,
[ acResNa me 2] , [ acBmpFil e 1] , [ acBmpFil e 2] , [ a bAct i on] , [ aoWnd] ,
[ acMsg] , [ a b Whe n] , [l Adj ust e] , [l Upda t e] )

E Parmetros:

anTop
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anLeft
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
anWidth Nu mri co, opci on al . Lar gur a e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a e m pi x el s.
acResName1 Car act er e, Nome do r esource
acResName2 Car act er e, N O UTI LI Z ADO
acBmpFile1 Car act er e, N O UTI LI Z ADO
acBmpFile2 Car act er e, N O UTI LI Z ADO
abAction Bl oco de cdi go. A o e x ecut a da
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
acMsg Car act er e, Me nsa ge m d e Hi nt
abWhen
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lAdjust Lgi co, NO UTI LI Z ADO
lUpdate Lgi co, NO UTI LI Z ADO

E Mtodos auxiliares:

- 402 -

ADVPL Completo



LoadBitmaps

O Descrio: At ri bui ao bot o os bi t ma ps ou r ecursos pa r a e xi bi o.
O Sintaxe: Loa dBi t ma ps( [ cResNa me 1] , [ cResNa me 2] , [ cBmpFi l e 1] ,
[ cBmpFil e 2] , [ cResNa me 3] , [ cB mpFil e 3] )

O Parmetros:

cResName1 Car act er e, Nome do r esource
cResName2 Car act er e, Nome do r esource
cBmpFile1 Car act er e, Nome do a r qui vo BMP
cBmpFile2 Car act er e, Nome do a r qui vo BMP
cResName3 Car act er e, Nome do r esource
cBmpFile3 Car act er e, Nome do r esource

O Retorno:

Nenhum

SetPopUpMenu

O Descrio: Set a o obj e t o do t i po TMe nu r ef er e nt e ao bot o.
O Sintaxe: Set PopupMe nu( oMe nu)
O Parmetros:

Ne nhu m -

O Retorno:

Nenhum -

E Aparncia:



- 403 -

ADVPL Completo



Exemplo:

Local oBtn := TBtnBmp2():New( 10, 10, 25, 25, 'printer_r2' , , , , , oDlg,
, , )
Exemplo 2 (Popup)
#INCLUDE 'PROTHEUS.CH'
User Function BtnBmpPopUp
Local oDlg
Local oBtn
DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 100,200 PIXEL
oBtn := TBtnBmp2():New( 10, 10, 13, 13, 'IBF-MENU.BMP' , 'IBF-MENU.BMP' ,
, , , oDlg, , , .T.)
oBtn:SetPopupmenu(TShowMenu())
ACTIVATE MSDIALOG oDlg CENTERED
Return

/**************************/
Static Function TShowMenu()
Local oMenu
oMenu := TMenu():New(0,0,0,0,.T.)
oMenu:Add(TMenuItem():New(,'Detalhes', 'Detalhes',,, ,,,,,,,,,.T.))
oMenu:Add(TMenuItem():New(,'Add Info', 'Add Info',,, ,,,,,,,,,.T.))
Return oMenu

TBUTTON( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po bot o, o qu al per mi t e a utili z ao
de t e xt o pa r a su a i de nt ifi cao.

E Propriedades:

lProcessing Lgi co. Se . T. i ndi ca o bot o est ef et u a ndo u ma ao.
bAction Bl oco de cdi go. Ex ecut a do qu a ndo o bot o pr essi on a do.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ acCa pt i on] , [ aoWnd] , [ a bAct i on] ,
[ a n Wi dt h] , [ a nHei ght ] , [ nPar 8] , [ aoFont ] , [lPar 10] ,
[ alPi x el ] , [lPar 12] , [ cPar 1 3] , [lPar 14] , [ a bWhe n] , [ bPar 16] , [lPar 17] )

E Parmetros:

Parmetro Ti po / Descri o
anRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
acCaption Car act er e, opci on al . Ti t ul o do bot o.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
abAction
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qu a ndo o bot o f or pr essi on a do.
anWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
nPar8 Reser v a do.
aoFont
Obj et o, opci on al . Obj et o t i po t Font com propri eda des da
f ont e ut i li z a da par a o t t ul o do bot o.

- 404 -

ADVPL Completo


lPar10 Reser v a do.
alPixel
Lgi co, opci on al . Se . T. consi der a as coor d e n a d as passa das
e m pi x el s, se . F . ( pa dr o) consi der a e m car act er es.
lPar12 Reser v a do.
cPar13 Reser v a do.
lPar14 Reser v a do.
abWhen
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
bPar16 Reser v a do.
lPar17 Reser v a do.

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo
aItems:= {'item1','item2','item3'}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Combo'
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop('Mudou item')},,,,.T.,,,,,,,,,'cCombo')

// Boto para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor '+cCombo )
Return NIL

- 405 -

ADVPL Completo



TCBROWSE( )

E Descrio: Cl asse de obj et os vi su ai s do t i po Gri d.

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci ona da / posi ci on a da no obj et o
nLen N mer o t ot al de li nhas do obj et o

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ a He a d ers] ,
[ a Col Si z es] , [ oDl g] , [ cFi el d] , [ uVal ue 1] , [ uVal ue 2] ,
[ uCha nge] , [ { | nRow, nCol , nFl a gs | [ uLDbl Cli ck] } ] ,
[ { | nRow, nCol , nFl a gs | [ uRCli ck] } ] , [ oFont ] , [ oCursor ] , [ nCl r For e] ,
[ nCl r Back] , [ cMsg] , [l Upda t e] , [ cAli as] , [lPi x el ] , [ { uWhe n } ] ,
[l Desi gn] , [ bVali d] , [l HScr oll ] , [l VScrol l ] )

E Parmetros:

nRow Nu mri co, opci onal . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
nWidth Nu mri co, opci onal . Lar gur a do obj et o
nHeight Nu mri co, opci on al . Al t ur a do obj et o
bFields Bl oco de cdi go, Li st a de Ca mpos
aHeaders Vet or, Descri o dos ca mpos pa r a no ca b eal ho
aColSizes Vet or, Lar gur a das col unas
oDlg
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
cField Car act er , opci onal . Ca mpos n ecessri os a o fil t ro
uValue1 I ndefi ni do, opci on al . I ni ci o do i nt er v al o par a o fi l t ro
uValue2 I ndefi ni do, opci on al . Fi m do i nt er v al o par a o fi l t ro
bChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
bLDblClick
Bl oco de cdi go, opci on al . Ex ecut a do qua ndo aci on a do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
bRClick No ut i li z a do
oFont Obj et o, opci on al . Font e
oCursor Obj et o, opci on al . Ti po do Cursor
nClrFore Nu mri co, opci onal . Cor do t e xt o da j a nel a .
nClrBack Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci on ar o mouse sobr e o
obj et o
lUpdate No ut i li z a do
cAlias
Car act er , opci on al se obj et o ut ili z a do com Vet or , obri ga t ori o
se ut i li z a do com Ta b el a
lPixel
Lgi co, opci onal . Se . T. as coor de na das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
bWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lDesign No Ut i li z ado
bValid
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do

- 406 -

ADVPL Completo


f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
lHScroll
Lgi co, opci on al . Se . T. , ha bili t a barr a d e rol a ge m
hori z ont al .
lVScroll Lgi co, opci on al . Se . T. , ha bili t a barr a d e rol a ge m v er t i cal .

E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nha par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 407 -

ADVPL Completo


RowCount

O Descrio: Ret or n a nu mer o d e l i nh as vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Nenhum -

O Retorno:

Nil

E Aparncia:




- 408 -

ADVPL Completo


Exemplo:

#include 'protheus.ch'
user function TcBrowse_EX()
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
Local aList := {} // Vetor com elementos do Browse
Local nX
// Cria Vetor para teste
for nX := 1 to 100
aListAux := {.T., strzero(nX,10), 'Descrio do Produto '+;
strzero(nX,3), 1000.22+nX}
aadd(aList, aListAux)
next

DEFINE MSDIALOG oDlg FROM 0,0 TO 520,600 PIXEL TITLE 'Exemplo da TCBrowse'
// Cria objeto de fonte que sera usado na Browse
Define Font oFont Name 'Courier New' Size 0, -12
// Cria Browse
oList := TCBrowse():New( 01 , 01, 300, 200,,;
'','Codigo','Descrio','Valor'},{20,50,50,50},;
oDlg,,,,,{||},,oFont,,,,,.F.,,.T.,,.F.,,, )
// Seta o vetor a ser utilizado
oList:SetArray(aList)
// Monta a linha a ser exibina no Browse
oList:bLine := {||{ If(aList[oList:nAt,01],oOK,oNO),;
aList[oList:nAt,02],;
aList[oList:nAt,03],;
Transform(aList[oList:nAT,04],'@E 99,999,999,999.99') } }
// Evento de DuploClick (troca o valor do primeiro elemento do Vetor)
oList:bLDblClick := {|| aList[oList:nAt][1] :=;
!aList[oList:nAt][1],oList:DrawSelect() }
// Principais commandos
oBtn := TButton():New( 210, 001,'GoUp()' , oDlg,{||oList:GoUp()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 001,'GoDown()', oDlg,{||oList:GoDown()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 230, 001,'GoTop()' , oDlg,{||oList:GoTop()}, ;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 240, 001,'GoBottom()', oDlg,{||oList:GoBottom()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 210, 060, 'nAt (Linha selecionada)' ,;
oDlg,{|| Alert(oList:nAt)},;
90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 060, 'nRowCount (Nr de linhas visiveis)',
oDlg,;{|| Alert(oList:nRowCount()) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )

oBtn := TButton():New( 230, 060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oList:nLen) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )

oBtn := TButton():New( 240, 060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aList,oList,'@!',3) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return


- 409 -

ADVPL Completo



TCHECKBOX( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Check Box.

E Propriedades:

bLClicked Bl oco de cdi go di spar a do ao cl i que do mouse no obj et o
bSetGet
Bl oco de cdi go di spar a do n a muda na d e i t e m sel eci on a do,
r esponsa v el pel a muda na de v al or da v a ri a v el nu meri ca
que i ndi ca o i t e m sel eci on a do.
bWhen
Bl oco de cdi go r ecebe u m l gi co e de Tr u e p er mi t e
al t er ao, se F al se n o per mi t e.
bValid Bl oco de cdi go e x ecut a do na sai da do obj et o.

E Construtor: Ne w( [ nRow] , [ nCol ] , [ cCa pt i on] , [ bSet Get ] , [ oDl g] , [ n Wi dt h] ,
[ nHei ght ] , [ a Hel pI ds] , [ bLCl i ck ed] , [ oFont ] , [ bVali d] , [ nCl r Te xt ] ,
[ nCl rPa ne] , [l Desi gn] , [lPi x el ] , [ cMsg] , [l Upda t e] , [ bWhe n] )

E Parmetros:

nRow Nu mri co, opci on al . Coor de n a da v er t i cal
nCol Nu mri co, opci on al . Coor de n a da hori z ont al
cCaption Car act er , Te xt o d escri t i vo
bSetGet Code- bl ock , opci on al , Respons v el pel a set a ge m de v al or
oDlg
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
nWidth Nu mri co, opci on al . Lar gur a do obj et o
nHeight Nu mri co, opci on al . Al t ur a do obj et o
aHelpIds No ut i li z a do
bLClicked Bl oco de cdi go, opci on al . Ex ecut a do a o cl i que do mouse .
oFont Obj et o, opci on al . Font e
bValid
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
nClrText Nu mri co, opci on al . Cor do t e xt o da j a nel a .
nClrPane Nu mri co, opci on al . Cor de f undo da j a nel a .
lDesign No ut i li z a do
lPixel
Lgi co, opci on al . Se . T. as coor de na das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
cMsg
Car act er , opci on al . Mesa mge a o posi ci on ar o mouse sobr e o
obj et o
lUpdate No ut i li z a do
bWhen
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo mud a na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.


- 410 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
user function TCheckBox()
DEFINE MSDIALOG oDlg FROM 0,0 TO 270,400 PIXEL TITLE 'Exemplo da
TCBrowse'
lCheck1 := .T.
oCheck1 := TCheckBox():New(01,01,'CheckBox 001',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck2 := TCheckBox():New(11,01,'CheckBox 002',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck3 := TCheckBox():New(21,01,'CheckBox 003',,oDlg,
100,210,,,,,,,,.T.,,,)

oCheck4 :=TCheckBox():New(31,01,'CheckBox 004',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck5 := TCheckBox():New(41,01,'CheckBox
005',,oDlg,100,210,,,,,,,,.T.,,,)


// Seta Eventos do primeiro Check
oCheck1:bSetGet := {|| lCheck1 }
oCheck1:bLClicked := {|| lCheck1:=!lCheck1 }
oCheck1:bWhen := {|| .T. }
oCheck1:bValid := {|| Alert('bValid') }
// Principais comandos
oBtn := TButton():New( 060, 001, 'Retorna estado do CheckBox
001',;
oDlg,{|| Alert(lCheck1) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return

- 411 -

ADVPL Completo



TCOLORTRIANGLE( )

E Descrio: Cl asse de obj et os vi su ai s do t i po Pal et a de Cor es.

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ aoWnd] , [ a n Wi dt h] , [ a nHei ght ] )

E Parmetros:

anRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a pal et a de v er
ser cri a da .
anWidth Nu mri co, opci on al . Lar gur a da pal et a e m pi x els.
anHeight Nu mri co, opci on al . Al t ur a da pal et a e m pi x el s.

E Mtodos auxiliares:

Create

O Descrio: Mt odo const r ut or opci on al da cl asse.
O Sintaxe: Cr e a t e( aoWnd)
O Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a pal et a de v er
ser cri a da .

O Retorno:

Objeto
Obj et o do t i po TCol or Tri a ngul e com os a t ri but os defi ni dos
com cont e do pa dr o.

RetColor

O Descrio: Ret or n a o RGB da cor sel eci on a da
O Sintaxe: RetColor ( )
O Parmetros:

Ne nhu m -

O Retorno:

Numrico Val or que r epr ese nt a do RGB da cor.



- 412 -

ADVPL Completo




SetColorIni

O Descrio: Defi ne a cor i ni ci al sel eci on a da par a o cont r ol e.
O Sintaxe: SetColorIni ( nCol or )
O Parmetros:

nCol or Val or da cor i ni ci al no pa dr o RGB.

O Retorno:

Nenhum -

SetColor

O Descrio: Defi ne a cor corr e nt e .
O Sintaxe: SetColor ( nCol or )
O Parmetros:

nCol or Val or da cor i ni ci al no pa dr o RGB.

O Retorno:

Nenhum -

SetSizeTriangule

O Descrio: Defi ne o t a ma nho do t ri ngul o de confi gur ao das cor es.
O Sintaxe: SetSizeTriangule ( n Wi dh, nHei ght )
O Parmetros:

nWi dt h Nu mri co. La r gur a
nHei ght Nu mri co. Al t ur a

O Retorno:

Nenhum -

E Aparncia:



- 413 -

ADVPL Completo



Exemplo:

#include protheus.ch


User Function tColor()
Local oDlg, oColorT
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Cores
// Usando o mtodo create
oColorT := tColorTriangle():Create( oDlg )
oColorT:SetColorIni( nColorIni )
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil

TCOMBOBOX( )

E Descrio: Cl asse de obj et os vi su ai s do t i po t ComboBox, a qu al cri a u ma
e nt r a da de da dos com ml ti pl a escol h a com i t e m defi ni do e m u ma
li st a v er t i cal , aci on a da por F 4 ou pel o bot o esquer do l ocali z a do na
par t e di r ei t a do cont rol e. A v a ri v el associ a da ao cont rol e t er o
v al or de u m dos i t e ns sel eci on a dos ou no caso d e u ma li st a
i nde x a da , o v al or de se u ndi ce.

E Propriedades:

aItems
Arr a y . Li st a d e i t e ns, ca r act er es, a ser e m e xi bi dos. Pod e t er
os segui nt es f or ma t os : a ) Seqe nci al , e x e mpl o :
{ i t e m1, i t e m2, . . . , i t e mN } ou b) I nde x a da , e x e mpl o :
{ a = i t e m1, b = i t e m2, . . . , n = i t e mN } .
nAt Nu mri co. Posi o do i t e m sel eci on a do.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ a bSet Get ] , [ a n I t e ms] , [ a n Wi dt h] ,
[ a nHei ght ] , [ aoWnd] , [ nPar 8] , [ a bCh a nge] , [ a bVali d] , [ a nCl r Te xt ] ,
[ a nCl r Back] , [ alPi x el ] , [ aoFont ] , [ cPar 15] , [lPar 16] , [ a bWhe n] ,
[lPar 18] , [ aPar 19] , [ bPa r 20] , [ cPar 21] , [ acRe a dVar ] )

E Parmetros:

Parmetro
anRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
anCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
abSetGet
Bl oco de cdi go, opci on al . Bl oco de cdi go no f or ma t o { | u |
i f ( Pcount ( ) > 0, < v a r > : = u, < v a r > ) } que o cont rol e ut ili z a
par a a t u ali z ar a v ari v el < v ar > . < v ar > de v e ser t i po
car act er. Se a l i st a f or seqe nci al , o cont rol e a t u ali z ar
< v ar > com o cont e do do i t e m sel eci on a do, se a li st a f or
i nde x a da , < v ar > ser a t u ali z a da com o v al or do ndi ce do
i t e m sel eci on a do.
anItems
Arr a y , opci on al . Li st a de i t e ms, ca r act er es, a ser e m e xi bi dos.
Pode t er os segui nt es f or ma t os : a ) Seq e nci al , e x e mpl o :
{ i t e m1, i t e m2, . . . , i t e mN } ou b) I nde x a da , e x e mpl o :
{ a = i t e m1, b = i t e m2, . . . , n = i t e mN } .
anWidth Nu mri co, opci onal . Lar gur a do cont rol e e m pi x el s.

- 414 -

ADVPL Completo


anHeight Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser
cri a do.
nPar8 Reser v a do.
abChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont r ol e
modi fi ca o i t e m sel eci on a do.
abValid
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
anClrBack Nu mri co, opci onal . Cor de f undo do cont rol e.
anClrText Nu mri co, opci on al . Cor do t e xt o do cont rol e.
alPixel
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
aoFont
Obj et o, opci on al . Obj et o t i po t Font utili z a do par a defi ni r as
car act er st i cas da f ont e utili z a da par a e xi bi r o cont e do do
cont r ol e.
cPar15 Reser v a do.
lPar16 Reser v a do.
abWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lPar18 Reser v a do.
aPar19 Reser v a do.
bPar20 Reser v a do.
cPar21 Reser v a do.
acReadVar
Car act er e, opci on al . Nome da v ari v el que o cont rol e de v er
ma ni pul ar, de v er ser a mesma v a ri v el i nf or ma da no
par met ro a bSet Get , e ser o r et or no da f un o Re a dVar ( ) .

E Mtodos auxiliares:

Select

O Descrio: Muda o i t e m sel eci on a do no combobox .
O Sintaxe: Sel ect ( [ a n I t e m] )
O Parmetros:

a nI t e m Nu mri co, opci on al . Posi o do i t e m a ser sel eci on a do.

O Retorno:

Nenhum -


- 415 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo
aItems:= {'item1','item2','item3'}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Combo'
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop('Mudou item')},,,,.T.,,,,,,,,,'cCombo')

// Boto para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor '+cCombo )
Return NIL

- 416 -

ADVPL Completo



TFOLDER( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont rol e - F ol der.

E Propriedades:

aPrompts Arr a y , Ti t ul o dos f ol ders
aDialogs Arr a y , Nome dos di l ogos
nOption Nu mri co, Fol der sel eci on a do
bSetOption Bl oco de cdi go, Ex ecut a do n a sel e o do f ol der

E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ aPr ompt s] , [ a Di al ogs] , [ aoWnd] ,
[ a n Opt i on] , [ a nCl r For e] , [ a nCl r Back] , [ alPi x el ] , [ al Desi gn] , [ a nWi dt h] ,
[ a nHei ght ] , [ acMsg] , [ al All Wi dt h] )

E Parmetros:

anTop
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anLeft
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
aPrompts Arr a y , Ti t ul o dos f ol ders
aDialogs Arr a y , Nome dos di l ogos
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
anOption Nu mri co, opci on al . Fol der sel eci on a do
anClrFore Nu mri co, opci on al . Cor de f r e nt e
anClrBack Nu mri co, opci on al . Cor de f undo
alPixel Lgi co, opci on al . Ut ili z a coor d e n a das e m pi x el
alDesign Lgi co, opci on al . NO USADO
anWidth Nu mri co, opci on al . Lar gur a e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a e m pi x el s.
acMsg Car act er e, Me nsa ge m d e Hi nt
alAllWidth Lgi co, opci on al . NO USADO

E Mtodos auxiliares:

SetOption

O Descrio: Sel eci on a f ol der desej a do
O Sintaxe: Set Opt i on( n Opt i on )
O Parmetros:

n Opt i on Nu mri co. Fol der a ser sel eci on a do

O Retorno:

Nenhum -


- 417 -

ADVPL Completo


AddItem

O Descrio: I nser e u m f ol der
O Sintaxe: AddItem ( cI t e m, l Vi si bl e )
O Parmetros:

cI t e m Car act er e. T t ul o do Fol der
l Vi si bl e Lgi co. Vi s v el

O Retorno:

Nenhum -

aEnable

O Descrio: Ha bili t a / Desa bili t a u m f ol der
O Sintaxe: a Ena bl e( nI t e m, l En a bl e )
O Parmetros:

nI t e m Nu mri co. Fol der par a h a bili t ar / desa bi li t ar
l En a bl e Lgi co. Ha bi li t a / Desa bili t a

O Retorno:

Nenhum -

E Aparncia:




- 418 -

ADVPL Completo



Exemplo:

Local oFolder
Local aFolder := { 'Folder 1', 'Folder 2', 'Folder 3' }

oFolder := TFolder():New( 0, 0, aFolder, aFolder, oDlg,,,, .T., , 200,;
200 )



TGET( )

E Descrio: Cl asse de obj et os vi suai s do t i po cont r ol e t Get , a qu al cri a u m
cont r ol e que ar ma z e n a ou al t er a o cont e do de u ma v ari v el a t r a v s
de di gi t ao. O cont e do da v a ri v el s modi fi ca do qu a ndo o
cont r ol e per de o f oco de edi o pa r a out ro cont r ol e.

E Propriedades:

lPasswor d
Lgi co. Se . T. o cont rol e se compor t a como e nt r a da de
da dos d e se nh a , e xi bi ndo ast eri scos * pa r a esconder o
cont e do di gi t a do.
Pi ct ur e
Car act er e. Mscar a de f or ma t ao do cont e do a ser
e xi bi do.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ a bSet Get ] , [ aoWnd] , [ a n Wi dt h] ,
[ a nHei ght ] , [ acPi ct ] , [ a bVali d] , [ a nCl r For e] , [ a nCl r Back] , [ aoFont ] ,
[lPar 12] , [ oPar 13] , [ alPi x el ] , [ cPar 15] , [lPar 16] , [ a bWhe n] , [lPar 18] ,
[lPar 19] , [ a bCha nge] , [ al Re a d Onl y] , [ alPasswor d] , [ cPar 23] ,
[ acRe a dVar ] , [ cPar 25] , [lPar 26] , [ nPar 27] , [lPar 28] )

E Parmetros:

anRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
anCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
abSetGet
Bl oco de cdi go, opci on al . Bl oco de cdi go no f or ma t o { | u |
i f ( Pcount ( ) > 0, < v a r > : = u, < v a r > ) } que o cont rol e ut ili z a
par a a t u ali z ar a v ari v el < v ar > . < v ar > de v e ser t i po
car act er, nu mri co ou d a t a .
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser
cri a do.
anWidth Nu mri co, opci on al . Lar gur a do cont rol e e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
acPict
Car act er e, opci on al . Mscar a de f or ma t ao do cont e do a
ser e xi bi do.
abValid
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
anClrFore Nu mri co, opci on al . Cor de f undo do cont rol e.
anClrBack Nu mri co, opci on al . Cor do t e xt o do cont rol e.
aoFont
Obj et o, opci on al . Obj et o t i po t Font utili z a do par a defi ni r as
car act er st i cas da f ont e utili z a da par a e xi bi r o cont e do do

- 419 -

ADVPL Completo


cont r ol e.
lPar12 Reser v a do.
oPar13 Reser v a do.
alPixel
Lgi co, opci on al . Se . T. as coor de na das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
cPar15 Reser v a do.
lPar16 Reser v a do.
abWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
lPar18 Reser v a do.
lPar19 Reser v a do.
abChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont r ol e
modi fi ca o v al or da v ari v el associ a da .
alReadOnly Lgi co, opci on al . Se . T. o cont r ol e no poder ser edi t a do.
alPassword
Lgi co, opci on al . Se . T. o cont r ol e e xi bi r ast eri scos * no
l ugar dos ca r act er es e xi bi dos pel o cont r ol e par a si mul ar
e nt r a da d e se nh a .
cPar23 Reser v a do.
acReadVar
Car act er e, opci on al . Nome da v ari v el que o cont rol e de v er
ma ni pul ar, de v er ser a mesma v a ri v el i nf or ma da no
par met ro a bSet Get , e ser o r et or no da f un o Re a dVar ( ) .
cPar25 Reser v a do.
lPar26 Reser v a do.
nPar27 Reser v a do.
lPar28 Reser v a do.

E Aparncia:



- 420 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo, nGet1:=0
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Get'
oGet1:= TGet():New(10,10,{|u| if(PCount()>0,nGet1:=u,nGet1)}, oDlg,;
100,20,'@E 999,999.99',;
{|o|nGet1>1000.00},,,,,,.T.,,,,,,,,,,'nGet1')

// Boto para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor '+Transform(nGet1,'@E 999,999.00') )

Return NIL

TGROUP( )

E Descrio: Cl asse de obj et os vi su ai s do ti po pai nel t Group, a qu al cri a u m
pai nel onde cont r ol es vi suai s pode m ser a gr up a dos ou cl assi fi ca dos.
Nest e pai nel cri a da u ma bor da com t t ul o e m vol t a dos cont r ol es
a gr upa dos.

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ a nBot t om] , [ a nRi ght ] , [ acCa pt i on] ,
[ aoWnd] , [ a nCl r Te xt ] , [ a nCl rPa ne] , [ alPi x el ] , [lPar 10] )

E Parmetros:

anTop
Nu mri co, opci onal . Coor de na da v er t i cal superi or e m pi x el s
ou ca r act er es.
anLeft
Nu mri co, opci on al . Coor de n a da hori z ont al esquer da e m
pi x el s ou car act er es.
anBottom
Nu mri co, opci on al . Coor de n a da v er t i cal i nf eri or e m pi x el s
ou ca r act er es.
anRight
Nu mri co, opci on al . Coor de n a da hori z ont al di r ei t a e m pi x el s
ou ca r act er es.
acCaption Car act er e, opci on al . T t ul o do gr upo.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser
cri a do.
anClrText Nu mri co, opci on al . Cor do t e xt o.
anClrPane Nu mri co, opci onal . Cor do f undo.
alPixel
Lgi co, opci on al . Se . T. as coor de na das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
lPar10 Reser v a do.


- 421 -

ADVPL Completo



E Aparncia:




Exemplo:


#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oGroup:= tGroup():New(10,10,130,130,'grupo de gets',oDlg,,,.T.)
@ 18,16 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
@ 38,16 MSGET oGet2 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
ACTIVATE MSDIALOG oDlg CENTERED











- 422 -

ADVPL Completo



THBUTTON( )

E Descrio: Cl asse de obj et os vi su ai s do t i po bot o com hi perl i nk.

E Propriedades:

bAct i on Bl oco de cdi go. Ex ecut a do qu a ndo o bot o pr essi on a do.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ acCa pt i on] , [ aoWnd] , [ a bAct i on] ,
[ a n Wi dt h] , [ a nHei ght ] , [ aoFont ] , [ a bWh e n] )

E Parmetros:

Parmetro Ti po / Descri o
anRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
anCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
acCaption Car act er e, opci on al . Ti t ul o do bot o.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
abAction
Bl oco de cdi go, opci onal . Bl oco que d e v er ser aci ona do
qu a ndo o bot o f or pr essi ona do.
anWidth Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
aoFont
Obj et o, opci on al . Obj et o t i po t Font com propri eda des da
f ont e ut i li z a da par a o t t ul o do bot o.
abWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.

E Mtodos auxiliares:

Create

O Descrio: Mt odo const r ut or opci on al da cl asse.
O Sintaxe: Cr e a t e( aoWnd)
O Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a pal et a de v er
ser cri a da .

O Retorno:

Objeto
Obj et o do t i po THBut t on com os a t ri but os defi ni dos com
cont e do pa dr o.


- 423 -

ADVPL Completo



E Aparncia:



Exemplo:

#include protheus.ch
#include hbutton.ch
User Function MyhBtn()
Local oDlg, ohBtn
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu hButton
// Usando o mtodo create
ohBtn:= tHButton():Create( oDlg )
ohBtn:nTop := 100
ohBtn:nLeft := 10
ohBtn:nWidth := 100
ohBtn:nHeight := 30
ohBtn:cCaption := 'hButton'
ohBtn:blClicked := { || MsgStop( 'Cliquei' ) }
// Usando o command
@ 200,100 HBUTTON ohBtn PROMPT 'Exemplo hButton' SIZE 100,30 ACTION
MsgStop('Cliquei') OF oDlg MESSAGE 'hButton'
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil


TIBROWSER( )

E Descrio: Cl asse de obj et os vi su ai s do t i po P gi n a de I nt er n et , se ndo
necess ri o i ncl ui r a cl a usul a Browser En a bl ed = 1 no Confi g do
Re mot e. I NI

E Propriedades:

- Her da das da cl asse sup eri or

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei ght ] , [ cPa ger ] , [ oWnd] )

E Parmetros:

nRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
nCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es
nWidth Nu mri co, opci on al . Lar gur a e m pi x el s
nHeigth Nu mri co, opci on al . Al t ur a e m pi x el s.
cPage Car act er . Enr edeo URL da p gi na de I nt er n et
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do

E Aparncia:

- 424 -

ADVPL Completo





Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// Habilitar no Remote(Config) -> BrowserEnabled=1
oTIBrowser:=
TIBrowser():New(0,0,306,134,'http://www.microsiga.com.br',oDlg )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL












- 425 -

ADVPL Completo



TLISTBOX( )

E Descrio: Cl asse de obj et os vi suai s do t i po cont rol e t Li st box, a qu al cri a u ma
j a nel a com i t e ns sel eci on v ei s e ba rr a d e rol a ge m. Ao sel eci onar u m
i t e m, u ma v ari v el a t u ali z a da com o cont e do do i t e m sel eci on a do.

E Propriedades:

nAt Nu mri co. Posi o do i t e m sel eci on a do.
aItems Arr a y de i t e ms ca r act er es. Li st a do i t e ns sel eci on v ei s.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ a bSet Get ] , [ a a I t e ms] , [ a nWi dt h] ,
[ a nHei gt h] , [ a bCha nge] , [ aoWnd] , [ a bVali d] , [ a nCl r For e] ,
[ a nCl r Back] , [ alPi x el ] , [lPar 13] , [ a bLDBLCl i ck] , [ aoFont ] , [ cPar 16] ,
[lPar 17] , [ a bWhe n] , [ aPar 19] , [ bPa r 20] , [lPar 21] , [lPar 22] ,
[ a bRi ght Cli ck] )

E Parmetros:

anRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
anCol
Nu mri co, opci on al . Coor de na da hori z ont al e m pi x el s ou
car act er es.
abSetGet
Bl oco de cdi go, opci on al . Bl oco de cdi go no f or ma t o { | u |
i f ( Pcount ( ) > 0, < v a r > : = u, < v a r > ) } que o cont rol e ut ili z a
par a a t u ali z ar a v ari v el < v ar > . < v ar > de v e ser t i po
car act er ou nu mri ca .
aaItems
Arr a y de i t e ms ca r act er es, opci on al . Li st a de i t e ms
sel eci on v ei s.
anWidth Nu mri co, opci on al . Lar gur a do cont rol e e m pi x el s.
anHeight Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
abChange
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser
cri a do.
abValid
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qua ndo o cont e do f or i nv li do.
anClrFore Nu mri co, opci on al . Cor de f undo do cont rol e.
anClrBack Nu mri co, opci on al . Cor do t e xt o do cont rol e.
alPixel
Lgi co, opci on al . Se . T. as coor de na das i nf or ma das s o e m
pi x el s, se . F . s o e m ca r act er es.
lPar13 Reser v a do.
abLDBLClick
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci on a do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
aoFont
Obj et o, opci on al . Obj et o t i po t Font utili z a do par a defi ni r as
car act er st i cas da f ont e utili z a da par a e xi bi r o cont e do do
cont r ol e.
cPar16 Reser v a do.
lPar17 Reser v a do.
abWhen
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.

- 426 -

ADVPL Completo


aPar19 Reser v a do.
bPar20 Reser v a do.
lPar21 Reser v a do.
lPar22 Reser v a do.
abRightClick
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci on a do cl i ck
do bot o di r ei t o do mouse sobr e o cont rol e.

E Mtodos auxiliares:

Select

O Descrio: Fora a sel eo d e u m i t e m.
O Sintaxe: Sel ect ( [ a n I t e m] )
O Parmetros:

nI t e m Nu mri co, opci on al . Posi o do i t e m a ser sel eci on a do.

O Retorno:

Nenhum -

Add

O Descrio: Adi ci on a novo i t e m.
O Sintaxe: Add( cTe xt , nPos )
O Parmetros:

cTe xt Car act er e, obri ga t ri o. Te xt o do i t e m.
nPos
Nu mri co, obri ga t ri o. Se 0 ou mai or qu e o n mer o d e
i t e ns, i nser e o i t e m no fi n al da li st a . Se v al or e nt r e 1 e
n mero de i t e ns, i nser e o i t e m na posi o i nf or ma da ,
e mpur r a ndo o i t e m a nt eri or par a bai xo.

O Retorno:

Nenhum -

Modify

O Descrio: Modi fi ca o t e xt o de u m i t e m.
O Sintaxe: Modi f y( cTe xt , nPos )
O Parmetros:

cTe xt Car act er e, obri ga t ri o. Nov o t e xt o do i t e m.
nPos
Nu mri co, obri ga t ri o. Posi o a ser modi fi ca da de v e s er
mai or que 0 e me nor ou i gu al que o n mer o d e i t e ns.

O Retorno:

Nenhum -


- 427 -

ADVPL Completo



Del

O Descrio: Re mov e u m i t e m.
O Sintaxe: Del ( nPos )
O Parmetros:

nPos
Nu mri co, obri ga t ri o. Posi o a ser e xcl ui da , de v e ser
mai or que 0 e me nor ou i gu al que o n mer o d e i t e ns.

O Retorno:

Nenhum -

Len

O Descrio: Ret or n a o n mer o de i t e ns.
O Sintaxe: Le n( )
O Parmetros:

Ne nhu m -

O Retorno:

Nu mri co N mer o d e i t e ns.

Reset

O Descrio: Apa ga t odos os i t e ns.
O Sintaxe: Reset ( )
O Parmetros:

Ne nhu m -

O Retorno:

Nenhum -


- 428 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oList, nList:= 1
Local aItems:={}
Aadd(aItems,'Item 1')
Aadd(aItems,'Item 2')
Aadd(aItems,'Item 3')
Aadd(aItems,'Item 4')
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE 'Teste'
oList:= tListBox():New(10,10,{|u|if(Pcount()>0,nList:=u,nList)};
,aItems,100,100,,oDlg,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 429 -

ADVPL Completo



TMENU( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Me nu.

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w ( [ nTop] , [ nLef t ] , [ nHei ght ] , [ n Wi dt h] , [lPopUp] , [ cBmpNa me] ,
[ oWnd] , [ nCl r NoSel ect ] , [ nCl r Sel ect ] , [ cArr owUpNoSel ] ,
[ cArr owUpSel ] , [ cArr owDownNoSel ] , [ cAr r owDownSel ] )

E Parmetros:

nTop Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s.
nLeft Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s.
nHeight Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
nWidth Nu mri co, opci on al . Lar gur a do cont rol e e m pi x el s.
lPopUp Lgi co. Defi ne se o obj e t o ser u m PoPup
cBmpName Car act er opci on al . Fi gur a do Me nu
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er
ser cri a do
nClrNoSelect Nu meri co opci onal . Cor qua ndo no sel eci on a do
nClrSelect Nu meri co opci on al . Cor qu a ndo sel eci on a do
cArrowUpNoSel
Car act er opci on al , Defi ne a fi gur a da set a par a ci ma
qu a ndo n o sel eci on a do o i t e m.
cArrowUpSel
Car act er opci on al , Defi ne a fi gur a da set a par a ci ma
qu a ndo sel eci on a do o i t e m.
cArrowDownNoSel
Car act er opci on al , Defi ne a fi gur a da set a par a bai xo
qu a ndo n o sel eci on a do o i t e m.
cArrowDownSel
Car act er opci on al , Defi ne a fi gur a da set a par a bai xo
qu a ndo sel eci on a do o i t e m.

E Aparncia:



- 430 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMenu := TMenu():New( 0,0,0,0,.F.,'',oDlg,CLR_WHITE,CLR_BLACK)
// Adiciona Item ao Menu Principal
oMenuItem1 := TMenuItem():New2( oMenu:Owner(),'Item 001','Item
001',,,)
oMenu:Add( oMenuItem1 )

// Adiciona sub-Itens
oMenuItem2 := TMenuItem():New2( oMenu:Owner(),'Sub-Item
001',,,{||Alert('TMenuItem')})
oMenuItem3 := TMenuItem():New2( oMenu:Owner(),'Sub-Item
002',,,{||Alert('TMenuItem')})
oMenuItem1:Add( oMenuItem2 )
oMenuItem1:Add( oMenuItem3 )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


TMENUBAR( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Bar r a d e Me nu.

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ oWnd] )

E Parmetros:

oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.

E Aparncia:




- 431 -

ADVPL Completo


Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
// Monta um Menu Suspenso
TMenuBar := TMenuBar():New(oDlg)
TMenuBar:nClrPane := RGB(183,208,248) // Cor de fundo do Menu
oTMenu1 := TMenu():New(0,0,0,0,.T.,,oDlg)
oTMenu2 := TMenu():New(0,0,0,0,.T.,,oDlg)
TMenuBar:AddItem('Arquivo' , oTMenu1, .T.)
TMenuBar:AddItem('Relatorio', oTMenu2, .T.)

// Cria Itens do Menu
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 01',,,,;
{||Alert('TMenuItem 01')},,'AVGLBPAR1',,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 02',,,,;
{||Alert('TMenuItem 02')},,,,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

TMETER( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont rol e t Met er, a qu al e xi be u ma
r gua ( ga uge) d e pr ocessa me nt o, d escr e v e ndo o a nda me nt o de u m
processo a t r a v s da e xi bi o de u ma ba rr a hori z ont al .

E Propriedades:

nTot al
Nu mri co. N mer o t ot al de passos a t o pr e e nchi me nt o da
r gua d e processo.
lPerce nt a g e
Lgi co. Se . T. consi der a o passo de movi me nt ao e m
porce nt a ge m.
nCl r Bar Nu mri co. Cor da bar r a de a nda me nt o.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ a bSet Get ] , [ a nTot al ] , [ aoWnd] , [ a nWi dt h] ,
[ a nHei ght ] , [lPar 8] , [ alPi x el ] , [ oPar 10] , [ cPar 11] , [ al NoPerc] ,
[ a nCl rPa ne] , [ nPar 14] , [ a nCl r Bar ] , [ nPar 16] , [lPar 17] )

E Parmetros:

a nRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
a nCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
a bSet Get
Bl oco de cdi go, opci on al . Bl oco de cdi go no f or ma t o { | u |
i f ( Pcount ( ) > 0, < v a r > : = u, < v a r > ) } que o cont rol e ut ili z a
par a a t u ali z ar a v ari v el < v ar > . < v ar > de v e ser t i po
nu mri co.
a nTot al
Nu mri co, opci on al . Nu mer o t ot al de passos a t o
pr e e nchi me nt o da r gu a de processo.

- 432 -

ADVPL Completo


aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser a
cri a do.
a n Wi dt h Nu mri co, opci onal . Lar gur a do cont rol e e m pi x el s.
a nHei ght Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
lPar 8 Reser v a do.
alPi x el
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
oPar 10 Reser v a do.
cPar 11 Reser v a do.
al NoPerc
Lgi co, opci onal . Se . T. ( pa dr o) n o consi der a os passos d e
a t uali z ao e m porce nt a ge m.
a nCl rPa ne Nu mri co, opci onal . Cor de f undo do cont rol e.
nPar 14 Reser v a do.
a nCl r Bar Nu mri co, opci on al . Cor da bar r a d e a nda me nt o.
nPar 16 Reser v a do.
lPar 17 Reser v a do.

E Mtodos auxiliares:

Set

O Descrio: At u ali z a a posi o da r gu a de pr ocessa me nt o.
O Sintaxe: Set ( [ nVal ] )
O Parmetros:

nVal
Nu mri co, opci on al . Novo v al or da posi o da r gu a de
processa me nt o.

O Retorno:

Nenhum -


E Aparncia:



- 433 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
STATIC lRunning:=.F., lStop:=.F.
User Function Teste()
Local oDlg, oMeter, nMeter:=0, oBtn1, oBtn2
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE 'Teste' Pixel
oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)};
,100,oDlg,100,16,,.T.) // cria a rgua
// boto para ativar andamento da rgua
@ 30,10 BUTTON oBtn1 PROMPT 'Run ' OF oDlg PIXEL ACTION RunMeter(oMeter)
@ 50,10 BUTTON oBtn2 PROMPT 'Stop' OF oDlg PIXEL ACTION lStop:=.T.
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
STATIC Function RunMeter(oMeter)
If lRunning
Return
Endif
lRunning:= .T.

oMeter:Set(0)
// inicia a rgua
While .T. .and. !lStop
Sleep(1000) // pra 1 segundo
ProcessMessages() // atualiza a pintura da janela, processa mensagens do
windows
nCurrent:= Eval(oMeter:bSetGet) // pega valor corrente da rgua
nCurrent+=10 // atualiza rgua

oMeter:Set(nCurrent)
if nCurrent==oMeter:nTotal
Return
endif
Enddo

lRunning:= .F.
lStop:= .F.
Return


- 434 -

ADVPL Completo



TMSGRAPHIC( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Gr fi co.

E Propriedades:

l 3 D Lgi co, opci onal Gr fi co e m 3 D
l Axi sVi si b Lgi co, opci onal Most r a ei xos do gr fi co

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ aoWnd] , [ aoF ont ] , [ a nCl r Te xt ] ,
[ a nCl r Back] , [ a n Wi dt h] , [ a nHei ght ] )

E Parmetros:

a nRow Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s.
a nCol Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a i ma ge m d e v er
ser cri a da .
aoFont Obj et o, opci on al . Font e utili z a da no gr fi co.
a nCl r Te xt Car act er e, Nome do r esource.
a nCl r Back Car act er e, Nome do a r qui vo.
a n Wi dt h Lgi co, opci onal . Exi be bor da
a nHei ght
Obj et o, opci on al . Ja nel a ou cont r ol e onde a i ma ge m d e v er
ser cri a da .

E Mtodos auxiliares:

CreateSerie

O Descrio: Mt odo par a cri ao de u ma seri e par a o gr fi co.
O Sintaxe: Cr e a t e Seri e( [ nSeri eTy pe] , [ cLeg e nd] , [ n Deci mal s] ,
[l ShowVal ues] )
O Parmetros:

nSeri eTy p e
Nu mri co. I ndi ca o t i po do gr fi co
GRP_LI NE 1
GRP_AREA 2
GRP_POI NT 3
GRP_BAR 4
GRP_PI E 10
cLeg e nd Car act er e, opci on al . Lege nda da sri e.
n Deci mal s
Nu mri co, opci on al . Nu mer o d e casas deci mai s dos
v al or es.
l ShowVal ues Lgi co, opci on al . Most r a v al or es

O Retorno:

Nu mri co Nu mer o da sri e cri a da .


- 435 -

ADVPL Completo



Add

O Descrio: Mt odo par a a di ci on ar u m i t e m ao gr fi co.
O Sintaxe: Add( nSeri e, nVal , cLeg e nd, nCol or )
O Parmetros:

nSeri e Nu mri co. Seri e a ser i nseri do o i t e m.
nVal Nu mri co. Val or do i t e m.
cLeg e nd Car act er e. Lege nda do i t e m.
nCol or Nu mri co, Cor do i t e m.

O Retorno:

Nenhum -

SetGradiente

O Descrio: Mt odo pa r a set a r o f undo do gr fi co com u ma cor gr a di e nt e
e m d et er mi n a da di r e o.
O Sintaxe: Set Gr a di e nt ( nDi r ect i on, St ar t Col or , EndCol or )
O Parmetros:

n Di r ect i on
Nu mri co. I ndi ca di r e o do gr a di e nt e.
GDT OPBOTT OM 1
GDBOTT OMT OP 2
GDLEFTRI GHT 3
GDRI GHTLEFT 4
St ar t Col or Nu mri co. Cor i ni ci al .
EndCol or Nu mri co. Cor fi n al .

O Retorno:

Nenhum -

SetTitle

O Descrio: Defi ne o t i t ul o do gr fi co.
O Sintaxe: Set Ti tl e( cTi tl e, cTi t l e 2, Col or, Ali g me nt , l Foot )
O Parmetros:

cTi tl e Car act er e. Pri mei ro t i t ul o.
cTi tl e 2 Car act er e. Segundo t i t ul o.
Col or Nu mri co. Cor do t i t ul o.
Ali g me nt
Nu mri co. Al i nh a me nt o do t i t ul o.
A_LEFTJUST 1
A_RI GHTJUS 2
A_CENTER 3
l Foot Lgi co. I ndi ca t i t ul o no r oda p do gr fi co.

O Retorno:

Nenhum -


- 436 -

ADVPL Completo



SetLegenProp

O Descrio: Mt odo par a set a r propri eda des da l ege nda .
O Sintaxe: Set Leg e nPr op( Ali gn, Col or, St yl e, Vi si bl e )
O Parmetros:

Ali gn
Nu meri co. Al i nh a me nt o da l ege nda .
GRP_SCRT OP 1
GRP_SCRLEFT 2
GRP_SCRBOTT OM 3
GRP_SCRRI GHT 4
Col or Nu mri co. Cor da l ege nda .
St yl e
Nu mri co. Est i l o da l ege nda .
GRP_AUT O 1
GRP_SERI ES 2
GRP_VALUES 3
GRPLASTVAL 4
Vi si bl e Lgi co. I ndi ca de o t i t ul o ser vi s v el .

O Retorno:

Nenhum -


SetMargins

O Descrio: Mt odo pa r a set ar as mar g e ns superi or , i nf eri or e l a t er ai s do
gr fi co.
O Sintaxe: Set Mar gi ns( nTop, nLef t , nBot t om, nRi ght )
O Parmetros:

nTop Nu mri co. Posi o e m r el ao a o t opo do gr fi co.
nLef t Nu mri co. Posi o e m r el ao a esqu er da .
nBot t om Nu mri co. Posi o e m r el ao a o r oda p .
nRi ght Nu mri co. Posi o e m r el ao a di r ei t a .

O Retorno:

Nenhum -

SetRangeY

O Descrio: Define a escala dos valores do eixo Y
O Sintaxe: Set Ra ng eY ( mi n, ma x, del t a ) .
O Parmetros:

Mi n v al or i ni ci al
Ma x v al or fi nal
del t a
i nt er v al o e nt r e os v al or es [ opci on al , cal cul a do
a ut oma t i ca me nt e ]

O Retorno:

Nenhum -

- 437 -

ADVPL Completo



SaveToBMP

O Descrio: Mt odo p ar a sal v ar o gr fi co a t u al e m u m bi t ma p no
ser v er (Obsoleto, ver SaveToImage) .
O Sintaxe: Sa v eToBMP( B mpNa me, Pa t hToWri t e )
O Parmetros:

BmpNa me Car act er e, Nome do da fi gur a a ser sal v a .
Pa t hToWri t e Car act er e. Pa t h no Ser v er onde ser sal v a a fi gur a .

O Retorno:

Lgi co I ndi ca se a i ma ge m f oi sal v a corr et a me nt e.


SaveToImage

O Descrio: Mt odo par a sal v ar o gr fi co a t u al e m u m f or ma t o d e pr -
det er mi n a do no ser v er.
O Sintaxe: Sa v eToI ma ge ( BmpNa me, Pa t hToWri t e, Ty p e I ma ge)
O Parmetros:

BmpNa me Car act er e, Nome do da fi gur a a ser sal v a .
Pa t hToWri t e Car act er e. Pa t h no Ser v er onde ser sal v a a fi gur a .
Ty pe I ma g e
Car act er e. Ti po da Fi gur a ( Def a ul t 'JPE G')
Ti pos supor t a dos : JPE G, PNG, BMP

O Retorno:

Lgi co I ndi ca se a i ma ge m f oi sal v a corr et a me nt e.

DelSerie

O Descrio: Mt odo par a del et ar u ma sri e do gr afi co.
O Sintaxe: Del Seri e ( nSeri e )
O Parmetros:

nSeri e Nu mri co. Seri e a ser d el et a da .

O Retorno:

Lgi co I ndi ca se a sri a f oi r e movi da do gr fi co

ZoomIn

O Descrio: Mt odo par a ef et u ar z oom i nt er no ( + ) .
O Sintaxe: ZoomI n( )
O Parmetros:

Nenhum -

O Retorno:

Nenhum -

- 438 -

ADVPL Completo



ZoomOut

O Descrio: Mt odo par a ef et u ar z oom e xt er no ( - ) .
O Sintaxe: ZoomOut ( )
O Parmetros:

Nenhum -

O Retorno:

Nenhum -

E Aparncia:
















- 439 -

ADVPL Completo



Exemplo:

#include 'MSGRAPHI.CH'
User Function tMsGraphicTst()

DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 250,330 PIXEL

@ 001, 001 MSGRAPHIC oGraphic SIZE 120,120 OF oDlg

oGraphic:SetTitle('Titulo do Grafico', DTOC(Date()), CLR_BLACK,
A_LEFTJUST, GRP_TITLE )
oGraphic:SetMargins(2,6,6,6)
oGraphic:SetGradient(GDBOTTOMTOP, CLR_HGRAY, CLR_WHITE)
oGraphic:SetLegenProp(GRP_SCRRIGHT, CLR_HGRAY, GRP_AUTO,.T.)

nSerie := oGraphic:CreateSerie( 10 )
oGraphic:l3D := .T. // Grafico em 3D
oGraphic:lAxisVisib := .T. // Mostra os eixos

// Itens do Grafico
oGraphic:Add(nSerie, 200, 'Item01', CLR_BLUE )
oGraphic:Add(nSerie, 180, 'Item02', CLR_RED )
oGraphic:Add(nSerie, 210, 'Item03', CLR_BLUE )
oGraphic:Add(nSerie, 110, 'Item04', CLR_BLUE )
oGraphic:Add(nSerie, 100, 'Item05', CLR_BLUE )
oGraphic:Add(nSerie, 080, 'Item06', CLR_BLUE )
oGraphic:Add(nSerie, 110, 'Item07', CLR_BLUE )

@ 001, 124 BUTTON 'Salva Grafico' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:SaveToBMP('Exemplo.bmp','\web\')
@ 020, 124 BUTTON 'Zoom IN' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:ZoomIn()
@ 040, 124 BUTTON 'Zoom OUT' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:ZoomOut()
@ 060, 124 BUTTON 'Deleta Serie' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:DelSerie(nSerie)

ACTIVATE MSDIALOG oDlg CENTERED

Return









- 440 -

ADVPL Completo



TMSGBAR( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Roda p .

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w ( [ oWnd] , [ cPr ompt , ] , [l Ce nt er ed] , [l Cl ock] , [l Da t e] , [l Kbd] ,
[ nCl r For e] , [ nCl r Back] , [ oFont ] , [l I nset ] , [i ma ge Na me] )

E Parmetros:

oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
cPr ompt Car act er . Descri o n a Barr a
l Ce nt er ed Logi co. Defi ne ce nt r al i z ao do t e xt o
l Cl ock Nao ut i li z a do
l Da t e Nao ut i li z a do
l Kbd Nao ut i li z a do
nCl r For e Nu meri co, opci onal . Defi ne cor da f ont e da ba rr a
nCl r Back Nu meri co, opci on al . Defi ne cor do f undo da ba rr a
oFont
Obj et o, opci on al . Obj et o t i po t Font com propri eda des da
f ont e ut i li z a da par a o t t ul o do bot o.
l I nset Nao ut i li z a do
i ma ge Na me Car act er , opci on al . I nser e fi gur a l a t er al esquer d a

E Mtodos auxiliares:

AddItem

O Descrio: Mt odo i nser e u m subi t e m no roda p
O Sintaxe: AddI t e m( oTMsgI t e m )
O Parmetros:

oTMsgI t e m
Obj et o do t i po TMsgI t e m que ser i nseri do co mo subi t e m
do r oda p .

O Retorno:

Nenhum -


- 441 -

ADVPL Completo


SetMsg

O Descrio: Defi ne a descri o da bar r a d e roda p
O Sintaxe: Set Msg( cTe xt o )
O Parmetros:

cTe xt o Te xt o a ser i nseri do n a barr a

O Retorno:

Nenhum -

E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software',
.F.,.F.,.F.,.F., RGB(116,116,116),,,.F.)
oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T.,
{||})
oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T.,
{||Alert('Item da Barra Acionado')} )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 442 -

ADVPL Completo


TMSGITEM( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont rol e ut ili z a do par a a di ci on ar
me nsa ge ns e m out ros obj et os, como bar r as e me nus.

E Propriedades:

- Her da das das cl asses superi or es

E Construtor: New( <oMsgBar >, <cMsg>, <nSize>, <oFont>, <nClrFore>,
<nClrBack>, lEnable , [ < { bAction} >], cImagem )

E Parmetros:

oMsgBar Obj et o do t i po bar r a ou me nu no qu al se r a di ci on a do o i t e m
de me nsa ge m.
cMsg Me nsa g e m que ser e xi bi da pel o obj et o
nSize Ta ma nho da f ont e do t e xt o
oFont Font e do t e xt o
nClrFore Cor da f ont e do t e xt o
nClrBack Cor do f undo do obj et o
lEnable I ndi ca se o obj et o est h a bili t a do.
bAction Bl oco de cdi go e x ecut a do qua ndo o obj et o a t i v a do
cImagem I ma g e m a ser vi ncul a da no obj et o.

E Aparncia:



- 443 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software',
.F.,.F.,.F.,.F., RGB(116,116,116),,,.F.)
oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T.,
{||})
oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T.,
{||Alert('Item da Barra Acionado')} )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

.


TMULTIBTN( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont rol e - Ml ti pl os bot es.

E Propriedades:

bAct i on
Bl oco de cdi go. Ex ecut a do ao pr eci on ar o bot o esquer do
do mouse .

E Construtor: Ne w( [ nRow] , [ nCol ] , [ cTi tl e] , [ oWnd] , [ bAct i on] , [ n Wi dt h] ,
[ nHei ght ] , [i mgNa me] , [ ori ] , [ cMsg] , [ bt nPerLi ne] )

E Parmetros:

nRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
nCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
bAct i on
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qu a ndo o bot o f or pr essi on a do.
nWi dt h Nu mri co, opci on al . Lar gur a e m pi x el s
nHei gt h Nu mri co, opci on al . Al t ur a e m pi x el s.
i mgNa me
Car act er . I ma g e m a ser i nseri da ao l a do esqu er do do
compone nt e
ori Nu meri co, opci on al . Ori e nt ao dos bot es.
cMsg Car act er , Opi ci on al . Descri o do t i po t ool ti p( hi nt ) do i t e m
bt nPerLi ne Nu meri co, opci onal . Qu a nt i da de de bot es por l i nh a


- 444 -

ADVPL Completo



E Mtodos auxiliares:

LoadImage
O Descrio: Muda a fi gur a a esqu er da do compone nt e
O Sintaxe: Loa dI ma g e( cI ma ge m)
O Parmetros:

cI ma ge m Nome da i ma ge m que ser ca r r ega da p el o obj et o

O Retorno:

Nenhum -

AddButton
O Descrio: I nser e u m bot o
O Sintaxe: AddBut t on( cTe xt o)
O Parmetros:

cTe xt o Te xt o pa r a e xi bi o no bot o i nseri do.

O Retorno:

Nenhum -

SetTitle
O Descrio: Muda o t i t ul o e o nu mer o d e bot es por li nh a
O Sintaxe: Set Ti tl e( cTe xt o, nBot oes)
O Parmetros:

cTe xt o Te xt o que ser a t ri bu do a os bot es
nBot oes N mer o d e bot es por l i nh a

O Retorno:

Nenhum -

SetFonts
O Descrio: Muda a f ont do t i t ul o e dos bot es
O Sintaxe: Set Ti tl e( cFont Ti t , nSi z eTi t , nFont But , nSi z e But )
O Parmetros:

cFont Ti t Nome da f ont e que ser a t ri bu da ao t t ul o
nSi z eTi t Ta ma nho da f ont e do t t ul o
nFont But Nome da f ont e que ser a t ri bu da aos bot es
nSi z e But Ta ma nho da f ont e dos bot es

O Retorno:

Nenhum -


- 445 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

otMultiBtn := tMultiBtn():New( 01,01,'cTitle1',oDlg,;
{|x|Alert(Str(x)) },200,150,'afastamento',0,'cTitle',3
)

otMultiBtn:SetFonts('Tahoma',16,'Tahoma',10)
otMultiBtn:AddButton('btn01')
otMultiBtn:AddButton('btn02')
otMultiBtn:AddButton('btn04')
otMultiBtn:AddButton('btn05')

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
.

- 446 -

ADVPL Completo



TMULTIGET( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont rol e - edi o d e t e xt o de
ml ti pl as li nh as.

E Propriedades:

l Wor dWr a p Lgi co. Se . T. , f a z qu ebr a a ut om t i ca de li nh as.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ a bSet Get ] , [ aoWnd] , [ a n Wi dt h] ,
[ a nHei ght ] , [ aoFont ] , [ al HScrol l ] , [ a nCl r For e] , [ a nCl r Back] , [ oPar 11] ,
[ alPi x el ] , [ cPar 13] , [lPar 14] , [ a bWhe n] , [lPar 16] , [lPar 17] ,
[ al Re a d Onl y] , [ a bVali d] , [ bPar 20] , [lPar 21] , [ al NoBor der ] ,
[ al NoVScrol l ] )

E Parmetros:

Par met r o
a nRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
a nCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
a bSet Get
Bl oco de cdi go, opci on al . Bl oco de cdi go no f or ma t o { | u |
i f ( Pcount ( ) > 0, < v a r > : = u, < v a r > ) } que o cont rol e ut ili z a
par a a t u ali z ar a v ari v el < v ar > . < v ar > de v e ser t i po
car act er.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser
cri a do.
a n Wi dt h Nu mri co, opci onal . Lar gur a do cont rol e e m pi x el s.
a nHei ght Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
aoFont
Obj et o, opci on al . Obj et o t i po t Font utili z a do par a defi ni r as
car act er st i cas da f ont e utili z a da par a e xi bi r o cont e do do
cont r ol e.
al HScrol l
Lgi co, opci on al . Se . T. , h a bili t a barr a d e rol a ge m
hori z ont al .
a nCl r For e Nu mri co, opci onal . Cor de f undo do cont rol e.
a nCl r Back Nu mri co, opci on al . Cor do t e xt o do cont rol e.
oPar 11 Reser v a do.
alPi x el
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
cPar 13 Reser v a do.
lPar 14 Reser v a do.
a bWhe n
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma n ecer ha bili t a do ou . F. se n o.
lPar 16 Reser v a do.
lPar 17 Reser v a do.
al Re a d Onl y Lgi co, opci onal . Se . T. o cont r ol e so per mi ti r a l ei t ur a .
a bVali d
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
bPar 20 Reser v a do.
lPar 21 Reser v a do.

- 447 -

ADVPL Completo


al NoBor d er Lgi co, opci onal . Se . T. cri a cont r ol e se m bor da .
al NoVScrol l Lgi co, opci on al . Se . T. , ha bili t a barr a d e rol a ge m v er t i cal .

E Mtodos auxiliares:

EnableVScroll

O Descrio: Ha bi li t a a barr a de r ol a ge m v er t i cal .
O Sintaxe: En a bl e VScrol l ( l En a bl e )
O Parmetros:

l En a bl e
Lgi co, obri ga t ri o. Se . T. ha bili t a se . F. desa bili t a a bar r a
de r ol a ge m.

O Retorno:

Nenhum -

EnableHScroll

O Descrio: Ha bi li t a a barr a de r ol a ge m hori z ont al .
O Sintaxe: En a bl e HScr ol l ( l Ena bl e )
O Parmetros:

l En a bl e
Lgi co, obri ga t ri o. Se . T. ha bili t a se . F. desa bili t a a bar r a
de r ol a ge m.

O Retorno:

Nenhum -


E Aparncia:



- 448 -

ADVPL Completo



Exemplo:

#include protheus.ch
User Function Teste()

Local oDlg, oMemo, cMemo:= space(50)

DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE My test

oMemo:= tMultiget():New(10,10,{|u|if(Pcount()>0,cMemo:=u,cMemo)};
,oDlg,100,100,,,,,,.T.)

@ 200,10 BUTTON oBtn PROMPT Fecha OF oDlg PIXEL ACTION oDlg:End()

ACTIVATE MSDIALOG oDlg CENTERED

MsgStop(cMemo)

Return NIL


TOLECONTAINER( )

E Descrio: Cl asse de obj et os vi suai s do ti po cont r ol e, a qu al per mi t e a cri ao
de u m bot o vi ncul a do a u m obj et o OLE.

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei ght ] , [ oWnd] , [l Aut oAct i v a t e] ,
[ cFil e Na me] )

E Parmetros:

nRow
Nu mri co, opci on al . Coor de na da v er t i cal e m pi x el s ou
car a t er es.
nCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
nWi dt h Nu mri co, opci on al . Lar gur a do bot o e m pi x el s
nHei ght Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.

oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
l Aut oAct i v a t e Nao ut i li z a do
cFil e Na me Car act er . Ender eo do a r qui vo Ol e a ser a b er t o


- 449 -

ADVPL Completo



E Mtodos auxiliares:

OpenFromFile

O Descrio: Abr e a r qui vo do t i po OLE.
O Sintaxe: Ne w( [ cFi l e Na me, [l AsI con] , [ all owI nPl ace] )
O Parmetros:

cFil e Na me Car act er . Ender eo do a r qui vo Ol e a ser a b er t o
l AsI con Logi co. Defi ne obj et o Ol e como I cone
all owI nPl ace Logi co opci on al . Per mi t e a ber t ur a d e ar qui vo l ocal

O Retorno:

Nenhum -


E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// TOleContainer
oTOleContainer := TOleContainer():New(
05,05,306,134,oDlg,.T.,'C:\Lixo\TesteRemote.doc' )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


- 450 -

ADVPL Completo


TPAGEVIEW( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont rol e, que p er mi t e a
vi suali z ao de ar qui vos no f or ma t o g er a do pel o spool de i mpr ess o
do Prot he us.

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ nCol ] , [ nRow] , [ n Wi dt h] , [ nHei ght ] , [ oPri nt er ] , [ oWnd] ,
[ nPa ge Wi dt h] , [ nPa ge Hei ght ] )

E Parmetros:

nCol
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
nRow
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es
nWi dt h Nu mri co, opci on al . Lar gur a e m pi x el s
nHei gt h Nu mri co, opci on al . Al t ur a e m pi x el s.

oPri nt er Obj et o do t i po TMsPri nt er ( )
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
nPa ge Wi dt h Nu mri co, opci on al . Lar gur a e m pi x el s da pa gi na
nPa ge Hei ght Nu mri co, opci on al . Al t ur a e m pi x el s da pa gi n a

E Mtodos auxiliares:

PageSize

O Descrio: Defi ne o t a ma nho da pa gi n a .
O Sintaxe: AddI t e m( nLa r gur a , nAl t ur a )
O Parmetros:

nLar gur a La gur a da p gi n a
nAl t ur a Al t ur a da p gi na

O Retorno:

Nenhum -

PrintPage

O Descrio: I mpri me u ma det er mi n a da p gi na.
O Sintaxe: PrintPage( n NrPa gi n a )
O Parmetros:

nNrPa gi n a P gi n a que ser i mpr essa

O Retorno:

Nenhum -


- 451 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// TPageView
__RelDir := WSPLRelDir()
oPrinter := TMsPrinter():New()
oPrinter:SetFile(__RELDIR + 'matr020.prt',.F.)
oTPageView := TPageView():New(
0,0,500,300,oPrinter,oTFolder2:aDialogs[07],550,350 )
oTPageView:Reset(400,400)
oTPageView:PrintPage(1)
oTPageView:Show()
oTPageView:nZoom := 150

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 452 -

ADVPL Completo



TPANEL( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont r ol e t Pa n el , a qu al per mi t e
cri ar u m pai nel est ti co, ond e pode m ser cri a dos out ros cont r ol es
com o obj et i vo d e or ga ni z ar ou a gr upar compon e nt es vi su ai s.

E Propriedades:

- Her da das das cl asses superi or es

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ acTe xt ] , [ aoWnd] , [ aoF ont ] , [ al Ce nt er ed] ,
[lPar 6] , [ a nCl r Te xt ] , [ a nCl r Back] , [ a n Wi dt h] , [ a nHei ght ] , [ al Lower ed] ,
[ al Rai sed] )

E Parmetros:

a nRow Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s.
a nCol Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s.
acTe xt Car act er e, opci on al . Te x t o a ser e xi bi do ao f undo.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde ser cri a do o
obj et o.
al Ce nt er ed
Lgi co, opci onal . Se . T. e xi be o t e xt o d e t t ul o ao ce nt r o do
cont r ol e.
lPar 6 Reser v a do.
a nCl r Te xt Nu mri co, opci on al . Cor do t e xt o do cont rol e.
a nCl r Back Nu mri co, opci on al . Cor do f undo do cont rol e.
a n Wi dt h Nu mri co, opci on al . Lar gur a do cont rol e e m pi x el s.
a nHei ght Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
al Lower ed
Lgi co, opci on al . Se . T. e xi be o pai nel r ebai x a do e m r el ao
ao cont r ol e de f undo.
al Rai sed
Lgi co, opci onal . Se . T. e xi be a bor da do cont r ol e r ebai x a da
e m r el a o ao cont rol e de f undo.

E Aparncia:



- 453 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oPanel:= tPanel():New(10,10,,oDlg,,,,,CLR_BLUE,100,100) // cria o
painel
@ 10,10 BUTTON oBtn1 PROMPT 'hide' OF oPanel ACTION oPanel:Hide() // cria
boto sobre o painel
@ 200,10 BUTTON oBtn2 PROMPT 'show' OF oDlg ACTION oPanel:Show() // cria
boto fora o painel
ACTIVATE MSDIALOG oDlg CENTERED
Return


TRADMENU( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont r ol e TRa dMe nu, a qu al
per mi t e cri ar u m cont rol e vi su al no f or ma t o Ra di o But t on.

E Propriedades:

bChange Bl oco de cdi go di spar a do n a muda na d e i t e m sel eci ona do
bSetGet
Bl oco de cdi go di spar a do n a muda na d e i t e m sel eci ona do,
r esponsa v el pel a muda na de v al or da v a ri a v el nu meri ca
que i ndi ca o i t e m sel eci on a do.
bWhen Bl oco de cdi go que p er mi t e ou n o a al t er ao do obj et o
bValid Bl oco de cdi go e x ecut a do na sai da do obj et o.

E Construtor: Ne w( [ nRow] , [ nCol ] , [ a I t e ms] , [ bSet Get ] , [ oDl g] , [ a Hel pI ds] ,
[ bCh a nge] , [ nCl r Te xt ] , [ nCl rPa ne] , [ cMsg] , [l Updat e] , [ bWhe n] ,
[ n Wi dt h] , [ nHei ght ] , [ bVali d] , [l Desi gn] , [l 3d] , [lPi x el ] )

E Parmetros:


nRow Nu mri co, opci onal . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
a I t e ms Vet or, el e me nt os do Ra di o
bSet Get Code- bl ock , Respons v el pel a set a ge m d e v al or
oDl g
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
a Hel pI ds No ut i li z a do
bCh a nge
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
nCl r Te xt Nu mri co, opci onal . Cor do t e xt o da j a nel a .
nCl rPa ne Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci on ar o mouse sobr e o
obj et o
l Upda t e No ut i li z a do
bWhe n
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.

- 454 -

ADVPL Completo


nWi dt h Nu mri co, opci onal . Lar gur a do obj et o
nHei ght Nu mri co, opci onal . Al t ur a do obj et o
bVali d
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
l Desi gn No ut i li z a do
l 3d No ut i li z a do
lPi x el
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.


E Mtodos auxiliares:

SetOption

O Descrio: Sel eci on a u m i t e m.
O Sintaxe: SetOption(nItem)
O Parmetros:

nItem I t e m que ser sel eci on a do

O Retorno:

Nenhum -

EnableItem

O Descrio: Ha bi li t a / Desa bili t a u m I t e m
O Sintaxe: EnableItem(nItem, lStatus)
O Parmetros:

nItem I t e m que ser modi fi ca do
lStatus St a t us que ser a t ri bu do ( . T. En a bl e , . F. Di sa bl e)

O Retorno:

Nenhum -

Enable

O Descrio: Ha bi li t a u m i t e m.
O Sintaxe: Enable(nItem)
O Parmetros:

nItem I t e m que ser h a bili t a do

O Retorno:

Nenhum -


- 455 -

ADVPL Completo



Disable

O Descrio: Desa bi li t a u m i t e m
O Sintaxe: Disable(nItem)
O Parmetros:

nItem I t e m que ser desa bili t ado

O Retorno:

Nenhum -

E Aparncia:















- 456 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
user function TRadMenu()
DEFINE MSDIALOG oDlg FROM 0,0 TO 270,400 PIXEL TITLE 'Exemplo da
TCBrowse'
// Variavel numerica que guarda o item selecionado do Radio
nRadio := 1
// Cria o Objeto
oRadio := TRadMenu():New
(01,01,{'Item01','Item02','Item03','Item04','Item05'},;

,oDlg,,,,,,,,200,200,,,,.T.)
// Seta Eventos
oRadio:bchange := {|| Alert('bChange') }
oRadio:bSetGet := {|u|Iif (PCount()==0,nRadio,nRadio:=u)}
oRadio:bWhen := {|| .T. }
oRadio:bValid := {|| Alert('bValid') }
// Principais comandos
oBtn := TButton():New( 060, 001, 'Retorna item selecionado',;
oDlg,{|| Alert(nRadio) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 070, 001, 'SetOption(2) (Seta um
item)',;
oDlg,{|| oRadio:SetOption(2) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 080, 001, 'EnableItem(2,.T.) (Habilita
item)',;
oDlg,{|| oRadio:EnableItem(2,.T.) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 090, 001, 'EnableItem(2,.F.)
(Desabilita item)',;
oDlg,{|| oRadio:EnableItem(2,.F.) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 100, 001, 'Enable(3) (Habilita
item)',;
oDlg,{|| oRadio:Enable(3) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 110, 001, 'Disable(3) (Desabilita
item)',;
oDlg,{|| oRadio:Disable(3) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )

ACTIVATE MSDIALOG oDlg CENTERED
Return


- 457 -

ADVPL Completo



TSBROWSE( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont r ol e TSBr owse, a qu al
per mi t e cri ar u m cont rol e vi su al do t i po Gri d.

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci ona da / posi ci on a da no obj et o
nLen N mer o t ot al de li nh as do obj et o

E Construtor: Ne w( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei ght ] , [ oWnd] , [ bCh a nge] ,
[ nHWi dt h] , [ oFont ] , [ nLi nes] )

E Parmetros:

nRow Nu mri co, opci on al . Coor de n a da v er t i cal
nCol Nu mri co, opci on al . Coor de n a da hori z ont al
nWi dt h Nu mri co, opci on al . Lar gur a do obj et o
nHei ght Nu mri co, opci on al . Al t ur a do obj et o
oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
bCh a nge Bl oco de cdi go, n a muda na de l i nh a
nHWi dt h No ut i li z a do
oFont Obj et o, opci on al . Font e
nLi nes N meri co. Nr d e l i nhas por cl ul a

E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nha par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


- 458 -

ADVPL Completo



GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

RowCount

O Descrio: Ret or n a nu mer o d e l i nh as vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


LEditCell

O Descrio: Edi t a o v al or de u ma col un a .
O Sintaxe: l Edi t Cell ( aLi st , oLi st , cPi ct ur e, nCol )
O Parmetros:

aLi st Vet or da Browse onde est o os v al or es da mes ma
oLi st Obj et o, Browse a ser edi t a do
cPi ct ur e Car act er , pi ct ur e n ecessri a par a edi o do ca mpo
nCol Nu mri co, col un a a ser edi t a da .

O Retorno:

Nil


- 459 -

ADVPL Completo



E Aparncia:



















- 460 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

aBrowse := {{'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE 001'}
}
oBrowse := TSBrowse():New(01,01,245,150,oDlg,,16,,5)
nForeCor := CLR_GRAY
nBackCor := CLR_WHITE
oBrowse:AddColumn( TcColumn():New('Nome',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:AddColumn( TcColumn():New('Endereo',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:AddColumn( TcColumn():New('Bairro',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:SetArray(aBrowse)

// 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.)
TButton():New( 190, 060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},40,10,,,,.T.)


ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

.

- 461 -

ADVPL Completo



TSAY( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont rol e t Sa y, a qu al e xi be o
cont e do d e t e xt o est t i co sobr e u ma j a nel a ou cont rol e
pr e vi a me nt e defi ni dos.

E Propriedades:

l Wor dWr a p
Lgi co. Se . T. quebr a o t e xt o e m v ri as l i nh as de ma nei r a a
e nqu a dr ar o cont e do n a r e a d et er mi na da par a o cont r ol e,
se ndo o pa dr o . F.
l Tr a nspar e nt
Lgi co. Se . T. a cor de f undo do cont r ol e i gnor a da
assu mi ndo o cont e do ou cor do cont rol e ou j a nel a ao
f undo, se ndo o pa dr o . T.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ a bTe xt ] , [ aoWnd] , [ acPi ct ur e] , [ aoFont ] ,
[lPar 7] , [lPar 8] , [lPar 9] , [ alPi x el s] , [ a nCl r Te xt ] , [ a nCl r Back] ,
[ a n Wi dt h] , [ a nHei ght ] , [lPar 15] , [lPar 16] , [lPar 17] , [lPar 18] , [lPar 19] )

E Parmetros:

a nRow
Nu mri co, opci onal . Coor de n a da v er t i cal e m pi x el s ou
car act er es.
a nCol
Nu mri co, opci onal . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
a bTe xt
Codebl ock , opci on al . Qu a ndo e x ecut a do d e v e r e t or n ar u ma
ca dei a de car act er es a ser e xi bi da .
aoWnd
Obj et o, opci on al . Ja nel a ou di l ogo onde o cont r ol e ser
cri a do.
acPi ct ur e
Car act er e, opci on al . Pi ct ur e d e f or ma t a o do cont e do a
ser e xi bi do.
aoFont
Obj et o, opci on al . Obj et o t i po t Font par a confi gur ao do t i po
de f ont e qu e ser ut ili z ado par a e xi bi r o cont e do.
lPar 7 Reser v a do.
lPar 8 Reser v a do.
lPar 9 Reser v a do.
alPi x el s
Lgi co, opci onal . Se . T. consi der a coor de n a das passa das e m
pi x el s se . F. , pa dr o, consi der a as coor d e n a das passa das e m
car act er es.
a nCl r Te xt Nu mri co, opci on al . Cor do cont e do do cont rol e.
a nCl r Back Nu mri co, opci on al . Cor do f undo do cont rol e.
a n Wi dt h Nu mri co, opci onal . Lar gur a do cont rol e e m pi x el s.
a nHei ght Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
lPar 15 Reser v a do.
lPar 16 Reser v a do.
lPar 17 Reser v a do.
lPar 18 Reser v a do.
lPar 19 Reser v a do.


- 462 -

ADVPL Completo



E Aparncia:



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oSay:= tSay():New(01,01,{||'para exibir'},oDlg,,,,;
,,.T.,CLR_RED,CLR_WHITE,100,20)
ACTIVATE MSDIALOG oDlg CENTERED
Return













- 463 -

ADVPL Completo



TSCROLLBOX( )

E Descrio: Cl asse d e obj et os vi suai s do t i po cont rol e t Scrol l box, a qu al
per mi t e cri ar u m pai nel com scrol l desli z a nt es n as l at er ai s
( hori z ont ai s e v er t i cai s) do cont r ol e.

E Propriedades:

- Her da das das cl asses superi or es

E Construtor: Ne w( [ aoWnd] , [ a nTop] , [ a nLef t ] , [ a nHei ght ] , [ a nWi dt h] ,
[ al Ver t i cal ] , [ al Hori z ont al ] , [ al Bor der ] )

E Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o cont rol e ser
cri a do.
a nTop Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s.
a nLef t Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s.
a nHei ght Nu mri co, opci on al . Al t ur a do cont rol e e m pi x el s.
a n Wi dt h Nu mri co, opci on al . Lar gur a do cont rol e e m pi x el s.
al Ver t i cal Lgi co, opci onal . Se . T. e xi be a ba rr a de scrol l v er t i cal .
al Hori z ont al Lgi co, opci onal . Se . T. e xi be a ba rr a de scrol l hori z ont al .
al Bor der Lgi co, opci on al . Se . T. e xi be a bor da do cont r ol e.

E Aparncia:




- 464 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oScr, oGet1, oGet2, oGet3
Local cGet1, cGet2, cGet3
cGet1:= Space(10)
cGet2:= Space(10)
cGet3:= Space(10)
DEFINE MSDIALOG oDlg FROM 0,0 TO 220,220 PIXEL TITLE 'Meu test'
oScr:= TScrollBox():New(oDlg,10,10,100,100,.T.,.T.,.T.) // cria controles
dentro do scrollbox
@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oScr PIXEL
@ 50,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oScr PIXEL
@ 150,100 MSGET oGet3 VAR cGet3 SIZE 100,10 OF oScr PIXEL
ACTIVATE MSDIALOG oDlg CENTERED
Return


TSIMPLEEDITOR( )

E Descrio: Cl asse de obj et os vi suai s do ti po cont rol e t Si mpl e Edi t or, a qu al
per mi t e cri ar u m cont r ol e vi su al par a edi o de t e xt os com r ecursos
si mpl es, como o Not ePa d

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ aoWnd] , [ a n Wi dt h] , [ a nHei ght ] , [ acTe xt ] ,
[ al Re a d Onl y] )

E Parmetros:

a nRow
Nu mri co, opci on al . Coor de na da v er t i cal e m pi x el s ou
car a t er es.
a nCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
aoWnd Ja nel a ou cont r ol e ond e o edi t or de v er ser cri a do.
a n Wi dt h Nu mri co, opci on al . Lar gur a do edi t or e m pi x el s.
a nHei ght Nu mri co, opci on al . Al t ur a do edi t or e m pi x el s.
acTe xt Te xt o, opci on al . I nseri do n a i ni ci ali z ao do obj et o.
al Re a d Onl y Lgi co, opci on al . Per mi t e ou n o a edi o do t e xt o

E Mtodos auxiliares:

Create

O Descrio: Mt odo const r ut or opci on al da cl asse.
O Sintaxe: Cr e a t e( a oWnd )
O Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o edi t or d e v er
ser cri a do.


- 465 -

ADVPL Completo


O Retorno:

Objeto Obj et o do t i po Tsi mpl e Edi t or.

Load

O Descrio: Ca rr ega u m t e xt o par a o edi t or.
O Sintaxe: Loa d( acTe xt o )
O Parmetros:

acTe xt o Te xt o. Te xt o qu e i ni ci ali z ar o edi t or.

O Retorno:

Nenhum -

TextBold

O Descrio: Te xt o e m Negri t o.
O Sintaxe: Te xt Bol d( al Bol d )
O Parmetros:

al Bol d
Lgi co. Ha bi li t a ou Desa bili t a a sess o do t e xt o como
Negri t o.

O Retorno:

Nenhum -

TextUnderline

O Descrio: Te xt o Subli nh a do.
O Sintaxe: Te xt Underl i ne( al Underli ne )
O Parmetros:

al Underli ne
Lgi co. Ha bi li t a ou Desa bili t a a sess o do t e xt o
Subli nh a do.

O Retorno:

Nenhum -

TextItalic

O Descrio: Te xt o I t l i co.
O Sintaxe: Te xt I t al i c( al I t ali c )
O Parmetros:

al I t ali c Lgi co. Ha bi li t a ou Desa bili t a a sess o do t e xt o I t l i co.

O Retorno:

Nenhum -


- 466 -

ADVPL Completo



TextFamily

O Descrio: F a m li a de f ont es.
O Sintaxe: Te xt F a mi l y( acF a mil y )
O Parmetros:

acF a mil y
Te xt o. Nome da f a m li a da f ont e a ser usa da n a sess o do
t e xt o.

O Retorno:

Nenhum -


TextSize

O Descrio: Ta ma nho d a f ont e .
O Sintaxe: Te xt Si z e( a nSi z e )
O Parmetros:

a nSi z e Nu mri co. Ta ma nho da f ont e ut i li z a da n a sess o do t e xt o.

O Retorno:

Nenhum -

TextStyle

O Descrio: Est i l o do par gr af o.
O Sintaxe: Te xt St yl e( a nSt yl e )
O Parmetros:

a nSt yl e
Nu mri co. Est i l o do par gr af o a ser ut ili z a da n a sess o do
t e xt o.

1 Nor mal
2 Di sco ( Bul l et )
3 Ci rcul o ( Bull et )
4 Qu a dr a do ( Bul l et )
5 Or de m deci mal
6 Or de m al f a nu mri ca mi nscul o
7 Or de m al f a nu mri ca mai scul o

O Retorno:

Nenhum -


- 467 -

ADVPL Completo



TextAlign

O Descrio: Al i nh a me nt o do t e xt o.
O Sintaxe: Te xt Al i gn( a nAli gn )
O Parmetros:

a nAli gn
Nu mri co. Ti po do ali nha me nt o do pa r gr af o.
1 Esquer da
2 Di r ei t a
3 Ce nt r ali z a do
4 Just i fi ca do

O Retorno:

Nenhum -

TextFormat

O Descrio: For ma t o do t e xt o.
O Sintaxe: Te xt For ma t ( a nFor ma t )
O Parmetros:

a nFor ma t
Nu mri co. For ma t o do t e xt o
1 Ht ml
2 Pl ai n Te xt

O Retorno:

Nenhum -

RetText

O Descrio: Ret or n a o t e xt o e m f or ma t o st ri ng.
O Sintaxe: Ret Te xt ( voi d )
O Parmetros:

voi d Ret or n a u ma st ri ng com o cont e do do edi t or

O Retorno:

Nenhum -

RetTextSel

O Descrio: Ret or n a o t e xt o sel eci on a do e m f or ma t o st ri ng. .
O Sintaxe: Ret Te xt ( )
O Parmetros:

Ne nhu m -

O Retorno:

String Te xt o sel eci on a do.


- 468 -

ADVPL Completo



TextStatus

O Descrio: Ret or n a u m arr a y com as propri eda des do t e xt o posi ci on a do.
O Sintaxe: Te xt St a t us( )
O Parmetros:

Ne nhu m -

O Retorno:

Array
Ret or n a u m ar r a y com as segui nt es propri eda des :

1 Lgi co Negri t o
2 Lgi co I t l i co
3 Lgi co Subli nh a do
4 Car act er RGB da cor
5 Car act er Ta ma nho d a f ont e
6 Car act er F ont e

E Aparncia:




- 469 -

ADVPL Completo



Exemplo:

#include protheus.ch


User Function MyEditor()
Local oDlg, oEditor
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu Editor
// Usando o mtodo create
oEdit := tSimpleEditor():Create( oDlg )
oEdit:nTop := 10
oEdit:nLeft := 10
oEdit:nWidth := 600
oEdit:nHeight := 500


// Usando o mtodo new
oEdit := tSimpEdit():New( 0, 0, oDlg, 500, 600 )


ACTIVATE MSDIALOG oDlg CENTERED
Return Nil


TSLIDER( )

E Descrio: Cl asse de obj et os vi suai s do t i po cont r ol e t Sli der, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po bot o desli z a nt e.

E Propriedades:

bCh a nge
Bl oco de cdi go. Ex ecut a do t oda v e z que o v al or al t er a do
r et or na ndo o nov o v al or .

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ aoWnd] , [ a bCh a nge] , [ a nWi dt h] ,
[ a nHei ght ] , [ acMsg] , [ a bWhe n] )

E Parmetros:

a nRow Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s
a nCol Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
a bCh a nge
Bl oco de cdi go, opci on al . Bl oco que d e v er ser aci on a do
qu a ndo o bot o f or movi me nt a do.
a n Wi dt h Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.
a nHei ght Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
acMsg Car act er , opci on al . Me nsa ge m d e hi nt do bot o
a bWhe n
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.

E Mtodos auxiliares:


- 470 -

ADVPL Completo


Create

O Descrio: Mt odo const r ut or da cl asse.
O Sintaxe: Cr e a t e( a oWnd )
O Parmetros:

aoWnd
Obj et o, opci onal . Ja nel a ou cont r ol e onde o bot o d e v er
ser cri a do.

O Retorno:

Objeto Obj et o do t i po TSl i de cri a do.

setRange

O Descrio: Esp eci fi ca a f ai x a de v al or es.
O Sintaxe: set Ra nge( mi n, ma x )
O Parmetros:

Mi n N mri co. Val or m ni mo do bot o.
Ma x N mri co. Val or m xi mo do bot o.

O Retorno:

Nenhum -

setMarks

O Descrio: Esp eci fi ca o t i po de marca o do bot o.
O Sintaxe: set Ma r ks( nTi po )
O Parmetros:

nTi po
N mri co. Ti po de marcao do bot o.
1 -
Ma x
N mri co. Val or m xi mo do bot o.
0 Se m marca o
1 Aci ma ( esquer da se v er t i cal )
2 Abai xo ( di r ei t a se v er t i cal )
3 Ambos os l a dos

O Retorno:

Nenhum -


- 471 -

ADVPL Completo



setInterval

O Descrio: Esp eci fi ca a di st nci a e nt r e u m marca dor e out ro.
O Sintaxe: set I nt er v al ( nI nt er v al )
O Parmetros:

nI nt er v al N mri co. Val or e nt r e os marca dor es

O Retorno:

Nenhum -

setValue

O Descrio: Esp eci fi ca u m v al or pa r a o bot o.
O Sintaxe: set Val ue( nVal )
O Parmetros:

nVal N mri co. Val or do bot o

O Retorno:

Nenhum -

setStep

O Descrio: Esp eci fi ca o v al or dos passos do bot o.
O Sintaxe: set St ep( nSt e p )
O Parmetros:

nSt ep N mri co. Val or do passo do bot o

O Retorno:

Nenhum -

setOrient

O Descrio: Esp eci fi ca a ori e nt a o do bot o, hori z ont al ou v er t i cal .
O Sintaxe: set Ori e nt ( n Ori e nt )
O Parmetros:

n Ori e nt
N mri co. Ori e nt ao do bot o
0 Hori z ont al
1 Ver t i cal

O Retorno:

Nenhum -


- 472 -

ADVPL Completo



E Aparncia:



Exemplo:

#include protheus.ch
#include hbutton.ch
User Function MytSlider()
Local oDlg, oSlider
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu tSlider
// Usando o mtodo create
oSlider:= tSlider():Create( oDlg )
oSlider:nTop := 100
oSlider:nLeft := 10
oSlider:nWidth := 100
oSlider:nHeight := 30


// Usando o command
@ 100, 10 SLIDER oSlider SIZE 30, 100 OF oDlg MESSAGE 'tSlider'
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil


TSPLITTER( )

E Descrio: Cl asse de obj et os vi su ai s do ti po cont rol e t Spli t t er, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po di vi sor.

E Propriedades:

- Her da das as cl asses sup eri or es.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ aoWnd] , [ a n Wi dt h] , [ a nHei ght ] ,
[ a n Ori e nt a t i on] )

E Parmetros:

a nRow Nu mri co, opci on al . Coor de n a da v er t i cal
a nCol Nu mri co, opci on al . Coor de n a da hori z ont al
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
a n Wi dt h Nu mri co, opci on al . Lar gur a do obj et o
a nHei ght Nu mri co, opci on al . Al t ur a do obj et o
a n Ori e nt a t i on
Nu mri co, opci on al . Se nt i do no qu al de v er o ser cri a do os
di vi sor es.
0 Hori z ont al
1 Ver t i cal


- 473 -

ADVPL Completo


E Mtodos auxiliares:

Create

O Descrio: Mt odo const r ut or da cl asse.
O Sintaxe: Cr e a t e( a oWnd )
O Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.

O Retorno:

Objeto Obj et o do t i po Tspli t t er ger a do.


setOrient

O Descrio: Esp eci fi ca a ori e nt a o do di vi sor, hori z ont al ou v er t i cal .
O Sintaxe: set Ori e nt ( n Ori e nt )
O Parmetros:

n Ori e nt
N mri co. Ori e nt ao do bot o
0 Hori z ont al
1 Ver t i cal

O Retorno:

Nenhum -

setChildCollapse

O Descrio: Esp eci fi ca se os el e me nt os pod e m ser col l apsi bl es.
O Sintaxe: set Chil dColl pse( l Coll )
O Parmetros:

l Coll Lgi co. At i v a / Desa t i v a

O Retorno:

Nenhum -


- 474 -

ADVPL Completo



setCollapse

O Descrio: Esp eci fi ca o obj et o que pod e ser coll a psi bl e.
O Sintaxe: set Col l a pse( oObj , l Coll )
O Parmetros:

oObj Obj et o. Cont rol e a ser col l a psed
l Coll Lgi co. At i v a / Desa t i v a

O Retorno:

Nenhum -

movToLast

O Descrio: Col oca o obj et o como ul ti mo das di vi ses.
O Sintaxe: movToLast ( oObj )
O Parmetros:

oObj Obj et o. Cont rol e a posi ci on a do

O Retorno:

Nenhum -

movToFirst

O Descrio: Col oca o obj et o como pri mei ro das di vi ses.
O Sintaxe: movToFi rst ( oObj )
O Parmetros:

oObj Obj et o. Cont rol e a ser posi ci on a do

O Retorno:

Nenhum -

setOpaqueResize

O Descrio: Esp eci fi ca se o r esi z e d e v e ser opaco.
O Sintaxe: set Opa qu eResi z e( l Opa q )
O Parmetros:

l Opa q Lgi co. At i v a / Desa t i v a

O Retorno:

Nenhum -


- 475 -

ADVPL Completo



setResizeMode

O Descrio: Esp eci fi ca o mod e de r esi z e do obj et o. .
O Sintaxe: setResizeMode ( oObj , nMod e )
O Parmetros:

oObj Obj et o. Cont rol e a ser r esi z ed
nMode
Nu mri co. Modo do r esi z e
0 St r et ch
1- Ke epSi z e
2 Fol l owSi z e Hi nt
3 Aut o

O Retorno:

Nenhum -


E Aparncia:














- 476 -

ADVPL Completo



Exemplo:

#include protheus.ch
#include hbutton.ch

User Function MytSplitter()
Local oDlg, oSplitter, oPanel1, oPanel2, oPanel3


DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu tSplitter

// Usando o mtodo create
oSplitter := tSplitter():Create( oDlg )
@ 1, 1 MSPANEL oPanel1 OF oSplitter
@ 1, 2 MSPANEL oPanel2 OF oSplitter
@ 1, 3 MSPANEL oPanel3 OF oSplitter

// Usando o command
@ 1, 1 SPLITTER oSplitter SIZE 100, 100 OF oDlg
@ 1, 1 MSPANEL oPanel1 OF oSplitter
@ 1, 2 MSPANEL oPanel2 OF oSplitter
@ 1, 3 MSPANEL oPanel3 OF oSplitter

ACTIVATE MSDIALOG oDlg CENTERED

Return Nil


TTABS( )

E Descrio: Cl asse de obj et os vi su ai s do t i po cont r ol e TTa bs, a qu al per mi t e
cri ar u m cont r ol e vi su al do t i po past a .

E Propriedades:

- Her da das das cl asses superi or es.

E Construtor: Ne w( [ a nTop] , [ a nLef t ] , [ aPr ompt s] , [ bAct i on] , [ oWnd] , [ n Opt i on] ,
[ nCl r For e] , [ nCl r Back] , [lPi x el ] , [l Desi gn] , [ nWi dt h] , [ nHei gt h] ,
[ cMsg] )

E Parmetros:

a nTop
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
a nLef t
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es
aPro mpt s Arr a y , Ti t ul o dos f ol ders
bAct i on Bl oco de codi go, Di spar a do na t r oca da a ba .

oWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde a bot o d e v er ser
cri a do
n Opt i on Nu mri co, opci on al . Fol der sel eci on a do
nCl r For e Nu mri co, opci on al . Cor de f r e nt e
nCl r Back Nu mri co, opci on al . Cor de f undo
lPi x el Lgi co, opci on al . Ut ili z a coor d e n a das e m pi x el

- 477 -

ADVPL Completo


l Desi gn Lgi co, opci on al . NO USADO
nWi dt h Nu mri co, opci on al . Lar gur a e m pi x el s
nHei gt h Nu mri co, opci on al . Al t ur a e m pi x el s.
cMsg Car act er e, Me nsa ge m d e Hi nt


E Mtodos auxiliares:

AddItem

O Descrio: Adi ci on a u ma a ba n a past a
O Sintaxe: AddI t e m( cT t ul o)
O Parmetros:

cT t ul o T t ul o da a ba que ser a di ci on a da

O Retorno:

Nenhum -

SetOption

O Descrio: Sel eci on a a Aba
O Sintaxe: Set Opt i on( nNr Aba )
O Parmetros:

nNr Aba
N mer o qu e i de nt i fi ca a posi o da a ba que ser
sel eci on a da .

O Retorno:

Nenhum -


E Aparncia:





- 478 -

ADVPL Completo


Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

oTTabs := TTabs():New(01,01,{'Aba01','Aba02','Aba03'},;
{||oPanel01:LVISIBLECONTROL:=(oTTabs:nOption==1)},;
oDlg,,RGB(255,0,0),RGB(255,255,0),.T.,,120,120,)
oPanel01 := TPanel():New( 000, 000,'',oTTabs,,,,,,100,100,,.T. )
oPanel01:lVisibleControl := .T.
oBtn01 := TButton():New( 01,01,'TButton01',oPanel01,;
{||oTTabs:SetOption(2)}, 037,
012,,,.F.,.T.,.F.,,.F.,,,.F. )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


TTOOLBOX( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont rol e t Tool box, a qu al per mi t e
cri ar u m cont r ol e vi su al par a a gr upa r di f er e nt es obj et os.

E Propriedades:

bCh a nge Gr p
Bl oco d e cdi go. Ex ecut a do n a t r oca e nt r e os gr upos
e xi st e nt es.

E Construtor: Ne w( [ a nRow] , [ a nCol ] , [ aoWnd] , [ a n Wi dt h] , [ a nHei ght ] , [ aoFont ] ,
[ acMsg] ] , [ a bWh e n] )

E Parmetros:

a nRow
Nu mri co, opci on al . Coor de n a da v er t i cal e m pi x el s ou
car a t er es.
a nCol
Nu mri co, opci on al . Coor de n a da hori z ont al e m pi x el s ou
car act er es.
aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
a n Wi dt h Nu mri co, opci on al . Lar gur a do bot o e m pi x el s.
a nHei ght Nu mri co, opci on al . Al t ur a do bot o e m pi x el s.
aoFont
Obj et o, opci on al . Obj et o t i po t Font com propri eda des da
f ont e ut i li z a da par a o t t ul o do bot o.
acMsg Me nsa g e m, opci onal . Tool ti p / Hi nt do compone nt e.
a bWhe n
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.


- 479 -

ADVPL Completo


E Mtodos auxiliares:

Create

O Descrio: Mt odo const r ut or opci on al da cl asse.
O Sintaxe: Cr e a t e( a oWnd )
O Parmetros:

aoWnd
Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er
ser cri a do.

O Retorno:

Objeto Obj et o do t i po Tt ool Box ger a do.


addGroup

O Descrio: Adi ci on a u m gr upo
O Sintaxe: a ddGroup( a oObj , acNa me , a oI con )
O Parmetros:

aoObj Obj et o. Obj et o Pai que v ai ser i nseri do no gr upo.
acNa me Car act er e. Descri o do gr upo
aoI con Obj et o, opci on al . cone par a o gr upo

O Retorno:

Nenhum -

removeGroup

O Descrio: Re mov e u m gr upo
O Sintaxe: r e mov e Group( aoObj )
O Parmetros:

aoObj Obj et o. Obj et o Pai que v ai ser r e movi do do gr upo.

O Retorno:

Nenhum -


setCurrentGroup

O Descrio: Defi ne o gr upo cor r e nt e
O Sintaxe: set Cur r e nt Gr oup( aoObj )
O Parmetros:

aoObj Obj et o. Obj et o Pai que ser d efi ni do como gr upo cor r e nt e.

O Retorno:

Nenhum -


- 480 -

ADVPL Completo


E Aparncia:



Exemplo:

#include protheus.ch

User Function MytToolbox()
Local oDlg, oTb

DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu Toolbox

// Usando o mtodo create
oTb:= tToolbox():Create( oDlg )
oTb:nTop := 100
oTb:nLeft := 10
oTb:nWidth := 100
oTb:nHeight := 30

oTb:Add( oPanel, Opo 1, oIcone)

// Usando o command
@ 200,100 TOOLBOX oTb SIZE 100,30 OF oDlg

TOOLBOX oTb ADDGROUP TITLE Opo 1 OBJECT oPanel ICON oIcone

ACTIVATE MSDIALOG oDlg CENTERED

Return Nil



- 481 -

ADVPL Completo



TWBROWSE( )

E Descrio: Cl asse d e obj et os vi su ai s do t i po cont rol e TWBrowse, a qu al
per mi t e cri ar u m cont rol e vi su al do t i po Gri d.

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci ona da / posi ci on a da no obj et o
nLen N mer o t ot al de li nhas do obj et o

E Construtor: Ne w( [ nRow] , [ nCol ] , [ n Wi dt h] , [ nHei gt h] , [ bFi el ds] , [ a He a d ers] ,
[ a Col Si z es] , [ oDl g] , [ cFi el d] , [ uVal ue 1] , [ uVal ue 2] ,
[ uCha nge] , [ { | nRow, nCol , nFl a gs | [ uLDbl Cli ck] } ] ,
[ { | nRow, nCol , nFl a gs | [ uRCli ck] } ] , [ oFont ] , [ oCursor ] , [ nCl r For e] ,
[ nCl r Back] , [ cMsg] , [l Upda t e] , [ cAli as] , [lPi x el ] , [ { u Whe n } ] ,
[l Desi gn] , [ bVali d] , [l HScr oll ] , [l VScrol l ] )

E Parmetros:

nRow Nu mri co, opci onal . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
nWi dt h Nu mri co, opci onal . Lar gur a do obj et o
nHei ght Nu mri co, opci onal . Al t ur a do obj et o
bFi el ds Bl oco de cdi go, Li st a de Ca mpos
a He a d ers Vet or, Descri o dos ca mpos pa r a no ca b eal ho
a Col Si z es Vet or, Lar gur a das col unas
oDl g
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
cFi el d Car act er , opci on al . Ca mpos n ecessri os a o fil t ro
uVal ue 1 I ndefi ni do, opci on al . I ni ci o do i nt er v al o par a o fi l t ro
uVal ue 2 I ndefi ni do, opci on al . Fi m do i nt er v al o par a o fi l t ro
bCh a nge
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
bLDbl Cli ck
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci ona do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
bRCli ck No ut i li z a do
oFont Obj et o, opci on al . Font e
oCursor Obj et o, opci on al . Ti po do Cursor
nCl r For e Nu mri co, opci onal . Cor do t e xt o da j a nel a .
nCl r Back Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci onar o mouse sobr e o
obj et o
l Upda t e No ut i li z a do
cAli as
Car act er , opci on al se obj et o ut ili z a do com Vet or , obri ga t ori o
se ut i li z a do com Ta b el a
lPi x el
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
bWhe n
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
l Desi gn No Ut i li z ado
bVali d Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do

- 482 -

ADVPL Completo


cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
l HScrol l
Lgi co, opci on al . Se . T. , ha bili t a barr a d e rol a ge m
hori z ont al .
l VScroll Lgi co, opci onal . Se . T. , h a bili t a barr a d e rol a ge m v er t i cal .

E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nha par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Ne nhu m -

O Retorno:


- 483 -

ADVPL Completo


Nil

RowCount

O Descrio: Ret or n a nu mer o d e l i nh as vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


LEditCell

O Descrio: Edi t a o v al or de u ma col un a .
O Sintaxe: l Edi t Cell ( aLi st , oLi st , cPi ct ur e, nCol )
O Parmetros:

aLi st Vet or da Browse onde est o os v al or es da mes ma
oLi st Obj et o, Browse a ser edi t a do
cPi ct ur e Car act er , pi ct ur e n ecessri a par a edi o do ca mpo
nCol Nu mri co, col un a a ser edi t a da .

O Retorno:

Nil

E Aparncia:



- 484 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')

DEFINE MSDIALOG oDlg FROM 0,0 TO 402,402 PIXEL TITLE 'Exemplo'

oBrowse := TWBrowse():New( 01 , 01, 245, 150,,;
{'','Codigo','Descrio'},{20,30,30}, oDlg, ,,,,;
{||},,,,,,,.F.,,.T.,,.F.,,, )
aBrowse := {{.T.,'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{.F.,'CLIENTE 002','RUA CLIENTE 002','BAIRRO CLIENTE
002'},;
{.T.,'CLIENTE 003','RUA CLIENTE 003','BAIRRO CLIENTE
003'} }

oBrowse:SetArray(aBrowse)
oBrowse:bLine := {||{;
If(aBrowse[oBrowse:nAt,01],oOK,oNO),;
aBrowse[oBrowse:nAt,02],;
aBrowse[oBrowse:nAt,03],;
aBrowse[oBrowse:nAt,04] } }
oBrowse:bLDblClick := ;
{|| aBrowse[oBrowse:nAt][1] :=
!aBrowse[oBrowse:nAt][1],oBrowse:DrawSelect()}

// 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.)
TButton():New(190,060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},80,10,,,,.T.)

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 485 -

ADVPL Completo



VCBROWSE( )

E Descrio: Cl asse de obj et os vi su ai s do ti po cont rol e VCBr owse, a qu al
per mi t e cri ar u m cont rol e vi sual do t i po Gri d.

E Propriedades:

+ Her da das da cl asse sup eri or
nAt Li nh a a t u al me nt e sel eci ona da / posi ci on a da no obj et o
nLen N mer o t ot al de li nhas do obj et o


E Construtor: Ne w( [ nRow] , [ nCol ] , [ n Wi dt h] , [ nHei gt h] , [ bFi el ds] , [ a He a d ers] ,
[ a Col Si z es] , [ oDl g] , [ cFi el d] , [ uVal ue 1] , [ uVal ue 2] ,
[ uCha nge] , [ { | nRow, nCol , nFl a gs | [ uLDbl Cli ck] } ] ,
[ { | nRow, nCol , nFl a gs | [ uRCli ck] } ] , [ oFont ] , [ oCursor ] , [ nCl r For e] ,
[ nCl r Back] , [ cMsg] , [l Upda t e] , [ cAli as] , [lPi x el ] , [ { u Whe n } ] ,
[l Desi gn] , [ bVali d] , [l HScr oll ] , [l VScrol l ] )

E Parmetros:

nRow Nu mri co, opci onal . Coor de n a da v er t i cal
nCol Nu mri co, opci onal . Coor de n a da hori z ont al
nWi dt h Nu mri co, opci onal . Lar gur a do obj et o
nHei ght Nu mri co, opci onal . Al t ur a do obj et o
bFi el ds Bl oco de cdi go, Li st a de Ca mpos
a He a d ers Vet or, Descri o dos ca mpos pa r a no ca b eal ho
a Col Si z es Vet or, Lar gur a das col unas
oDl g
Obj et o, opci on al . Ja nel a ou cont r ol e onde o di visor de v er
ser cri a do.
cFi el d Car act er , opci on al . Ca mpos n ecessri os a o fil t ro
uVal ue 1 I ndefi ni do, opci on al . I ni ci o do i nt er v al o par a o fi l t ro
uVal ue 2 I ndefi ni do, opci on al . Fi m do i nt er v al o par a o fi l t ro
bCh a nge
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o i t e m
sel eci on a do al t er a do.
bLDbl Cli ck
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo aci ona do dupl o
cli ck do bot o esqu er do do mouse sobr e o cont r ol e.
bRCli ck No ut i li z a do
oFont Obj et o, opci on al . Font e
oCursor Obj et o, opci on al . Ti po do Cursor
nCl r For e Nu mri co, opci onal . Cor do t e xt o da j a nel a .
nCl r Back Nu mri co, opci on al . Cor de f undo da j a nel a .
cMsg
Car act er , opci on al . Mesa mge a o posi ci onar o mouse sobr e o
obj et o
l Upda t e No ut i li z a do
cAli as
Car act er , opci on al se obj et o ut ili z a do com Vet or , obri ga t ori o
se ut i li z a do com Ta b el a
lPi x el
Lgi co, opci onal . Se . T. as coor de n a das i nf or ma das s o e m
pi x el s, se . F . s o e m car act er es.
bWhe n
Bl oco de cdi go, opci onal . Ex ecut a do qu a ndo muda na de
f oco d e e nt r a da d e da dos est se ndo ef et u a da n a j a nel a
onde o cont r ol e f oi cri a do. O bl oco de v e r et or n a r . T. se o
cont r ol e de v e p er ma necer h a bili t a do ou . F. se n o.
l Desi gn No Ut i li z ado

- 486 -

ADVPL Completo


bVali d
Bl oco de cdi go, opci on al . Ex ecut a do qu a ndo o cont e do do
cont r ol e de v e ser v ali dado, d e v e r et or n a r . T. se o cont e do
f or v l i do e . F. qu a ndo o cont e do f or i nv li do.
l HScrol l
Lgi co, opci on al . Se . T. , ha bili t a barr a d e rol a ge m
hori z ont al .
l VScroll Lgi co, opci on al . Se . T. , ha bili t a barr a d e rol a ge m v er t i cal .

E Mtodos auxiliares:

GoUp

O Descrio: Sal t a u ma li nha par a ci ma .
O Sintaxe: GoUp( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoDown

O Descrio: Sal t a u ma li nha par a bai xo.
O Sintaxe: GoDown( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

GoTop

O Descrio: Sal t a par a pri mei r a li nh a .
O Sintaxe: GoTop( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


- 487 -

ADVPL Completo



GoBottom

O Descrio: Sal t a par a ul ti ma li nh a .
O Sintaxe: GoBottom( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil

RowCount

O Descrio: Ret or n a nu mer o d e l i nh as vi si v ei s.
O Sintaxe: RowCount( )
O Parmetros:

Ne nhu m -

O Retorno:

Nil


LEditCell

O Descrio: Edi t a o v al or de u ma col un a .
O Sintaxe: l Edi t Cell ( aLi st , oLi st , cPi ct ur e, nCol )
O Parmetros:

aLi st Vet or da Browse onde est o os v al or es da mes ma
oLi st Obj et o, Browse a ser edi t a do
cPi ct ur e Car act er , pi ct ur e n ecessri a par a edi o do ca mpo
nCol Nu mri co, col un a a ser edi t a da .

O Retorno:

Nil


- 488 -

ADVPL Completo



E Aparncia:



















- 489 -

ADVPL Completo



Exemplo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
DEFINE MSDIALOG oDlg FROM 0,0 TO 402,402 PIXEL TITLE 'Exemplo'

oBrowse := VCBrowse():New( 01 , 01, 245, 150,,;
{'','Codigo','Descrio'},{20,30,30}, oDlg, ,,,,;
{||},,,,,,,.F.,,.T.,,.F.,,, )
aBrowse := {{.T.,'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{.F.,'CLIENTE 002','RUA CLIENTE 002','BAIRRO CLIENTE
002'},;
{.T.,'CLIENTE 003','RUA CLIENTE 003','BAIRRO CLIENTE
003'} }

oBrowse:SetArray(aBrowse)
oBrowse:bLine := {||{;
If(aBrowse[oBrowse:nAt,01],oOK,oNO),;
aBrowse[oBrowse:nAt,02],;
aBrowse[oBrowse:nAt,03],;
aBrowse[oBrowse:nAt,04] } }
oBrowse:bLDblClick :=;
{|| aBrowse[oBrowse:nAt][1] :=
!aBrowse[oBrowse:nAt][1],oBrowse:DrawSelect()}

// 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.)
TButton():New(190,060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},40,10,,,,.T.)

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


- 490 -

ADVPL Completo



Documentao dos componentes da interface visual

Os compon e nt es da i nt erf ace vi sual da li nguage m ADVPL ut ili z ados nest e t r ei na me nt o est o
docu me nt a dos n a seo Gui a de Ref er nci a , ao fi n al dest e ma t eri al .

Par a vi su ali z ar a docu me nt ao compl et a de t odos os compon e nt es me nci on a dos nest e
ca p t ul o de v e ser acesso o si t e DEM Docu me nt a o El et r ni ca Mi crosi ga
( de m. mi crosi ga . com. br ) conf or me a bai xo :























- 491 -

ADVPL Completo



36.1. Particularidades dos componentes visuais


36.1.1. Configurando as cores para os componentes

Os compone nt es vi suai s da li ngua ge m ADVPL ut ili z a m o pa dr o d e cor es RGB.

As cor es d est e pa dr o so d efi ni das pel a segui nt e f r mul a , a qu al de v e ser a v al i a da t e ndo
como base a pal et a de cor es no f or ma t o RGB :


nCor : = nVermelho + (nVerde * 256) + (nAzul * 65536)





Figura: Paleta de cores no formato RGB

Com base n est a pal et a , pode mos d efi ni r os v al or es das segui nt es cor es bsi cas :

Cor R G B Valor
Pr et o 0 0 0 0
Az ul 0 0 255 16711680
Ver d e 0 255 0 65280
Ci a no 0 255 255 16776960
Ver mel ho 255 0 0 255
Rosa 255 0 255 16711935
Amar el o 255 255 0 65535
Br a nco 255 255 255 16777215



- 492 -

ADVPL Completo



Par a a t ri bui r as cor es a os obj et os vi suai s de v e m ser obser v a dos os a t ri but os ut ili z a dos par a
est es fi ns e m ca da obj e t o, como por e x e mpl o :

MSDIALOG( )

nClrPane Cor de f undo do pai nel
nClrText Cor da f ont e das l et r as do pai n el


TSAY( )

nClrPane Cor de f undo do pai nel
nClrText Cor da f ont e das l et r as do pai nel


Funo RGB( )

A li ngu a ge m ADVPL possui a f uno RGB( ) a qu al r et or n a o v al or da cor a ser defi ni do, de
acor do com a pa r a met ri z ao d e ca da u m dos el e me nt os da pal e t a RGB.


RGB(nRed, nGreen, nBlue)

nRed Val or de 0- 255 pa r a o el e me nt o v er mel ho da pal et a RGB
nGreen Val or de 0- 255 pa r a o el e me nt o v er d e da pal et a RGB
nBlue Val or de 0- 255 pa r a o el e me nt o a z ul da pal et a RGB
Retorno Val or a ser defi ni do par a o a t ri but o cor do compone nt e


- 493 -

ADVPL Completo



37. Aplicaes com a interface visual do ADVPL

A li ngu a ge m ADVPL possui i nt erf aces vi su ai s pr - d efi ni das que a uxili a m no dese nv ol vi me nt o
de a pl i caes mai s co mpl et as, combi n a ndo est as i nt erf aces com os co mpone nt es vi su ais
de monst r a dos a nt eri or me nt e.

Di da ti ca me nt e as i nt erf aces vi suai s pr - defi ni das da li ngu a ge m ADVPL pode m ser di vi di das e m
t r s gr upos :

E Captura de informaes simples ou Multi-Gets;
E Captura de mltiplas informaes ou Multi-Lines;
E Barras de botes

37.1. Captura de informaes simples (Multi-Gets)

E m ADVPL, as t el as de ca pt ur a de i nf or maes compost as por ml ti pl os ca mpos di gi t v ei s
acompa nh a dos d e se us r esp ect i vos t e xt os e x pl i ca ti vos s o co mu me nt e ch a ma dos de
Enchoi ces.

Um Enchoi ce pode ser f acil me nt e e nt e ndi da como di v ersos conj unt os de obj et os TSa y e TGet
ali nha dos de f or ma a vi su ali z ar ou ca pt ur ar i nf or maes, nor mal me nt e vi ncul a das a ar qui vos
de ca dast r os ou movi me nt aes si mpl es.

Abai xo t e mos a vi suali z ao de u ma Enchoi ce par a o ar qui vo pa dr o do ERP Pr ot he us d e
Ca dast r o de Cl i e nt es ( SA1) :



Figura: Enchoice do Cadastro de Clientes do ERP Protheus


- 494 -

ADVPL Completo



A li ngua ge m ADVPL p er mi t e a i mpl e me nt ao d a Enchoi ce de duas f or mas si mil ar es :

E Funo Enchoice: Si nt a x e t r a di ci on al me nt e utili z a da e m ADVPL, a qu al n o r et or n a
u m obj et o par a a a pl i cao ch a ma dor a ;

E Classe MsMGet: Cl asse do obj et o Enchoi ce, a qu al per mi t e a i nst a nci ao di r et a d e u m
obj et o, t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .

A utili z ao de u m ou out ro obj et o dep e nde unica me nt e da escol h a do dese nvol v edor j que os
par met ros par a a f uno Enchoi ce e pa r a o mt odo Ne w( ) da cl asse MsMGet s o os mesmos,
l e mbr a ndo que par a ma nt er a coer nci a com u ma a pli cao escri t a e m ori e nt ao a obj et os
de v er ser ut i li z a da a cl asse MsMGet ( ) .

37.1.1. Enchoice( )

E Sintaxe: Enchoice( cAlias, nReg, nOpc, aCRA, cLetra, cTexto, aAcho, aPos,
aCpos, nModelo, nColMens, cMensagem, cTudoOk, oWnd, lF3,
lMemoria, lColumn, caTela, lNoFolder, lProperty)

E Retorno: Nil
E Parmetros:

cAlias Ta bel a ca dast r a da no Di ci on ri o de Ta b el as ( SX2) que ser
edi t a da
nReg Par met r o n o ut ili z a do
nOpc N mer o da li nh a do aRot i na que defi ni r o t i po de edi o
( I ncl uso, Al t er ao, Excl uso, Vi suali z ao)
aCRA Par met r o n o ut ili z a do
cLetra Par met r o n o ut ili z a do
cTexto Par met r o n o ut ili z a do
aAcho Vet or com nome dos ca mpos qu e ser o e xi bi dos. Os ca mpos
de usu ri o se mpr e ser o e xi bi dos se n o e xi st i r no par met ro
u m el e me nt o com a e x pr ess o " NOUSER"
aPos Vet or com coor d e n a das par a cri ao da e nchoi ce no f or ma t o
{ < t op > , < l ef t > , < bot t o m > , < ri ght > }
aCpos Vet or com nome dos ca mpos qu e pod er o ser e di t a dos
nModelo Se f or di f er e nt e d e 1 d esa bili t a e x ecu o d e ga t il hos
est r a ngei ros
nColMens Par met r o n o ut ili z a do
cMensagem Par met r o n o ut ili z a do
cTudoOk Ex pr ess o par a v al i dao da Enchoi ce
oWnd Obj et o ( j a nel a , pai nel , et c. ) ond e a e nchoi ce ser cri a da .
lF3 I ndi ca se a e nchoi ce est a se ndo cri a da e m u ma consul t a F 3
par a ut ili z ar v ari v ei s de me mri a
lMemoria I ndi ca se a e nchoi ce ut i li z ar v ari v ei s de me mri a ou os
ca mpos da t a bel a na edi o
lColumn I ndi ca se a a pr ese nt a o dos ca mpos ser e m f or ma de
col un a
caTela Nome da v ari v el t i po " pri v a t e " que a e nchoi ce utili z ar no
l ugar da propri eda de a Tel a
lNoFolder I ndi ca se a e nchoi ce n o i r ut ili z ar as Past as d e Ca dast r o
( SXA)
lProperty I ndi ca se a e nchoi ce n o ut ili z ar as v a ri v ei s a Tel a e a Get s,
some nt e suas propri eda des com os mesmos no mes

- 495 -

ADVPL Completo




Exemplo: Utilizao da funo Enchoice( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da funo Enchoice() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwEnch()

Private cCadastro := " Cadastro de Clientes"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)

Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)



- 496 -

ADVPL Completo



Exemplo (continuao):

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL
RegToMemory("SA1", If(nOpc==3,.T.,.F.))

Enchoice(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/, /*cTexto*/, ;
aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/,/*cTudoOk*/, oDlg, lF3, lMemoria, lColumn,;
caTela, lNoFolder, lProperty)

ACTIVATE MSDIALOG oDlg CENTERED

Return

37.1.2. MsMGet( )

E Sintaxe: MsMGet( ):New( cAlias, nReg, nOpc, aCRA, cLetra, cTexto, aAcho,
aPos, aCpos, nModelo, nColMens, cMensagem, cTudoOk, oWnd, lF3,
lMemoria, lColumn, caTela, lNoFolder, lProperty)

E Retorno: oMsMGet objeto do tipo MsMGet( )
E Parmetros:

cAlias Ta bel a ca dast r a da no Di ci on ri o de Ta b el as ( SX2) que ser
edi t a da
nReg Par met r o n o ut ili z a do
nOpc N mer o da li nh a do aRot i na que defi ni r o t i po de edi o
( I ncl uso, Al t er ao, Excl uso, Vi suali z ao)
aCRA Par met r o n o ut ili z a do
cLetra Par met r o no ut ili z a do
cTexto Par met r o n o ut ili z a do
aAcho Vet or com nome dos ca mpos qu e ser o e xi bi dos. Os ca mpos
de usu ri o se mpr e ser o e xi bi dos se n o e xi st i r no par met ro
u m el e me nt o com a e x pr ess o " NOUSER"
aPos Vet or com coor d e na das par a cri ao da e nchoi ce no f or ma t o
{ < t op > , < l ef t > , < bot t o m > , < ri ght > }
aCpos Vet or com nome dos ca mpos qu e pod er o ser e di t a dos
nModelo Se f or di f er e nt e d e 1 d esa bili t a e x ecu o d e ga t il hos
est r a ngei ros
nColMens Par met r o n o ut ili z a do
cMensagem Par met r o n o ut ili z a do
cTudoOk Ex pr ess o par a v al i dao da Enchoi ce
oWnd Obj et o ( j a nel a , pai nel , et c. ) ond e a e nchoi ce ser cri a da .
lF3 I ndi ca se a e nchoi ce est a se ndo cri a da e m u ma consul t a F 3
par a ut ili z ar v ari v ei s de me mri a

- 497 -

ADVPL Completo


lMemoria I ndi ca se a e nchoi ce ut i li z ar v ari v ei s de me mri a ou os
ca mpos da t a bel a na edi o
lColumn I ndi ca se a a pr ese nt a o dos ca mpos ser e m f or ma de
col un a
caTela Nome da v ari v el t i po " pri v a t e " que a e nchoi ce utili z ar no
l ugar da propri eda de a Tel a
lNoFolder I ndi ca se a e nchoi ce n o i r ut ili z ar as Past as d e Ca dast r o
( SXA)
lProperty I ndi ca se a e nchoi ce n o ut ili z ar as v a ri v ei s a Tel a e a Get s,
some nt e suas propri eda des com os mesmos no mes

Exemplo: Utilizao do objeto MsMGet( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsMget() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwMsGet()

Private cCadastro := " Cadastro de Clientes"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)
Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

- 498 -

ADVPL Completo


Exemplo (continuao):

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

oDlg := MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)

RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/,;
/*cTexto*/, aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/, /*cTudoOk*/,oDlg,lF3,lMemoria,lColumn, caTela,;
lNoFolder, lProperty)

oDlg:lCentered := .T.
oDlg:Activate()

Return


37.2. Captura de mltiplas informaes (Multi-Lines)

A li ngu a ge m ADVPL per mi t e a utili z ao de basi ca me nt e doi s ti pos de obj et os do t i po gri d, ou
como t a mb m s o conh eci dos : mul ti -li ne :

E Grids digitveis: per mi t e m a vi su ali z ao e ca pt ur a de i nf or maes, co mu me nt e
utili z a dos e m i nt erf aces de ca dast r o e ma nut e no, t ai s como :

MSGETDB( )
MSGETDADOS( )
MSNEWGETDADOS( )

E Grids no digitveis: per mi t e m some nt e a vi suali z ao de i nf or maes, comu me nt e
utili z a dos como browses do ERP Pr ot he us, t ai s como :

TWBROWSE( )
MAWNDBROWSE( )
MBROWSE( )

Nest e t pi co ser o t r a t a das as gri ds di gi t v ei s di spon v ei s n a li ngu a ge m ADVPL par a o
dese nvol vi me nt o de i nt erf aces d e ca dast r os e ma nut e no d e i nf or maes.

- 499 -

ADVPL Completo



37.2.1. MsGetDB( )

A cl asse de obj et os vi su ai s MsGet DB( ) per mi t e a cri ao de u m gri d di gi t v el com u ma ou mai s
col un as, base a do e m u ma t a bel a t e mpor ri a .

E Sintaxe: MsGetDB( ) :New(nTop, nLeft, nBottom, nRight, nOpc, cLinhaOk,
cTudoOk, cIniCpos, lDelete, aAlter, nFreeze, lEmpty, uPar1, cTRB,
cFieldOk, lCondicional, lAppend, oWnd, lDisparos, uPar2, cDelOk,
cSuperDel)

E Retorno: oMsGetDB objeto do tipo MsGetDB( )

E Parmetros:

nTop Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de superi or do
obj et o que a cont m.
nLeft Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de esquer da do
obj et o que a cont m.
nBottom Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de i nf eri or do obj et o
que a cont m.
nRight

Di st a nci a e nt r e a MsGet DB e o e xt r e mi da de di r ei t a do obj et o
que a cont m.
nOpc Posi o do el e me nt o do v et or aRot i n a que a MsGet DB usa r
como r ef er nci a .
cLinhaOk F uno e x ecut a da pa r a v ali dar o cont e xt o da li nh a a t ual do
a Col s.
cTudoOk F uno e x ecut a da par a v ali dar o cont e xt o ger al da MsGet DB
( t odo a Col s) .
cIniCpos Nome dos ca mpos do t i po ca r act er que ut ili z ar o i ncr e me nt o
a ut om t i co. Est e par met r o de v e ser no f or ma t o + < nome
do pri mei ro ca mpo > + < nome do segundo ca mpo > + . . . .
lDelete Ha bili t a a opo de e xcl ui r li nhas do a Col s. Val or pa dr o
f al so.
aAlter Vet or com os ca mpos que pod er o ser al t er a dos.
nFreeze I ndi ca qu al col un a n o fi car a cong el a da n a e xi bio.
lEmpty Ha bili t a v ali dao da pri mei r a col un a do a Col s par a est a no
poder est ar v a zi a . Val or pa dr o f al so.
uPar1 Par met r o r eser v a do.
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo.
cTRB Ali as da t a bel a t e mpor ri a .
lCondicional Reser v a do
lAppend I ndi ca se a MsGet DB i r a cri ar u ma li nha e m br a nco
a ut oma t i ca me nt e qu a ndo f or i ncl uso.
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.
lDisparos I ndi ca se ser ut ili z a do o Di ci on ri o de Da dos par a consul t a
pa dr o, i ni ci ali z ao pa dr o e ga t i l hos.
uPar2 Par met r o r eser v a do.
cSuperDel - F uno e x ecut a da qua ndo pr essi ona da as t ecl as
< Ct rl > + < Del et e > .
oWnd Obj et o no qu al a MsGet DB ser cri a da .




- 500 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi suali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i n a , n Op o, nAcesso } , a onde :
n Opo segue o pa dr o do ERP Prot h e us pa r a :
11- Pesqui sar
12- Vi su ali z ar
13- I ncl ui r
14- Al t er ar
15- Excl ui r
aHeader Vet or com i nf or maes das col unas no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nha f oi e xcl u da .


lRefresh Vari v el ti po l gi ca par a uso r eser v a do.


- 501 -

ADVPL Completo



E Variveis pblicas:

nBrLin I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i dao na muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsGet DB co m a t a bel a e posi ci on a n a pri mei r a
li nha .

Exemplo: Utilizao do objeto MsGetDB( )


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Funo | GETDBSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsGetDB() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDbSA1()

Local nI
Local oDlg
Local oGetDB
Local nUsado := 0
Local aStruct := {}

Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")


- 502 -

ADVPL Completo


Exemplo (continuao):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
AADD(aStruct,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3->X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
DbSkip()
End

AADD(aStruct,{"FLAG","L",1,0})

cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)

oDlg := MSDIALOG():New(000,000,300,400, MsGetDB SA1,,,,,,,,,.T.)

oGetDB := MsGetDB():New(05,05,145,195,3,"U_LINHAOK", "U_TUDOOK", "+A1_COD", ;
.T.,{"A1_NOME"},1,.F.,,cCriaTrab,"U_FIELDOK",,.T.,oDlg, .T., ,"U_DELOK",;
"U_SUPERDEL")

oDlg:lCentered := .T.
oDlg:Activate()
DbSelectArea(cCriaTrab)
DbCloseArea()

Return

User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()
ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.



- 503 -

ADVPL Completo



37.2.2. MsGetDados( )

A cl asse de obj et os vi suai s MsGet Da dos( ) per mi t e a cri ao de u m gri d di gi t v el com u ma ou
mai s col unas, base a do e m u m a rr a y.

E Sintaxe: MsGetDados( ):New( nTop, nLeft, nBottom, nRight, nOpc, cLinhaOk,
cTudoOk, cIniCpos, lDelete, aAlter, uPar1, lEmpty, nMax, cFieldOk,
cSuperDel, uPar2, cDelOk, oWnd)

E Retorno: oMsGetDados objeto do tipo MsGetDados( )

E Parmetros:

nTop Di st a nci a e nt r e a MsGe t Da dos e o e xt r e mi da de superi or do
obj et o que a cont m.
nLeft Di st a nci a e nt r e a MsGe t Da dos e o e xt r e mi da de esqu er da do
obj et o que a cont m.
nBottom Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de i nf eri or do
obj et o que a cont m.
nRight

Di st a nci a e nt r e a MsGet Da dos e o e xt r e mi da de di r ei t a do
obj et o que a cont m.
nOpc Posi o do el e me nt o do v et or aRot i n a que a MsGet Da dos
usar como r ef er e nci a .
cLinhaOk F uno e x ecut a da par a v ali dar o cont e xt o da li nh a a t u al do
a Col s.
cTudoOk F uno e x ecut a da p ar a v al i dar o cont e xt o g er al da
MsGet Da dos ( t odo a Col s) .
cIniCpos Nome dos ca mpos do t i po ca r act er qu e ut ili z ar o i ncr e me nt o
a ut om t i co. Est e par met r o de v e ser no f or ma t o + < nome
do pri mei ro ca mpo > + < nome do segundo ca mpo > + . . . .
lDelete Ha bili t a e xcl ui r li nhas do a Col s. Val or pa dr o f al so.
aAlter Vet or com os ca mpos que pod er o ser al t er a dos.
uPar1 Par met r o r eser v a do.
lEmpty Ha bili t a v ali dao da pri mei r a col un a do a Col s par a est a no
poder est ar v a zi a . Val or pa dr o f al so.
nMax N mer o m xi mo de l i nhas per mi t i das. Val or pa dr o 99.
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo.
cSuperDel F uno e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e > .
uPar2 Par met r o r eser v a do.
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s.
oWnd Obj et o no qu al a MsGet Da dos ser cri a da .


- 504 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi suali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i n a , n Op o, nAcesso } , a onde :
n Opo segue o pa dr o do ERP Prot h e us pa r a :
16- Pesqui sar
17- Vi su ali z ar
18- I ncl ui r
19- Al t er ar
20- Excl ui r
aHeader Vet or com i nf or maes das col un as no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nha f oi e xcl u da .


lRefresh Vari v el ti po l gi ca par a uso r eser v a do.


- 505 -

ADVPL Completo



E Variveis pblicas:

N I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i dao na muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsGet Da dos com a t a bel a e posi ci on a n a pri mei r a
li nha .
Hide( ) Ocul t a a MsGet Da dos.
Show( ) Most r a a MsGet Da dos.


Exemplo: Utilizao do objeto MsGetDados( )


#include protheus.ch

/*/
+-----------------------------------------------------------------------------
| Funo | GETDADOSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MSGETADOS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDadoSA1()

Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}

Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")


- 506 -

ADVPL Completo



Exemplo (continuao):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
EndIf
DbSkip()
End

AADD(aCols,Array(nUsado+1))

For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next

aCols[1][nUsado+1] := .F.

oDlg := MSDIALOG():New(000,000,300,400, MsGetDados SA1,,,,,,,,,.T.)

oGetDados := MsGetDados():New(05, 05, 145, 195, 4, "U_LINHAOK", "U_TUDOOK",;
"+A1_COD", .T., {"A1_NOME"}, , .F., 200, "U_FIELDOK", "U_SUPERDEL",,;
"U_DELOK", oDlg)

oDlg:lCentered := .T.
oDlg:Activate()

Return

User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()
ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.



- 507 -

ADVPL Completo



37.2.3. MsNewGetDados( )

A cl asse de obj et os vi su ai s MsNe wGet Da dos( ) per mi t e a cri ao de u m gri d di gi t v el com u ma
ou mai s col un as, base a do e m u m a rr a y .

E Sintaxe: MsNewGetDados( ) :New(nSuperior, nEsquerda ,nInferior, nDireita,
nOpc, cLinOk, cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,
cFieldOk, cSuperDel, cDelOk, oDLG, aHeader, aCols)

E Retorno: oMsGetDados objeto do tipo MsNewGetDados( )

E Parmetros:

nSuperior Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de sup eri or
do obj et o qu e a cont e m
nEsquerda Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de esquer da
do obj et o qu e a cont e m
nInferior Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de i nf eri or do
obj et o que a cont e m
nDireita Di st a nci a e nt r e a MsNe wGet Da dos e o e xt r e mi da de di r ei t a do
obj et o que a cont e m
nOpc Oper a o e m e x ecu o : 2- Vi su ali z ar, 3- I ncl ui r, 4- Al t er ar , 5-
Excl ui r
cLinOk F uno e x ecut a da par a v ali dar o cont e xt o da l i nh a a t u al do
a Col s
cTudoOk F uno e x ecut a da par a v ali dar o cont e xt o g er al da
MsNe wGet Da dos ( t odo a Col s)
cIniCpos Nome dos ca mpos do t i po ca r act er que ut i li z ar o i ncr e me nt o
a ut om t i co.
aAlterGDa Ca mpos al t er v ei s da Get Da dos
nFreeze Ca mpos est t i cos n a Ge t Da dos, par t i ndo se mpr e da posi o
i ni ci al da get da dos a onde :
3- Pri mei ro ca mpo congel a do
4- Pri mei ro e segundo ca mpos cong el a dos. . .
nMax N mer o m xi mo de l i nhas per mi t i das. Val or pa dr o 99
cFieldOk F uno e x ecut a da n a v ali dao do ca mpo
cSuperDel F uno e x ecut a da qu a ndo pr essi on a da as t ecl as
< Ct rl > + < Del et e >
cDelOk F uno e x ecut a da par a v ali dar a e xcl uso de u ma li nh a do
a Col s
oDLG Obj et o no qu al a MsNe wGet Da dos ser cri a da
aHeader Arr a y a ser t r a t a do i nt er n a me nt e na MsNe wGet Da dos co mo
a He a d er
aCols Arr a y a ser t r a t a do i nt er n a me nt e na MsNe wGet Da dos co mo
a Col s


- 508 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vet or com as r ot i n as que ser o e x ecut a das n a MBrowse e
que defi ni r a o t i po de oper a o que est a se ndo e x ecut a da
(i ncl uso, al t er ao, e xcl uso, vi suali z ao, pesqui sa , . . . ) no
f or ma t o :
{ cTi t ul o, cRot i n a , n Op o, nAcesso } , a onde :

n Opo segue o pa dr o do ERP Prot h e us pa r a :
6- Pesqui sar
7- Vi su ali z ar
8- I ncl ui r
9- Al t er ar
10- Excl ui r
aHeader Vet or com i nf or maes das col unas no f or ma t o :

{ cTi t ul o, cCa mpo, cPi ct ur e, nTa ma nho, n Deci mai s, ;
cVali dao, cReser v a do, cTi po, xReser v a do1, xReser v a do2 }

A t a bel a t e mpor ri a utili z a da pel a MsGet DB de v er ser cri a da
com base no a He a der mai s u m l ti mo ca mpo t i po l gi co que
det er mi n a se a l i nha f oi e xcl u da .

lRefresh Vari v el ti po l gi ca par a uso r eser v a do.

- 509 -

ADVPL Completo



E Variveis pblicas:

N I ndi ca qu al a li nh a posi ci on a da do a Col s.

E Funes de validao:

cLinhaOk F uno de v al i da o n a muda na das li nh as da gri d. N o
pode ser d efi ni da como St a t i c F uncti on.
cTudoOk F uno de v al i dao da confi r ma o da oper ao com o gri d.
No pode ser defi ni da como St a t i c F uncti on.

E Mtodos adicionais:

ForceRefresh( ) At u ali z a a MsNe wGet Da dos com a t a bel a e posi ci on a n a
pri mei r a li nh a .
Hide( ) Ocul t a a MsNe wGet Da dos.
Show( ) Most r a a MsNe wGet Da dos.

Exemplo: Utilizao dos objetos MsNewGetDados( ) e MsMGet( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao dos objetos |
| | MsNewGetDados() e MsMGet() combinados |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGetD()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}


- 510 -

ADVPL Completo



Exemplo (continuao):

Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.;
cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

- 511 -

ADVPL Completo



Exemplo (continuao):

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,;
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)
RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
/*cTudoOk*/, oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,;
lProperty)

oGetD:= MsNewGetDados():New(nSuperior, nEsquerda, nInferior, nDireita,;
nOpc,cLinOk,cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk,;
cSuperDel,cDelOk, oDLG, aHeader, aCols)

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()},{||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()
Return

- 512 -

ADVPL Completo



37.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados( )

Conf or me vi st o no t pico sobr e defi ni o das propri eda des de cor es par a os compone nt es
vi su ai s, ca da obj et o possui car act er st i cas que de v e m ser r espei t a das par a corr et a ut i li z ao
dest e r ecurso.

E Atributos adicionais:

lUseDefaultColors At ri but o que de v er ser defi ni do como . F . par a que as
al t er aes n as cor es sej a m per mi ti das.


E Mtodos adicionais:

SetBlkBackColor Mt odo que defi ne a cor que ser ut ili z a da par a ca da li nh a do
gri d. No n ecess ri o ut ili z ar o mt odo Refr esh( ) a ps a
defi ni o da cor por est e mt odo.

E Aparncia:






- 513 -

ADVPL Completo



Exemplo: Definindo cores personalizadas para o objeto MsNewGetDados( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao dos objetos |
| | MsNewGetDados() e MsMGet() combinados e tratamento de cores |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGtCl()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0

Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999


- 514 -

ADVPL Completo


Exemplo (continuao):

Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3-
>X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End


- 515 -

ADVPL Completo



Exemplo (continuao):

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado

IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF

Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)

RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,;
aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)

oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,;
cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,;
cDelOk, oDLG, aHeader, aCols)

// Tratamento para definio de cores especficas,
// logo aps a declarao da MsNewGetDados

oGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()

Return


- 516 -

ADVPL Completo



Exemplo (continuao):

// Funo para tratamento das regras de cores para a grid da MsNewGetDados

Static Function GETDCLR(aLinha,nLinha,aHeader)

Local nCor2 := 16776960 // Ciano - RGB(0,255,255)
Local nCor3 := 16777215 // Branco - RGB(255,255,255)
Local nPosProd := aScan(aHeader,{|x| Alltrim(x[2]) == "C6_PRODUTO"})
Local nUsado := Len(aHeader)+1
Local nRet := nCor3

If !Empty(aLinha[nLinha][nPosProd]) .AND. aLinha[nLinha][nUsado]
nRet := nCor2
ElseIf !Empty(aLinha[nLinha][nPosProd]) .AND. !aLinha[nLinha][nUsado]
nRet := nCor3
Endif

Return nRet





























- 517 -

ADVPL Completo



37.3. Barras de botes

A li ngu a ge m ADVPL per mi t e a i mpl e me nt ao de bar r as d e bot es utili z a ndo f unes pr -
defi ni das dese nvol vi das com o obj et i vo de f acili t ar su a ut ili z ao, ou a t r a v s da ut ili z ao
di r et a dos compone nt es vi suai s di spon v ei s. De nt r e os r ecursos da li ngu a ge m que pode m ser
utili z a dos com est a fi nali da de ser o a bor da dos :

E Funo EnchoiceBar: Si nt a x e t r a di ci onal ment e utili z a da e m ADVPL, a qu al no
r et or na u m obj et o par a a a pli cao ch a ma dor a ;

E Classe TBar: Cl asse do obj et o TBar ( ) , a qual per mi t e a i nst a nci ao di r et a de u m
obj et o do t i po bar r a d e bot es sup eri or, t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .

E Classe ButtonBar: Cl asse do obj et o But t onBa r ( ) , a qu al per mi t e a i nst a nci ao di r et a
de u m obj et o bar r a d e bot es g e nri co, o qu al pode ser ut ili z a do e m qu al quer posi o
da t el a , t or n a ndo- o di spon v el n a a pli cao ch a ma dor a .


37.3.1. EnchoiceBar( )

F uno que cri a u ma barr a d e bot es no f or ma t o pa dr o ut ili z a do pel as i nt erf aces de ca dast r o
da a pli cao Prot he us.

Est a bar r a possui os bot es pa dres pa r a confi r mar ou ca ncel ar a i nt erf ace e ai nda per mi t e a
a di o de bot es a di ci on ai s com a ut ili z ao do par met r o aButtons.


E Sintaxe:


EnchoiceBar( oDlg, bOk, bCancel, lMsgDel, aButtons, nRecno, cAlias)


E Parmetros:

oDlg Di al og onde i r cri ar a b arr a de bot es
bOk Bl oco de cdi go a ser e x ecut a do no bot o Ok
bCancel Bl oco de cdi go a ser e x ecut a do no bot o Ca ncel ar
lMsgDel Exi be di al og par a confi r mar a e xcl uso
aButtons
Arr a y cont e ndo bot es a di ci on ai s.
a Arr a y[ n] [ 1] - > I ma g e m do bot o
a Arr a y[ n] [ 2] - > bl oco d e cdi go cont e ndo a a o do bot o
a Arr a y[ n] [ 3] - > t t ul o do bot o
nRecno Regi st ro a ser posi ci ona do a ps a e x ecuo do bot o Ok .
cAlias
Ali as do r egi st r o a ser posi ci on a do a ps a e x ecuo do bot o
Ok. Se o pa r met r o nRecno f or i nf or ma do, o cAl i as passa ser
obri ga t ri o.

E Aparncia:





- 518 -

ADVPL Completo


Exemplo: Utilizao da funo EnchoiceBar( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Funo | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da funo |
| | EnchoiceBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function DEnchBar()
Local oDlg, oBtn
Local aButtons := {}

DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF;
oMainWnd

AADD( aButtons, {"HISTORIC", {|| TestHist()}, "Histrico...",;
"Histrico",{|| .T.}} )

@ -15,-15 BUTTON oBtn PROMPT "..." SIZE 1,1 PIXEL OF oDlg

ACTIVATE MSDIALOG oDlg ;
ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))

Return















- 519 -

ADVPL Completo



37.3.2. TBar( )

Cl asse d e obj et os vi su ai s que per mi t e a i mpl e me nt ao de u m compone nt e do t i po barr a d e
bot es pa r a a par t e sup eri or de u ma j a nel a pr e vi a me nt e defi ni da .

E Sintaxe: New(oWnd, nBtnWidth, nBtnHeight, l3D, cMode, oCursor, cResource,
lNoAutoAdjust)

E Retorno: oTBar objeto do tipo TBar( )

E Parmetros:

oWnd
Obj et o, opci onal . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
nBtnWidth Nu mri co, opci on al . Lar gur a do bot o cont i do n a barr a
nBtnHeight Nu mri co, opci on al . Al t ur a do bot o cont i do n a b arr a
l3D Lgi co, opci on al . Defi ne t i po da barr a
cMode No ut i li z a do.
oCursor
Obj et o, opci onal . Defi ne Cursor ao posi ci on ar o mouse sobr e a
barr a .
cResource
Car act er , opci on al . I ma ge m do r ecurso a ser i nseri do como
f undo da bar r a .
lNoAutoAdjust Lgi co.

E Aparncia:





Exemplo: Utilizao da funo EnchoiceBar( )


#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------------
| Funo | TSTBAR | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function TstTBar()
Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

- 520 -

ADVPL Completo



Exemplo (continuao):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;
{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;
{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;
{||},oTBar,'Preo' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return



37.3.3. ButtonBar

A si nt a x e ButtonBar a f or ma cl ssi ca utili z ada na li ngu a ge m ADVPL par a i mpl e me nt ar u m
obj et o da cl asse TBar ( ) , o qual possui as car act er st i cas me nci ona das no t pi co a nt eri or .

E Sintaxe:


DEFINE BUTTONBAR oBar SIZE nWidth, nHeight 3D MODE OF oDlg
CURSOR


E Retorno: ( ).

E Parmetros:

oBar Obj et o do t i po TBa r ( ) que ser cri a do com a ut i li z ao da
si nt a x e But t onBar ( ) .
nWidth Nu mri co, opci on al . Lar gur a do bot o cont i do n a barr a .
nHeight Nu mri co, opci on al . Al t ur a do bot o cont i do n a barr a .
3D Se defi ni do h a bili t a a visu ali z ao e m 3 D da ba rr a d e bot es.
oDlg Obj et o, opci on al . Ja nel a ou cont r ol e onde o bot o d e v er ser
cri a do.
MODE Defi ne a f or ma de ori e nt ao do obj et o But t onBar ut ili z a ndo
os segui nt es t er mos pr - defi ni dos :
TOP, BOTT OM, FLOAT

CURSOR Obj et o, opci on al . Defi ne Cursor ao posi ci on ar o mouse sobr e
a barr a .


- 521 -

ADVPL Completo


A si nt a x e But t onBar r equ er a a di o dos bot es como r ecursos a di ci on ai s da barr a
pr e vi a me nt e defi ni da utili z a ndo a si nt a x e a bai xo :

E Botes: BUTTON RESOURCE

E Sintaxe adicional:


DEFINE BUTTON RESOURCE cBitMap OF oBar ACTION cAcao TOOLTIP
cTexto


E Parmetros:

cBitMap Nome da i ma ge m di spon v el n a a pli cao.
oBar Obj et o do t i po TBa r ( ) no qual o bot o ser a di ci on a do.
cAcao F uno ou l i st a de e x pr esses qu e d et er mi na a ao que ser
r e al i z a da pel o bot o.
cTexto Te xt o no est il o t ool t i p t e xt qu e ser e xi bi do qu a ndo o
cursor do mouse f or posi ci on a do sobr e o bot o n a barr a de
f err a me nt as.

E Aparncia:





Exemplo: Utilizao da sintaxe ButtonBar


#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------
| Funo | TstBBar | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function TstBBar()

Local oDlg
Local oBtn1
Local oBtn2

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - BUTTONBAR',,,,,,,,,.T.)

DEFINE BUTTONBAR oBar SIZE 25,25 3D TOP OF oDlg

- 522 -

ADVPL Completo



Exemplo (continuao):

DEFINE BUTTON RESOURCE "S4WB005N" OF oBar ACTION NaoDisp() TOOLTIP "Recortar"
DEFINE BUTTON RESOURCE "S4WB006N" OF oBar ACTION NaoDisp() TOOLTIP "Copiar"
DEFINE BUTTON RESOURCE "S4WB007N" OF oBar ACTION NaoDisp() TOOLTIP "Colar"
DEFINE BUTTON oBtn1 RESOURCE "S4WB008N" OF oBar GROUP;
ACTION Calculadora() TOOLTIP "Calculadora"

oBtn1:cTitle:="Calc"
DEFINE BUTTON RESOURCE "S4WB009N" OF oBar ACTION Agenda() TOOLTIP "Agenda"
DEFINE BUTTON RESOURCE "S4WB010N" OF oBar ACTION OurSpool() TOOLTIP "Spool"
DEFINE BUTTON RESOURCE "S4WB016N" OF oBar GROUP;
ACTION HelProg() TOOLTIP "Ajuda"

DEFINE BUTTON oBtn2 RESOURCE "PARAMETROS" OF oBar GROUP;
ACTION Sx1C020() TOOLTIP "Parmetros"

oBtn2:cTitle:="Param."

DEFINE BUTTON oBtOk RESOURCE "FINAL" OF oBar GROUP;
ACTION oDlg:End()TOOLTIP "Sair"

oBar:bRClicked := {|| AllwaysTrue()}
oDlg:lCentered := .T.
oDlg:Activate()

Return




















- 523 -

ADVPL Completo



37.3.4. Imagens pr-definidas para as barras de botes

Conf or me me nci ona do nos t pi cos a nt eri or es, os bot es vi suai s do t i po bar r a d e bot es
per mi t e m a d efi ni o de i t e ns com aes e i ma ge ns vi ncul a das.

De nt r e os obj et os e f unes me nci on a dos, f oi ci t a da a Enchoi ce Bar ( ) , a qu al per mi t e a a di o
de bot es a di ci on ai s a t r a v s do par met r o aButton, se ndo que os i t e ns dest e ar r a y d e v e m
possui r o segui nt e f or ma t o :

E Sintaxe: AADD( a But t ons, { cBi t Ma p, bAca o, cTe x t o } )

E Estrutura:

cBitMap
Nome da i ma ge m pr - d efi ni da e xi st e nt e n a a pl ica o ERP que
ser vi ncul a da ao bot o.
bAcao
Bl oco de cdi go que d efi ne a ao qu e ser e x ecut a da com a
utili z ao do bot o.
cTexto
Te xt o no est il o t ool t i p t e xt qu e ser e xi bi do qu a ndo o cursor
do mouse f or posi ci on a do sobr e o bot o n a ba r r a de
f err a me nt as.

E Alguns BitMaps disponveis:


DESTINOS

DISCAGEM

EDIT

EDITABLE

EXCLUIR

FORM

GRAF2D

GRAF3D

LINE

NOTE

OBJETIVO

OK

PENDENTE

PRECO

PRODUTO

S4SB014N

S4WB001N

S4WB005N

S4WB006N

S4WB007N

S4WB008N

S4WB009N

S4WB010N

S4WB011N

S4WB013N

S4WB014A

S4WB016N

SIMULACA

VENDEDOR

USER

E Exemplo:


AADD(aButtons,{"USER",{||AllwaysTrue()},"Usurio"})



- 524 -

ADVPL Completo



38. Outras aplicaes da interface visual do ADVPL


38.1. MaWndBrowse( )

E Descrio: Br owse que per mi t e a vi suali z ao de r egi st ros pa r a ar qui vos / t a bel as qu e
n o possue m est r ut ur a defi ni da no Di ci onri o de Da dos do si st e ma .

E Sintaxe: Ma WndBr owse ( nLi n1, nCol 1, nLi n2, nCol 2, cTi tl e, cAli as, a Ca mpos, aRot i n a ,
cF unLeg, cTopF un, cBot F un, l Ce nt er ed, aResource , nMod, aPesqui , cSe e k ,
l Di c, l Sa v Or d)

E Parmetros:

nLin1 Li nh a i ni ci al do browse
nCol1 Col un a i ni ci al do browse
nLin2 Li nh a fi n al do browse
nCol2 Col un a fi n al do browse
cTitle T t ul o do browse ( obri ga t ri o)
cAlias Ali as da t a bel a cor r e nt e pode ndo ser u m t e mpor ri o
aCampos
Se l Di c = . T. ut ili z ar o SX3, do cont r ri o o a Ca mpos
i nf or ma do
aRotina I d nt i co ao aRot i n a par a mBr owse
cFunLeg
F uno que d e v er r et or nar u m v al or l gi co e com i sso ser
a t ri bu do se maf r o n a pri mei r a col un a do br owse
cTopFun Most r ar os r egi st ros co m a ch a v e d e
cBotFun Most r ar os r egi st ros co m a ch a v e a t e
lCentered Val or v er da dei ro ce nt r al i z a
aResource a Add( aResource, { " I MAGEM" , " Te xt o si gni fi ca t i vo " } )
nModelo
Posi o do Me nu :
1- Hori z ont al ( superi or )
2- Ver t i cal ( esquer da )
3- Hori z ont al (i nf eri or )
aPesqui
a Add( aPesqui { " T t ul o " , nOr d e m } ) , se n o passa do ser
utili z a do o AxPesqui
cSeek Ch a v e pri nci pal par a a busca , e x e mpl o : x Fili al ( " ???" )
lDic Par met r o e m conj unt o com a Ca mpos
lSavOrd Est a b el ecer a or de m a ps p esqui sas.

E Estrutura do array aCampos

a Add( a Ca mpo, { X3_CAMPO, X3_PI CTURE, X3_TI TULO, X3_TAMANHO } )

- 525 -

ADVPL Completo



E Aparncia:



Exemplo: MaWndBrowse para arquivo temporrio


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Funo | WndBrwTRB | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Demonstra a utilizao da MaWndBrowse com Temporrio |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function WndBrwTRB()

// Variveis para o Arquivo Temporario
Local cChave := ""
Local cArqTrb := ""
Local aStruTRB := {}

// Variveis para o MaWndBrowse
Local cTitulo := "Cadastro Temporario"// Ttulo obrigatrio
Local cAlias := "TRB" // Alias da tabela corrente podendo ser TRB
Local cFunLeg := "" // Funo que dever retornar um valor lgico e com isso
ser atribudo semafro na primeira coluna do browse
Local cTopFun := "" // Mostrar os registros com a chave de
Local cBotFun := "" // Mostrar os registros com a chave ate
Local lCentered := .T. // Valor verdadeiro centraliza
Local aResource := {} // aAdd(aResource,{"IMAGEM","Texto significativo"})
Local nModelo := 1 // 1- Menu do aRotina
Local aPesqui := {} // aAdd(aPesqui{"Ttulo",nOrdem}), se no passado ser
utilizado o AxPesqui
Local cSeek := "" // Chave principal para a busca, exemplo: xFilial("???")
Local lDic := .F. // Parmetro em conjunto com aCampos
Local lSavOrd := .T. // Estabelecer a ordem aps pesquisas.

- 526 -

ADVPL Completo



// Variaveis para a MsAdvSize
Local lEnchBar := .F. // Se a janela de dilogo possuir enchoicebar (.T.)
Local lPadrao := .F. // Se a janela deve respeitar as medidas padres do
//Protheus (.T.) ou usar o mximo disponvel (.F.)
Local nMinY := 400 // Altura mnima da janela

Local aSize := MsAdvSize(lEnchBar, lPadrao, nMinY)

Private cCadastro := " "
Private aCampos := {} // Se lDic=.T. utilizar o SX3, do contrrio o aCampos
//informado -> aAdd(aCampo,{X3_CAMPO,X3_PICTURE,X3_TITULO,X3_TAMANHO})
Private aRotina := {} // Idntico ao aRotina para mBrowse

aAdd(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
aAdd(aRotina,{"Visualizar","U_TVisual",0,2})
aAdd(aRotina,{"Incluir" ,"U_TInclui",0,3})
aAdd(aRotina,{"Alterar" ,"U_TAltera",0,4})
aAdd(aRotina,{"Excluir" ,"U_TExclui",0,5})

// Estrutura do Arquivo: Nome do campo / tipo, tamanho, decimais (SX3 para
//temporrio)
AADD(aStruTRB,{"TRB_FILIAL" ,"C",02,0}) // Nome_Campo , Tipo_Campo,
//Tamanho, Decimal
AADD(aStruTRB,{"TRB_ID" ,"C",14,0})
AADD(aStruTRB,{"TRB_NOME" ,"C",20,0})
AADD(aStruTRB,{"TRB_IDADE" ,"N",03,0})
AADD(aStruTRB,{"TRB_STATUS" ,"C",01,0})

// aCampos padro para a MaWndBrowse
//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>})

// aCampos melhorado para a WndBrwTRB
//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>,<Tipo>,<cWhen>,<lObrig
//atorio>})
// Nota: lObrigatorio deve ser sempre a ultima informacao do aCampos

AADD(aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02,"C",".F.",.T.})
AADD(aCampos,{"TRB_ID" ,"@!" ,"Matricula" ,14,"C",".F.",.T.})
AADD(aCampos,{"TRB_NOME" ,"@!" ,"Nome" ,20,"C",".T.",.F.})
AADD(aCampos,{"TRB_IDADE" ,"@E 999","Idade" ,03,"N",".T.",.F.})
AADD(aCampos,{"TRB_STATUS" ,"@!" ,"Status" ,01,"C",".T.",.T.})

If ( Select( "TRB" ) <> 0 )
dbSelectArea ( "TRB" )
dbCloseArea ()
Endif

//
// Crio arq. de trab. p/ gravar as inconsistencias.
//
cArqTrb := CriaTrab(aStruTRB,.t.)
dbUseArea(.T.,,cArqTrb,"TRB",.T.,.F.)

cChave := "TRB_FILIAL+TRB_ID"
IndRegua("TRB",cArqTrb,cChave,,,"Selecionando Registros...")





- 527 -

ADVPL Completo


dbSelectArea( "TRB" )
MaWndBrowse(aSize[7],aSize[2],aSize[6],aSize[5],cTitulo,cAlias,aCampos,aRotina,,
cTopFun,cBotFun,lCentered,,nModelo,,cSeek,lDic,lSavOrd)

If ( Select( "TRB" ) <> 0 )
dbSelectArea ( "TRB" )
dbCloseArea ()
Endif

Return



38.1.1. Enchoice para Arquivos Temporrios

Par a a pr ov ei t ar i nt ei r a me nt e o r ecurso da Ma WndBrowse ut ili z ada com ar qui vos
t e mpor ri os, necess ri o i mpl e me nt ar u ma f uno do t i po Enchoi ce par a r e al i z ar as
oper aes d e Vi suali z ar, I ncl ui r, Al t er ar e Excl ui r os r egi st r os d est e a r qui vo / t a bel a .

Com f oco nest a necessi da de, f oi dese nvol vi da par a o curso de ADVPL a f uno
TEnchoi ce.

E Descrio: F un o par a ma ni pul ao de r egi st ros de u m ar qui vo t e mpor ri o si mul ar a
Enchoi ce do a mbi e nt e Prot he us.

E Sintaxe: TEnchoi ce( oDl g, a Ca mpos, nLef t E, nTopE, nHei ght E, n Wi dt hE, l EnchBar )

E Parmetros:

oDlg Obj et o Di al og no qual a TEnchoi ce ser vi ncul a da
aCampos Est r ut ur a de ca mpos pa r a e xi bi o da t el a da TEnchoi ce
nLeftE Coor de n a da hori z ont al e m pi x el s.
nTopE Coor de n a da v er t i cal e m pi x el s.
nHeightE Al t ur a e m pi x el s
nWidthE Lar gur a e m pi x el s.
lEnchBar Se a e nchoi ce ser mont a da e m conj unt o com u ma barr a de
bot es do t i po Enchoi ce bar ( )

E Pr- requisitos da funo chamadora:

Par a cor r et a ut ili z ao da f uno TEnchoi ce s o necessri os os segui nt es t r a t a me nt os /
defi ni es na f un o ch a ma dor a :


E Tratamento 01: Montagem do array aCampos

O ar r a y a Ca mpos ut ili z a do pel a TEnchoi ce possui basi ca me nt e o mesmo f or ma t o do
arr a y ut ili z a do pel a f uno Model o2( ) .

" <Variavel >" Nome da v ari v el Pri v a t e que est vi ncul a da ao ca mpo
di gi t v el .
{ nLinha,nColuna} Posi o e m pi x el s do ca mpo n a Enchoi ce.
" <Titulo>" T t ul o do ca mpo.
" <Picture>" Pi ct ur e de f or ma t a o do ca mpo.
" <Validacao>" Vali dao do ca mpo di gi t v el .
" <F3>" Consul t a F 3 vi ncul a da ao ca mpo.

- 528 -

ADVPL Completo


" <lWhen>" Se o ca mpo est edi t v el .
<Tamanho> Ta ma nho do ca mpo pa r a vi su ali z ao.


AADD(aCposEnch, {"<Variavel>" ,{nLinha,nColuna} ,"<Titulo>",;
"<Picture>", "<Validacao>", "<F3>", "<lWhen>",;
<Tamanho>})



E Tratamento 02: Definio das dimenses da TEnchoice

Os par met ros de di me nso da TEnchoi ce no pr eci sa m se i nf or ma dos, poi s el a i r se
a j ust ar ao t a ma nho do obj et o Di al og ao qu al f or vi ncul a do, caso o obj et i vo sej a que a
TEnchoi ce ocupe t oda a r e a di spon v el do obj et o.

i mpor t a nt e especi fi car se o Di al og i r cont er u ma Enchoi ce Ba r ( ) par a que a
TEnchoi ce( ) sej a posi ci ona da a dequ a da me nt e no obj et o.

E Aparncia:






E Detalhamento da funo TEnchoice:

- 529 -

ADVPL Completo




/*/
+-----------------------------------------------------------------------
| Funo | TEnchoice | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

Static Function TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE,;
lEnchBar)

Local aSays := {}
Local aGets := {}
Local cCaption := ""
Local cPict := ""
Local cValid := ""
Local cF3 := ""
Local cWhen := ""
Local cBlKSay := ""
Local cBlkGet := ""
Local cBlKVld := ""
Local cBlKWhen := ""
Local nLeft := 0
Local nTop := 0
Local nI := 0

Default lEnchBar := .F.
Default nLeftE := IIF(lEnchBar,(oDlg:nLeft)+16,2)
Default nTopE := 2
Default nHeightE := (oDlg:nHeight)-135
Default nWidthE := (oDlg:nWidth)-102
// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aC,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})

If Len(aCampos) > 0

oScroll := TScrollBox():New(oDlg, nLeftE, nTopE, nHeightE , nWidthE, .T.,;
.T., .T.)

For nI:=1 to Len(aCampos)

If Len(aCampos[nI])==8

cCampo := aCampos[nI,1]
nLeft := aCampos[nI,2,1]-13
nTop := aCampos[nI,2,2]
cCaption:= Iif(Empty(aCampos[nI,3]), " " ,aCampos[nI,3])
cPict := Iif(Empty(aCampos[nI,4]), Nil ,aCampos[nI,4])
cValid := Iif(Empty(aCampos[nI,5]), ".t." ,aCampos[nI,5])
cF3 := Iif(Empty(aCampos[nI,6]), NIL ,aCampos[nI,6])
cWhen := Iif(Empty(aCampos[nI,7]), ".T." ,aCampos[nI,7])


nWidthG := Iif(Empty(aCampos[nI,8]), 100,;
IiF(aCampos[nI,8]*3.5 > 100,100,nil))

- 530 -

ADVPL Completo



cBlKSay := "{|| OemToAnsi('"+cCaption+"')}"
cBlkGet := "{ | u | If( PCount() == 0,;
"+cCampo+","+cCampo+":= u ) }"
cBlKVld := "{|| "+cValid+"}"
cBlKWhen := "{|| "+cWhen+"}"

AADD(aSays,Array(1))
aSays[nI] := TSay():New(nLeft+1, nTop, &(cBlkSay), oScroll,,,;
.F., .F., .F., .T.,,, 50, 8, .F., .F., .F., .F.,;
.F. )
AADD(aGets,Array(1))

aGets[nI] := TGet():New( nLeft, nTop+50, &(cBlKGet), oScroll,;
nWidthG, 11, cPict, &(cBlkVld),,,, .F.,, .T.,,;
.F., &(cBlkWhen), .F., .F.,, .F., .F. , cF3,;
(cCampo))

EndIf
Next
Endif

Return
























- 531 -

ADVPL Completo



Exemplo: Funo TVisual ( MaWndBrowse com TEnchoice)


/*/
+-----------------------------------------------------------------------
| Funo | TVisual | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TVisual(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk := {||oDlg:End()}
LOCAL bCancel := {||oDlg:End()}
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()

RETURN


- 532 -

ADVPL Completo



Exemplo: Funo TInclui ( MaWndBrowse com TEnchoice)


/*/
+-----------------------------------------------------------------------
| Funo | TInclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TInclui(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".T.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

Do Case
Case aCampos[nX][5] == "C"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
Case aCampos[nX][5] == "N"
&("_"+aCampos[nX][1]) := 0
Case aCampos[nX][5] == "D"
&("_"+aCampos[nX][1]) := CTOD("")
Case aCampos[nX][5] == "L"
&("_"+aCampos[nX][1]) := .F.
Case aCampos[nX][5] == "M"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
EndCase

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)


- 533 -

ADVPL Completo


TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()

RETURN

Exemplo: Funo TAltera ( MaWndBrowse com TEnchoice)


/*/
+-----------------------------------------------------------------------
| Funo | TAltera | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TAltera(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",aCampos[nX][6],aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)


- 534 -

ADVPL Completo


TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()

RETURN


Exemplo: Funo TExclui ( MaWndBrowse com TEnchoice)


/*/
+-----------------------------------------------------------------------
| Funo | TExclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TExclui(cAlias, nReg, nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)


- 535 -

ADVPL Completo



TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()

RETURN

Exemplo: Funo TValid ( MaWndBrowse com TEnchoice)


/*/
+-----------------------------------------------------------------------
| Funo | TValid | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TValid(cAlias,nReg,nOpc,aCampos)
LOCAL lRet
LOCAL nX
LOCAL nPosObrig := Len(aCampos[1])

For nX := 1 to Len(aCampos)
IF aCampos[nX,nPosObrig] == .T.
IF !(lRet := !Empty(&("_"+aCampos[nX,1])))
Help("TEnchoice",1,"HELP","OBRIGATORIO","Existem campos
obrigatorios nao preenchidos",1,0)
RETURN lRet // EXIT
ENDIF
ENDIF
Next nX

IF nOpc == 3
IF !(lRet := !((cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID))))
Help("TEnchoice",1,"HELP","INCLUSAO","Ja existe um registro com esta
chave",1,0)
ENDIF
ELSE
IF !(lRet := (cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID)))
Help("TEnchoice",1,"HELP","ALTERACAO","Nao existe um registro com
esta chave",1,0)
ENDIF
ENDIF

RETURN lRet



- 536 -

ADVPL Completo



Exemplo: Funo TGravar ( MaWndBrowse com TEnchoice)


/*/
+-----------------------------------------------------------------------
| Funo | TGravar | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TGravar(cAlias,nReg,nOpc,aCampos)
LOCAL nX

RecLock(cAlias,nOpc==3)
IF nOpc == 5
DbDelete()
ELSE
For nX := 1 to Len(aCampos)
(cAlias)->&(aCampos[nX][1]) := &("_"+aCampos[nX][1])
Next nX
ENDIF
Msunlock()

RETURN




















- 537 -

ADVPL Completo




38.2. DbTree( )

E Descrio: Cl asse Adv pl que per mi t e a cri ao de u m obj et o vi su al do t i po Tr e e.

E Propriedades:

bChange Ar ma z e na o cod e - bl ock e x ecut a do qu a ndo da muda na de
f oco e nt r e el e me nt os do Tr e e a t ual .


E Mtodos principais:

New
Cont r ut or da Cl asse DbTr e e .
Ret or na u ma nov a i nst nci a do Obj et o da Cl asse DbTr e e .
AddTree
At r a v s do mt odo AddTr e e , poss v el acr esce nt ar u m 'n'
na r v or e a t ual .
Uma v e z acr esce nt a do o n, as pr xi mas i ncl uses d e i t e ns
na par v or e ser o r e al i z adas nest e n, a t que o mesmo
sej a f ech a do a t r a v s do mt odo EndTr e e.
AddTreeItem
At r a v s d el e, pod e mos acr esce nt ar i t e ns n a r v or e a t u al ou
l ti mo n acr esce nt a do e m a b er t o.
EndTree
De v e ser ut ili z a do a ps t odos os el e me nt os e i t e ns ser e m
acr esce nt a dos a u m n da r v or e, a ber t o com o mt odo
AddTr e e( ) .


E Aparncia:







- 538 -

ADVPL Completo



Mtodo: New( )

E Sintaxe: DbTr e e( ) : Ne w ( [ nTop ] , [ nLef t ] , [ nBot t om ] , [ nRi ght ] , [ oWnd] ,
[ bch a nge ] , [ bRCl i ck ] , [ l Car go ] , [ l Di sa bl e ] )

E Parmetros:

nTop Coor de n a da v er t i cal superi or do Obj et o.
nLeft Coor de n a da hori z ont al esquer da do Obj et o.
nBottom Coor de n a da v er t i cal i nf eri or do Obj et o.
nRight Coor de n a da hori z ont al di r ei t a do Obj et o.
oWnd Ja nel a pai do Obj et o Tr e e
bchange
Code- Bl ock cont e ndo a ao a ser ed x ecut a da n a muda na
de f oco e nr t e os el e me nt os da r v or e.
bRClick
Code- Bl ock a ser e x ecut a do qua ndo pr essi on a do o bot o
di r ei t o do Mouse sobr e u m el e me nt o da r voe w.
lCargo
Se . T. , i ndi ca que os el e me nt os do Tr e e ut ili z ar o a
propri eda de CARGO, ca pa z de a r ma z e n ar u ma st ri ng
i de nti fi ca dor a , f or neci da n a mont a ge m par a ca d a el e me nt o
e i t e m da r vor e.
lDisable
Se . T. , cri a o obj et o do Tr e e desa bili t a do, n o p er mi t i ndo
f oco e n a v ega o no mesmo qn e ua ndo el e n o sej a
ha bili t a do.

E Retorno:

Objeto Ret or na u ma nov a i nst nci a do Obj et o da Cl asse DbTr e e .


Mtodo: AddTree( )

E Sintaxe: oObj : AddTr e e ( < cLa bel > , [ lPa r 02 ] , [ cResOpe n ] , [ cResCl ose ] ,
[ cBMPOpe n ] , [ cBMPCl ose ] , [ cCa r go ] )

E Parmetros:

cLabel T t ul o do " n " da r vor e a ser acr esce nt a do.
lPar02 ( r eser v a do)
cResOpen
Resource do RPO a ser utili z a do qu a ndo o n est i v er
a ber t o.
cResClose
Resource do RPO ( bi t ma p) a ser ut i li z a do qu a ndo o n
est i v er f ech a do.
cBMPOpen
Pa t h + I ma ge m bi t ma p a ser ut i li z a da qu a ndo o n[ o est i v er
a ber t o.

A esp eci fi cao d e i ma ge ns a pa r t i r dos par a me t ros
cBMPOpe n e cBMPCl ose a pe nas ser consi der a d a caso os
par met ros cRes Op e n e cResCl ose n o f or e m
esp eci fi ca dos.
cBMPClose
Pa t h + I ma ge m bi t ma p a ser ut i li z a da qu a ndo o n est i v er
f ech a do.

A esp eci fi cao d e i ma ge ns a pa r t i r dos par a me t ros
cBMPOpe n e cBMPCl ose a pe nas ser consi der a d a caso os

- 539 -

ADVPL Completo


par met ros cRes Op e n e cResCl ose n o f or e m
esp eci fi ca dos.
cCargo
St ri ng com v al or ni co, f or n eci do par a i de nt i fi car o n
a t u al . Pode ser r ecup er a do post eri or me nt e dur a nt e a
na v ega o.


E Retorno:

Nenhum -


Mtodo: AddTreeItem( )

E Sintaxe: oObj : AddTr e e I t e m ( < cLa b el > , [ cResource] , [ cBi t Ma p] , [ cCar go] )

E Parmetros:

cLabel T t ul o do i t e m da r v or e .
cResource
Resource ( BMP) do r eposi t ri o, a ser most r a do esqu er da
do t t ul o do i t e m.
cBitMap
Ar qui vo de i ma ge m ( bi t ma p) a ser most r a do esquer da do
t t ul o do i t e m.

Est e par m, et r o a pe n as ser consi der a do caso o par met ro
cResource n o f or i nf or ma do.
cCargo
a t r a v s d el e, pod e mos esp eci fi car u ma st ri ng de
i de nti fi cao par a est e i t e m n a r vor e.

E Retorno:

Nenhum -


Mtodo: EndTree( )

E Sintaxe: oObj : EndTr e e ( )

E Parmetros:

Nenhum

E Retorno:

Nenhum


- 540 -

ADVPL Completo



Exemplo:


#include "Protheus.ch"

/*/
+-----------------------------------------------------------------------
| Funo | TDBTree | Autor | MICROSIGA | Data | |
+-----------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo DbTree |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function TDBTree()
Local cBmp1 := "PMSEDT3"
Local cBmp2 := "PMSDOC"
Private cCadastro := "Meu Computador"
Private oDlg
Private oDBTree

DEFINE MSDIALOG oDlg TITLE cCadastro FROM 0,0 TO 240,500 PIXEL

oDBTree := dbTree():New(10,10,95,240,oDlg,{|| U_Proc(oDBTree:GetCargo())},;
,.T.)

oDBTree:AddTree("Pentium 4"+Space(24),.T.,cBmp1,cBmp1,,,"1.0")

oDBTree:AddTreeItem("Gabinete",cBmp2,,"1.1")
oDBTree:AddTreeItem("Monitor" ,cBmp2,,"1.2")
oDBTree:AddTreeItem("Teclado" ,cBmp2,,"1.3")
oDBTree:AddTreeItem("Mouse",cBmp2,,"1.4")
oDBTree:AddTreeItem("Som",cBmp2,,"1.5")
oDBTree:AddTree("Placa Me",.T.,cBmp1,cBmp1,,,"2.0")
oDBTree:AddTreeItem("Processador",cBmp2,,"2.1")
oDBTree:AddTreeItem("Memria" ,cBmp2,,"2.2")
oDBTree:AddTreeItem("Vdeo",cBmp2,,"2.3")
oDBTree:AddTreeItem("Fonte",cBmp2,,"2.4")

oDBTree:EndTree()

oDBTree:EndTree()

DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg CENTER

Return












- 541 -

ADVPL Completo



User Function Proc(cCargo)
Local cRet := ""

If cCargo == "1.1"
MsgInfo("Gabinete Torre com 4 baias - Preto, com unidade de leitura e+;
gravao de CD/DVD",cCadastro)
Elseif cCargo == "1.2"
MsgInfo("Monitor LCD 17' - LG",cCadastro)
Elseif cCargo == "1.3"
MsgInfo("Teclado multimdia com funes de internet e e-mail",cCadastro)
Elseif cCargo == "1.4"
MsgInfo("Mouse Optico sem fio",cCadastro)
Elseif cCargo == "1.5"
MsgInfo("2 Caixas de Som - 50W RMS Cada",cCadastro)
Elseif cCargo == "2.1"
MsgInfo("Processador Pentium 4 - 3.8 Ghz",cCadastro)
Elseif cCargo == "2.2"
MsgInfo("1 Pente de Memria de 1Gb - DDR 500",cCadastro)
Elseif cCargo == "2.3"
MsgInfo("Placa de Vdeo GeoForce 5000 com 256Mb",cCadastro)
Elseif cCargo == "2.4"
MsgInfo("Fonte de Alimentao de 500W",cCadastro)
Endif

Return
























- 542 -

ADVPL Completo


38.3. MsSelect( )

E Descrio: A cl asse MsSel ect cri a u m obj et o browse ( ou gri d) , com a pri mei r a col una
se ndo do t i po ma rcao.

E Propriedades:

oWnd
Obj et o pai da MsSel ect (MSDI ALOG, MSWI NDOW,
MSPANEL)
oBr owse
Obj et o br owse ( ou gri d) da MsSel ect , h er da do d a cl asse
TCBROWSE


E Mtodos principais:

New Cont r ut or da Cl asse MsSel ect .
Ret or na u ma nov a i nst nci a do Obj et o da Cl asse MsSel ect .


E Aparncia:







- 543 -

ADVPL Completo



Mtodo: New( )

E Sintaxe: MsSel ect ( ) : NEW ( < cAli as > , [ cCa mpo ] , [ cCpo ] , [ a Ca mpos ] , [
l I nv ] , [ cMar ] , [ a Cor d ] , [ cTopF un ] , [ cBot F un ] , [ oWnd ] , [
r eser v ed ] , [ a Col ors ] )
E Parmetros:

cAlias Ta bel a que ser ut ili z a da pel a MsSel ect
cCampo Ca mpo que ser ut ili z a do n a col un a de marca o
cCpo
Ca mpo da t a b el a i nf or ma da pel o par a met r o cAli as ou
f uno que ser e x ecut a da na a pr ese nt ao da col un a que
i ndi ca se a l i nha da MsSel ect est a ha bili t a da ou no
aCampos
Vet or com i nf or maes dos ca mpos pa r a cri ao das
col un as da MsSel ect . Se n o f or i nf or ma do, a MsSel ect i r
cri ar as col unas base a do no Di ci on ri o de Ca mpos ( SX3) da
t a bel a i nf or ma da no par a met r o cAl i as.
For ma t o :
1 - ca mpo ou bl oc d e cdi go com cont e do qu e ser
a pr ese nt a do na col un a pel a MsSel ect
2 - no ut ili z a do
3 - ca beal ho
4 - mca r a d e a pr ese nt ao ( pi ct ur e)
lInv I ndi ca se MsSel ect i r ut ili z ar marcao i nv er t i da
cMar
Marca que ser ut i li z a da pel a MsSel ect pa r a cont rol e do
ca mpo i nf or ma do p el o p ar a met ro cCa mpo. Par a ut ili z ar o
par a met ro cMa r, ut i li z e a f uno Get Mar k pa r a r et or n ar a
prxi ma marca .
aCord
Coor de n a das pa r a cri ao da MsSel ect .
For ma t o :
1 - Li nh a i ni ci al
2 - Col un a i ni ci al
3 - Li nh a fi n al
4 - Col un a fi nal
cTopFun
F uno que r et or n ar o cont e do i ni ci al que a MsSel ect
utili z ar par a a pr ese nt a r a pri mei r a li nh a da t a bel a , como
u m r a nge, j unt o com o par a met ro cBot F un.
O cont e do r et or n a do ser ut ili z a do par a f a z er o
posi ci on a me nt o da t a bel a i nf or ma da pel o pa r a met r o cAl i as,
base a do n a ch a v e d e ndi ce posi ci ona da par a a mesma .
cBotFun
F uno que r et or n ar o cont e do fi n al que a MsSel ect
utili z ar par a a pr ese nt a r a l t i ma li nh a da t a bel a , como u m
r a nge, j unt o com o par a met r o cTopF un.
O cont e do r et or n a do ser ut ili z a do par a o posi ci on a me nt o
fi n al da t a bel a i nf or ma da pel o par a met r o cAli as, base a do
na ch a v e de ndi ce posi ci on a da par a a mesma
oWnd
Obj et o pai da MsSel ect (MSDI ALOG, MSWI NDOW,
MSPANEL, et c. )
reserved Par a met r o r eser v a do
aColors
Vet or com r egr as par a a a pr ese nt ao da col un a de
l ege nda .
For ma t o :
1 - Ex pr ess o ADVPL co m r et or no l gi co que i ndi ca se a
cor ser ut ili z a da pel a col una
2 - cor da col un a :

- 544 -

ADVPL Completo


BR_AMARELO
BR_AZ UL
BR_BRANCO
BR_CI NZ A
BR_LARANJA
BR_MARROM
BR_PI NK
BR_PRET O
BR_VERDE
BR_VERMELHO

E Retorno:

Objeto Ret or n a u ma nov a i nst nci a do Obj et o da Cl asse MsSel ect .


Exemplo:


DEFINE MSDIALOG oDlg1 TITLE "Selecao para Transferencia" From 9,0 To 32,80;
OF oMainWnd
@1.4,.8 Say "Valor Total:"
@1.4, 7 Say oValor VAR nValor Picture "@E 999,999,999,999.99"
@1.9,.8 Say "Quantidade:"
@1.9, 9 Say oQtda VAR nQtdBem Picture "@E 99999" SIZE 50,10
@1.4,15 Say Iif(MVParBox01==1,;
"Somente grupos de ["+MVParBox02+"] ate ["+MVParBox03+"]","")
If cTipoDet == "D"
@12.4,01 Say "Qtde. a Detalhar"
@158,60 MSGET nQtde Picture "@E 999" SIZE 036, 10 OF oDlg PIXEL;
VALID nQtde > 0
ElseIf cTipoDet == "P"
@12.4,01 Say oLabel Var cLabel := "Tipo de Projeto"
oRad := TRadMenu():New(169,005,{"Industrial","Florestal"},;
bSetGet(nOpcRad),oDlg,,{|| AF250RAD(nOpcRad)},,,,,,100,12,,,,.T.)
@15.5,01 Say oLabel2 Var cLabel2 := "Detalhamento:"
oRad2 := TRadMenu():New(210,005,{"Manter","Alterar"},;
bSetGet(nOpcRad2),oDlg,,{|| AF250RAD2(nOpcRad2)},,,,,,;
100,12,,,,.T.)
@16.4,01 Say oLabel3 Var cLabel3 := "Percentual"
oGet := TGet():New(210,043,bSetGet(nPerc),oDlg,030,010,;
"@E 999.99",,,,,,,.T.)
@18.2,01 Say oLabel4 Var cLabel4 := "Qtde. Det."
oGet2 := TGet():New(235,040,bSetGet(nQtde),oDlg,030,010,;
"@E 999",,,,,,,.T.)
oGet:Hide()
oGet2:Hide()
oLabel3:Hide()
oLabel4:Hide()
EndIf
oMark := MsSelect():New("SN3","N3_OK","!N3_BAIXA",,@lInverte,;
@cMarca,{35,1,143,315})
oMark:bMark := {| | a250Display(cMarca,lInverte,oValor,oQtda)}

ACTIVATE MSDIALOG oDlg1
ON INIT EnchoiceBar(oDlg1,;
{|| nOpct:=1,iif(DeParaEnt(),oDlg1:End(),.f.)},{|| nOpct:=2,oDlg1:End()})


- 545 -

ADVPL Completo



39. Introduo relatrios grficos


39.1. TReport( )


39.1.1. Introduo


Finalidade

O Pr ot he us of er ece o r ecurso p ersonal i z ao par a al guns r el a t ri os de ca dast r os e
movi me nt aes do si st e ma . El e t e m como pri nci pai s f unci on ali da des a d efi ni o d e cor es,
est i l os, t a ma nho, f ont es, quebr as, msca r a das cl ul as par a ca da se o, cri ao d e f r mul as e
f unes ( Soma , Mdi a , et c. ) , possi bili da de de sal v ar as confi gur aes por usu ri o e cri ao d e
gr fi cos.
Com a f unci on ali da de de Rel a t ri os Person al i z v ei s, o usu ri o pod e modi fi car os r el a t ri os
pa dres, cri a ndo se u pr pri o l a yout .


Val e l e mbr ar que ne m t odos os r el a t ri os s o person al i z v ei s. Por e x e mpl o, r el a t ri os que
t e nh a m l a yout pr - defi ni dos por l ei e f or mul ri os ( bol et os, not as- fi scai s, et c) n o poder o ser
al t er a dos.
Os r el a t ri os p erson al i z a dos s o gr a v a dos com e xt e nso . PRT, di f er e nci a ndo- se dos r el a t ri os
pa dres qu e r eceb e m a e xt e nso . # # R.

- 546 -

ADVPL Completo




Descrio
O TRepor t u ma cl asse de i mpr esso que subst i t ui as f unes Set Pri nt , Set Def a ul t ,
Rpt St a t us e Ca b ec.
A cl asse TRepor t per mi t e que o usu ri o person ali z e as i nf or maes qu e ser o a pr ese nt a das no
r el a t ri o, al t er a ndo f ont e ( t i po, t a ma nho, et c) , cor, t i po de li nh as, ca beal ho, roda p , et c.
Est r ut ur a do compon e nt e TRepor t :
O r el a t ri o ( TRepor t ) cont m 1 ou mai s sees ( TRSect i on) ;
Uma se o ( TRSect i on) pode cont er 1 ou mai s sees ;
A seo ( TRSect i on) cont m cl ul as pr - d efi ni das e cl ul as sel eci on a das pel o usu ri o ;
A se o ( TRSect i on) t a mb m cont m as quebr as ( TRBr e a k) par a i mpr ess o d e
t ot ali z a dor es ( TRF unct i on) ;
Os t ot ali z a dor es s o i ncl u dos pel a se o qu e a ut oma t i ca me nt e i ncl ui no r el a t ri o
( TRepor t ) .
Pr-Requisitos
Par a ut i li z ar o TRepor t , v eri fi que se o se u r eposi t ri o est com o Rel e ase 4 do Pr ot he us- 8, ou
v ers o sup eri or .
A f un o TRepI nUse( ) v eri fi ca se a li b do TRepor t est li ber a da no r eposi t ri o e m uso. O
r et or no u ma v a ri v el l gi ca .
#include "protheus.ch"

User Function MyReport()
Local oReport

If TRepInUse() //verifica se a opo relatrios personalizveis est
disponvel
Pergunte("MTR025",.F.)

oReport := ReportDef()
oReport:PrintDialog()
EndIf
Return

Veri fi que t a mb m o p ar met ro MV_TRepor t . Par a ut ili z ar os r el a t ri os p erson ali z v ei s, o
par met ro MV_TREPORT ( t i po nu mri co) d e v e ser al t er a do no a mbi e nt e Confi gur a dor ,
conf or me u ma das opes qu e segue m:
1 = ut ili z a r el a t ri o no f or ma t o t r a di ci on al ( a nti go) ;
2 = ut ili z a r el a t ri o personali z v el ;
3 = per gunt a qu al r el a t ri o ser ut ili z a do : t r a dici on al ( a nti go) ou person ali z v el .



- 547 -

ADVPL Completo


39.1.2. Impresso do relatrio personalizvel

Ca da compone nt e da t el a de i mpr esso do TRepor t , de v e ser confi gur a do no progr a ma , pa r a
que o usu ri o t e nh a acesso s p erson ali z aes :



39.1.2.1. Parmetros de impresso

A cai x a de l i st a ge m a pr ese nt a da de v e ser ut i li z a da conf or me o mei o de sa da do r el a t ri o. Ve j a
a segui r.

Impresso

Arquivo

O r el a t ri o ser gr a v a do e m di sco com o no me a pr ese nt a do. Caso sej a escol hi da a op o
" Ser vi dor " el e ser gr a v a do no di r et ri o de t er mi n a do na se nh a do usu ri o, a t r a v s do
confi gur a dor , se ndo est e se mpr e no ser vi dor ( pa dr o \ SPO OL\ ) . Na escol h a da op o " Local "
ser a ber t a u ma j a nel a par a que sej a escol hi do o l ocal onde o r el a t ri o ser gr a v a do na
m qui n a do usu ri o.
O r el a t ri o ger a do a p ar t i r dest a opo pode ser i mpr esso ou e nvi a do por e - mai l a ps ser
a pr ese nt a do na t el a .

- 548 -

ADVPL Completo



Spool

Di r eci on a o r el a t ri o par a i mpr esso vi a confi gur ao do Wi ndows das i mpr essor as
i nst al a das.
E- mail

Envi a o r el a t ri o por e - mail ( I nt er n et ) . Pa r a i st o, de v e m ser confi gur a dos os segui nt es
par met ros no Ambi e nt e Confi gur a dor :
E MV_RELACNT
Defi ne a cont a d e e- mai l par a i de ntifi car a prov e ni nci a dos r el a t ri os.
Ex e mpl o : r el prot h e us @mi crosi ga . com. br
E MV_RELPSW
Defi ne a se nh a da cont a de e - mai l par a e nvi o dos r el a t ri os.
E MV_RELSERV
Defi ne o ser vi dor da cont a de e - mail par a o e nvi o do r el a t ri o.
Ex e mpl o : smt p. mi crosi ga . com. br

Qu a ndo sel eci on a da est a opo, de v e - se i nf or mar, no ca mpo e m dest a que n a fi gur a a bai xo, o
e- mail par a o qu al o r el a t ri o de v e ser r e met i do.



- 549 -

ADVPL Completo


O Pr ot he us Ser v er pode t a mb m ser e x ecut a do como u m ser vi dor Web, r esponde ndo a
r equi si es HTTP. No mome nt o dest as r equi si es, pod e e x ecut ar r ot i n as escri t as e m ADVPL
como pr ocessos i ndi vi du ai s, e nvi a ndo o r esul t a do das f unes como r et or no das r equi si es
par a o cli e nt e HTTP ( co mo por e x e mpl o, u m Br owser d e I nt er net ) . Qu al quer rot i n a escri t a e m
ADVPL que n o cont e n h a coma ndos de i nt erf ace pode ser e x ecut a d a a t r a v s d e r equi si es
HTTP. O Pr ot he us per mi t e a compil ao de ar qui vos HTML cont e ndo cdi go ADVPL e mbut i do.
So os ch a ma dos ar qui vos ADVPL ASP, par a a cri ao d e p gi n as di n mi cas.

E Programao TelNet

Tel Net par t e da ga ma de pr ot ocol os TCP/ I P que per mi t e a con e x o a u m comput a dor r e mot o
a t r a v s de u ma a pl i cao cl i e nt e dest e pr ot ocol o. O PROTHEUS Ser v er pod e e mul ar u m
t er mi n al Tel Net , a t r a v s da e x ecu o de r ot i n as escri t as e m ADVPL. Ou sej a , pode - se escr e v er
rot i n as ADVPL cuj a i nt erf ace fi nal ser u m t er mi n al Tel Net ou u m col et or de da dos mv el .


Papel

Tamanho do papel
Sel eci one o t a ma nho do pa pel e m que o r el a t ri o ser i mpr esso.
As especificaes de t a ma nho do pa pel so as do pa dr o do merca do,
conf or me o f or ma t o escol hi do, o Pr ot he us i r a j ust ar a i mpr esso.
Formato da impresso
Sel eci one o f or ma t o de i mpr ess o, cl i ca ndo nos bot es de op o Ret r a t o ou Pai sa ge m,
f a z e ndo assi m que o r el a t ri o sej a i mpr esso n a ori e nt ao v er t i cal ou hori z ont al ,
r espect i v a me nt e.

Configuraes

Ttulo

Caso quei r a al t er ar a opo sugeri da pel o si st e ma , di gi t e o ca b eal ho do r el a t ri o.

Ordem

Escol ha a or de m e m que as i nf or maes ser o a pr ese nt a das no r el a t ri o, cli ca ndo e m u ma das
cha v es di spon v ei s.

Layout

Per mi t e sel eci onar o model o de r el a t ri o pa r a i mpr ess o, medi da que novos l ei a ut es f or e m
gr a v a dos pa r a u m r el a t ri o, se us nomes ser o li st a dos nessa cai x a .

Preview

F a z a e xi bi o do r el a t ri o ger a do n a t el a , possi bili t a ndo, n a seq nci a , o se u e nvi o par a
i mpr essor a ou a ca ncel a me nt o da i mpr ess o.

- 550 -

ADVPL Completo



Executar em segundo plano

Essa opo per mi t e que o r el a t ri o sej a g er a do e e nvi a do par a a fi l a de i mpr ess o, e nqua nt o o
usu ri o pode e x ecut ar out r as t ar ef as no si st e ma .


39.1.3. Personalizao

poss v el confi gur ar - se as col un as do l a y - out do r el a t ri o, be m como os acu mul a dor es,
ca beal hos e l i nhas.
Est o di spon v ei s par a p erson al i z ao t a mb m a f ont e , t a ma nho, cor es, e et c.




39.1.3.1. Editando o layout do relatrio

O pri mei ro passo e nt e nder a nov a est r ut ur a dos r el a t ri os dese nv ol vi dos com a f er r a me nt a
TRepor t .
O Rel a t ri o possui Sees e Cl ul as. ch a ma da de Se o, ca d a u m dos gr upos d e
i nf or maes, e de Cl ul a , ca da u m dos ca mpos que ser o i mpr essos.

- 551 -

ADVPL Completo


Nova estrutura do relatrio TReport:



O r el a t ri o mai s si mpl es que se consegue e mi t i r e m TRepor t , u ma l i st a ge m.

39.1.4. Definindo a Funo ReportDef( )

A f uno Repor t Def ( ) r espons v el pel a const r uo do l a y - out do r el a t ri o ( oRepor t ) . el a
que m defi ne as col un as, os ca mpos e as i nf or maes qu e ser o i mpr essas.
Os coma ndos qu e f a r essa const r u o s o :

1. DEF I NE REPORT
2. DEF I NE SECTI ON
3. DEF I NE CELL


- 552 -

ADVPL Completo



DEFINE REPORT

A f uno DEF I NE REPORT r espons v el pel a cri ao do obj et o Repor t , ou sej a , o r el a t ri o.
I nt er n a me nt e, o DEF I NE REPORT i r e x ecut ar o mt odo TRepor t ( ) : Ne w( ) .
Est r ut ur a do compon e nt e TRepor t :

O r el a t ri o ( TRepor t ) cont m 1 ou mai s sees ( TRSect i on) ;
Uma se o ( TRSect i on) pode cont er 1 ou mai s sees ;
A seo ( TRSect i on) cont m cl ul as pr - d efi ni das e cl ul as sel eci ona das pel o usu ri o ;
A se o ( TRSect i on) t a mb m cont m as quebr as ( TRBr e a k) par a i mpr ess o d e
t ot ali z a dor es ( TRF unct i on) ;
Os t ot ali z a dor es s o i ncl u dos pel a se o qu e a ut oma t i ca me nt e i ncl ui no r el a t ri o
( TRepor t ) .


DEFINE SECTION

Ai nda no Repor t Def ( ) , so d efi ni das as sees ( oSect i on) do r el a t ri o.
As sees do r el a t ri o r epr ese nt a m os di f er e nt es gr upos d e i nf or maes e xi bi dos.
H a seo pri nci pal e as espec fi cas.
I nt er n a me nt e, o DEF I NE SECTI ON i r e x ecut a r o mt odo TRSect i on( ) : Ne w( ) .
A cl asse TRSect i on pode ser e nt e ndi da como u m l a yout do r el a t ri o, por cont er cl ul as,
quebr as e t ot al i z a dor es que dar o u m f or ma t o par a su a i mpr ess o.
Com a cl asse TRSect i on poss v el defi ni r u ma quer y , fil t ro ou ndi ce com fil t ro ( I ndRegua ) qu e
ser ut ili z a da por el a par a pr ocessa me nt o do r el a t ri o, a t r a v s do mt odo Pri nt e ut ili z a ndo as
cl ul as de posi ci on a me nt o ( TRPosi t i on) .


DEFINE CELL

Par a ca da se o, de v e m ser defi ni das as cl ul as. Cl ul a ca da i nfor mao que de v er ser
i mpr essa . Pod e ser u m ca mpo do ca dast r o, ou u m r esul t a do de u ma oper ao. u ma Cl ul a
de i mpr esso de u ma se o ( TRSect i on) de u m r el a t ri o que ut ili z a a cl asse TRepor t
I nt er n a me nt e, o DEF I NE CELL i r e x ecut ar o mt odo TRCel l ( ) : Ne w ( ) .

- 553 -

ADVPL Completo



MDULO 08: Aplicaes ADVPL para o ERP


40. Protheus e o TOPCONNECT / TOTVS DbAccess

O T OTVSDBAccess u ma f err a me nt a d e conect i vi da de a bases d e da dos, p er mi t i ndo que
a pli ca ti vos acesse m u ma a mpl a v ari eda de de ser vi dor es de ba nco de d a dos se m a necessi da de
de ger ao d e cdi gos espec fi cos pa r a ca da u ma del as.

Os ba ncos de da dos hoj e supor t a dos p el o T OTVSDBAccess s o :

E Mi crosof t S QL7 ou superi or
E Or acl e 8 ou superi or
E I BM Uni v ersal Da t a base ( DB2)
E I nf or mi x
E Sy base Ada pt i v e Ser v er
E Post gr es 7. 1. 1 ou sup eri or
E My SQL

O T OTVSDBAccess p er mi t e ger e nci ar as i nf or maes p er t i ne nt es ut ili z ao do ba nco de
da dos, r egi st r a ndo e a pr ese nt a do da dos, como :

E Da dos est a t sti cos d e f or ma gr fi ca co m r el ao :
E Qu a nt i da de de usuri os conect a dos
E Qu a nt i da de de t a bel as e m ut ili z ao
E I Os por segundo
E M xi mo de I Os por segu ndo
E Rel ao dos usu ri os conect a dos
E Checa g e m das quer ys g er a das p el os usu ri os conect a dos
E Quebr a de con e x o do usu ri o
E Me nsa g e ns d e ut ili z ao do T OTVSDBAccess
E Confi gur aes Ger ai s qua nt o a :
Ba nco d e da dos e m ut i li z ao
Rel ao de usu ri os e se nh as por ba nco d e da dos
Logi ns de usu ri o
Confi gur ao d e " Ta bl e Spaces " pa r a det er mi n ados ba ncos de da dos
Defi ni o dos pa r met r os d e cri ao d e t a b el as par a d et er mi na dos ba ncos de da dos
Vali dao de cone x o, checa ndo os par met r os de cone x o com o ba nco de da dos
Moni t or a me nt o de ndi ces g er a dos


- 554 -

ADVPL Completo



40.1. Caractersticas tcnicas com o uso do TOTVS DbAccess

Comportamento de Queries Colunas Calculadas

Aps e n vi ar ao Ba nco d e Da dos u ma sol i ci t ao de a b er t ur a d e Qu er y , e m caso d e sucesso n a
oper a o, o TOPConnect obt m do Ba nco d e Da dos a qu a nt i da de de col unas que ser o
r et or n a das, e qu al o t a ma nho e t i po e especi fi caes de ca da u ma das col un as, par a r et or nar
ao Pr ot he us u ma est r ut ur a defi ni da de i nf or maes, e o cursor a ber t o li do conf or me s o
sol i ci t a dos os pr xi mos r egi st ros ( DBSki p( ) no Adv pl ) , e a ca da r e qui si o, u ma li nh a do
cursor r et or na da , a t no h a v er mai s li nh as no cursor , a t i ngi ndo o fi n al do ar qui vo no Ad v pl (
EOF( ) ) .

Qu a ndo esp eci fi ca mos u ma col un a de r et or no na Quer y , que cor r esponde a i nf or maes li das
di r et a me nt e d e u ma ou mai s col un a ( s) da t a b el a , ca da col un a r et or n a da pel a Quer y cont m
u ma defi ni o de t i po e t a ma nho corr esponde nt e ao ca mpo d e ori ge m do da do de r et or no.
Dest e modo, se consi der a r mos, por e x e mpl o, a Quer y : SELECT A1_F I LI AL FROM SA1990 ,
onde o ca mpo A1_F I LI AL na t a bel a SA1990 u m ca mpo do ti po v arch ar , com 2 byt es de
t a ma nho, qu a ndo o cursor f or a ber t o no Ba nco d e Da dos, o T OPCon nect i r obt er do ba nco
que o r esul t - set ger a do possui a pe n as u ma col una , e est a col un a do t i po v arch ar , com no
m xi mo 2 byt es d e t a ma nho.

Os Ba ncos de Da dos n o a pe n as per mi t e m r ecuper a r r et or nos di r et a me nt e l i dos de u ma ou
mai s t a bel as, mas t a mb m poss v el a bri r u m cursor ond e u ma ou mai s col un as cont e nh a m
u m r esul t a do cal cul a do, ut ili z a ndo- se de e x pr esses e / ou f unes n a t i v as do Ba nco de Da dos.
Par a est es t i pos d e r et or no, ca da ba nco de da dos pod e a pr ese nt ar compor t a me nt os
di f er e nci a dos a o d escr e v er o t a ma nho d e r et or no da ( s) col una ( s) .

Est e compor t a me nt o pode v ari ar de acor do co m o Ba nco de Da dos, a e x pr esso e / ou f unes
utili z a das par a ger ar a col un a de r et or no, e i ncl usi v e pode m t er di f er e nas e nt r e v erses e
Buil ds do mesmo Ba nco de Da dos e / ou par a met ri z aes espec fi cas do Ba nco d e Da dos e / ou
da a pli cao Cl i e nt / ODBC / API ut ili z a da par a acesso ao Ba nco.

Par a il ust r ar mel hor est as di f er e nas, v ej a mos a bai xo os r esul t a dos obt i dos com queri es, e m
ba ncos di st i nt os, ond e f oi cri a da u ma t a bel a com a mes ma est r ut ur a , e 10 li nh as de da dos, e
nel a f or a m e x ecut a das al gu mas quer ys, ond e t e mos como r et or no u ma col un a cal cul a da . A
t a bel a possui os ca mpos CPOC, t i po Car act er e, t a ma nho 10 byt es, nu mer a dos de 000000000 1
a 0000000010 e u m ca mpo nu mri co CPON, ali me nt a do com v al or es posi t i vos. Par a ca da
Quer y, most r a mos o v al or r et or n a do a o Adv pl , cont e ndo o t i po de da do r et or na do e o t a ma nho
(l e n) da col un a , no f or ma t o . ( Ti po ( t a ma nho ) ) .

Query: SELECT MI N( CPOC) CPOTESTE FROM TESTRET

E Retorno: Todos os ba ncos r et or n ar a m u ma col una com t a ma nho de 1 0 byt es.

E Bancos:

Database Tipo Tamanho Contedo
MSSQL 2000 Car act er 10 0000000001
INFORMIX Car act er 10 0000000001
ORACLE Car act er 10 0000000001
MYSQL Car act er 10 0000000001
DB2 Car act er 10 0000000001



- 555 -

ADVPL Completo



Query: SELECT MI N( CPOC) CPOTESTE FROM TESTRET WHERE CPON < 0

E Retorno: Todos os ba ncos r et or n ar a m u ma col una v a zi a .

E Bancos:

Database Tipo Tamanho Contedo
MSSQL 2000 Car act er 10 Va zi o
POSTGRES Caracter 0 Vazio
INFORMIX Car act er 10 Va zi o
ORACLE Car act er 10 Va zi o
MYSQL Car act er 10 Va zi o
DB2 Car act er 10 Va zi o


Query: SELECT LEF T( CPOC, 5) CPOTESTE FROM TESTRET

E Retorno: Todos os ba ncos que supor t a m a f uno LEFT( ) r et or n a r a m u ma col un a
de i nf or maes, ond e os 5 pri mei ros byt es er a m '00000'.

E Observaes: Os ba ncos r et or n ar a m que a col un a t e m 5 byt es de t a ma nho.
Por m, o BAnco DB2 i nf or ma que a col un a t m t a ma nho de 4000 Byt es.
Est e mesmo r et or no f oi obt i do no DB2 qu a ndo ut ili z a das f unes
RI GHT( ) , REPLACE( ) e REPEAT( ) , no ba nco DB2, e par a o BAnco
Post gr es, f oi r et or n a do o t a ma nho d e 2000 b yt es pa r a est as f unes.


E Bancos:

Database Tipo Tamanho Contedo
MSSQL 2000 Car act er 5 00000
MYSQL Car act er 5 00000
DB2 Caracter 4000 00000


Query: SELECT SUBSTRI NG( CPOC, 2, 4) CPOTESTE FROM TESTRET

E Retorno: Todos os ba ncos r et or n ar a m u ma col un a de t a ma nho 4 byt es, e xcet o o
POST GRES, que r et or nou t a ma nho de 2000 byt es.

E Bancos:

Database Tipo Tamanho Contedo
MSSQL 2000 Car act er 4 0000
POSTGRES Car act er 2000 0000
INFORMIX Car act er 4 0000
ORACLE Car act er 4 0000
MYSQL Car act er 4 0000
DB2 Car act er 4 0000


- 556 -

ADVPL Completo




De vi do a est as di f er e nas de compor t a me nt o, de v e mos t oma r al guns cui da dos ao dese nv ol v er
a pli caes que ut ili z a m col unas cal cul a das e m queri es. Nest es casos, de v e ser ut ili z a da u ma
f uno do ba nco d e da dos, par a assegur ar que o ba nco d e da dos r et or ne o t a ma nho d e col un a
a dequ a do a o T OPConnect / Tot vsDBAccess.

Por e x e mpl o, v ej a mos a quer y a bai xo :


SELECT REPLACE(CPOC,'0','_') AS CPOTESTE FROM TESTRET



Se j de conheci me nt o do pr ogr a ma dor que o ca mpo da base de da dos CPOC dest a t a bel a
t e m 10 byt es de t a ma n ho, de v e mos f a z er u m cast dest e r et or no, pa r a ch ar ou v arch ar, com
t a ma nho de 10 byt es. Dessa f or ma , o ba nco r et or n a o t a ma nho esp er a do da col una par a o
TOPConnect qu a ndo da a ber t ur a da quer y. I st o e vi t a que espaos d esnecessri os t r af egue m
pel a r ed e par a a t e nd er r equi si o, e que est e v al or e xced e nt e sej a usa do pa r a al i me nt ar
u ma v ari v el do Adv pl . Vej a mos como usar est e r ecurso na quer y aci ma descri t a , ut ili z a ndo
u ma si nt a x e acei t a pel a mai ori a dos Ba ncos de Da dos homol oga dos :


SELECT CAST( REPLACE(CPOC,'0','_') AS VARCHAR(10)) CPOTESTE FROM TESTRET


Val e a pe n a sali e nt ar que, ca da ba nco d e da dos possui , com pequ e nas v ari aes, u ma si nt a x e
par a per mi t i r o CAST d e u m r et or no. Par a mai or es det al hes, a docu me nt ao do ba nco d e v e
ser consul t a da .

Comportamento diferenciado com Bandos de Dados PostGres

O Ba nco de Da dos Post gr es possue m u m co mpor t a me nt o di f er e nci a do e nt r e os Buil ds do
Ser v er do Ba nco, e possui u ma par a met ri z a o n a confi gur ao do ODBC que pod e i nt erf eri r
n a ma nei r a como os a t ri but os das col un as de r e t or no de u ma quer y so r et or n a dos.

E m v erses i nf eri or es o Post gr es 8. x , as di f er e nas de compor t a me nt o e m r el ao os de mai s
Ba ncos d e Da dos possue m u m di f er e nci al mui t o si gni fi ca ti vo, e m pr a t i ca me nt e t odas as
f unes d e r et or no cal cul a do. Par a est es casos, e m se t r a t a ndo de Post gr es v erses i nf eri or es
a 8. x, a pr eci so d e r e t or no da col un a corr esponde a o t a ma nho m xi mo de r et or no do t i po
Var Char. ( Est e t a ma nho m xi mo pod e ser confi gur a do n a con e x o ODBC do Post gr e Sql , e o
v al or def a ul t 65536 byt es. )

Na f uno Subst ri ng( ) , mesmo que est ej a esp eci fi ca do no 3. par met ro da f uno, a
qu a nti da de fi n al li mi t a da de Byt es, o Ba nco de Da dos d escr e v e est a col un a de r et or no como
se ndo u m Var Ch a r ( ) co m a pr eci so do mai or v al or VARCHAR( ) a ser r et or n a do p el o cl i e nt . Na
f uno Ma x( ) , qu a ndo esp eci fi ca do u m ca mpo da base do t i po Ch ar ou Varch a r, t e mos u m
compor t a me nt o se mel ha nt e.

Qu a ndo f or a m homol oga dos os Ba ncos Post gr es par a uso com o ERP Mi crosi ga e TOPConnect
4, pr a t i ca me nt e n o er a m ut ili z a das queri es com col un as cal cul a das nas a pli caes Adv pl , e
est e compor t a me nt o dif er e nci a do n o f oi percebi do. Conf or me as r ot i n as f or a m e vol ui ndo,
busca ndo mai s p erf or ma nce a t r a v s do uso de Queri es, t or nou- se p ercept v el est as di f er e nas
oper aci on ai s.


- 557 -

ADVPL Completo



Al gu mas dest as di f er e nas op er aci on ai s f or a m assi mil a das pel as f unes do ERP, por e x e mpl o
a Cha nge Quer y, que e m v erso a t u ali z a da ( ** Prot he us 8 e P10, f ont e a pli b070. pr w com da t a
i gual ou superi or a 08 / 03 / 2008) , a pli ca m o CAST( ) a ut oma t i ca me nt e par a SELECT
MAX( CAMPO) , qu a ndo o ba nco Post gr es, e o ca mpo sel eci ona do f or u m ca mpo da base d e
da dos, pr ese nt e no Di ci onri o de Ca mpos ( SX3 ) .

Par a t odos os ef ei t os, par a ut ili z ao com as v erses homol oga das de Post gr es i nf eri or es a
8. x, n ecessri o al t er a r a confi gur ao d e ODBC do Post gr es, pa r a l i mi t ar o r et or no do t i po
Var Ch ar par a 2000 Byt es, poi s o r et or no do v al or def a ul t ( 6 5536 byt es ) n o supor t a do pel o
TOPConnect / TOTVSDBAccess. Al t er a mos est a confi gur ao no a r qui vo . odbc. i ni no li nux, e / ou
no ar qui vo de confi gur ao do ODBC do Post gr es ut ili z a do, i nseri ndo n a se o da cone x o /
i de nti fi cao do ba nco a cha v e a bai xo :


MaxLongVarcharSize=2000


At u al me nt e est e m processo de homol ogao as v erses mai s r ece nt es ( 8. x) do ba nco
Posgr es. Qua ndo homol oga do, a i nf or ma o est ar di sponi v el n a DEM, e m Pri nci pal - > Gui a de
Ref er nci a - > Gui a de Pl a t af or mas Homol oga das - > Ba ncos de Da dos Rel aci on al X S. O.

Conceito de ndices Permanentes e Diferenas das RDDs

Na RDD T OPC ONN, n o t e mos o concei t o de cri ao d e ndi ce t e mpor ri o, a pe n as ndi ce
per ma n e nt e. Um ndi ce per ma n e nt e cri a do fi si ca me nt e no Ba nco de Da dos r el aci onal
utili z a do, a t r a v s do T OPConnect / DbAccess, onde de v e mos especi ficar u m ou mai s ca mpos
par a compor a ch a v e / e x pr ess o de ndi ce.

Qu a ndo ut ili z a mos Cod e Base / DBF, pod e mos especi fi car como ca mpos de cha v e d e ndi ce o
r et or no de f unes, co mo por e x e mpl o STR( ) , DTOS( ) , SUBSTR( ) , e nt r e out r as supor t a das d e
modo n a t i vo p el a a pli cao prov edor a de acesso, no caso ADS Local e / ou ADS Ser v er.

Qu a ndo usa mos u m Ba nco Rel aci on al SGDB a t r a v s do T OPConnect / DbAccess, de v e mos
esp eci fi car u ma e x pr esso d e ch a v e que se mpr e r et or n e u m v al or Car act er e, e as ni cas
f unes p er mi t i das par a a dequ aes de t i po de da do no Adv pl par a est as e x pr esses de ndi ce
so : DT OS( ) e STR( ) .

Funcionamento Interno

A e x pr ess o ut ili z a da par a a cri ao de u m ndi ce per ma n e nt e e m Adv pl , por e x e mpl o : CPOC
+ DTOS( CPOD) + STR( CPON, 10 ) , qu a ndo ut ili z a mos o RDD T OPC ONN, ser a j ust a da pa r a o
Ba nco de Da dos r el aci on al utili z a do par a u ma e x pr ess o cont e ndo a pe n as a li st a de ca mpos
desej a da , n a sequ nci a e m que f oi especi fi ca da , e as f unes DT OS( ) e STR( ) n ao so
passa das a o ba nco de da dos, poi s n o e xi st e a necessi da de de con v ers o de da dos pa r a o
Ba nco.

Um ca mpo do t i po ' D' Da t a t r a t a do p el o TOPConnect e gr a v a do na t a bel a e m quest o como
u m ca mpo ' C' Car act er e , de 10 byt es, no f or ma t o AAAAMMDD, e os n mer os so gr a v a dos e m
u m ca mpo DOUBLE*.


- 558 -

ADVPL Completo



Quebra de Compatibilidade com CodeBase / DBF

Os Ba ncos r el aci on ai s, e m su a gr a nde mai ori a , se n o t odos, supor t a m a pe n as a cri ao de
ndi ces onde sej a m especi fi ca dos ca mpos f si cos da base de da dos. No s o supor t a das
f unes d e conv ers o ou t r a nsf or ma o de da dos na cri ao d e ndices, como por e x e mpl o
subst ri ng( ) , l ef t ( ) , e nt r e out r as. E mbor a al guns ba ncos per mi t a m a cri ao de col unas
cal cul a das, as mesmas so ' vi r t uai s', i st o , n o e xi st e m fi si ca me nt e na t a bel a , e t a mb m n o
p er mi t i do o uso d e col unas vi r t u ai s par a a cri ao d e ndi ces.

Ent e nde mos que o RDD Code Base / DBF, onde ori gi n al me nt e f oi dese n vol vi do o ERP, nos da v a
cer t a fl e xi bili da de ao per mi t i r oper aes como est as, por m a u m cust o de processa me nt o
mai s al t o, poi s par a ca da i nsero ou al t er ao, o RDD t e m que e x ecut ar f unes d e con v ersa o
e conca t e nao de st ri ngs par a a t uali z ao dos ndi ces que usa m est e r ecurso.

Ma nt er o supor t e a t odos os i ndi ces per ma ne nt es, cri a dos a par t i r de r esul t a dos de
e x pr esses, n as v erses a nt eri or es do ERP, t er a mos u m cust o mui t o al t o de compl e xi da de,
perf or ma nce e dupl i ci da de de i nf or maes nas t a bel as. Seri a necessri o cri ar col un as f si cas
n as t a bel as, t r a nspar e nt es a o usu ari o, pa r a ma nt er copi as e m dupl i ci dade d e pa r t es d e col un as
a gr upa das, com ga t il hos do ba nco d e da dos di spar a dos i nt er n a me nt e e m oper aes de i nser t e
upda t e, u m meca ni smo r el a ti v a me nt e compl e x o de se ma nt er, i nst v el par a dar ma nut e n o,
e cust oso e m p erf or ma nce pa r a o Ba nco d e Da dos.

Par t i ndo da pr e mi ssa que, se u ma d et er mi n a da i nf or mao de v e ser i nde x a da par a busca , el a
de v e ser u ma i nf or mao que ocupa e xcl usi v a me nt e u m ca mpo f si co da base d e da dos, s o
e vi t a das as oper aes const a nt es d e conca t e n ao e d esme mbr a me nt o de u ma i nf or ma o
a gr upa da , col oca ndo ca da par t e da i nf or mao e m se u d e vi do espao ( ca mpo )
defi ni do, mesmo com o i mpact o ger a do pa r a al t er ar as a pl i caes que usa v a m est es t i pos
de ndi ces, os ga nhos obt i dos e m or ga ni z ao e perf or ma nce f or a m mui t o si gni fi ca t i vos.

- 559 -

ADVPL Completo



Lista dos cdigos de erro do TOPConnect / DbAccess

Qu a nt o ut ili z a do o TOPConnect / DbAccess pa r a cone x o e oper aes com Ba ncos d e Da dos,
as ocorr nci as de err o so r epor t a das a o Prot he us i nf or ma ndo e m conj unt o com o er r o u m
n mero me nor que z er o, cor r espond e ndo a u m t i po de err o.

Par a a mai ori a das ocor r nci as, r el aci on a das ao Ba nco d e Da dos, de v e - se ol h ar o l og de er r o
gr a v a do p el o TOPConn ect / DbAccess ( ar qui vo t opconn. l og ) par a obt er mai or es det al hes
sobr e a ocor r nci a .

TC_NO_ERROR 0 COMM_ INITPGM_ERROR - 81
NO_ROUTER_ INSTALLED - 1 COMM_PARAM_ERROR - 86
NO_CONNECTION - 2 COMM_PROGRAM_ERROR - 88
NO_USER_SECURITY - 4 COMM_ INSMEM_ERROR - 90
PASSTHRU_FAILED - 5 INVALID_BUILD - 99
NO_MORE_CONNECTIONS - 6 INVALID_TOPAPI - 100
INVALID_TOP_KEY - 8
INVALID_ENVIRONMENT - 9
INVALID_FILE - 10
UNKNOWN_FILE - 11
EXCLUSIVE_REQUIRED - 11
INVALID_OPERATION - 13
INVALID_KEY_NUM - 14
FILE_ IN_USE - 15
TOO_MANY_FILES - 16
INVALID_NUMRECS - 17
CALL_FAILED - 18
COMMAND_FAILED - 19
OVERRIDE_FAILED - 20
QUERY_FAILED - 21
CREATION_FAILED - 22
OPEN_FAILED - 23
NOT_OPENED - 24
NO_RECORD_FOUND - 25
END_OF_RECORDS - 26
NO_ WRITE_POSIBLE - 27
NO_RECORD_EQUAL - 28
UPDATE_FAILED - 29
DELETE_FAILED - 30
RECORD_LOCKED - 31
FILE_LOCKED - 32
NO_AUTORIZATION - 33
TOO_MANY_USERS - 34
NO_DB_CONNECTION - 35
NO_CONN_ALLOWED - 36
INTEGRITY_FAILURE - 37
BUFFER_OVERFLOW - 40
INVALID_PARAMETERS - 41
NO_AUDIT_CONNECTION - 50
COMM_DOSMEM_ERROR - 58
COMM_PARTNER_ERROR - 67
COMM_SNDSTAT_ERROR - 76
COMM_RCVSTAT_ERROR - 76

- 560 -

ADVPL Completo



40.2. Funes ADVPL para TOPCONNECT / TOTVS DbAccess

Nest e t pi co ser o descri t as as f unes da l i ngua ge m ADVPL qu e per mi t e m a i nt er ao
com a a pli cao TopCon nect / DbAccess.

Lista das funes de interao com a aplicao TopConnect / DbAccess:

TCCANOPEN
TCCONTYPE
TCDELFILE
TCGENQRY
TCGETDB
TCLINK
TCQUERY
TCQUIT
TCSETCONN
TCSETFIELD
TCSPEXEC
TCSPEXIST
TCSQLERROR
TCSQLEXEC
TCSRVTYPE
TCUNLINK
TCCHKOBJ
TCEXEERROR
TCPGMEXE
TCSYSEXE

Lista das funes acessrias utilizadas nos fontes como facilitadoras:

CHANGEQUERY
RETFULLNAME
RETSQLCOND
RETSQLNAME
RETSQLTABLE
SQLCOPY
SQLORDER
SQLTOTRB

- 561 -

ADVPL Completo



Funes de interao com o TopConnect / DbAccess

TCCANOPEN ( )

Veri fi ca a e xi st nci a de t a bel as e ndi ces no ser vi dor.

E Sintaxe: TCCanOpen(cTable , cIndice)

E Parmetros:

cTable Nome compl et o da t a b el a no ba nco de da dos.
cIndice Opci onal , i ndi ca o nome compl et o do ndi ce r ef er e nt e a t a b el a especi fi cada .

E Retorno:

Lgico I ndi ca a e xi st nci a da t a bel a e / ou do ndi ce especi fi ca do.


E Exemplo:


//Verifica a existncia da tabela customer
IF !TCCanOpen("CUSTOMER")
dbCreate("CUSTOMER", aStru, "TOPCONN")
ENDIF
USE CUSTOMER SHARED NEW VIA "TOPCONN"

//Verifica a existncia do ndice
IF !TCCanOpen("CUSTOMER","CUSTCOD")
INDEX ON CODIGO TO CUSTCOD
ELSE
SET INDEX TO CUSTCOD
ENDIF



TCCONTYPE( )

Esp eci fi ca o pr ot ocol o d e comuni cao a ser ut i li z a do pel o TOPConnect .

E Sintaxe: TCConType(cType)

E Parmetros:

cType Ti po de pr ot ocol o d e co muni cao a ser ut ili z a do pel o TopConnect , aonde :

TCPI P: Ut i li z a o prot ocol o TCP/ I P.
NPI PE : Ut ili z a o prot ocol o Na med Pi pes.
APPC : Ut ili z a o prot ocol o APPC.
BRI DGE : Ut ili z a o utili t ri o TOPBri gde par a co muni cao d e est aes DOS
NPI PE com ser vi dor AS/ 400 ut ili z a ndo TCP/ I P.




- 562 -

ADVPL Completo


E Retorno:

Nenhum .


E Exemplo:


#INCLUDE "TOPCONN.CH"
//Especifica conexo TCP/IP
TCConType("TCPIP")

//Conecta-se ao ambiente SIGAADV no Microsoft SQL-Server
TCLink("MSSQL/SIGAADV")



TCDELFILE( )

Excl ui u ma t a bel a no ser vi dor.

E Sintaxe: TCDelFile(cTable)

E Parmetros:

cTable Nome compl et o da t a b el a a ser e xcl u da .

E Retorno:

Nenhum .


E Exemplo:


TCDel Fil e( " CUSTOMER" )











- 563 -

ADVPL Completo


TCGENQRY( )

Per mi t e a e x ecu o de u ma quer y d e sel eo no ba nco d e da dos e r et or na u m r ecor dset com o
r esul t a do.

E Sintaxe: TCGENQRY(xParam1,xParam2,cQuery)

E Parmetros:

xParam1 Par met r o r eser v a do.
xParam2 Par met r o r eser v a do.
cQuery Quer y de sel e o com si nt a x e no pa dr o SQL ANSI a ser e x ecut a da no ba nco
de da dos.

E Retorno:

RecordSet Recor dSet cont e ndo o r esul t a do da e x ecuo d a quer y de sel eo.




Par a qu e os da dos cont i dos no Recor dSet r et or n a do pel a f uno TCGe n Qr y( )
sej a m ut ili z a dos pel a apli cao ADVPL n ecessri o di sponi bili z -l os e m u ma
Wor k Ar e a .

Dest a f or ma a f un o TCGe n Qr y( ) de v er ser utili z a da e m conj unt o com a
f uno DbUse Ar e a ( ) , p ar a que a mesma di sponi bili z e o Recor dSet co mo u ma
r e a de t r a bal ho do ADVPL.



E Exemplo:


cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8")
cQuery += " WHERE "
cQuery += "CV8_FILIAL = '"+MV_PAR01+"' AND "
cQuery += "D_E_L_E_T_ = '' "
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)


TCGETDB( )

Ret or n a o t i po de Ba nco de Da dos cor r e nt e.

E Sintaxe: TCGETDB( )

E Parmetros:

Nenhum .




- 564 -

ADVPL Completo


E Retorno:

Caracter Descri o r ef er e nt e a o t i po do ba nco d e da dos cor r e nt e, a onde :

ANYWHERE - Sy base S QL Any wher e
ANYSYBASE - Sy base S QL Any wher e ( E mul a ndo Sy base SQL- Ser v er )
DB2 - I BM Uni v ersal Da t a base
I NF ORMI X I nf or mi x
MSSQL - Mi crosof t SQL- Ser v er 6. 5
MSSQL7 - Mi crosof t SQL- Ser v er 7. 0 ou sup eri or
ORACLE - Or acl e
POST GRES - Post Gr es
SYBASE - Sy base S QL- Ser v er

Not a : O r et or no da f u no pod e v ari ar de acor do com a homol ogao de
novos da t a bases par a ut ili z ao com a f err r a me nt a TopConnect / DbAccess.

E Exemplo:


cDataBase := TCGETDB() // MSSQL7



TCLINK( )

Abr e u ma cone x o com o Ser vi dor T OPConnect .

E Sintaxe: TCLink(cConectString,cServer)

E Parmetros:

cConectString St ri ng compost a conf or me a r egr a :
Par a TOPConnect NT : Nome do Ba nco d e Da dos / Nome do Ambi e nt e

Par a TOPConnect / 400 : Nome do Ambi e nt e

cServer Nome do ser vi dor conf or me a r egr a :
Par a con e x es Na medPi pe, APPC e Bri gde : O nome do ser vi dor
TOPConnect .

Par a con e x es TCP/ I P : O e nder eo I P do ser vi dor TOPConn ect


E Observaes:

Par a o T OPConnect NT acessa ndo Or acl e, u m a mbi e nt e o nome do Al i as cri a do
com o ut i li t ri o SQL- Net .

Par a o T OPConnect NT acessa ndo os de mai s SGDB's u m a mbi e nt e u m Syst e m
DSN cri a do a t r a v s do ODBC Da t a Source Ad mi ni st r a t or.

Par a o T OPConnect AS/ 400 u m a mbi e nt e u ma Li br ar y cri a da a t r a v s do coma ndo
CRTTOPENV do T OPCon nect .


- 565 -

ADVPL Completo


Par a i nf or maes sobr e a cri ao de a mbi e nt es consul t e o ma nu al de i nst al ao do
TOPConnect .

A li st a dos t i pos de ba ncos de da dos supor t a dos pel a a pli cao TopConnect /
DbAccess a mesma d as possi bili da des de r et or no da f un o TCGETDB conf or me
a bai xo :

ANYWHERE - Sy base SQL Any wh er e
ANYSYBASE - Sy base SQL Any wh er e ( E mul a ndo Sy base SQL- Ser v er )
DB2 - I BM Uni v ersal Da t a base
I NF ORMI X I nf or mi x
MSSQL - Mi crosof t S QL- Ser v er 6. 5
MSSQL7 - Mi crosof t S QL- Ser v er 7. 0 ou superi or
ORACLE - Or acl e
POST GRES - Post Gr es
SYBASE - Sy base SQL- Ser v er

E Retorno:

Numrico A f uno TCLi nk r et or n a ou o n mero da cone x o ou u m v al or n ega t i vo
cont e ndo o cdi go do er ro.

A r el aes dos cdi gos de er ros ocor ri dos dur a nt e u ma t e nt a t i v a de cone x o
est di spon v el no t pi co 8. 1. dest e ma t eri al .

E Exemplo:


//Conecta-se ao Microsoft SQL-Server no ambiente SIGAADV
//Protocolo Named Pipes
TCConType("NPIPE")

nCon := TCLink("MSSQL/SIGAADV","TOPSRV")
if nCon < 0 //Conexes com retorno < 0 significam erro
Alert("Falha de conexo com o TOPConnect")
endif
//Protocolo TCP/IP
TCConType("TCPIP")
//Conecta-se ao Oracle no ambiente TESTES
nCon := TCLink("ORACLE/TESTES",172.16.1.2)

//Protocolo APPC
//Conecta-se ao AS/400 no ambiente PRODUCAO
nCon := TCLink("PRODUCAO","TOP400")





- 566 -

ADVPL Completo



TCQUERY( )

Ex ecut a u ma Quer y no ser vi dor e col oca se u r e t or no e m u ma Wor k Ar e a .



Dur a nt e o processo de compil ao, a si nt a x e TCQUERY( ) subst i t u da pel as
e x pr ess o :

dbUse Ar e a ( . T. , " T OPC ONN" , TcGe n Qr y( , , c Quer y) , ALI AS , . T. , . F . )

Est a subst i t ui o r e ali z a da conf or me as d efi nies do i ncl ude TOPC ONN. CH.

Dest a f or ma r ecome nd v el a ut ili z ao di r et a da si nt a x e DbUse Ar e a ( ) +
TcGe Qr y( ) .


E Sintaxe: TCQUERY cSQLExpr ALIAS cAlias NEW VIA "TOPCONN"

E Parmetros:

cSQLExpr Ex pr ess o SQL a ser e n vi a da ao ser vi dor .
ALIAS cAlias Esp eci fi ca u m nome pa r a a Wor k Ar e a a ser a ber t a .
NEW Abr e a t a bel a < cTa bl e > n a prxi ma Wor k Ar e a di spon v el . Se est a
cl a usul a n o f or esp eci fica da , < cTa bl e > ser n a Wor k Ar e a corr e nt e.
VIA "TOPCONN" Est e par met r o i ndi ca ao ADVPL qu e est a Wor k Ar e a ser ger e nci a da
pel o TOPconnect .


E Observaes:

A Wor k Ar e a cri a da com o coma ndo TC QUERY READ- ONLY, por t a nt o n o
per mi t i do o uso de APPEND's ou REPLACE's.

O T OPConnect t e m a p e n as u m cursor pa r a a Quer y e x ecut a da por t a ndo a p e n as os
segui nt es coma ndos s o supor t a dos e m u ma Wor k Ar e a cri a da com TCQUERY:

o GO TOP - Db GoTop( )
o GO BOTT OM - Db GoBot t om( )
o SKI P - DbSki p( )
o Eof ( )
o Bof ( )

Ao e x ecut ar u ma Qu er y que r et or ne u m ou mais v al or es cal cul a dos, o nome dos
ca mpos da Wor k Ar e a ser o COLUMN1, C OLUMN2. . . C OLUMNn.

E Retorno:

Nenhum .


- 567 -

ADVPL Completo



E Exemplo:


//Abre a tabela de Clientes em uma nova WorkArea

cQuery := "SELECT a.codigo, b.nome FROM CLIENTES a, CLIDATA b "
cQuery += "WHERE a.CODIGO = b.CODIGO ORDER BY CODIGO,NOME "

TCQUERY cQuery ALIAS CLIENTES NEW VIA "TOPCONN"
dbGoTop()

While !Eof()
ALERT(CODIGO+"|"+NOME)
dbSkip()
end

cQuery := 'SELECT SUM(VALOR),SUM(SALDO) FROM CUSTOMER'
TCQUERY cQuery NEW VIA "TOPCONN"
ALERT(CValToChar(COLUMN1)+"|"+CValToChar(COLUMN2))
// COLUMN1 - Somatoria dos valores
// COLUMN2 - Somatoria dos saldos


TCQUIT( )

Encer r a t odas as cone x es com o TOPConnect .

E Sintaxe: TCQuit( )

E Parmetros:

Nenhum .

E Retorno:

Nenhum .


TCSETCONN( )

Sel eci on a a con e x o a t i v a .

E Sintaxe: TCSETCONN(nConn)

E Parmetros:

nConn N mer o da cone x o

E Retorno:

Nenhum .


- 568 -

ADVPL Completo



E Exemplo:


// Abre conexo com o ambiente de Produo
nCon1 := TCLink("MSSQL/PRODUCAO")
if nCon1 < 0
Alert("Falha conectando ambiente de Produo")
QUIT
endif

// Abre conexo com o ambiente de Testes
nCon2 := TCLink("MSSQL/TESTES")

if nCon2 < 0 then
Alert("falha conectando ambiente de Testes")
QUIT
endif

TCSetConn(nCon1)

//Abre tabela de Clientes no ambiente de produo
USE CUSTOMER ALIAS PROD SHARED NEW VIA "TOPCONN"

TCSetConn(nCon2)

//Abre tabela de Clientes no ambiente de testes
USE CUSTOMER ALIAS TEST SHARED NEW VIA "TOPCONN"
...


TCSETFIELD( )

Est a f uno ser v e co mo a poi o ao coma ndo TCQUERY, na r ecup er ao de ca mpos t i po
NUMERI C, DATE e LOGI CAL, poi s os mesmos so gr a v a dos fi si ca me nt e no Ba nco d e Da dos
como ca r act er es, e no caso dos nu mri cos como fl oa t .

E Sintaxe: TCSetField(cAlias, cField ,cType, nTam, nDec )

E Parmetros:

cAlias Ali as da Wor k Ar e a g er a da pel a e x ecu o da qu er y.
cField Nome do ca mpo a ser t r a t a do
cType Ti po desej a do pa r a o ca mpo
nTam Ta ma nho t ot al desej a do par a o ca mpo
nDec N mer o d e d eci mai s desej a do par a o ca mpo

E Retorno:

Nenhum .


- 569 -

ADVPL Completo



E Exemplo 01:


TCQUERY "SELECT NOME, DATA, MARRIED, VALOR FROM CUSTOMER" ALIAS QUERY VIA
"TOPCONN"

TCSetField("QUERY","DATA","D")
TCSetField("QUERY","VALOR","N",12,2)




De nt r o de u m progr a ma ADVPL j pod e mos consi der ar como u m ca mpo da t a
no mai s u m ca mpo ca r act er como o se u ar ma z e n a me nt o.

O ca mpo Da t a s r et or n a do como u m ca mpo car act er por que est a mos
utili z a ndo a f uno TCQUERY, se n o o t r a t a me nt o a ut om t i co.





A est r ut ur a dos pa r met r os da f uno TCSETF I ELD( ) a mesma r e t or n a da
pel a f uno DbSt r uct ( ) e que ut ili z a da e m di v ersas f unes qu e ma ni pul a m
ar qui vos de da dos.

Dest a f or ma mui t o comu m a mont a ge m d e queri es e m t a b el as do si st e ma
par t i ndo da est r ut ur a d e ca mpos r et or n a da p el a f uno DbSt r uct ( ) se ndo que
a ps a e x ecuo dos ca mpos Tcquer y( ) ou DbUse Ar e a ( ) nor mal me nt e
utili z a do o ca mpo TcSe t Fi el d com base no cont e do dest e mes mo a rr a y de
est r ut ur a .


E Exemplo 02:


Local cQuery := ""
Local cCampos := ""
Local aStruSA1 := SA1->(DbStruct())
Local nX := 0
Local nMax := Len(aStruSA1)

// Monta a String cCampos de acordo com o contedo de aStruSA1

aEval(aStruSA1,{|aCampo| nX++, cCampos += aCampo[1] +;
IIF(nX == nMax,' ',', ')})

// Monta a query utilizando a String cCampos

cQuery := "SELECT "+cCampos+" FROM "+RetSqlName("SA1")

If Select("SA1SQL") <> 0
DbSelectArea("SA1SQL")
DbCloseArea()
Endif

dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"SA1SQL",.T.,.F.)



- 570 -

ADVPL Completo



Continuao:

For nX := 1 to Len(aStruSA1)
IF !( aStrutSA1[nX][2] $ "C/M")
TCSetField( cAlias,aStruSA1[nX][1],aStruSA1[nX][2],;
aStruSA1[nX][3],aStruSA1[nX][4])
ENDIF
Next nX



TCSPEXEC( )

Ex ecut a u ma St or ed Procedur e no Ba nco d e Da dos.



De vi do a u ma l i mi t ao e m al guns dos Ba ncos d e Da dos supor t a dos n a
obt e n o dos t i pos de par met ros ( se so de I NPUT e / ou OUTPUT) t odos as
St or ed Procedur es a ser e m e x ecut a das a t r a v s do T OPConnect d e v er o
obed ecer o segui nt e pa dr o d e nome ncl a t ur a d e se us pa r met r os :

Par met r os d e I NPUT de v e m comea r com I N_. . . Ex . I N_VALOR.
Par met r os d e OUTPUT de v e m comea r com OUT_. . . Ex. OUT_C ODI GO

Aps a e x ecuo de u ma St or ed Procedur e o T OPConnect r et or n ar a o ADVPL
u m arr a y com 'n' el e me nt os, onde n o n mer o de par met r os de OUTPUT da
St or ed Procedur e.



E Sintaxe: TCSPExec(cSPName,xParam1,xParam2...xParamN)

E Parmetros:

cSPName Nome compl et o da St or ed Procedur e no ba nco de da dos.
xParamN Par met r os d e i nput da St or ed Procedur e.


As pr ocedur es pa dr es da a pli cao ERP Pr ot he us possu e m conca t e n a das e m
se us nomes o cdi go da e mpr esa par a a qu al f or a m a pl i ca das.

Dest a f or ma ao e x ecut ar u ma pr ocedur e pa dr o do ERP a t r a v s do coma ndo
TCSPEXEC necess ri o ut ili z ar a f uno xPr ocedur es( ) , poi s a mesma i r
conca t e n ar a o nome da procedur e qu e ser e x ecut a da o cdi go da e mpr esa .

Por e x e mpl o : Procedur e MAT001

Se f or e x ecut a da com a si nt a x e : TCSPEx ec( MAT001, . . . ) ocor r er
u m er ro n a a pl i cao poi s est a pr ocedur e n o e xi st e.

Ut ili z a ndo a f uno xPr ocedur es( ) t e mos :

TCSPEx ec( xPr ocedur es( MAT001) , . . . ) , ond e caso a e mpr esa e m uso
sej a a 01, ser e x ecut a da a MAT001_01, a qu al v li da .


- 571 -

ADVPL Completo




E Retorno:

Array Arr a y com os par met r os d e r et or no da St or ed Procedur e e < cSPNa me > o
nome da St or ed Procedur e a ser e x ecut a da e os d e mai s par met r os v ari a m
conf or me a defi ni o da St or ed Pr ocedur e .


E Exemplo:


//Verifica se a Stored Procedure Teste existe no Servidor
If TCSPExist("TESTE")

//Executa a Stored Procedure Teste
aRet := TCSPExec("TESTE","JOSE",1000)
if aRet <> nil

cRetorno := ""
For i:= 1 to Len(aRet)
cRetorno += "|"+ IIF(ValType(aRet[i]) == "C", aRet[i],;
IIF(ValType(aRet[i]) == "N", CValToChar(aRet[i]), "U"))
Next

//Mostra os valores de retorno
ALERT(cRetorno)

Else
ALERT("Erro executando Stored Procedure"+CRLF+"Mensagem: "+TCSQLError())
Endif
EndIf




A f uno TCSPExi st ( ) de v e ser ut i li z a da a pe n as par a v eri fi cao da e xi st nci a
de St or ed Procedur es pa dres da a pl i cao ERP, ou qu e possu a m conca t e
na das no nome a i nf or mao da e mpr esa pa r a qu al est o h a bili t a das.

Par a v eri fi cao de pr ocedur es se m est a car act er st i ca de v e ser ut ili z a da a
f uno Exi st Pr oc( ) .








- 572 -

ADVPL Completo



TCSPEXIST( )

Veri fi ca a e xi st nci a de u ma det er mi n a da St or e d Pr ocedur e no ser vi dor .

E Sintaxe: TCSPExist(cSPName)

E Parmetros:

CSPName Nome da procedur e a ser v eri fi ca da no ba nco d e da dos.

E Retorno:

Lgico I ndi ca se a St or ed Pr ocedur e e xi st e ou n o e < cSPNa me > o no me da
St or ed Procedur e pr ocur a da .

E Exemplo:


If TCSPExist("MAT001_01")
TCSPExec("MAT001_01",...)
Endif




A f uno TCSPExi st ( ) de v e ser ut i li z a da a pe n as par a v eri fi cao da e xi st nci a
de St or ed Procedur es pa dres da a pl i cao ERP, ou qu e possu a m conca t e
na das no nome a i nf or mao da e mpr esa pa r a qu al est o h a bili t a das.

Par a v eri fi cao de pr ocedur es se m est a car act er st i ca de v e ser ut ili z a da a
f uno Exi st Pr oc( ) .


TCSQLERROR( )

Ret or na o l ti mo er ro r e gi st r a do pel o T OPConnect dur a nt e a e x ecu o d e u ma Quer y.

E Sintaxe: TCSQLError( )

E Parmetros:

Nenhum .

E Retorno:

String Me nsa g e m d e er ro r egi st r a da no TopConnect pa r a a ocor r nci a .

E Exemplo:


If TCSQLExec("UPDATE CUSTOMER SET VALUE=0") < 0 then
ALERT(TCSQLError())
Endif


- 573 -

ADVPL Completo



Est a a mesma me nsa ge m que est a r egi st r a da no l og de e v e nt os do
TopConnect / TOTVS DbAccess Ma n a ger.

TCSQLEXEC( )

Per mi t e a e x ecuo de coma ndos de a t u ali z ao no ser vi dor d e ba nco d e da dos.

E Sintaxe: TCSQLExec(cCommand)

E Parmetros:

cCommand Coma ndo S QL a ser e x ecut a do.

E Retorno:

Numrico Ret or n a u m v al or n ega t i vo e m caso d e er ros.

E Exemplo:

nRet : = TCS QLEx ec( " UPDATE CUST OMER SET VALUE = 0)

TCSRVTYPE( )

Ret or na o t i po do ser vi dor no qual TOPConnect / TOTVS DbAccess est e m e x ecu o.

E Sintaxe: TCSrvType( )

E Parmetros:

Nenhum .

E Retorno:

String Ti po do ser vi dor, como por e x e mpl o : " Wi nNT " ou " AS/ 400 " .

E Exemplo:


TCLink("MSSQL/TESTE","TOPSRV")
ALERT(TCSrvtype())



- 574 -

ADVPL Completo




De vi do aos t r a t a me nt os espec fi cos necessri os nas queri es que se r o
e x ecut a das e m ba ncos de da dos DB2 com si st e mas oper aci onai s AS/ 400
nor mal a segui nt e v eri fica o :

# I F DEF TOP
I f TcSr v Ty p e( ) ! = " AS/ 4 00 "

< Tr a t a me nt o S QL con v e nci on al >

El se

# ENDI F

< Tr a t a me nt o pa dr o C ODBASE >

# I F DEF TOP
Endi f
# ENDI F


TCUNLINK( )

Encer r a u ma con e x o com o T OPConnect .

E Sintaxe: TCUnlink(nConn)

E Parmetros:

nConn N mer o da cone x o pr e vi a me nt e r et or na do p el a f uno TCLi nk( )

E Retorno:

Nenhum .


E Exemplo:


TCConType("NPIPE")
nConn := TCLink("MSSQL/TOPCONN","TOPSRV")
TCUnLink(nConn)





- 575 -

ADVPL Completo



TCCHKOBJ( )

Veri fi ca a e xi st nci a de u m obj et o no ser vi dor AS/ 400

E Sintaxe: TCChkObj (cObj,cLibrary,cType)

E Parmetros:

cObj Nome do obj et o a ser v eri fi ca do.
cLibrary Nome da bi bli ot eca que de v e cont er o obj et o
cType Ti po do de obj et o AS/ 40 0, como por e x e mpl o : *F I LE ou *PGM.

E Retorno:

Numrico 0 qu a ndo o obj et o e xi st e ou o n mer o do er ro no AS/ 400.


E Exemplo:


nError := TCChkObj("CALCCUST","PRODUCAO","*PGM")



Funo para uso apenas com o TOPConnect em servidores AS / 400.


TCEXEERROR( )

Ret or n a u ma st ri ng com a me nsa g e m d e er r o r et or n a da p el a e x ecuo das f unes
TCPGMEXE( ) e TCSYSEXE( ) .

E Sintaxe: TCExeError( )

E Parmetros:

Nenhum .

E Retorno:

String Me nsa g e m d e er ro.

E Exemplo:


If TCPGMEXE("CALCCUST") != 0
ALERT(TCExeError())
Endif


- 576 -

ADVPL Completo



Funo para uso apenas com o TOPConnect em servidores AS / 400.

TCPGMEXE( )

Ex ecut a u m progr a ma no ser vi dor AS/ 400.

E Sintaxe: TCPGMEXE(cProgram)

E Parmetros:

cPr ogr a m Nome do pr ogr a ma a ser e x ecut a do.

E Retorno:

Numrico 0 qu a ndo o obj et o e xi st e ou o n mer o do er ro no AS/ 400.


E Exemplo:


If TCPGMEXE("CALCCUST") != 0
ALERT(TCExeError())
Endif



Funo para uso apenas com o TOPConnect em servidores AS / 400.

TCSYSEXE( )

Per mi t e a e x ecu o de u m coma ndo ut i li z a ndo a si nt a x e e r ecursos n a t i vos do DB2 / 4 00,
di r et a me nt e no ser vi dor do ba nco d e da dos.

E Sintaxe: TCSysExe(cCommand)

E Parmetros:

cCommand Coma ndo a ser e x ecut a do no ser vi dor de ba nco de da dos ut i li z a ndo si nt a x e
DB2 / 400.

E Retorno:

Numrico 0 qu a ndo o obj et o e xi st e ou o n mer o do er ro no AS/ 40 0.


- 577 -

ADVPL Completo



E Exemplo:


cCommand := "CRTCBLMOD MODULE("+cTDataBase+"/"+cName+"F"+cCrrEmp+") "
cCommand += "SRCFILE("+cTDataBase+"/QSPSRC) "
cCommand += "SRCMBR("+cName+"F"+cCrrEmp+") "
cCommand += "REPLACE(*YES)"

If TCSysExe( cCommand )!= 0
ALERT(TCExeError())
Endif



Funo para uso apenas com o TOPConnect em servidores AS / 400.


Funes acessrias para uso em fontes com interao com o TOTVS DbAccess

CHANGEQUERY( )

F uno que ef et u a as a dequ aes n ecessri as a quer y par a que a mes ma possa ser e x ecut a da
a dequ a da me nt e no ba nco d e da dos e m uso p el a a pli cao ERP a t r a v s do TopConnect .

Est a f uno necess ri a poi s a a pl i cao ERP Prot he us pod e ser ut i li z ada com di v ersos ba ncos
de da dos, e ca da ba nco possui par ti cul ari da des e m su a si nt a x e, de f or ma que mesmo u ma
quer y escri t a r esp ei t a ndo o pa dr o S QL ANSI pode necessi t ar de a dequ aes.

E Sintaxe: ChangeQuery(cQuery)

E Parmetros:

cQuery St ri ng cont e ndo a qu er y escri t a e m si nt a x e SQL ANSI .

E Retorno:

String
Quer y a dequa da e m f uno do ba nco e m uso p el a cone x o a t i v a com a
a pli cao TopConnect .


E Exemplo:


cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8")
cQuery += " WHERE "
cQuery += "CV8_FILIAL = '"+MV_PAR01+"' AND "
cQuery += "D_E_L_E_T_ = '' "
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)


- 578 -

ADVPL Completo





A f uno Ch a ng e Qu er y( ) de v e obri ga t ori a me nt e ser ut ili z a da pel os f ont es da
a pli cao ERP, poi s a mesma pode ser i nst al a da e m di v ersos a mbi e nt es,
utili z a ndo os v ri os ba ncos de da dos homol oga dos, mas par a
dese nvol vi me nt os espec fi cos de cl i e nt es, o a n ali st a pode opt ar por n o
utili z ar a f uno Cha nge Quer y( ) .

A r a z o di st o per mi t i r ao a nali st a , que t e nh a conheci me nt os mai s a pur a dos
do ba nco de da dos e m uso pel o cli e nt e, ut ili z ar u ma si nt a x e f oca da e m ut ili z ar
mel hor os r ecursos do ba nco, ot i mi z a ndo a perf or ma nce da a pli cao.


RETFULLNAME( )

Ret or n a o nome r e al da t a bel a no ba nco d e da dos pa r a ut i li z ao dest a na sel e o da qu er y .


A f uno Ret F ull Na me( ) n o e xcl usi v a par a uso e m queri es, se ndo ut ili z a da
pel a a pli cao ERP par a v eri fi car o nome da t a bel a par a o ali as, esp eci fi ca do
no SX2 da e mpr esa i ndica da .


E Sintaxe: RetFullName(cAlias, cEmp)

E Parmetros:

cAlias Nome da r e a d e t r a bal ho da a pli cao pa r a i de nt i fi cao da t a b el a no ba nco
de da dos.
cEmp Cdi go da e mpr esa a ser a v al i a da .

E Retorno:

String Nome compl et o / r e al da t a bel a no ba nco de da dos.

E Exemplo:


SA1->(DbSetOrder(1)) // A1_FILIAL+A1_COD+A1_LOJA
cOrder := SqlOrder(IndexKey())

cQuery := "SELECT * FROM "+RETSQLNAME("SA1")+ " WHERE "
cQuery += RetSqlCond("SA1")
cQuery += " ORDER BY "+cOrder

dbUseArea(.T.,"TOPCONN", TcGenQry(,,cQuery), "TRBSQL", .T., .F.)

cRealName := RetFullName("TRBSQL")



- 579 -

ADVPL Completo



RETSQLCOND( )

Ret or n a u ma st ri ng com as condi es pa dr es d e uso e m u ma quer y .

E Sintaxe: RetSqlCond(cAlias)

E Parmetros:

cAlias Nome do al i as par a composi o a st ri ng de condi es.

E Retorno:

String
Condi es de sel eo p a dres pa r a o al i as i ndi ca do.
As condi es pa dr es s o :
ALI AS_F I LI AL = x Fi li al ( ALI AS) . AND.
ALI AS. D_E_L_E_T_ = .


E Exemplo:


cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8")
cQuery += " WHERE "
cQuery += RetSqlCond("CV8")
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)


RETSQLNAME( )

Ret or na o nome pa dr o da t a bel a par a sel eo no ba nco de da dos a t r a v s da quer y.

E Sintaxe: RetSqlName(cAlias)

E Parmetros:

cAlias Ali as par a ser a v ali a do o nome pa dr o da t a bel a .

E Retorno:

String Nome compl et o da t a b el a par a sel e o a t r a v s da quer y .

E Exemplo:


cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8")
cQuery += " WHERE "
cQuery += RetSqlCond("CV8")
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)


- 580 -

ADVPL Completo



RETSQLTABLE( )

Ret or n a o nome r e al da t a bel a par a sel eo no ba nco d e da dos a t r a v s da quer y.

E Sintaxe: RetSqlTable(cAlias)

E Parmetros:

cAlias Ali as par a ser a v ali a do o nome r e al da t a bel a .

E Retorno:

String Nome r e al da t a bel a no ba nco d e da dos.


E Exemplo:


cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLTABLE("CV8")
cQuery += " WHERE "
cQuery += RetSqlCond("CV8")
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)



SQLCOPY( )

Cri a u m ar qui vo no f or ma t o esp eci fi ca do pel a confi gur ao LOCALF I LES do a mbi e nt e com o
r et or no da quer y .

E Sintaxe: SqlCopy(cFile, cWhere, aStru, cAlias, aDates, lRecno)

E Parmetros:

cFile Nome do ar qui vo t e mpor ari o d est i no a ser ger a do
cWhere Condi cao " Wh er e " da quer y
aStru Arr a y com os Ca mpos a ser e m sel eci on a dos p el a quer y
cAlias Ali as ori ge m dos da dos
aDates Arr a y com os nomes dos ca mpos que d e v er o t er o t r a t a me nt o da f uno
TCSet Fi el d( ) par a o f or ma t o de da t a .
lRecno Se copi a o cont e do da col una R_E_C_N_ O_ pa r a o ar qui vo g er a do.

E Retorno:

Nenhum .



- 581 -

ADVPL Completo



SQLORDER( )

Conv er t e a si nt a x e de u m i nd ce e m f or ma t o I SAM ( CODEBASE) pa r a o f or ma t o S QL ANSI

E Sintaxe: SqlOrdem(cOrder)

E Parmetros:

cOrder Si nt a x e de ndi ce e m f or ma t o I SAM.

E Retorno:

String ndi ce conv er t i do par a si nt a x e SQL ANSI


E Exemplo:


SA1->(DbSetOrder(1)) // A1_FILIAL+A1_COD+A1_LOJA
cOrder := SqlOrder(IndexKey())

cQuery := "SELECT * FROM "+RETSQLNAME("SA1")+ " WHERE "
cQuery += RetSqlCond("SA1")
cQuery += " ORDER BY "+cOrder

dbUseArea(.T.,"TOPCONN", TcGenQry(,,cQuery), "TRBSQL", .T., .F.)

cRealName := RetFullName("TRBSQL")



















- 582 -

ADVPL Completo



SQLTOTRB( )

Pr e e nch e u m a r qui vo t e mpor ri o com o cont e do do r et or no da quer y.

E Sintaxe: SqlToTrb(cQuery, aStru, cAlias)

E Parmetros:

cQuery Quer y pa r a sel e o dos r egi st ros no ba nco de d a dos.
aStru Arr a y cont e ndo a est r ut ur a do ar qui vo t e mpor ri o a ser pr e e nchi do com os
da dos d e r et or no da qu er y.
cAlias Ali as do ar qui vo t e mpor ri o a ser pr e e nchi do com os da dos d e r et or no da
quer y .


Par a cor r et a ut ili z ao da f uno SQLT OTRB( ) o ar qui vo t e mpor ri o de v e est ar
cri a do e com a r e a d e t r a bal ho ( ALI AS) d efi ni do.

E Retorno:

Nenhum .


E Exemplo:


// Arquivo de trabalho que ser utilizado pela MaWndBrowse

cCampos:= ""
nX := 0
nMax := Len(aStruSQL)

aEval( aStruSQL,{|aCampo| nX++, cCampos += aCampo[1] +;
IIF(nX == nMax,' ',', ')})

cArqTrb := CriaTrab(aStruSQL,.T.)
dbUseArea(.T.,__LOCALDRIVER,cArqTrb,cAlias,.T.,.F.)
cQuery := "SELECT "+cCampos+" FROM "+RetSqlName("SA1")+" (NOLOCK) "
SqlToTrb(cQuery,aStruSQL,cAlias)

cArqInd := CriaTrab(Nil,.F.)
cChave := "A1_FILIAL+A1_COD+A1_LOJA"
IndRegua(cAlias,cArqInd,cChave,,,"Indexando Registros...")

dbSelectArea( cAlias )
dbGotop()






- 583 -

ADVPL Completo



40.3. Aplicaes com controle de comunio com o Banco de Dados

Ut ili z a ndo as f uno d e i nt er a o com a a pl i cao TopConnect / T OTVS DbAccess t m- se u m
gr a nde n mero d e a pli caes qu e pod e m ser dese nv ol vi das, combi n a ndo- se r ecursos
pr e vi a me nt e est uda dos nos mdul os Bsi co, I nt er medi ri o e ut ili z a ndo os concei t os de
ori e nt ao obj et os e as cl asses d e obj et os di spon v ei s na li ngu a ge m ADVPL, t ai s como :

E Rot i n as de pr ocessa me nt o ut ili z a ndo queri es pa r a sel e o dos r egi st ros ;
E Rel a t ri os par a sel eo dos r egi st r os ;
E Rot i n as de a t u ali z ao par a e x ecuo dos coma ndo de a t uali z ao di r et a me nt e
no ba nco de da dos.

E m r esu mo, qu al quer a pli cao do a mbi e nt e ERP pod e ser escri t a ut ili z a ndo os r ecursos d e
i nt er a o com a a pli cao TopConnect / TOTVS DbAccess, par a obt er, ma ni pul ar e a t u ali z ar os
da dos do ba nco do ba nco de da dos.

Nest e t pi co ser o d et al h a das duas a pli caes ut i li z a ndo est as f unes, cuj o gr a u d e
compl e xi da de il ust r a be m o pot e nci al dest a f er r a me nt a .

E MaWndBrowse com Alias Temporrio gerado por Query

E Banco de dados de interface


40.3.1. MaWndBrowse com Alias Temporrio gerado por Query

Conf or me descri t o no t pi co 6. 1. Ma WndBr owse, est a f uno per mi t e a mont a ge m de
u m browse cuj a est r ut ur a do ar qui vo n o necessi t a est ar defi ni da no dici on ri o de da dos
da a pli cao ERP.

Ut ili z a ndo est a par t i cul ari da de da Ma WndBrowse poss v el e nt o compor u m ali as
t e mpor ri o cont e ndo o r et or no d e u ma qu er y e e xi bi -l o e m u m browse.

A v a nt a ge m d est e Br owse SQL e m r el ao ao br owse de u ma t a b el a nor mal a
possi bili da de de combi nar i nf or maes de v ri as t a bel as a t r a v s de u ma quer y e e xi bi -
l as e m t el a .

Al gu mas a pli caes i nt er essa nt es pa r a est e r ecurso seri a m:

E Consul t a Kar de x e m t el a , poi s est e r el a t ri o co mbi n a da dos das t a bel as de
i t e ns dos docu me nt os de e nt r a da ( SD1) , i t e ns dos docu me nt os de sa da
( SD2) e movi me nt aes i nt er n as ( SD3) .

E Conci li ao de cont a bi li z aes, poi s u ma cont a bili z ao compost a por
u ma ori ge m, a qu al pode ser pr a t i ca me nt e de qu al quer t a bel a de
movi me nt os da a pl i cao ERP, e de u m ou mai s l a na me nt os cont bei s
( CT2) ger a dos por est a ori ge m.

E De monst r ao e m t el a das depr eci aes dos be ns do i mobili z a do por
per odo, co mpondo di n a mi ca me nt e as col un as de depr eci ao de acor do
com o i nt er v al o de meses sel eci on a dos. Est e r ecurso i nt er essa nt e poi s
eli mi n a a li mi t ao de espao da i mpr esso e pode ser co mbi na do co m a
f unci on ali da de de e x por t ao d e gri ds de da dos par a o Mi cr osof t Excel .



- 584 -

ADVPL Completo


Exemplo: MaWndBrowse com Alias Temporrio gerado por Query


Est e e x e mpl o de uso da Ma WndBrowse com ali as de t e mpor ri o ut ili z a ndo
queri es d eri v a do do e x e mpl o de ut ili z ao da Ma WndBr owse com ar qui vo
t e mpor ri o d escri t o no i t e m 6. 1. Ma WndBrowse .


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Funo | WndSQLTRB | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Demonstra a utilizao da MaWndBrowse com SQL |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/


User Function WndSQLTRB()

// Variveis para o Arquivo Temporario
Local cChave := ""
Local cArqTrb := ""
Local aStruTRB := {}
Local aStruSQL := SA1->(DbStruct())

// Variveis para o MaWndBrowse
Local cTitulo := "Cadastro Temporario"// Ttulo obrigatrio
Local cAlias := "SA1" // Alias da tabela corrente podendo ser TRB
Local cFunLeg := "" // Funo que dever retornar um valor lgico e com isso
ser atribudo semafro na primeira coluna do browse
Local cTopFun := "" // Mostrar os registros com a chave de
Local cBotFun := "" // Mostrar os registros com a chave ate
Local lCentered := .T. // Valor verdadeiro centraliza
Local aResource := {} // aAdd(aResource,{"IMAGEM","Texto significativo"})
Local nModelo := 1 // 1- Menu do aRotina
Local aPesqui := {} // aAdd(aPesqui{"Ttulo",nOrdem}), se no passado ser
utilizado o AxPesqui
Local cSeek := "" // Chave principal para a busca, exemplo: xFilial("???")
Local lDic := .T. // Parmetro em conjunto com aCampos
Local lSavOrd := .T. // Estabelecer a ordem aps pesquisas.

// Variaveis para a MsAdvSize
Local lEnchBar := .F. // Se a janela de dilogo possuir enchoicebar (.T.)
Local lPadrao := .F. // Se a janela deve respeitar as medidas padres do
Protheus (.T.) ou usar o mximo disponvel (.F.)
Local nMinY := 400 // Altura mnima da janela

Local aSize := MsAdvSize(lEnchBar, lPadrao, nMinY)

Private cCadastro := " "
Private aCampos := {} // Se lDic=.T. utilizar o SX3, do contrrio o aCampos
informado -> aAdd(aCampo,{X3_CAMPO,X3_PICTURE,X3_TITULO,X3_TAMANHO})
Private aRotina := {} // Idntico ao aRotina para mBrowse


- 585 -

ADVPL Completo



Continuao:

aAdd(aRotina,{"Visualizar","U_TcVisual",0,2}) // Desenvolver Enchoice para
campos de arquivo temporrio
aAdd(aRotina,{"Incluir" ,"U_TcInclui",0,3}) // Desenvolver Enchoice para
campos de arquivo temporrio
aAdd(aRotina,{"Alterar" ,"U_TcAltera",0,4}) // Desenvolver Enchoice para
campos de arquivo temporrio


aAdd(aRotina,{"Excluir" ,"U_TcExclui",0,5}) // Desenvolver Enchoice para
campos de arquivo temporrio

// Estrutura do Arquivo: Nome do campo / tipo, tamanho, decimais (SX3 para
temporrio)
/*
AADD(aStruTRB,{"TRB_FILIAL" ,"C",02,0})
// Nome_Campo , Tipo_Campo, Tamanho, Decimal
AADD(aStruTRB,{"TRB_ID" ,"C",14,0})
AADD(aStruTRB,{"TRB_NOME" ,"C",20,0})
AADD(aStruTRB,{"TRB_IDADE" ,"N",03,0})
AADD(aStruTRB,{"TRB_STATUS" ,"C",01,0})
*/
// aCampos padro para a MaWndBrowse
//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>})

// aCampos melhorado para a WndBrwTRB
//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>,<Tipo>,<cWhen>,;
//<lObrigatorio>})
// Nota: lObrigatorio deve ser sempre a ultima informacao do aCampos
/*
AADD(aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02,"C",".F.",.T.})
AADD(aCampos,{"TRB_ID" ,"@!" ,"Matricula" ,14,"C",".F.",.T.})
AADD(aCampos,{"TRB_NOME" ,"@!" ,"Nome" ,20,"C",".T.",.F.})
AADD(aCampos,{"TRB_IDADE" ,"@E 999","Idade" ,03,"N",".T.",.F.})
AADD(aCampos,{"TRB_STATUS" ,"@!" ,"Status" ,01,"C",".T.",.T.})
*/

If ( Select( cAlias ) <> 0 )
dbSelectArea ( cAlias )
dbCloseArea ()
Endif

// Arquivo de trabalho que ser utilizado pela MaWndBrowse

cCampos:= ""
nX := 0
nMax := Len(aStruSQL)
aEval( aStruSQL,{|aCampo| nX++, cCampos += aCampo[1] +;
IIF(nX == nMax,' ',', ')})

cArqTrb := CriaTrab(aStruSQL,.T.)
dbUseArea(.T.,__LOCALDRIVER,cArqTrb,cAlias,.T.,.F.)
cQuery := "SELECT "+cCampos+" FROM "+RetSqlName("SA1")+" (NOLOCK) "
SqlToTrb(cQuery,aStruSQL,cAlias)





- 586 -

ADVPL Completo


Continuao:

cArqInd := CriaTrab(Nil,.F.)
cChave := "A1_FILIAL+A1_COD+A1_LOJA"

IndRegua(cAlias,cArqInd,cChave,,,"Indexando Registros...")

dbSelectArea( cAlias )
dbGotop()

MaWndBrowse(aSize[7],aSize[2],aSize[6],aSize[5],cTitulo,cAlias,/*aCampos*/,;
aRotina,,cTopFun,cBotFun,lCentered,,nModelo,,cSeek,lDic,lSavOrd)


If ( Select( cAlias ) <> 0 )
dbSelectArea ( cAlias )
dbCloseArea ()
Endif

If File(cArqInd+OrdBagExt())
FErase(cArqInd+OrdBagExt())
ENDIF

DbSelectArea("SA1")
DbSetOrder(1)

Return

/*/
+-----------------------------------------------------------------------
| Funo | TcVisual | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/


USER FUNCTION TcVisual(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk := {||oDlg:End()}
LOCAL bCancel := {||oDlg:End()}
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
// ,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}






Continuao:

- 587 -

ADVPL Completo



For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()

RETURN

/*/
+-----------------------------------------------------------------------
| Funo | TcInclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcInclui(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}





Continuao:


- 588 -

ADVPL Completo


For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".T.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

Do Case
Case aCampos[nX][5] == "C"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
Case aCampos[nX][5] == "N"
&("_"+aCampos[nX][1]) := 0
Case aCampos[nX][5] == "D"
&("_"+aCampos[nX][1]) := CTOD("")
Case aCampos[nX][5] == "L"
&("_"+aCampos[nX][1]) := .F.
Case aCampos[nX][5] == "M"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
EndCase

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
( U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()

RETURN







- 589 -

ADVPL Completo



Continuao:

/*/
+-----------------------------------------------------------------------
| Funo | TcAltera | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcAltera(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",aCampos[nX][6],aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
( U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()

RETURN



- 590 -

ADVPL Completo


Continuao:

/*/
+-----------------------------------------------------------------------
| Funo | TcExclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcExclui(cAlias, nReg, nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
// ,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()

RETURN



Continuao:

- 591 -

ADVPL Completo



/*/
+-----------------------------------------------------------------------
| Funo | TcValid | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcValid(cAlias,nReg,nOpc,aCampos)
LOCAL lRet
LOCAL nX
LOCAL nPosObrig := Len(aCampos[1])

For nX := 1 to Len(aCampos)
IF aCampos[nX,nPosObrig] == .T.
IF !(lRet := !Empty(&("_"+aCampos[nX,1])))
Help("TEnchoice",1,"HELP","OBRIGATORIO","Existem campos
obrigatorios nao preenchidos",1,0)
RETURN lRet // EXIT
ENDIF
ENDIF
Next nX

IF nOpc == 3
IF !(lRet := !((cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID))))
Help("TEnchoice",1,"HELP","INCLUSAO","Ja existe um registro com esta
chave",1,0)
ENDIF
ELSE
IF !(lRet := (cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID)))
Help("TEnchoice",1,"HELP","ALTERACAO","Nao existe um registro com
esta chave",1,0)
ENDIF
ENDIF

RETURN lRet










- 592 -

ADVPL Completo




Continuao:

/*/
+-----------------------------------------------------------------------
| Funo | TcGravar | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/


USER FUNCTION TcGravar(cAlias,nReg,nOpc,aCampos)
LOCAL nX

RecLock(cAlias,nOpc==3)
IF nOpc == 5
DbDelete()
ELSE
For nX := 1 to Len(aCampos)
(cAlias)->&(aCampos[nX][1]) := &("_"+aCampos[nX][1])
Next nX
ENDIF
Msunlock()

RETURN





















- 593 -

ADVPL Completo




Continuao:

/*/
+-----------------------------------------------------------------------
| Funo | TEnchoice | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

Static Function TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE,;
lEnchBar)

Local aSays := {}
Local aGets := {}
Local cCaption := ""
Local cPict := ""
Local cValid := ""
Local cF3 := ""
Local cWhen := ""
Local cBlKSay := ""
Local cBlkGet := ""
Local cBlKVld := ""
Local cBlKWhen := ""
Local nLeft := 0
Local nTop := 0
Local nI := 0

Default lEnchBar := .F.
Default nLeftE := IIF(lEnchBar,(oDlg:nLeft)+16,2)
Default nTopE := 2
Default nHeightE := (oDlg:nHeight)-135
Default nWidthE := (oDlg:nWidth)-102
// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aC,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})

If Len(aCampos) > 0

oScroll := TScrollBox():New(oDlg, nLeftE, nTopE, nHeightE , nWidthE, .T.,;
.T., .T.)

For nI:=1 to Len(aCampos)

If Len(aCampos[nI])==8

cCampo := aCampos[nI,1]
nLeft := aCampos[nI,2,1]-13
nTop := aCampos[nI,2,2]
cCaption:= Iif(Empty(aCampos[nI,3]), " " ,aCampos[nI,3])
cPict := Iif(Empty(aCampos[nI,4]), Nil ,aCampos[nI,4])
cValid := Iif(Empty(aCampos[nI,5]), ".t." ,aCampos[nI,5])
cF3 := Iif(Empty(aCampos[nI,6]), NIL ,aCampos[nI,6])

cWhen := Iif(Empty(aCampos[nI,7]), ".T." ,aCampos[nI,7])


- 594 -

ADVPL Completo



Continuao:

nWidthG := Iif(Empty(aCampos[nI,8]), 100,;
IiF(aCampos[nI,8]*3.5 > 100,100,nil))

cBlKSay := "{|| OemToAnsi('"+cCaption+"')}"
cBlkGet := "{ | u | If( PCount() == 0,;
"+cCampo+","+cCampo+":= u ) }"
cBlKVld := "{|| "+cValid+"}"
cBlKWhen := "{|| "+cWhen+"}"

AADD(aSays,Array(1))
aSays[nI] := TSay():New(nLeft+1, nTop, &(cBlkSay), oScroll,,,;
.F., .F., .F., .T.,,, 50, 8, .F., .F., .F., .F.,;
.F. )
AADD(aGets,Array(1))

aGets[nI] := TGet():New( nLeft, nTop+50, &(cBlKGet), oScroll,;
nWidthG, 11, cPict, &(cBlkVld),,,, .F.,, .T.,,;
.F., &(cBlkWhen), .F., .F.,, .F., .F. , cF3,;
(cCampo))

EndIf
Next
Endif

Return





















- 595 -

ADVPL Completo



40.3.2. Banco de dados de interface

O t er mo Ba nco d e da dos d e i nt erf ace ut ili z a do par a cl assi fi car u ma a pli cao ADVPL escri t a
com f unes de i nt er ao com a a pl i cao TopConnect / TOTVS DbAccess pa r a r e al i z ar a
i nt egr a o e nt r e a a pli cao ERP Prot h e us e out ro si st e ma , ut ili z a ndo co mo mei o d e
comuni ca o u m ba nco de da dos e n o mai s i mpor t ao d e a r qui vos e m N f or ma t os, t ai s
como . TXT, . DBF e si mil ar es.



Est e t i po de i nt egr ao n o vi sa subst i t ui r f or ma t os de i nt egr aes pa dres j
e xi st e nt es como o pa dr o CNAB e o pa dr o We b XML.
Su a a pli cao i nt egr ao di r et a e nt r e si st e mas a t r a v s d e u m ba nco de
da dos com f or ma t o e pa dres comuns e nt r e el as.


As v a nt a ge ns da ut ili z ao do concei t o de Ba nco d e Da dos d e I nt erf ace e m compa r a o da
i nt egr a o por i mpor t ao / e x por t a o d e a r qui vos s o :

E Mai or cont rol e da i nt egr ao das i nf or maes e nt r e os si st e mas, p er mi t i ndo u m
t r a t a me nt o a dequ a do d e e v e nt os d e err os ;

E Tr a nspa r nci a e r ast r e a bili dade das i nf or maes i nt egr a das, i mpl e me nt a ndo
confi a bili da de no pr ocesso ;

E Possi bili da de de ut ili z ao d e u m t i po de ba nco d e da dos p el a a plica o ERP
Prot h e us e d e out ro t i po de ba nco d e da dos pa r a i nt egr ao e nt r e os si st e mas.

E Possi bili da de de dese nv ol vi me nt o de f err a me nt as par a moni t or ar e g er e nci ar a
i nt egr a o e nt r e os si st e mas a t r a v s do cont r ol e da r e a de i nt erf ace no ba nco
de da dos, i ncl usi v e co m a utili z ao de St or ed Pr ocedur es par a a u me nt ar a
perf or ma nce da a pl i cao d e i nt erf ace.

Consideraes relevantes sobre as funes TCLink( ) e TCSetConn( )

E A f uno TCLi nk( ) per mi t e a a ber t ur a de u ma cone x o com u m ba nco de da dos,
desd e que ha j a o OBDC confi gur a do no a mbi e nt e da a pli cao e n a a pli cao
TOPConnect / T OTVS DBAccess ;

E Ca da a ber t ur a de con e x o a t r a v s da f un o TcLi nk( ) consome u ma li ce nsa de
usu ri o do T OPConnect / TOTVS DBAccess. Aps a a ber t ur a d e u ma cone x o a
mesma de v e ser sel eci on a da pel a f uno TcSet Conn( ) par a se t or n ar a con e x o
a t i v a ;

E Pode m ser ut i li z a das di v ersas con e x es e m u ma mesma a pli cao ADVPL, e
pode m ser ut ili z a das as i nf or maes das t a bel as j a ber t as e vi ncul adas a u ma
r e a d e t r a bal ho i ndepe nde nt e da cone x o que est a t i v a . Some nt e de v e ser
v eri fi ca do que par a a ber t ur a d e u ma t a bel a e v ncul o dest a com u ma r e a de
t r a bal ho obri ga t ori a me nt e de v e est ar a t i v a a cone x o com o ba nco de da dos que
cont m est a t a bel a .

E A cone x o a ber t a e nt r e o ERP Prot he us e o TopConnect / DbAccess possu o
n mero d e r ef er nci a 0. Dest a f or ma , a ps fi n ali z ar u ma cone x o a ber t a com o
coma ndo TCLi nk( ) de v e ser ef et u a do u m TCSet Conn( 0) par a r est a ur ar como
cone x o a t i v a a con e x o pa dr o do Prot h e us co m o TopConnec.


- 596 -

ADVPL Completo


A fi gur a a bai xo il ust r a a est r ut ur a t pi ca de u ma a pli cao utili z a ndo o concei t o de Ba nco d e
Da dos d e I nt erf ace, co m f oco na a pli cao ERP Pr ot he us e se us r ecursos pr - di spon v ei s :




Tarefa Descrio Detalhamento
01 Exportao Protheus - > DbInterface
Ut ili z ao de queri es ou st or ed
procedur es pa r a a t u ali z ao das
t a bel as do ba nco DBI nt erf ace no
f or ma t o n ecess ri o ao ERP X,
e x ecut a das a par t i r do ERP Pr ot he us.
02 Importao DbInterface - > ERP X
F er r a me nt as propri et ri as do ERP X
par a l ei t ur a do DBI nt erf ace e
t r a t a me nt o das i nf or maes pa r a
a t u ali z ao do ba nco d e da dos d est a
a pli cao.
03 Extrao ERP X - > DbInterface
Pode ser u ma f er r a me nt a propri et ri a
da a pli cao ERP X, ou pode ser u m
conj unt o de queri es e st or ed
procedur es d ese nv ol vi das e m
conj unt o com a equi pe do ERP X e a
equi pe TOTVS, per mi ti ndo o cont r ol e
de e x ecuo da e xt r ao pel o ERP
Prot h e us.
04 Importao DbInterface - > Protheus
Ut ili z ao de queri es ou st or ed
procedur es par a l ei t ur a das
i nf or maes do DBI nt erf ace e
a t u ali z ao de t a bel as i nt er medi ri as
no ba nco de da dos do ERP Pr ot he us,
e x ecut a das a par t i r do ERP Pr ot he us.
05 Efetivao Protheus - > Protheus
Ut ili z ao de f unes prpri as par a
est a fi n ali da de no ERP Prot he us par a
ef et i v ao das i nf or maes
i mpor t a das e m i nf or maes v li das no
ERP. Est as f unes nor mal me nt e so
compa t v ei s com a e x ecu o a t r a v s
do r ecurso d e MsEx ecAut o( ) .


Consideraes complementares sobre o conceito de Banco de Dados de Interface

- 597 -

ADVPL Completo



E A ut ili z ao de t a bel as i nt er medi ri as no ba nco de da dos Pr ot he us a p esar d e n o
ser obri ga t ri a r eco me nda da par a per mi ti r u m t r a t a me nt o a dequ a do das
ocor r nci as de ef et i v ao das i nf or maes, pri nci pal me nt e qu a ndo ut ili z a da a
f uno MsEx ecAut o( ) pa r a e x ecut a o das r ot i nas de ef et i v ao dos da dos ;

E Par a e xt r a o das i nf or maes t a nt o do b a nco d e da dos Prot h e us pa r a
e x por t a o, qu a nt o do ba nco d e da dos do si st e ma ERP X r ecome nd v el o uso
de St or ed Procedur es par a a u me nt ar a p erf or ma nce do processo como u m t odo.
i mpor t a nt e l e mbr ar que se o si st e ma ERP X possui r pr ocedur es de e x por t ao
as mesmas poder o ser e x ecut a das di r et a me nt e p el o Pr ot he us a t r a v s da f uno
TCSpEx ec( ) ;

E r ecome nd v el que as f unci onali da des de Ex por t a o, Ext r ao, I mpor t a o e
Ef et i v ao sej a m t r a t a das t a nt o com i nt erf aces d e e x ecuo di r et a qu a nt o
a t r a v s d e e x ecu o vi a Job.






























- 598 -

ADVPL Completo



40.4. Embedded SQL Facilitador de Querys


O obj et i vo do E mbedd e d SQL f acili t ar a escri t a e l ei t ur a de quer y's. F oi defi ni da u ma si nt a x e
par a que se possa escr e v er a quer y di r et a me nt e no cdi go ADVPL, se m a necessi da de de fi car
conca t e n a ndo p edaos de st ri ng par a compor a st ri ng fi n al .

Disponibilidade do Recurso

Est e r ecurso est di spon v el a pe n as no Prot he us 8. A utili z ao do E mbedded SQL di vi de- se
e m : compi l ao do f ont e, e e x ecu o do f ont e. Pa r a ser poss v el co mpil ar u m f ont e com o
cdi go escri t o no f or ma t o E mb edded, de v e ser ut i li z a do u m Prot he us, co m Buil d i gu al ou
superi or a 7. 00. 050721p, e m u m a mbi e nt e co m r eposi t ri o pa r a TopConnect ( RPODB = T OP ) .

A utili ao dest e r ecurso t a mb m d e pe nde da a t u ali z ao da LI B 811, superi or a 'Li b
20050902 - 811'.

E Exemplo bsico - Fonte atual


cQuery : 'SELECT SE2.E2_PREFIXO,SE2.E2_NUM '
cQuery += 'FROM '+RetSqlTable('SE2')+' SE2,'+RetSqlTable('QEK')+' QEK '
cQuery += 'WHERE SE2.E2_FILIAL= '+xfilial('SE2')+' AND '
cQuery += 'SE2.E2_PREFIXO<> ''+cPrefixo+'' AND '
cQuery += 'SE2.D_E_L_E_T_ = ' ' '
cQuery += 'ORDER BY '+RetSqlOrder('SE2')
dbUseArea(.T.,'TOPCONN',TcGenQry(,,cQuery),'E2TEMP',.T.,.T.)
TCSetField('E2TEMP','E2_EMISSAO','D',8,0)


E Exemplo bsico - Utilizando Embedded SQL


BeginSql alias 'E2TEMP'
column E2_EMISSAO as Date
%noparser%
SELECT SE2.E2_PREFIXO,SE2.E2_NUM
FROM %table:SE2% SE2,%table:QEK% QEK
WHERE SE2.E2_FILIAL= %xfilial:SE2% AND
SE2.E2_PREFIXO<> %exp:cPrefixo% AND
SE2.%notDel%
ORDER BY %Order:SE2%
EndSql



- 599 -

ADVPL Completo



Caractersticas operacionais - Sintaxe

O bl oco ond e ser escri t o o Sel ect de v e se mpr e ser i ni ci a do com 'BeginSql alias' e fi n ali z a do
com 'EndSql'.

Par t es do cdi go que de v e m ser subst i t u das a par ece m e nt r e os si n ai s de %. Est as e x pr esses
possu e m t r a t a me nt o especi al e m mome nt o de e x ecu o.

Qu al quer i nst r uo col oca da e nt r e BE GI NS QL. . . ENDS QL, que n o sej a u ma e x pr esso %. . . % ,
ser i nseri da n a quer y a ser e nvi a da par a o ba nco, de f or ma l i t er al .

Vari v ei s, e x pr esses, f unes a par ece m i ni ci a ndo com %exp: %.

E m column, esp eci fi car ca mpos da quer y qu e s o do t i po da t a , l gi co ou nu mri co ( DATE,
LOGI C, NUMBER) . Est a li nh a t r oca da por ch a ma das f un o TCSetField.

%noparser % i ndi ca que a quer y n o d e v e p assa r pel a f uno 'ChangeQuery' a nt es de ser
e nvi a da ao ba nco d e d a dos. Caso n o esp eci fica do, o d ef a ul t a st ri ng da quer y ser passa d a
a ut oma t i ca me nt e pel a f uno Ch a nge Quer y.

%table: <alias> % subst i t u da por RetSqlName( <alias>)

%notDel % subst i t u da por D_E_L_E_T_ = ' '

%Order: <alias> % subst i t u da por SqlOrder( <alias>- >( IndexKey( ) ) )

H 3 opes par a o %Or der :
1. %Order: <cAlias> % t r a duzi do par a
Sql Or der ( < cAli as > - > ( I nde x Ke y( ) ) )
2. %Order: <cAlias>, <nIndice> % t r a duzi do par a
Sql Or der ( < cAli as > - > ( I nde x Ke y( < nI ndice > ) ) )
3. %Order: <cAlias>, <cNick> % t r a duzi do par a
Sql Or der ( < ali as > - > ( DBNi ck I nd e x Ke y ( < cNick > ) ) )

Limitao:

No p er mi t i do i ncl ui r f unes no mei o do cdi go ' e mbedd ed'. Se pr eci sar, o v al or d e v e ser
gu ar da do e m u ma v ari v el a nt es do i n ci o do Begi nSql .


tam_cp := GetE2ValorSize()

BeginSql alias 'E2TEMP'
column E2_EMISSAO as Date, E2_VALOR as Numeric(tam_cp,2)
. . .
EndSql



- 600 -

ADVPL Completo



Erros de Compilao

Caso sej a ut ili z a do al gu m ar gu me nt o i nv li do par a esp eci fi car as col un as, ou err os de si nt a x e
n as e x pr esses a ser e m t r a nsf or ma das par a a mont a ge m da quer y, a compi l ao do f ont e
i nt err ompi da com a ocor r nci a 'Sy nt a x Err or', i nf or ma ndo a li nha onde a pri mei r a ocor r nci a
f oi e ncont r a da .


ENDSQL (Error C2001 Syntax error:)


Caso a ocorr nci a de compil ao a pont e di r et a me nt e par a a li nh a do cdi go- f ont e, ond e est
escri t a a i nst r uo EndSql , v eri fi que se e xi st e al gu m espao e m br a nco ou t a bul ao, a par t i r
do i n ci o da li nh a , a nt es da i nst r uo EndSql . A v erso a t u al desde a mbi e nt e no supor t a est a
decl ar a o, e xi gi ndo que a i nst r uo EndSql sej a ali nh a da esquer da do f ont e, se m espaos
ou t a bul aes.


Erros de Execuo

E 'Query Argument Error : Alias [XXX] already in use.'

Caso a i nst r uo Begi nSQL especi fi que u m ali as que j est ej a a ber t o ( e m uso) , a a pli cao
a bor t a da com a ocor r nci a de er ro f a t al aci ma , i nf or ma ndo e m XXX o al i as utili z a do.


E 'Query Argument Error : Invalid Value Type [X]'

Caso al gu ma e x pr esso i nf or ma da n a Quer y, a t r a v s da t a g %e x p : . . . %, r et or ne u m v al or d e
t i po di f er e nt e d e ' C' Ca t act er, ' D' Da t a , 'N' Nu mri co, ou 'L' Lgi co, a a pli cao a bor t a da co m
a ocorr nci a de er ro aci ma , ond e o t i po do a r gu me nt o i nesper a do most r a do e m [ X] .

E 'Type Mismach on +'

Est a ocorr nci a , se r epr oduzi da , i nf or mar n a pil h a de ch a ma das o n mer o da li nha do cdi go-
f ont e cor r espond e nt e i nst r uo EndSQL. Ocor r e caso al gu ma f uno i nt er medi ri a do e ngi ne
do E mbedd ed S QL, e xcl ui ndo- se as f unes esp eci fi ca das n a quer y com a si nt a x e %e x p : . . . %
, r et or n ar u m cont e do n o- car act er e a ser acr esce nt a do n a Quer y . Est a ocor r nci a de mai s
di f cil l ocali z ao, se ndo til nest es casos a a n l i se do ar qui vo t e mpor ri o ger a do pel o Pr ot he us
I DE, no mome nt o da co mpil ao.

E Help NOFUNCW - Funo _ _EXECSQL

Caso u m f ont e com o E mbedd ed S QL sej a e x ecut a do e m u m r eposi t ri o que n o t e nh a si do
a t u ali z a do, OU que n o sej a u m Reposi t ri o par a o a mbi e nt e TOPConnect ( RPODB = T OP) , a
a pli cao e xi bi r a ocorr nci a aci ma , i ndi ca ndo que a f un o i nt er n a de e x ecu o da Qu er y
no est pr ese nt e no a mbi e nt e. Veri fi que se a li b est a t u ali z a da , e se o RPO e m uso d e u m
a mbi e nt e TOPConnect .


- 601 -

ADVPL Completo



Caractersticas operacionais - depurao

Da da a mont a ge m da Quer y, no poss v el depur ar o bl oco do cdi go- f ont e compr e e ndi do
e nt r e as i nst r ues Begi nSql e EndSql , n o se ndo consi der a dos pont os d e pa r a da d e d epur a o
( Br e a kPoi nt s ) , caso col oca dos n est e i nt er v al o do cdi go. A col oca o de pont os d e par a d a
de v e ser r e al i z a da a nt es ou depoi s dest e bl oco.


Funo auxiliar - GETLastQuery( )

Aps a a ber t ur a do cursor, no al i as especi fi ca do, a f uno Get Last Qu er y( ) r et or na u m ar r a y ,
com 5 el e me nt os, ond e est o di spon v ei s as segui nt es i nf or maes sobr e a Quer y e x ecut a da :

[ 1] cAli as - Ali as usa do par a a bri r o Cursor.
[ 2] cQuer y - Qu er y e x ecut a da .
[ 3] a Ca mpos - Ar r a y d e ca mpos com cri t ri o d e conv ers o esp eci fi ca dos.
[ 4] l NoParser - Caso . T. , n o f oi ut ili z a da Ch a nge Qu er y( ) n a St ri ng ori gi n al .
[ 5] nTi me Spe nd - Te mpo, e m segundos, ut i li z ado par a a a b er t ur a do Cursor.

E Exemplo mais completo: Cdigo ADVPL


BeginSql alias 'E2TEMP'
column E2_EMISSAO as Date, E2_VALOR as Numeric(tam_cp,2)
column QEK_SKLDOC As Logical

%noparser%

SELECT SE2.E2_PREFIXO,SE2.E2_NUM, SE2.E2_FORNECE, SE2.E2_LOJA,SE2.E2_VALOR,
SE2.D_E_L_E_T_ DEL1, QEK.D_E_L_E_T_ DEL2 , QEK.QEK_SKLDOC, SE2.R_E_C_N_O_
SE2RECNO
FROM %table:SE2% SE2,%table:qeK% QEK
WHERE SE2.E2_FILIAL= %xfilial:SE2% AND
qek.%notDel% and
SE2.E2_PREFIXO<> %exp:cPrefixo% AND
SE2.E2_NUM<> %exp:(cAlias)->M0_CODIGO% AND
SE2.E2_NUM<>45 AND
SE2.E2_FORNECE=%exp:Space(Len(SE2->E2_FORNECE))% AND
SE2.E2_EMISSAO<>%exp:MV_PAR06% AND
SE2.E2_LOJA<>%exp:MV_PAR05% AND
SE2.E2_VALOR<>%exp:MV_PAR04% AND
qek.QEK_SKLDOC<>%exp:MV_PAR03% And
SE2.%notDel%
ORDER BY %Order:SE2,1%
EndSql



- 602 -

ADVPL Completo



E Exemplo mais completo: Fonte gerado pelo pr-compilador (PPO)


__execSql(
'E2TEMP',
' SELECT SE2.E2_PREFIXO,SE2.E2_NUM, SE2.E2_FORNECE, SE2.E2_LOJA,SE2.E2_VALOR,
SE2.D_E_L_E_T_ DEL1, QEK.D_E_L_E_T_ DEL2 , QEK.QEK_SKLDOC, SE2.R_E_C_N_O_
SE2RECNO FROM '+RetSqlName('SE2')+' SE2, '+RetSqlName('QEK')+' QEK WHERE
SE2.E2_FILIAL= '' +xFilial('SE2')+'' AND qek.D_E_L_E_T_= ' ' AND
SE2.E2_PREFIXO<> '+___SQLGetValue(CPREFIXO)+' AND SE2.E2_NUM <> '+
___SQLGetValue((CALIAS)->M0_CODIGO)+' AND SE2.E2_NUM<>45 AND SE2.E2_FORNECE= '+
___SQLGetValue(SPACE(LEN(SE2->E2_FORNECE)))+' AND SE2.E2_EMISSAO<> '+
___SQLGetValue(MV_PAR06)+' AND SE2.E2_LOJA<> '+___SQLGetValue(MV_PAR05) +' AND
SE2.E2_VALOR<> '+___SQLGetValue(MV_PAR04)+' AND qek.QEK_SKLDOC<> '+
___SQLGetValue(MV_PAR03)+' And SE2.D_E_L_E_T_= ' ' ORDER BY '+
SqlOrder(SE2->(IndexKey(1))), {{'E2_EMISSAO','D',8,0}, {'E2_VALOR','N',tam_cp,2},
{'QEK_SKLDOC','L',1,0}},.T.)
)

























- 603 -

ADVPL Completo



41. Funcionalidade MsExecAuto

Sobre a MsExecAuto e Rotinas Automticas

A f unci on ali da de MsEx ecAut o, ou t a mb m conheci da como Rot i n a Aut om t i ca , per mi t e a
e x ecu o de r ot i n as do a mbi e nt e ERP Pr ot h e us por f unes esp ec fi cas, o que conf er e a o
dese nvol v edor a possi bili da de de ef et u ar t r a t a me nt os esp ec fi cos a nt es da e x ecu o da r ot i na
pa dr o, e mai s i mpor t a nt e, n o per der ne nhu ma f unci on ali da de que a r ot i n a pa dr o of er ece.

Av ali a ndo est a f unci onali da de a pe n as pel o par gr af o aci ma , t e m- se a i mpr esso d e ser u m
r ecurso si mpl es e a t mesmo desnecess ri o, poi s u m dese nvol v e dor e x p eri e nt e pod eri a
r eproduzi r t odas as v al i daes e t r a t a me nt os e xi st e nt es e m su a r ot i na , e nt o por que t er de
t r a t ar a r ot i n a pa dr o?

Par a r espond er a est a p er gunt a de v e mos f a z er as segui nt es consi der aes :

E A aplicao ERP est em constante evoluo:

No mome nt o de d ese nvol vi me nt o da rot i n a esp ec fi ca er a n ecessri o a pe n as o
t r a t a me nt o de u m conj unt o i sol a do de i nf or maes, mas com o a pri mor a me nt o do
ERP como u m t odo, a gor a s o necess ri os out ros conj unt os d e da dos, os qu ai s n o
f or a m t r a t a dos pel o d ese nvol v edor n a quel e mo me nt o, mas que est o cont e mpl a dos
n a rot i n a pa dr o do si st e ma .

Como o dese nvol v edor opt ou por r e al i z ar t odo o t r a t a me nt o de f or ma esp ec fi ca , e m
u ma a t uali z ao do ERP est e dese nv ol vi me nt o pr eci sar ser r e vi st o ou a t mesmo
r ef ei t o, o que i mpl acar e m cust o par a o cl i e nt e ou par a o dese nv ol v edor.

Se o dese nv ol v edor t i v esse opt a do por ut ili z ar a rot i n a pa dr o e nca psul a da e m se u
dese nvol vi me nt o el e n o t eri a probl e mas e m a da pt ar sua rot i n a as nov as
necessi da des do si st e ma , poi s a r ot i n a pa dr o j se pr e ocup a da com a
compa t i bili da de e nt r e as v erses, possi bili t a ndo que u ma si mpl es ma nut e no
a t u ali z e t oda a r ot i n a esp ec fi ca , i st o se est a ma nut e no f or necessri a , poi s a
rot i n a pa dr o poder t r a t ar a nov as i nf or maes com cont e dos pa dres
depe nde ndo da si t u ao e m qu e est as no f or e m i nf or ma das.

E A aplicao ERP pode ser personalidada atravs de pontos de entrada e
do dicionrio de dados:

A par t i r do mome nt o que u ma a pli cao pa dr o dese n vol vi da e di sponi bili z a da a
mesma pod e sofr er di v ersas p erson al i z aes e m ca mpo, as quai s pode m ser
i mpl e me nt a das e m par al el o ou a ps o dese nvol vi me nt o da rot i na espec fi ca
di sponi bili z a da pel o dese nvol v edor .

Se est a si t u ao n o f or pr e vi st a , a i ncl uso de i nf or maes ut ili z a ndo a rot i n a
pa dr o do si st e ma poder sofr er di v ersas v ali daes ou a t mes mo ef et u a r a
gr a v a o d e i nf or maes a di ci on ai s, as qu ai s n o est o vi s v ei s n a r ot i n a esp ec fi ca ,
ger a ndo gr a v es i nconi st nci as na base de da dos.

Av ali a ndo est as consi der aes p erceb esse o f a t or d e sucesso que u m dese nv ol vi me nt o
esp ec fi co pode t er a o opt ar por r ef a z er t odos os t r a t a me nt os do si st e ma e m det ri me nt o de
utili z ar a f unci onali da de MsEx ecAut o, ou sej a , qu al quer modi fi cao no a mbi e nt e,
i ndepe nde nt e do qu o si mpl es pode t or n a r a r ot i n a espec fi ca i n a dequ a da .

- 604 -

ADVPL Completo


Quando utilizar a funcionalidade MsExecAuto ?

Te ndo e m vi st a est e ce n ri o fi ca a per gunt a : Qu a ndo ut ili z ar a f unci on ali da de MsEx ecAut o ?

A r espost a pod e ser b vi a e a t conser v a dor a , mas Se mpr e qu e a f unci on ali da de est i v er
di spon v el n a quel e processo.

E m r esu mo, qu al quer f unci on ali da de de i nt erf ace, sej a el a de car ga ou cont nu a , qu al quer
f unci onali da de de a t u ali z ao, ou sej a , qu al quer ma nut e no na base d e da dos do si st e ma ,
se mpr e que poss v el , de v e ut i li z ar a f unci on ali dade MsEx ecAut o.


Processos da aplicao ERP com tratamentos para execuo por MsExecAuto

Pode- se di z er que as pri nci pai s rot i n as de a t u ali z ao do ERP Pr ot he us a t ual me nt e possue m o
t r a t a me nt o n ecessri o par a su a e x ecuo por MsEx ecAut o, e com b ase nas necessi da des d e
dese nvol vi me nt o i nt er n as da TOTVS e n as mel hori as sol i ci t a das por cl i e nt es e a nali st as de
i mpl a nt ao as de mai s rot i n as necessri as s o a t u ali z a das par a cont e mpl ar est e t r a t a me nt o.

O qu a dr o a bai xo i l ust r a u m dos l t i mos ce nri os d e t r a t a me nt o d e MsEx ecAut o pel as rot i n as
da a pli cao ERP Prot h e us.

Rotina Parmetros
ATFA010 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
ATFA030 ( x Aut oCa b, n Opc)
ATFA035 ( x Aut oCa b, n Opc)
CFGX016 ( x Aut oCa b, x Aut oI t e ns)
CTBA015 ( n OpcAut o, a Aut o)
CTBA016 ( n OpcAut o, a Aut o)
CTBA020 ( aRot Aut o, n OpcAut o, a Rot I t e m)
CTBA102 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
CTBA270 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
FATA140 ( n OpcAut o, a Aut o)
FATA220 ( n OpcAut o, a Aut oCa b)
FATA300 ( n OpcAut o, x Aut oCa b, x Aut oAD2, x Aut oAD3, x Aut oAD4, x Aut oAD9)
FATA310 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
FATA320 ( x Aut oVe nd, x Aut oTask, x Aut oCal e nd)
FINA010 ( aRot Aut o, n OpcAut o)
FINA040 ( aRot Aut o, n OpcAut o)
FINA050 ( aRot Aut o, n Opci on, n OpcAut o)
FINA070 ( x Aut oCa b, n Opc)
FINA080 ( x Aut oCa b, n Opc)
FINA390 ( nPosAr ot i na , x Aut oCa b, n OpcAut o)
MATA040 ( a Aut o, n OpcAut o)
MATA080 ( aRot a ut o, n OpcAut o)
MATA103 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o, l Whe n Get , x Aut oI mp)
MATA105 ( xReser v Ca b, xReser v I t e ns, n OpcAut o)
MATA110 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA116A ( x Aut oCa b, x Aut oI t e ns, l I ncl ui )
MATA120 ( nF uncao, x Aut oCa b, x Aut oI t e ns, n OpcAut o, )
MATA125 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA140 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA145 ( x Aut oCa b, x Aut oI t , x Aut oI t 2, n OpcAut o)
MATA150 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)

- 605 -

ADVPL Completo


Rotina Parmetros
MATA175 ( xRot Aut o, x OpcAut o)
MATA185 ( x Aut oSCP, x Aut oSD3, n OpcAut o, xPer g)
MATA200 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA230 ( a Aut o, n OpcAut o)
MATA241 ( x Aut oCa b, x Aut oI t e ns, nCall Opcx)
MATA242 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA261 ( a Aut oI t e ns, n OpcAut o)
MATA265 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA266 ( a Aut oI t e ns)
MATA267 ( a Aut oI t e ns)
MATA360 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA410 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA415 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA416 ( x Aut oCa b, x Aut oI t e ns)
MATA490 ( x Aut o, n OpcAut o)
MATA685 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
MATA700 ( x Aut o, n OpcAut o)
MATA920 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
TMKA061 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
TMKA062 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
TMKA271 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
TMSA040 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)
TMSA050 ( x Aut oCa b, x Aut oI t e ns, x I t e nsPesM3, x I t e nsEnd er , n OpcAut o)
TMSA170 ( x Aut oCa b, n OpcAut o)
TMSA360 ( x Aut oCa b, x Aut oI t e ns, x Aut oNFAv a , n OpcAut o)
TMSA430 ( cAli as, x Aut oCa b, x Aut oVei , x Aut oMot , n OpcAut o)
TMSA440 ( x Aut oCa b, x Aut oI t e ns, n OpcAut o)


Quando no utilizar a funcionalidade MsExecAuto

Apesa r de t odas as ori e nt aes dos t pi cos a nt eri or es e xi st e m si t uaes nas qu ai s no
r ecome nda do ut ili z ar a f unci on ali da de MsEx ecAut o, no caso, e m si t u aes par a as quai s
e xi st e m r ot i n as pa dres da a pli cao ERP pa r a processa me nt os d e i nt egr aes e a t uali z aes
que possue m t r a t a me nt o par a e x ecu o di r et a ou e x ecuo vi a Job.

Par a est es casos a r ot i na j est pr - di spost a a e x ecuo di r et a , n o ha v e ndo a necessi da de
de t r a t a me nt o vi a MsEx ecAut o, ou o t r a t a me nt o r e al i z a do pel a rot i na o mai s a dequ a do par a
a quel e vol u me de da dos.

O e x e mpl o cl ssi co dest a si t u ao par a i mpor t ao de l a na me nt os ou sal dos cont bei s. A
a pli cao ERP possui u ma rot i na de i nt egr a o de nomi na da Cont a bili z ao TXT ( CTBA500)
mas a rot i n a de l a na me nt os cont bei s ( CTBA102) pode ser e x ecut a da a t r a v s d a
MsEx ecAut o.

Par a i mpor t aes de sal dos e l a na me nt os de v e- se opt ar pel a utili z ao da r ot i n a de
Cont a bili z ao TXT, d e vi do aos t r a t a me nt os que a mesma p er mi t e a t r a v s das confi gur aes
da prpri a rot i na e m conj unt o com as pa r a met ri z aes do mdul o. O uso da CTBA102
Laa me nt os Cont bei s vi a MsEx ecAut o r ecome nda do par a r ot i n as de ma nut e no ou
f unci onali da des espec ficas / mel hori as, com por e x e mpl o o est or no de l a na me nt os cont bei s
se m a necessi da de de a v ali ar r egr as de cont a bi li z ao.



- 606 -

ADVPL Completo


41.1. Desenvolvendo aplicaes com MsExecAuto


Estrutura de uma rotina com execuo de MsExecAuto

E Defi ni o das v a ri v ei s de cont r ol e da MsEx ecAut o
E Mont a ge m dos ar r a ys d e par met ros
E Defi ni o dos pa r met r os esp ec fi cos da r ot i n a que ser e x ecut a da
E Cont rol e d e t r a nsa o
E Tr a t a me nt o do sucesso ou n o da op er ao

Variveis de controle

E Private lMsErroAuto
I ndi ca de se houv e er ro no f a t al dur a nt e a e x ecuo.

E Private lMsHelpAuto
Ha bili t a a ca pt ur a das me nsa ge ns d e er ro.

E Private lAutoErrNoFile
Desa bi li t a a ger a o do ar qui vo de l og pa dr o do si st e ma .


Montagem dos arrays de parmetros

E Tipos de arrays de parmetros:

Basi ca me nt e u ma MsEx ecAut o possui doi s t i pos d e a rr a ys d e pa r met r os : Arr a y d e
Da dos d e Ca beal ho e Arr a y de Da dos d e I t e ns.

Os e x e mpl os a segui r visa m i l ust r ar a ut i li z ao de ca da u ma dos t i pos de ar r a ys :

Ca dast r o de cli e nt es (MATA030) : Est a rot i na a t u ali z a a pe n as os da dos da t a bel a
SA1 Ca dast r o d e Cl i e nt es, por t a nt o ser n ecessri o a pe n as u m ar r a y de da dos
cont e ndo as i nf or maes que d e v er o ser gr a v a das na t a bel a SA1.

Docu me nt os d e e nt r a da (MATA103) : Est a r ot i na a t u ali z a basi ca me nt e os da dos
das t a bel as SF 1 Cabeal ho do Docu me nt o de Ent r a da e SD1 I t e ns do
Docu me nt o de e nt r a da , por t a nt o ser o necess ri os doi s arr a ys de da dos
cont e ndo as i nf or maes do ca b eal ho do docu me nt o d e e nt r a da e dos i t e ns do
docu me nt o de e nt r a da , se ndo que est e l ti mo t er su a est r ut ur a d e cont e do
r ep et i da par a ca da i t e m do docu me nt o.

Avi so de Recebi me nt o d e Car ga (MATA145) : Est a rot i n a a t uali z a basi ca me nt e os
da dos das t a bel as DB1 Avi so de Recebi me nt o de Car ga , DB2 Ca b eal ho do
docu me nt o r ecebi do e DB3 I t e ns do docu me nt o r ecebi do, por t a nt o so
necess ri os t r s arr a y de da dos cont e ndo as r espect i v as i nf or maes par a as
t a bel as DB1, DB2 e DB3, se ndo que as du as l ti mas t er o suas est r ut ur as de
cont e do r ep et i das par a ca da docu me nt o r ecebi do.



- 607 -

ADVPL Completo


E Estrutura dos arrays de parmetros:

Array de dados do cabealho (xAutoCab):

O ar r a y cont e ndo os d a dos do ca beal ho co mpost o por : Ca mpo, Cont e do e
Vali dao.

Ca da i t e m dest e ar r a y u m dos ca mpos da t a bel a de ca beal ho das i nf or maes
que ser o processa das pel a MsEx ecAut o. Com base nos e x e mpl os a nt eri or es, a
MsEx ecAut o da MATA030 possui a pe n as u m arr a y de par met ros no f or ma t o
x Aut oCa b, se ndo que a MATA103 utili z ar o x Aut oCa b par a a t a bel a SF 1 e a
MATA145 par a a t a bel a DB1.

Sintaxe:


AADD(xAutoCab,{Campo, xContedo, Validao})


Exemplo:


AADD(xAutoCab,{A1_FILIAL , xFilial(SA1) , Nil})
AADD(xAutoCab,{A1_COD , 000001 , Nil})
AADD(xAutoCab,{A1_LOJA , 01 , Nil})
AADD(xAutoCab,{A1_NOME , TESTE-000001 , Nil})

MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)


Array de dados dos itens (xAutoItens):

O a rr a y cont e ndo os da dos dos i t e ns t a mb m compost o por : Ca mpo, Cont e do
e Vali dao ; se ndo que a di f er e na est no f a t o de que par a ca da i t e m a ser
t r a t a do pel a MsEx ecAut o de v er ser r epet i da e pr e e nchi da a est r ut ur a do ar r a y
com as i nf or maes do mesmo.

Com base nos e x e mpl os a nt eri or es, a MsEx ecAut o da MATA030 n o possui u m
arr a y de par met ros no f or ma t o x Aut oI t e ns, j a MATA103 ut ili z ar o x Aut oI t e ns
par a a t a bel a SD1 e a MATA145 ut ili z ar doi s x Aut oI t e ns, se ndo o pri mei ro par a
a t a bel a DB2 e o segundo par a a t a b el a DB3.

Sintaxe:


<Estrutura de controle e repetio>

xAutoItem := {}

AADD(xAutoItem,{Campo, xContedo, Validao})

AADD(xAutoItens, xAutoItem)

</Estrutura>



- 608 -

ADVPL Completo


Exemplo:


AADD(xAutoCab,{F1_FILIAL , xFilial(SF1) , Nil})
AADD(xAutoCab,{F1_DOC , 000001 , Nil})
AADD(xAutoCab,{F1_SERIE , 1 , Nil})
AADD(xAutoCab,{F1_FORNECE , 000001 , Nil})
AADD(xAutoCab,{F1_LOJA , 01 , Nil})

For nX := 1 to 2

xAutoItem := {}

AADD(xAutoItem,{D1_FILIAL , xFilial(SD1) , Nil})
AADD(xAutoItem,{D1_DOC , 000001 , Nil})
AADD(xAutoItem,{D1_SERIE , 1 , Nil})
AADD(xAutoItem,{D1_FORNECE , 000001 , Nil})
AADD(xAutoItem,{D1_LOJA , 01 , Nil})
AADD(xAutoItem,{D1_ITEM , STRZERO(nx,04) , Nil})
AADD(xAutoItem,{D1_COD , STRZERO(nx,15) , Nil})
AADD(xAutoItem,{D1_QUANT , 100*nX , Nil})
AADD(xAutoItem,{D1_VUNIT , 5*nX , Nil})
AADD(xAutoItem,{D1_TOTAL , (100*nX)*(5*nX) , Nil})
AADD(xAutoItem,{D1_TES , 001 , Nil})

AADD(xAutoItens, xAutoItem)

Next nX

MsExecAuto({|x,y,z| MATA103(x,y,z)}, xAutoCab, xAutoItens, 3)


E Mtodo de atribuio de contedo Direto:
O mt odo di r et o consi st e e m a t ri bui r di r et a me nt e na mont a ge m do a rr a y de par met r os
o cont e do de ca da ca mpo que ser t r a t a do p el a MsEx ecAut o.

Est e mt odo o mai s comu m de ser ut ili z ado da do su a pr a t i ci da de, e p el a possi bili da de
do dese n vol v edor esp eci fi car some nt e os ca mpos obri ga t ri os par a a t a bel a e a quel es
que cont er o as i nf or maes g er a das por su a a pli cao.

Exemplo:


AADD(xAutoCab,{A1_FILIAL , xFilial(SA1) , Nil})
AADD(xAutoCab,{A1_COD , 000001 , Nil})
AADD(xAutoCab,{A1_LOJA , 01 , Nil})
AADD(xAutoCab,{A1_NOME , TESTE-000001 , Nil})

MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)





- 609 -

ADVPL Completo



E Mtodo de atribuio de contedo pela estrutura:
O mt odo d e a t ri bui o pel a est r ut ur a r ecome nd v el e m r ot i n as que ef et u a m a
i mpor t ao das i nf or maes a t r a v s da l ei t ur a de ar qui vos d e da dos, sej a m el es
CODEBASE ou vi a ba nco de da dos.

Est e mt odo consi st e e m compa r a r a est r ut ur a do a r qui vo de ori ge m ( a ser i mpor t a do)
cont r a a do a r qui vo de dest i no ( t r a t a do p el a MsEx ecAut o) . Dest a f or ma os ca mpos que
f or e m coi nci de nt es e nt r e o a r qui vo de ori ge m e o ar qui vo de d est i no ser o pr e e nchi dos
com as i nf or maes do ar qui vo i mpor t a do, caso cont r ri o os mes mos poder o ser
desconsi der a dos ou ser e m pr e e nchi dos com u m cont e do pa dr o.

Exemplo:


// Captura a estrutura da tabela padro do sistema
DbSelectArea("SN1")
DbSetOrder(1)
aStruSN1 := SN1->(DbStruct())

// Efetua a abertura do arquivo SN1 que ser importado
cArqSN1:= cDirArq+"SN1IMP"
IF File(cArqSN1+cFileExt)
dbUseArea(.T.,,cArqSN1+cFileExt,"SN1IMP",.F.,.F.)
IndRegua("SN1IMP",cArqSN1+OrdBagExt(),"N1_FILIAL+N1_CBASE+N1_ITEM",;
,,"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN1IMP no existe."+;
CRLF+"Verifique caminho informado.",1,0)
RETURN
ENDIF

// Efetua a leitura do arquivo a ser importado
DbSelectArea("SN1IMP")
DbGotop()
WHILE SN1IMP->(!Eof())

// Efetua a montagem do xAutoCab com base nas estruturas dos
// arquivos

FOR nX := 1 TO LEN(aStruSN1)
IF SN1IMP->(FieldPos(aStruSN1[nX][1]))>0
DO CASE
CASE EMPTY(SN1IMP->&(aStruSN1[nX][1]))
AADD(xAutoCab,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})

CASE aStruSN1[nX][2] == "C"
AADD(xAutoCab,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]),;
"",aStruSN1[nX][3]), NIL})

CASE aStruSN1[nX][2] == "N"
AADD(xAutoCab,{aStruSN1[nX][1],;
ABS(SN1IMP->&(aStruSN1[nX][1])), NIL})




- 610 -

ADVPL Completo


OTHERWISE
AADD(xAutoCab,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]), NIL})
ENDCASE
ELSE
AADD(xAutoCab,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})
ENDIF
NEXT nX

...

MsExecAuto({|x,y,z| ATFA010(x,y,z)}, xAutoCab, xAutoItens, 3)

END


Definio dos parmetros especficos da rotina que ser executada

Est e pont o no qu al o dese nvol v edor i ncl ui os t r a t a me nt os necess ri os a cor r et a e x ecu o da
rot i n a , al m de se us t r a t a me nt os espec fi cos, os qu ai s j ust i fi car a m o d ese nvol vi me nt o.

Ut ili z a ndo o mesmo e x e mpl o a nt eri or da ATF A010 Ca dast r o d e At i vos pode mos ci t ar doi s
t r a t a me nt os esp ec fi cos necess ri os pa r a a corr et a e x ecu o da MsEx ecAut o :

Chamada das perguntas da ATFA010:

A e x ecu o da f un o Pergunte( ATFA010,.F.) per mi t e que sej a defi ni dos os
cont e dos desej a dos par a os pa r met r os d a rot i n a de ca dast r o conf or me a
necessi da de da a pli cao, como por e x e mpl o per mi t i r a i ncl uso de u ma ch a pa de
be m e m br a nco ou n o ef et u ar a cont a bi li z ao da i ncl uso.

Atualizao das variavis de memria do ALIAS M- > para o SN1:

A e x ecuo da f un o RegToMemory( SN1,.T.) necess ri a par a a utili z ao da
f uno CRI AVAR( ) no mt odo de a t ri bui o pel a est r ut ur a .



Mui t as v e z es u ma est r ut ur a que f unci on a pa r a u m MsEx ecAut o pode n o
f unci onar par a out r o do mesmo t i po, de vi do as car act er st i cas i ndi vi du ai s de
ca da r ot i n a . Pode mos ci t ar os segui nt es e x e mpl os :

MATA103 ( Docu me nt o de Ent r a da ) : Par a t r a t a me nt o do t t ul o
fi n a ncei ro a ser ger a do pel a not a fi scal qua ndo o pa r met r o de
a t uali z ao de fi n a ncei ro da TES est a t i v a do, de v e ser i ncl u do
o segui nt e i t e m no ar r a y x Aut oCa b :

{ " E2_NATURE Z " , " NAT01 " , NI L } )

MATA650 ( Ab er t ur a d e or d e m d e produ o) : Par a que sej a m
ger a das as or de ns de produ o i nt er medi ri as n a a ber t ur a d e
u ma or d e m de pr odu o pri nci pal de v e ser i ncl u do o segui nt e
i t e m no ar r a y x Aut oCa b :

{ " AUTEXPLODE " , " S " , NI L } )



- 611 -

ADVPL Completo


Controle de transao

A utili z ao do cont rol e de t r a nsao p er mi t e gar a nt i r a i nt egri da de das i nf or maes gr a v a das
pel o processa me nt o.

Par a ut ili z ao do cont r ol e de t r a nsao na a plica o pode m ser ut ili z ados os s egui nt es bl ocos
de cont r ol e :

E Begin Transaction ... DisarmTransaction( ) ... End Transaction

Um bl oco de cdi go det er mi na do pel os coma ndos Begi n Tr a nsact i on . . . End Tr a nsact i on
t er su as i nf or maes a t u ali z a das some nt e se a nt es do e x ecu o do co ma ndo End
Tr a nsact i on n o f or e x ecut a da a f un o Di sar mTr a nsact i on( ) .

Dest a f or ma pod e- se i mpl e me nt ar u m cont rol e de t r a nsa o por i t e m processa do, se ndo
e x ecut a do o Di sar mTr a nsact i on( ) par a a quel e el e me nt o e m que houv e al gu m probl e ma
de pr ocessa me nt o.

Segui ndo est e mesmo r aci oc ni o, caso ocorr a u m er ro f a t al n a a pli cao, some nt e o i t e m
que est e m pr ocessa me nt o ser desconsi der a do, poi s a a pl i cao ERP ef et u a u m
Di sar Tr a nsact i on( ) a ut oma t i ca me nt e, f echa me nt o as t r a nsaes pe nd e nt es e
r est a ur a ndo as si t u aes a nt eri or es, mas a p e n as par a a quel es processa me nt o pr ot egi dos
pel o bl oco d e cont r ol e de t r a nsa o.




O coma ndo END TRANSACTI ON n o pod e t er su a i nt er pr et a o vi ncul a da a
u ma condi o. Nest es casos ocor r er u m err o de compi l ao i ndi ca ndo que o
bl oco a ber t o p el o co ma ndo BE GI N TRANSACTI ON n o f oi cor r e t a me nt e
f ech a do.


Exemplo:


AADD(xAutoCab,{A1_FILIAL , xFilial(SA1) , Nil})
AADD(xAutoCab,{A1_COD , 000001 , Nil})
AADD(xAutoCab,{A1_LOJA , 01 , Nil})
AADD(xAutoCab,{A1_NOME , TESTE-000001 , Nil})

BEGIN TRANSACTION

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
DisarmTransaction()
ENDIF

END TRANSACTION



- 612 -

ADVPL Completo



E BeginTran( ) ... DisarmTransaction( ) ... EndTran( )

As f unes Begi nTr a n( ) e EndTr a n( ) vi sa m per mi ti r que o t r mi no da t r a nsao sej a
condi ci on al , eli mi na ndo a li mi t ao da est r ut ur a BE GI N TRANSACTI ON . . . END
TRANSACTI ON.

Exemplo:


AADD(xAutoCab,{A1_FILIAL , xFilial(SA1) , Nil})
AADD(xAutoCab,{A1_COD , 000001 , Nil})
AADD(xAutoCab,{A1_LOJA , 01 , Nil})
AADD(xAutoCab,{A1_NOME , TESTE-000001 , Nil})

BeginTran()

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
DisarmTransaction()
ELSE
EndTran()
ENDIF

MsUnlockAll()



Nest e model o d e cont r ol e de t r a nsa o r eco me nd v el a ut ili z ao da f uno
MsUnl ock All ( ) par a dest r a v ar t odos os r egi st r os que est ej a m e v e nt u al me nt e
t r a v a dos.















- 613 -

ADVPL Completo



Tratamento de mensagens de erro

Com a ut ili z ao da f unci on ali da de MsEx ecAut o a a pli cao ERP di sponi bili z a di v ersos mt odos
par a vi su ali z ao e t r a t a me nt o das me nsa g e ns de er ro ocor ri das dur a nt e a e x ecu o da r ot i n a ,
se ndo est es :

Vi suali z ao do e v e nt o de er ro ;
Gr a v a o do e v e nt o de er ro e m ar qui vo t e xt o ;
Person al i z ao da gr a v ao do e v e nt o d e er ro.


E Visualizao do evento de erro

Par a vi suali z ao e m t el a do e v e nt o d e er ro ocor ri do dur a nt e o pr ocessa me nt o da
rot i na vi a MsEx ecAut o d e v e - se ut ili z ar a f uno Most r a Er ro( ) , conf or me o e x e mpl o :


Private lMsHelpAuto := .T.
Private lAutoErrNoFile := .F.

AADD(xAutoCab,{A1_FILIAL , xFilial(SA1) , Nil})
AADD(xAutoCab,{A1_COD , 000001 , Nil})
AADD(xAutoCab,{A1_LOJA , 01 , Nil})
AADD(xAutoCab,{A1_NOME , TESTE-000001 , Nil})

BEGIN TRANSACTION

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
MostraErro()
DisarmTransaction()
ENDIF

END TRANSACTION





O cont e do das v a ri v ei s PRI VATE d e cont rol e da MsEx ecAut o d e v e ser
confi gur a do conf or me a bai xo :

Pri v a t e l MsHel pAut o : = . T.
Pri v a t e l Aut oEr r NoFil e : = . F.



- 614 -

ADVPL Completo



E Gravao do evento de erro em arquivo texto

Par a gr a v a o e m ar qui vo no f or ma t o t e xt o do e v e nt o de er ro ocor ri do dur a nt e o
processa me nt o da rot i na vi a MsEx ecAut o d e v e - se ut ili z ar a f uno Most r a Er ro( ) ,
conf or me o e x e mpl o :


Private lMsHelpAuto := .T.
Private lAutoErrNoFile := .F.

AADD(xAutoCab,{A1_FILIAL , xFilial(SA1) , Nil})
AADD(xAutoCab,{A1_COD , 000001 , Nil})
AADD(xAutoCab,{A1_LOJA , 01 , Nil})
AADD(xAutoCab,{A1_NOME , TESTE-000001 , Nil})

BEGIN TRANSACTION

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
MostraErro(\system\)
DisarmTransaction()
ENDIF

END TRANSACTION





A f uno Most r a Er ro( ) possui o par met ro cPa t h o qual pode ser i nf or ma do
de duas f or mas :

Ape n as o di r et ri o : Se f or i nf or ma do a pe n as o di r et ri o ser
ger a do u m ar qui vo com de nomi n ao no f or ma t o SCx x x x x x. l og,
aonde x x x x x x ser u m n mero sequ e nci al ger a do i nt er n a me nt e
pel o si st e ma .

I nf or ma ndo o di r et ri o e o nome do a r qui vo : A f uno i r
r espei t ar o nome do ar qui vo i nf or ma do, sobr escr e ndo o
cont e do a nt eri or.





Caso sej a necess ri o ger a r u m ni co ar qui vo t e xt o cont e ndo t odos os
e v e nt os d e err o g er a dos pel os sucessi vos pr ocessa me nt os da MsEx ecAut o,
a f uno Most r a Err o( cPa t h) de v er ser ch a ma da a pe n as u ma v e z , ao
t r mi no do processa me nt o da r ot i n a .

I st o ocor r e poi s a f uno Most r a Err o( ) li mpa o cache d e e v e nt os de er ros
cont r ol a do pel a MsEx ecAut o.



- 615 -

ADVPL Completo



E Personalizao da gravao do evento de erro

Par a processa me nt os mai s vol u mosos, a g er ao d e di v ersos a r qui vos d e t e xt os ou
a t mesmo a g er ao d e u m ni co ar qui vo t e xt o cont e ndo t odos os e v e nt os de er ro
pode di fi cul t ar a a nli se e cor r e o dos probl e mas e ncont r a dos dur a nt e o
processa me nt o.

Dest a f or ma poss v el person al i z ar a gr a v a o do e v e nt o de err o, d e f or ma que o
mesmo sej a ger a do e m u m ar qui vo no f or ma t o . DBF, per mi ti ndo o v ncul o do r egi st r o
processa do com a me nsa ge m d e er ro ger a da .


Private lMSHelpAuto := .F.
Private lAutoErrNoFile := .T.

AADD(xAutoCab,{A1_COD , 000001 , Nil})
AADD(xAutoCab,{A1_LOJA , 01 , Nil})
AADD(xAutoCab,{A1_NOME , TESTE-000001 , Nil})

// Funo especfica que cria o arquivo no formato DBF que conter as
// mensagens de erro.
XDBFLOG()

BEGIN TRANSACTION

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
// Funo que retorna o evento de erro na forma de um array
aAutoErro := GETAUTOGRLOG()

// Funo especifica que converte o array aAutoErro em texto
// contnuo, com a quantidade de caracteres desejada por linha

// Funo especfica que efetua a gravao do evento de erro no
// arquivo previamente crado.
XGRVLOG(XCONVERRLOG(aAutoErro))

DisarmTransaction()
ENDIF

END TRANSACTION




As f unes esp ec fi cas XDBFLOG( ) , XC ONVERRLOG( ) e XGRVLOG( ) ser o
det al h a das no e x e mpl o compl et o d e ut il z a o d a f uno MsEx ecAut o( ) .





- 616 -

ADVPL Completo




Aplicao completa de importao utilizando MsExecAuto: Carga de imobilizado

#INCLUDE "PROTHEUS.CH"

/*/
+-----------------------------------------------------------------------
| Funo | IATF001 | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | IMPORTACAO DO CADASTRO DE ATIVO IMOBILIZADO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION IATF001()

LOCAL oProcess

PRIVATE oMainWnd

//Perguntas para parametrizacao da rotina (PARAMBOX)
//MVParBox01 - Tipo de informao (.DBF/.TXT)
//MVParBox02 - LayOut do arquivo (Padro / Especifico)
//MVParBox03 - Arquivo de dados (Consulta)
//MVParBox04 - Arquivo de layout (Consulta)
//MVParBox05 - Operacao (Incluir, Alterar, Excluir)
//MVParBox06 - Diretorio de Log (Consulta)
//MVParBox07 - Importa CIAP (SIM/NAO)

PRIVATE aTiposFile := {".DBF",".DTC",".TXT"}
PRIVATE MvParBox01 := 0
PRIVATE MvParBox02 := 0
PRIVATE MvParBox03 := ""
PRIVATE MvParBox04 := ""
PRIVATE MvParBox05 := 0
PRIVATE MvParBox06 := ""
PRIVATE MVParBox07 := 0

PRIVATE _cDirectory := ""

RpcSetType(3)
RpcSetEnv("99", "01",,,,,
{"CT1","SF9","SN1","SN2","SN3","SN4","SN5","SNG","SM2"})

SET DATE FORMAT "dd/mm/yyyy"

oMainWnd := TWindow():New( 000, 000, 001, 001, "Importao: Fichas do
imobilizado",,,,,,,,,,,,,,,,.T.)
oMainWnd:bInit := {|| IIF(IC001PARBX(),(oProcess:= MsNewProcess():New({|lEnd|
PROCATIVO(.F.,oProcess)}),oProcess:Activate(),oMainWnd:End()),oMainWnd:End())}
oMainWnd:Activate("ICONIZED")

RpcClearEnv()
RETURN


- 617 -

ADVPL Completo



Continuao:

/*/
+-----------------------------------------------------------------------
| Funo | PROCATIVO | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | PROCESSAMENTO DA IMPORTACAO DO CADASTRO DE IMOBILIZADO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

STATIC FUNCTION PROCATIVO(lEnd,oProcess)

Local aArea := GetArea()
Local aDadosSN1 := {}
Local aDadosSN3 := {}
Local aDadosSF9 := {}
Local aDadosTN1 := {}
Local aDadosTN2 := {}
Local aDadosTN3 := {}
Local aItemSN3 := {}
Local cArqSN1 := ""
Local cArqSN2 := ""
Local cArqSN3 := ""
Local cArqSA2 := ""
Local aStruSN1 := {}
Local aStruSN2 := {}
Local aStruSN3 := {}
Local aStruSF9 := {}
Local nX := 0
Local nTotRegs := 0
Local nProcRegs := 0
Local nPosDados := 0
Local cCodFor := ""
Local cLojaFor := ""
Local cDescFor := ""
Local cFilAtu := cFilAnt
Local cDirArq := Alltrim(MVParBox03)
Local cHistorico := ""
Local nX := 0
Local cFileExt := aTiposFile[MvParBox01]
Local lImpSF9 := MvParBox07==1
Local lImpSNG := .F. // Ainda nao implementado
Local cKeyImp := ""
Local aAutoErro := {}

// Tratamentos adicionais - arquivos especificos do cliente
Local cArqCTA := ""
Local cArqSM2 := ""
Local cIndSNG
Local nIndex := 0
Local cGrupo := ""
Local cContab := ""
Local aEntSNG := {}
Local cChapa := "000000"

Private lMsErroAuto := .F.
Private lMSHelpAuto := .F.

- 618 -

ADVPL Completo



Continuao:

Private lAutoErrNoFile := .T.

// Garante a abertura dos arquivos padres do sistema
DbSelectArea("CT1")
DbSetOrder(2) // FILIAL + COD.REDUZIDO

DbSelectArea("SM2")
DbSetOrder(1)

DbSelectArea("SN1")
DbSetOrder(1)
aStruSN1 := SN1->(DbStruct())

DbSelectArea("SN2")
DbSetOrder(1)
aStruSN2 := SN2->(DbStruct())

DbSelectArea("SN3")
DbSetOrder(1)
aStruSN3 := SN3->(DbStruct())

DbSelectArea("SF9")
DbSetOrder(1)
aStruSF9 := SF9->(DbStruct())

// Prepara o arquivo no formato .DBF para gravao dos eventos de erro
XDBFLOG()

DbSelectArea("SNG")
cIndSNG := CRIATRAB(Nil,.F.)
IndRegua("SNG",cIndSNG,"NG_FILIAL+NG_CCONTAB",,,"Selecionando Registros...")
nIndex := RetIndex()
#IFNDEF TOP
DbSetIndex(cIndSNG+OrdBagExt())
#ENDIF
DbSetOrder(nIndex)

PERGUNTE("ATF010",.F.)
MV_PAR02 := 1 // Permite repetir chapa definido como sim

IF Select("SN1IMP") > 0
DbSelectArea("SN1IMP")
DbCloseArea()
ENDIF
IF Select("SN2IMP") > 0
DbSelectArea("SN2IMP")
DbCloseArea()
ENDIF
IF Select("SN3IMP") > 0
DbSelectArea("SN3IMP")
DbCloseArea()
ENDIF
IF Select("SF9IMP") > 0
DbSelectArea("SF9IMP")
DbCloseArea()
ENDIF


- 619 -

ADVPL Completo



Continuao:

IF Select("CTAIMP") > 0
DbSelectArea("CTAIMP")
DbCloseArea()
ENDIF

cArqSN1:= cDirArq+"SN1IMP"
IF File(cArqSN1+cFileExt)
dbUseArea(.T.,,cArqSN1+cFileExt,"SN1IMP",.F.,.F.)
IndRegua("SN1IMP",cArqSN1+OrdBagExt(),"N1_FILIAL+N1_CBASE+N1_ITEM",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN1IMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

cArqSN2:= cDirArq+"SN2IMP"
IF File(cArqSN2+cFileExt )
dbUseArea(.T.,,cArqSN2+cFileExt,"SN2IMP",.F.,.F.)
IndRegua("SN2IMP",cArqSN2+OrdBagExt(),;
"N2_FILIAL+N2_CBASE+N2_ITEM+N2_TIPO+N2_SEQ",,,"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN2IMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

cArqSN3:= cDirArq+"SN3IMP"
IF File(cArqSN3+cFileExt)
dbUseArea(.T.,,cArqSN3+cFileExt,"SN3IMP",.F.,.F.)
IndRegua("SN3IMP",cArqSN3+OrdBagExt(),"N3_FILIAL+N3_CBASE+N3_ITEM",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN3IMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

IF lImpSF9
cArqSF9:= cDirArq+"SF9IMP"
IF File(cArqSF9+cFileExt )
dbUseArea(.T.,,cArqSF9+cFileExt,"SF9IMP",.F.,.F.)
IndRegua("SF9IMP",cArqSF9+OrdBagExt(),"F9_FILIAL+F9_CODIGO",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SF9IMP no existe."+;
CRLF+"Verifique caminho informado.",1,0)
RETURN
ENDIF
ENDIF


- 620 -

ADVPL Completo



Continuao:

cArqCTA:= cDirArq+"CTAIMP"
IF File(cArqCTA+cFileExt)
dbUseArea(.T.,,cArqCTA+cFileExt,"CTAIMP",.F.,.F.)
IndRegua("CTAIMP",cArqCTA+OrdBagExt(),"CODIGO_CON",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO CTAIMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

cArqSM2:= cDirArq+"SM2IMP"
IF File(cArqSM2+cFileExt)
dbUseArea(.T.,,cArqSM2+cFileExt,"SM2IMP",.F.,.F.)
IndRegua("SM2IMP",cArqSM2+OrdBagExt(),"DTOS(BTN_DATA)",,,"Selecionando
Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SM2IMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

lMSHelpAuto := .T.
DbSelectArea("SN1IMP")
DbGotop()

//
// Preparao para inicio do processamento
//
cKeyImp := DTOS(dDatabase)+StrZero(HoraToInt(Time()),6)
// Identidficador dos registros do log de erros

ConOut("Processando importao:")
ConOut("Inicio: "+Time())
ConOut("Registros SN1IMP: "+CValToChar(SN1IMP->(RecCount())))
ConOut("Registros SN2IMP: "+CValToChar(SN2IMP->(RecCount())))
ConOut("Registros SN3IMP: "+CValToChar(SN3IMP->(RecCount())))

dbEval( {|x| nTotRegs++ },,{||SN1IMP->(!EOF())})
oProcess:SetRegua1(nTotRegs+2)
oProcess:IncRegua1("Iniciando processamento...")
oProcess:SetRegua2(nTotRegs+1)
oProcess:IncRegua2("Ficha de Ativo:")

DbSelectArea("SN1IMP")
DbGotop()


- 621 -

ADVPL Completo



Continuao:

While SN1IMP->(!Eof())

nProcRegs++
oProcess:IncRegua1("Processando item: "+CValToChar(nProcRegs)+" / "+;
CValToChar(nTotRegs))
oProcess:IncRegua2("Ficha de Ativo: ")

aDadosSN1 := {}
aDadosSN3 := {}

// Compatibilizao para utilizao do CRIAVAR()
REGTOMEMORY("SN1",.T.)

//Monstagem do array com dados sem tratamento e com as informao da IMP

FOR nX := 1 TO LEN(aStruSN1)
IF SN1IMP->(FieldPos(aStruSN1[nX][1]))>0
DO CASE
CASE EMPTY(SN1IMP->&(aStruSN1[nX][1]))
AADD(aDadosSN1,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})
CASE aStruSN1[nX][2] == "C"
AADD(aDadosSN1,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]),;
"",aStruSN1[nX][3]), NIL})
CASE aStruSN1[nX][2] == "N"
AADD(aDadosSN1,{aStruSN1[nX][1],;
ABS(SN1IMP->&(aStruSN1[nX][1])), NIL})
OTHERWISE
AADD(aDadosSN1,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]), NIL})
ENDCASE
ELSE
AADD(aDadosSN1,{aStruSN1[nX][1], CRIAVAR(aStruSN1[nX][1]),;
NIL})
ENDIF
NEXT nX

// Alterao das informaes do array de acordo com a necessidade
// AADD(aDadosTN1,{"CAMPO",CONTEUDO,"VALIDACAO"})
aDadosTN1 := {}

// ALTERACAO DO ARRAY ADADOSSN1 COM AS INFORMACOES TRABALHADAS E
// ARMAZENADAS EM ADADOSTN1
// AADD(aDadosTN1,{"N1_XXXXXX" ,xConteudo ,Nil})

For nX := 1 TO LEN(aDadosTN1)
IF (nPosField := aScan(aDadosSN1,{|aDadoSN1| aDadosSN1[1] ==;
aDadosTN1[nX][1]})) > 0
aDadosSN1[nPosField][2] := aDadosTN1[nX][2]
aDadosSN1[nPosField][3] := aDadosTN1[nX][3]
ENDIF
Next nX


- 622 -

ADVPL Completo



Continuao:

IF SN1->(DbSeek(aDadosSN1[1][2]+aDadosSN1[2][2]+aDadosSN1[3][2]))
ConOut("Registro j importado: "+;
aDadosSN1[1][2]+"/"+aDadosSN1[2][2]+"/"+aDadosSN1[3][2])
ConOut("Registros importados com sucesso: "+CValToChar(nProcRegs))
SN1IMP->(dbSkip())
Loop
ENDIF

SN3IMP->(DbSeek(SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)))
While SN3IMP->(!Eof()) .AND. SN3IMP->(N3_FILIAL+N3_CBASE+N3_ITEM) ==;
SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)

aItensSN3 := {}

// Monstagem do array com dados sem tratamento e com as informaes

FOR nX := 1 TO LEN(aStruSN3)
IF SN3IMP->(FieldPos(aStruSN3[nX][1]))>0
DO CASE
CASE EMPTY(SN3IMP->&(aStruSN3[nX][1]))
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), NIL})
CASE aStruSN3[nX][2] == "C"
AADD(aItensSN3,{aStruSN3[nX][1],;
SN3IMP->&(aStruSN3[nX][1]),;
aStruSN3[nX][3]), NIL})
CASE aStruSN3[nX][2] == "N"
AADD(aItensSN3,{aStruSN3[nX][1],;
ABS(SN3IMP->&(aStruSN3[nX][1])),;
".T."})

OTHERWISE
AADD(aItensSN3,{aStruSN3[nX][1],;
SN3IMP->&(aStruSN3[nX][1]), NIL})

ENDCASE
ELSEIF aStruSN3[nX][2] == "N"
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), ".T."})
ELSE
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), NIL})
ENDIF
NEXT nX

// Alterao das informaes do array de acordo com a necessidade
// AADD(aDadosTN3,{"CAMPO" ,CONTEUDO,"VALIDACAO"})
aDadosTN3 := {}

// ALTERACAO DO ARRAY aItenSN3 COM AS INFORMACOES TRABALHADAS E
// ARMAZENADAS EM aDadosTN3

For nX := 1 TO LEN(aDadosTN3)
IF (nPosField := aScan(aItensSN3,{|aItenSN3| aItenSN3[1] ==;
aDadosTN3[nX][1]})) > 0
aItensSN3[nPosField][2] := aDadosTN3[nX][2]
aItensSN3[nPosField][3] := aDadosTN3[nX][3]

- 623 -

ADVPL Completo



Continuao:

ENDIF
Next nX

AADD(aDadosSN3,aItensSN3)
SN3IMP->(DbSkip())
Enddo

IF Len(aDadosSN1) > 0 .AND. Len(aDadosSN3) > 0

ConOut("Iniciando MsExecAuto - ATFA010: "+Time())

Begin Transaction
cFilAnt := SN1IMP->N1_FILIAL
lMsErroAuto := .F.
MSExecAuto({|x,y,z| Atfa010(x,y,z)},aDadosSN1,aDadosSN3,3)
// Cabealho, Itens e Opo

ConOut("Finalizada MsExecAuto - ATFA010: "+Time())

IF lMsErroAuto
aAutoErro := GETAUTOGRLOG()
XGRVLOG(cKeyImp,;
SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM),;
SN1IMP->N1_DESCRIC, XCONVERRLOG(aAutoErro))
DisarmTransaction()
MostraErro(Alltrim(MVParBox06))
ELSE

// TRATAMENTO DA DESCRIO ESTENDIDA (SN2)
SN2IMP->(DbSeek(SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)))
cHistorico := ALLTRIM(SN2IMP->N2_HISTOR1) +;
ALLTRIM(SN2IMP->N2_HISTOR2)

For nX := 1 to Len(cHistorico) STEP 40

RECLOCK("SN2",.T.)
SN2->N2_FILIAL := SN1->N1_FILIAL
SN2->N2_CBASE := SN1->N1_CBASE
SN2->N2_ITEM := SN1->N1_ITEM
SN2->N2_TIPO := "01"
SN2->N2_SEQ := "001"
SN2->N2_SEQUENC := STRZERO(nX,2)
SN2->N2_HISTOR := SUBSTR(cHistorico,nX,40)
MSUNLOCK()

NEXT nX

// TRATAMENTO DA CARGA DO CIAP
IF lImpSF9
IATFCIAP(aStruSF9,aDadosSF9)
ENDIF

ConOut("Registros importados com sucesso: "+;
CValToChar(nProcRegs))

ENDIF
End Transaction

- 624 -

ADVPL Completo



Continuao:

ENDIF

SN1IMP->(DbSkip())
Enddo

oProcess:IncRegua1("Processamento finalizado")

DbSelectArea("SN1IMP")
DbCloseArea()
IF File(cArqSN1+OrdBagExt())
FErase(cArqSN1+OrdBagExt())
ENDIF

DbSelectArea("SN2IMP")
DbCloseArea()
IF File(cArqSN2+OrdBagExt())
FErase(cArqSN2+OrdBagExt())
ENDIF

DbSelectArea("SN3IMP")
DbCloseArea()
IF File(cArqSN3+OrdBagExt())
FErase(cArqSN3+OrdBagExt())
ENDIF

IF lImpSF9
DbSelectArea("SF9IMP")
DbCloseArea()
IF File(cArqSF9+OrdBagExt())
FErase(cArqSF9+OrdBagExt())
ENDIF
ENDIF

IF lImpSNG
DbSelectArea("SNGIMP")
DbCloseArea()
IF File(cIndSNG+OrdBagExt())
FErase(cIndSNG+OrdBagExt())
ENDIF
ENDIF

DbSelectArea("CTAIMP")
DbCloseArea()
IF File(cArqCTA+OrdBagExt())
FErase(cArqCTA+OrdBagExt())
ENDIF

DbSelectArea("SM2IMP")
DbCloseArea()
IF File(cArqSM2+OrdBagExt())
FErase(cArqSM2+OrdBagExt())
ENDIF






- 625 -

ADVPL Completo



Continuao:

DbSelectArea("LOGIMP")
DbCloseArea()

ConOut("Total de registros importados: "+CValToChar(nProcRegs))
ConOut("Trmino da importao: "+Time())

cFilAnt := cFilAtu
RestArea(aArea)
RETURN

/*/
+-----------------------------------------------------------------------
| Funo | CT001PARBX | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | TELA DE PARAMETROS ESPECIFICOS DA ROTINA CUSTOMIZADA |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

STATIC FUNCTION IC001PARBX()

LOCAL aParamBox := {}
LOCAL cTitulo := "Importacao de cadastros"
LOCAL aRet := {}
LOCAL bOk := {|| .T.}
LOCAL aButtons := {}
LOCAL lCentered := .T.
LOCAL nPosx
LOCAL nPosy
LOCAL cLoad := ""
LOCAL lCanSave := .T.
LOCAL lUserSave := .T.
LOCAL nX := 0
LOCAL lRet := .F.

AADD(aParamBox,{2,"Tipo de informao" ,1 ,aTiposFile ,060,;
"AllwaysTrue()", .T.})
AADD(aParamBox,{2,"LayOut do arquivo " ,1 ,;
{"Padro","Especifico"},060, "AllwaysTrue()", .T.})
AADD(aParamBox,{1,"Diretorio de dados" ,Space(60) ,;
"@!","AllwaysTrue()","HSSDIR" ,".T.",120,.T.})
AADD(aParamBox,{1,"Arquivo de layout " ,Space(60) ,;
"@!","AllwaysTrue()","" ,".T.",120,.F.})
AADD(aParamBox,{2,"Operacao " ,1 ,;
{"Incluir","Alterar","Excluir"},060, "AllwaysTrue()", .T.})
AADD(aParamBox,{1,"Diretorio de Log " ,Space(60) ,;
"@!","AllwaysTrue()","HSSDIR" ,".T.",120,.F.})
AADD(aParamBox,{2,"Importa CIAP " ,1 ,;
{"Sim","No"} ,060, "AllwaysTrue()", .T.})

lRet := ParamBox(aParamBox, cTitulo, aRet, bOk, aButtons, lCentered, nPosx,;
nPosy, /*oMainDlg*/ , cLoad, lCanSave, lUserSave)





- 626 -

ADVPL Completo



Continuao:

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

RETURN lRet


/*/
+-----------------------------------------------------------------------
| Funo | IATFCIAP | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | IMPORTACAO DO LIVRO FISCAL CIAP |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION IATFCIAP(aStruSF9,aDadosSF9)
Local aDadosCIAP := {}
Local nX := 0
Local nPosSF9 := 0

// Monta array com dados padres do SF9 de acordo com o SX3
FOR nX := 1 to Len(aStruSF9)
AADD(aDadosCIAP,{aStruSF9[nX][1],CRIAVAR(aStruSF9[nX][1]),NIL})
NEXT nX

// Atualiza dados do array com as informaes presentes no SN1
FOR nX := 1 to Len(aDadosSF9)
IF (nPosSF9 := aScan(aDadosCIAP,{|aLinhaCIAP| aLinhaCIAP[1] ==
aDadosSF9[nX][1]})) > 0
aDadosCIAP[nPosSF9][2] := aDadosSF9[nX][2]
ENDIF
NEXT nX

ConOut("Iniciando MsExecAuto - ATFCIAP: "+Time())
lMsErroAuto := .F.
MSExecAuto({|x,y| U_ATFCIAP(x,y)},aDadosCIAP,3) // Dados e Opo
ConOut("Finalizada MsExecAuto - ATFCIAP: "+Time())

RETURN lMsErroAuto


- 627 -

ADVPL Completo



Continuao:

/*/
+-----------------------------------------------------------------------
| Funo | XDBFLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | CRIACAO DO ARQUIVO DBF PARA TRATAMENTO DOS EVENTOS DE ERR|
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION XDBFLOG()
LOCAL aCampos := {}
LOCAL cArqLog := MVParBox06+"LOGIMP"+GetDbExtension()

IF !File(cArqLog)
AADD(aCampos,{"CKEYIMP" ,"C",014,0})
AADD(aCampos,{"CKEYREG" ,"C",020,0})
AADD(aCampos,{"CDESCR" ,"C",040,0})
AADD(aCampos,{"CSEQMSG" ,"C",003,0})
AADD(aCampos,{"CMSGERR" ,"C",254,0})
dbCreate(cArqLog,aCampos,__LocalDriver)
ENDIF

dbUseArea(.T., __LocalDriver, cArqLog, "LOGIMP", .T., .F.)
RETURN

/*/
+-----------------------------------------------------------------------
| Funo | XGRVLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | GRAVACAO DA MENSAGEM DE ERRO NO ARQUIVO DBF DE CONTROLE |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION XGRVLOG(cKeyImp, cKeyReg, cDescReg, cMsgErr)

LOCAL cSeqLog := "000"

FOR nX := 1 TO Len(cMsgErr) STEP 254

cSeqLog := SOMA1(cSeqLog)
RECLOCK("LOGIMP",.T.)
LOGIMP->CKEYIMP := cKeyImp
LOGIMP->CKEYREG := cKeyReg
LOGIMP->CDESCR := cDescReg
LOGIMP->CSEQMSG := cSeqLog
LOGIMP->CMSGERR := SUBSTR(cMsgErr,nX,254)
MSUNLOCK()

NEXT nX

RETURN


- 628 -

ADVPL Completo



Continuao:

/*/
+-----------------------------------------------------------------------
| Funo | XCONVERRLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | CONVERTE O ARRAY AAUTOERRO EM TEXTO CONTINUO. |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

STATIC FUNCTION XCONVERRLOG(aAutoErro)

LOCAL cRet := ""
LOCAL nX := 1

FOR nX := 1 to Len(aAutoErro)
cRet += aAutoErro[nX]+CHR(13)+CHR(10)
NEXT nX

RETURN cRet



























- 629 -

ADVPL Completo




42. Recursos de envio de e- mail


Nest e t pi co ser o d escri t as as f unes da l i ngu a ge m ADVPL que per mi t e m o e nvi o e o
r ecebi me nt o d e me nsa g e ns a t r a v s d e e - mai l s.

Funes para manipulao de e- mails

CALLPROC
MAILSMTPON
MAILPOPON
MAILSMTPOFF
MAILPOPOFF
MAILRECEIVE
MAILAUTH
POPMSGCOUNT
MAILSEND
MAILGETERR

Detalhamento das funes de manipulao de e- mails

CALLPROC( )

Mt odo do obj et o oRpcSr v que p er mi t e a ut ili z ao de t odas as f unes d e e nvi o e
r ecebi me nt o d e e - mail descri t as nest e t pi co.

E Sintaxe: CallProc(cFuncao, xParam1, ..., xParamN)

E Parmetros:

cFuncao Nome da f uno ou mt odo do obj et o oRpcSr v que ser e x ecut a do.
xParamN Par met r os da f uno ou mt odo que ser e x ecut a do.

E Retorno:

Nenhum .


- 630 -

ADVPL Completo


MAILSMTPON( )

At i v a u ma cone x o com o ser vi o d e SMTP pa r a a t hr e a d a t i v a .

E Sintaxe: MailSmtpOn( cServer, cUser, cPass, nTimeOut)

E Sintaxe clssica:


CONNECT SMTP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN
SERVER oRpcSrv RESULT lResult


E Parmetros:

Cserver Ender eo do ser vi dor par a cone x o
Cuser Nome do usu ri o pa r a a ut e nt i cao no ser vi dor.
CPass Se nha do usu ri o par a a ut e nt i cao no ser vi dor.
NTimeOut Te mpo de esper a pa r a oper ao de a ut e nt i cao.

E Retorno:

Lgico I ndi ca se f oi r e al i z a da com sucesso a con e x o com o ser vi dor i ndi ca do.


MAILPOPON( )

At i v a u ma cone x o com o ser vi o d e POP par a a t hr e a d a t i v a . - > l Ret ur n

E Sintaxe: MailPopOn( cServer, cUser, cPass, nTimeOut)

E Sintaxe clssica:


CONNECT POP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN
SERVER oRpcSrv RESULT lResult


E Parmetros:

Cserver Ender eo do ser vi dor par a cone x o
Cuser Nome do usu ri o pa r a a ut e nt i cao no ser vi dor.
CPass Se nha do usu ri o par a a ut e nt i cao no ser vi dor.
NTimeOut Te mpo de esper a pa r a oper ao de a ut e nt i cao.

E Retorno:

Lgico I ndi ca se f oi r e al i z a da com sucesso a con e x o com o ser vi dor i ndi ca do.


- 631 -

ADVPL Completo



MAILSMTPOFF( )

Encer r a a con e x o com o ser vi o d e SMTP.

E Sintaxe: MailSmtpOff( )

E Sintaxe clssica:


DISCONNECT SMTP SERVER IN SERVER oRpcSrv RESULT lResult


E Parmetros:

Nenhum .

E Retorno:

Lgico I ndi ca se a oper a o f oi r e ali z a da com sucesso.


MAILPOPOFF( )

Encer r a a con e x o com o ser vi o d e POP

E Sintaxe: MailPopOff( )

E Sintaxe clssica:


DISCONNECT POP SERVER IN SERVER oRpcSrv RESULT lResult


E Parmetros:

Nenhum .

E Retorno:

Lgico I ndi ca se a oper a o f oi r e ali z a da com sucesso.


- 632 -

ADVPL Completo



MAILRECEIVE( )

Ef et u a o r ecebi me nt o d e u m e - mail , sal v a ndo- o no l ocal defi ni do.

E Sintaxe: MailReceive(nNumber, @cFrom, @cTo, @cCc, @cBcc, @cSubject,
@cBody, @aFiles, cPath, lDelete)

E Sintaxe clssica:


RECEIVE MAIL MESSAGE nNumber FROM cFrom TO cTo CC cCc BCC cBcc SUBJECT
cSubject BODY cBody ATTACHMENT aFiles SAVE IN cPath DELETE IN SERVER oRpcSrv
RESULT lResult


E Parmetros:

nNumber N mer o da me nsa g e m que de v er ser r ecebi da . Est e n mer o e m f uno da
qu a nti da de de me nsa ge ns n a cai x a de e - mai l s.
cFrom Vari v el l ocal do f ont e que ser a t u ali z a da com o r e met e nt e da me nsa g e m.
cTo Vari v el l ocal do f ont e que ser a t u ali z a da com o dest i n a t ri o da me nsa ge m.
cCc Vari v el l ocal do f ont e que ser a t u ali z a da com a cont a copi a da n a
me nsa ge m.
cBcc Vari v el l ocal do f ont e que ser a t uali z a da com a cont a copi a da e m cpi a
ocul t a na me nsa ge m.
cSubject Vari v el l ocal do f ont e que ser a t u ali z a da com o assunt o da me nsa g e m.
cBody Vari v el l ocal do f ont e que ser a t u ali z a da com cor po da me nsa ge m.
aFiles Vari v el l ocal do f ont e que ser a t u ali z a da os nomes dos a n e x os da
me nsa ge m.
cPath Di r et ri o no qu al ser o sal vos os a n e x os da me nsa ge m.
lDelete I ndi ca se a me nsa g e m de v er ser a pa ga da do ser vi dor de e - mai l s a ps su a
r ecepo pel a a pli cao.

E Retorno:

Lgico I ndi ca se a op er a o de r ecebi me nt o de me nsa ge ns f oi r e al i z ada com
sucesso.







- 633 -

ADVPL Completo



MAILAUTH( )

F uno que e x ecut a a a ut e nt i cao do usu ri o no ser vi o a t i vo.

E Sintaxe: MailAuth(cUser, cPassword)

E Parmetros:

cUser Nome do usuri o pa r a v ali dao da con e x o co m o ser vi dor.
cPassword Se nha do usu ri o par a v ali dao da cone x o co m o ser vi dor.

E Retorno:

Lgico I ndi ca se f oi r e al i z a da a a ut e nt i cao do usuri o com sucesso.



A f uno Mail Aut h( ) dev er ser ut ili z a da obri ga t ori a me nt e a ps a a ber t ur a da
cone x o com o ser vi dor , sej a el e d e e nvi o ou r ecebi me nt o d e me nsa ge ns.



Par a v al i dao da cone x o se mpr e ef et ue a v eri fi cao com o usu ri o cont e ndo
o e nder eo co mpl et o do e - mai l , e caso necessri o some nt e com o usu ri o,
eli mi n a ndo o r est a nt e do e nder eo a ps o ca r act er e @.

l Resul t : = Mail Aut h( All t ri m( cE mail ) , All t ri m( cPass) )
/ / Se n ao consegui u f a z er a Aut e nt i cacao usa ndo o E- mai l compl et o, t e nt a
/ / f a z er a a ut e nt i cacao usa ndo a pe n as o nome de usu ari o do E- mail .
I f !l Resul t
nA : = At ( " @" , cE mai l )
cUser : = I f ( nA > 0, Subs( cE mai l , 1, nA- 1) , cE mail )
l Resul t : = Mail Aut h( All t ri m( cUser ) , Al l t ri m( cPass) )
Endi f











- 634 -

ADVPL Completo



POPMSGCOUNT( )

Veri fi ca qu a nt as me nsa ge ns e xi st e m n a cai x a de e nt r a da do ser vi o POP a t i vo.

E Sintaxe: PopMsgCount( @nMsgCount)

E Sintaxe clssica:


POP MESSAGE COUNT nMsgCount IN SERVER oRpcSrv RESULT lResult


E Parmetros:

nMsgCount Vari v el l ocal do f ont e que ser a t u ali z a da com a qua nt i da de de me nsa ge ns
di spon v ei s par a r ecebi me nt o n a cai x a de e - mail s.

E Retorno:

Lgico I ndi ca se f oi r e al i z a do o acesso a cai x a de me nsa ge ns.


MAILSEND( )

Envi a u m e- mail utili z a ndo a ser vi o d e SMTP a t i vo.

E Sintaxe: MailSend(cFrom, aTo, aCc, aBcc, cSubject, cBody, aFiles, lText)

E Sintaxe clssica:


SEND MAIL FROM cFrom TO aTo,... CC aCc,... BCC aBcc,... SUBJECT cSubject BODY
cBody FORMAT TEXT ATTACHMENT aFiles,... IN SERVER oRpcSrv RESULT lResult


E Parmetros:

cFrom Ender eo de e - mai l do r e me nt e da me nsa g e m.
aTo Arr a y cont e ndo os e nd er eos d e e - mai l s dos d est i n a t ri os da me nsa ge m.
aCc Arr a y cont e ndo os e nd er eos d e e - mai l s dos copi a dos n a me nsa g e m.
aBcc Arr a y cont e ndo os e nder eos d e e- mai l s dos copi a dos de f or ma ocul t a n a
me nsa ge m.
cSubject Te xt o d e assunt o do e - mail .
cBody Te xt o da me nsa g e m do e - mail .
aFiles Arr a y cont e ndo os nomes dos ar qui vos qu e ser o a ne x a dos a me nsa g e m.
lText I ndi ca se o cor po do e - mail est e m f or ma t o t e xt o.

E Retorno:

Lgico I ndi ca se a oper a o d e e nvi o de me nsa ge ns f oi r e ali z a da com sucesso.

- 635 -

ADVPL Completo



MAILGETERR( )

Ret or n a o err o qu e ocor r e u no e nvi o do e - mail .

E Sintaxe: MailGetErr( )

E Sintaxe clssica:


GET MAIL ERROR cErrorMsg IN SERVER oRpcSrv


E Parmetros:

Nenhum .

E Retorno:

Caracter Me nsa g e m d e er r o ocor ri da no pr ocessa me nt o do e nvi o ou r ecebi me nt o dos
e- mail s.



Exemplos de utilizao das funcionalidades de envio e recebimento de e- mail


Envio de mensagens utilizando sintaxe clssica


#include "protheus.ch"
#include "tbiconn.ch"
#include "AP5MAIL.CH"

/*/
+-----------------------------------------------------------------------
| Funo | SENDMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | ENVIO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION SendMail(_lJob)

Local lResulConn := .T.
Local lResulSend := .T.
Local cError := ""

Local cServer := AllTrim(GetMV("MV_RELSERV"))
Local cEmail := AllTrim(GetMV("MV_RELACNT"))
Local cPass := AllTrim(GetMV("MV_RELPSW"))
Local lRelauth := GetMv("MV_RELAUTH")

Local cDe := cEmail
Local cPara := "arnaldojr@microsiga.com.br"

- 636 -

ADVPL Completo



Continuao:

Local cCc := ""
Local cAssunto := "Teste de envio de e-mail: Curso ADVPL"
Local cAnexo := "\SYSTEM\lgrl99.bmp"
Local cMsg := Space(200)

Default _lJob := .T.

cMsg := "--------------------------------------------------"
cMsg += "CURSO DE ADVPL "
cMsg += "--------------------------------------------------"
cMsg += "Voc est recebendo um e-mail do curso de ADVPL avanado"

CONNECT SMTP SERVER cServer ACCOUNT cEmail PASSWORD cPass RESULT lResulConn

If !lResulConn
GET MAIL ERROR cError
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif

// Sintaxe: SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
// Todos os e-mail tero: De, Para, Assunto e Mensagem, porm precisa analisar
se tem: Com Cpia e/ou Anexo

If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
//Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta fazer
a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif

Endif

If lResult
If Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg RESULT
lResulSend
Else
If Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf !Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
RESULT lResulSend
Endif
Endif

- 637 -

ADVPL Completo



Continuao:

If !lResulSend
GET MAIL ERROR cError
If _lJob
ConOut(Padc("Falha no Envio do e-mail "+cError,80))
Else
MsgAlert("Falha no Envio do e-mail " + cError)
Endif
Endif

Else

If _lJob
ConOut(Padc("Falha na autenticao do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticao do e-mail:" + cError)
Endif

Endif

DISCONNECT SMTP SERVER

IF lResulSend
If _lJob
ConOut(Padc("E-mail enviado com sucesso",80))
Else
MsgInfo("E-mail enviado com sucesso" + cError)
Endif
ENDIF

RETURN lResulSend
















- 638 -

ADVPL Completo



Envio de mensagens utilizando funes


#include "protheus.ch"
#include 'tbiconn.ch'
#include "AP5MAIL.CH"

/*/
+-----------------------------------------------------------------------
| Funo | SENDMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | ENVIO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION FSendMail(_lJob)

Local lResulConn := .T.
Local lResulSend := .T.
Local lResult := .T.
Local cError := ""

Local cServer := AllTrim(GetMV("MV_RELSERV"))
Local cEmail := AllTrim(GetMV("MV_RELACNT"))
Local cPass := AllTrim(GetMV("MV_RELPSW"))
Local lRelauth := GetMv("MV_RELAUTH")

Local cDe := cEmail
Local cPara := "arnaldojr@microsiga.com.br"
Local cCc := ""
Local cBcc := ""
Local cAssunto := "Teste de envio de e-mail: Curso ADVPL"
Local cAnexo := "\SYSTEM\lgrl99.bmp"
Local cMsg := Space(200)

Default _lJob := .F.

cMsg := "--------------------------------------------------"
cMsg += "CURSO DE ADVPL "
cMsg += "--------------------------------------------------"
cMsg += "Voc est recebendo um e-mail do curso de ADVPL avanado"

//CONNECT SMTP SERVER cServer ACCOUNT cEmail PASSWORD cPass RESULT lResulConn
lResulConn := MailSmtpOn( cServer, cEmail, cPass)

If !lResulConn
//GET MAIL ERROR cError
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif



- 639 -

ADVPL Completo


Continuao:

// Sintaxe: SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
// Todos os e-mail tero: De, Para, Assunto e Mensagem, porm precisa analisar
se tem: Com Cpia e/ou Anexo

If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
//Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta fazer
a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif

Endif

If lResult

/*
If Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg RESULT
lResulSend
Else
If Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf !Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
RESULT lResulSend
Endif
Endif
*/

lResulSend := MailSend(cDe,{cPara},{cCc},{cBcc},cAssunto,cMsg,{cAnexo},.T.)

If !lResulSend
//GET MAIL ERROR cError
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha no Envio do e-mail "+cError,80))
Else
MsgAlert("Falha no Envio do e-mail " + cError)
Endif
Endif

Else
If _lJob
ConOut(Padc("Falha na autenticao do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticao do e-mail:" + cError)
Endif
Endif

Continuao:

- 640 -

ADVPL Completo



//DISCONNECT SMTP SERVER
MailSmtpOff()

IF lResulSend
If _lJob
ConOut(Padc("E-mail enviado com sucesso",80))
Else
MsgInfo("E-mail enviado com sucesso" + cError)
Endif
ENDIF

RETURN lResulSend


































- 641 -

ADVPL Completo



Recebimento de mensagens utilizando funes


#include "protheus.ch"
#include "tbiconn.ch"
#include "AP5MAIL.CH"

/*/
+-----------------------------------------------------------------------
| Funo | POPMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | RECEBIMENTO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION FPopMail(_lJob)

Local lResulConn := .T.
Local lResulPop := .T.
Local lResult := .T.
Local cError := ""

Local cServer := AllTrim(GetMV("MV_RELSERV"))
Local cEmail := AllTrim(GetMV("MV_RELACNT"))
Local cPass := AllTrim(GetMV("MV_RELPSW"))
Local lRelauth := GetMv("MV_RELAUTH")

Local cDe := ""
Local cPara := ""
Local cCc := ""
Local cBcc := ""
Local cAssunto := ""
Local aAnexo := {}
Local cMsg := ""
Local cPath := "\MailBox"
Local nMsgCount:= 0
Local nNumber := 0

Default _lJob := .F.

lResulConn := MailPopOn( cServer, cEmail, cPass,1000)

If !lResulConn
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif


- 642 -

ADVPL Completo



Continuao:

/*If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
// Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta
// fazer a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif

Endif*/

If lResult

PopMsgCount(@nMsgCount)

For nNumber := 1 to nMsgCount

lResulPop := MailReceive(nNumber, @cDe, @cPara, @cCc, @cBcc,;
@cAssunto, @cMsg, @aAnexo , cPath, .F.)

If !lResulPop
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha no recebimento do e-mail "+cError,80))
Else
MsgAlert("Falha no recebimento do e-mail " + cError)
Endif

Else // Salvar mensagem de e-mail

cMessage := "DE: "+cDe+CRLF
cMessage += "PARA: "+cPara+CRLF
cMessage += "CC: "+cCc+CRLF
cMessage += "BCC: "+cBcc+CRLF
cMessage += "ASSUNTO: "+cAssunto+CRLF
cMessage += "MENSAGEM: "+cMsg+CRLF

MsgInfo(cMessage,"E-mail Recebido")

Endif

End-For // Next nNumber

Else

If _lJob
ConOut(Padc("Falha na autenticao do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticao do e-mail:" + cError)
Endif

Endif

MailPopOff()



- 643 -

ADVPL Completo


Continuao:

IF lResulPop
If _lJob
ConOut(Padc("E-mails recebidos com sucesso",80))
Else
MsgInfo("E-mail recebidos com sucesso" + cError)
Endif
ENDIF

RETURN lResulPop



43. Integrao bsica com MsOffice


43.1. Exportao para EXCEL

A f unci onali da de bsi ca de e x por t ao d e i nf or maes pa r a o Mi cr osof t Excel utili z a a f uno
Dl gToExcel ( ) , a qu al per mi t e que as i nf or maes e m f or ma t os d e ar r a y sej a m ger a das e m u ma
pl a nil h a .

DLGTOEXCEL( )

Re ali z a a e x por t a o d as i nf or maes do a mbi e nt e Prot he us e m f or ma t o de ar r a ys par a u ma
pl a nil h a do Mi crosof t Excel .

E Sintaxe: DlgToExcel(cOrigem, cTitulo, aDadosCab, aDadosItens)

E Parmetros:

cOrigem Cont e do fi xo defi ni do como : GETDADOS
cTitulo Nome par a e xi bi o da pl a nil h a
aDadosCab Arr a y cont e ndo os nomes dos ca mpos qu e ser o e xi bi dos na pl a nil h a .
aDadosItens Arr a y cont e ndo as i nf or maes dos ca mpos, de acor do com a or d e m do
arr a y de ca b eal ho.

E Retorno:

Nenhum .




Na e x por t ao das i nf or maes par a o Mi crosof t Excel de v e - se a t e nt ar par a as
col un as que possu r e m i nf or maes al f a nu mri cas mas que cont m a pe n as
n meros. Par a que est as col un as sej a m e xi bi das cor r et a me nt e de v e ser
acr esce nt a do u m car act er especi al no i n ci o da st ri ng de f or ma que o Mi crosof t
Excel as r econhea como t e x t o e n o como nu mri cas.






- 644 -

ADVPL Completo


Exemplo de exportao para o Microsoft Excel utilizando a funo DlgToExcel( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Funo | GExpExcel | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | EXPORTACAO PARA EXCEL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function GExpExcel()

Local aCabExcel :={}
Local aItensExcel :={}

// AADD(aCabExcel, {"TITULO DO CAMPO", "TIPO", NTAMANHO, NDECIMAIS})
AADD(aCabExcel, {"A1_FILIAL" ,"C", 02, 0})
AADD(aCabExcel, {"A1_COD" ,"C", 06, 0})
AADD(aCabExcel, {"A1_LOJA" ,"C", 02, 0})
AADD(aCabExcel, {"A1_NOME" ,"C", 40, 0})
AADD(aCabExcel, {"A1_MCOMPRA" ,"N", 18, 2})

MsgRun("Favor Aguardar.....", "Selecionando os Registros",;
{|| GProcItens(aCabExcel, @aItensExcel)})

MsgRun("Favor Aguardar.....", "Exportando os Registros para o Excel",;
{||DlgToExcel({{"GETDADOS",;
"POSIO DE TTULOS DE VENDOR NO PERODO",;
aCabExcel,aItensExcel}})})

Return

/*/
+-----------------------------------------------------------------------
| Funo | GProcItens | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

Static Function GProcItens(aHeader, aCols)

Local aItem
Local nX

DbSelectArea("SA1")
DbSetOrder(1)
DbGotop()


- 645 -

ADVPL Completo



Continuao:

While SA1->(!EOF())

aItem := Array(Len(aHeader))

For nX := 1 to Len(aHeader)
IF aHeader[nX][2] == "C"
aItem[nX] := CHR(160)+SA1->&(aHeader[nX][1])
ELSE
aItem[nX] := SA1->&(aHeader[nX][1])
ENDIF
Next nX

AADD(aCols,aItem)
aItem := {}
SA1->(dbSkip())

End

Return





























- 646 -

ADVPL Completo



APNDICES

Relao de imagens para aplicaes visuais


AFASTAME

BPMSDOCI

COLTOT

AFASTAMENTO

BPMSE DT1

CONTAI NR

ALT_CAD

BPMSE DT2

DBG05

AMARELO

BPMSE DT3

DBG06

ANALI TI C O

BPMSE DT4

DBG09

ANALI TI C

BPMSRELA

DBG3

AGENDA

BPMSTASK1

DESTI NOS

ALTERA

BPMSTASK2

DESTI NOS2

AREA

BPMSTASK3

DI SABLE

ASI ENT OS

BPMSTASK4

DI SCAGEM

AUTOM

BR_AMARELO

DOWN

BAI XATI T

BR_AZ UL

E5

BAR

BR_AZ UL_ OCEAN

EDI TABLE

BMPCALEN

BR_CI NZ A

EXCLUI R

BMPEMERG

BR_LARANJA

F I LTRO

BMPGROUP

BR_MARROM

F I NAL

BMPI NCLUI R

BR_PRET O

F OLDER10

BMPPERG

BR_VERDE

F OLDER11

BMPPOST

BR_VERDE_ OCEAN

F OLDER12

BMPTABLE

BR_VERMELHO

F OLDER14

BMPTRG

BR_VERMELHO_ OCEAN

F OLDER5

BMPUSER

BUDGET

F OLDER6

BMPVI SUAL

BUDGETY

F OLDER7

BONUS

CADEADO

GE OROTA

- 647 -

ADVPL Completo




BOTT OM

CALCULADORA

GRAF 2 D

BPMSDOC

CANCEL

GRAF 3 D

BPMSDOCA

CHAVE2

HI ST ORI C

BPMSDOCE

CHECKED

I NSTRUME

I MPRESSA O

PCO_ I TALT

PMSSETATOP

LBNO

PCO_ I TEXC

PMSSETAUP

LBOK

PCOC O

PMSTASK1

LBTI K

PCOCUBE

PMSTASK2

LEFT

PCOFXCANCEL

PMSTASK3

LI NE

PCOFXOK

PMSTASK4

LI QCHECK

PENDENTE

PMSUSER

LJPREC O

PES QUI SA

PMSZ O OMI N

LOCALI Z A

PGNEXT

PMSZ O OMOUT

LUPA

PGPREV

POSCLI

MAQF OTO

PMSCOLOR

PREC O

MATERI AL

PMSEDT3

PREV

METAS_BAI XO_16

PMSEDT4

PRI NT03

METAS_BAI XO_LE G

PMSEXCEL

PRODUT O

METAS_CI MA_16

PMSEXPALL

RECALC

METAS_CI MA_LEG

PMSEXPCMP

RECORTAR

MSGHI GH

PMSMAI S

RI GHT

MSVI SI O

PMSMATE

RPMNE W

NEXT

PMSMENOS

RPMSAVE

NOTE

PMSPES Q

S4SB014N

NOVACELULA

PMSPRI NT

S4WB001N

OBJETI VO

PMSRELA

S4WB005N

- 648 -

ADVPL Completo




OK

PMSRRFSH

S4WB006N

ORDEM

PMSSETABOT

S4WB007N

PARAMETROS

PMSSETADI R

S4WB008N

PCO_C OI NC

PMSSETADOWN

S4WB009N

PCO_C ONOR

PMSSETAES Q

S4WB010N

S4WB011N

WEB

CARAGANEW

S4WB014B

WF CHK

CARGASE Q

S4WB016N

WFUNCHK

CCTCALC

SALVAR

ADDCONTAI NER

CHAT

SDUI MPORT

ADI CI ONAR_001

CHAT1

SDUPACK

ARMAZ EM

CHAT2

SDUPROPR

ATALHO

CHAT3

SDUSETDEL

AVGARMAZ EM

CHECK

SDUSOFTSEEK

AVGBOX1

CHECKOK

SHORTCUTDEL

AVGLBPAR1

CLOCK01

SHORTCUTEDI T

AVGOI C1

CLOCK02

SHORTCUTMI NUS

AVI A O

CLOCK03

SHORTCUTNEW

AZ UL

CLOCK04

SHORTCUTPLUS

BALANCA

DEVOLNF

SI MULACA

BGC OLOR

COBROWSR

SI MULACAO

BMPPARAM COLF ORM

SUGESTAO

BMPCONS

COMPTI TL

SUMARI O

BMPCPO

COMS OM

SVM

BMPDEL

CRI TI CA

TK_VERTI T

BR_BRANCO

COPYUSER

UNCHECKE D

BRANCO

CTBLANC

- 649 -

ADVPL Completo




UP

BR_CANCEL

CTBREPLA

USER

BR_MARROM

DBG07

VCDOWN

BR_PI NK

DELWEB

VCUP

BTCALC

COLOR

VENDEDOR

BTPES Q

DBG12

VERNOTA

CARGA

DBG10

DEPENDENTES

F 7_VERM

F 14_PI NK

GE O

F 8_NULL

F 14_PRET

EDI TWEB

F 10_AMAR

F 14_VERD

EMPI LHADEI RA

F 10_AZ UL

F 14_VERM

ENABLE

F 10_CI NZ

F RI AS

ESCALA

F 10_LARA

F I LTRO1

EST OMOVI

F 10_MARR

F OLDER8

F 5_AZ UL

F 10_NULL

F OLDER13

F 5_NULL

F 10_PI NK

F OLDER15

F 5_VERD

F 10_PRET

F ORM

F 5_VERM

F 10_VERD

FRCOLOR

F 6_NULL

F 10_VERM

FRTOF FLI NE

F 5_AMAR

F 11_NULL

FRTONLI NE

F 5_CI NZ

F 12_AMAR

GE O

F 5_LARA

F 12_AZ UL

GE OEMAI L

F 5_MARR

F 12_CI NZ

GE OTRECHO

F 5_PI NK

F 12_LARA

GERPROJ

F 5_PRET

F 12_MARR

GLOBO

F 7_AMAR

F 12_PI NK

I C_17

F 7_AZ UL

F 12_PRET

I NSTRUME

- 650 -

ADVPL Completo




F 7_CI NZ

F 12_VERD

LANDSCAPE

F 7_LARA

F 12_VERM

LI GHTBLU

F 7_MARR

F 14_AMAR

MDI HELP

F 7_NULL

F 14_AZ UL

MDI LOGOF F

F 7_PI NK

F 14_CI NZ

MDI RUN

F 7_PRET

F 14_LARA

MDI SPO OL

F 7_VERD

F 14_MARR

MEDEXT

MENURUN

RPMCABEC

SDUF I ELDS

MPWI Z ARD

RPMCPO

SDUF I ND

NCO

RPMDES

SDUGOTO

NEWWEB

RPMF ORM

SDUNE W

NOC ONNECT

RPMFUNC

SDUOPEN

NOCHECKED

RPMGROUP

SDUOPENI DX

NOMEDI CA

RPMI MP

SDUORDER

NORMAS

RPMI MPORT

SDURECALL

OPEN

RPMNE W2

SDUREPL

OPERACAO

RPMOPEN

SDUSEEK

OUTLO OK

RPMPERG

SDUSTRUCT

PAPEL_ESCRI TO

RPMTABLE

SDUSUM

PEDI DO

S4WB004N

SDUZ AP

PI N

S4WB013N

SEMSOM

PMSI NF O

S4WB014A

SOLI CI TA

PREDI O

SALARI OS

SSF ONTES

PRI NT02

SAVECLOCK

TAB1

PROCESSA

SDUADDTBL

TABPRI CE

PRODUT2

SDUAPPEND

TEXTBOLD

- 651 -

ADVPL Completo




PROJETPMS

SDUCLOSE

TEXTCENTER

PRTETQ

SDUCLOSEI DX

XCLOSE

QMT_C OND

SDUCOPYTO

TEXTI TALI C

QMT_ NO

SDUCOUNT

TEXTJUSTI FY

QMT_ OK

SDUCREATEI DX

TEXTLEFT

RESPADEX

SDUDELETE

TEXTRI GHT

RESPONSA

SDUDRPTBL

TEXTUNDERLI NE

ROSA

SDUERASE

TK_ALTF I N

TK_CLI F I N

BPMSE DT3A

GCT_NE W

TK_F I ND

BPMSE DT3E

I NV OI CE1

TK_F ONE

BPMSE DT3 I

MSGGROUP

TK_HI ST ORY

BPMSE DT4A

MSGHI GH

TK_NOV O

BPMSE DT4E

PCO_C OALT

TK_REFRESH

BPMSE DT4 I

PCO_C OEXC

TPOPAGT O1

BPMSREC

PCO_ I TI NC

UPDWARNI NG

BPMSRECA

PCOC OLA

UPDERROR

BPMSRECE

PCOC OPY

UPDI NF ORMATI ON

BPMSRECI

PCOEDI T

VERDE

BPMSRELAA

PCOFX

VERMELHO

BPMSRELAE

PCOLOCK

VERMESCURO

BPMSRELAI

PEDI DO2

WATCH

BPMSTSK1A

PEDI DO2_MDI

CLI ENTE

BPMSTSK1E

PGRSAVE

ACAO

BPMSTSK1 I

PMSAPONT

BOXBOM1

BPMSTSK2A

PMSCANC

BOXBOM2

BPMSTSK2E

PMSCOLUM

- 652 -

ADVPL Completo




BOXBOM3

BPMSTSK2 I

PMSCONS

BOXBOM4

BPMSTSK3A

PMSCUST O

BOXBOM5

BPMSTSK3E

PMSDATE

BPMSE DT1A

BPMSTSK3 I

PMSESTRU

BPMSE DT1E

BPMSTSK4A

PMSEXCEL

BPMSE DT1 I

BPMSTSK4E

PMSEXEC

BPMSE DT2A

BPMSTSK4 I

PMSEXPEXC

BPMSE DT2E

ENGRENAGEM2

PMSF I LTER

BPMSE DT2 I

GCT_EDI T

PMSGRAPH

PMSNEXT

MSGF ORWD

UNSELECTALL

PMSOPCAO

MSGREPLY

BSTART

PMSPES Q

OMSDI VI DE

BTURNSHARPLEFT

PMSPREV

PMSUPDOWN

BTURNSHARPRI GHT

PMSPREVI O

SHAPE01

ENGRENAGEM

PMSPRI NT

SHAPE02

PAGEDOWN

PMSPROG

SHAPE03

PAGEUP

PMSSUPALOC

SHAPE04

SELECT

PMSTO OLS

SHAPE05

SELECTALL

PMSUSERP

TRI DOWN

BBEARRI GHT

REFRESH

WORD

BEND

SHAPE06

ROTEI RO

BKEEPLEFT

TRI LEF T

CLI PS_PQ

BKEEPRI GHT

TRI RI GHT

NEXT_PQ

BLEFT

VI NCULA1

RELACI ONAMENTO_DI REI RA_PQ

BRI GHT

BAHEAD

PREV_PQ

CANCEL

BBEARLEFT

UP. GI F

CONF I RM


- 653 -

ADVPL Completo




DOWN

GOTOP

I NVERTSELECTI ON

GOBOTTOM


- 654 -

ADVPL Completo



LISTAS DE EXERCCIOS




01
I mpl e me nt ar a cl asse Al uno com os mt odos Ne w( ) , I nscr e v er ( ) e Av al i ar ( ) .




02
Dese nv ol v er u m di l ogo par a i nt er a gi r com a cl asse Al uno dese nvol vi da no
e x erc ci o a nt eri or.



03
I mpl e me nt ar u ma Enchoi ce par a o ca dast ro de produt os ( SB1) .





- 655 -

ADVPL Completo



04
Conv er t er o ca dast ro d ese nvol vi do no e x erc ci o a nt eri or pa r a que o mesmo
utili z e o obj et o MsMGet ( ) .



05
Dese nv ol v er u ma i nt erf ace d e ca dast r o que combi ne os obj et os MsMGet e
MsNe wGet Da dos ca usa ndo o ef ei t o de u ma Mod el o3( ) .



06
Adi ci on ar n a i nt erf ace de ca dast r o d ese nvol vi da no e x erc ci o a nt eri or u ma
Enchoi ce Ba r ( ) com u m bot o defi ni do pel o usuri o que e xi ba o Ax Ca dast ro d e
u m i t e m utili z a do na i nt erf ace.




07
Conv er t er o f ont e DI ALOG_ OBJETOS. PRW par a si nt a x e ori e nt a da obj et os.




- 656 -

ADVPL Completo




08
Dese nv ol v er u ma Ma WndBrowse ut ili z a ndo u m ar qui vo t e mpor ri o.




09
I mpl e me nt ar u ma f unci on ali da de com ml ti pl os TwBr owses qu e per mi t a
pesqui sar cl i e nt es e vi su ali z ar os t t ul os a r ece ber dos mesmos.



10
I mpl e me nt ar u m obj et o TFol der par a mont ar u m r oda p pa r a u ma i nt erf ace
que cont e nh a MsMGet ( ) e MsNe wGet Da dos( ) .



11
I mpl e me nt ar a MsAdv Si z e( ) e Ms Obj Si z e( ) no f ont e d ese nvol vi do no e x erc ci o
a nt eri or.




- 657 -

ADVPL Completo



12
Dese nv ol v er u ma Ma WndBrowse ut ili z a ndo u m Ali as ger a do pel a f uno
TcGe n Qr y( ) .



13
Dese nv ol v er u ma Ma WndBrowse ut ili z a ndo u m Ali as ger a do pel a f uno
TcGe n Qr y( ) pa r a u m ba nco d e da dos e xt er no a a pli cao ERP.



14
Dese nv ol v er u ma a plica o que e x ecut e a St or ed Procedur e pa dr o de
r eprocessa me nt o d e sal dos cont bei s.



15
I mpl e me nt ar no f ont e WndSql Conn dese nv ol vi do a nt eri or me nt e as f unes
TcI ncl ui ( ) , TcAl t er a ( ) , TcExcl ui ( ) com o uso das f unes TEnchoi ce( ) e
TcSql Ex ec( ) .



- 658 -

ADVPL Completo



16
I mpl e me nt ar u ma f uno que r e al i z e o e nvi o de u m t e xt o si mpl es par a u ma
cont a d e e- mai l @t ot vs, que per mi t a sua f ci l i de nt i fi cao.




17
I mpl e me nt ar u ma rot i n a que r e al i z e o r ecebi me nt o do e - mai l e nvi a do
a nt eri or me nt e pa r a a cont a de e - mai l @t ot vs.



18
I mpl e me nt ar u ma rot i n a a ut om t i ca par a gr a v ar as i nf or maes no ca dast ro
de cl i e nt es (MATA030) .



- 659 -

ADVPL Completo




Projeto: Avaliao prtica do treinamento de ADVPL Avanado

Objetivos do projeto

E Contemplar o contedo do curso e estimular a prtica da programao utilizando a linguagem
ADVPL;

E Acrescentar um grau de desafio ao treinamento;

Regras para entrega e apresentao

E Dever ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos
necessrios. A avaliao do proj eto ser realizada aps a entrega, no prazo estabelecido pelo
instrutor;

E Pode ser realizado em grupos de at 03 pessoas. Caso existam alunos sem grupos, estes podero
integrar equipes j formadas com o total de membros estabelecido, mediante aprovao do
instrutor;

Avaliao do projeto

E Mesmo peso da prova terica, podendo substitu-la integralmente.
E Sero considerados os quesitos:
O Funcionalidades
O Clareza da programao
O Apresentao
O Otimizao de tcnicas e recursos apresentados no treinamento

Funcionalidades que compe o projeto

Desenvolver uma aplicao utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:

Projeto 01

Dese nv ol v er u ma a pli cao de ca dast ro ut ili z a ndo a cl asse Al uno e os mt odos
di spon v ei s par a a mes ma .


Projeto 02

Conv er t er os f ont es do pacot e d e ofi ci n a de progr a ma o pa r a ori e nt ao a
obj et os.


Projeto 03

I mpl e me nt ar u ma a pl ica o ADVPL qu e consul t e e a t u ali z e da dos e m u m
ba nco d e i nt erf ace e xt er no ao Pr ot he us.


- 660 -

ADVPL Completo



REFERNCIAS BIBLIOGRFICAS

Referncias bibliogrficas

Gesto empresarial com ERP
Ernesto Haberkorn, 2006

Programao Orientada a Objetos com C + +
I v a n Lui z Mar ques Ri car t e, 1996

Modelagem e Projetos baseados em objetos
James Rumbaugh, 1994 11 . Edio

Programao orientada objetos no FiveWin
Gilmer FiveWin Brasil

Oficina de Programao
Robson Luiz Estefani Gonalves

Apostila de Treinamento - TReport
Tnia Bronzeri

Apostila de Treinamento - ADVPL
Educao corporativa

Apostila de Treinamento Boas Prticas de Programao
Inteligncia Protheus e Fbrica de Software

DEM Documentao Eletrnica Microsiga
Microsiga Software S.A.

Materiais diversos de colaboradores Microsiga
Colaboradores Microsiga


Colaboradores

Reviso 01 Data: 04.2008
Ar n al do Ra y mundo Juni or CSA
Lui s Aki r a Ta mur a Educa o Cor por a t i v a
Mrci a Sa t i ko Sasa ki Tok ur a ACR- N1_FRAMEW1
Pa t ri ci a Lopes Legas Educa o Cor por a t i v a
Robson Lui z Est ef a ni Gonal v es F bri ca de Sof t war e
Sr gi o Sue o F uzi na k a I nt el i g nci a Prot he us

You might also like