Você está na página 1de 660

Educao Corporativa

Programao em ADVPL
Completo




Matriz Av. Braz Leme, 1.717 02511-000 So Paulo SP Brasil.
Tel.: 55 (11) 3981-7001

www.microsiga.com.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
TSRVOBJ ECT() .......................................................................................................................................... 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 aprendizado de qualquer linguagem de programao essencial desenvolver os conceitos
relacionados a lgica e a tcnica da escrita de um programa.

Com foco nesta necessidade, este tpico ir descrever resumidamente os conceitos envolvidos
no processo de desenvolvimento de um programa atravs dos conceitos relacionados :

E Lgica de programao
E Algoritmos
E Diagramas de blocos

1.1. Lgica de Programao

Lgica

A lgica de programao necessria para pessoas que desejam trabalhar com
desenvolvimento de sistemas e programas, ela permite definir a seqncia lgica para o
desenvolvimento. Ento o que lgica?


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


Seqncia Lgica

Estes pensamentos, podem ser descritos como uma seqncia de instrues, que devem ser
seguidas para se cumprir uma determinada tarefa.


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


Instrues

Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas
para a realizao ou emprego de algo.

Em informtica, porm, instruo a informao que indica a um computador uma ao
elementar a executar. Convm ressaltar que uma ordem isolada no permite realizar o
processo completo, para isso necessrio um conjunto de instrues colocadas em ordem
seqencial lgica.

Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica
uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc. evidente
que essas instrues tm que ser executadas em uma ordem adequada no se pode
descascar as batatas depois de frit-las.

Dessa maneira, uma instruo tomada em separado no tem muito sentido; para obtermos o
resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta.

- 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 algoritmo formalmente uma seqncia finita de passos que levam a execuo de uma
tarefa. Podemos pensar em algoritmo como uma receita, uma seqncia de instrues que do
cabo de uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua
definio, devem ser claras e precisas.

Como exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio,
multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os
manuais de aparelhos eletrnicos, como um videocassete, que explicam passo-a-passo como,
por exemplo, gravar um evento.

At mesmo as coisas mais simples, podem ser descritas por seqncias lgicas, tais como:

E Chupar uma bala
1. Pegar a bala;
2. Retirar o papel;
3. Chupar a bala;
4. Jogar o papel no lixo.

E Somar dois nmeros quaisquer
1. Escreva o primeiro nmero no retngulo A;
2. Escreva o segundo nmero no retngulo B;
3. Some o nmero do retngulo A com nmero do retngulo B e coloque o
resultado no retngulo C.


1.2. Desenvolvendo algoritmos

Pseudocdigo

Os algoritmos so descritos em uma linguagem chamada pseudocdigo. Este nome uma
aluso posterior implementao em uma linguagem de programao, ou seja, quando for
utilizada a linguagem a de programao propriamente dita como, por exemplo, ADVPL.

Por isso os algoritmos so independentes das linguagens de programao, sendo que ao
contrrio de uma linguagem de programao no existe um formalismo rgido de como deve
ser escrito o algoritmo.

O algoritmo deve ser fcil de interpretar e fcil de codificar. Ou seja, ele deve ser o
intermedirio entre a linguagem falada e a linguagem de programao.

- 13 -

ADVPL Completo



Regras para construo do Algoritmo

Para escrever um algoritmo precisamos descrever a seqncia de instrues, de maneira
simples e objetiva. Para isso utilizaremos algumas tcnicas:

1. Usar somente um verbo por frase;
2. Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham
com informtica;
3. Usar frases curtas e simples;
4. Ser objetivo;
5. Procurar usar palavras que no tenham sentido dbio.

Fases

Para implementar de um algoritmo de simples interpretao e codificao necessrio
inicialmente dividir o problema apresentado em trs fases fundamentais, as quais so:

E ENTRADA: So os dados de entrada do algoritmo;
E PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final;
E SADA: So os dados j processados.


1.2.1. Estudando algoritmos

Neste tpico sero demonstrados alguns algoritmos do cotidiano, os quais foram
implementados utilizando os princpios descritos nos tpicos anteriores.

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 chiclete
2. Retirar o papel
3. Mastigar
4. Jogar o papel no lixo

Utilizar um telefone pblico - carto

1. Retirar o telefone do gancho
2. Esperar o sinal
3. Colocar o carto
4. Discar o nmero
5. Falar no telefone
6. Colocar o telefone no ganho

- 14 -

ADVPL Completo



Fritar um ovo

1. Pegar frigideira, ovo, leo e sal
2. Colocar leo na frigideira
3. Ascender o fogo
4. Colocar a frigideira no fogo
5. Esperar o leo esquentar
6. Quebrar o ovo na frigideira
7. Jogar a casca no lixo
8. Retirar a frigideira do fogo quando o ovo estiver no ponto
9. Desligar o fogo
10. Colocar sal a gosto

Trocar lmpadas

1. Se a lmpada estiver fora do alcance, pegar uma escada
2. Pegar a lmpada nova
3. Se a lmpada queimada estiver quente, pegar um pano
4. Tirar lmpada queimada
5. Colocar lmpada nova

Descascar batatas

1. Pegar faca, bacia e batatas
2. Colocar gua na bacia
3. Enquanto houver batatas, descascar as batatas
3.1. Colocar as batatas descascadas na bacia

Jogar o jogo da forca

1. Escolher a palavra
2. Montar o diagrama do jogo
3. Enquanto houver lacunas vazias e o corpo estiver incompleto:
3.1. Se acertar a letra: escrever na lacuna correspondente
3.2. Se errar a letra: desenhar uma parte do corpo na forca

Calcular a mdia de notas

1. Enquanto houver notas a serem recebidas:
1.1. Receber a nota;

2. Some todas as notas recebidas;
3. Divida o total obtido pela quantidade de notas recebidas;
4. Exiba a mdia das notas.


Jogar o jogo da velha contra o algoritmo

1. Enquanto existir um quadrado livre e ningum ganhou ou perdeu o jogo:
1.1. Espere a jogada do adversrio, continue depois
1.2. Se centro estiver livre: jogue no centro
1.3. Seno, se o adversrio possuir 2 quadrados em linha com um quadrado livre,
jogue neste quadrado
1.4. Seno, se h algum canto livre, jogue neste canto

- 15 -

ADVPL Completo



1.2.2. Teste de mesa

Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado de
TESTE DE MESA, que significa seguir as instrues do algoritmo de maneira precisa para
verificar se o procedimento utilizado est correto ou no.

Para avaliar a aplicao do teste de mesa, utilizaremos o algoritmo de calcular a mdia de
notas:

Algoritmo: Calcular a mdia de notas

1. Enquanto houver notas a serem recebidas:
a. Receber a nota;

2. Some todas as notas recebidas;
3. Divida o total obtido pela quantidade de notas recebidas;
4. Exiba a mdia das notas.


Teste de mesa:

1. Para cada nota informada, receber e registrar na tabela abaixo:

ID Nota


2. Ao trmino das notas, a tabela dever conter todas as notas informadas, como abaixo:

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

3. Somar todas as notas: 45
4. Dividir a soma das notas, pelo total de notas informado: 45/6 7.5
5. Exibir a mdia obtida: Mensagem(Mdia: 7.5)






- 16 -

ADVPL Completo



2. Estruturas de programao

2.1. Diagrama de bloco

O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de
um determinado processamento.

Com o diagrama podemos definir uma seqncia de smbolos, com significado bem definido,
portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento.

Simbologia

Existem diversos smbolos em um diagrama de bloco. No quadro abaixo esto representados
alguns dos smbolos mais utilizados:

Smbolo Funo

Terminador
Indica o incio e o fim de um processamento.

Processamento
Processamento em geral.

Entrada
Manual
Indica a entrada de dados atravs do teclado.

Deciso
Indica um ponto no qual dever ser efetuada
uma escolha entre duas situaes possveis.

Exibio
Mostra os resultados obtidos com um
processamento.

Documento
Indica um documento utilizado pelo
processamento, seja para entrada de
informaes ou para exibio dos dados
disponveis aps um processamento.



Cada smbolo ir conter uma descrio pertinente a forma com o qual o
mesmo foi utilizado no fluxo, indicando o processamento ou a informao
que o mesmo representa.


- 17 -

ADVPL Completo



Representao de algoritmos atravs de diagramas de bloco

Algoritmo 01: Fritar um ovo

1. Pegar frigideira, ovo, leo e sal
2. Colocar leo na frigideira
3. Ascender o fogo
4. Colocar a frigideira no fogo
5. Esperar o leo esquentar
6. Quebrar o ovo na frigideira
7. Jogar a casca no lixo
8. Retirar a frigideira do fogo quando o ovo estiver no ponto
9. Desligar o fogo
10. Colocar sal a gosto




- 18 -

ADVPL Completo



Algoritmo 02: Calcular a mdia de notas

1. Enquanto houver notas a serem recebidas:
a. Receber a nota;

2. Some todas as notas recebidas;
3. Divida o total obtido pela quantidade de notas recebidas;
4. Exiba a mdia das notas.



- 19 -

ADVPL Completo



2.2. Estruturas de deciso e repetio

A utilizao de estruturas de deciso e repetio em um algoritmo permite a realizao de
aes relacionadas a situaes que influenciam na execuo e soluo do problema.

Como foco na utilizao da linguagem ADVPL sero ilustradas as seguintes estruturas:

E Estruturas de deciso
o IF...ELSE
o DO CASE ... CASE

E Estruturas de repetio
o WHILE...END
o FOR...NEXT


2.2.1. Estruturas de deciso

Os comandos de deciso so utilizados em algoritmos cuja soluo no obtida atravs da
utilizao de aes meramente seqenciais, permitindo que este avalie as condies
necessrias para optar por uma ou outra maneira de continuar seu fluxo.

As estruturas de deciso que sero analisadas so:

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

IF...ELSE

A estrutura IF...ELSE (Se/Seno) permite a anlise de uma condio e a partir da qual ser
executada uma de duas aes possveis: se a anlise da condio resultar em um valor
verdadeiro ou se a anlise da condio resultar em um valor falso.

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


Esta estrutura permite ainda que seja executada apenas uma ao, na situao em que a a
anlise da condio resultar em um valor verdadeiro.

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




Apesar das linguagens de programao possurem variaes para a estrutura
IF...ELSE, conceitualmente todas as representaes podem ser descritas com
base no modelo apresentado.



A linguagem ADVPL possui uma variao para a estrutura IF...ELSE, descrita
como IF...ELSEIF...ELSE.

Com esta estrutura possvel realizar a anlise de diversas condies em
seqncia, para as quais ser avaliada somente a ao da primeira expresso
cujo anlise resultar em um valor verdadeiro.






- 21 -

ADVPL Completo



DO CASE...CASE

A estrutura DO CASE...ENDCASE (Caso) permite a anlise de diversas condies consecutivas,
para as quais somente a condio a primeira condio verdadeira ser sua ao vinculada
executada.

O recurso de anlise de mltiplas condies necessrio para soluo de problemas mais
complexos, nos quais as possibilidades de soluo superam a mera anlise de um nico
resultado verdadeiro ou falso.

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



Apesar das linguagens de programao possurem variaes para a estrutura
DO CASE...CASE, conceitualmente todas as representaes podem ser
descritas com base no modelo apresentado.

- 22 -

ADVPL Completo



2.2.2. Estruturas de repetio

Os comandos de repetio so utilizados em algoritmos nas situaes em que necessrio
realizar uma determinada ao ou um conjunto de aes para um nmero definido ou
indefinido de vezes, ou ainda enquanto uma determinada condio for verdadeira.

As estruturas de deciso que sero analisadas so:

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

WHILE...END

Nesta estrutura, o conjunto de aes ser executado enquanto a anlise de uma condio de
referncia resultar em um valor verdadeiro. importante verificar que o bloco somente ser
executado, inclusive se na primeira anlise a condio resultar em um valor verdadeiro.

Representao: WHILE...END

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






Existem diversas variaes para a estrutura WHILE...END, na qual h a
possibilidade da primeira execuo ser realizada sem a anlise da condio, a
qual valer apenas a partir da segunda execuo.

A linguagem ADVPL aceita a sintaxe DO WHILE...ENDDO, que em outras
linguagens representa a situao descrita anteriormente (anlise da condio
somente a partir da segunda execuo), mas em ADVPL esta sintaxe tem o
mesmo efeito do WHILE...END.


- 23 -

ADVPL Completo


FOR...TO...NEXT

Nesta estrutura, o conjunto de aes ser executado uma quantidade de vezes definida,
normalmente referenciada como passo.

Para cada passo realizado pela estrutura FOR...TO...NEXT, ser avaliada uma condio que
verificar se foi atingido o nmero de execues previamente definido. Desta forma a
estrutura compreende um controle de nmero de passos executados, o qual incrementado
na anlise da expresso NEXT.

Semelhante a estrutura WHILE...END, a primeira ao somente ser realizada mediante um
resultado verdadeiro na anlise da condio.

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 estrutura FOR...TO...NEXT, dependendo da linguagem de programao,
permite a realizao de um incremento simples a cada execuo da instruo
NEXT, ou a adio de outro valor ao contador, o qual dever especificado de
acordo com a sintaxe da linguagem.

Em ADVPL pode ser utilizada a instruo STEPS para alterar o valor a ser
adicionado no contador de passos a cada execuo da instruo NEXT, sendo
que este valor poder ser at negativo, viabilizando uma contagem
decrescente.


- 24 -

ADVPL Completo



MDULO 02: A linguagem ADVPL

A Linguagem ADVPL teve seu incio em 1994, sendo na verdade uma evoluo na utilizao de
linguagens no padro xBase pela Microsiga Software S.A. (Clipper, Visual Objects e depois
FiveWin). Com a criao da tecnologia Protheus, era necessrio criar uma linguagem que
suportasse o padro xBase para a manuteno de todo o cdigo existente do sistema de ERP
Siga Advanced. Foi ento criada a linguagem chamada Advanced Protheus Language.

O ADVPL uma extenso do padro xBase de comandos e funes, operadores, estruturas de
controle de fluxo e palavras reservadas, contando tambm com funes e comandos
disponibilizados pela Microsiga que a torna uma linguagem completa para a criao de
aplicaes ERP prontas para a Internet. Tambm uma linguagem orientada a objetos e
eventos, permitindo ao programador desenvolver aplicaes visuais e criar suas prprias
classes de objetos.

Quando compilados, todos os arquivos de cdigo tornam-se unidades de inteligncia bsicas,
chamados APOs (de Advanced Protheus Objects). Tais APOs so mantidos em um
repositrio e carregados dinamicamente pelo PROTHEUS Server para a execuo. Como no
existe a linkedio, ou unio fsica do cdigo compilado a um determinado mdulo ou
aplicao, funes criadas em ADVPL podem ser executadas em qualquer ponto do ambiente
Advanced Protheus.

O compilador e o interpretador da linguagem ADVPL o prprio servidor PROTHEUS
(PROTHEUS Server), e existe um ambiente visual para desenvolvimento integrado
(PROTHEUSIDE) onde o cdigo pode ser criado, compilado e depurado.

Os programas em ADVPL podem conter comandos ou funes de interface com o usurio. De
acordo com tal caracterstica, tais programas so subdivididos nas seguintes categorias:

Programao Com Interface Prpria com o Usurio

Nesta categoria entram os programas desenvolvidos para serem executados atravs do
terminal remoto do Protheus, o Protheus Remote. O Protheus Remote a aplicao
encarregada da interface e da interao com o usurio, sendo que todo o processamento do
cdigo em ADVPL, o acesso ao banco de dados e o gerenciamento de conexes efetuado no
Protheus Server. O Protheus Remote o principal meio de acesso a execuo de rotinas
escritas em ADVPL no Protheus Server, e por isso permite executar qualquer tipo de cdigo,
tenha ele interface com o usurio ou no. Porm nesta categoria so considerados apenas os
programas que realizem algum tipo de interface remota utilizando o protocolo de comunicao
do Protheus.

Podem-se criar rotinas para a customizao do sistema ERP Microsiga Protheus, desde
processos adicionais at mesmo relatrios. A grande vantagem aproveitar todo o ambiente
montado pelos mdulos do ERP Microsiga Protheus. Porm, com o ADVPL possvel at
mesmo criar toda uma aplicao, ou mdulo, do comeo.

Todo o cdigo do sistema ERP Microsiga Protheus escrito em ADVPL.


Programao Sem Interface Prpria com o Usurio

As rotinas criadas sem interface so consideradas nesta categoria porque geralmente tm uma
utilizao mais especfica do que um processo adicional ou um relatrio novo. Tais rotinas no
tm interface com o usurio atravs do Protheus Remote, e qualquer tentativa nesse sentido

- 25 -

ADVPL Completo


(como a criao de uma janela padro) ocasionar uma exceo em tempo de execuo. Estas
rotinas so apenas processos, ou Jobs, executados no Protheus Server. Algumas vezes, a
interface destas rotinas fica a cargo de aplicaes externas, desenvolvidas em outras
linguagens, que so responsveis por iniciar os processos no servidor Protheus atravs dos
meios disponveis de integrao e conectividade no Protheus.

De acordo com a utilizao e com o meio de conectividade utilizado, estas rotinas so
subcategorizadas assim:

E Programao por Processos

Rotinas escritas em ADVPL podem ser iniciadas como processos individuais (sem interface) no
Protheus Server atravs de duas maneiras: Iniciadas por outra rotina ADVPL atravs da
chamada de funes como StartJob() ou CallProc() ou iniciadas automaticamente na
inicializao do Protheus Server (quando propriamente configurado).

E Programao de RPC

Atravs de uma biblioteca de funes disponvel no Protheus (uma API de comunicao),
podem-se executar rotinas escritas em ADVPL diretamente no Protheus Server, atravs de
aplicaes externas escritas em outras linguagens. Isto o que se chama de RPC (de Remote
Procedure Call, ou Chamada de Procedimentos Remota).

O servidor Protheus tambm pode executar rotinas em ADVPL em outros servidores Protheus
atravs de conexo TCP/IP direta utilizando o conceito de RPC. Do mesmo modo, aplicaes
externas podem requisitar a execuo de rotinas escritas em ADVPL atravs de conexo
TCP/IP direta.
Programao Web

O Protheus Server pode tambm ser executado como um servidor Web, respondendo a
requisies HTTP. No momento destas requisies, pode executar rotinas escritas em ADVPL
como processos individuais, enviando o resultado das funes como retorno das requisies
para o cliente HTTP (como por exemplo, um Browser de Internet). Qualquer rotina escrita em
ADVPL que no contenha comandos de interface pode ser executada atravs de requisies
HTTP. O Protheus permite a compilao de arquivos HTML contendo cdigo ADVPL embutido.
So os chamados arquivos ADVPL ASP, para a criao de pginas dinmicas.

E Programao TelNet

TelNet parte da gama de protocolos TCP/IP que permite a conexo a um computador remoto
atravs de uma aplicao cliente deste protocolo. O PROTHEUS Server pode emular um
terminal TelNet, atravs da execuo de rotinas escritas em ADVPL. Ou seja, pode-se escrever
rotinas ADVPL cuja interface final ser um terminal TelNet ou um coletor de dados mvel.





- 26 -

ADVPL Completo



3. Estrutura de um Programa ADVPL

Um programa de computador nada mais do que um grupo de comandos logicamente
dispostos com o objetivo de executar determinada tarefa. Esses comandos so gravados em
um arquivo texto que transformado em uma linguagem executvel por um computador
atravs de um processo chamado compilao. A compilao substitui os comandos de alto
nvel (que os humanos compreendem) por instrues de baixo nvel (compreendida pelo
sistema operacional em execuo no computador). No caso do ADVPL, no o sistema
operacional de um computador que ir executar o cdigo compilado, mas sim o Protheus
Server.

Dentro de um programa, os comandos e funes utilizados devem seguir regras de sintaxe da
linguagem utilizada, pois caso contrrio o programa ser interrompido por erros. Os erros
podem ser de compilao ou de execuo.

Erros de compilao so aqueles encontrados na sintaxe que no permitem que o arquivo de
cdigo do programa seja compilado. Podem ser comandos especificados de forma errnea,
utilizao invlida de operadores, etc.

Erros de execuo so aqueles que acontecem depois da compilao, quando o programa est
sendo executado. Podem ocorrer por inmeras razes, mas geralmente se referem as funes
no existentes, ou variveis no criadas ou inicializadas, etc.


Linhas de Programa

As linhas existentes dentro de um arquivo texto de cdigo de programa podem ser linhas de
comando, linhas de comentrio ou linhas mistas.

E Linhas de Comando

Linhas de comando possuem os comandos ou instrues que sero executadas. Por exemplo:

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

E Linhas de Comentrio

Linhas de comentrio possuem um texto qualquer, mas no so executadas. Servem apenas
para documentao e para tornar mais fcil o entendimento do programa. Existem trs formas
de se comentar linhas de texto. A primeira delas utilizar o sinal de * (asterisco) no comeo
da linha:

* Programa para clculo do total
* Autor: Microsiga Software S.A.
* Data: 2 de outubro de 2001

- 27 -

ADVPL Completo



Todas as linhas iniciadas com um sinal de asterisco so consideradas como comentrio. Pode-
se utilizar a palavra NOTE ou dois smbolos da letra "e" comercial (&&) para realizar a funo
do sinal de asterisco. Porm todas estas formas de comentrio de linhas so obsoletas e
existem apenas para compatibilizao com o padro xBase. A melhor maneira de comentar
linhas em ADVPL utilizar duas barras transversais:

// Programa para clculo do total
// Autor: Microsiga Software S.A.
// Data: 2 de outubro de 2001

Outra forma de documentar textos utilizar as barras transversais juntamente com o
asterisco, podendo-se comentar todo um bloco de texto sem precisar comentar linha a linha:

/*
Programa para clculo do total
Autor: Microsiga Software S.A.
Data: 2 de outubro de 2001
*/

Todo o texto encontrado entre a abertura (indicada pelos caracteres /*) e o fechamento
(indicada pelos caracteres */) considerado como comentrio.

E Linhas Mistas

O ADVPL tambm permite que existam linhas de comando com comentrio. Isto possvel
adicionando-se as duas barras transversais (//) ao final da linha de comando e adicionando-se
o texto do comentrio:

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

Assim como a linha fsica, delimitada pela quantidade de caracteres que pode ser digitado no
editor de textos utilizado, existe uma linha considerada linha lgica. A linha lgica, aquela
considerada para a compilao como uma nica linha de comando.

A princpio, cada linha digitada no arquivo texto diferenciada aps o pressionamento da tecla
<Enter>. Ou seja, a linha lgica, a linha fsica no arquivo. Porm algumas vezes, por
limitao fsica do editor de texto ou por esttica, pode-se "quebrar" a linha lgica em mais de
uma linha fsica no arquivo texto. Isto efetuado utilizando-se o sinal de ponto-e-vrgula (;).

If !Empty(cNome) .And. !Empty(cEnd) .And. ; <enter>
!Empty(cTel) .And. !Empty(cFax) .And. ; <enter>
!Empty(cEmail)

GravaDados(cNome,cEnd,cTel,cFax,cEmail)

Endif


- 28 -

ADVPL Completo


Neste exemplo existe uma linha de comando para a checagem das variveis utilizadas. Como a
linha torna-se muito grande, pode-se dividi-la em mais de uma linha fsica utilizando o sinal de
ponto-e-vrgula. Se um sinal de ponto-e-vrgula for esquecido nas duas primeiras linhas,
durante a execuo do programa ocorrer um erro, pois a segunda linha fsica ser
considerada como uma segunda linha de comando na compilao. E durante a execuo esta
linha no ter sentido.

3.1. reas de um Programa ADVPL

Apesar de no ser uma linguagem de padres rgidos com relao estrutura do programa,
importante identificar algumas de suas partes. Considere o programa de exemplo abaixo:

#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 estrutura de um programa ADVPL composta pelas seguintes reas:

E rea de Identificao
- Declarao dos includes
- Declarao da funo
- Identificao do programa

E rea de Ajustes Iniciais
- Declarao das variveis

E Corpo do Programa
- Preparao para o processamento
- Processamento

E rea de Encerramento

- 29 -

ADVPL Completo



rea de Identificao

Esta uma rea que no obrigatria e dedicada a documentao do programa. Quando
existente, contm apenas comentrios explicando a sua finalidade, data de criao, autor, etc.,
e aparece no comeo do programa, antes de qualquer linha de comando.

O formato para esta rea no definido. Pode-se colocar qualquer tipo de informao
desejada e escolher a formatao apropriada.

#include protheus.ch

/*
+==========================================+
| Programa: Clculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+==========================================+
*/

User Function CalcFator()


Opcionalmente podem-se incluir definies de constantes utilizadas no programa ou incluso
de arquivos de cabealho nesta rea.

rea de Ajustes Iniciais

Nesta rea geralmente se fazem os ajustes iniciais, importantes para o correto funcionamento
do programa. Entre os ajustes se encontram declaraes de variveis, inicializaes, abertura
de arquivos, etc. Apesar do ADVPL no ser uma linguagem rgida e as variveis poderem ser
declaradas em qualquer lugar do programa, aconselhvel faz-lo nesta rea visando tornar o
cdigo mais legvel e facilitar a identificao de variveis no utilizadas.

Local nCnt
Local nResultado := 0 // Resultado do fatorial
Local nFator := 10 // Nmero para o clculo

Corpo do Programa

nesta rea que se encontram as linhas de cdigo do programa. onde se realiza a tarefa
necessria atravs da organizao lgica destas linhas de comando. Espera-se que as linhas de
comando estejam organizadas de tal modo que no final desta rea o resultado esperado seja
obtido, seja ele armazenado em um arquivo ou em variveis de memria, pronto para ser
exibido ao usurio atravs de um relatrio ou na tela.

// Clculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

- 30 -

ADVPL Completo



A preparao para o processamento formada pelo conjunto de validaes e processamentos
necessrios antes da realizao do processamento em si.

Avaliando o processamento do clculo do fatorial descrito anteriormente, pode-se definir que a
validao inicial a ser realizada o contedo da varivel nFator, pois a mesma determinar a
correta execuo do cdigo.


// 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

nesta rea onde as finalizaes so efetuadas. onde os arquivos abertos so fechados, e o
resultado da execuo do programa utilizado. Pode-se exibir o resultado armazenado em
uma varivel ou em um arquivo ou simplesmente finalizar, caso a tarefa j tenha sido toda
completada no corpo do programa. nesta rea que se encontra o encerramento do
programa. Todo programa em ADVPL deve sempre terminar com a palavra chave return.

// Exibe o resultado na tela, atravs da funo alert
Alert("O fatorial de " + cValToChar(nFator) + ;
" " + cValToChar(nResultado))

// Termina o programa
Return










- 31 -

ADVPL Completo



4. Declarao e Atribuio de Variveis

4.1. Tipo de Dados

O ADVPL no uma linguagem de tipos rgidos (strongly typed), o que significa que variveis
de memria podem receber diferentes tipos de dados durante a execuo do programa.

As variveis podem tambm conter objetos, mas os tipos primrios da linguagem so:

Numrico

O ADVPL no diferencia valores inteiros de valores com ponto flutuante, portanto podem-se
criar variveis numricas com qualquer valor dentro do intervalo permitido. Os seguintes
elementos so do tipo de dado numrico:

2
43.53
0.5
0.00001
1000000

Uma varivel do tipo de dado numrico pode conter um nmero de dezoito dgitos incluindo o
ponto flutuante, no intervalo de 2.2250738585072014 E308 at 1.7976931348623158
E+308.

Lgico

Valores lgicos em ADVPL so identificados atravs de .T. ou .Y. para verdadeiro e .F. ou .N.
para falso (independentemente se os caracteres estiverem em maisculo ou minsculo).

Caractere

Strings ou cadeias de caracteres so identificadas em ADVPL por blocos de texto entre aspas
duplas (") ou aspas simples ('):

"Ol mundo!"
'Esta uma string'
"Esta 'outra' string"

Uma varivel do tipo caractere pode conter strings com no mximo 1 MB, ou seja, 1048576
caracteres.

Data

O ADVPL tem um tipo de dados especfico para datas. Internamente as variveis deste tipo de
dado so armazenadas como um nmero correspondente a data Juliana.

Variveis do tipo de dados Data no podem ser declaradas diretamente, e sim atravs da
utilizao de funes especficas como por exemplo CTOD() que converte uma string para
data.

- 32 -

ADVPL Completo



Array

O Array um tipo de dado especial. a disposio de outros elementos em colunas e linhas. O
ADVPL suporta arrays unidimensionais (vetores) ou multidimensionais (matrizes). Os
elementos de um array so acessados atravs de ndices numricos iniciados em 1,
identificando a linha e coluna para quantas dimenses existirem.

Arrays devem ser utilizadas com cautela, pois se forem muito grandes podem exaurir a
memria do servidor.

Bloco de Cdigo

O bloco de cdigo um tipo de dado especial. utilizado para armazenar instrues escritas
em ADVPL que podero ser executadas posteriormente.


4.2. Declarao de variveis

Variveis de memria so um dos recursos mais importantes de uma linguagem. So reas de
memria criadas para armazenar informaes utilizadas por um programa para a execuo de
tarefas. Por exemplo, quando o usurio digita uma informao qualquer, como o nome de um
produto, em uma tela de um programa esta informao armazenada em uma varivel de
memria para posteriormente ser gravada ou impressa.

A partir do momento que uma varivel criada, no necessrio mais se referenciar ao seu
contedo, e sim ao seu nome.

O nome de uma varivel um identificador nico o qual deve respeitar um mximo de 10
caracteres. O ADVPL no impede a criao de uma varivel de memria cujo nome contenha
mais de 10 caracteres, porm apenas os 10 primeiros sero considerados para a
localizao do contedo armazenado.

Portanto se forem criadas duas variveis cujos 10 primeiros caracteres forem iguais, como
nTotalGeralAnual e nTotalGeralMensal, as referncias a qualquer uma delas no programa
resultaro o mesmo, ou seja, sero a mesma varivel:

nTotalGeralMensal := 100
nTotalGeralAnual := 300
Alert("Valor mensal: " + cValToChar(nTotalGeralMensal))

Quando o contedo da varivel nTotalGeralMensal exibido, o seu valor ser de 300. Isso
acontece porque no momento que esse valor foi atribudo varivel nTotalGeralAnual, o
ADVPL considerou apenas os 10 primeiros caracteres (assim como o faz quando deve exibir o
valor da varivel nTotalGeralMensal), ou seja, considerou-as como a mesma varivel. Assim o
valor original de 100 foi substitudo pelo de 300.


- 33 -

ADVPL Completo



4.3. Escopo de variveis

O ADVPL no uma linguagem de tipos rgidos para variveis, ou seja, no necessrio
informar o tipo de dados que determinada varivel ir conter no momento de sua declarao,
e o seu valor pode mudar durante a execuo do programa.

Tambm no h necessidade de declarar variveis em uma seo especfica do seu cdigo
fonte, embora seja aconselhvel declarar todas as variveis necessrias no comeo, tornando
a manuteno mais fcil e evitando a declarao de variveis desnecessrias.

Para declarar uma varivel deve-se utilizar um identificador de escopo. Um identificador de
escopo uma palavra chave que indica a que contexto do programa a varivel declarada
pertence. O contexto de variveis pode ser local (visualizadas apenas dentro do programa
atual), pblico (visualizadas por qualquer outro programa), entre outros.

O Contexto de Variveis dentro de um Programa

As variveis declaradas em um programa ou funo, so visveis de acordo com o escopo onde
so definidas. Como tambm do escopo depende o tempo de existncia das variveis. A
definio do escopo de uma varivel efetuada no momento de sua declarao.

Local nNumero := 10

Esta linha de cdigo declara uma varivel chamada nNumero indicando que pertence seu
escopo local.

Os identificadores de escopo so:

E Local
E Static
E Private
E Public

O ADVPL no rgido em relao declarao de variveis no comeo do programa. A incluso
de um identificador de escopo no necessrio para a declarao de uma varivel, contanto
que um valor lhe seja atribudo.

nNumero2 := 15

Quando um valor atribudo uma varivel em um programa ou funo, o ADVPL criar a
varivel caso ela no tenha sido declarada anteriormente. A varivel ento criada como se
tivesse sido declarada como Private.

Devido a essa caracterstica, quando se pretende fazer uma atribuio a uma varivel
declarada previamente mas escreve-se o nome da varivel de forma incorreta, o ADVPL no
gerar nenhum erro de compilao ou de execuo. Pois compreender o nome da varivel
escrito de forma incorreta como se fosse a criao de uma nova varivel. Isto alterar a lgica
do programa, e um erro muitas vezes difcil de identificar.



- 34 -

ADVPL Completo



Variveis de escopo local

Variveis de escopo local so pertencentes apenas ao escopo da funo onde foram declaradas
e devem ser explicitamente declaradas com o identificador LOCAL, como no exemplo:


Function Pai()
Local nVar := 10, aMatriz := {0,1,2,3}
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


Neste exemplo, a varivel nVar foi declarada como local e atribuda com o valor 10. Quando a
funo Filha executada, nVar ainda existe mas no pode ser acessada. Quando a execuo
da funo Pai terminar, a varivel nVar destruda. Qualquer varivel com o mesmo nome no
programa que chamou a funo Pai no afetada.

Variveis de escopo local so criadas automaticamente cada vez que a funo onde forem
declaradas for ativada. Elas continuam a existir e mantm seu valor at o fim da ativao da
funo (ou seja, at que a funo retorne o controle para o cdigo que a executou). Se uma
funo chamada recursivamente (por exemplo, chama a si mesma), cada chamada em
recurso cria um novo conjunto de variveis locais.

A visibilidade de variveis de escopo locais idntica ao escopo de sua declarao, ou seja, a
varivel visvel em qualquer lugar do cdigo fonte em que foi declarada. Se uma funo
chamada recursivamente, apenas as variveis de escopo local criadas na mais recente ativao
so visveis.

Variveis de escopo static

Variveis de escopo static funcionam basicamente como as variveis de escopo local, mas
mantm seu valor atravs da execuo e devem ser declaradas explicitamente no cdigo com
o identificador STATIC.

O escopo das variveis static depende de onde so declaradas. Se forem declaradas dentro do
corpo de uma funo ou procedimento, seu escopo ser limitado quela rotina. Se forem
declaradas fora do corpo de qualquer rotina, seu escopo afeta a todas as funes declaradas
no fonte.

- 35 -

ADVPL Completo



Neste exemplo, a varivel nVar declarada como static e inicializada com o valor 10:

Function Pai()
Static nVar := 10
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)

Quando a funo Filha executada, nVar ainda existe mas no pode ser acessada. Diferente
de variveis declaradas como LOCAL ou PRIVATE, nVar continua a existir e mantm seu valor
atual quando a execuo da funo Pai termina. Entretanto, somente pode ser acessada por
execues subseqentes da funo Pai.

Variveis de escopo private

A declarao opcional para variveis privadas. Mas podem ser declaradas explicitamente com
o identificador PRIVATE.

Adicionalmente, a atribuio de valor a uma varivel no criada anteriormente
automaticamente cria a varivel como privada. Uma vez criada, uma varivel privada continua
a existir e mantm seu valor at que o programa ou funo onde foi criada termine (ou seja,
at que a funo onde foi criada retorne para o cdigo que a executou). Neste momento,
automaticamente destruda.

possvel criar uma nova varivel privada com o mesmo nome de uma varivel j existente.
Entretanto, a nova (duplicada) varivel pode apenas ser criada em um nvel de ativao
inferior ao nvel onde a varivel foi declarada pela primeira vez (ou seja, apenas em uma
funo chamada pela funo onde a varivel j havia sido criada). A nova varivel privada ir
esconder qualquer outra varivel privada ou pblica (veja a documentao sobre variveis
pblicas) com o mesmo nome enquanto existir.

Uma vez criada, uma varivel privada visvel em todo o programa enquanto no for
destruda automaticamente quando a rotina que a criou terminar ou uma outra varivel
privada com o mesmo nome for criada em uma subfuno chamada (neste caso, a varivel
existente torna-se inacessvel at que a nova varivel privada seja destruda).
Em termos mais simples, uma varivel privada visvel dentro da funo de criao e todas as
funes chamadas por esta, a menos que uma funo chamada crie sua prpria varivel
privada com o mesmo nome.


- 36 -

ADVPL Completo



Por exemplo:


Function Pai()
Private nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Neste exemplo, a varivel nVar criada com escopo private e inicializada com o valor 10.
Quando a funo Filha executada, nVar ainda existe e, diferente de uma varivel de escopo
local, pode ser acessada pela funo Filha. Quando a funo Pai terminar, nVar ser destruda
e qualquer declarao de nVar anterior se tornar acessvel novamente.


No ambiente ERP Protheus, existe uma conveno adicional a qual deve ser
respeitada que variveis em uso pela aplicao no sejam incorretamente
manipuladas. Por esta conveno deve ser adicionado o caracter _ antes
do nome de variveis PRIVATE e PUBLIC. Maiores informaes avaliar o
tpico: Boas Prticas de Programao.

Exemplo: Private _dData


Variveis de escopo public

Podem-se criar variveis de escopo public dinamicamente no cdigo com o identificador
PUBLIC. As variveis deste escopo continuam a existir e mantm seu valor at o fim da
execuo da thread (conexo).

possvel criar uma varivel de escopo private com o mesmo nome de uma varivel de escopo
public existente, entretanto, no permitido criar uma varivel de escopo public com o mesmo
nome de uma varivel de escopo private existente.

Uma vez criada, uma varivel de escopo public visvel em todo o programa onde foi
declarada at que seja escondida por uma varivel de escopo private criada com o mesmo
nome. A nova varivel de escopo private criada esconde a varivel de escopo public existente,
e esta se tornar inacessvel at que a nova varivel private seja destruda. Por exemplo:


Function Pai()
Public nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)



- 37 -

ADVPL Completo


Neste exemplo, nVar criada como public e inicializada com o valor 10. Quando a funo Filha
executada, nVar ainda existe e pode ser acessada. Diferente de variveis locais ou privates,
nVar ainda existe aps o trmino da a execuo da funo Pai.

Diferentemente dos outros identificadores de escopo, quando uma varivel declarada como
pblica sem ser inicializada, o valor assumido falso (.F.) e no nulo (nil).


No ambiente ERP Protheus, existe uma conveno adicional a qual deve ser
respeitada que variveis em uso pela aplicao no sejam incorretamente
manipuladas. Por esta conveno deve ser adicionado o caracter _ antes
do nome de variveis PRIVATE e PUBLIC. Maiores informaes avaliar o
tpico: Boas Prticas de Programao.

Exemplo: Public _cRotina


4.4. Entendendo a influncia do escopo das variveis

Considere as linhas de cdigo de exemplo:


nResultado := 250 * (1 + (nPercentual / 100))


Se esta linha for executada em um programa ADVPL, ocorrer um erro de execuo com a
mensagem "variable does not exist: nPercentual", pois esta varivel est sendo utilizada em
uma expresso de clculo sem ter sido declarada. Para solucionar este erro, deve-se declarar a
varivel previamente:


Local nPercentual, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


Neste exemplo, as variveis so declaradas previamente utilizando o identificador de escopo
local. Quando a linha de clculo for executada, o erro de varivel no existente, no mais
ocorrer. Porm variveis no inicializadas tm sempre o valor default nulo (Nil) e este valor
no pode ser utilizado em um clculo pois tambm gerar erros de execuo (nulo no pode
ser dividido por 100). A resoluo deste problema efetuada inicializando-se a varivel
atravs de uma das formas:


Local nPercentual, nResultado
nPercentual := 10
nResultado := 250 * (1 + (nPercentual / 100))

ou

Local nPercentual := 10, nResultado
nResultado := 250 * (1 + (nPercentual / 100))

A diferena entre o ltimo exemplo e os dois anteriores que a varivel inicializada no
momento da declarao. Em ambos os exemplos, a varivel primeiro declarada e ento
inicializada em uma outra linha de cdigo.


- 38 -

ADVPL Completo


aconselhvel optar pelo operador de atribuio composto de dois pontos e sinal de igual, pois
o operador de atribuio utilizando somente o sinal de igual pode ser facilmente confundido
com o operador relacional (para comparao) durante a criao do programa.

4.5. Operaes com Variveis


4.5.1. Atribuio de variveis

Uma vez que um valor lhe seja atribudo, o tipo de dado de uma varivel igual ao tipo de
dado do valor atribudo. Ou seja, uma varivel passa a ser numrica se um nmero lhe
atribudo, passa a ser caractere se uma string de texto lhe for atribuda, etc. Porm mesmo
que uma varivel seja de determinado tipo de dado, pode-se mudar o tipo da varivel
atribuindo outro tipo a ela:

01 Local xVariavel // Declara a varivel inicialmente com valor nulo
02
03 xVariavel := "Agora a varivel caractere..."
04 Alert("Valor do Texto: " + xVariavel)
05
06 xVariavel := 22 // Agora a varivel numrica
07 Alert(cValToChar(xVariavel))
08
09 xVariavel := .T. // Agora a varivel lgica
10 If xVariavel
11 Alert("A varivel tem valor verdadeiro...")
12 Else
13 Alert("A varivel tem valor falso...")
14 Endif
15
16 xVariavel := Date() // Agora a varivel data
17 Alert("Hoje : " + DtoC(xVariavel))
18
19 xVariavel := nil // Nulo novamente
20 Alert("Valor nulo: " + xVariavel)
21
22 Return

No programa de exemplo anterior, a varivel xVariavel utilizada para armazenar diversos
tipos de dados. A letra "x" em minsculo no comeo do nome utilizada para indicar uma
varivel que pode conter diversos tipos de dados, segundo a Notao Hngara (consulte
documentao especfica para detalhes). Este programa troca os valores da varivel e exibe
seu contedo para o usurio atravs da funo ALERT(). Essa funo recebe um parmetro
que deve ser do tipo string de caractere, por isso dependendo do tipo de dado da varivel
xVariavel necessrio fazer uma converso antes.

Apesar dessa flexibilidade de utilizao de variveis, devem-se tomar cuidados na passagem
de parmetros para funes ou comandos, e na concatenao (ou soma) de valores. Note a
linha 20 do programa de exemplo. Quando esta linha executada, a varivel xVariavel contm
o valor nulo. A tentativa de soma de tipos de dados diferentes gera erro de execuo do
programa. Nesta linha do exemplo, ocorrer um erro com a mensagem "type mismatch on +".

Excetuando-se o caso do valor nulo, para os demais devem ser utilizadas funes de
converso quando necessrio concatenar tipos de dados diferentes (por exemplo, nas linhas
07 e 17.

- 39 -

ADVPL Completo



Note tambm que quando uma varivel do tipo de dado lgico, ela pode ser utilizada
diretamente para checagem (linha 10):

If xVariavel
o mesmo que
If xVariavel = .T.


4.5.2. Operadores da linguagem ADVPL

Operadores comuns

Na documentao sobre variveis h uma breve demonstrao de como atribuir valores a uma
varivel da forma mais simples. O ADVPL amplia significativamente a utilizao de variveis
atravs do uso de expresses e funes.

Uma expresso um conjunto de operadores e operandos cujo resultado pode ser atribudo a
uma varivel ou ento analisado para a tomada de decises. Por exemplo:

Local nSalario := 1000, nDesconto := 0.10
Local nAumento, nSalLiquido
nAumento := nSalario * 1.20
nSalLiquido := nAumento * (1-nDesconto)


Neste exemplo so utilizadas algumas expresses para calcular o salrio lquido aps um
aumento. Os operandos de uma expresso podem ser uma varivel, uma constante, um
campo de arquivo ou uma funo.


Operadores Matemticos

Os operadores utilizados em ADVPL para clculos matemticos so:

+ Adio
- Subtrao
* Multiplicao
/ Diviso
** ou ^ Exponenciao
% Mdulo (Resto da Diviso)


Operadores de String

Os operadores utilizados em ADVPL para tratamento de caracteres so:

+ Concatenao de strings (unio)
- Concatenao de strings com eliminao dos brancos finais das strings
intermedirias
$ Comparao de Substrings (contido em)


- 40 -

ADVPL Completo



Operadores Relacionais

Os operadores utilizados em ADVPL para operaes e avaliaes relacionais so:

< Comparao Menor
> Comparao Maior
= Comparao Igual
== Comparao Exatamente Igual (para caracteres)
<= Comparao Menor ou Igual
>= Comparao Maior ou Igual
<> ou #
ou !=
Comparao Diferente


Operadores Lgicos

Os operadores utilizados em ADVPL para operaes e avaliaes lgicas so:

.And. E lgico
.Or. OU lgico
.Not. ou ! NO lgico


Operadores de Atribuio

Os operadores utilizados em ADVPL para atribuio de valores a variveis de memria so:

:= Atribuio Simples
+= Adio e Atribuio em Linha
-= Subtrao e Atribuio em Linha
*= Multiplicao e Atribuio em Linha
/= Diviso e Atribuio em Linha
**= ou
^=
Exponenciao e Atribuio em Linha
%= Mdulo (resto da diviso) e Atribuio em Linha


E Atribuio Simples

O sinal de igualdade utilizado para atribuir valor a uma varivel de memria.
nVariavel := 10


E Atribuio em Linha

O operador de atribuio em linha caracterizado por dois pontos e o sinal de igualdade. Tem
a mesma funo do sinal de igualdade sozinho, porm aplica a atribuio s variveis. Com ele
pode-se atribuir mais de uma varivel ao mesmo tempo.

nVar1 := nVar2 := nVar3 := 0


- 41 -

ADVPL Completo


Quando diversas variveis so inicializadas em uma mesma linha, a atribuio comea da
direita para a esquerda, ou seja, nVar3 recebe o valor zero inicialmente, nVar2 recebe o
contedo de nVar3 e nVar1 recebe o contedo de nVar2 por final.

Com o operador de atribuio em linha, pode-se substituir as inicializaes individuais de cada
varivel por uma inicializao apenas:

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

O operador de atribuio em linha tambm pode ser utilizado para substituir valores de
campos em um banco de dados.

E Atribuio Composta

Os operadores de atribuio composta so uma facilidade da linguagem ADVPL para
expresses de clculo e atribuio. Com eles pode-se economizar digitao:

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 linguagem ADVPL possui operadores para realizar incremento ou decremento de variveis.
Entende-se por incremento aumentar o valor de uma varivel numrica em 1 e entende-se por
decremento diminuir o valor da varivel em 1. Os operadores so:

++ Incremento Ps ou Pr-fixado
-- Decremento Ps ou Pr-fixado

Os operadores de decremento/incremento podem ser colocados tanto antes (pr-fixado) como
depois (ps-fixado) do nome da varivel. Dentro de uma expresso, a ordem do operador
muito importante, podendo alterar o resultado da expresso. Os operadores incrementais so
executados da esquerda para a direita dentro de uma expresso.

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

O valor da varivel nB resulta em 21, pois a primeira referncia a nA (antes do ++) continha o
valor 10 que foi considerado e imediatamente aumentado em 1. Na segunda referncia a nA,
este j possua o valor 11. O que foi efetuado foi a soma de 10 mais 11, igual a 21. O
resultado final aps a execuo destas duas linhas a varivel nB contendo 21 e a varivel nA
contendo 11.

No entanto:

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


- 42 -

ADVPL Completo


Resulta em 22, pois o operador incremental aumentou o valor da primeira nA antes que seu
valor fosse considerado.

Operadores Especiais

Alm dos operadores comuns, o ADVPL possui alguns outros operadores ou identificadores.
Estas so suas finalidades:


() Agrupamento ou Funo
[] Elemento de Matriz
{} Definio de Matriz, Constante ou Bloco de Cdigo
-> Identificador de Apelido
& Macro substituio
@ Passagem de parmetro por referncia
|| Passagem de parmetro por valor

- Os parnteses so utilizados para agrupar elementos em uma expresso mudando a
ordem de precedncia da avaliao da expresso (segundo as regras matemticas por
exemplo). Tambm servem para envolver os argumentos de uma funo.

- Os colchetes so utilizados para especificar um elemento especfico de uma matriz. Por
exemplo, A[3,2], refere-se ao elemento da matriz A na linha 3, coluna 2.

- As chaves so utilizadas para a especificao de matrizes literais ou blocos de cdigo.
Por exemplo, A:={10,20,30} cria uma matriz chamada A com trs elementos.

- O smbolo -> identifica um campo de um arquivo diferenciando-o de uma varivel. Por
exemplo, FUNC->nome refere-se ao campo nome do arquivo FUNC. Mesmo que exista uma
varivel chamada nome, o campo nome que ser acessado.

- O smbolo & identifica uma avaliao de expresso atravs de macro e visto em
detalhes na documentao sobre macro substituio

.
- O smbolo @ utilizado para indicar que durante a passagem de uma varivel para uma
funo ou procedimento ela seja tomada como uma referncia e no como valor.

- O smbolo || utilizado para indicar que durante a passagem de uma varivel para
uma funo ou procedimento ela seja tomada como um e valor no como referncia.

- 43 -

ADVPL Completo



Ordem de Precedncia dos Operadores

Dependendo do tipo de operador, existe uma ordem de precedncia para a avaliao dos
operandos. Em princpio, todas as operaes com os operadores, so realizadas da esquerda
para a direita se eles tiverem o mesmo nvel de prioridade.

A ordem de precedncia, ou nvel de prioridade de execuo, dos operadores em ADVPL :

1. Operadores de Incremento/Decremento pr-fixado
2. Operadores de String
3. Operadores Matemticos
4. Operadores Relacionais
5. Operadores Lgicos
6. Operadores de Atribuio
7. Operadores de Incremento/Decremento ps-fixado

Em expresses complexas com diferentes tipos de operadores, a avaliao seguir essa
seqncia. Caso exista mais de um operador do mesmo tipo (ou seja, de mesmo nvel), a
avaliao se d da esquerda para direita. Para os operadores matemticos entretanto, h uma
precedncia a seguir:

1. Exponenciao
2. Multiplicao e Diviso
3. Adio e Subtrao

Considere o exemplo:

Local nResultado := 2+10/2+5*3+2^3

O resultado desta expresso 30, pois primeiramente calculada a exponenciao 2^3(=8),
ento so calculadas as multiplicaes e divises 10/2(=5) e 5*3(=15), e finalmente as
adies resultando em 2+5+15+8(=30).

E Alterao da Precedncia

A utilizao de parnteses dentro de uma expresso altera a ordem de precedncia dos
operadores. Operandos entre parnteses so analisados antes dos que se encontram fora dos
parnteses. Se existirem mais de um conjunto de parnteses no-aninhados, o grupo mais a
esquerda ser avaliado primeiro e assim sucessivamente.

Local nResultado := (2+10)/(2+5)*3+2^3

No exemplo acima primeiro ser calculada a exponenciao 2^3(=8). Em seguida 2+10(=12)
ser calculado, 2+5(=7) calculado, e finalmente a diviso e a multiplicao sero efetuadas, o
que resulta em 12/7*3+8(=13.14).

Se existirem vrios parnteses aninhados, ou seja, colocados um dentro do outro, a avaliao
ocorrer do parnteses mais intero em direo ao mais externo.







- 44 -

ADVPL Completo



4.5.3. Operao de Macro Substituio

O operador de macro substituio, simbolizado pelo "e" comercial (&), utilizado para a
avaliao de expresses em tempo de execuo. Funciona como se uma expresso
armazenada fosse compilada em tempo de execuo, antes de ser de fato executada.

Considere o exemplo:

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

A varivel X atribuda com o valor 10, enquanto a varivel Y atribuda com a string de
caracteres contendo "X + 1".

A terceira linha utiliza o operador de macro. Esta linha faz com que o nmero 11 seja atribudo
varivel B. Pode-se perceber que esse o valor resultante da expresso em formato de
caractere contida na varivel Y.

Utilizando-se uma tcnica matemtica elementar, a substituio, temos que na segunda linha,
Y definido como "X + 1", ento pode-se substituir Y na terceira linha:

03 B := &"X + 1"
O operador de macro cancela as aspas:
03 B := X + 1

Pode-se perceber que o operador de macro remove as aspas, o que deixa um pedao de
cdigo para ser executado. Deve-se ter em mente que tudo isso acontece em tempo de
execuo, o que torna tudo muito dinmico. Uma utilizao interessante criar um tipo de
calculadora, ou avaliador de frmulas, que determina o resultado de algo que o usurio digita.

O operador de macro tem uma limitao: variveis referenciadas dentro da string de
caracteres (X nos exemplos anteriores) no podem ser locais.













- 45 -

ADVPL Completo



4.5.4. Funes de manipulao de variveis

Alm de atribuir, controlar o escopo e macro executar o contedo das variveis necessrio
manipular seu contedo atravs de funes especficas da linguagem para cada situao.

As operaes de manipulao de contedo mais comuns em programao so:

E Converses entre tipos de variveis
E Manipulao de strings
E Manipulao de variveis numricas
E Verificao de tipos de variveis
E Manipulao de arrays
E Execuo de blocos de cdigo

Neste tpico sero abordadas as converses entre tipos de variveis e as funes de
manipulao de strings e variveis numricas.


Converses entre tipos de variveis

As funes mais utilizadas nas operaes entre converso entre tipos de variveis so:

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

CTOD()


Sintaxe CTOD(cData)
Descrio
Realiza a converso de uma informao do tipo caracter no formato
DD/MM/AAAA para uma varivel do tipo data.



CVALTOCHAR()


Sintaxe CVALTOCHAR(nValor)
Descrio
Realiza a converso de uma informao do tipo numrico em uma string,
sem a adio de espaos a informao.


- 46 -

ADVPL Completo




DTOC()


Sintaxe DTOC(dData)
Descrio
Realiza a converso de uma informao do tipo data para em caracter, sendo
o resultado no formato DD/MM/AAAA.



DTOS()


Sintaxe DTOS(dData)
Descrio
Realiza a converso de uma informao do tipo data em um caracter, sendo
o resultado no formato AAAAMMDD.



STOD()


Sintaxe STOD(sData)
Descrio
Realiza a converso de uma informao do tipo caracter com contedo no
formato AAAAMMDD em data.


STR()


Sintaxe STR(nValor)
Descrio
Realiza a converso de uma informao do tipo numrico em uma string,
adicionando espaos direita.


STRZERO()


Sintaxe STRZERO(nValor, nTamanho)
Descrio
Realiza a converso de uma informao do tipo numrico em uma string,
adicionando zeros esquerda do nmero convertido, de forma que a string
gerada tenha o tamanho especificado no parmetro.


VAL()


Sintaxe VAL(cValor)
Descrio Realiza a converso de uma informao do tipo caracter em numrica.

- 47 -

ADVPL Completo




Manipulao de strings

As funes mais utilizadas nas operaes de manipulao do contedo de strings so:

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

ALLTRIM()


Sintaxe ALLTRIM(cString)
Descrio
Retorna uma string sem os espaos direita e esquerda, referente ao
contedo informado como parmetro.

A funo ALLTRIM() implementa as aes das funes RTRIM (right trim) e
LTRIM (left trim).


ASC()


Sintaxe ASC(cCaractere)
Descrio
Converte uma informao caractere em seu valor de acordo com a tabela
ASCII.


AT()


Sintaxe AT(cCaractere, cString )
Descrio
Retorna a primeira posio de um caracter ou string dentro de outra string
especificada.



- 48 -

ADVPL Completo



CHR()


Sintaxe CHR(nASCII)
Descrio
Converte um valor nmero referente a uma informao da tabela ASCII no
caractere que esta informao representa.



LEN()


Sintaxe LEN(cString)
Descrio Retorna o tamanho da string especificada no parmetro.


LOWER()


Sintaxe LOWER(cString)
Descrio
Retorna uma string com todos os caracteres minsculos, tendo como base a
string passada como parmetro.


RAT()


Sintaxe RAT(cCaractere, cString)
Descrio
Retorna a ltima posio de um caracter ou string dentro de outra string
especificada.


STUFF()


Sintaxe STUFF(cString, nPosInicial, nExcluir, cAdicao)
Descrio
Permite substituir um contedo caractere em uma string j existente,
especificando a posio inicial para esta adio e o nmero de caracteres que
sero substitudos.


SUBSTR()


Sintaxe SUBSTR(cString, nPosInicial, nCaracteres)
Descrio
Retorna parte do contedo de uma string especificada, de acordo com a
posio inicial deste contedo na string e a quantidade de caracteres que
dever ser retornada a partir daquele ponto (inclusive).


- 49 -

ADVPL Completo


UPPER()


Sintaxe UPPER(cString)
Descrio
Retorna uma string com todos os caracteres maisculos, tendo como base a
string passada como parmetro.


Manipulao de variveis numricas

As funes mais utilizadas nas operaes de manipulao do contedo de strings so:

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

ABS()

Sintaxe ABS(nValor)
Descrio
Retorna um valor absoluto (independente do sinal) com base no valor
especificado no parmetro.



INT()

Sintaxe INT(nValor)
Descrio Retorna a parte inteira de um valor especificado no parmetro.


NOROUND()

Sintaxe NOROUND(nValor, nCasas)
Descrio
Retorna um valor, truncando a parte decimal do valor especificado no
parmetro de acordo com a quantidade de casas decimais solicitadas.



ROUND()

Sintaxe ROUND(nValor, nCasas)
Descrio
Retorna um valor, arredondando a parte decimal do valor especificado no
parmetro de acordo com a quantidades de casas decimais solicitadas,
utilizando o critrio matemtico.



- 50 -

ADVPL Completo



Verificao de tipos de variveis

As funes de verificao permitem a consulta ao tipo do contedo da varivel durante a
execuo do programa.

TYPE()
VALTYPE()

TYPE()

Sintaxe TYPE(cVariavel)
Descrio
Determina o tipo do contedo de uma varivel, a qual no foi definida na
funo em execuo.


VALTYPE()

Sintaxe VALTYPE(cVarivel)
Descrio
Determina o tipo do contedo de uma varivel, a qual foi definida na funo
em execuo.






















- 51 -

ADVPL Completo



5. Estruturas bsicas de programao

O ADVPL suporta vrias estruturas de controle que permitem mudar a seqncia de fluxo de
execuo de um programa. Estas estruturas permitem a execuo de cdigo baseado em
condies lgica e a repetio da execuo de pedaos de cdigo qualquer nmero de vezes.

Em ADVPL, todas as estruturas de controle podem ser "aninhadas" dentro de todas as demais
estruturas contanto que estejam aninhadas propriamente. Estruturas de controle tm um
identificador de incio e um de fim, e qualquer estrutura aninhada deve se encontrar entre
estes identificadores.

Tambm existem estruturas de controle para determinar que elementos, comandos, etc. em
um programa sero compilados. Estas so as diretivas do pr-processador #ifdef...#endif e
#ifndef...#endif. Consulte a documentao sobre o pr-processador para maiores detalhes.

As estruturas de controle em ADVPL esto divididas em:

E Estruturas de repetio
E Estruturas de deciso

5.1. Estruturas de repetio

Estruturas de repetio so designadas para executar uma seo de cdigo mais de uma vez.
Por exemplo, imaginando-se a existncia de uma funo para imprimir um relatrio, pode-se
desejar imprimi-lo quatro vezes. Claro, pode-se simplesmente chamar a funo de impresso
quatro vezes em seqncia, mas isto se tornaria pouco profissional e no resolveria o
problema se o nmero de relatrios fosse varivel.

Em ADVPL existem dois comandos para a repetio de sees de cdigo, que so os comandos
FOR...NEXT e o comando WHILE...ENDDO
E Sintaxe
.

O Comando FOR...NEXT

A estrutura de controle FOR...NEXT, ou simplesmente o loop FOR, repete uma seo de cdigo
em um nmero determinado de vezes.


FOR Variavel := nValorInicial TO nValorFinal [STEP nIncremento]
Comandos...
[EXIT]
[LOOP]
NEXT

- 52 -

ADVPL Completo



E Parmetros

Varivel Especifica uma varivel ou um elemento de uma matriz para
atuar como um contador. A varivel ou o elemento da matriz
no precisa ter sido declarado antes da execuo do comando
FOR...NEXT. Se a varivel no existir, ser criada como uma
varivel privada.
nValorI nicial
TO nValorFinal
nValorInicial o valor inicial para o contador; nValorFinal o
valor final para o contador. Pode-se utilizar valores numricos
literais, variveis ou expresses, contanto que o resultado seja
do tipo de dado numrico.
STEP
nI ncremento
nIncremento a quantidade que ser incrementada ou
decrementada no contador aps cada execuo da seo de
comandos. Se o valor de nIncremento for negativo, o contador
ser decrementado. Se a clusula STEP for omitida, o contador
ser incrementado em 1. Pode-se utilizar valores numricos
literais, variveis ou expresses, contanto que o resultado seja
do tipo de dado numrico.
Comandos Especifica um ou mais instrues de comando ADVPL que sero
executadas.
EXIT Transfere o controle de dentro do comando FOR...NEXT para o
comando imediatamente seguinte ao NEXT, ou seja, finaliza a
repetio da seo de comandos imediatamente. Pode-se
colocar o comando EXIT em qualquer lugar entre o FOR e o
NEXT.
LOOP Retorna o controle diretamente para a clusula FOR sem
executar o restante dos comandos entre o LOOP e o NEXT. O
contador incrementado ou decrementado normalmente, como
se o NEXT tivesse sido alcanado. Pode-se colocar o comando
LOOP em qualquer lugar entre o FOR e o NEXT.




Uma varivel ou um elemento de uma matriz utilizado como um
contador para especificar quantas vezes os comandos ADVPL dentro da
estrutura FOR...NEXT so executados.

Os comandos ADVPL depois do FOR so executados at que o NEXT
seja alcanado. O contador (Variavel) ento incrementado ou
decrementado com o valor em nIncremento (se a clusula STEP for
omitida, o contador incrementado em 1). Ento, o contador
comparado com o valor em nValorFinal. Se for menor ou igual ao valor
em nValorFinal, os comandos seguintes ao FOR so executados
novamente.

Se o valor for maior que o contido em nValorFinal, a estrutura
FOR...NEXT terminada e o programa continua a execuo no
primeiro comando aps o NEXT.

Os valores de nValorInicial, nValorFinal e nIncremento so apenas
considerados inicialmente. Entretanto, mudar o valor da varivel
utilizada como contador dentro da estrutura afetar o nmero de
vezes que a repetio ser executada. Se o valor de nIncremento
negativo e o valor de nValorInicial maior que o de nValorFinal, o
contador ser decrementado a cada repetio.

- 53 -

ADVPL Completo


Exemplo:

Local nCnt
Local nSomaPar := 0
For nCnt := 0 To 100 Step 2
nSomaPar += nCnt
Next
Alert( "A soma dos 100 primeiros nmeros pares : " + ;
cValToChar(nSomaPar) )
Return

Este exemplo imprime a soma dos 100 primeiros nmeros pares. A soma obtida atravs da
repetio do clculo utilizando a prpria varivel de contador. Como a clusula STEP est
sendo utilizada, a varivel nCnt ser sempre incrementada em 2. E como o contador comea
com 0, seu valor sempre ser um nmero par.


O Comando WHILE...ENDDO

A estrutura de controle WHILE...ENDDO, ou simplesmente o loop WHILE, repete uma seo de
cdigo enquanto uma determinada expresso resultar em verdadeiro (.T.).

E Sintaxe

WHILE lExpressao
Comandos...
[EXIT]
[LOOP]
ENDDO

E Parmetros

lExpressao Especifica uma expresso lgica cujo valor determina quando os
comandos entre o WHILE e o ENDDO so executados. Enquanto o
resultado de lExpressao for avaliado como verdadeiro (.T.), o
conjunto de comandos so executados.
Comandos Especifica um ou mais instrues de comando ADVPL que sero
executadas enquanto lExpressao for avaliado como verdadeiro (.T.).
EXIT Transfere o controle de dentro do comando WHILE...ENDDO para o
comando imediatamente seguinte ao ENDDO, ou seja, finaliza a
repetio da seo de comandos imediatamente. Pode-se colocar o
comando EXIT em qualquer lugar entre o WHILE e o ENDO.
LOOP Retorna o controle diretamente para a clusula WHILE sem executar
o restante dos comandos entre o LOOP e o ENDDO. A expresso em
lExpressao reavaliada para a deciso se os comandos continuaro
sendo executados.



Os comandos entre o WHILE e o ENDDO so executados enquanto o
resultado da avaliao da expresso em lExpressao permanecer
verdadeiro (.T.). Cada palavra chave WHILE deve ter uma palavra
chave ENDDO correspondente.




- 54 -

ADVPL Completo


Exemplo :

Local nNumber := nAux := 350
nAux := Int(nAux / 2)
While nAux > 0
nSomaPar += nCnt
Next
Alert( "A soma dos 100 primeiros nmeros pares : " + ;
cValToChar(nSomaPar) )
Return


5.1.1. Influenciando o fluxo de repetio

A linguagem ADVPL permite a utilizao de comandos que influem diretamente em um
processo de repetio, sendo eles:

E LOOP
E EXIT

LOOP

A instruo LOOP utilizada para forar um desvio no fluxo do programa de volta a anlise da
condio de repetio. Desta forma, todas as operaes que seriam realizadas dentro da
estrutura de repetio aps o LOOP sero desconsideradas.

Exemplo:

aItens:= ListaProdutos() // funo ilustrativa que retorna um array com dados dos produtos
nQuantidade := Len(aItens)
nItens := 0

While nItens < nQuantidade

nItens++
IF BLOQUEADO(aItens [nItens]) // funo ilustrativa que verifica se o produto est
LOOP // bloqueado.
ENDIF

IMPRIME() // funo ilustrativa que realiza a impresso de um item liberado para 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 instruo EXIT utilizada para forar o trmino de uma estrutura de repetio. Desta forma,
todas as operaes que seriam realizadas dentro da estrutura de repetio aps o EXIT sero
desconsideradas, e o programa ir continuar a execuo a partir da prxima instruo
posterior ao trmino da estrutura (END ou NEXT).

Exemplo:

While .T.

IF MSGYESNO(Deseja jogar o jogo da forca?)
JFORCA() // Funo ilustrativa que implementa o algoritmo do jogo da forca.
ELSE
EXIT
ENDIF
End

MSGINFO(Final 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

Estruturas de desvio so designadas para executar uma seo de cdigo se determinada
condio lgica resultar em verdadeiro (.T.).

Em ADVPL existem dois comandos para execuo de sees de cdigo de acordo com
avaliaes lgicas, que so os comandos IF...ELSE...ENDIF e o comando DO
CASE...ENDCASE
E Sintaxe
.

O Comando IF...ELSE...ENDIF

Executa um conjunto de comandos baseado no valor de uma expresso lgica.


IF lExpressao
Comandos
[ELSE
Comandos...]
ENDIF

E Parmetros

LExpressao Especifica uma expresso lgica que avaliada. Se lExpressao
resultar em verdadeiro (.T.), qualquer comando seguinte ao IF e
antecedente ao ELSE ou ENDIF (o que ocorrer primeiro) ser
executado.
Se lExpressao resultar em falso (.F.) e a clusula ELSE for definida,
qualquer comando aps essa clusula e anterior ao ENDIF ser
executada. Se a clusula ELSE no for definida, todos os comandos
entre o IF e o ENDIF so ignorados. Neste caso, a execuo do
programa continua com o primeiro comando seguinte ao ENDIF.
Comandos Conjunto de comandos ADVPL que sero executados dependendo da
avaliao da expresso lgica em lExpressao.



Pode-se aninhar um bloco de comando IF...ELSE...ENDIF dentro de
outro bloco de comando IF...ELSE...ENDIF. Porm, para a avaliao de
mais de uma expresso lgica, deve-se utilizar o comando DO
CASE...ENDCASE ou a verso estendida da expresso
IF...ELSE...ENDIF denominada IF...ELSEIF...ELSE...ENDIF.


Exemplo:
Local dVencto := CTOD("31/12/01")
If Date() > dVencto
Alert("Vencimento ultrapassado!")
Endif
Return

- 57 -

ADVPL Completo



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

Executa o primeiro conjunto de comandos cuja expresso condicional resulta em verdadeiro
(.T.).

E Sintaxe

IF lExpressao1
Comandos
[ELSEIF lExpressaoX
Comandos]
[ELSE
Comandos...]
ENDIF

E Parmetros

lExpressao1 Especifica uma expresso lgica que avaliada. Se lExpressao
resultar em verdadeiro (.T.), executar os comandos
compreendidos entre o IF e a prxima expresso da estrutura
(ELSEIF ou IF)
Se lExpressao resultar em falso (.F.), ser avaliada a prxima
expresso lgica vinculada ao comando ELSEIF, ou se o mesmo
no existir ser executada a ao definida no comando ELSE.
lExpressaoX Especifica uma expresso lgica que ser avaliada para cada
comando ELSEIF. Esta expresso somente ser avaliada se a
expresso lgica especificada no comando IF resultar em falso
(.F.).
Caso a lExpressaoX avaliada resulte em falso (.F.) ser avaliada a
prxima expresso lExpressaoX vinculada ao prximo comando
ELSEIF, ou caso o mesmo no exista ser executada a ao
definida parao comando ELSE.
Comandos Conjunto de comandos ADVPL que sero executados dependendo
da avaliao da expresso lgica em lExpressao.



O campo IF...ELSE...ELSEIF...ENDIF possui a mesma estruturao de
deciso que pode ser obtida com a utilizao do comando DO
CASE...ENDCASE.


- 58 -

ADVPL Completo



Exemplo:
Local dVencto := CTOD("31/12/01")
If Date() > dVencto
Alert("Vencimento ultrapassado!")
ElseIf Date() == dVencto
Alert("Vencimento na data!")
Else
Alert("Vencimento dentro do prazo!")
Endif
Return


O Comando DO CASE...ENDCASE

Executa o primeiro conjunto de comandos cuja expresso condicional resulta em verdadeiro
(.T.).

E Sintaxe

DO CASE
CASE lExpressao1
Comandos
[CASE lExpressao2
Comandos
...
CASE lExpressaoN
Comandos]
[OTHERWISE
Comandos]
ENDCASE

E Parmetros

CASE
lExpressao1
Comandos...
Quando a primeira expresso CASE resultante em verdadeiro (.T.)
for encontrada, o conjunto de comandos seguinte executado. A
execuo do conjunto de comandos continua at que a prxima
clusula CASE, OTHERWISE ou ENDCASE seja encontrada. Ao
terminar de executar esse conjunto de comandos, a execuo
continua com o primeiro comando seguinte ao ENDCASE.
Se uma expresso CASE resultar em falso (.F.), o conjunto de
comandos seguinte a esta at a prxima clusula ignorado.
Apenas um conjunto de comandos executado. Estes so os
primeiros comandos cuja expresso CASE avaliada como
verdadeiro (.T.). Aps a execuo, qualquer outra expresso CASE
posterior ignorada (mesmo que sua avaliao resultasse em
verdadeiro).
OTHERWI SE
Comandos
Se todas as expresses CASE forem avaliadas como falso (.F.), a
clusula OTHERWISE determina se um conjunto adicional de
comandos deve ser executado. Se essa clusula for includa, os
comandos seguintes sero executados e ento o programa
continuar com o primeiro comando seguinte ao ENDCASE. Se a
clusula OTHERWISE for omitida, a execuo continuar
normalmente aps a clusula ENDCASE.


- 59 -

ADVPL Completo




O Comando DO CASE...ENDCASE utilizado no lugar do comando
IF...ENDIF quando um nmero maior do que uma expresso deve ser
avaliada, substituindo a necessidade de mais de um comando
IF...ENDIF aninhados.


Exemplo:

Local nMes := Month(Date())
Local cPeriodo := ""

DO CASE
CASE nMes <= 3
cPeriodo := "Primeiro Trimestre"
CASE nMes >= 4 .And. nMes <= 6
cPeriodo := "Segundo Trimestre"
CASE nMes >= 7 .And. nMes <= 9
cPeriodo := "Terceiro Trimestre"
OTHERWISE
cPeriodo := "Quarto Trimestre"
ENDCASE

Return





















- 60 -

ADVPL Completo



6. Arrays e Blocos de Cdigo

6.1. Arrays

Arrays ou matrizes, so colees de valores, semelhantes a uma lista. Uma matriz pode ser
criada atravs de diferentes maneiras.

Cada item em um array referenciado pela indicao de sua posio numrica na lista,
iniciando pelo nmero 1.

O exemplo a seguir declara uma varivel, atribui um array de trs elementos a ela, e ento
exibe um dos elementos e o tamanho do array:

Local aLetras // Declarao da varivel
aLetras := {"A", "B", "C"} // Atribuio do array a varivel
Alert(aLetras[2]) // Exibe o segundo elemento do array
Alert(cValToChar(Len(aLetras))) // Exibe o tamanho do array

O ADVPL permite a manipulao de arrays facilmente. Enquanto que em outras linguagens
como C ou Pascal necessrio alocar memria para cada elemento de um array (o que
tornaria a utilizao de "ponteiros" necessria), o ADVPL se encarrega de gerenciar a memria
e torna simples adicionar elementos a um array, utilizando a funo AADD():

AADD(aLetras,"D") // Adiciona o quarto elemento ao final do array
Alert(aLetras[4]) // Exibe o quarto elemento
Alert(aLetras[5]) // Erro! No h um quinto elemento no array


Arrays como Estruturas

Uma caracterstica interessante do ADVPL que um array pode conter qualquer tipo de dado:
nmeros, datas, lgicos, caracteres, objetos, etc., e ao mesmo tempo. Em outras palavras, os
elementos de um array no precisam ser necessariamente do mesmo tipo de dado, em
contraste com outras linguagens como C e Pascal.

aFunct1 := {"Pedro",32,.T.}

Este array contem uma string, um nmero e um valor lgico. Em outras linguagens como C ou
Pascal, este "pacote" de informaes pode ser chamado como um "struct" (estrutura em C, por
exemplo) ou um "record" (registro em Pascal, por exemplo). Como se fosse na verdade um
registro de um banco de dados, um pacote de informaes construdo com diversos campos.
Cada campo tendo um pedao diferente de dado.

Suponha que no exemplo anterior, o array aFunct1 contenha informaes sobre o nome de
uma pessoa, sua idade e sua situao matrimonial. Os seguintes #defines podem ser criados
para indicar cada posio dos valores dentro de um array:

#define FUNCT_NOME 1
#define FUNCT_IDADE 2
#define FUNCT_CASADO 3

- 61 -

ADVPL Completo



E considere mais alguns arrays para representar mais pessoas:

aFunct2 := {"Maria" , 22, .T.}
aFunct3 := {"Antnio", 42, .F.}

Os nomes podem ser impressos assim:

Alert(aFunct1[FUNCT_NOME])
Alert(aFunct2[FUNCT_NOME])
Alert(aFunct3[FUNCT_NOME])

Agora, ao invs de trabalhar com variveis individuais, pode-se agrup-las em um outro array,
do mesmo modo que muitos registros so agrupados em uma tabela de banco de dados:

aFuncts := {aFunct1, aFunct2, aFunct3}

Que equivalente a isso:

aFuncts := { {"Pedro" , 32, .T.}, ;
{"Maria" , 22, .T.}, ;
{"Antnio", 42, .F.} }

aFuncts um array com 3 linhas por 3 colunas. Uma vez que as variveis separadas foram
combinadas em um array, os nomes podem ser exibidos assim:

Local nCount
For nCount := 1 To Len(aFuncts)
Alert(aFuncts[nCount, FUNCT_NOME])
// O acesso a elementos de um array multidimensional
// pode ser realizado tambm desta forma:
// aFuncts[nCount][FUNCT_NOME]
Next nCount

A varivel nCount seleciona que funcionrio (ou que linha) de interesse. Ento a constante
FUNCT_NOME seleciona a primeira coluna daquela linha.

Cuidados com Arrays

Arrays so listas de elementos, portanto memria necessria para armazenar estas
informaes. Como estes arrays podem ser multidimensionais, a memria necessria ser a
multiplicao do nmero de itens em cada dimenso do array, considerando-se o tamanho do
contedo de cada elemento contido nesta. Portanto o tamanho de um array pode variar muito.

A facilidade da utilizao de arrays, mesmo que para armazenar informaes em pacotes como
descrito anteriormente, no compensada pela utilizao em memria quando o nmero de
itens em um array for muito grande. Quando o nmero de elementos for muito grande deve-se
procurar outras solues, como a utilizao de um arquivo de banco de dados temporrio.

- 62 -

ADVPL Completo




6.1.1. Inicializando arrays

Algumas vezes o tamanho da matriz conhecido previamente. Outras vezes o tamanho do
array somente ser conhecido em tempo de execuo.

Se o tamanho do array conhecido

Se o tamanho do array conhecido no momento que o programa escrito, h diversas
maneiras de implementar o cdigo:

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

Este cdigo preenche o array com uma tabela de quadrados. Os valores sero 1, 4, 9, 16 ...
81, 100. Note que a linha 07 se refere varivel aX, mas poderia tambm trabalhar com aY ou
aZ.

O objetivo deste exemplo demonstrar trs modos de criar um array de tamanho conhecido
no momento da criao do cdigo.

1. Na linha 02 o array criada usando aX[10]. Isto indica ao ADVPL para alocar espao
para 10 elementos no array. Os colchetes [ e ] so utilizados para indicar o tamanho
necessrio.

2. Na linha 03 utilizada a funo array com o parmetro 10 para criar o array, e o
retorno desta funo atribudo varivel aY. Na linha 03 efetuado o que se chama
"desenhar a imagen do array". Como se pode notar, existem dez 0s na lista encerrada entre
chaves ({}). Claramente, este mtodo no o utilizado para criar uma matriz de 1000
elementos.

3. O terceiro mtodo difere dos anteriores porque inicializa a matriz com os valores
definitivos. Nos dois primeiros mtodos, cada posio da matriz contm um valor nulo (Nil) e
deve ser inicializado posteriormente.

4. A linha 07 demonstra como um valor pode ser atribudo para uma posio existente em
uma matriz especificando o ndice entre colchetes.

- 63 -

ADVPL Completo



Se o tamanho do array no conhecido

Se o tamanho do array no conhecido at o momento da execuo do programa, h algumas
maneiras de criar um array e adicionar elementos a ele. O exemplo a seguir ilustra a idia de
criao de um array vazio (sem nenhum elemento) e adio de elementos dinamicamente.

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

1. A linha 02 utiliza os colchetes para criar um array vazio. Apesar de no ter nenhum
elemento, seu tipo de dado array.

2. Na linha 03 a chamada da funo array cria uma matriz sem nenhum elemento.

3. Na linha 04 est declarada a representao de um array vazio em ADVPL. Mais uma
vez, esto sendo utilizadas as chaves para indicar que o tipo de dados da varivel array.
Note que {} um array vazio (tem o tamanho 0), enquanto {Nil} um array com um nico
elemento nulo (tem tamanho 1).

Porque cada uma destes arrays no contm elementos, a linha 07 utiliza a funo AADD() para
adicionar elementos sucessivamente at o tamanho necessrio (especificado por exemplo na
varivel nSize).


6.1.2. Funes de manipulao de arrays

A linguagem ADVPL possui diversas funes que auxiliam na manipulao de arrays, dentre as
quais podemos citar as mais utilizadas:

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


- 64 -

ADVPL Completo



ARRAY()

Sintaxe ARRAY(nLinhas, nColunas)
Descrio
A funo Array() utilizada na definio de variveis de tipo array, como
uma opo a sintaxe utilizando chaves ({}).

AADD()

Sintaxe AADD(aArray, xItem)
Descrio
A funo AADD() permite a insero de um item em um array j existente,
sendo que este item podem ser um elemento simples, um objeto ou outro
array.

ACLONE()

Sintaxe AADD(aArray)
Descrio
A funo ACLONE() realiza a cpia dos elementos de um array para outro
array integralmente.

ADEL()

Sintaxe ADEL(aArray, nPosio)
Descrio
A funo ADEL() permite a excluso de um elemento do array. Ao efetuar a
excluso de um elemento, todos os demais so reorganizados de forma que
a ultima posio do array passar a ser nula.

ASIZE()

Sintaxe ASIZE(aArray, nTamanho)
Descrio
A funo ASIZE permite a redefinio da estrutura de um array pr-
existente, adicionando ou removendo itens do mesmo.


ASORT()

Sintaxe ASORT(aArray, nInicio, nItens, bOrdem)
Descrio
A funo ASORT() permite que os itens de um array sejam ordenados a
partir de um critrio pr-estabelecido.


- 65 -

ADVPL Completo



ASCAN()

Sintaxe ASCAN(aArray, bSeek)
Descrio
A funo ASCAN() permite que seja identificada a posio do array que
contm uma determinada informao, atravs da anlise de uma expresso
descrita em um bloco de cdigo.

AINS()

Sintaxe AINS(aArray, nPosicao)
Descrio
A funo AINS() permite a insero de um elemento no array especificado
em qualquer ponto da estrutura do mesmo, diferindo desta forma da funo
AADD() a qual sempre insere um novo elemento ao final da estrutura j
existente.



6.1.3. Cpia de arrays

Conforme comentado anteriormente, um array uma rea na memria, o qual possui uma
estrutura permite que as informaes sejam armazenadas e organizadas das mais diversas
formas.

Com base nesse conceito, o array pode ser considerado apenas como um mapa ou um guia
de como as informaes esto organizadas e de como elas podem ser armazenadas ou
consultadas. Para se copiar um array deve-se levar este conceito em considerao, pois caso
contrrio o resultado esperado no ser o obtido na execuo da cpia.

Para copiar o contedo de uma varivel, utiliza-se o operador de atribuio :=, conforme
abaixo:


nPessoas := 10
nAlunos := nPessoas


Ao executar a atribuio de nAlunos com o contedo de nPessoas, o contedo de nPessoas
atribudo a varivel nAlunos, causando o efeito de cpia do contedo de uma varivel para
outra.

Isto porque o comando de atribuio copia o contedo da rea de memria representada pelo
nome nPessoas para a rea de memria representada pelo nome nAlunos. Mas ao utilizar o
operador de atribuio := da mesma forma que utilizado em variveis simples para se copiar
um array o efeito diferente:


aPessoas := {Ricardo, Cristiane, Andr, Camila}
aAlunos := aPessoas



- 66 -

ADVPL Completo


A varivel aPessoas represente uma rea de memria que contm a estrutura de um array
(mapa), no as informaes do array, pois cada informao est em sua prpria rea de
memria.



Desta forma ao atribuir o contedo representado pela varivel aPessoas a varivel aAlunos no
est se copiando as informaes e sim o mapa das reas de memria onde as informaes
esto realmente armazenadas.



Como foi copiado o mapa e no as informaes, qualquer ao utilizando o rtulo aAlunos ir
afetar as informaes do rtulo aPessoas. Com isso ao invs de se obter dois arrays distintos,
tem-se o mesmo array com duas formas de acesso (rtulos) diferentes.

Por esta razo deve ser utilizado o comando ACLONE() quando deseja-se obter um array com
a mesma estrutura e informaes que compe outro array j existente.


- 67 -

ADVPL Completo




6.2. Listas de Expresses e Blocos de Cdigo

Blocos de cdigo so um conceito existente h muito tempo em linguagens xBase. No como
algo que apareceu da noite para o dia, e sim uma evoluo progressiva utilizando a
combinao de muitos conceitos da linguagem para a sua implementao.

6.2.1. Premissas para utilizao de Blocos de Cdigo

Primeira premissa

O ADVPL uma linguagem baseada em funes. Funes tm um valor de retorno. Assim
como o operador de atribuio :=.

Assim, ao invs de escrever:

x := 10 // Atribui o valor 10 varivel chamada X
Alert("Valor de x: " + cValToChar(x))

Pode-se escrever:

// Atribui e ento exibe o valor da varivel X
Alert("Valor de x: " + cValtoChar(X := 10))

A expresso x:=10 avaliada primeiro, e ento seu resultado (o valor de X, que agora 10)
passada para a funo cvaltochar para a converso para caractere, e em seguida para a
funo alert para a exibio. Por causa desta regra de precedncia possvel atribuir um valor
a mais de uma varivel ao mesmo tempo:

Z := Y := X := 0

Por causa dessa regra, essa expresso avaliada como se fosse escrita assim:

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

Apesar de o ADVPL avaliar expresses da esquerda para a direita, no caso de atribuies isso
acontece ao contrrio, da direita para a esquerda. O valor atribudo varivel X, que retorna

- 68 -

ADVPL Completo


o valor para ser atribudo varivel Y e assim sucessivamente. Pode-se dizer que o zero foi
"propagado atravs da expresso".

Segunda premissa

Em ADVPL pode-se juntar diversas linhas de cdigo em uma nica linha fsica de comando. Por
exemplo, o cdigo:

If lAchou
Alert("Cliente encontrado!")
Endif
pode ser escrito assim:
If lAchou ; Alert("Cliente encontrado!") ;
Endif

O ponto-e-vrgula indica ao ADVPL que a nova linha de cdigo est para comear. Pode-se
ento colocar diversas linhas lgicas de cdigo na mesma linha fsica atravs do editor de texto
utilizado.

Apesar da possibilidade de se escrever todo o programa assim, em uma nica linha fsica, isto
no recomendado pois dificulta a legibilidade do programa e, conseqentemente, a
manuteno.

6.2.2. Lista de expresses

A evoluo dos blocos de cdigo comea com as listas de expresses. Nos exemplos a seguir,
o smbolo ==> indicar o retorno da expresso aps sua avaliao (seja para atribuir em uma
varivel, exibir para o usurio ou imprimir em um relatrio), que ser impresso em um
relatrio por exemplo.

Duas Linhas de Cdigo

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

Cada uma das linhas ter a expresso avaliada, e o valor da varivel ser ento impresso.

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

Este o mesmo cdigo que o anterior, apenas escrito em uma nica linha:

Alert( cValToChar( x := 10 ; y := 20 ) ) ==> 10

Apesar desse cdigo se encontrar em uma nica linha fsica, existem duas linhas lgicas
separadas pelo ponto e vrgula. Ou seja, esse cdigo equivalente a:

Alert( cValToChar( x := 10 ) )
y := 20

Portanto apenas o valor 10 da varivel x ser passado para as funes cvaltochar e alert para
ser exibido. E o valor 20 apenas ser atribudo varivel y.




- 69 -

ADVPL Completo


Convertendo para uma lista de expresses

Quando parnteses so colocados ao redor do cdigo e o sinal de ponto-e-vrgula substitudo
por uma vrgula apenas, o cdigo torna-se uma lista de expresses:

Alert( cValToChar ( ( X := 10 , Y := 20 ) ) ) ==> 20

O valor de retorno resultante de uma lista de expresses o valor resultante da ltima
expresso ou elemento da lista. Funciona como se fosse um pequeno programa ou funo, que
retorna o resultado de sua ltima avaliao (efetuadas da esquerda para a direita).

Neste exemplo, a expresso x := 10 avaliada, e ento a expresso y := 20, cujo valor
resultante passado para a funo alert e cvaltochar, e ento exibido. Depois que essa linha
de cdigo executada, o valor de X igual a 10 e o de y igual a 20, e 20 ser exibido.

Teoricamente, no h limitao para o nmero de expresses que podem ser combinadas em
uma lista de expresses. Na prtica, o nmero mximo por volta de 500 smbolos.
Debugar listas de expresses difcil porque as expresses no esto divididas em linhas de
cdigo fonte, o que torna todas as expresses associadas a uma mesma linha de cdigo. Isto
pode tornar muito difcil determinar onde um erro ocorreu.

Onde pode-se utilizar uma lista de expresses?

O propsito principal de uma lista de expresses agrup-las em uma nica unidade. Em
qualquer lugar do cdigo ADVPL que uma expresso simples pode ser utilizada, pode-se
utilizar uma lista de expresses. E ainda, pode-se fazer com que vrias coisas aconteam onde
normalmente apenas uma aconteceria.

X := 10 ; Y := 20
If X > Y
Alert("X")
Z := 1
Else
Alert("Y")
Z := -1
Endif

Aqui temos o mesmo conceito, escrito utilizando listas de expresses na funo IIF():

X := 10 ; Y := 20
iif( X > Y , ;
( Alert("X"), Z := 1 ) , ;
( Alert("Y"), Z := -1 ) )

De listas de expresses para blocos de cdigo

Considere a seguinte lista de expresses:

Alert( cValToChar( ( x := 10, y := 20 ) ) ) ==> 20

O ADVPL permite criar funes, que so pequenos pedaos de cdigo, como se fosse um
pequeno programa, utilizados para diminuir partes de tarefas mais complexas e reaproveitar
cdigo em mais de um lugar num programa. Para maiores detalhes consulte a documentao
sobre a criao de funes em ADVPL. Porm, a idia neste momento que a lista de
expresses utilizada na linha anterior pode ser criada como uma funo:

- 70 -

ADVPL Completo



Function Lista()
X := 10
Y := 20
Return Y

E a linha de exemplo com a lista de expresses pode ser substituda, tendo o mesmo
resultado, por:

Alert( cValToChar( Lista() ) ) ==> 20

Como mencionado anteriormente, uma lista de expresses como um pequeno programa ou
funo. Com poucas mudanas, uma lista de expresses pode se tornar um bloco de cdigo:

( X := 10 , Y := 20 ) // Lista de Expresses
{|| X := 10 , Y := 20 } // Bloco de Cdigo

Note as chaves {} utilizadas no bloco de cdigo. Ou seja, um bloco de cdigo uma matriz.
Porm na verdade, no uma lista de dados, e sim uma lista de comandos, uma lista de
cdigo.

// Isto uma matriz de dados
A := {10, 20, 30}
// Isto um bloco de cdigo, porm funciona como
// se fosse uma matriz de comandos
B := {|| x := 10, y := 20}

6.2.3. Blocos de Cdigo

Diferentemente de uma matriz, no se pode acessar elementos de um bloco de cdigo atravs
de um ndice numrico. Porm blocos de cdigo so semelhantes a uma lista de expresses, e
a uma pequena funo.

Ou seja, podem ser executados. Para a execuo, ou avaliao, de um bloco de cdigo, deve-
se utilizar a funo Eval():

nRes := Eval(B) ==> 20

Essa funo recebe como parmetro um bloco de cdigo e avalias todas as expresses
contidas neste bloco de cdigo, retornando o resultado da ltima expresso avaliada.

Passando Parmetros

J que blocos de cdigo so como pequenas funes, tambm possvel a passagem de
parmetros para um bloco de cdigo. Os parmetros devem ser informados entre as barras
verticais (||) separados por vrgulas, assim como em uma funo.

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

Porm deve-se notar que j que o bloco de cdigo recebe um parmetro, um valor deve ser
passado quando o bloco de cdigo for avaliado.

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


- 71 -

ADVPL Completo


Utilizando Blocos de Cdigo

Blocos de cdigo podem ser utilizados em diversas situaes. Geralmente so utilizados para
executar tarefas quando eventos de objetos so acionados ou para modificar o comportamento
padro de algumas funes.

Por exemplo, considere a matriz abaixo:

A := {"GARY HALL", "FRED SMITH", "TIM JONES"}

Esta matriz pode ser ordenada pelo primeiro nome, utilizando-se a chamada da funo
asort(A), resultado na matriz com os elementos ordenados dessa forma:

{"FRED SMITH", "GARY HALL", "TIM JONES"}

A ordem padro para a funo asort ascendente. Este comportamento pode ser modificado
atravs da informao de um bloco de cdigo que ordena a matriz de forma descendente:

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

O bloco de cdigo (de acordo com a documentao da funo asort) deve ser escrito para
aceitar dois parmetros que so os dois elementos da matriz para comparao. Note que o
bloco de cdigo no conhece que elementos est comparando - a funo asort seleciona os
elementos (talvez utilizando o algoritmo QuickSort) e passa-os para o bloco de cdigo. O bloco
de cdigo compara-os e retorna verdadeiro (.T.) se encontram na ordem correta, ou falso (.F.)
se no. Se o valor de retorno for falso, a funo asort ir ento trocar os valores de lugar e
seguir comparando o prximo par de valores.
Ento, no bloco de cdigo anterior, a comparao X > Y verdadeira se os elementos esto
em ordem descendente, o que significa que o primeiro valor maior que o segundo.

Para ordenar a mesma matriz pelo ltimo nome, tambm em ordem descendente, pode-se
utilizar o seguinte bloco de cdigo:

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

Note que este bloco de cdigo procura e compara as partes dos caracteres imediatamente
seguinte a um espao em branco. Depois de utilizar esse bloco de cdigo para a funo asort,
a matriz conter:

{"GARY HALL", "TIM JONES", "FRED SMITH"}

Finalmente, para ordenar um sub-elemento (coluna) de uma matriz por exemplo, pode-se
utilizar o seguinte bloco de cdigo:

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

- 72 -

ADVPL Completo



6.2.4. Funes para manipulao de blocos de cdigo

A linguagem ADVPL possui diversas funes que auxiliam na manipulao de blocos de cdigo,
dentre as quais podemos citar as mais utilizadas:

EVAL()
DBEVAL()
AEVAL()

EVAL()

Sintaxe EVAL(bBloco, xParam1, xParam2, xParamZ)
Descrio
A funo EVAL() utilizada para avaliao direta de um bloco de cdigo,
utilizando as informaes disponveis no mesmo de sua execuo. Esta
funo permite a definio e passagem de diversos parmetros que sero
considerados na interpretao do bloco de cdigo.

DBEVAL()

Sintaxe Array(bBloco, bFor, bWhile)
Descrio
A funo DBEval() permite que todos os registro de uma determinada tabela
sejam analisados e para cada registro ser executado o bloco de cdigo
definido.

AEVAL()

Sintaxe AEVAL(aArray, bBloco, nInicio, nFim)
Descrio
A funo AEVAL() permite que todos os elementos de um determinada array
sejam analisados e para cada elemento ser executado o bloco de cdigo
definido.













- 73 -

ADVPL Completo


20

7. Funes

A maior parte das rotinas que queremos escrever em programas so compostas de um
conjunto de comandos, rotinas estas que se repetem ao longo de todo o
desenvolvimento. Uma funo nada mais do que um conjunto de comandos que para ser
utilizada basta cham-la pelo seu nome.

Para tornar uma funo mais flexvel, ao cham-la pode-se passar parmetros, o quais contm
os dados e informaes que definem o processamento da funo.

Os parmetros das funes descritas utilizando a linguagem ADVPL so posicionais, ou seja, na
sua passagem no importa o nome da varivel e sim a sua posio dentro da lista de
parmetros, o que permite executar uma funo escrevendo:

Calcula(parA, parB, parC) // Chamada da funo em uma rotina

E a funo estar escrita:

User Function Calcula(x, y, z)

... Comandos da Funo

Return ...


Neste caso, x assume o valor de parA, y de parB e z de parC.

A funo tambm tem a faculdade de retornar uma varivel, podendo inclusive ser um Array.
Para tal encerra-se a funo com:

Return(campo)

Assim A := Calcula(parA,parB,parC) atribui A o contedo do retorno da funo
Calcula.

No ADVPL existem milhares de funes escritas pela equipe de Tecnologia Microsiga,
pelos analistas de suporte e pelos prprios usurios.



Existe um ditado que diz que:

Vale mais um programador que conhece todas as funes disponveis em
uma linguagem do que aquele que, mesmo sendo gnio, reinventa a roda a
cada novo programa.

No DEM (Documentao Eletrnica Microsiga) mais de 500 esto documentadas, e este
nmero tende a aumentar exponencialmente com os novos processos de documentao que
esto em implantao na Tecnologia e Inteligncia Protheus.

O objetivo do curso apresentar, demonstrar e fixar a utilizao das principais funes,
sintaxes e estruturas utilizadas em ADVPL.

No ADVPL, at os programas chamados do menu so funes, sendo que em um repositrio
no podem haver funes com o mesmo nome, e para permitir que os usurios e analistas

- 74 -

ADVPL Completo


possam desenvolver suas prprias funes sem que as mesmas conflitem com as j
disponveis no ambiente ERP, foi implementada pela Tecnologia Microsiga um tipo especial de
funo denominado User Function.

Nos tpicos a seguir sero detalhados os tipos de funes disponveis na linguagem ADVPL,
suas formas de utilizao e respectivas diferenas.


7.1. Tipos e escopos de funes

Em ADVPL podem ser utilizados os seguintes tipos de funes:

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

Function()

Funes ADVPL convencionais, restritas ao desenvolvimento da rea de Inteligncia Protheus
da Microsiga.

O interpretador ADVPL distingue nomes de funes do tipo Function() com at dez caracteres.
A partir do dcimo caracter, apesar do compilador no indicar quaisquer tipos de erros, o
interpretador ignorar os demais caracteres.

Exemplo:

// Fonte MATA100INCL.PRW
#INCLUDE "protheus.ch"

Function MATA100INCL01()

ALERT("01")
Return

Function MATA100INCL02()

ALERT("02")
Return

Ao executar a funo MATA100INCL01() ser exibida a mensagem 01, mas ao executar a
funo MATA100INCL02() tambm ser exibida a mensagem 01, pois o interpretador
considera o nome da funo como MATA100INC.



1. Funes do tipo Function() somente podem ser executadas atravs
dos mdulos do ERP.

2. Somente podero ser compiladas funes do tipo Function() se o MP-
IDE possuir uma autorizao especial fornecida pela Microsiga.

3. Funes do tipo Function() so acessveis por quaisquer outras
funes em uso pela aplicao.


- 75 -

ADVPL Completo



User Function()

As User Defined Functions ou funes definidas pelos usurios, so tipos especiais de funes
implementados pelo ADVPL para garantir que desenvolvimentos especficos no realizados pela
Inteligncia Protheus da Microsiga sobreponham as funes padres desenvolvidas para o ERP.

O interpretador ADVPL considera que o nome de uma User Function composto pelo nome
definido para a funo precedido dos caracteres U_. Desta forma a User Function XMAT100I
ser tratada pelo interpretador como U_XMAT100I.



1. Como ocorre o acrscimo dos caracteres U_ no nome da funo e o
interpretador considera apenas os dez primeiros caracteres da funo
para sua diferenciao, recomendado que os nomes das User
Functions tenham apenas oito caracteres para evitar resultados
indesejados durante a execuo da aplicao.

2. Funes do tipo User Function so acessveis por quaisquer outras
funes em uso pela aplicao, desde que em sua chamada sejam
utilizados os caracteres U_ em conjunto com o nome da funo.



As User Functions podem ser executadas a partir da tela inicial do client do
ERP (Microsiga Protheus Remote), mas as aplicaes que pretendem
disponibilizar esta opo devem possuir um preparo adicional de ambiente.

Para maiores informaes consulte no DEM o tpico sobre preparao de
ambiente e a documentao sobre a funo RpcSetEnv().


Static Function()

Funes ADVPL tradicionais, cuja visibilidade est restrita as funes descritas no mesmo
arquivo de cdigo fonte no qual esto definidas.

Exemplo:

//Fonte FINA010.PRW

Function FINA010()

CriaSx1(FIN010)
Return

Static Function CRIASX1()
//Fonte FINA020.PRW

Function FINA020()

CriaSx1(FIN020)
Return

Static Function CRIASX1()


- 76 -

ADVPL Completo



No exemplo acima, existem duas funes denominadas CRIASX1() definidas em arquivos de
cdigo fonte distintos: FINA010.PRW e FINA020.PRW.

A funo FINA010() ter visibilidade apenas da funo CRIASX1() definida no arquivo de
cdigo fonte FINA010.PRW, sendo que o mesmo ocorre com a funo FINA020().

Este recurso permite isolar funes de uso exclusivo de um arquivo de cdigo fonte, evitando a
sobreposio ou duplicao de funes na aplicao.

Neste contexto as Static Functions() so utilizadas para:

1. Padronizar o nome de uma determinada funo, que possui a mesma finalidade, mas
que sua implementao pode variar de acordo com a necessidade de funo principal /
aplicao.

2. Redefinir uma funo padro da aplicao, adequando-a as necessidades especficas de
uma funo principal / aplicao.

3. Proteger funes de uso especfico de um arquivo de cdigo fonte / funo principal.



O ambiente de desenvolvimento utilizado na aplicao ERP (MP-IDE) valida
se existem Functions(), Main Functions() ou User Functions() com o mesmo
nome mas em arquivos de cdigo fontes distintos, evitando a duplicidade ou
sobreposio de funes.


Main Function()

Main Function() outro tipo de funo especial do ADVPL incorporado para permitir
tratamentos diferenciados na aplicao ERP.

Uma Main Function() tem a caracterstica de poder ser executada atravs da tela inicial de
parmetros do client do ERP (Microsiga Protheus Remote), da mesma forma que uma User
Function, com a diferena que as Main Functions somente podem ser desenvolvidas com o uso
da autorizao de compilao, tornando sua utilizao restrita a Inteligncia Protheus da
Microsiga.

Na aplicao ERP comum o uso das Main Functions() nas seguintes situaes:

1. Definio dos mdulos da aplicao ERP: Main Function Sigaadv()

2. Definio de atualizaes e updates: AP710TOMP811()

3. Atualizaes especficas de mdulos da aplicao ERP: UpdateATF()

- 77 -

ADVPL Completo



7.2. Passagem de parmetros entre funes

Como mencionado anteriormente os parmetros das funes descritas utilizando a linguagem
ADVPL so posicionais, ou seja, na sua passagem no importa o nome da varivel e sim a
sua posio dentro da lista de parmetros.

Complementando esta definio, podem ser utilizadas duas formas distintas de passagens de
parmetros para funes descritas na linguagem ADVPL:

E Passagem de parmetros por contedo
E Passagem de parmetros por referncia

Passagem de parmetros por contedo

A passagem de parmetros por contedo a forma convencional de definio dos parmetros
recebidos pela funo chamada, na qual a funo recebe os contedos passados pela funo
chamadora, na ordem com os quais so informados.


User Function CalcFator(nFator)

Local nCnt
Local nResultado := 0

For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

Alert("O fatorial de " + cValToChar(nFator) + ;
" " + cValToChar(nResultado))

Return



Avaliando a funo CalcFator() descrita anteriormente podemos verificar que a mesma recebe
como parmetro para sua execuo a varivel nFator.

Com base nesta funo podemos descrever duas forma de passagem de parmetros por
contedo:

E Passagem de contedos diretos
E Passagem de variveis como contedos

Exemplo 01 Passagem de contedos diretos

User Function DirFator()

Local nResultado := 0

nResultado := CalcFator(5)



- 78 -

ADVPL Completo


A passagem de contedos diretos implica na definio explcita do valor do parmetro na
execuo da chamada da funo. Neste caso foi informado o contedo 5 (numrico) como
contedo para o primeiro parmetro da funo CalcFator.

Como a linguagem ADVPL trata os parmetros de forma posicional, o contedo 5 ser atribudo
diretamente a varivel definida como primeiro parmetro da funo chamado, no nosso caso
nFator.

Por ser uma atribuio de parmetros por contedo, o interpretador da linguagem basicamente
executa uma operao de atribuio normal, ou seja, nFator := 5.



Duas caractersticas da linguagem ADVPL tornam necessria uma ateno
especial na chamada de funes:

1. A linguagem ADVPL no uma linguagem tipada, de forma que as
variveis no tem um tipo previamente definido, aceitando o contedo
que lhes for imposto atravs de uma atribuio.

2. Os parmetros de uma funo so atribudos de acordo com a ordem
com os quais so definidos na chamada da mesma. No realizada
nenhum tipo de consistncia em relao aos tipos dos contedos e
obrigatoriedade de parmetros nesta ao.





Os parmetros de uma funo so caracterizados como variveis de escopo
LOCAL para efeito de execuo.

Desta forma os mesmos no devem ser definidos novamente como LOCAL na
rea de definio e inicializao de variveis, pois caso isto ocorra haver a
perda dos valores recebidos pela redefinio das variveis na funo.

Caso seja necessrio garantir um contedo padro para um determinado
parmetro dever ser utilizado o identificador DEFAULT conforme detalhado
no tpico Tratamento de valores padres para parmetros de funes.


Exemplo 02 Passagem de variveis como contedos

User Function DirFator()

Local nResultado := 0
Local nFatorUser := 0

nFatorUser := GetFator() // Funo ilustrativa na qual o usurio informa o fator a ser utilizado.

nResultado := CalcFator(nFatorUser)


A passagem de contedos como variveis implica na utilizao de variveis de apoio para
executar a chamada de uma funo. Neste caso foi informada a varivel nFatorUser, a qual
ser definida pelo usurio atravs da funo ilustrativa GetFator(). O uso de variveis de apoio
flexibiliza a chamada de outras funes, pois elas sero parametrizadas de acordo com as
necessidades daquele processamento especfico no qual se encontra a funo chamadora.

- 79 -

ADVPL Completo



Como a linguagem ADVPL trata os parmetros de forma posicional, o contedo da varivel
nFatorUser ser atribudo diretamente a varivel definida como primeiro parmetro da funo
chamado, no nosso caso nFator.

Por ser uma atribuio de parmetros por contedo, o interpretador da linguagem basicamente
executa uma operao de atribuio normal, ou seja, nFator := nFatorUser.



A passagem de parmetros no necessita que as variveis informadas na
funo chamadora tenham os mesmos nomes das variveis utilizadas na
definio de parmetros da funo chamada.

Desta forma podemos ter:

User Function DirFator()

Local nFatorUser := GetFator()

nResultado := CalcFator(nFatorUser)

...


Function CalcFator(nFator)
...


As variveis nFatorUser e nFator podem ter nomes diferentes pois o
interpretador far a atribuio de contedo com base na ordem dos
parmetros e no pelo nome das variveis.


Passagem de parmetros por referncia

A passagem de parmetros por referncia uma tcnica muito comum nas linguagens de
programao a qual permite que variveis de escopo LOCAL tenham seu contedo manipulado
por funes especficas, mantendo o controle destas variveis restrito a funo que as definiu e
as funes desejadas pela aplicao.

A passagem de parmetros por referncia utiliza o conceito de que uma varivel uma rea
de memria e portanto passar um parmetro por referncia nada mais do que ao invs de
passar o contedo para a funo chamada, passar qual a rea de memria utilizada pela
varivel passada.


- 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


Desta forma a funo chamada tem acesso no apenas ao contedo, mas a varivel em si,
pois a rea de memria a varivel, e qualquer alterao nesta ser visvel a funo
chamadora quando tiver o retorno da funo chamadora.




Tratamento de contedos padres para parmetros de funes

O tratamento de contedos padres para parmetros de funes muito utilizado nas funes
padres da aplicao ERP, de forma a garantir a correta execuo destas funes por qualquer
funo chamadora, evitando situaes de ocorrncias de erros pela falta da definio de
parmetros necessrios a correta utilizao da funo.


A linguagem ADVPL no obriga a passagem de todos os parmetros descritos
na definio da funo, sendo que os parmetros no informados sero
considerados com contedo nulo.

Desta forma o uso do identificador DEFAULT permite ao desenvolvedor garantir que na
utilizao da funo determinados parmetros tero o valor com um tipo adequado a funo.

Exemplo:

User Function CalcFator(nFator)

Local nCnt
Local nResultado := 0
Default nFator := 1

For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

Return nResultado


No exemplo descrito, caso o parmetro nFator no seja informado na funo chamadora, o
mesmo ter seu contedo definido como 1.


- 82 -

ADVPL Completo


Se este tratamento no fosse realizado e com isso o parmetro nFator no fosse informado,
ocorreria o seguinte evento de erro:

Exemplo:

User Function CalcFator(nFator)

Local nCnt
Local nResultado := 0

For nCnt := nFator To 1 Step -1 // nFator est como Nulo, portando nCnt nulo
nResultado *= nCnt
Next nCnt // Ao efetuar o Next, o interpretador realiza a ao nCnt += 1.

Return nResultado


Como o interpretador realizar a ao nCnt += 1, e o contedo da varivel nCnt nulo
ocorrer o erro de type mismath on +=, expected N U pois os tipos das variveis
envolvidos na operao so diferentes: nCnt nulo (U) e 1 numrico (N).


Caso o parmetro que possui a opo DEFAULT descrita no fonte seja
informado, a linha de DEFAULT no ser executada, mantendo desta forma o
contedo passado pela funo chamadora.




















- 83 -

ADVPL Completo



8. Diretivas de compilao

O compilador ADVPL possui uma funcionalidade denominada pr-processador, o qual nada
mais do que um programa que examina o programa fonte escrito em ADVPL e executa certas
modificaes nele, baseadas nas Diretivas de Compilao.

As diretivas de compilao so comandos que no so compilados, sendo dirigidos ao pr-
processador, o qual executado pelo compilador antes da execuo do processo de
compilao propriamente dito.

Portanto, o pr-processador modifica o programa fonte, entregando para o compilador um
programa modificado de acordo com as diretivas de compilao, as so iniciadas pelo caractere
#.

As diretivas podem ser colocadas em qualquer parte do programa, sendo que as
implementadas pela linguagem ADVPL so:

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


Lembre-se

As diretivas de compilao tambm so conhecidas como UDC User Defined
Commands.


Diretiva: #INCLUDE

A diretiva #INCLUDE indica em que arquivo de extenso CH (padro ADVPL) esto os UDCs
a serem utilizados pelo pr-processador.

A aplicao ERP possui diversos includes, os quais devem ser utilizados segundo a aplicao
que ser desenvolvida, o que permitir a utilizao de recursos adicionais definidos para a
linguagem, implementados pela rea de Tecnologia da Microsiga.

Os includes mais utilizados nas aplicaes ADVPL desenvolvidas para o ERP so:

E PROTHEUS.CH: diretivas de compilao padres para a linguagem. Contm a
especificao da maioria das sintaxes utilizadas nos fontes, inclusive permitindo a
compatibilidade da sintaxe tradicional do Clipper para os novos recursos implementados
no ADVPL.

- 84 -

ADVPL Completo



O include PROTHEUS.CH ainda contm a referncia a outros includes utilizadas pela
linguagem ADVPL que complementam esta funcionalidade de compatibilidade com a
sintaxe Clipper, tais como:

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



Fique atento

A utilizao do include protheus.ch nos fontes desenvolvidos para a
aplicao ERP Protheus obrigatria e necessria ao correto
funcionamento das aplicaes.


E AP5MAIL.CH: Permite a utilizao da sintaxe tradicional na definio das seguintes
funes de envio e recebimento de e-mail:

o CONNECT SMTP SERVER
o CONNECT POP SERVER
o DISCONNECT SMTP SERVER
o DISCONNECT POP SERVER
o POP MESSAGE COUNT
o SEND MAIL FROM
o GET MAIL ERROR
o RECEIVE MAIL MESSAGE

E TOPCONN.CH: Permite a utilizao da sintaxe tradicional na definio das seguintes
funes de integrao com a ferramenta TOPCONNECT (MP10 DbAcess):

o TCQUERY

E TBICONN.CH: Permite a utilizao da sintaxe tradicional na definio de conexes com
a aplicao Server do ambiente ERP, atravs da seguintes sintaxes:

o CREATE RPCCONN
o CLOSE RPCCONN
o PREPARE ENVIRONMENT
o RESET ENVIRONMENT
o OPEN REMOTE TRANSACTION
o CLOSE REMOTE TRANSACTION
o CALLPROC IN
o OPEN REMOTE TABLES

E XMLXFUN.CH: Permite a utilizao da sintaxe tradicional na manipulao de arquivos e
strings no padro XML, atravs das seguintes sintaxes:

o CREATE XMLSTRING
o CREATE XMLFILE
o SAVE XMLSTRING
o SAVE XMLFILE

- 85 -

ADVPL Completo


o ADDITEM TAG
o ADDNODE NODE
o DELETENODE


Os recursos de tratamentos de e-mails, integrao com a ferramenta
TOPCONNECT (DbAcess), preparao de ambientes e manipulao de
arquivos e strings do padro XML sero abordados no curso de ADVPL
Avanado.



O diretrio de includes deve ser especificado no ambiente de
desenvolvimento do ERP Protheus (MP-IDE) para cada configurao de
compilao disponvel.

Caso o diretrio de includes no esteja informado, ou esteja informado
incorretamente ser exibida uma mensagem de erro informando:

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




As funes desenvolvidas para a aplicao ERP costumam utilizar includes
para definir o contedo de strings e variveis diversas utilizadas pela
aplicao em diferentes idiomas. Desta forma normal verificar que um
fonte possui um arquivo .CH com o mesmo nome, o que caracteriza este
tipo de include.


Diretiva: #DEFINE

A diretiva #DEFINE permite que o desenvolvedor crie novos termos para serem utilizadas no
cdigo fonte. Este termo tem o efeito de uma varivel de escopo PUBLIC, mas que afeta
somente o fonte na qual o #DEFINE est definido, com a caracterstica de no permitir a
alterao de seu contedo.

Desta forma um termo definido atravs da diretiva #DEFINE pode ser considerado como uma
constante.



Os arquivos de include definidos para os fontes da aplicao ERP contm
diretivas #DEFINE para as strings de textos de mensagens exibidas para os
usurios nos trs idiomas com os quais a aplicao distribuda: Portugus,
Ingls e Espanhol.

Por esta razo a aplicao ERP possui trs repositrios distintos para cada
uma das bases de dados homologadas pela Microsiga, pois cada compilao
utiliza uma diretiva referente ao seu idioma.





- 86 -

ADVPL Completo



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

As diretivas #IFDEF, #IFNDEF, #ELSE e #ENDIF permitem ao desenvolvedor criar fontes
flexveis e sensveis a determinadas configuraes da aplicao ERP.

Atravs destas diretivas, podem ser verificados parmetros do sistema, tais como o idioma
com o qual est parametrizado e a base de dados utilizada para armazenar e gerenciar as
informaes do ERP.

Desta forma, ao invs de escrever dois ou mais cdigos fontes que realizam a mesma funo,
mas utilizando recursos distintos para cada base de dados ou exibindo mensagem para cada
um dos idiomas tratados pela aplicao, o desenvolvedor pode preparar seu cdigo fonte para
ser avaliado pelo pr-processador, o qual ir gerar um cdigo compilado de acordo com a
anlise dos parmetros de ambiente.

Estas diretivas de compilao esto normalmente associadas as seguintes verificaes de
ambiente:

E Idioma: verifica as variveis SPANISH e ENGLISH, disponibilizadas pela aplicao. O
idioma portugus determinado pela exceo:


#IFDEF SPANISH
#DEFINE STR0001 Hola !!!
#ELSE

#IFDEF ENGLISH
#DEFINE STR0001 Hello !!!
#ELSE
#DEFINE STR0001 Ol !!!
#ENDIF

#ENDIF




Apesar da estrutura semelhante ao IF-ELSE-ELSEIF-ENDIF, no existe
a diretiva de compilao #ELSEIF, o que torna necessrio o uso de
diversos #IFDEFs para a montagem de uma estrutura que seria
facilmente solucionada com IF-ELSE-ELSEIF-ENDIF.



A aplicao ERP disponibiliza a varivel de escopo PUBLIC -
__LANGUAGE, a qual contm uma string que identifica o idioma em
uso pelo sistema, cujo os contedos possveis so:

E PORTUGUESE
E SPANISH
E ENGLISH




- 87 -

ADVPL Completo


E Banco de Dados: verifica as variveis AXS e TOP para determinar se o banco de dados
em uso pela aplicao est no formado ISAM (DBF, ADS, CTREE, etc.) ou se est
utilizando a ferramenta TOPCONNECT (DbAcess).


#IFDEF TOP

cQuery := SELECT * FROM +RETSQLNAME(SA1)
dbUseArea(.T., "TOPCONN", TcGenQry(,,cQuery), SA1QRY,.T.,.T.)

#ELSE
DbSelectArea(SA1)
#ENDIF



Os bancos de dados padro AS400 no permitem a execuo de queries
no formato SQLANSI atravs da ferramenta TOPCONNECT (DbAcess).

Desta forma necessrio realizar uma verificao adicional ao #IFDEF
TOP antes de executar uma query, que no caso realizada atravs do
uso da funo TcSrvType(), a qual retorna a string AS/400 quando este
for o banco em uso.

Para estes bancos deve ser utilizada a sintaxe ADVPL tradicional.


Diretiva: #COMMAND

A diretiva #COMMAND utilizada principalmente nos includes da linguagem ADVPL para
efetuar a traduo de comandos em sintaxe CLIPPER para as funes implementadas pela
Tecnologia Microsiga.

Esta diretiva permite que o desenvolvedor defina para o compilador como uma expresso
dever ser interpretada.

Trecho do arquivo PROTHEUS.CH

#xcommand @ <nRow>, <nCol> SAY [ <oSay> <label: PROMPT,VAR > ] <cText> ;
[ PICTURE <cPict> ] ; [ <dlg: OF,WINDOW,DIALOG > <oWnd> ] ;
[ FONT <oFont> ] ; [ <lCenter: CENTERED, CENTER > ] ;
[ <lRight: RIGHT > ] ; [ <lBorder: BORDER > ] ;
[ <lPixel: PIXEL, PIXELS > ] ; [ <color: COLOR,COLORS > <nClrText> [,<nClrBack> ] ] ;
[ SIZE <nWidth>, <nHeight> ] ; [ <design: DESIGN > ] ;
[ <update: UPDATE > ] ; [ <lShaded: SHADED, SHADOW > ] ;
[ <lBox: BOX > ] ; [ <lRaised: RAISED > ] ;
=> ;
[ <oSay> := ] TSay():New( <nRow>, <nCol>, <{cText}>,;
[<oWnd>], [<cPict>], <oFont>, <.lCenter.>, <.lRight.>, <.lBorder.>,;
<.lPixel.>, <nClrText>, <nClrBack>, <nWidth>, <nHeight>,;
<.design.>, <.update.>, <.lShaded.>, <.lBox.>, <.lRaised.> )


Atravs da diretiva #COMMAND, o desenvolvedor determinou as regras para que a sintaxe
tradicional da linguagem CLIPPER para o comando SAY fosse convertida na especificao de
um objeto TSAY() do ADVPL.

- 88 -

ADVPL Completo



MDULO 03: Desenvolvendo pequenas customizaes

9. ADVPL e o ERP Microsiga Protheus

O ADVPL (Advanced Protheus Language) uma linguagem de programao desenvolvida pela
Microsiga e que contm todas as instrues e funes necessrias ao desenvolvimento de
um sistema, independente de sua complexidade.

O PROTHEUS, por outro lado, uma plataforma tecnolgica que engloba um Servidor de
Aplicao, um Dicionrio de Dados e as Interfaces para conexo com o usurio. o Protheus
que executa o cdigo ADVPL e o devido acesso base da dados.

O Protheus composto pelo ERP (que engloba, alm das funcionalidades descritas nos
captulos anteriores, mais de trinta verticais aplicadas a reas especficas de negcios) e
pelo Configurador (programa que permite customizar o sistema s necessidades do usurio
de forma fcil).

9.1. O Ambiente Protheus

O Protheus constitudo de um conjunto de Softwares que compem as camadas de
funcionalidades bsicas aos servios de aplicao, interface, banco de dados e repositrio,
conforme o diagrama da figura abaixo:




O objetivo do TOTVS DevStudio facilitar a tarefa de escrever programas: atravs de cores,
indica se a palavra escrita uma instruo, uma varivel ou um comentrio; organiza a
biblioteca de programas em projetos e administra o repositrio de objetos; aponta erros de
Figura: Camadas bsicas do ambiente Protheus


Para executar um programa desenvolvido em ADVPL, preciso antes de mais nada escrev-lo
e compil-lo. Este procedimento feito atravs da ferramenta TOTVS DevStudio do
Protheus (Totvs Development Studio).


- 89 -

ADVPL Completo


sintaxe; permite o debug (execuo passo a passo do programa, verificando o contedo das
variveis) e fornece assistentes (modelos) de programas.


E Proteger o programa fonte, evitando que seja alterado indevidamente, pois somente os
objetos so distribudos com uma execuo mais rpida em funo da compilao no
DEV-Studio;
Figura: Manuteno no repositrio de objetos


Aps compilar o programa, o resultado um objeto, o qual carregado na memria ficando
disponvel para sua execuo atravs da aplicao PROTHEUS.

O objeto no um executvel, ou seja, no est convertido para a linguagem nativa do
equipamento. Quem faz esse trabalho o Protheus Server em tempo de execuo. Por isso, o
Protheus Server est sempre presente na memria em tempo de execuo, permitindo:


E Flexibilizao plataforma de trabalho. Assim, um mesmo programa pode rodar em
ambientes Windows, Linux ou mesmo em um Hand Held, ficando a tarefa de adequao
para o Servidor Protheus;

E Que o sistema cresa de forma ilimitada, pois os objetos ficam fora do executvel;

E O uso de macro substituies, ou seja, o uso de rotinas exteriores ao sistema
armazenadas em arquivos e que podem facilmente alteradas pelo usurio, pois o Server
tambm interpreta o cdigo fonte em tempo de execuo.


- 90 -

ADVPL Completo




Figura: Diagrama esquemtico de objetos Protheus

O Repositrio de Objetos a biblioteca de objetos de todo o ambiente Protheus, incluindo
tanto os objetos implementados para as funcionalidades bsicas do ERP como aqueles gerados
pelos usurios. A figura abaixo demonstra a estrutura e a interconexo entre as vrias
camadas.



Figura: Estrutura de interconexo do Protheus


- 91 -

ADVPL Completo


Ela demonstra tambm que os dados a serem processados podem estar armazenados em
bases ISAM ou em Bancos de Dados padro SQL. No primeiro caso o server comunica- se
diretamente com os dados. Em Bancos SQL a interface TOPCONNECT / DBACCESS que
converte os comandos de entrada e sada, adequando-os ao SQL utilizado (SQl Server
Microsoft, Oracle, DB2, etc.).

Uma vez terminado o processamento do objeto chamado, o ele descartado da memria, ou
seja, o Protheus um sistema que pode crescer de forma ilimitada pois os objetos,
armazenados em um repositrio praticamente no ocupam espao no HD (Hard Disk).

O Protheus uma plataforma multicamada. Entre as diversas camadas, temos a interface de
apresentao ao usurio (Remote), o tratamento dado para as regras de negcio
implementadas (Server), o acesso aos objetos do repositrio (Server), o acesso aos
dados disponveis no Banco de Dados (Server ou TOPCONNECT / DBACCESS ) e ao
gerenciamento de servios WEB (Server). Neste processo, o Protheus possui, basicamente,
quatro aplicativos utilizados com diferentes finalidades:

E Protheus Server / TOTVS AppServer: Responsvel pela comunicao entre o cliente,
o banco de dados e o RPO. O nome do executvel depende da verso do sistema
(TOTVSAPPSERVER.EXE) sendo que as plataformas ISAM suportadas pelo Protheus
Server so DBF e CTREE.

E Protheus Remote / TOTVS SmartClient: Instalado no Server ou na estao. O
nome tambm depende da verso do sistema (TOTVSSMARTCLIENT.EXE).

E TopConnect / DbAccess: Responsvel pela converso dos comandos de banco de
dados, adequando-os ao SQL utilizado.

E Protheus Monitor / TOTVS Monitor: Programa de anlise que verifica quem est
usando o sistema e possibilita o envio de mensagens ou mesmo derrubar conexes
(TOTVSMONITOR.EXE).

Alguns nomes referem-se a um conjunto de programas para facilitar a sua identificao:

E RPO: o arquivo binrio do APO (Advanced Protheus Objects), ou seja, os objetos.

E Build: Executveis, DLLs e o RPO completo.

E Patch: Atualizaes pontuais do RPO, aplicadas por meio do IDE.

E Update: Pacote de atualizao para o repositrio (RPO) liberado periodicamente
contendo todas as adequaes e melhorias disponibilizadas para o sistema em um
determinado perodo, sendo no cumulativo, aplicadas por meio do DEV-Studio.

A interface de apresentao realizada pelo SmartClient que processa a parte da estao,
basicamente, tela e teclado. Pode estar gravado no Server e ser carregado via rede para a
memria da estao. Ou, de preferncia, deve ficar armazenado no HD da estao. Pode
tambm ser carregado pelo Internet Explorer, rodando dentro do prprio browser com o
SmartClient ActiveX e permitindo o acesso ao Protheus Server pela Internet, com as mesmas
funcionalidades do SmartClient, sendo que o browser precisa suportar o uso da tecnologia
ActiveX.

Caso exista algum Firewall ou Proxy entre o WEB Server e o Browser que vai acessar o
SmartClient ActiveX, eles devero ser configurados para permitir o seu download.

- 92 -

ADVPL Completo



9.2. Organizao e configurao inicial do ambiente Protheus

O Protheus ocupa uma pasta que tem a seguinte estrutura:



. APO: Contm o arquivo RPO, repositrio de objetos do Protheus.
Figura: Estrutura bsica das pastas do Protheus

. SMARTCLIENT: Rene um conjunto de arquivos executveis, dlls e arquivos de
configurao do sistema, para possibilitar o acesso ao servidor.
. APPSERVER: Rene um conjunto de executveis, dlls e arquivos de configurao do
sistema que compem o servidor.
. INCLUDE: Contm as bibliotecas necessrias para a compilao de programas
Protheus.
. DATA: Contm a base de dados no caso de verso ISAM.
. SAMPLES: Oferece um conjunto de programas exemplo e arquivos ADVPL padres da
Microsiga.
. SPOOL: Nesta pasta so gravados os relatrios gerados em disco pelo sistema
Protheus.
. SYSTEM: Contm os arquivos de menus, os arquivos de configuraes e os arquivos
de customizaes (SXs) do sistema Protheus.




- 93 -

ADVPL Completo


. SYSTEMLOAD: Contm o dicionrio de dados em formato TXT. neste arquivo que
esto todos os padres e formatos para a gerao dos arquivos de configuraes e de
customizaes (SXs), conforme a localizao de pas definida pelo usurio na entrada
do sistema.
. MY PROJECTS: Sugere-se a criao desta pasta para armazenar projetos e fontes das
customizaes realizadas pelo usurio.
. UPDATES: Sugere-se esta pasta para o armazenamento das atualizaes a serem
aplicadas no sistema Protheus.

Apesar da estrutura ilustrada anteriormente indicar que as pastas esto subordinadas pasta
PROTHEUS, possvel que algumas delas possam estar em mquinas diferentes ou at mesmo
em ambientes computacionais diferentes.


Figura: Formas de instalao e uso do Protheus

- 94 -

ADVPL Completo



Para isso, necessrio configurar, ou seja, informar ao Protheus onde est cada uma delas.
Esse tipo de informao consta nos arquivos de parmetros de configurao do sistema
(TOTVSAPPSERVER.INI e TOTVSSMARTCLIENT.INI) existentes nas respectivas pastas
APPSERVER e SMARTCLIENT.

Os parmetros do TOTVSAPPSERVER.INI so lidos pelo programa TOTVSAPPSERVER.EXE logo
no incio de sua execuo. O mesmo procedimento ocorre em relao aos parmetros do
TOTVSSMARTCLIENT.INI pelo programa TOTVSSMARTCLIENT.EXE. A execuo desses dois
programas feita por meio de ao do usurio, facilitada pelos atalhos TOTVS APPSERVER e
TOTVS SMARTCLIENT.






Figura: Links dos parmetros de configurao

Para que o TOTVS AppServer e o TOTVS SmartClient sejam executados, os arquivos
TOTVSAPPSERVER.INI e TOTVSSMARTCLIENT.INI devem estar disponveis nas respectivas
pastas APPSERVER e SMARTCLIENT pois so eles que indicam o endereo das demais pastas
conforme a ilustrao da figura anterior.

O detalhe de preenchimento das propriedades dos respectivos atalhos TOTVS AppServer e o
TOTVS SmartClient demonstrado a seguir. No atalho do TOTV SAppServer, necessrio que
seja informado o parmetro -debug ou -console.


- 95 -

ADVPL Completo



Propriedades dos atalhos


=
Destino:
c:\protheus\bin\appserver\totvsappserver.exe
- console
Iniciar em: c:\protheus\bin\appserver

E -Console ou -Debug

Executado como uma JanelaConsole, as informaes recebidas das conexes com o TOTVS
Application Server conectados so exibidas diretamente na tela do console do TOTVS
Application Server, bem como informaes de No Conformidades.

E -Install

Se o TOTVS Application Server, no for instalado como um Servio do NT, durante a
Instalao, isto pode ser realizado, executando-o com a opo de Linha de Comando.

E -Remove
Para remov-lo da Lista de Servios do NT, pode-se execut-lo com a opo de Linha de
Comando.


=
Destino:
c:\protheus\bin\smartclient\totvssmartcliente.exe
M
Iniciar em: c:\protheus\bin\smartclient

E -Q (Quiet)

Indica que o TOTVS Smart Client, no dever mostrar o Splash (Imagem de Apresentao) e a
tela de identificao de Parmetros Iniciais, necessita ser acompanhada da (Clusula P).

E -P (Main Program)

Identifica o Programa (APO) Inicial.

E -E (Environment)

Nome da Seo de Environment, no (Ini do Server), que ser utilizada, para definies gerais.

E -C (Connection)

Nome da Seo de Conexo, que ser utilizada, para a conexo ao TOTVS Application Server.

E -M (AllowMultiSession)

Permite mltiplas instncias (Cpias) do TOTVS Smart Client, na mesma mquina, o que por
Default no permitido.


- 96 -

ADVPL Completo


Os parmetros que configuram o local do RPO, o Banco de Dados (ISAM ou SQL), os arquivos
de menus, configuraes e customizaes do sistema no arquivo INI so:

E SourcePath: Indica o local de origem dos objetos. o endereo do Repositrio de
Objetos (Exemplo: SourcePath=C:\PROTHEUS\APO)

E RootPath: Aponta para a pasta raiz (inicial), a partir da qual sero localizados os dados
(no caso de ISAM), bem como o prprio Dicionrio de Dados (Exemplo:
RootPath=C:\PROTHEUS\PROTHEUS_DATA)

E StartPath: Indica qual a pasta dentro da pasta raiz (informada no parmetro
RootPath) que contm os arquivos de menus, os arquivos de configuraes e os
arquivos de customizaes (SXs) do sistema Protheus (Exemplo:
StartPath=\SYSTEM\).

No h necessidade de que os parmetros estejam em ordem nos arquivos de configurao
(.ini). Alm dos parmetros j detalhados, existem outros que podem indicar a verso do
sistema, o tipo de banco de dados, linguagem do pas em que est sendo utilizado e as
mscaras de edio e formatao.



[ENVIRONMENT]
SOURCEPATHC:\PROTHEUS\APO
ROOTPATH= C:\MP811\PROTHEUS_DATA
STARTPATH=\ PROTHEUS\
RPODB=TOP
RPOLANGUAGE=PORTUGUESE
RPOVERSION=101
LOCALFILES=ADS
TRACE=0
LOCALDBEXTENSION=.DBF
PICTFORMAT=DEFAULT
DATEFORMAT=DEFAULT

[DRIVERS]
ACTIVE=TCP

[TCP]
TYPE=TCPIP
PORT=1234


Figura: Exemplo de um ambiente em um arquivo de parmetros

No exemplo da figura anterior, o rtulo [environment] descreve um conjunto de parmetros
que sero inicializados no sistema. Os rtulos [Drivers] e [TCP] identificam a comunicao que
pode ser estabelecida entre o Protheus Server e o Protheus Remote. Outros ambientes podem
ser configurados no mesmo arquivo (TOTVSAPPSERVER.INI).

J o arquivo de parmetros do Protheus Remote (TOTVSSMARTCLIENT.INI) contm apenas as
configuraes locais, basicamente as informaes necessrias para a inicializao e a
comunicao com o Protheus Server, conforme o exemplo da figura a seguir.


- 97 -

ADVPL Completo



[CONFIG]
LASTMAINPROG=SIGACFG
LANGUAGE=1

[DRIVERS]
ACTIVE=TCP

[TCP]
SERVER=172.16.72.41
PORT=1234

E Active: Indica qual a forma de comunicao.
Figura: Exemplo de um arquivo de configurao do remote


E Port: Indica o nmero da porta a ser utilizada para a comunicao entre o Protheus
Server e o Protheus Remote. necessrio que a porta utilizada na comunicao seja a
mesma em ambos (no TOTVSAPPSERVER.INI e no TOTVSSMARTCLIENT.INI). Vale
ressaltar que a porta 80 reservada para a Internet e pode causar conflitos caso seja
utilizada na comunicao do Protheus.

E Server: Aponta para o endereo do servidor que pode ser a prpria mquina
(localhost) ou o nome da mquina (Server= Servidor_01) ou mesmo um endereo IP
(exemplo Server=172.16.72.41).

Exemplo:

O parmetro Server=172.16.72.41 no arquivo TOTVSSMARTCLIENT.INI indica ao Protheus
Remote o endereo da mquina na qual est funcionando o Protheus Server.



- 98 -

ADVPL Completo



9.3. O Configurador do Protheus

9.3.1. Funcionalidades Abordadas

O objetivo deste tpico no abranger todo a estrutura e recursos do mdulo Configurador da
aplicao ERP, mas permitir a realizao de tarefas de configurao simples que sero
necessrias no desenvolvimento de pequenas customizaes.

Com foco neste objetivo sero detalhadas as seguintes operaes

E Configurao e criao de novas tabelas no Dicionrio de Dados
E Atualizao das estruturas do Dicionrio de Dados
o Tabelas do sistema
o Validaes de campos
o ndices de tabelas
o Gatilhos de campos

Para contextualizar a estrutura da aplicao ERP, no tpico a seguir detalhada a forma como
as tabelas de dados do sistema esto divididas entre os diversos mdulos que compe o
PROTHEUS.

9.3.2. Estruturas bsicas da aplicao ERP Protheus

Arquivos de configurao do sistema

Arquivo Descrio
SIGAMAT Cadastro de empresas e filiais do sistema
SIGAPSS Arquivo de usurios, grupos e senhas do sistema
SIX ndices dos arquivos
SX1 Perguntas e respostas
SX2 Mapeamento de tabelas
SX3 Dicionrio de Dados
SX4 Agenda do Schedule de processos
SX5 Tabelas
SX6 Parmetros
SX7 Gatilhos de Interface
SX8 Fora de uso
SX9 Relacionamentos entre tabelas
SXA Pastas cadastrais apontadas no SX3
SXB Consulta por meio da tecla F3 (Consulta Padro)
SXD Controle do Schedule de processos
SXE Seqncia de documentos (+1)
SXF Seqncia de documentos (Prximo)
SXG Tamanho padro para campos apontado pelo SX3
SXK Resposta de Perguntas (SX1) por usurios
SXO Controle de LOGs por tabela
SXP Histrico de Logs cadastrados no SXO

SXQ
Cadastro de filtros inteligentes da mbrowse (contm as
informaes necessrias para a criao do filtro).
SXR
Cadastro de relacionamento entre programa x filtro
(utilizada internamente pelo Protheus para verificar em
quais programas os filtros podero ser utilizados).

- 99 -

ADVPL Completo


SXS
Cadastro de programas (utilizado na validao para
mostrar/inibir os filtros na execuo da mbrowse).
SXT
Tabela de usurios (contm as informaes dos
usurios que podero utilizar os filtros da mbrowse).
SXOffice
Cadastro de relacionamento entre as entidades
(tabelas) e as consultas TOII.

Ambientes e tabelas

Na aplicao PROTHEUS as tabelas de dados podem ter uma estrutura mais simples e
econmica, com tabelas em DBF/ADS, do fabricante Extended System ou CTREE do fabricante
FAIRCOM ou uma estrutura mais robusta e complexa, em bases SQL (SQLSERVER da
Microsoft, ORACLE, DB II da IBM, SYBASE, MYSQL, POSTGREE, etc.).

No caso do SQL, o acesso feito atravs do TOPCONNECT / DBACESS, que converte os
comandos do ADVPL para este ambiente.

Para permitir uma utilizao adequada das tabelas de dados do sistema por cada um dos
ambientes da aplicao ERP, as tabelas foram divididas em grupos denominados famlias.
Cada mdulo pode utilizar uma ou mais famlias de tabelas especificas para suas atividades, e
ainda compartilhar informaes com outros mdulos atravs de famlias comuns a todas as
operaes realizadas no sistema.

A tabela a seguir demonstra alguns dos mdulos que compe a aplicao ERP PROTHEUS
atualmente:

Ambiente Identificao
SIGAATF ATIVO FIXO
SIGACOM COMPRAS
SIGACON CONTABILIDADE
SIGAEST ESTOQUE E CUSTOS
SIGAFAT FATURAMENTO
SIGAFIN FINANCEIRO
SIGAFIS LIVROS FISCAIS
SIGAPCP PLANEJAMENTO E CONTROLE DA PRODUO
SIGAGPE GESTO DE PESSOAL
SIGAFAS FATURAMENTO DE SERVIOS
SIGAVEI VECULOS
SIGALOJ

CONTROLE DE LOJAS/AUTOMAO COMERCIAL
SIGATMK CALL CENTER
SIGAOFI OFICINAS
SIGAPON PONTO ELETRNICO
SIGAEIC EASY IMPORT CONTROL
SIGATCF TERMINAL
SIGAMNT MANUTENO DE ATIVOS
SIGARSP RECRUTAMENTO E SELEO DE PESSOAL
SIGAQIE INSPEO DE ENTRADA QUALIDADE
SIGAQMT METODOLOGIA QUALIDADE

O nome de cada tabela no Protheus constitudo de seis dgitos, os quais so utilizados para
formar a seguinte representao:

F X X E E 0


- 100 -

ADVPL Completo


Onde:

F SF X Primeiro dgito representa a famlia, o segundo dgito
pode ser utilizado para detalhar ainda mais a famlia
especificada no primeiro nvel (subfamlia), e o terceiro
dgito a numerao seqencial das tabelas da famlia
iniciando em 0 e finalizando em Z.
E E 0 Os dois primeiros dgitos identificam a que empresa as
tabelas esto vinculadas, lembrando que a informao
de filial est contida nos dados da tabela.
O ltimo dgito fixo em 0.

A tabela a seguir demonstra algumas das principais famlias de tabelas utilizadas pela
aplicao ERP Protheus:

Famlia Descrio
S - Tabelas pertencentes ao sistema bsico, tambm chamado Classic
S A
Cadastros de entidades compartilhadas entre os ambientes
(Clientes, Fornecedores, Bancos entre outros).
S B
Cadastros dos ambientes de Materiais (Produtos, Saldos entre
outros).
S C
Arquivos de movimentaes diversas utilizados pelos ambientes de
Materiais (Solicitao ao Almoxarifado, Solicitao de Compras,
Pedido de Compras, Pedido de Vendas, Ordens de Produo entre
outros).
S D
Arquivos de movimentaes de estoque (Itens de notas fiscais de
entrada e sada, movimentos internos de estoque entre outros).
S E Cadastros e movimentaes do ambiente Financeiro.
S F
Cadastros e movimentaes Fiscais (Cabealhos das notas fiscais
de entrada e sada, cadastro de tipos de entrada e sada, livros
fiscais, entre outros).
S G Cadastros do ambiente de Planejamento e Controle de Produo
S H Movimentos do ambiente de Planejamento e Controle de Produo
S I Cadastros e movimentos do ambiente Contbil (descontinuado)
S N Cadastros e movimentos do ambiente Ativo Fixo
S R Cadastros e movimentos do ambiente Gesto de Pessoal
S X Tabelas de configurao do sistema
S Z Tabelas livres para utilizao e projetos especficos em clientes.
A - Gesto de Projetos
C - Contabilidade Gerencial
C T Contabilidade Gerencial
C V Contabilidade Gerencial
C W Contabilidade Gerencial
D - Transportadoras e derivados
E - Comrcio exterior e derivados
G - Gesto Hospitalar
J - Gesto Educacional
N - Servios Pblicos
P - Reservado para projetos da fbrica de software
Q - Qualidade e derivados
R - Recursos Humanos e derivados
T - Plano de Sade
W - Workflow
Z - Tabelas livres para utilizao e projetos especficos em clientes em
adio a famlia SZ.

- 101 -

ADVPL Completo



ndices

Cada tabela do sistema possui seus ndices definidos no arquivo de configurao SIX, o qual
pode ser atualizado atravs do mdulo Configurador.

Os arquivos de ndices das tabelas de sistema sero criados de acordo com o banco de dados
utilizado (ISAM ou conexo via TOPCONNECT).

Para bancos de dados ISAM, ser gerados arquivos com a mesma nomenclatura da tabela de
dados, mas com uma extenso diferenciada (atualmente .CDX). No caso da utilizao de um
banco de dados, cada ndice ser uma numerao seqencial em funo do nome da tabela
original.

As especificaes das chaves de ndices de cada um das tabelas est disponvel no arquivo de
sistema SIX, e a chave nica da tabela utilizada para banco de dados est descrita na tabela
SX2.

Menus

Cada mdulo da aplicao ERP possui um menu padro com todas as funcionalidades
disponveis para o ambiente, menu este definido atravs de sintaxe XML (arquivos .XNU).

Os menus possuem uma estrutura padro que permite ao usurio localizar e identificar
facilmente cada uma das funcionalidades oferecidas pelo ambiente.

9.3.3. Acessando o mdulo Configurador

Para executar o mdulo Configurador necessrio que a aplicao Protheus Server esteja em
execuo e atravs da aplicao Protheus Remote dever ser informada como programa inicial
a opo SIGACFG.



Figura: Parmetros de inicializao do sistema



- 102 -

ADVPL Completo




Aps a confirmao, a validao do acesso feita conforme tela ilustrada a seguir:


Figura: Validao de acesso



Figura: Confirmao do acesso ao mdulo Configurador




- 103 -

ADVPL Completo



Logo aps a sua confirmao do usurio e senha com direito de administrador, ser
apresentada a tela inicial do configurador, conforme mostra a figura a seguir:



Figura: Interface principal do mdulo Configurador














- 104 -

ADVPL Completo



9.4. Funcionalidades do Configurador

A customizao de um sistema como o Protheus consiste em adaptar o sistema de forma a
melhor atender as necessidades do cliente.

A flexibilidade de um sistema, ou seja, sua capacidade de adaptar-se (polimorfismo, aquele
que assume vrias formas) uma das mais importantes caractersticas de uma soluo ERP.

As funcionalidades tratadas pelo Configurador definem a flexibilidade do ERP Protheus.
Flexibilizar sem despadronizar, ou seja, tudo que foi customizado permanece vlido, mesmo
com o desenvolvimento de novas verses.




Figura: Principais funcionalidades do mdulo Configurador


O Configurador o programa bsico para o processo de customizao do Protheus atravs da
alterao das tabelas da famlia SX. Neles, o usurio ou o analista de suporte responsvel pela
implantao configura as informaes que sero utilizadas pelos demais ambientes do sistema.

Essas informaes vo de simples parmetros at complexas expresses e comandos que so
interpretadas em tempo de execuo.

Nos prximos tpicos sero abordadas as funcionalidades de customizao disponveis no
ambiente Configurador, relevantes ao objetivo de desenvolvimento de pequenas
customizaes para a aplicao ERP.







- 105 -

ADVPL Completo


9.4.1. Dicionrio de Dados da aplicao ERP

A idia do Dicionrio de Dados permitir que o usurio possa incluir ou inibir campos, ou
mesmo alterar as propriedades dos campos existentes. Pode, ainda, criar novas tabelas. Ou
seja, os programas ao invs de terem os campos definidos em seu cdigo original, lem o
Dicionrio em tempo de execuo, montando arrays com as propriedades de cada um. A partir
da, sua utilizao normal, atravs do uso de funes do ADVPL que tornam o trabalho do
desenvolvedor transparente a esta arquitetura.

O objetivo do Dicionrio de Dados permitir que o prprio usurio crie novas tabelas ou altere
os campos nas tabelas existentes quanto ao seu uso, sua ordem de apresentao, legenda
(nos trs idiomas), validao, help, obrigatoriedade de preenchimento, inicializao etc.



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




Procedimento

1. Para adicionar uma tabela ao dicionrio de dados de uma empresa, selecione a opo
Dicionrio de Dados abaixo da empresa que ser atualizada. (rvore de opes da parte
esquerda da interface visual do Gerenciador de Bases de Dados).

2. Aps a seleo da opo Dicionrio de Dados sero exibidas as tabelas j cadastradas
no arquivo de sistema SX2.





- 106 -

ADVPL Completo





3. Aps a visualizao das tabelas j cadastradas no SX2 da empresa selecionada, utilize o
boto Incluir (
Figura: Conjunto de tabelas j cadastradas no SX2

). Ao utilizar esta opo ser exibida a tela para definio dos dados
referentes nova tabela que ser criada:









- 107 -

ADVPL Completo




4. Realize o preenchimento das informaes solicitadas de acordo com as orientaes a
seguir, e ao trmino confirme o cadastramento da nova tabela com o boto Confirmar
(
Figura: Cadastro de uma nova tabela


).


Orientaes para o cadastramento de uma nova tabela

E O domnio SZ1 at SZZ (considerando todos os nmero e todas as letras no ltimo
byte) reservado para dados exclusivos do usurio pois esse intervalo no ser
utilizado pelo sistema. Caso seja necessrio o domnio Z00 a ZZZ tambm pode ser
empregado para desenvolvimentos especficos do cliente.


No devem ser criadas tabelas especficas de clientes com
quaisquer outras nomenclaturas, o que pode afetar diretamente
um processo de atualizao futuro.

E O nome da tabela preenchido automaticamente, adicionando 990. Esse dado refere-
se empresa 99 (Teste Matriz) a qual est sendo adicionado tabela.

E O Path refere-se pasta que conter efetivamente os dados das tabelas, quando ISAM,
nas verses com banco de dados relacional no so utilizadas. Essa pasta ser criada
dentro da pasta indicada na configurao do sistema como ROOTTPATH.

E O modo de acesso compartilhado indica que o sistema possibilitar o uso simultneo da
tabela por duas ou mais filiais. Se for compartilhado o campo Filial fica em branco. Se
for exclusivo, grava-se o cdigo da filial ativa e somente ela tem acesso ao registro.

E Aps a confirmao, a tabela criada passa a fazer parte do cadastro do Dicionrio de
Dados, contendo somente o campo FILIAL, o qual criado como padro pela

- 108 -

ADVPL Completo


funcionalidade do mdulo.

9.4.3. Adio de campos as tabelas do Dicionrio de Dados

Procedimento

1. Para adicionar um campo a uma tabela do dicionrio de dados de uma empresa,
selecione a opo Dicionrio de Dados abaixo da empresa que ser atualizada. (rvore
de opes da parte esquerda da interface visual do Gerenciador de Bases de Dados).

2. Aps a seleo da opo Dicionrio de Dados sero exibidas as tabelas j cadastradas
no arquivo de sistema SX2.



3. Aps a visualizao das tabelas j cadastradas no SX2 da empresa selecionada, localize
e selecione a tabela que ser atualizada, e utilize o boto Editar (
Figura: Conjunto de tabelas j cadastradas no SX2

). Ao utilizar esta
opo ser exibida a tela de manuteno de campos da tabela selecionada:


- 109 -

ADVPL Completo




4. Selecione a opo Campos (
Figura: Estrutura de uma tabela j cadastrada no sistema

), para que sejam exibidos os campos
disponveis para a tabela no arquivo de sistema SX3.


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

- 110 -

ADVPL Completo


5. Aps a visualizao dos campos j cadastrados no SX3 da tabela selecionada, utilize a
opo Incluir ( ). Ao utilizar esta opo ser exibida a tela para definio dos dados
referentes ao novo campo que ser criado:


5. Realize o preenchimento das informaes solicitadas de acordo com as orientaes a
seguir, e ao trmino confirme o cadastramento do novo campo para a tabela com o
boto Confirmar (
Figura: Dados para parametrizao de um novo campo no sistema

).
6. Confirme as atualizaes para a tabela selecionada com o boto Confirmar ( ).
7. Atualize as configuraes do sistema com o boto Atualizar ( ).


Figura: Atualizao dos dados do sistema

- 111 -

ADVPL Completo


20


Orientaes para o cadastramento de um novo campo

1. As propriedades definidas no Dicionrio de Dados (SX3) so as seguintes:

E Nome do campo: Todos os campos tm como prefixo o prprio nome da tabela, sendo
que para tabelas da famlia S, o prefixo do campo composto apenas pelos prximos
dois dgitos. No caso das demais tabelas, o prefixo do campo sero os trs dgitos
identificadores da tabela.

E Tipo do campo: Indica se caractere, numrico, lgico, data ou memo. claro que a
mudana do tipo de campo deve ser feita com muito cuidado, pois, se tivermos um
campo numrico usado em clculos e ele for alterado para caractere, certamente
teremos um erro.

E Tamanho do campo: Tambm aqui necessrio certo cuidado ao alter-lo, pois
poderemos ter truncamentos em relatrios e consultas em que h espao para
contedos maiores que o original.

E Formato de edio: Define como o campo aparece nas telas e nos relatrios.

E Contexto: Pode ser real ou virtual. O contexto virtual cria o campo somente na
memria e no na tabela armazenada no disco. Isso necessrio porque os
programas de cadastramento e de consulta genrica apresentam somente uma tabela
de cada vez. Assim, se quisermos apresentar um campo de uma outra tabela, ou
mesmo o resultado de um clculo, sem que tal informao ocupe espao fsico no HD,
utilizamos o contexto virtual. Campos virtuais normalmente so alimentados por
gatilhos.

E Propriedade: Indica se um campo pode ou no ser alterado pelo usurio. Exemplo:
saldos normalmente no podem, pois quem cuida dessa tarefa so os programas.

2. Demais caractersticas que devem ser observadas na configurao do campo:


E O campo Decimal ser solicitado somente para os campos de tipo numrico.
Guia: Campo


E O formato ! indica que o caractere ser sempre maisculo, independente da ao
do usurio. O formato @! indica que essa caracterstica estende-se por todo o
campo.

E O contexto real indica que o campo existir efetivamente no banco de dados e o
contexto virtual significa que o campo existir apenas no dicionrio de dados e no
fisicamente.

E A propriedade alterar indica que o campo pode ser alterado.

E Nesta janela, os dados esto classificados em seis pastas com objetivos de
preenchimento bem especficos:




- 112 -

ADVPL Completo


E Contm as informaes a respeito dos ttulos.
Guia: Informaes


E Ttulo: a legenda que aparece nas telas/relatrios. H inclusive trs campos para
esta finalidade: em portugus, espanhol e ingls. Esta propriedade pode ser alterada
vontade, pois no interfere em nenhum processamento.

E Descrio e Help: So propriedades que objetivam documentar o campo.


E Contm os dados que facilitam a digitao.
Guia: Opes


E Representam as regras de validao do campo.
Guia: Validaes


E Validaes: Nesta propriedade, escreve-se uma funo de validao do campo que
est sendo digitado. Existe um conjunto de funes disponveis no ADVPL apropriadas
para esse caso.

E Todas as validaes informadas sero executadas no momento do preenchimento do
prprio campo. Uma validao pode ser uma expresso lgica ou uma funo de
usurio que retorna um valor lgico Verdadeiro ou Falso. O sistema s permitir o
avano para o prximo campo quando o respectivo preenchimento resultar Verdadeiro
seja na expresso ou no retorno da funo.

E Descreve a forma de utilizao do campo.
Guia: Uso


E Relaciona todos os mdulos em que o campo ser utilizado.
Guia: Mdulos













- 113 -

ADVPL Completo



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

Conforme mencionado anteriormente, no ambiente Protheus uma tabela pode ter vrios
ndices, os quais sero gerados de acordo com o banco de dados configurado para o sistema.

Os ndices do sistema auxiliam na seleo e obteno de informaes da base de dados alm
de determinar a ordem de apresentao dos registros de uma tabela em consultas e relatrios.

Procedimento

1. Para adicionar um ndice a uma tabela do dicionrio de dados de uma empresa,
selecione a opo Dicionrio de Dados abaixo da empresa que ser atualizada. (rvore
de opes da parte esquerda da interface visual do Gerenciador de Bases de Dados).

2. Aps a seleo da opo Dicionrio de Dados sero exibidas as tabelas j cadastradas
no arquivo de sistema SX2.


3. Aps a visualizao das tabelas j cadastradas no SX2 da empresa selecionada, localize
e selecione a tabela que ser atualizada, e utilize o boto Editar (
Figura: Conjunto de tabelas j cadastradas no SX2

). Ao utilizar esta
opo ser exibida a tela de manuteno de campos da tabela selecionada:

- 114 -

ADVPL Completo




4. Selecione a opo ndices (
Figura: Estrutura de uma tabela j cadastrada no sistema


), para que sejam exibidos os ndices
disponveis para a tabela no arquivo de sistema SIX.




5. Aps a visualizao dos ndices j cadastrados no SIX para a tabela selecionada, utilize
a opo Incluir (
Figura: ndices disponveis para a tabela no arquivo de sistema SIX


). Ao utilizar esta opo ser exibida a tela para definio dos
dados referentes ao novo ndice que ser criado:




- 115 -

ADVPL Completo






6. Realize o preenchimento das informaes solicitadas de acordo com as orientaes a
seguir, e ao trmino confirme o cadastramento do novo ndice para a tabela com o boto
Confirmar (
Figura: Adio de um ndice para uma tabela


).
7. Confirme as atualizaes para a tabela selecionada com o boto Confirmar ( ).
8. Atualize as configuraes do sistema com o boto Atualizar ( ).



Figura: Atualizao dos dados do sistema

- 116 -

ADVPL Completo



Orientaes para o cadastramento de um novo ndice

E O Nickname uma identificao complementar do ndice o qual pode ser utilizada para
auxiliar o desenvolvedor na utilizao desta ordem em uma aplicao, a qual pode ser
padro do sistema ou especfica de um cliente.

E Para selecionar os campos j cadastrados na tabela, pode ser utilizado o boto Campos
( ). Esta facilidade preenche, automaticamente, os campos de descrio.

E O campo relativo filial sempre faz parte dos ndices, com exceo do SM2, para que
os registros nas tabelas estejam agrupados por filiais, independente desta tabela ser
compartilhada entre as filiais.

E Uma tabela poder ter vrios ndices cadastrados no Dicionrio de Dados. Em
determinado momento, porm, apenas um deles oferecer acesso ao registro. Essa
ordem pode ser alterada em tempo de execuo pelos programas da aplicao, atravs
do comando DBSetOrder(), ou atravs da definio de uma ordem especfica na
utilizao de queries para acesso as dados diretamente em bancos de dados de
ambientes TOPCONNECT (DbAcess).


9.4.5. Adio de gatilhos para os campos das tabelas do sistema

Procedimento

1. Para adicionar um gatilho a um campo de uma tabela do dicionrio de dados de uma
empresa, selecione a opo Gatilho abaixo da empresa que ser atualizada. (rvore de
opes da parte esquerda da interface visual do Gerenciador de Bases de Dados).

2. Aps a seleo da opo Gatilhos sero exibidos os itens j cadastradas no arquivo de
sistema SX7.



Figura: Conjunto de gatilhos j cadastros no SX7

- 117 -

ADVPL Completo



3. Aps a visualizao dos gatilhos j cadastrados no SX7 da empresa selecionada, utilize
o boto Incluir ( ) para realizar o cadastro de um novo gatilho no sistema:



4. Realize o preenchimento das informaes solicitadas de acordo com as orientaes a
seguir, e ao trmino confirme o cadastramento do novo gatilho de sitema com o boto
Confirmar (
Figura: Dados para o cadastro de um novo gatilho no sistema


).

Orientaes para o cadastramento de um novo gatilho


E Pode haver vrios gatilhos para o mesmo campo. A ordem de execuo determinada
pelo campo Seqncia.

E Os tipos do Gatilho Primrio, Estrangeiro e de Posicionamento definem se o Contra
Domnio um campo da mesma tabela, de outra tabela ou se o gatilho deve realizar
um posicionamento, respectivamente.

E A regra pode ser uma expresso que resulta em um valor a ser preenchido no Contra
Domnio.

E O posicionamento igual a Sim indica que ser executado um comando de busca do
registro de acordo com a chave indicada.

E O Alias, a Ordem e a Chave descrevem a tabela envolvida no gatilho, seu ndice e a
chave para que a funcionalidade se posicione no registro adequado.

- 118 -

ADVPL Completo



9.4.6. Criao de Tabelas Genricas

Procedimento

1. Para adicionar uma tabela genrica, selecione os menus Ambiente, Cadastros, Tabelas.

2. Aps a seleo da opo Tabelas sero exibidos os itens j cadastradas no arquivo de
sistema SX5.


3. Aps a visualizao das tabelas j cadastrados no SX5 da empresa selecionada, utilize o
boto Incluir (
Figura: Conjunto de Tabelas j cadastras no SX5

) para realizar o cadastro de uma nova tabela no sistema:


Figura: Dados para o cadastro de uma nova tabela no sistema

- 119 -

ADVPL Completo



4. Realize o preenchimento das informaes solicitadas de acordo com as orientaes a
seguir, e ao trmino confirme o cadastramento da nova tabela do sistema com o boto
Confirmar ( ).


9.4.7. Criao de Parmetros

Procedimento

1. Para adicionar um Parmetro, selecione os menus Ambiente, Cadastros, Parmetros.

2. Aps a seleo da opo Tabelas sero exibidos os itens j cadastradas no arquivo de
sistema SX6.




3. Aps a visualizao dos Parmetros j cadastrados no SX6 da empresa selecionada,
utilize o boto Incluir (
Figura: Conjunto de Parmetros j cadastras no SX6

) para realizar o cadastro de uma nova tabela no sistema:


- 120 -

ADVPL Completo




4. Realize o preenchimento das informaes solicitadas de acordo com as orientaes a
seguir, e ao trmino confirme o cadastramento do novo Parmetro do sistema com o
boto Confirmar (
Figura: Dados para o cadastro de um novo parmetro no sistema

).

- 121 -

ADVPL Completo




10. TOTVS Development Studio

A ferramenta TOTVS Development Studio um programa que faz parte do Protheus e permite
o trabalho de edio, compilao e depurao de programas escritos em ADVPL.

Projeto

Um programa para ser compilado deve ser vinculado a um projeto. Normalmente, programas
que fazem parte de um determinado mdulo ou ambiente esto em um mesmo projeto.

A vinculao dos programas a um projeto feita por meio dos arquivos do tipo PRW. Na
verdade, um projeto pode ser constitudo de um ou mais arquivos deste tipo, que por sua vez,
podem ter uma ou mais funes, conforme ilustra o diagrama a seguir:



Figura: Representao da estrutura de um projeto no DEV-Studio


- 122 -

ADVPL Completo


Compilao

Uma vez adicionado a um projeto e compilado sem incidncias de erros de cdigo, o objeto
resultante ser cadastrado no RPO (Repositrio de Objetos) e poder ser utilizado pela
aplicao ERP.

A compilao dos itens de um projeto pode ser realizada individualmente, por grupo de fontes
(pastas) ou ainda selecionando-o inteiramente. Cada uma dos fontes ser processado e
compilado separadamente, permitindo a visualizao do progresso da operao e das
mensagens de aviso (warnings) ou erros (critical errors) na guia Mensagens.

Execuo

Para que os objetos compilados e disponveis n RPO sejam utilizados, devem ser observadas as
seguintes regras:

E Se o programa no manipula arquivos, pode-se cham-lo diretamente do DEV-Studio
(nome no lado direito da barra de ferramentas);

E Se o programa manipula tabelas existem duas opes:

. Adicionar o programa no menu de um dos ambientes e executa-lo atravs do
Remote.

. Realizar a preparao do ambiente na prpria rotina, permitindo sua execuo
diretamente pelo DEV-Studio.

E No se pode compilar um programa com o Remote e o Monitor abertos, tenha este
finalizado ou no por erro.

Anlise e depurao de erros

Para identificar as causas de erros, a ferramenta DEV-Studio possui diversos recursos que
auxiliam o DEBUG.

A ao de DEBUG necessita que o programa seja executado a partir do DEV-Studio, sendo
necessrio observar as seguintes regras:

E Definir e marcar os pontos de parada mais adequados a anlise do fonte;

E Executar a rotina atravs do DEV-Studio, selecionando seu nome diretamente, ou o
mdulo que contm a opo ou a ao que ir execut-la;

E A partir do momento em que o DEV-Studio pausar o processamento em um dos pontos
de parada especificados previamente podem ser utilizadas as janelas de visualizao
disponveis no DEV-Studio, que so:

. Variveis Locais
. Variveis Privates
. Variveis Publics
. Variveis Statics
. Janela da Watchs
. Janela de Tabelas e Campos
. Pilha de Chamadas

E Atravs da Janela de Watchs possvel determinar quais variveis devem ser exibidas;

- 123 -

ADVPL Completo


E Na pilha de chamadas, verifica-se a seqncia de chamadas das funes;
E Na pasta de Comandos, pode-se, enquanto o programa estiver pausado, escrever
qualquer comando e ao dar Enter, ele executado, permitindo pesquisar palavras e
expresses no prprio fonte ou em qualquer fonte armazenado no HD;

E Ao parar pode-se ou continuar o programa at o prximo ponto de parada, caso haja
um outro definido, ou executar linha a linha da rotina.

Interface da aplicao

Por ser um ambiente integrado de desenvolvimento, o DEV-Studio proporciona todas essas
facilidades, por meio de interface nica como ilustra a figura a seguir:



E O DEV-Studio apresenta, no topo da tela, um conjunto de opes de menu e uma srie
de botes que facilitam a sua manipulao.
Figura: Interface principal do TOTVS Development Studio


E Na tela central, apresentado o cdigo das funes em ADVPL. Na parte inferior so
exibidas algumas pastas que facilitam a execuo de comandos, exibio de contedos
de variveis e mensagens, bem como dados sobre o projeto.


- 124 -

ADVPL Completo



Desenvolvimento de pequenas customizaes


11. Acesso e manipulao de bases de dados em ADVPL

Como a linguagem ADVPL utilizada no desenvolvimento de aplicao para o sistema ERP
Protheus, ela deve possuir recursos que permitam o acesso e a manipulao de informaes
independentemente da base de dados para o qual o sistema foi configurado.

Desta forma a linguagem possui dois grupos de funes distintos para atuar com os bancos de
dados:

E Funes de manipulao de dados genricas
E Funes de manipulao de dados especficas para ambientes TOPCONNECT /
DBACCESS

Funes de manipulao de dados genricas

As funes de manipulao de dados ditas como genricas permitem que uma aplicao ADVPL
seja escrita da mesma forma, independente se a base de dados configurada para o sistema
ERP for do tipo ISAM ou padro SQL.

Muitas destas funes foram inicialmente herdadas da linguagem CLIPPER, e mediante novas
implementaes da rea de Tecnologia da Microsiga foram melhoradas e adequadas s
necessidades do ERP. Por esta razo possvel encontrar em documentaes da linguagem
CLIPPER informaes sobre funes de manipulao de dados utilizadas na ferramenta ERP.

Dentre as melhorias implementadas pela rea de Tecnologia da Microsiga, podemos mencionar
o desenvolvimento de novas funes como por exemplo a funo MsSeek() - verso da
Microsiga para a funo DbSeek(), e a integrao entre a sintaxe ADVPL convencional e a
ferramenta de acesso a bancos de dados no padro SQL TOPCONNECT (DbAcess).

A integrao entre a aplicao ERP e a ferramenta TOPCONNECT permite que as funes de
acesso e manipulao de dados escritas em ADVPL sejam interpretadas e convertidas para
uma sintaxe compatvel com o padro SQL ANSI e desta forma aplicadas aos SGDBs (Sistemas
Gerenciadores de Bancos de Dados) com sua sintaxe nativa.

Funes de manipulao de dados para ambientes TOPCONNECT / DBACCESS

Para implementar um acesso mais otimizado e disponibilizar no ambiente ERP funcionalidades
que utilizem de forma mais adequada os recursos dos SGDBs homologados para o sistema,
foram implementadas funes de acesso e manipulao de dados especficas para ambientes
TOPCONNECT/DBACCESS.

Estas funes permitem que o desenvolvedor ADVPL execute comandos em sintaxe SQL
diretamente de um cdigo fonte da aplicao, disponibilizando recursos como execuo de
queries de consulta, chamadas de procedures e comunicao com outros bancos de dados
atravs de ODBCs.


As funes especficas para ambientes TOPCONNECT sero abordas no
material de ADVPL Avanado.

- 125 -

ADVPL Completo



11.1. Diferenas e compatibilizaes entre bases de dados

Como a aplicao ERP pode ser configurada para utilizar diferentes tipos de bases de dados
importante mencionar as principais diferenas entre estes recursos, o que pode determinar a
forma como o desenvolvedor ir optar por escrever sua aplicao.

Acesso a dados e ndices

No acesso a informaes em bases de dados do padro ISAM so sempre lidos os registros
inteiros, enquanto no SQL pode-se ler apenas os campos necessrios naquele processamento.

O acesso direto feito atravs de ndices que so tabelas paralelas s tabelas de dados e que
contm a chave e o endereo do registro, de forma anloga ao ndice de um livro. Para cada
chave, criado um ndice prprio.

Nas bases de dados padro ISAM os ndices so armazenados em um nico arquivo do tipo
CDX, j nos bancos de dados padro SQL cada ndice criado com uma numerao seqencial
tendo como base o nome da tabela ao qual ele est relacionado.

A cada incluso ou alterao de um registro todos os ndices so atualizados, tornando
necessrio planejar adequadamente quais e quantos ndices sero definidos para uma tabela,
pois uma quantidade excessiva pode comprometer o desempenho destas operaes.

Deve ser considerada a possibilidade de utilizao de ndices temporrios para processos
especficos, os quais sero criados em tempo de execuo da rotina. Este fator deve levar em
considerao o esforo do ambiente a cada execuo da rotina e a periodicidade com a qual
executada.

Estrutura dos registros (informaes)

Nas bases de dados padro ISAM, cada registro possui um identificador nativo ou ID
seqencial e ascendente que funciona como o endereo base daquela informao.

Este ID, mas conhecido como RECNO ou RECNUMBER gerado no momento de incluso do
registro na tabela e somente ser alterado caso a estrutura dos dados desta tabela sofra
alguma manuteno. Dentre as manutenes que uma tabela de dados ISAM pode sofrer
pode-se citar a utilizao do comando PACK, o qual ir apagar fisicamente os registros
deletados da tabela forando uma renumerao dos identificadores de todos os registros. Esta
situao tambm torna necessria a recriao de todos os ndices vinculados quela tabela.

Isto ocorre nas bases de dados ISAM devido ao conceito de excluso lgica de registros que as
mesmas possuem. J os bancos de dados padro SQL nativamente utilizam apenas o conceito
de excluso fsica de registros, o que para outras aplicaes seria transparente, mas no o
caso do ERP Protheus.

Para manter a compatibilidade das aplicaes desenvolvidas para bases de dados padro
ISAM, a rea de Tecnologia e Banco de Dados da Microsiga implementou nos bancos de dados
padro SQL o conceito de excluso lgica de registros existente nas bases de dados ISAM
atravs da criao de campos de controle especficos: R_E_C_N_O_, D_E_L_E_T_ e
R_E_C_D_E_L.

Estes campos permitem que a aplicao ERP gerencie as informaes do banco de dados da
mesma forma que as informaes em bases de dados ISAM.


- 126 -

ADVPL Completo


Com isso o campo R_E_C_N_O_ ser um identificador nico do registro dentro da tabela,
funcionando como o ID ou RECNUMBER de uma tabela ISAM, mas utilizando um recurso
adicional disponvel nos bancos de dados relacionais conhecido com Chave Primria
11.2. Funes de acesso e manipulao de dados
.

Para a aplicao ERP Protheus o campo de controle R_E_C_N_O_ definido em todas as
tabelas como sendo sua chave primria, o que transfere o controle de sua numerao
seqencial ao banco de dados.

O campo D_E_L_E_T_ tratado internamente pela aplicao ERP como um flag ou marca de
excluso. Desta forma os registros que estiverem com este campo marcado sero
considerados como excludos logicamente. A execuo do comando PACK em uma tabela de
um banco de dados padro SQL visa excluir fisicamente os registros com o campo D_E_L_E_T_
marcado, mas no causar o efeito de renumerao de RECNO (no caso R_E_C_N_O_) que
ocorre nas tabela de bases de dados ISAM.


As funes de acesso e manipulao de dados descritas neste tpico so as classificadas
anteriormente como funes genricas da linguagem ADVPL, permitindo que as mesmas sejam
utilizadas independentemente da base de dados para a qual a aplicao ERP est configurada.

As funes de acesso e manipulao de dados definem basicamente:

E Tabela que est sendo tratada;
E Campos que devero ser lidos ou atualizados;
E Mtodo de acesso direto as informaes (registros e campos).

Dentre as funes ADVPL disponveis para acesso e manipulao de informaes, este material
ir detalhar as seguintes 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
Funo de base de dados, que efetua o lock (travamento) do registro
identificado pelo parmetro xIdentificador. Este parmetro pode ser o
Recno() para tabelas em formado ISAM, ou a chave primria para bancos de
dados relacionais.

Se o parmetro xIdentificador no for especificado, todos os locks da rea de
trabalho sero liberados, e o registro posicionado ser travado e adicionado
em uma lista de registros bloqueados.

DBCLOSEAREA()

Sintaxe DbCloseArea()
Descrio
Permite que um alias presente na conexo seja fechado, o que viabiliza seu
reuso em outro operao. Este comando tem efeito apenas no alias ativo na
conexo, sendo necessria sua utilizao em conjunto com o comando
DbSelectArea().

DBCOMMIT()

Sintaxe DBCOMMIT()
Descrio Efetua todas as atualizaes pendentes na rea de trabalho ativa.

DBCOMMITALL()

Sintaxe DBCOMMITALL()
Descrio
Efetua todas as atualizaes pendentes em todas as rea de trabalho em uso
pela thread (conexo) ativa.

DBDELETE()

Sintaxe DbDelete()
Descrio
Efetua a excluso lgica do registro posicionado na rea de trabalho ativa,
sendo necessria sua utilizao em conjunto com as funes RecLock() e
MsUnLock().

DBGOTO()

Sintaxe DbGoto(nRecno)
Descrio
Move o cursor da rea de trabalho ativa para o record number (recno)
especificado, realizando um posicionamento direto, sem a necessidade uma
busca (seek) prvio.


- 128 -

ADVPL Completo



DBGOTOP()

Sintaxe DbGoTop()
Descrio Move o cursor da rea de trabalho ativa para o primeiro registro lgico.

DBGOBOTTON()

Sintaxe DbGoBotton()
Descrio Move o cursor da rea de trabalho ativa para o ltimo registro lgico.

DBRLOCKLIST()

Sintaxe DBRLOCKLIST()
Descrio
Retorna um array contendo o record number (recno) de todos os registros
travados da rea de trabalho ativa.

DBSEEK() E MSSEEK()

Sintaxe DbSeek(cChave, lSoftSeek, lLast)
Descrio
DbSeek: Permite posicionar o cursor da rea de trabalho ativo no registro
com as informaes especificadas na chave de busca, fornecendo um retorno
lgico indicando se o posicionamento foi efetuado com sucesso, ou seja, se a
informao especificada na chave de busca foi localizada na rea de
trabalho.

MsSeek(): Funo desenvolvida pela rea de Tecnologia da Microsiga, a
qual possui as mesmas funcionalidades bsicas da funo DbSeek(), com a
vantagem de no necessitar acessar novamente a base de dados para
localizar uma informao j utilizada pela thread (conexo) ativa.

DBSKIP()

Sintaxe DbSkip(nRegistros)
Descrio
Move o cursor do registro posicionado para o prximo (ou anterior
dependendo do parmetro), em funo da ordem ativa para a rea de
trabalho.

DBSELECTAREA()

Sintaxe DbSelectArea(nArea | cArea)
Descrio
Define a rea de trabalho especificada com sendo a rea ativa. Todas as
operaes subseqentes que fizerem referncia a uma rea de trabalho a
utilizao, a menos que a rea desejada seja informada explicitamente.


- 129 -

ADVPL Completo



DBSETFILTER()

Sintaxe DbSetFilter(bCondicao, cCondicao)
Descrio
Define um filtro para a rea de trabalho ativa, o qual pode ser descrito na
forma de um bloco de cdigo ou atravs de uma expresso simples.

DBSETORDER()

Sintaxe DbSetOrder(nOrdem)
Descrio
Define qual ndice ser utilizada pela rea de trabalho ativa, ou seja, pela
rea previamente selecionada atravs do comando DbSelectArea(). As
ordens disponveis no ambiente Protheus so aquelas definidas no SINDEX
/SIX, ou as ordens disponibilizadas por meio de ndices temporrios.

DBORDERNICKNAME()

Sintaxe DbOrderNickName(NickName)
Descrio
Define qual ndice criado pelo usurio seja utilizado. O usurio pode incluir os
seus prprios ndices e no momento da incluso deve criar o NICKNAME para
o mesmo.

DBUNLOCK()

Sintaxe DBUNLOCK()
Descrio
Mesma funcionalidade da funo UNLOCK(), s que recomendada para
ambientes de rede nos quais os arquivos so compartilhados.

Libera o travamento do registro posicionado na rea de trabalho ativa e
confirma as atualizaes efetuadas naquele registro.

DBUNLOCKALL()

Sintaxe DBUNLOCKALL()
Descrio
Libera o travamento de todos os registros de todas as reas de trabalho
disponveis na thread (conexo) ativa.

DBUSEAREA()

Sintaxe
DbUseArea(lNovo, cDriver, cArquivo, cAlias, lComparilhado,;
lSoLeitura)
Descrio
Define um arquivo de base de dados como uma rea de trabalho disponvel
na aplicao.

MSUNLOCK()

Sintaxe MsUnLock()
Descrio
Libera o travamento (lock) do registro posicionado confirmando as
atualizaes efetuadas neste registro.


- 130 -

ADVPL Completo


RECLOCK()

Sintaxe RecLock(cAlias,lInclui)
Descrio
Efetua o travamento do registro posicionado na rea de trabalho ativa,
permitindo a incluso ou alterao das informaes do mesmo.

RLOCK()

Sintaxe RLOCK() lSucesso
Descrio Efetua o travamento do registro posicionado na rea de trabalho ativa.

SELECT()

Sintaxe Select(cArea)
Descrio
Determina o nmero de referncia de um determinado alias em um
ambiente de trabalho. Caso o alias especificado no esteja em uso no
ambiente, ser retornado o valor 0 (zero).


SOFTLOCK()

Sintaxe SoftLock(cAlias)
Descrio
Permite a reserva do registro posicionado na rea de trabalho ativa de forma
que outras operaes, com exceo da atual, no possam atualizar este
registro. Difere da funo RecLock() pois no gera uma obrigao de
atualizao, e pode ser sucedido por ele.

Na aplicao ERP Protheus, o SoftLock() utilizado nos browses, antes da
confirmao da operao de alterao e excluso, pois neste momento a
mesma ainda no foi efetivada, mas outras conexes no podem acessar
aquele registro pois o mesmo est em manuteno, o que implementa da
integridade da informao.

UNLOCK()

Sintaxe UNLOCK()
Descrio
Libera o travamento do registro posicionado na rea de trabalho ativa e
confirma as atualizaes efetuadas naquele registro.



- 131 -

ADVPL Completo



11.3. Diferenciao entre variveis e nomes de campos

Muitas vezes uma varivel pode ter o mesmo nome que um campo de um arquivo ou de uma
tabela aberta no momento. Neste caso, o ADVPL privilegiar o campo, de forma que uma
referncia a um nome que identifique tanto uma varivel como um campo, resultar no
contedo do campo.

Para especificar qual deve ser o elemento referenciado, deve-se utilizar o operador de
identificao de apelido (->) e um dos dois identificadores de referncia, MEMVAR ou FIELD.

cRes := MEMVAR->NOME

Esta linha de comando identifica que o valor atribudo varivel cRes deve ser o valor da
varivel de memria chamada NOME.

cRes := FIELD->NOME

Neste caso, o valor atribudo varivel cRes ser o valor do campo NOME existente no arquivo
ou tabela aberto na rea atual.

O identificador FIELD pode ser substitudo pelo apelido de um arquivo ou tabela aberto, para
evitar a necessidade de selecionar a rea antes de acessar o contedo de terminado campo.

cRes := CLIENTES->NOME

As tabelas de dados utilizadas pela aplicao ERP recebem automaticamente do sistema o
apelido ou ALIAS especificado para as mesmas no arquivo de sistema SX2. Assim se o campo
NOME pertence a uma tabela da aplicao PROTHEUS, o mesmo poder ser referenciado com a
indicao do ALIAS pr-definido desta tabela.

cRes := SA1->NOME // SA1 Cadastro de Clientes



Para maiores detalhes sobre abertura de arquivos com atribuio de apelidos,
consulte a documentao sobre acesso a banco de dados ou a documentao
da funo dbUseArea().

Os alias das tabelas da aplicao ERP so padronizados em trs letras, que
correspondem as iniciais da tabela. As configuraes de cada ALIAS utilizado
pelo sistema podem ser visualizadas atravs do mdulo Configurador ->
Bases de Dados -> Dicionrios -> Bases de Dados.



- 132 -

ADVPL Completo



11.4. Controle de numerao seqencial

Alguns campos de numerao do Protheus so fornecidos pelo sistema em ordem ascendente.
o caso, por exemplo, do nmero do pedido de venda e outros que servem como identificador
das informaes das tabelas. preciso ter um controle do fornecimento desses nmeros, em
especial quando vrios usurios esto trabalhando simultaneamente.



Os campos que recebem o tratamento de numerao seqencial pela
aplicao ERP no devem ser considerados como chave primria das tabelas
aos quais esto vinculados.

No caso especfico da aplicao ERP Protheus a chave primria em ambientes
TOPCONNECT ser o campo R_E_C_N_O_, e para bases de dados padro
ISAM o conceito de chave primria implementado pela regra de negcio do
sistema, pois este padro de dados no possui o conceito de unicidade de
dados.


Semforos

Para definir o conceito do que um semforo de numerao deve-se avaliar a seguinte
seqncia de eventos no sistema:

E Ao ser fornecido um nmero, ele permanece reservado at a concluso da operao
que o solicitou;

E Se esta operao for confirmada, o nmero indisponibilizado, mas se a operao for
cancelada, o nmero voltar a ser disponvel mesmo que naquele momento nmeros
maiores j tenham sido oferecidos e utilizados.

Com isso, mesmo que tenhamos vrios processos solicitando numeraes seqenciais para
uma mesma tabela, como por exemplo incluses simultneas de pedidos de vendas, teremos
para cada pedido um nmero exclusivos e sem o intervalos e numeraes no utilizadas.

Funes de controle de semforos e numerao seqencial

A linguagem ADVPL permite a utilizao das seguintes funes para o controle das numeraes
seqenciais utilizadas nas tabelas da aplicao ERP:

GETSXENUM()
CONFIRMSXE()
ROLLBACKSXE()

GETSXENUM()

Sintaxe GETSXENUM(cAlias, cCampo, cAliasSXE, nOrdem)
Descrio
Obtm o nmero seqncia do alias especificado no parmetro, atravs da
referncia aos arquivos de sistema SXE/SXF ou ao servidor de numerao,
quando esta configurao est habilitada no ambiente Protheus.


- 133 -

ADVPL Completo


CONFIRMSXE()

Sintaxe CONFIRMSXE(lVerifica)
Descrio Confirma o nmero alocado atravs do ltimo comando GETSXENUM().


ROLLBACKSXE()

Sintaxe ROLLBACKSXE()
Descrio
Descarta o nmero fornecido pelo ltimo comando GETSXENUM(),
retornando a numerao disponvel para outras conexes.


12. Customizaes para a aplicao ERP

Neste tpico sero abordas as formas pelas quais a aplicao ERP Protheus pode ser
customizada com a utilizao da linguagem ADVPL.

Pelos recursos de configurao da aplicao ERP disponveis no mdulo Configurador possvel
implementar as seguintes customizaes:

E Validaes de campos e perguntas do sistema e de usurios
E Incluso de gatilhos em campos de sistemas e de usurios
E Incluso de regras em parmetros de sistemas e de usurios
E Desenvolvimento de pontos de entrada para interagir com funes padres do sistema





- 134 -

ADVPL Completo



12.1. Customizao de campos Dicionrio de Dados


12.1.1. Validaes de campos e perguntas

As funes de validao tm como caracterstica fundamental um retorno do tipo lgico, ou
seja, um contedo .T. Verdadeiro ou .F. Falso.

Com base nesta premissa, a utilizao de validaes no Dicionrio de Dados (SX3) ou nas
Perguntas de Processos e Relatrios (SX1) dever focar sempre na utilizao de funes ou
expresses que resultem em um retorno lgico.

Atravs do mdulo Configurador possvel alterar as propriedades de um campo ou de uma
pergunta de forma a incluir regras de validao para as seguintes situaes:

E SX3 Validao de usurio (X3_VLDUSER)
E SX1 Validao da pergunta (X1_VALID)

Dentre as funes que a linguagem ADVPL em conjunto com os recursos desenvolvidos pela
aplicao ERP para validao de campos e perguntas sero detalhadas:

VAZIO()
NAOVAZIO()
EXISTCPO()
EXISTCHAV()
PERTENCE()
POSITIVO()
NEGATIVO()
TEXTO()

EXISTCHAV()

Sintaxe ExistChav(cAlias, cConteudo, nIndice)
Descrio
Retorna .T. ou .F. se o contedo especificado existe no alias especificado.
Caso exista ser exibido um help de sistema com um aviso informando da
ocorrncia.

Funo utilizada normalmente para verificar se um determinado cdigo de
cadastro j existe na tabela na qual a informao ser inserida, como por
exemplo o CNPJ no cadastro de clientes ou fornecedores.


- 135 -

ADVPL Completo



EXISTCPO()

Sintaxe ExistCpo(cAlias, cConteudo, nIndice)
Descrio
Retorna .T. ou .F. se o contedo especificado no existe no alias
especificado. Caso no exista ser exibido um help de sistema com um aviso
informando da ocorrncia.

Funo utilizada normalmente para verificar se a informao digitada em um
campo, a qual depende de outra tabela, realmente existe nesta outra tabela,
como por exemplo o cdigo de um cliente em um pedido de venda.

NAOVAZIO()

Sintaxe NaoVazio()
Descrio
Retorna .T. ou .F. se o contedo do campo posicionado no momento no
est vazio.

NEGATIVO()

Sintaxe Negativo()
Descrio Retorna .T. ou .F. se o contedo digitado para o campo negativo.

PERTENCE()

Sintaxe Pertence(cString)
Descrio
Retorna .T. ou .F. se o contedo digitado para o campo est contido na
string definida como parmetro da funo. Normalmente utilizada em
campos com a opo de combo, pois caso contrrio seria utilizada a funo
ExistCpo().

POSITIVO()

Sintaxe Positivo()
Descrio Retorna .T. ou .F. se o contedo digitado para o campo positivo.

TEXTO()

Sintaxe Texto()
Descrio
Retorna .T. ou .F. se o contedo digitado para o campo contm apenas
nmeros ou alfanumricos.

VAZIO()

Sintaxe Vazio()
Descrio
Retorna .T. ou .F. se o contedo do campo posicionado no momento est
vazio.


- 136 -

ADVPL Completo



12.1.2. Pictures de formao disponveis

Com base na documentao disponvel no DEM Documentao Eletrnica Microsiga, a
linguagem ADVPL e a aplicao ERP Protheus admitem as seguintes pictures:

Dicionrio de Dados (SX3) e GET

Funes
Contedo Funcionalidade
A Permite apenas caracteres alfabticos.
C Exibe CR depois de nmeros positivos.
E Exibe numrico com o ponto e vrgula invertidos (formato Europeu).
R Insere caracteres diferentes dos caracteres de template na exibio, mas no os
insere na varivel do GET.
S<n> Permite rolamento horizontal do texto dentro do GET, <n> um nmero inteiro
que identifica o tamanho da regio.
X Exibe DB depois de nmeros negativos.
Z Exibe zeros como brancos.
( Exibe nmeros negativos entre parnteses com os espaos em branco iniciais.
) Exibe nmeros negativos entre parnteses sem os espaos em branco iniciais.
! Converte caracteres alfabticos para maisculo.

Templates
Contedo Funcionalidade
X Permite qualquer caractere.
9 Permite apenas dgitos para qualquer tipo de dado, incluindo o sinal para
numricos.
# Permite dgitos, sinais e espaos em branco para qualquer tipo de dado.
! Converte caracteres alfabticos para maisculo.
* Exibe um asterisco no lugar dos espaos em branco iniciais em nmeros.
. Exibe o ponto decimal.
, Exibe a posio do milhar.

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: @!


- 137 -

ADVPL Completo



SAY e PSAY

Funes
Contedo Funcionalidade
C Exibe CR depois de nmeros positivos
E Exibe numrico com o ponto e a vrgula invertidos (formato Europeu)
R Insere caracteres diferentes dos caracteres de template
X Exibe DB depois de nmeros negativos
Z Exibe zeros como brancos
( Envolve nmeros negativos entre parnteses
! Converte todos os caracteres alfabticos para maisculo

Templates
Contedo Funcionalidade
X Exibe dgitos para qualquer tipo de dado
9 Exibe dgitos para qualquer tipo de dado
# Exibe dgitos para qualquer tipo de dado
! Converte caracteres alfabticos para maisculo
* Exibe asterisco no lugar de espaos em branco inicias em nmeros
. Exibe a posio do ponto decimal
, Exibe a posio do milhar

Exemplo 01 Picture campo numrico

CT2_VALOR Numrico 17,2
Picture: @E 99,999,999,999,999.99



















- 138 -

ADVPL Completo



12.2. Customizao de gatilhos Configurador

A aplicao ERP utiliza o recurso de gatilhos em campo com a finalidade de auxiliar o usurio
no preenchimento de informaes durante a digitao de informaes. As funes que podem
ser utilizadas no gatilho esto diretamente relacionadas a definio da expresso de retorno
que ser executada na avaliao do gatilho do campo.

As regras que devem ser observadas na montagem de um gatilho e configurao de seu
retorno so:

E Na definio da chave de busca do gatilho deve ser avaliada qual filial dever ser
utilizada como parte da chave: a filial da tabela de origem do gatilho ou a filial da
tabela que ser consultada. O que normalmente determina a filial que ser utilizada
como parte da chave justamente a informao que ser consultada, aonde:

o Consultas de informaes entre tabelas com estrutura de cabealho e itens
devem utilizar a filial da tabela de origem, pois ambas as tabelas devem possuir
o mesmo tratamento de filial (compartilhado ou exclusivo).

Exemplos:

Pedido de vendas -> SC5 x SC6
Nota fiscal de entrada -> SF1 x SD1
Ficha de imobilizado -> SN1 x SN3
Oramento contbil -> CV1 x CV2

o Consulta de informaes de tabelas de cadastros devem utilizar a filial da tabela
a ser consultada, pois o compartilhamento dos cadastros normalmente
independente em relao s movimentaes e outros cadastros do sistema.

Exemplos:

Cadastro de clientes -> SA1 (compartilhado)
Cadastro de fornecedores -> SA2 (compartilhado)
Cadastro de vendedores -> SA3 (exclusivo)
Cadastro de transportadoras -> SA4 (exclusivo)

o Consulta a informaes de tabelas de movimentos devem utilizar a filial da
tabela a ser consultada, pois apesar das movimentaes de um mdulo
seguirem um determinado padro, a consulta pode ser realizada entre tabelas
de mdulos distintos, o que poderia gerar um retorno incorreto baseado nas
diferentes parametrizaes destes ambientes.

Exemplos:

Contas a pagar -> SE2 (compartilhado)
Movimentos contbeis -> CT2 (exclusivo)
Pedidos de compras -> SC7 (compartilhado)
Itens da nota fiscal de entrada -> SD1 (exclusivo)

E Na definio da regra de retorno deve ser considerado o tipo do campo que ser
atualizado, pois este campo que determina qual tipo do retorno ser considerado
vlido para o gatilho.


- 139 -

ADVPL Completo



12.3. Customizao de parmetros Configurador

Os parmetros de sistema utilizados pela aplicao ERP e definidos atravs do mdulo
configurador possuem as seguintes caractersticas fundamentais:

E Tipo do parmetro: de forma similar a uma varivel, um parmetro ter um tipo de
contedo pr-definido em seu cadastro.
Esta informao utilizada pelas funes da aplicao ERP na interpretao do
contedo do parmetro e retorno desta informao a rotina que o consultou.

E Interpretao do contedo do parmetro: diversos parmetros do sistema tm seu
contedo macro executado durante a execuo de uma rotina do ERP. Estes
parmetros macro executveis tem como nica caracterstica em comum seu tipo:
caractere, mas no existe nenhum identificador explicito que permite a fcil
visualizao de quais parmetros possuem um retorno simples e de quais parmetros
tero seu contedo macro executado para determinar o retorno real.

A nica forma eficaz de avaliar como um parmetro tratado (simples retorno ou
macro execuo) atravs do cdigo fonte da rotina, no qual dever ser avaliado como
tratado o retorno de uma destas funes:

o GETMV()
o SUPERGETMV()
o GETNEWPAR()

Um retorno macro executado determinado atravs do uso do operador & ou de uma
das funes de execuo de blocos de cdigo em conjunto com uma das funes citadas
anteriormente.

12.3.1. Funes para manipulao de parmetros

A aplicao ERP disponibiliza as seguintes funes para consulta e atualizao de parmetros:

GETMV()
SUPERGETMV()
GETNEWPAR()
PUTMV()

GETMV()

Sintaxe GETMV(cParametro)
Descrio
Retorna o contedo do parmetro especificado no arquivo SX6, considerando
a filial parametrizada na conexo. Caso o parmetro no exista ser exibido
um help do sistema informando a ocorrncia.


- 140 -

ADVPL Completo



GETNEWPAR()

Sintaxe GETNEWPAR(cParametro, cPadrao, cFilial)
Descrio
Retorna o contedo do parmetro especificado no arquivo SX6, considerando
a filial parametrizada na conexo. Caso o parmetro no exista ser exibido
um help do sistema informando a ocorrncia.

Difere do SuperGetMV() pois considera que o parmetro pode no existir na
verso atual do sistema, e por conseqncia no ser exibida a mensagem
de help.

PUTMV()

Sintaxe PUTMV(cParametro, cConteudo)
Descrio
Atualiza o contedo do parmetro especificado no arquivo SX6, de acordo
com as parametrizaes informadas.


SUPERGETMV()

Sintaxe SUPERGETMV(cParametro , lHelp , cPadrao , cFilial)
Descrio
Retorna o contedo do parmetro especificado no arquivo SX6, considerando
a filial parametrizada na conexo. Caso o parmetro no exista ser exibido
um help do sistema informando a ocorrncia.

Difere do GetMv() pois os parmetros consultados so adicionados em uma
rea de memria, que permite que em uma nova consulta no seja
necessrio acessar e pesquisar o parmetro na base de dados.


12.3.2. Cuidados na utilizao de um parmetro

Um parmetro de sistema tem a finalidade de propiciar um retorno vlido a um contedo
previamente definido na configurao do mdulo para uma rotina, processo ou quaisquer
outros tipos de funcionalidades disponveis na aplicao.

Apesar de haver parmetros que permitam a configurao de expresses, e por conseqncia
a utilizao de funes para definir o retorno que ser obtido com a consulta deste parmetro,
expressamente proibido o uso de funes em parmetros para manipular
informaes da base de dados do sistema.

Caso haja a necessidade de ser implementado um tratamento adicional a um processo padro
do sistema, o mesmo dever utilizar o recurso de ponto de entrada.

A razo desta restrio simples:

E As rotinas da aplicao ERP no protegem a consulta de contedos de parmetros
quanto a gravaes realizadas dentro ou fora de uma transao.

E Desta forma, quaisquer alterao na base realizada por uma rotina configurada em um
parmetro pode ocasionar a perda da integridade das informaes do sistema.

- 141 -

ADVPL Completo



12.4. Pontos de Entrada Conceitos, Premissas e Regras

Conceitos

Um ponto de entrada uma User Function desenvolvida com a finalidade de interagir com uma
rotina padro da aplicao ERP.

A User Function dever ter um nome pr-estabelecido no desenvolvimento da rotina padro do
ERP, e de acordo esta pr-disposio e o momento no qual o ponto de entrada executado
durante um processamento, ele poder:

E Complementar uma validao realizada pela aplicao;

E Complementar as atualizaes realizadas pelo processamento em tabelas padres do
ERP;

E Implementar a atualizao de tabelas especificas durante o processamento de uma
rotina padro do ERP;

E Executar uma ao sem processos de atualizaes, mas que necessite utilizar as
informaes atuais do ambiente durante o processamento da rotina padro para
determinar as caractersticas do processo;

E Substituir um processamento padro do sistema por uma regra especfica do cliente no
qual o mesmo ser implementado.


Premissas e Regras

E Um ponto de entrada no deve ser utilizado para outras finalidades seno para as quais
o mesmo foi pr-definido, sob pena de causar a perda da integridade das informaes
da base de dados ou provocar eventos de erro durante a execuo da rotina padro.

E Um ponto de entrada deve ser transparente para o processo padro, de forma que
todas as tabelas acessadas pelo ponto de entrada e que sejam utilizadas pela rotina
padro, devero ter sua situao imediatamente anterior execuo do ponto
restaurada ao trmino do mesmo, e para isto recomenda-se o uso das funes
GETAREA() e RESTAREA().

E Como um ponto de entrada no executado da forma tradicional, ou seja, ele no
chamado como uma funo, ele no recebe parmetros. A aplicao ERP disponibiliza
uma varivel de sistema denominada PARAMIXB, a qual recebe os parmetros da
funo chamadora e os disponibiliza para serem utilizados pela rotina customizada.

E A varivel PARAMIXB no possui um padro de definio nos cdigos fontes da
aplicao ERP, desta forma seu tipo pode variar deste um contedo simples (caractere,
numrico, lgico e etc.) a um tipo complexo como um array ou um objeto. Desta forma
necessrio sempre avaliar a documentao sobre o ponto bem como proteger a
funo customizada de tipos de PARAMIXB no tratados por ela.


- 142 -

ADVPL Completo



13. Interfaces visuais

A linguagem ADVPL possui duas formas distintas para definio de interfaces visuais no
ambiente ERP: sintaxe convencional, nos padres da linguagem CLIPPER e a sintaxe orientada
a objetos.

Alm das diferentes sintaxes disponveis para definio das interfaces visuais o ERP Protheus
possui funcionalidades pr-definidas, as quais j contm todos os tratamentos necessrios a
atender as necessidades bsicas de acesso e manuteno das informaes do sistema.

Neste tpico sero abordadas as sintaxes convencionais para definio das interfaces visuais
da linguagem ADVPL e as interfaces de manuteno disponveis no ambiente ERP Protheus.


13.1. Sintaxe e componentes das interfaces visuais

A sintaxe convencional para definio de componentes visuais da linguagem ADVPL depende
diretamente no include especificado no cabealho do fonte. Os dois includes disponveis para o
ambiente ADVPL Protheus so:

E RWMAKE.CH: permite a utilizao da sintaxe CLIPPER na definio dos componentes
visuais.

E PROTHEUS.CH: permite a utilizao da sintaxe ADVPL convencional, a qual um
aprimoramento da sintaxe CLIPPER, com a incluso de novos atributos para os
componentes visuais disponibilizados no ERP Protheus.

Para ilustrar a diferena na utilizao destes dois includes, segue abaixo as diferentes
definies para o componentes Dialog e MsDialog:

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 sintaxes produziro o mesmo efeito quando compiladas e
executadas no ambiente Protheus, mas deve ser utilizada sempre a sintaxe
ADVPL atravs do uso do include PROTHEUS.CH




- 143 -

ADVPL Completo


Os componentes da interface visual que sero tratados neste tpico, utilizando a sintaxe
ADVPL so:

MSDIALOG()
MSGET()
SAY()
BUTTON()
SBUTTON()

BUTTON()

Sintaxe
@ nLinha,nColuna BUTTON cTexto SIZE nLargura,nAltura UNIDADE
OF oObjetoRef ACTION AO
Descrio
Define o componente visual Button, o qual permite a incluso de botes de
operao na tela da interface, os quais sero visualizados somente com um
texto simples para sua identificao.

MSDIALOG()

Sintaxe
DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni
TO nLiFim,nColFim OF oObjetoRef UNIDADE
Descrio
Define o componente MSDIALOG(), o qual utilizado como base para os
demais componentes da interface visual, pois um componente MSDIALOG()
uma janela da aplicao.

MSGET()

Sintaxe
@ nLinha, nColuna MSGET VARIAVEL SIZE nLargura,nAltura
UNIDADE OF oObjetoRef F3 cF3 VALID VALID WHEN WHEN PICTURE
cPicture
Descrio
Define o componente visual MSGET, o qual utilizado para captura de
informaes digitveis na tela da interface.

SAY()

Sintaxe
@ nLinha, nColuna SAY cTexto SIZE nLargura,nAltura UNIDADE OF
oObjetoRef
Descrio
Define o componente visual SAY, o qual utilizado para exibio de textos
em uma tela de interface.

SBUTTON()

Sintaxe
DEFINE SBUTTON FROM nLinha, nColuna TYPE N ACTION AO
STATUS OF oObjetoRet
Descrio
Define o componente visual SButton, o qual permite a incluso de botes de
operao na tela da interface, os quais sero visualizados dependendo da
interface do sistema ERP utilizada somente com um texto simples para sua
identificao, ou com uma imagem (BitMap) pr-definido.




- 144 -

ADVPL Completo


Interface visual completa

Abaixo segue um cdigo completo de interface, utilizado todos os elementos da interface visual
descritos anteriormente:


DEFINE MSDIALOG oDlg TITLE cTitulo FROM 000,000 TO 080,300 PIXEL

@ 001,001 TO 040, 150 OF oDlg PIXEL

@ 010,010 SAY cTexto SIZE 55, 07 OF oDlg PIXEL

@ 010,050 MSGET cCGC SIZE 55, 11 OF oDlg PIXEL PICTURE "@R 99.999.999/9999-99";
VALID !Vazio()

DEFINE SBUTTON FROM 010, 120 TYPE 1 ACTION (nOpca := 1,oDlg:End());
ENABLE OF oDlg

DEFINE SBUTTON FROM 020, 120 TYPE 2 ACTION (nOpca := 2,oDlg:End());
ENABLE OF oDlg

ACTIVATE MSDIALOG oDlg CENTERED




O cdigo demonstrado anteriormente utilizados nos exerccios de fixao
deste material e dever produzir a seguinte interface:







- 145 -

ADVPL Completo



13.2. Interfaces padres para atualizaes de dados

Os programas de atualizao de cadastros e digitao de movimentos seguem um padro que
se apia no Dicionrio de Dados.

Basicamente so duas as interfaces quer permitem a visualizao das informaes e a
manipulao dos dados do sistema.

E AxCadastro
E Mbrowse

Ambos os modelos utilizam como premissa que a estrutura da tabela a ser utilizada esteja
definida no dicionrio de dados do sistema (SX3).

13.2.1. AxCadastro()

O AxCadastro() uma funcionalidade de cadastro simples, com poucas opes de
customizao, a qual composta de:

Browse padro para visualizao das informaes da base de dados, de acordo com as
configuraes do SX3 Dicionrio de Dados (campo browse).

Funes de pesquisa, visualizao, incluso, alterao e excluso padres para
visualizao de registros simples, sem a opo de cabealho e itens.

E Sintaxe: AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt)

E Parmetros

cAlias
Alias padro do sistema para utilizao, o qual deve estar definido no
dicionrio de dados SX3.
cTitulo Ttulo da Janela
cVldExc Validao para Excluso
cVldAlt Validao para Alterao

Exemplo:

#include "protheus.ch"

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



- 146 -

ADVPL Completo














13.2.2. MBrowse()

A Mbrowse() uma funcionalidade de cadastro que permite a utilizao de recursos mais
aprimorados na visualizao e manipulao das informaes do sistema, possuindo os
seguintes componentes:

Browse padro para visualizao das informaes da base de dados, de acordo com as
configuraes do SX3 Dicionrio de Dados (campo browse).

Parametrizao para funes especficas para as aes de visualizao, incluso,
alterao e excluso de informaes, o que viabiliza a manuteno de informaes com
estrutura de cabealhos e itens.

Recursos adicionais como identificadores de status de registros, legendas e filtros para
as informaes.

E Sintaxe simplificada: MBrowse(nLin1, nCol1, nLin2, nCol2, cAlias)

E Parmetros

nLin1, nCol1,
nLin2, nCol2
Coordenadas dos cantos aonde o browse ser exibido. Para seguir o
padro da AXCADASTRO() use 6,1,22,75 .
cAlias
Alias padro do sistema para utilizao, o qual deve estar definido no
dicionrio de dados SX3.


- 147 -

ADVPL Completo



E Variveis private adicionais

aRotina

Array contendo as funes que sero executadas pela Mbrowse.
Este array pode ser parametrizados com as funes bsicas da
AxCadastro conforme abaixo:

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})


cCadastro Ttulo do browse que ser exibido.

Exemplo:

#include "protheus.ch"

User Function MBrwSA2()

Local cAlias := "SA2"
Private cCadastro := "Cadastro de Fornecedores"
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



- 148 -

ADVPL Completo













1. Utilizando a parametrizao exemplificada, o efeito obtido com o uso
da Mbrowse() ser o mesmo obtido com o uso da AxCadastro().

2. A posio das funes no array aRotina define o contedo de uma
varivel de controle que ser repassada para as funes chamadas a
partir da Mbrowse, convencionada como nOpc. Desta forma, para
manter o padro da aplicao ERP a ordem a ser seguida na definio
do aRotina ;

1 Pesquisar
2 Visualizar
3 Incluir
4 Alterar
5 Excluir
6 Livre



Ao definir as funes no array aRotina, se o nome da funo no for
especificado com (), a Mbrowse passar como parmetros as seguintes
variveis de controle:

cAlias: Alias ativo definido para a Mbrowse
nRecno: Record number (recno) do registro posicionado no alias
ativo.
nOpc: Posio da opo utilizada na Mbrowse de acordo com a ordem
da funo no array a Rotina.




- 149 -

ADVPL Completo



Exemplo: Funo BInclui() substituindo a funo AxInclui()

#include "protheus.ch"

User Function MBrwSA2()

Local cAlias := "SA2"

Private cCadastro := "Cadastro de Fornecedores"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_BInclui" ,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

USER FUNCTION BInclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"
AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)

RETURN

















- 150 -

ADVPL Completo



13.2.3. AxFunctions()

Conforme mencionado nos tpicos sobre as interfaces padres AxCadastro() e Mbrowse(),
existem funes padres da aplicao ERP que permitem a visualizao, incluso, alterao e
excluso de dados em formato simples.

Estas funes so padres na definio da interface AxCadastro() e podem ser utilizadas
tambm da construo no array aRotina utilizado pela Mbrowse(), as quais esto listadas a
seguir:

AXPESQUI()
AXVISUAL()
AXINCLUI()
AXALTERA()
AXDELETA()

AXALTERA()

Sintaxe
AxAltera(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
Funo de alterao padro das informaes de um registro, no formato
Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().

AXDELETA()

Sintaxe
AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,;
aAuto, lMaximized)
Descrio
Funo de excluso padro das informaes de um registro, no formato
Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().

AXINCLUI()

Sintaxe
AxInclui(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
Funo de incluso padro das informaes de um registro, no formato
Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().

AXPESQUI()

Sintaxe AXPESQUI()
Descrio
Funo de pesquisa padro em registros exibidos pelos browses do sistema,
a qual posiciona o browse no registro pesquisado. Exibe uma tela que
permite a seleo do ndice a ser utilizado na pesquisa e a digitao das
informaes que compe a chave de busca.


- 151 -

ADVPL Completo



AXVISUAL()

Sintaxe
AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,;
aButtons, lMaximized )
Descrio
Funo de visualizao padro das informaes de um registro, no formato
Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().


- 152 -

ADVPL Completo



APNDICES

BOAS PRTICAS DE PROGRAMAO

14. Utilizao de Identao

obrigatria a utilizao da identao, pois torna o cdigo muito mais legvel. Veja os
exemplos abaixo:


A utilizao da identao seguindo as estruturas de controle de fluxo (while, if, caso etc) torna
a compreenso do cdigo muito mais fcil:



Para identar o cdigo utilize a tecla <TAB> e na ferramenta DEV-Studio, a qual pode ser
configurada atravs da opo Preferncias:


- 153 -

ADVPL Completo




15. Capitulao de Palavras-Chave

Uma conveno amplamente utilizada a de capitular as palavras chaves, funes, variveis e
campos utilizando uma combinao de caracteres em maisculo e minsculo, visando facilitar
a leitura do cdigo fonte. O cdigo a seguir:

local ncnt while ( ncnt++ < 10 ) ntotal += ncnt * 2 enddo

Ficaria melhor com as palavras chaves e variveis capituladas:

Local nCnt While ( nCnt++ < 10 ) nTotal += nCnt * 2 EndDo



Para funes de manipulao de dados que comecem por db, a capitulao
s ser efetuada aps o db:

E dbSeek()
E dbSelectArea()








- 154 -

ADVPL Completo



15.1. Palavras em maisculo

A regra utilizar caracteres em maisculo para:

E Constantes:
#define NUMLINES 60 #define NUMPAGES 1000

E Variveis de memria:
M-> CT2_CRCONV M->CT2_MCONVER := CriaVar("CT2_CONVER")

E Campos:
SC6->C6_NUMPED

E Querys:
SELECT * FROM...


16. Utilizao da Notao Hngara

A notao hngara consiste em adicionar os prefixos aos nomes de variveis, de modo a
facilmente se identificar seu tipo. Isto facilita na criao de cdigos-fonte extensos, pois
usando a Notao Hngara, voc no precisa ficar o tempo todo voltando definio de uma
varivel para se lembrar qual o tipo de dados que deve ser colocado nela. Variveis devem
ter um prefixo de Notao Hngara em minsculas, seguido de um nome que identifique a
funo da varivel, sendo que a inicial de cada palavra deve ser maiscula.
obrigatria a utilizao desta notao para nomear variveis.
Notao Tipo de dado Exemplo
a Array aValores
b Bloco de cdigo bSeek
c Caracter cNome
d Data dDataBase
l Lgico lContinua
n Numrico nValor
o Objeto oMainWindow
x Indefinido xConteudo







- 155 -

ADVPL Completo



17. Palavras reservadas

AADD DTOS INKEY REPLICATE VAL
ABS ELSE INT RLOCK VALTYPE
ASC ELSEIF LASTREC ROUND WHILE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRIM YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDIF LOWER SELECT CHR EOF
LTRIM SETPOS CMONTH EXP MAX
SPACE COL FCOUNT MIN SQRT
CTOD FIELDNAME MONTH STR DATE
FILE PCOL SUBSTR DAY FLOCK
PCOUNT TIME DELETED FOUND PROCEDURE
TRANSFORM DEVPOS FUNCTION PROW TRIM
DOW IF RECCOUNT TYPE DTOC
IIF RECNO UPPER TRY AS
CATCH THROW




E Palavras reservadas no podem ser utilizadas para variveis,
procedimentos ou funes;

E Funes reservadas so pertencentes ao compilador e no podem ser
redefinidas por uma aplicao;

E Todos os identificadores que comearem com dois ou mais caracteres
_ so utilizados como identificadores internos e so reservados.

E Identificadores de escopo PRIVATE ou PUBLIC utilizados em aplicaes
especficas desenvolvida por ou para clientes devem ter sua
identificao iniciada por um caractere _.




- 156 -

ADVPL Completo



LISTAS DE EXERCCIOS

Mdulo 01: Introduo programao





01
Aprimorar os seguintes algoritmos descritos na apostila:

E Usar telefone pblico carto
E Fritar um ovo
E Mascar um chiclete
E Trocar lmpadas
E Descascar batatas
E Jogar o Jogo da Forca





02
Montar os diagramas de blocos para os algoritmos desenvolvidos no exerccio
anterior:

E Usar telefone pblico carto
E Fritar um ovo
E Mascar um chiclete
E Trocar lmpadas
E Descascar batatas
E Jogar o Jogo da Forca




- 157 -

ADVPL Completo



Mdulo 02: A linguagem ADVPL



01

Desenvolver um programa que implemente o algoritmo de descascar batatas,
utilizando a estrutura de repetio While, demonstrando quantas batatas
foram descascadas:



02

Desenvolver um programa que implemente o algoritmo de descascar batatas,
utilizando a estrutura de repetio FOR, demonstrando quantas batatas foram
descascadas:



03

Desenvolver um programa que implemente o algoritmo de descascar batatas,
utilizando a estrutura de repetio FOR, demonstrando quantas batatas faltam
para serem descascadas:


- 158 -

ADVPL Completo



04 Desenvolver um programa que implemente o algoritmo do Jogo da Forca:



05 Desenvolver um programa que implemente o algoritmo do Jogo da Velha:



06
Desenvolver um programa que permita ao usurio pesquisar um cliente
informando seu CNPJ e caso o mesmo exista na base, exibir suas principais
informaes.


07
Utilizando a interface visual desenvolvida para o exerccio anterior,
desenvolver a funo genrica GetTexto(), para ser utilizada nas aplicaes do
Jogo da Velha e Jogo da Forca.


- 159 -

ADVPL Completo



08
Utilizando a funo AVISO() desenvolver um programa que permita ao usurio
selecionar a opo de busca de CNPJ por cliente ou fornecedor, e caso
encontre exiba seus dados principais.

09
Desenvolver uma rotina que capture vrios CNPJs de clientes informados pelo
usurio, e verifique para cada um deles se o mesmo existe ou no na base de
dados. Ao final informar quais CNPJs foram informados, e de acordo com a
seleo do usurio, exibir os dados principais de um destes clientes.

10
Utilizando a funo FORMBATCH() desenvolver uma rotina que verifique se
para cada item de um nota fiscal de entrada existe o respectivo cabealho, e
caso seja encontrado algum item inconsistente, comunique esta ocorrncia ao
usurio que est realizando o processamento.

11
Desenvolver uma rotina que, atravs do uso de um bloco de cdigo, converta
a estrutura da tabela SA1 obtida com a funo DBSTRUCT() em uma string
denominada cCampo.


- 160 -

ADVPL Completo



Mdulo 03: Desenvolvendo pequenas customizaes



01
Desenvolver uma validao para um campo especfico do tipo caractere, cujo
contedo esteja relacionado a outra tabela, e que exiba uma mensagem de
aviso caso o cdigo informado no exista nesta tabela relacionada.


02
Desenvolver uma validao para um campo caractere existente na base, para
que seja avaliado se aquele cdigo j existe cadastrado, e caso positivo exiba
uma mensagem de aviso alertando desta ocorrncia.



03
Desenvolver um gatilho que retorne uma descrio complementar para um
campo vinculado ao campo cdigo utilizado nos exerccios anteriores.




- 161 -

ADVPL Completo



04
Customizar o parmetro que define o prefixo do ttulo de contas a pagar
gerado pela integrao COMPRAS -> FINANCEIRO atravs da incluso de uma
nota fiscal de entrada, de forma que o prefixo do ttulo seja gerado com o
cdigo da filial corrente.


05
Proteger a rotina desenvolvida no exerccio anterior, de forma a garantir que
na utilizao da filial como prefixo do ttulo no ir ocorrer duplicidade de
dados no contas a pagar do financeiro.




06
Implementar uma validao adicional no cadastro de clientes, atravs do
ponto de entrada adequado, de forma que o campo CNPJ (A1_CGC) seja
obrigatrio para todos os tipos de cliente, exceto os definidos como Exterior.














- 162 -

ADVPL Completo


MDULO 04: Desenvolvendo aplicaes em ADVPL

18. A linguagem ADVPL

A Linguagem ADVPL teve seu incio em 1994, sendo na verdade uma evoluo na utilizao de
linguagens no padro xBase pela Microsiga Software S.A. (Clipper, Visual Objects e depois
FiveWin). Com a criao da tecnologia Protheus, era necessrio criar uma linguagem que
suportasse o padro xBase para a manuteno de todo o cdigo existente do sistema de ERP
Siga Advanced. Foi ento criada a linguagem chamada Advanced Protheus Language.

O ADVPL uma extenso do padro xBase de comandos e funes, operadores, estruturas de
controle de fluxo e palavras reservadas, contando tambm com funes e comandos
disponibilizados pela Microsiga que a torna uma linguagem completa para a criao de
aplicaes ERP prontas para a Internet. Tambm uma linguagem orientada a objetos e
eventos, permitindo ao programador desenvolver aplicaes visuais e criar suas prprias
classes de objetos.

Quando compilados, todos os arquivos de cdigo tornam-se unidades de inteligncia bsicas,
chamados APOs (de Advanced Protheus Objects). Tais APOs so mantidos em um
repositrio e carregados dinamicamente pelo PROTHEUS Server para a execuo. Como no
existe a linkedio, ou unio fsica do cdigo compilado a um determinado mdulo ou
aplicao, funes criadas em ADVPL podem ser executadas em qualquer ponto do ambiente
Advanced Protheus.

O compilador e o interpretador da linguagem ADVPL o prprio servidor PROTHEUS
(PROTHEUS Server), e existe um ambiente visual para desenvolvimento integrado
(PROTHEUSIDE) onde o cdigo pode ser criado, compilado e depurado.

Os programas em ADVPL podem conter comandos ou funes de interface com o usurio. De
acordo com tal caracterstica, tais programas so subdivididos nas seguintes categorias:

Programao Com Interface Prpria com o Usurio

Nesta categoria entram os programas desenvolvidos para serem executados atravs do
terminal remoto do Protheus, o Protheus Remote. O Protheus Remote a aplicao
encarregada da interface e da interao com o usurio, sendo que todo o processamento do
cdigo em ADVPL, o acesso ao banco de dados e o gerenciamento de conexes efetuado no
Protheus Server. O Protheus Remote o principal meio de acesso a execuo de rotinas
escritas em ADVPL no Protheus Server, e por isso permite executar qualquer tipo de cdigo,
tenha ele interface com o usurio ou no. Porm nesta categoria so considerados apenas os
programas que realizem algum tipo de interface remota utilizando o protocolo de comunicao
do Protheus.

Podem-se criar rotinas para a customizao do sistema ERP Microsiga Protheus, desde
processos adicionais at mesmo relatrios. A grande vantagem aproveitar todo o ambiente
montado pelos mdulos do ERP Microsiga Protheus. Porm, com o ADVPL possvel at
mesmo criar toda uma aplicao, ou mdulo, do comeo.

Todo o cdigo do sistema ERP Microsiga Protheus escrito em ADVPL.


- 163 -

ADVPL Completo



Programao Sem Interface Prpria com o Usurio

As rotinas criadas sem interface so consideradas nesta categoria porque geralmente tm uma
utilizao mais especfica do que um processo adicional ou um relatrio novo. Tais rotinas no
tm interface com o usurio atravs do Protheus Remote, e qualquer tentativa nesse sentido
(como a criao de uma janela padro) ocasionar uma exceo em tempo de execuo. Estas
rotinas so apenas processos, ou Jobs, executados no Protheus Server. Algumas vezes, a
interface destas rotinas fica a cargo de aplicaes externas, desenvolvidas em outras
linguagens, que so responsveis por iniciar os processos no servidor Protheus atravs dos
meios disponveis de integrao e conectividade no Protheus.

De acordo com a utilizao e com o meio de conectividade utilizado, estas rotinas so
subcategorizadas assim:

E Programao por Processos

Rotinas escritas em ADVPL podem ser iniciadas como processos individuais (sem interface) no
Protheus Server atravs de duas maneiras: Iniciadas por outra rotina ADVPL atravs da
chamada de funes como StartJob() ou CallProc() ou iniciadas automaticamente na
inicializao do Protheus Server (quando propriamente configurado).

E Programao de RPC

Atravs de uma biblioteca de funes disponvel no Protheus (uma API de comunicao),
podem-se executar rotinas escritas em ADVPL diretamente no Protheus Server, atravs de
aplicaes externas escritas em outras linguagens. Isto o que se chama de RPC (de Remote
Procedure Call, ou Chamada de Procedimentos Remota).

O servidor Protheus tambm pode executar rotinas em ADVPL em outros servidores Protheus
atravs de conexo TCP/IP direta utilizando o conceito de RPC. Do mesmo modo, aplicaes
externas podem requisitar a execuo de rotinas escritas em ADVPL atravs de conexo
TCP/IP direta.
Programao Web

O Protheus Server pode tambm ser executado como um servidor Web, respondendo a
requisies HTTP. No momento destas requisies, pode executar rotinas escritas em ADVPL
como processos individuais, enviando o resultado das funes como retorno das requisies
para o cliente HTTP (como por exemplo, um Browser de Internet). Qualquer rotina escrita em
ADVPL que no contenha comandos de interface pode ser executada atravs de requisies
HTTP. O Protheus permite a compilao de arquivos HTML contendo cdigo ADVPL embutido.
So os chamados arquivos ADVPL ASP, para a criao de pginas dinmicas.

E Programao TelNet

TelNet parte da gama de protocolos TCP/IP que permite a conexo a um computador remoto
atravs de uma aplicao cliente deste protocolo. O PROTHEUS Server pode emular um
terminal TelNet, atravs da execuo de rotinas escritas em ADVPL. Ou seja, pode-se escrever
rotinas ADVPL cuja interface final ser um terminal TelNet ou um coletor de dados mvel.





- 164 -

ADVPL Completo



19. Estrutura de um Programa ADVPL

Um programa de computador nada mais do que um grupo de comandos logicamente
dispostos com o objetivo de executar determinada tarefa. Esses comandos so gravados em
um arquivo texto que transformado em uma linguagem executvel por um computador
atravs de um processo chamado compilao. A compilao substitui os comandos de alto
nvel (que os humanos compreendem) por instrues de baixo nvel (compreendida pelo
sistema operacional em execuo no computador). No caso do ADVPL, no o sistema
operacional de um computador que ir executar o cdigo compilado, mas sim o Protheus
Server.

Dentro de um programa, os comandos e funes utilizados devem seguir regras de sintaxe da
linguagem utilizada, pois caso contrrio o programa ser interrompido por erros. Os erros
podem ser de compilao ou de execuo.

Erros de compilao so aqueles encontrados na sintaxe que no permitem que o arquivo de
cdigo do programa seja compilado. Podem ser comandos especificados de forma errnea,
utilizao invlida de operadores, etc.

Erros de execuo so aqueles que acontecem depois da compilao, quando o programa est
sendo executado. Podem ocorrer por inmeras razes, mas geralmente se referem as funes
no existentes, ou variveis no criadas ou inicializadas, etc.


Linhas de Programa

As linhas existentes dentro de um arquivo texto de cdigo de programa podem ser linhas de
comando, linhas de comentrio ou linhas mistas.

E Linhas de Comando

Linhas de comando possuem os comandos ou instrues que sero executadas. Por exemplo:

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

E Linhas de Comentrio

Linhas de comentrio possuem um texto qualquer, mas no so executadas. Servem apenas
para documentao e para tornar mais fcil o entendimento do programa. Existem trs formas
de se comentar linhas de texto. A primeira delas utilizar o sinal de * (asterisco) no comeo
da linha:

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

- 165 -

ADVPL Completo



Todas as linhas iniciadas com um sinal de asterisco so consideradas como comentrio. Pode-
se utilizar a palavra NOTE ou dois smbolos da letra "e" comercial (&&) para realizar a funo
do sinal de asterisco. Porm todas estas formas de comentrio de linhas so obsoletas e
existem apenas para compatibilizao com o padro xBase. A melhor maneira de comentar
linhas em ADVPL utilizar duas barras transversais:

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

Outra forma de documentar textos utilizar as barras transversais juntamente com o
asterisco, podendo-se comentar todo um bloco de texto sem precisar comentar linha a linha:

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

Todo o texto encontrado entre a abertura (indicada pelos caracteres /*) e o fechamento
(indicada pelos caracteres */) considerado como comentrio.

E Linhas Mistas

O ADVPL tambm permite que existam linhas de comando com comentrio. Isto possvel
adicionando-se as duas barras transversais (//) ao final da linha de comando e adicionando-se
o texto do comentrio:

Local nCnt
Local nSoma : = 0 / / I ni ci al i za a var i vel comzer o par a a soma
For nCnt : = 1 To 10
nSoma += nCnt
Next nCnt

E Tamanho da Linha

Assim como a linha fsica, delimitada pela quantidade de caracteres que pode ser digitado no
editor de textos utilizado, existe uma linha considerada linha lgica. A linha lgica, aquela
considerada para a compilao como uma nica linha de comando.

A princpio, cada linha digitada no arquivo texto diferenciada aps o pressionamento da tecla
<Enter>. Ou seja, a linha lgica, a linha fsica no arquivo. Porm algumas vezes, por
limitao fsica do editor de texto ou por esttica, pode-se "quebrar" a linha lgica em mais de
uma linha fsica no arquivo texto. Isto efetuado utilizando-se o sinal de ponto-e-vrgula (;).

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

Gr avaDados( cNome, cEnd, cTel , cFax, cEmai l )

Endi f

Neste exemplo existe uma linha de comando para a checagem das variveis utilizadas. Como a
linha torna-se muito grande, pode-se dividi-la em mais de uma linha fsica utilizando o sinal de

- 166 -

ADVPL Completo


ponto-e-vrgula. Se um sinal de ponto-e-vrgula for esquecido nas duas primeiras linhas,
durante a execuo do programa ocorrer um erro, pois a segunda linha fsica ser
considerada como uma segunda linha de comando na compilao. E durante a execuo esta
linha no ter sentido.

19.1. reas de um Programa ADVPL

Apesar de no ser uma linguagem de padres rgidos com relao estrutura do programa,
importante identificar algumas de suas partes. Considere o programa de exemplo abaixo:

#i ncl ude pr ot heus. ch

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

User Funct i on Cal cFat or ( )

Local nCnt
Local nResul t ado : = 1 / / Resul t ado do f at or i al
Local nFat or : = 5 / / Nmer o par a o cl cul o

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

/ / Exi be o r esul t ado na t el a, at r avs da f uno al er t
Al er t ( " O f at or i al de " + cVal ToChar ( nFat or ) + ;
" " + cVal ToChar ( nResul t ado) )

/ / Ter mi na o pr ogr ama
Ret ur n

A estrutura de um programa ADVPL composta pelas seguintes reas:

E rea de Identificao
- Declarao dos includes
- Declarao da funo
- Identificao do programa

E rea de Ajustes Iniciais
- Declarao das variveis

E Corpo do Programa
- Preparao para o processamento
- Processamento

E rea de Encerramento

- 167 -

ADVPL Completo



rea de Identificao

Esta uma rea que no obrigatria e dedicada a documentao do programa. Quando
existente, contm apenas comentrios explicando a sua finalidade, data de criao, autor, etc.,
e aparece no comeo do programa, antes de qualquer linha de comando.

O formato para esta rea no definido. Pode-se colocar qualquer tipo de informao
desejada e escolher a formatao apropriada.

#i ncl ude pr ot heus. ch

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

User Funct i on Cal cFat or ( )


Opcionalmente podem-se incluir definies de constantes utilizadas no programa ou incluso
de arquivos de cabealho nesta rea.

rea de Ajustes Iniciais

Nesta rea geralmente se fazem os ajustes iniciais, importantes para o correto funcionamento
do programa. Entre os ajustes se encontram declaraes de variveis, inicializaes, abertura
de arquivos, etc. Apesar do ADVPL no ser uma linguagem rgida e as variveis poderem ser
declaradas em qualquer lugar do programa, aconselhvel faz-lo nesta rea visando tornar o
cdigo mais legvel e facilitar a identificao de variveis no utilizadas.

Local nCnt
Local nResul t ado : = 0 / / Resul t ado do f at or i al
Local nFat or : = 10 / / Nmer o par a o cl cul o

Corpo do Programa

nesta rea que se encontram as linhas de cdigo do programa. onde se realiza a tarefa
necessria atravs da organizao lgica destas linhas de comando. Espera-se que as linhas de
comando estejam organizadas de tal modo que no final desta rea o resultado esperado seja
obtido, seja ele armazenado em um arquivo ou em variveis de memria, pronto para ser
exibido ao usurio atravs de um relatrio ou na tela.

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

- 168 -

ADVPL Completo



A preparao para o processamento formada pelo conjunto de validaes e processamentos
necessrios antes da realizao do processamento em si.

Avaliando o processamento do clculo do fatorial descrito anteriormente, pode-se definir que a
validao inicial a ser realizada o contedo da varivel nFator, pois a mesma determinar a
correta execuo do cdigo.


/ / Cl cul o do f at or i al
nFat or : = Get Fat or ( )
/ / Get Fat or f uno i l ust r at i va na qual a var i vel r ecebe a i nf or mao do
usur i o.

I f nFat or <= 0
Al er t ( I nf or mao i nvl i da)
Ret ur n
Endi f

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


rea de Encerramento

nesta rea onde as finalizaes so efetuadas. onde os arquivos abertos so fechados, e o
resultado da execuo do programa utilizado. Pode-se exibir o resultado armazenado em
uma varivel ou em um arquivo ou simplesmente finalizar, caso a tarefa j tenha sido toda
completada no corpo do programa. nesta rea que se encontra o encerramento do
programa. Todo programa em ADVPL deve sempre terminar com a palavra chave return.

/ / Exi be o r esul t ado na t el a, at r avs da f uno al er t
Al er t ( " O f at or i al de " + cVal ToChar ( nFat or ) + ;
" " + cVal ToChar ( nResul t ado) )

/ / Ter mi na o pr ogr ama
Ret ur n


- 169 -

ADVPL Completo



20. Declarao e Atribuio de Variveis

20.1. Tipo de Dados

O ADVPL no uma linguagem de tipos rgidos (strongly typed), o que significa que variveis
de memria podem receber diferentes tipos de dados durante a execuo do programa.

As variveis podem tambm conter objetos, mas os tipos primrios da linguagem so:

Numrico

O ADVPL no diferencia valores inteiros de valores com ponto flutuante, portanto podem-se
criar variveis numricas com qualquer valor dentro do intervalo permitido. Os seguintes
elementos so do tipo de dado numrico:

2
43. 53
0. 5
0. 00001
1000000

Uma varivel do tipo de dado numrico pode conter um nmero de dezoito dgitos incluindo o
ponto flutuante, no intervalo de 2.2250738585072014 E308 at 1.7976931348623158
E+308.

Lgico

Valores lgicos em ADVPL so identificados atravs de .T. ou .Y. para verdadeiro e .F. ou .N.
para falso (independentemente se os caracteres estiverem em maisculo ou minsculo).

Caractere

Strings ou cadeias de caracteres so identificadas em ADVPL por blocos de texto entre aspas
duplas (") ou aspas simples ('):

" Ol mundo! "
' Est a uma st r i ng'
" Est a ' out r a' st r i ng"

Uma varivel do tipo caractere pode conter strings com no mximo 1 MB, ou seja, 1048576
caracteres.

Data

O ADVPL tem um tipo de dados especfico para datas. Internamente as variveis deste tipo de
dado so armazenadas como um nmero correspondente a data Juliana.

Variveis do tipo de dados Data no podem ser declaradas diretamente, e sim atravs da
utilizao de funes especficas como por exemplo CTOD() que converte uma string para
data.

- 170 -

ADVPL Completo



Array

O Array um tipo de dado especial. a disposio de outros elementos em colunas e linhas. O
ADVPL suporta arrays unidimensionais (vetores) ou multidimensionais (matrizes). Os
elementos de um array so acessados atravs de ndices numricos iniciados em 1,
identificando a linha e coluna para quantas dimenses existirem.

Arrays devem ser utilizadas com cautela, pois se forem muito grandes podem exaurir a
memria do servidor.

Bloco de Cdigo

O bloco de cdigo um tipo de dado especial. utilizado para armazenar instrues escritas
em ADVPL que podero ser executadas posteriormente.

20.2. Declarao de variveis

Variveis de memria so um dos recursos mais importantes de uma linguagem. So reas de
memria criadas para armazenar informaes utilizadas por um programa para a execuo de
tarefas. Por exemplo, quando o usurio digita uma informao qualquer, como o nome de um
produto, em uma tela de um programa esta informao armazenada em uma varivel de
memria para posteriormente ser gravada ou impressa.

A partir do momento que uma varivel criada, no necessrio mais se referenciar ao seu
contedo, e sim ao seu nome.

O nome de uma varivel um identificador nico o qual deve respeitar um mximo de 10
caracteres. O ADVPL no impede a criao de uma varivel de memria cujo nome contenha
mais de 10 caracteres, porm apenas os 10 primeiros sero considerados para a
localizao do contedo armazenado.

Portanto se forem criadas duas variveis cujos 10 primeiros caracteres forem iguais, como
nTotalGeralAnual e nTotalGeralMensal, as referncias a qualquer uma delas no programa
resultaro o mesmo, ou seja, sero a mesma varivel:

nTot al Ger al Mensal : = 100
nTot al Ger al Anual : = 300
Al er t ( " Val or mensal : " + cVal ToChar ( nTot al Ger al Mensal ) )

Quando o contedo da varivel nTotalGeralMensal exibido, o seu valor ser de 300. Isso
acontece porque no momento que esse valor foi atribudo varivel nTotalGeralAnual, o
ADVPL considerou apenas os 10 primeiros caracteres (assim como o faz quando deve exibir o
valor da varivel nTotalGeralMensal), ou seja, considerou-as como a mesma varivel. Assim o
valor original de 100 foi substitudo pelo de 300.


- 171 -

ADVPL Completo



20.3. Escopo de variveis

O ADVPL no uma linguagem de tipos rgidos para variveis, ou seja, no necessrio
informar o tipo de dados que determinada varivel ir conter no momento de sua declarao,
e o seu valor pode mudar durante a execuo do programa.

Tambm no h necessidade de declarar variveis em uma seo especfica do seu cdigo
fonte, embora seja aconselhvel declarar todas as variveis necessrias no comeo, tornando
a manuteno mais fcil e evitando a declarao de variveis desnecessrias.

Para declarar uma varivel deve-se utilizar um identificador de escopo. Um identificador de
escopo uma palavra chave que indica a que contexto do programa a varivel declarada
pertence. O contexto de variveis pode ser local (visualizadas apenas dentro do programa
atual), pblico (visualizadas por qualquer outro programa), entre outros.

O Contexto de Variveis dentro de um Programa

As variveis declaradas em um programa ou funo, so visveis de acordo com o escopo onde
so definidas. Como tambm do escopo depende o tempo de existncia das variveis. A
definio do escopo de uma varivel efetuada no momento de sua declarao.

Local nNumero := 10

Esta linha de cdigo declara uma varivel chamada nNumero indicando que pertence seu
escopo local.

Os identificadores de escopo so:

E Local
E Static
E Private
E Public

O ADVPL no rgido em relao declarao de variveis no comeo do programa. A incluso
de um identificador de escopo no necessrio para a declarao de uma varivel, contanto
que um valor lhe seja atribudo.

nNumer o2 : = 15

Quando um valor atribudo uma varivel em um programa ou funo, o ADVPL criar a
varivel caso ela no tenha sido declarada anteriormente. A varivel ento criada como se
tivesse sido declarada como Private.

Devido a essa caracterstica, quando se pretende fazer uma atribuio a uma varivel
declarada previamente mas escreve-se o nome da varivel de forma incorreta, o ADVPL no
gerar nenhum erro de compilao ou de execuo. Pois compreender o nome da varivel
escrito de forma incorreta como se fosse a criao de uma nova varivel. Isto alterar a lgica
do programa, e um erro muitas vezes difcil de identificar.

- 172 -

ADVPL Completo



Variveis de escopo local

Variveis de escopo local so pertencentes apenas ao escopo da funo onde foram declaradas
e devem ser explicitamente declaradas com o identificador LOCAL, como no exemplo:


Function Pai()
Local nVar : = 10, aMat r i z : = {0, 1, 2, 3}
.
<comandos>
.
Fi l ha( )
.
<mai s comandos>
.
Ret ur n( . T. )


Neste exemplo, a varivel nVar foi declarada como local e atribuda com o valor 10. Quando a
funo Filha executada, nVar ainda existe mas no pode ser acessada. Quando a execuo
da funo Pai terminar, a varivel nVar destruda. Qualquer varivel com o mesmo nome no
programa que chamou a funo Pai no afetada.

Variveis de escopo local so criadas automaticamente cada vez que a funo onde forem
declaradas for ativada. Elas continuam a existir e mantm seu valor at o fim da ativao da
funo (ou seja, at que a funo retorne o controle para o cdigo que a executou). Se uma
funo chamada recursivamente (por exemplo, chama a si mesma), cada chamada em
recurso cria um novo conjunto de variveis locais.

A visibilidade de variveis de escopo locais idntica ao escopo de sua declarao, ou seja, a
varivel visvel em qualquer lugar do cdigo fonte em que foi declarada. Se uma funo
chamada recursivamente, apenas as variveis de escopo local criadas na mais recente ativao
so visveis.

Variveis de escopo static

Variveis de escopo static funcionam basicamente como as variveis de escopo local, mas
mantm seu valor atravs da execuo e devem ser declaradas explicitamente no cdigo com
o identificador STATIC.

O escopo das variveis static depende de onde so declaradas. Se forem declaradas dentro do
corpo de uma funo ou procedimento, seu escopo ser limitado quela rotina. Se forem
declaradas fora do corpo de qualquer rotina, seu escopo afeta a todas as funes declaradas
no fonte. Neste exemplo, a varivel nVar declarada como static e inicializada com o valor 10:

Function Pai()
St at i c nVar : = 10
.
<comandos>
.
Fi l ha( )
.
<mai s comandos>
.
Return(.T.)


- 173 -

ADVPL Completo


Quando a funo Filha executada, nVar ainda existe mas no pode ser acessada. Diferente
de variveis declaradas como LOCAL ou PRIVATE, nVar continua a existir e mantm seu valor
atual quando a execuo da funo Pai termina. Entretanto, somente pode ser acessada por
execues subseqentes da funo Pai.

Variveis de escopo private

A declarao opcional para variveis privadas. Mas podem ser declaradas explicitamente com
o identificador PRIVATE.

Adicionalmente, a atribuio de valor a uma varivel no criada anteriormente
automaticamente cria a varivel como privada. Uma vez criada, uma varivel privada continua
a existir e mantm seu valor at que o programa ou funo onde foi criada termine (ou seja,
at que a funo onde foi criada retorne para o cdigo que a executou). Neste momento,
automaticamente destruda.

possvel criar uma nova varivel privada com o mesmo nome de uma varivel j existente.
Entretanto, a nova (duplicada) varivel pode apenas ser criada em um nvel de ativao
inferior ao nvel onde a varivel foi declarada pela primeira vez (ou seja, apenas em uma
funo chamada pela funo onde a varivel j havia sido criada). A nova varivel privada ir
esconder qualquer outra varivel privada ou pblica (veja a documentao sobre variveis
pblicas) com o mesmo nome enquanto existir.

Uma vez criada, uma varivel privada visvel em todo o programa enquanto no for
destruda automaticamente quando a rotina que a criou terminar ou uma outra varivel
privada com o mesmo nome for criada em uma subfuno chamada (neste caso, a varivel
existente torna-se inacessvel at que a nova varivel privada seja destruda).
Em termos mais simples, uma varivel privada visvel dentro da funo de criao e todas as
funes chamadas por esta, a menos que uma funo chamada crie sua prpria varivel
privada com o mesmo nome.

Por exemplo:


Function Pai()
Pr i vat e nVar : = 10
<comandos>
.
Fi l ha( )
<mai s comandos>
.
Return(.T.)


Neste exemplo, a varivel nVar criada com escopo private e inicializada com o valor 10.
Quando a funo Filha executada, nVar ainda existe e, diferente de uma varivel de escopo
local, pode ser acessada pela funo Filha. Quando a funo Pai terminar, nVar ser destruda
e qualquer declarao de nVar anterior se tornar acessvel novamente.


No ambiente ERP Protheus, existe uma conveno adicional a qual deve ser
respeitada que variveis em uso pela aplicao no sejam incorretamente
manipuladas. Por esta conveno deve ser adicionado o caracter _ antes
do nome de variveis PRIVATE e PUBLIC. Maiores informaes avaliar o
tpico: Boas Prticas de Programao.

Exemplo: Private _dData

- 174 -

ADVPL Completo




Variveis de escopo public

Podem-se criar variveis de escopo public dinamicamente no cdigo com o identificador
PUBLIC. As variveis deste escopo continuam a existir e mantm seu valor at o fim da
execuo da thread (conexo).

possvel criar uma varivel de escopo private com o mesmo nome de uma varivel de escopo
public existente, entretanto, no permitido criar uma varivel de escopo public com o mesmo
nome de uma varivel de escopo private existente.

Uma vez criada, uma varivel de escopo public visvel em todo o programa onde foi
declarada at que seja escondida por uma varivel de escopo private criada com o mesmo
nome. A nova varivel de escopo private criada esconde a varivel de escopo public existente,
e esta se tornar inacessvel at que a nova varivel private seja destruda. Por exemplo:


Function Pai()
Publ i c nVar : = 10
<comandos>
.
Fi l ha( )
<mai s comandos>
.
Return(.T.)


Neste exemplo, nVar criada como public e inicializada com o valor 10. Quando a funo Filha
executada, nVar ainda existe e pode ser acessada. Diferente de variveis locais ou privates,
nVar ainda existe aps o trmino da a execuo da funo Pai.

Diferentemente dos outros identificadores de escopo, quando uma varivel declarada como
pblica sem ser inicializada, o valor assumido falso (.F.) e no nulo (nil).


No ambiente ERP Protheus, existe uma conveno adicional a qual deve ser
respeitada que variveis em uso pela aplicao no sejam incorretamente
manipuladas. Por esta conveno deve ser adicionado o caracter _ antes
do nome de variveis PRIVATE e PUBLIC. Maiores informaes avaliar o
tpico: Boas Prticas de Programao.

Exemplo: Public _cRotina






- 175 -

ADVPL Completo



20.4. Entendendo a influncia do escopo das variveis

Considere as linhas de cdigo de exemplo:


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


Se esta linha for executada em um programa ADVPL, ocorrer um erro de execuo com a
mensagem "variable does not exist: nPercentual", pois esta varivel est sendo utilizada em
uma expresso de clculo sem ter sido declarada. Para solucionar este erro, deve-se declarar a
varivel previamente:


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


Neste exemplo, as variveis so declaradas previamente utilizando o identificador de escopo
local. Quando a linha de clculo for executada, o erro de varivel no existente, no mais
ocorrer. Porm variveis no inicializadas tm sempre o valor default nulo (Nil) e este valor
no pode ser utilizado em um clculo pois tambm gerar erros de execuo (nulo no pode
ser dividido por 100). A resoluo deste problema efetuada inicializando-se a varivel
atravs de uma das formas:


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

ou

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


A diferena entre o ltimo exemplo e os dois anteriores que a varivel inicializada no
momento da declarao. Em ambos os exemplos, a varivel primeiro declarada e ento
inicializada em uma outra linha de cdigo.

aconselhvel optar pelo operador de atribuio composto de dois pontos e sinal de igual, pois
o operador de atribuio utilizando somente o sinal de igual pode ser facilmente confundido
com o operador relacional (para comparao) durante a criao do programa.


- 176 -

ADVPL Completo



21. Regras adicionais da linguagem ADVPL

21.1. Palavras reservadas

AADD DTOS INKEY REPLICATE VAL
ABS ELSE INT RLOCK VALTYPE
ASC ELSEIF LASTREC ROUND WHILE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRIM YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDIF LOWER SELECT CHR EOF
LTRIM SETPOS CMONTH EXP MAX
SPACE COL FCOUNT MIN SQRT
CTOD FIELDNAME MONTH STR DATE
FILE PCOL SUBSTR DAY FLOCK
PCOUNT TIME DELETED FOUND PROCEDURE
TRANSFORM DEVPOS FUNCTION PROW TRIM
DOW IF RECCOUNT TYPE DTOC
IIF RECNO UPPER TRY AS
CATCH THROW




E Palavras reservadas no podem ser utilizadas para variveis,
procedimentos ou funes;

E Funes reservadas so pertencentes ao compilador e no podem ser
redefinidas por uma aplicao;

E Todos os identificadores que comearem com dois ou mais caracteres
_ so utilizados como identificadores internos e so reservados.

E Identificadores de escopo PRIVATE ou PUBLIC utilizados em aplicaes
especficas desenvolvida por ou para clientes devem ter sua
identificao iniciada por um caractere _.




- 177 -

ADVPL Completo



21.2. Pictures de formatao disponveis

Com base na documentao disponvel no DEM Documentao Eletrnica Microsiga, a
linguagem ADVPL e a aplicao ERP Protheus admitem as seguintes pictures:

Dicionrio de Dados (SX3) e GET

Funes
Contedo Funcionalidade
A Permite apenas caracteres alfabticos.
C Exibe CR depois de nmeros positivos.
E Exibe numrico com o ponto e vrgula invertidos (formato Europeu).
R Insere caracteres diferentes dos caracteres de template na exibio, mas no os
insere na varivel do GET.
S<n> Permite rolamento horizontal do texto dentro do GET, <n> um nmero inteiro
que identifica o tamanho da regio.
X Exibe DB depois de nmeros negativos.
Z Exibe zeros como brancos.
( Exibe nmeros negativos entre parnteses com os espaos em branco iniciais.
) Exibe nmeros negativos entre parnteses sem os espaos em branco iniciais.
! Converte caracteres alfabticos para maisculo.

Templates
Contedo Funcionalidade
X Permite qualquer caractere.
9 Permite apenas dgitos para qualquer tipo de dado, incluindo o sinal para
numricos.
# Permite dgitos, sinais e espaos em branco para qualquer tipo de dado.
! Converte caracteres alfabticos para maisculo.
* Exibe um asterisco no lugar dos espaos em branco iniciais em nmeros.
. Exibe o ponto decimal.
, Exibe a posio do milhar.

Exempl o 01 Pi ct ur e campo numr i co

CT2_VALOR Numr i co 17, 2
Pi ct ur e: @E 99, 999, 999, 999, 999. 99


Exempl o 02 Pi ct ur e campo t ext o, comdi gi t ao apenas emcai xa al t a

A1_NOME Car act er - 40
Pi ct ur e: @!



- 178 -

ADVPL Completo



22. Programas de Atualizao

Os programas de atualizao de cadastros e digitao de movimentos seguem um padro que
se apia no Dicionrio de Dados.

Basicamente so trs os modelos mais utilizados:

E Modelo 1 ou AxCadastro: Para cadastramentos em tela cheia.
Exemplo: Cadastro de Cliente.

E Modelo 2: Cadastramentos envolvendo apenas uma
tabela, mas com um cabealho e,
opcionalmente, um rodap e um corpo com
quantidade ilimitada de linhas. Ideal para
casos em que h dados que se repetem
por vrios itens e que, por isso, so
colocados no cabealho. Exemplo: Pedido de
Compra.

E Modelo 3: Cadastramentos envolvendo duas tabelas,
um com dados de cabealho e outro digitado
em linhas com os itens. Exemplo: Pedido de
Vendas, Oramento etc.

Todos os modelos so genricos, ou seja, o programa independe da tabela a ser tratada,
bastando praticamente que se informe apenas o seu Alias. O resto obtido do
Dicionrio de Dados (SX3).



- 179 -

ADVPL Completo



22.1. Modelo1() ou AxCadastro()

O AxCadastro() uma funcionalidade de cadastro simples, com poucas opes de
customizao, a qual composta de:

Browse padro para visualizao das informaes da base de dados, de acordo com as
configuraes do SX3 Dicionrio de Dados (campo browse).

Funes de pesquisa, visualizao, incluso, alterao e excluso padres para
visualizao de registros simples, sem a opo de cabealho e itens.

E Sintaxe: AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt)

E Parmetros:

cAlias
Alias padro do sistema para utilizao, o qual deve estar definido no
dicionrio de dados SX3.
cTitulo Ttulo da Janela
cVldExc Validao para Excluso
cVldAlt Validao para Alterao


Exemplo: Funo AxCadastro()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | XCADSA2 | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Exempl o de ut i l i zao da f uno AXCADASTRO( ) |
| +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
| +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on XCadSA2( )

Local cAl i as : = " SA2"
Local cTi t ul o : = " Cadast r o de For necedor es"
Local cVl dExc : = " . T. "
Local cVl dAl t : = " . T. "

dbSel ect Ar ea( cAl i as)
dbSet Or der ( 1)
AxCadast r o( cAl i as, cTi t ul o, cVl dExc, cVl dAl t )

Ret ur n Ni l


- 180 -

ADVPL Completo


Exemplo: Funo de validao da alterao



/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | VLDALT | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo de val i dao de al t er ao par a a AXCADASTRO( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Vl dAl t ( cAl i as, nReg, nOpc)

Local l Ret : = . T.
Local aAr ea : = Get Ar ea( )
Local nOpcao : = 0

nOpcao : = AxAl t er a( cAl i as, nReg, nOpc)

I f nOpcao == 1
MsgI nf o( At er ao concl u da comsucesso! )
Endi f

Rest Ar ea( aAr ea)

Ret ur n l Ret


Exemplo: Funo de validao da excluso


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | VLDEXC | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo de val i dao de excl uso par a a AXCADASTRO( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Vl dExc( cAl i as, nReg, nOpc)

Local l Ret : = . T.
Local aAr ea : = Get Ar ea( )
Local nOpcao : = 0

nOpcao : = AxExcl ui ( cAl i as, nReg, nOpc)

I f nOpcao == 1
MsgI nf o( Excl uso concl u da comsucesso! )
Endi f

Rest Ar ea( aAr ea)
Ret ur n l Ret


- 181 -

ADVPL Completo



22.2. Modelo2()

O nome Modelo 2 foi conceituado pela Microsiga por se tratar de um prottipo de tela para
entrada de dados. Inicialmente vamos desmistificar dois pontos:

O Funo Modelo2() Trata-se de uma funo pronta que contempla o prottipo
Modelo 2, porm, este um assunto que no iremos tratar aqui, visto que
uma funcionalidade simples que quando necessrio intervir em algo na rotina
no h muito recurso para tal.

O Prottipo Modelo 2 Trata-se de uma tela, como a figura abaixo, onde seu
objetivo efetuar a manuteno em vrios registros de uma s vez. Por
exemplo: efetuar o movimento interno de vrios produtos do estoque em um
nico lote.



22.2.1. Componentes de uma tela no formato Modelo 2

Objeto MsDialog()

Deve ser utilizada como janela padro para entrada de dados, um tipo de objeto modal, ou
seja, no permite que outra janela ativa receba dados enquanto esta estiver ativa.



- 182 -

ADVPL Completo


Toda vez que utilizar este comando o ADVPL exige que seja declarado a diretiva Include no
cabealho do programa o arquivo Protheus.ch, isto porque o compilador precisar porque
este comando trata-se de um pseudo cdigo e sua traduo ser feita na compilao. Vale
lembrar tambm que este s ser acionado depois que instanciado e ativado por outro
comando.


DEFI NE MSDI ALOG oDl g TI TLE " Pr ot t i po Model o 2" FROM 0, 0 TO 280, 552 OF;
oMai nWnd PI XEL

ACTI VATE MSDI ALOG oDl g CENTER


Reparem que o comando DEFINE MSDIALOG instanciou e o comando ACTIVATE MSDIALOG
ativa todos os objetos, ou seja, todo ou qualquer outro objeto que precisar colocar nesta
janela ser preciso informar em qual objeto, para este caso sempre ser utilizada a varivel de
objeto exportvel oDlg.


Funo EnchoiceBar()

Funo que cria uma barra de botes padro de Ok e Cancelar, permitindo a implementao
de botes adicionais.



E Sintaxe: ENCHOICEBAR( oDlg, bOk, bCancelar, [ lMensApag ] , [ aBotoes ] )

E Parmetros:

oDlg Objeto Janela onde a barra ser criada.
bOk Objeto Bloco de cdigo executado quando clicado boto Ok.
bCancelar Objeto Bloco de cdigo executado quando clicado.
lMensApag Lgico
Indica se ao clicar no boto Ok aparecer uma tela de
confirmao de excluso. Valor padro falso.
aBotes Vetor
Vetor com informaes para criao de botes
adicionais na barra. Seu formato {bitmap, bloco de
cdigo, mensagem}.

















- 183 -

ADVPL Completo




Figura: Prottipo Modelo2 Enchoice

Objeto TPanel()

Repare que para facilitar o desenvolvimento foi utilizado o objeto TPanel para ajudar o
alinhamento dos objetos TSay e TGet, ou seja, a utilizao deste recurso permite que o
programador no se preocupe com coordenadas complexas para deixar a unio dos objetos
simtricos.

Utilize o objeto TPanel quando desejar criar um painel esttico, onde podem ser criados outros
controles com o objetivo de organizar ou agrupar componentes visuais.

E Sintaxe: TPanel():New([anRow], [anCol], [acText], [aoWnd], [aoFont],
[alCentered], [lPar6], [anClrText], [anClrBack], [anWidth],
[anHeight], [alLowered], [alRaised])

E Parmetros:

nRow Numrico vertical em pixel.
nCol Numrico horizontal em pixel.
cText Texto a ser exibido ao fundo.
oWnd Objeto da janela ou controle onde ser criado o objeto.
oFont Caractersticas da fonte do texto que aparecer ao fundo.
lCentered Exibe o texto do ttulo centralizado.
lPar6 Reservado.
nClrText Cor do texto de controle.
nClrBack Cor do fundo de controle.
nWidth Largura do controle em pixel.
nHeight Altura do controle em pixel.
lLowered Exibe o painel rebaixado em relao ao controle de fundo.
lRaised
Exibe a borda do controle rebaixado em relao ao controle de
fundo.


- 184 -

ADVPL Completo



Comando SAY - Objeto: TSay()

O comando SAY ou objeto TSay exibe o contedo de texto esttico sobre uma janela.

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
Numrico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
abText
Code-Block, opcional. Quando executado deve retornar uma
cadeia de caracteres a ser exibida.
aoWnd Objeto, opcional. Janela ou dilogo onde o controle ser criado.
acPicture
Caractere, opcional. Picture de formatao do contedo a ser
exibido.
aoFont
Objeto, opcional. Objeto tipo tFont para configurao do tipo de
fonte que ser utilizado para exibir o contedo.
lPar7 Reservado.
lPar8 Reservado.
lPar9 Reservado.
alPixels
Lgico, opcional. Se .T. considera coordenadas passadas em
pixels se .F., padro, considera as coordenadas passadas em
caracteres.
anClrText Numrico, opcional. Cor do contedo do controle.
anClrBack Numrico, opcional. Cor do fundo do controle.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
lPar15 Reservado.
lPar16 Reservado.
lPar17 Reservado.
lPar18 Reservado.
lPar19 Reservado.


- 185 -

ADVPL Completo



Comando MSGET - Objeto: TGet()

O comando MsGet ou o objeto TGet utilizado para criar um controle que armazene ou altere
o contedo de uma varivel atravs de digitao. O contedo da varivel s modificado
quando o controle perde o foco de edio para outro controle.

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 Numrico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
abSetGet Bloco de cdigo, opcional. Bloco de cdigo no formato {|u| IF(
Pcount( )>0, <var>:= u, <var> ) } que o controle utiliza para
atualizar a varivel <var>. <var> deve ser tipo caracter,
numrico ou data.
aoWnd Objeto, opcional. Janela ou controle onde o controle ser
criado.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
acPict Caractere, opcional. Mscara de formatao do contedo a ser
exibido.
abValid Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo for
vlido e .F. quando o contedo for invlido.
anClrFore Numrico, opcional. Cor de fundo do controle.
anClrBack Numrico, opcional. Cor do texto do controle.
aoFont Objeto, opcional. Objeto tipo tFont utilizado para definir as
caractersticas da fonte utilizada para exibir o contedo do
controle.
lPar12 Reservado.
oPar13 Reservado.
alPixel Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
cPar15 Reservado.
lPar16 Reservado.
abWhen Bloco de cdigo, opcional. Executado quando mudana de foco
de entrada de dados est sendo efetuada na janela onde o
controle foi criado. O bloco deve retornar .T. se o controle deve
permanecer habilitado ou .F. se no.
lPar18 Reservado.

- 186 -

ADVPL Completo


lPar19 Reservado.
abChange Bloco de cdigo, opcional. Executado quando o controle
modifica o valor da varivel associada.
alReadOnly Lgico, opcional. Se .T. o controle no poder ser editado.
alPassword Lgico, opcional. Se .T. o controle exibir asteriscos * no
lugar dos caracteres exibidos pelo controle para simular
entrada de senha.
cPar23 Reservado.
acReadVar Caractere, opcional. Nome da varivel que o controle dever
manipular, dever ser a mesma varivel informada no
parmetro abSetGet, e ser o retorno da funo ReadVar( ).
cPar25 Reservado.
lPar26 Reservado.
nPar27 Reservado.
lPar18 Reservado.


Objeto MsGetDados()

Objeto tipo lista com uma ou mais colunas para cadastramento de dados baseado em um
vetor. Sua utilizao exige que seja utilizado trs variveis com seu escopo Private, so elas:
aRotina, aHeader e aCOLS.

E Observaes importantes:

O O vetor aHeader deve ser construdo com base no dicionrio de dados.
O O vetor aCOLS deve ser construdo com base no vetor aHeader, porm deve-
se criar uma coluna adicional para o controle de excluso do registro, ou
seja, quando o usurio teclar a tecla <DELETE> a linha ficar na cor cinza e
esta coluna estar com o seu valor igual a verdadeiro (.T.).
O Quando instanciado este objeto possvel saber em que linha o usurio est
porque o objeto trabalha com uma varivel de escopo Public denominada n,
seu valor numrico e ter sempre no contedo a linha em que o usurio
encontra-se com o cursor.








- 187 -

ADVPL Completo


E Sintaxe: MSGETDADOS():NEW( nSuperior, nEsquerda, nI nferior, nDireita,
nOpc, [ cLinhaOk ], [ cTudoOk ], [ cI niCpos ], [ lApagar ], [ aAlter] , ,
[ uPar1 ], [ lVazio ], [ nMax], [ cCampoOk ], [ cSuperApagar ],
[ uPar2 ], [ cApagaOk ], [ oWnd ] )

E Parmetros:

nSuperior
Distancia entre a MsGetDados e o extremidade superior do
objeto que a contm.
nEsquerda
Distancia entre a MsGetDados e o extremidade esquerda do
objeto que a contm.
nInferior
Distancia entre a MsGetDados e o extremidade inferior do
objeto que a contm.
nDireita
Distancia entre a MsGetDados e o extremidade direita do
objeto que a contm.
nOpc
Posio do elemento do vetor aRotina que a MsGetDados
usar como referencia.
cLinhaOk
Funo executada para validar o contexto da linha atual do
aCols.
cTudoOk
Funo executada para validar o contexto geral da
MsGetDados (todo aCols).
cIniCpos
Nome dos campos do tipo caracter que utilizaro incremento
automtico. Este parmetro deve ser no formato +<nome
do primeiro campo>+<nome do segundo campo>+....
lApagar Habilita deletar linhas do aCols. Valor padro falso.
aAlter Vetor com os campos que podero ser alterados.
uPar1 Parmetro reservado.
lVazio
Habilita validao da primeira coluna do aCols para esta no
poder estar vazia. Valor padro falso.
nMax Nmero mximo de linhas permitidas. Valor padro 99.
cCampoOk Funo executada na validao do campo.
cSuperApagar
Funo executada quando pressionada as teclas
<Ctrl>+<Delete>.
uPar2 Parmetro reservado.
cApagaOk
Funo executada para validar a excluso de uma linha do
aCols.
oWnd Objeto no qual a MsGetDados ser criada.


Varivel Private aRotina

Array com as rotinas que sero executadas na MBrowse e que definir o tipo de operao que
est sendo executada, por exemplo: Pesquisar, Visualizar, Incluir, Alterar, Excluir e outros.

Este vetor precisa ser construdo no formato:

Elemento Contedo
1 Ttulo da opo.
2 Nome da rotina (Function).
3 Reservado.
4 Operao (1-Pesquisar;2-Visualizar;3-Incluir;4-Alterar;5-Excluso).
5
Acesso relacionado a rotina, se est opo no for informada nenhum
acesso ser validado.


- 188 -

ADVPL Completo


Varivel Private aHeader

Array com informaes das colunas, ou seja, com as caractersticas dos campos que esto
contidas no dicionrio de dados (SX3), este vetor precisa estar no formato abaixo:

Elemento Contedo
1 Ttulo do campo
2 Nome do campo
3 Mscara do campo
4 Tamanho do campo
5 Decimal do campo
6 Validao de usurio do campo
7 Uso do campo
8 Tipo do campo (caractere, numrico, data e etc.)
9 Prefixo da tabela
10 Contexto do campo (real ou virtual)

Varivel Private aCols

Vetor com as linhas a serem editadas. As colunas devem ser construdas com base no vetor
aHeader e mais uma ltima coluna com o valor lgico que determina se a linha foi excluda,
inicialmente esta dever ter o seu contedo igual a falso (.F.).
























- 189 -

ADVPL Completo



22.2.2. Estrutura de um programa utilizando a Modelo2()

O exemplo abaixo demonstra a montagem de um programa para a utilizao do prottipo
Modelo 2. Antes de iniciarmos o exemplo vamos estruturar o programa.

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Declarao e atribuio de variveis;
3 Acesso a tabela principal e sua ordem;
4 Chamada da funo MBrowse;
5 Fim da funo principal.
6
7 Funo de visualizao, alterao e excluso;
8 Declarao e atribuio de variveis;
9 Acesso ao primeiro registro da chave em que est posicionado na MBrowse;
10 Montagem das variveis estticas em tela;
11 Montagem do vetor aHeader por meio do dicionrio de dados;
12
Montagem do vetor aCOLS de todos os registros referente a chave principal em que est
posicionado na MBrowse;
13 Instncia da MsDialog;
14 Instncia dos objetos TSay e TGet;
15 Instncia do objeto MsGetDados;
16 Ativar o objeto principal que o objeto da janela;
17 Se for operao diferente de visualizao e clicou no boto OK;
18 A operao e de Alterao?
19 Chamar a funo para alterar os dados;
20 Caso contrrio
21 Chamar a funo para excluir os dados;
22 Fim da funo de visualizao, alterao e excluso.
23
24 Funo de incluso;
25 Declarao e atribuio de variveis;
26 Montagem das variveis estticas em tela;
27 Montagem do vetor aHeader por meio do dicionrio de dados;
28
Montagem do vetor aCOLS com o seu contedo conforme o inicializador padro do campo ou
vazio, pois trata-se de uma incluso;
29 Instncia da MsDialog;
30 Instncia dos objetos TSay e TGet;
31 Instncia do objeto MsGetDados;
32 Ativar o objeto principal que o objeto da janela;
33 Se clicou no boto OK;
34 Chamar a funo para incluir os dados;
35 Fim da funo de incluso.


- 190 -

ADVPL Completo



Rotina principal


#i ncl ude " pr ot heus. ch"

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | xModel o2 | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Funo exempl o do pr ot t i po Model o2. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
User Funct i on xModel o2( )
Pr i vat e cCadast r o : = " Pr ot t i po Model o 2"
Pr i vat e aRot i na : = {}

AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1})
AADD( aRot i na, {" Vi sual i zar " , ' U_Mod2Mnt ' , 0, 2})
AADD( aRot i na, {" I ncl ui r " , ' U_Mod2I nc' , 0, 3})
AADD( aRot i na, {" Al t er ar " , ' U_Mod2Mnt ' , 0, 4})
AADD( aRot i na, {" Excl ui r " , ' U_Mod2Mnt ' , 0, 5})

dbSel ect Ar ea( " ZA3" )
dbSet Or der ( 1)
dbGoTop( )

MBr owse( , , , , " ZA3" )
Ret ur n


Rotina de incluso


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2I nc | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a i ncl ui r dados. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

User Funct i on Mod2I nc( cAl i as, nReg, nOpc )
Local oDl g
Local oGet
Local oTPanel 1
Local oTPAnel 2

Local cCodi go : = ZA3- >ZA3_CODI GO
Local cNome : = ZA3- >ZA3_NOME
Local dDat a : = dDat aBase

Pr i vat e aHeader : = {}
Pr i vat e aCOLS : = {}
Pr i vat e aREG : = {}

dbSel ect Ar ea( cAl i as )
dbSet Or der ( 1)


- 191 -

ADVPL Completo


Mod2aHeader ( cAl i as )
Mod2aCOLS( cAl i as, nReg, nOpc )

DEFI NE MSDI ALOG oDl g TI TLE cCadast r o Fr om8, 0 To 28, 80 OF oMai nWnd

oTPanel 1 : = TPanel ( ) : New( 0, 0, " " , oDl g, NI L, . T. , ;
. F. , NI L, NI L, 0, 16, . T. , . F. )

oTPanel 1: Al i gn : = CONTROL_ALI GN_TOP

@4, 006 SAY " Cdi go: " SI ZE 70, 7 PI XEL OF oTPanel 1
@4, 062 SAY " Nome: " SI ZE 70, 7 PI XEL OF oTPanel 1
@4, 166 SAY " Emi ssao: " SI ZE 70, 7 PI XEL OF oTPanel 1

@3, 026 MSGET cCodi go F3 " SA3" PI CTURE " @! " VALI D;
Mod2Vend( cCodi go, @cNome) ;
SI ZE 030, 7 PI XEL OF oTPanel 1

@3, 080 MSGET cNome When . F. SI ZE 78, 7 PI XEL OF oTPanel 1
@3, 192 MSGET dDat a PI CTURE " 99/ 99/ 99" SI ZE 40, 7 PI XEL OF
oTPanel 1

oTPanel 2 : = TPanel ( ) : New( 0, 0, " " , oDl g, NI L, . T. , ;
. F. , NI L, NI L, 0, 16, . T. , . F. )
oTPanel 2: Al i gn : = CONTROL_ALI GN_BOTTOM

oGet : = MSGet Dados( ) : New( 0, 0, 0, 0, nOpc, " U_Mod2LOk( ) " , ;
" . T. " , " +ZA3_I TEM" , . T. )
oGet : oBr owse: Al i gn : = CONTROL_ALI GN_ALLCLI ENT

ACTI VATE MSDI ALOG oDl g CENTER ON I NI T ;
Enchoi ceBar ( oDl g, {| | I I F( U_Mod2TOk( ) , Mod2Gr vI ( ) , ;
( oDl g: End( ) , NI L ) ) }, {| | oDl g: End( ) })

Ret ur n


Rotina de Visualizao, Alterao e Excluso


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2Mnt | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a Vi sual i zar , Al t er ar e Excl ui r dados. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

User Funct i on Mod2Mnt ( cAl i as, nReg, nOpc )

Local oDl g
Local oGet
Local oTPanel 1
Local oTPAnel 2

Local cCodi go : = Space( Len( Space( ZA3- >ZA3_CODI GO) ) )
Local cNome : = Space( Len( Space( ZA3- >ZA3_NOME) ) )
Local dDat a : = Ct od( Space( 8) )

Pr i vat e aHeader : = {}

- 192 -

ADVPL Completo


Pr i vat e aCOLS : = {}
Pr i vat e aREG : = {}

dbSel ect Ar ea( cAl i as )
dbGoTo( nReg )

cCodi go : = ZA3- >ZA3_CODI GO
cNome : = ZA3- >ZA3_NOME
cDat a : = ZA3- >ZA3_DATA

Mod2aHeader ( cAl i as )
Mod2aCOLS( cAl i as, nReg, nOpc )

DEFI NE MSDI ALOG oDl g TI TLE cCadast r o Fr om8, 0 To 28, 80 OF oMai nWnd

oTPane1 : = TPanel ( ) : New( 0, 0, " " , oDl g, NI L, . T. , ;
. F. , NI L, NI L, 0, 16, . T. , . F. )
oTPane1: Al i gn : = CONTROL_ALI GN_TOP

@4, 006 SAY " Cdi go: " SI ZE 70, 7 PI XEL OF oTPanel 1
@4, 062 SAY " Nome: " SI ZE 70, 7 PI XEL OF oTPanel 1
@4, 166 SAY " Emi ssao: " SI ZE 70, 7 PI XEL OF oTPanel 1

@3, 026 MSGET cCodi go When . F. SI ZE 30, 7 PI XEL OF oTPanel 1
@3, 080 MSGET cNome When . F. SI ZE 78, 7 PI XEL OF oTPanel 1
@3, 192 MSGET dDat a When . F. SI ZE 40, 7 PI XEL OF oTPanel 1

oTPanel 2 : = TPanel ( ) : New( 0, 0, " " , oDl g, NI L, . T. , ;
. F. , NI L, NI L, 0, 16, . T. , . F. )
oTPanel 2: Al i gn : = CONTROL_ALI GN_BOTTOM

I f nOpc == 4
oGet : = MSGet Dados( ) : New( 0, 0, 0, 0, nOpc, " U_Mod2LOk( ) " , ;
" . T. " , " +ZA3_I TEM" , . T. )
El se
oGet : = MSGet Dados( ) : New( 0, 0, 0, 0, nOpc)
Endi f
oGet : oBr owse: Al i gn : = CONTROL_ALI GN_ALLCLI ENT

ACTI VATE MSDI ALOG oDl g CENTER ON I NI T ;
Enchoi ceBar ( oDl g, {| | ( I I F( nOpc==4, Mod2Gr vA( ) , ;
I I F( nOpc==5, Mod2Gr vE( ) , oDl g: End( ) ) ) , oDl g: End( ) ) }, ;
{| | oDl g: End( ) })
Ret ur n



- 193 -

ADVPL Completo



Montagem do array aHeader


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2aHeader | Aut or | Robson Lui z ( r l eg) | Dat a| 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a mont ar o vet or aHeader . |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

St at i c Funct i on Mod2aHeader ( cAl i as )
Local aAr ea : = Get Ar ea( )

dbSel ect Ar ea( " SX3" )
dbSet Or der ( 1)
dbSeek( cAl i as )
Whi l e ! EOF( ) . And. X3_ARQUI VO == cAl i as
I f X3Uso( X3_USADO) . And. cNi vel >= X3_NI VEL
AADD( aHeader , { Tr i m( X3Ti t ul o( ) ) , ;
X3_CAMPO, ;
X3_PI CTURE, ;
X3_TAMANHO, ;
X3_DECI MAL, ;
X3_VALI D, ;
X3_USADO, ;
X3_TI PO, ;
X3_ARQUI VO, ;
X3_CONTEXT})
Endi f
dbSki p( )
End
Rest Ar ea( aAr ea)
Ret ur n


Montagem do array aCols


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2aCOLS | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a mont ar o vet or aCOLS. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod2aCOLS( cAl i as, nReg, nOpc )
Local aAr ea : = Get Ar ea( )
Local cChave : = ZA3- >ZA3_CODI GO
Local nI : = 0

I f nOpc <> 3
dbSel ect Ar ea( cAl i as )
dbSet Or der ( 1)
dbSeek( xFi l i al ( cAl i as ) + cChave )
Whi l e ! EOF( ) . And. ;
ZA3- >( ZA3_FI LI AL + ZA3_CODI GO ) == xFi l i al ( cAl i as ) + cChave
AADD( aREG, ZA3- >( RecNo( ) ) )

- 194 -

ADVPL Completo


AADD( aCOLS, Ar r ay( Len( aHeader ) + 1 ) )
For nI : = 1 To Len( aHeader )
I f aHeader [ nI , 10] == " V"
aCOLS[ Len( aCOLS) , nI ] : = Cr i aVar ( aHeader [ nI , 2] , . T. )
El se
aCOLS[ Len( aCOLS) , nI ] : =
Fi el dGet ( Fi el dPos( aHeader [ nI , 2] ) )
Endi f
Next nI
aCOLS[ Len( aCOLS) , Len( aHeader ) +1] : = . F.
dbSki p( )
End
El se
AADD( aCOLS, Ar r ay( Len( aHeader ) + 1 ) )
For nI : = 1 To Len( aHeader )
aCOLS[ 1, nI ] : = Cr i aVar ( aHeader [ nI , 2] , . T. )
Next nI
aCOLS[ 1, GdFi el dPos( " ZA3_I TEM" ) ] : = " 01"
aCOLS[ 1, Len( aHeader ) +1 ] : = . F.
Endi f
Rest ar ea( aAr ea )
Ret ur n

Efetivao da incluso


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2Gr vI | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a gr avar os dados na i ncl uso. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod2Gr vI ( )
Local aAr ea : = Get Ar ea( )
Local nI : = 0
Local nX : = 0

dbSel ect Ar ea( " ZA3" )
dbSet Or der ( 1)
For nI : = 1 To Len( aCOLS )
I f ! aCOLS[ nI , Len( aHeader ) +1]
RecLock( " ZA3" , . T. )
ZA3- >ZA3_FI LI AL : = xFi l i al ( " ZA3" )
ZA3- >ZA3_CODI GO : = cCodi go
ZA3- >ZA3_DATA : = dDat a
For nX : = 1 To Len( aHeader )
Fi el dPut ( Fi el dPos( aHeader [ nX, 2] ) , aCOLS[ nI , nX] )
Next nX
MsUnLock( )
Endi f
Next nI

Rest Ar ea( aAr ea)
Ret ur n



- 195 -

ADVPL Completo



Efetivao da alterao


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2Gr vA | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a gr avar os dados na al t er ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod2Gr vA( )
Local aAr ea : = Get Ar ea( )
Local nI : = 0
Local nX : = 0

dbSel ect Ar ea( " ZA3" )
For nI : = 1 To Len( aREG )
I f nI <= Len( aREG )
dbGoTo( aREG[ nI ] )
RecLock( " ZA3" , . F. )
I f aCOLS[ nI , Len( aHeader ) +1]
dbDel et e( )
Endi f
El se
RecLock( " ZA3" , . T. )
Endi f

I f ! aCOLS[ nI , Len( aHeader ) +1]
ZA3- >ZA3_FI LI AL : = xFi l i al ( " ZA3" )
ZA3- >ZA3_CODI GO : = cCodi go
ZA3- >ZA3_DATA : = dDat a
For nX : = 1 To Len( aHeader )
Fi el dPut ( Fi el dPos( aHeader [ nX, 2] ) , aCOLS[ nI , nX] )
Next nX
Endi f
MsUnLock( )
Next nI
Rest Ar ea( aAr ea )
Ret ur n



- 196 -

ADVPL Completo



Efetivao da excluso

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2Gr vE | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a excl ui r os r egi st r os. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod2Gr vE( )
Local nI : = 0

dbSel ect Ar ea( " ZA3" )
For nI : = 1 To Len( aCOLS )
dbGoTo( aREG[ nI ] )
RecLock( " ZA3" , . F. )
dbDel et e( )
MsUnLock( )
Next nI
Ret ur n

Funo auxiliar: Validao do cdigo do vendedor

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2Vend | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a val i dar o cdi go do vendedor . |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod2Vend( cCodi go, cNome )
I f Exi st Cpo( " SA3" , cCodi go) . And. Exi st Chav( " ZA3" , cCodi go)
cNome : = Posi ci one( " SA3" , 1, xFi l i al ( " SA3" ) +cCodi go, " A3_NOME" )
Endi f
Ret ur n( ! Empt y( cNome) )


Funo auxiliar: Validao do cdigo do centro de custo na mudana de linha

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2LOk | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a val i dar a l i nha de dados. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
User Funct i on Mod2LOk( )
Local l Ret : = . T.
Local cMensagem: = " No ser per mi t i do l i nhas semo cent r o de cust o. "
I f ! aCOLS[ n, Len( aHeader ) +1]
I f Empt y( aCOLS[ n, GdFi el dPos( " ZA3_CCUSTO" ) ] )
MsgAl er t ( cMensagem, cCadast r o)
l Ret : = . F.
Endi f
Endi f
Ret ur n( l Ret )



- 197 -

ADVPL Completo


Funo auxiliar: Validao do cdigo do centro de custo para todas as linhas


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod2TOk | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a val i dar t oda as l i nhas de dados. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

User Funct i on Mod2TOk( )
Local l Ret : = . T.
Local nI : = 0
Local cMensagem: = " No ser per mi t i do l i nhas semo cent r o de cust o. "

For nI : = 1 To Len( aCOLS )
I f aCOLS[ nI , Len( aHeader ) +1]
Loop
Endi f
I f ! aCOLS[ nI , Len( aHeader ) +1]
I f Empt y( aCOLS[ n, GdFi el dPos( " ZA3_CCUSTO" ) ] )
MsgAl er t ( cMensagem, cCadast r o)
l Ret : = . F.
Exi t
Endi f
Endi f
Next nI
Ret ur n( l Ret )


22.2.3. Funo Modelo2()

A funo Modelo2() uma interface pr-definida pela Microsiga que implementa de forma
padronizada os compontes necessrios a manipulao de estruturas de dados nas quais o
cabealho e os itens da informao compartilham o mesmo registro fsico.

Seu objetivo atuar como um facilitador de codificao, permitindo a utilizao dos recursos
bsicos dos seguintes componentes visuais:

O MsDialog()
O TGet()
O TSay()
O MsNewGetDados()
O EnchoiceBar()



O A funo Modelo2() no implementa as regras de visualizao,
incluso, alterao e excluso, como uma AxCadastro() ou
AxFunction().

O A inicializao das variveis Private utilizada nos cabealhos e rodaps,
bem como a inicializao e gravao do aCols devem ser realizadas
pela rotina que suporta a execuo da Modelo2().

O Da mesma forma, o Browse deve ser tratado por esta rotina, sendo
comum a Modelo2() estar vinculada ao uso de uma MBrowse().

- 198 -

ADVPL Completo



E Sintaxe: Modelo2([cTitulo], [aCab], [aRoda], [aGrid], [nOpc], [cLinhaOk],
[cTudoOk])

E Parmetros:

cTitulo Ttulo da janela
aCab Array contendo as informaes que sero exibidas no cabealho na forma de
Enchoice()
aCab[n][1] (Caractere) := Nome da varivel private que ser vinculada ao
campo da Enchoice().
aCab[n][2] (Array) := Array com as coordenadas do campo na tela {Linha,
Coluna}
aCab[n][3] (Caractere) := Ttulo do campo na tela
aCab[n][4] (Caractere) := Picture de formatao do get() do campo.
aCab[n][5] (Caractere) := Funo de validao do get() do campo.
aCab[n][6] (Caractere) := Nome da consulta padro que ser executada
para o campo via tecla F3
aCab[n][7] (Lgico) := Se o campo estar livre para digitao.

aRoda Array contendo as informaes que sero exibidas no cabealho na forma de
Enchoice(), no mesmo formato que o aCab.
aGrid Array contendo as coordenadas da GetDados() na tela. Padro :=
{44,5,118,315}
nOpc Opo selecionada na MBrowse, ou que deseje ser passada para controle da
Modelo2, aonde:
2 Visualizar
3 - Incluir
4 - Alterar
5 - Excluir
cLinhaOk Funo para validao da linha na GetDados()
cTudoOk Funo para validao na confirmao da tela de interface da Modelo2().

E Retorno:

Lgico Indica se a tela da interface Modelo2() foi confirmada ou cancelada pelo
usurio.










- 199 -

ADVPL Completo



Exemplo: Utilizao da Modelo2() para visualizao do Cadastro de Tabelas (SX5)


#i ncl ude " pr ot heus. ch"

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | MBRW2SX5| Aut or | ARNALDO RAYMUNDO J R. | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | UTI LI ZACAO DA MODELO2( ) PARA VI SUALI ZAO DO SX5. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | CURSO DE ADVPL |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

USER FUNCTI ON MBr w2Sx5( )

Local cAl i as : = " SX5"

Pr i vat e cCadast r o : = " Ar qui vo de Tabel as"
Pr i vat e aRot i na : = {}
Pr i vat e cDel Func : = " . T. " / / Val i dacao par a a excl usao. Pode- se ut i l i zar
ExecBl ock

AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1})
AADD( aRot i na, {" Vi sual i zar " , " U_SX52Vi s" , 0, 2})
AADD( aRot i na, {" I ncl ui r " , " U_SX52I nc" , 0, 3})
AADD( aRot i na, {" Al t er ar " , " U_SX52Al t " , 0, 4})
AADD( aRot i na, {" Excl ui r " , " U_SX52Exc" , 0, 5})

dbSel ect Ar ea( cAl i as)
dbSet Or der ( 1)
mBr owse( 6, 1, 22, 75, cAl i as)

Ret ur n

USER FUNCTI ON SX52I NC( cAl i as, nReg, nOpc)

/ / Local nUsado : = 0
Local cTi t ul o : = " I ncl usao de i t ens - Ar qui vo de Tabel as"
Local aCab : = {} / / Ar r ay comdescr i cao dos campos do Cabecal ho do Model o
2
Local aRoda : = {} / / Ar r ay comdescr i cao dos campos do Rodape do Model o 2
Local aGr i d : = {80, 005, 050, 300} / / Ar r ay comcoor denadas da Get Dados no
model o2 - Padr ao: {44, 5, 118, 315}
/ / Li nha I ni ci al - Col una I ni ci al - +Qt s Li nhas - +Qt s
Col unas : {080, 005, 050, 300}
Local cLi nhaOk : = " Al l waysTr ue( ) " / / Val i dacoes na l i nha da Get Dados da
Model o 2
Local cTudoOk : = " Al l waysTr ue( ) " / / Val i dacao ger al da Get Dados da Model o 2
Local l Ret Mod2 : = . F. / / Ret or no da f uno Model o2 - . T. Conf i r mou / . F.
Cancel ou
Local nCol una : = 0

/ / Var i avei s par a Get Dados( )
Pr i vat e aCol s : = {}
Pr i vat e aHeader : = {}

- 200 -

ADVPL Completo



Exemplo (continuao):

/ / Var i avei s par a campos da Enchoi ce( )
Pr i vat e cX5Fi l i al : = xFi l i al ( " SX5" )
Pr i vat e cX5Tabel a : = SPACE( 5)

/ / Mont agemdo ar r ay de cabeal ho
/ / AADD( aCab, {" Var i vel " , {L, C} , " T t ul o" , " Pi ct ur e" , " Val i d" , " F3" , l Enabl e})
AADD( aCab, {" cX5Fi l i al " , {015, 010} , " Fi l i al " , " @! " , , , . F. })
AADD( aCab, {" cX5Tabel a" , {015, 080} , " Tabel a" , " @! " , , , . T. })

/ / Mont agemdo aHeader
AADD( aHeader , {" Chave" , " X5_CHAVE" , " @! " , 5, 0, " Al l waysTr ue( ) " , ;
" " , " C" , " " , " R" })
AADD( aHeader , {" Descr i cao" , " X5_DESCRI " , " @! " , 40, 0, " Al l waysTr ue( ) " , ;
" " , " C" , " " , " R" })

/ / Mont agemdo aCol s
aCol s : = Ar r ay( 1, Len( aHeader ) +1)

/ / I ni ci al i zao do aCol s
For nCol una : = 1 t o Len( aHeader )

I f aHeader [ nCol una] [ 8] == " C"
aCol s[ 1] [ nCol una] : = SPACE( aHeader [ nCol una] [ 4] )
El seI f aHeader [ nCol una] [ 8] == " N"
aCol s[ 1] [ nCol una] : = 0
El seI f aHeader [ nCol una] [ 8] == " D"
aCol s[ 1] [ nCol una] : = CTOD( " " )
El seI f aHeader [ nCol una] [ 8] == " L"
aCol s[ 1] [ nCol una] : = . F.
El seI f aHeader [ nCol una] [ 8] == " M"
aCol s[ 1] [ nCol una] : = " "
Endi f

Next nCol una

aCol s[ 1] [ Len( aHeader ) +1] : = . F. / / Li nha no del et ada
l Ret Mod2 : = Model o2( cTi t ul o, aCab, aRoda, aGr i d, nOpc, cLi nhaOk, cTudoOk)

I F l Ret Mod2
/ / MsgI nf o( " Voc conf i r mou a oper ao" , " MBRW2SX5" )
For nLi nha : = 1 t o l en( aCol s)
/ / Campos de Cabeal ho
Recl ock( " SX5" , . T. )
SX5- >X5_FI LI AL : = cX5Fi l i al
SX5- >X5_TABELA : = cX5Tabel a
/ / Campos do aCol s
/ / SX5- >X5_CHAVE : = aCol s[ nLi nha] [ 1]
/ / SX5- >X5_DESCRI : = aCol s[ nLi nha] [ 2]
For nCol una : = 1 t o Len( aHeader )
SX5- >&( aHeader [ nCol una] [ 2] ) : = aCol s[ nLi nha] [ nCol una]
Next nCol una
MsUnLock( )
Next nLi nha
ELSE
MsgAl er t ( " Voc cancel ou a oper ao" , " MBRW2SX5" )
ENDI F
Ret ur n

- 201 -

ADVPL Completo



22.3. Modelo3()

O nome Modelo 3, assim como a Modelo 2 foi conceituado pela Microsiga por se tratar de um
prottipo de tela para entrada de dados. Inicialmente vamos desmistifica dois pontos:

O Funo Modelo3() Trata-se de uma funo pronta que contempla o prottipo
Modelo 3, porm, este um assunto que no iremos tratar aqui, visto que
uma funcionalidade simples que quando necessrio intervir em algo na rotina
no h muito recurso para tal.

O Prottipo Modelo 3 Trata-se de uma tela, como a figura abaixo, onde seu
objetivo efetuar a manuteno em vrios registros de uma s vez relacionada
a outro registro de outra tabela, ou seja, aqui teremos o relacionamento de
registros pai e filho, ento preciso se preocupar com este relacionamento.
Por exemplo: efetuar a manuteno em um pedido de vendas, onde ter um
registro em uma tabela referente cabea do pedido e outra tabela com os
registros referentes aos itens deste pedido de vendas.

Para ganharmos tempo no ser apresentado aqui toda a explicao e montagens para a
funo EnchoiceBar, comando MsDialog, Say e MsGet e para os vetores aHeader e
aCOLS, entretanto todos estes estaro na codificao do cdigo fonte. A figura abaixo mostra
exatamente o que a tela prottipo Modelo 3:



Figura: Prottipo Modelo 3

- 202 -

ADVPL Completo



Este prottipo constitudo de MsDialog, EnchoiceBar, Enchoice, MsGetDados, Say e Get.

Diante dos expostos at o momento houve um novo nome para ns, ele a funo Enchoice, o
que ?

Funo Enchoice() Objeto MsMGet()

A funo Enchoice ou o objeto MsMGet so recursos baseados no dicionrio de dados para
verificar campos obrigatrios, validaes, gatilhos, consulta padro e etc. Assim tambm para
criar pastas de cadastros. Estes podem ser usados tanto com variveis de memrias com o
escopo Private como diretamente os campos da tabela que se refere. A diferena entre a funo
Enchoice e o objeto MsMGet que a funo no retorna o nome da varivel de objeto
exportvel criado.

A estrutura para montar um programa com o prottipo modelo 3 semelhante ao prottipo
modelo 2, porm a diferena real a utilizao da funo Enchoice ou o objeto MsMGet, para
este documento iremos trabalhar com a funo.

E Sintaxe: Enchoice( cAlias, nReg, nOpc, aAc, cOpc, cTextExclui, aAcho, aPos,
aCpos, nNum, nColMens, cMensagem, cTudOk, oObj, lVirtual)

E Parmetros:

cAlias Alias do dados a serem cadastrados.
nReg Nmero do registro da tabela a ser editado.
uPar1 Parmetro reservado.
uPar2 Parmetro reservado.
uPar3 Parmetro reservado.
aAcho Vetor com os campos que sero apresentados pela MsMGet.
aPos Vetor com as coordenadas onde a MsMGet ser criada no
formato {coord. superior, coord. esquerda, coord. direita,
coord. inferior}.Funo executada para validar o contexto da
linha atual do aCols.
aCpos Vetor com os campos que podero ser alterados.
uPar4 Parmetro reservado. Nome dos campos do tipo caracter que
utilizaro incremento automtico. Este parmetro deve ser no
formato +<nome do primeiro campo>+<nome do segundo
campo>+....
uPar5 Parmetro reservado.
uPar6 Parmetro reservado.
uPar7 Parmetro reservado.
oWnd Objeto no qual a MsMGet ser criada.
uPar8 Parmetro reservado.
lMemoria Indica se ser usado variveis de memria ou os campos da
tabela para cadastramento dos dados. Valor padro falso.
lColuna Indica se a MsMGet ser apresentada com um objeto por linha
(uma coluna). Valor padro falso. Parmetro reservado.
uPar9 Parmetro reservado.
lSemPastas Indica se no ser usado as Pastas de Cadastro na MsMGet.
Funo executada para validar a excluso de uma linha do
aCols.



- 203 -

ADVPL Completo


Vale lembrar que ns programadores reaproveitamos muito o que j existe, isto para
simplesmente ganharmos tempo, e no caso da utilizao da funo Enchoice preciso criar as
variveis de memrias que levam o mesmo nome dos campos da tabela em questo. Por
exemplo o campo A2_NOME da tabela SA2 (cadastro de fornecedores) quando queremos
referenciar o campo usa-se o prefixo da tabela e o campo em questo, desta forma:


SA2- >A2_NOME


Agora quando queremos referenciar a uma varivel que est com o contedo do mesmo
campo criamos outro recurso, desta forma:


M- >A2_NOME


E para criar variveis com o nome do campo utilizamos um cdigo de bloco (code-block) e
mais um lao de leitura para atribuir valores iniciais a cada uma dela. Ento fica assim o
procedimento:


Pr i vat e bCampo : = { | nFi el d| Fi el d( nFi el d) }


E em outro momento aproveitamos est varivel bCampo para facilitar a atribuio, veja o
exemplo abaixo :


For nX : = 1 To FCount ( )
M- >&( Eval ( bCampo, nX ) ) : = At r i bui o i ni ci al ou at r i bui o de val or
Next nX


Ou seja, fazer para todos os campos, e a cada campo criar a varivel com a atribuio inicial
ou atribuio de valor.












- 204 -

ADVPL Completo



22.3.1. Estrutura de um programa utilizando a Modelo3()

O exemplo abaixo demonstra a montagem de um programa para a utilizao do prottipo
Modelo 3. Antes de iniciarmos o exemplo vamos estruturar o programa.

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Declarao e atribuio de variveis;
3 Acesso a tabela principal e sua ordem;
4 Chamada da funo MBrowse;
5 Fim da funo principal.
6
7 Funo de visualizao, alterao e excluso;
8 Declarao e atribuio de variveis;
9 Acesso ao primeiro registro da chave em que est posicionado na MBrowse;
10 Construo das variveis de memria M->???;
11 Montagem do vetor aHeader por meio do dicionrio de dados;
12
Montagem do vetor aCOLS de todos os registros referente a chave principal em que est
posicionado na MBrowse;
13 Instncia da MsDialog;
14 Execuo da funo Enchoice;
15 Instncia do objeto MsGetDados;
16 Ativar o objeto principal que o objeto da janela;
17 Se for operao diferente de visualizao e clicou no boto OK;
18 A operao e de Alterao?
19 Chamar a funo para alterar os dados;
20 Caso contrrio
21 Chamar a funo para excluir os dados;
22 Fim da funo de visualizao, alterao e excluso.
23
24 Funo de incluso;
25 Declarao e atribuio de variveis;
26 Construo das variveis de memria M->???;
27 Montagem do vetor aHeader por meio do dicionrio de dados;
28
Montagem do vetor aCOLS com o seu contedo conforme o inicializador padro do campo ou
vazio, pois trata-se de uma incluso;
29 Instncia da MsDialog;
30 Instncia dos objetos TSay e TGet;
31 Instncia do objeto MsGetDados;
32 Ativar o objeto principal que o objeto da janela;
33 Se clicou no boto OK;
34 Chamar a funo para incluir os dados;
35 Fim da funo de incluso.









- 205 -

ADVPL Completo


Rotina principal


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | xModel o3 | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Funo exempl o do pr ot t i po Model o3. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
#I ncl ude " Pr ot heus. ch"

User Funct i on xModel o3( )
Pr i vat e cCadast r o : = " Pr ot t i po Model o 3"
Pr i vat e aRot i na : = {}
Pr i vat e oCl i ent e
Pr i vat e oTot al
Pr i vat e cCl i ent e : = " "
Pr i vat e nTot al : = 0

Pr i vat e bCampo : = {| nFi el d| Fi el dName( nFi el d) }

Pr i vat e aSi ze : = {}
Pr i vat e aI nf o : = {}
Pr i vat e aObj : = {}
Pr i vat e aPObj : = {}
Pr i vat e aPGet : = {}

/ / Ret or na a r ea t i l das j anel as Pr ot heus
aSi ze : = MsAdvSi ze( )

/ / Ser ut i l i zado t r s r eas na j anel a
/ / 1 - Enchoi ce, sendo 80 pont os pi xel
/ / 2 - MsGet Dados, o que sobr ar empont os pi xel par a est e obj et o
/ / 3 - Rodap que a pr pr i a j anel a, sendo 15 pont os pi xel
AADD( aObj , { 100, 080, . T. , . F. })
AADD( aObj , { 100, 100, . T. , . T. })
AADD( aObj , { 100, 015, . T. , . F. })

/ / Cl cul o aut omt i co da di menses dos obj et os ( al t ur a/ l ar gur a) empi xel
aI nf o : = { aSi ze[ 1] , aSi ze[ 2] , aSi ze[ 3] , aSi ze[ 4] , 3, 3 }
aPObj : = MsObj Si ze( aI nf o, aObj )

/ / Cl cul o aut omt i co de di menses dos obj et os MSGET
aPGet : = MsObj Get Pos( ( aSi ze[ 3] - aSi ze[ 1] ) , 315, { {004, 024, 240, 270} } )

AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1})
AADD( aRot i na, {" Vi sual i zar " , ' U_Mod3Mnt ' , 0, 2})
AADD( aRot i na, {" I ncl ui r " , ' U_Mod3I nc' , 0, 3})
AADD( aRot i na, {" Al t er ar " , ' U_Mod3Mnt ' , 0, 4})
AADD( aRot i na, {" Excl ui r " , ' U_Mod3Mnt ' , 0, 5})

dbSel ect Ar ea( " ZA1" )
dbSet Or der ( 1)
dbGoTop( )
MBr owse( , , , , " ZA1" )
Ret ur n

- 206 -

ADVPL Completo


Funo de Incluso


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod3I nc | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a i ncl ui r dados. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
User Funct i on Mod3I nc( cAl i as, nReg, nOpc )
Local oDl g
Local oGet
Local nX : = 0
Local nOpcA : = 0

Pr i vat e aHeader : = {}
Pr i vat e aCOLS : = {}
Pr i vat e aGet s : = {}
Pr i vat e aTel a : = {}

dbSel ect Ar ea( cAl i as )
dbSet Or der ( 1)

For nX : = 1 To FCount ( )
M- >&( Eval ( bCampo, nX ) ) : = Cr i aVar ( Fi el dName( nX ) , . T. )
Next nX

Mod3aHeader ( )
Mod3aCOLS( nOpc )

DEFI NE MSDI ALOG oDl g TI TLE cCadast r o FROM ;
aSi ze[ 7] , aSi ze[ 1] TO aSi ze[ 6] , aSi ze[ 5] OF oMai nWnd PI XEL
EnChoi ce( cAl i as, nReg, nOpc, , , , , aPObj [ 1] )

/ / At ual i zao do nome do cl i ent e
@aPObj [ 3, 1] , aPGet [ 1, 1] SAY " Cl i ent e: " SI ZE 70, 7 OF oDl g PI XEL
@aPObj [ 3, 1] , aPGet [ 1, 2] SAY oCl i ent e VAR cCl i ent e SI ZE 98, 7 OF oDl g PI XEL

/ / At ual i zao do t ot al
@aPObj [ 3, 1] , aPGet [ 1, 3] SAY " Val or Tot al : " SI ZE 70, 7 OF oDl g PI XEL
@aPObj [ 3, 1] , aPGet [ 1, 4] SAY oTot al VAR nTot al ;
PI CT " @E 9, 999, 999, 999. 99" SI ZE 70, 7 OF oDl g PI XEL

oGet : = MSGet Dados( ) : New( aPObj [ 2, 1] , aPObj [ 2, 2] , aPObj [ 2, 3] , aPObj [ 2, 4] , ;
nOpc, " U_Mod3LOk( ) " , " . T. " , " +ZA2_I TEM" , . T. )

ACTI VATE MSDI ALOG oDl g ON I NI T Enchoi ceBar ( oDl g, ;
{| | I I F( Mod3TOk( ) . And. Obr i gat or i o( aGet s, aTel a ) , ( nOpcA : = 1, oDl g: End( ) ) ,
NI L) }, ;
{| | oDl g: End( ) })

I f nOpcA == 1 . And. nOpc == 3
Mod3Gr v( nOpc )
Conf i r mSXE( )
Endi f
Ret ur n


- 207 -

ADVPL Completo



Funo de Visualizao, Alterao e Excluso


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod3Mnt | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a Vi sual i zar , Al t er ar e Excl ui r dados. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
User Funct i on Mod3Mnt ( cAl i as, nReg, nOpc )
Local oDl g
Local oGet
Local nX : = 0
Local nOpcA : = 0
Pr i vat e aHeader : = {}
Pr i vat e aCOLS : = {}
Pr i vat e aGet s : = {}
Pr i vat e aTel a : = {}
Pr i vat e aREG : = {}

dbSel ect Ar ea( cAl i as )
dbSet Or der ( 1)

For nX : = 1 To FCount ( )
M- >&( Eval ( bCampo, nX ) ) : = Fi el dGet ( nX )
Next nX

Mod3aHeader ( )
Mod3aCOLS( nOpc )
DEFI NE MSDI ALOG oDl g TI TLE cCadast r o FROM ;
aSi ze[ 7] , aSi ze[ 1] TO aSi ze[ 6] , aSi ze[ 5] OF oMai nWnd PI XEL
EnChoi ce( cAl i as, nReg, nOpc, , , , , aPObj [ 1] )

/ / At ual i zao do nome do cl i ent e
@aPObj [ 3, 1] , aPGet [ 1, 1] SAY " Cl i ent e: " SI ZE 70, 7 OF oDl g PI XEL
@aPObj [ 3, 1] , aPGet [ 1, 2] SAY oCl i ent e VAR cCl i ent e SI ZE 98, 7 OF oDl g PI XEL

/ / At ual i zao do t ot al
@aPObj [ 3, 1] , aPGet [ 1, 3] SAY " Val or Tot al : " SI ZE 70, 7 OF oDl g PI XEL
@aPObj [ 3, 1] , aPGet [ 1, 4] SAY oTot al VAR nTot al PI CTURE ;
" @E 9, 999, 999, 999. 99" SI ZE 70, 7 OF oDl g PI XEL

U_Mod3Cl i ( )

oGet : = MSGet Dados( ) : New( aPObj [ 2, 1] , aPObj [ 2, 2] , aPObj [ 2, 3] , aPObj [ 2, 4] , ;
nOpc, " U_Mod3LOk( ) " , " . T. " , " +ZA2_I TEM" , . T. )

ACTI VATE MSDI ALOG oDl g ON I NI T Enchoi ceBar ( oDl g, ;
{| | I I F( Mod3TOk( ) . And. Obr i gat or i o( aGet s, aTel a ) , ( nOpcA : = 1, oDl g: End( ) ) ,
NI L ) }, ;
{| | oDl g: End( ) })

I f nOpcA == 1 . And. ( nOpc == 4 . Or . nOpc == 5 )
Mod3Gr v( nOpc, aREG )
Endi f
Ret ur n


- 208 -

ADVPL Completo





Funo para montar o vetor aHeader


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod3aHeader | Aut or | Robson Lui z ( r l eg) | Dat a| 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a mont ar o vet or aHeader . |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod3aHeader ( )
Local aAr ea : = Get Ar ea( )

dbSel ect Ar ea( " SX3" )
dbSet Or der ( 1)
dbSeek( " ZA2" )
Whi l e ! EOF( ) . And. X3_ARQUI VO == " ZA2"
I f X3Uso( X3_USADO) . And. cNi vel >= X3_NI VEL
AADD( aHeader , { Tr i m( X3Ti t ul o( ) ) , ;
X3_CAMPO, ;
X3_PI CTURE, ;
X3_TAMANHO, ;
X3_DECI MAL, ;
X3_VALI D, ;
X3_USADO, ;
X3_TI PO, ;
X3_ARQUI VO, ;
X3_CONTEXT})
Endi f
dbSki p( )
End
Rest Ar ea( aAr ea)
Ret ur n

Funo para montar o vetor aCols


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod3aCOLS | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a mont ar o vet or aCOLS. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod3aCOLS( nOpc )
Local aAr ea : = Get Ar ea( )
Local cChave : = " "
Local cAl i as : = " ZA2"
Local nI : = 0

I f nOpc <> 3
cChave : = ZA1- >ZA1_NUM

dbSel ect Ar ea( cAl i as )
dbSet Or der ( 1)
dbSeek( xFi l i al ( cAl i as ) + cChave )

- 209 -

ADVPL Completo






Continuao:

Whi l e ! EOF( ) . And. ZA2- >( ZA2_FI LI AL + ZA2_NUM ) == xFi l i al ( cAl i as ) +
cChave
AADD( aREG, ZA2- >( RecNo( ) ) )
AADD( aCOLS, Ar r ay( Len( aHeader ) + 1 ) )
For nI : = 1 To Len( aHeader )
I f aHeader [ nI , 10] == " V"
aCOLS[ Len( aCOLS) , nI ] : = Cr i aVar ( aHeader [ nI , 2] , . T. )
El se
aCOLS[ Len( aCOLS) , nI ] : =
Fi el dGet ( Fi el dPos( aHeader [ nI , 2] ) )
Endi f
Next nI
aCOLS[ Len( aCOLS) , Len( aHeader ) +1] : = . F.
dbSki p( )
End
El se
AADD( aCOLS, Ar r ay( Len( aHeader ) + 1 ) )
For nI : = 1 To Len( aHeader )
aCOLS[ 1, nI ] : = Cr i aVar ( aHeader [ nI , 2] , . T. )
Next nI
aCOLS[ 1, GdFi el dPos( " ZA2_I TEM" ) ] : = " 01"
aCOLS[ 1, Len( aHeader ) +1 ] : = . F.
Endi f
Rest ar ea( aAr ea )
Ret ur n


Funo para atribuir o nome do cliente a varivel


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod3Cl i | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a at ual i zar a var i vel como nome do cl i ent e. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

User Funct i on Mod3Cl i ( )
cCl i ent e : = Posi ci one( " SA1" , 1, xFi l i al ( " SA1" ) + M- >( ZA1_CLI ENT + ZA1_LOJ A) ,
" A1_NREDUZ" )
oCl i ent e: Ref r esh( )
Ret ur n( . T. )



- 210 -

ADVPL Completo



Funo para validar a mudana de linha na MsGetDados()

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod3LOk | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a at ual i zar a var i vel como t ot al dos i t ens. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
User Funct i on Mod3LOk( )
Local nI : = 0
nTot al : = 0
For nI : = 1 To Len( aCOLS )
I f aCOLS[ nI , Len( aHeader ) +1]
Loop
Endi f
nTot al +=Round( aCOLS[ nI , GdFi el dPos( " ZA2_QTDVEN" ) ] *;
aCOLS[ nI , GdFi el dPos( " ZA2_PRCVEN" ) ] , 2)
Next nI
oTot al : Ref r esh( )
Ret ur n( . T. )

Funo para validar se todas as linhas esto preenchidas

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod3TOk | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a val i dar os i t ens se f or ampr eenchi dos. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod3TOk( )
Local nI : = 0
Local l Ret : = . T.

For nI : = 1 To Len( aCOLS)
I f aCOLS[ nI , Len( aHeader ) +1]
Loop
Endi f
I f Empt y( aCOLS[ nI , GdFi el dPos( " ZA2_PRODUT" ) ] ) . And. l Ret
MsgAl er t ( " Campo PRODUTO pr eenchi ment o obr i gat or i o" , cCadast r o)
l Ret : = . F.
Endi f
I f Empt y( aCOLS[ nI , GdFi el dPos( " ZA2_QTDVEN" ) ] ) . And. l Ret
MsgAl er t ( " Campo QUANTI DADE pr eenchi ment o obr i gat or i o" , cCadast r o)
l Ret : = . F.
Endi f
I f Empt y( aCOLS[ nI , GdFi el dPos( " ZA2_PRCVEN" ) ] ) . And. l Ret
MsgAl er t ( " Campo PRECO UNI TARI O pr eenchi ment o obr i gat or i o" , cCadast r o)
l Ret : = . F.
Endi f

I f ! l Ret
Exi t
Endi f
Next i
Ret ur n( l Ret )


- 211 -

ADVPL Completo


Funo para efetuar a gravao dos dados em ZA1 e ZA2 na incluso, alterao e
excluso.


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Mod3Gr v | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a ef et uar a gr avao nas t abel as. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Mod3Gr v( nOpc, aAl t er a )
Local nX : = 0
Local nI : = 0

/ / Se f or i ncl uso
I f nOpc == 3
/ / Gr ava os i t ens
dbSel ect Ar ea( " ZA2" )
dbSet Or der ( 1)
For nX : = 1 To Len( aCOLS )
I f ! aCOLS[ nX, Len( aCOLS ) + 1 ]
RecLock( " ZA2" , . T. )
For nI : = 1 To Len( aHeader )
Fi el dPut ( Fi el dPos( Tr i m( aHeader [ nI , 2] ) ) ,
aCOLS[ nX, nI ] )
Next nI
ZA2- >ZA2_FI LI AL : = xFi l i al ( " ZA2" )
ZA2- >ZA2_NUM : = M- >ZA1_NUM
MsUnLock( )
Endi f
Next nX

/ / Gr ava o Cabeal ho
dbSel ect Ar ea( " ZA1" )
RecLock( " ZA1" , . T. )
For nX : = 1 To FCount ( )
I f " FI LI AL" $ Fi el dName( nX )
Fi el dPut ( nX, xFi l i al ( " ZA1" ) )
El se
Fi el dPut ( nX, M- >&( Eval ( bCampo, nX ) ) )
Endi f
Next nX
MsUnLock( )
Endi f

/ / Se f or al t er ao
I f nOpc == 4
/ / Gr ava os i t ens conf or me as al t er aes
dbSel ect Ar ea( " ZA2" )
dbSet Or der ( 1)
For nX : = 1 To Len( aCOLS )
I f nX <= Len( aREG )
dbGot o( aREG[ nX] )
RecLock( " ZA2" , . F. )
I f aCOLS[ nX, Len( aHeader ) + 1 ]
dbDel et e( )
Endi f
El se


- 212 -

ADVPL Completo


Continuao:

I f ! aCOLS[ nX, Len( aHeader ) + 1 ]
RecLock( " ZA2" , . T. )
Endi f
Endi f

I f ! aCOLS[ nX, Len( aHeader ) +1 ]
For nI : = 1 To Len( aHeader )
Fi el dPut ( Fi el dPos( Tr i m( aHeader [ nI , 2] ) ) , ;
aCOLS[ nX, nI ] )
Next nI
ZA2- >ZA2_FI LI AL : = xFi l i al ( " ZA2" )
ZA2- >ZA2_NUM : = M- >ZA1_NUM
Endi f
MsUnLock( )
Next nX

/ / Gr ava o Cabeal ho
dbSel ect Ar ea( " ZA1" )
RecLock( " ZA1" , . F. )
For nX : = 1 To FCount ( )
I f " FI LI AL" $ Fi el dName( nX )
Fi el dPut ( nX, xFi l i al ( " ZA1" ) )
El se
Fi el dPut ( nX, M- >&( Eval ( bCampo, nX ) ) )
Endi f
Next
MsUnLock( )
Endi f

/ / Se f or excl uso
I f nOpc == 5
/ / Del et a os I t ens
dbSel ect Ar ea( " ZA2" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( " ZA2" ) + M- >ZA1_NUM)
Whi l e ! EOF( ) . And. ZA2- >( ZA2_FI LI AL + ZA2_NUM) == xFi l i al ( " ZA2" ) +;
M- >ZA1_NUM
RecLock( " ZA2" )
dbDel et e( )
MsUnLock( )
dbSki p( )
End

/ / Del et a o Cabeal ho
dbSel ect Ar ea( " ZA1" )
RecLock( " ZA1" , . F. )
dbDel et e( )
MsUnLock( )
Endi f
Ret ur n



- 213 -

ADVPL Completo



22.3.2. Funo Modelo3()

A funo Modelo3) uma interface pr-definida pela Microsiga que implementa de forma
padronizada os compontes necessrios a manipulao de estruturas de dados nas quais o
cabealho e os itens da informao esto em tabelas separadas.

Seu objetivo atuar como um facilitador de codificao, permitindo a utilizao dos recursos
bsicos dos seguintes componentes visuais:

O MsDialog()
O Enchoice()
O EnchoiceBar()
O MsNewGetDados()




O A funo Modelo3() no implementa as regras de visualizao,
incluso, alterao e excluso, como uma AxCadastro() ou
AxFunction().

O A inicializao dos campos utilizados na Enchoice() deve ser realizadas
pela rotina que suporta a execuo da Modelo3(), normalmente
atravs do uso da funo RegToMemory().

O Da mesma forma, o Browse deve ser tratado por esta rotina, sendo
comum a Modelo3() estar vinculada ao uso de uma MBrowse().


E Sintaxe: Modelo3 ([cTitulo], [cAliasE], [cAliasGetD], [aCposE], [cLinOk],
[cTudOk], [nOpcE], [nOpcG], [cFieldOk])

E Parmetros:

cTitulo Ttulo da janela
cAliasE Alias da tabela que ser utilizada na Enchoice
cAliasGetD Alias da tabela que ser utilizada na GetDados
aCposE
Nome dos campos, pertencentes ao Alias especificado o parmetro cAliasE,
que devero ser exibidos na Enchoice:
AADD(aCposE,{nome_campo})
cLinhaOk Funo para validao da linha na GetDados()
cTudoOk Funo para validao na confirmao da tela de interface da Modelo2().
nOpcE
Opo selecionada na MBrowse, ou que deseje ser passada para controle da
Enchoice da Modelo3, aonde:
2 Visualizar
3 - Incluir
4 - Alterar
5 - Excluir
nOpcG
Opo selecionada na MBrowse, ou que deseje ser passada para controle da
GetDados da Modelo3, aonde:
2 Visualizar
3 - Incluir
4 - Alterar
5 - Excluir
cFieldOk Validao dos campos da Enchoice()

- 214 -

ADVPL Completo



E Retorno:

Lgico Indica se a tela da interface Modelo2() foi confirmada ou cancelada pelo
usurio.

Exemplo: Utilizao da Modelo3() para Pedidos de Vendas (SC5,SC6)


#I NCLUDE " pr ot heus. ch"

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | MBRWMOD3| Aut or | ARNALDO RAYMUNDO J R. | Dat a | 01. 01. 2007 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | EXEMPLO DE UTI LI ZACAO DA MODELO3( ) . |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | CURSO DE ADVPL |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

User Funct i on Mbr wMod3( )

Pr i vat e cCadast r o : = " Pedi dos de Venda"
Pr i vat e aRot i na : = {}
Pr i vat e cDel Func : = " . T. " / / Val i dacao par a a excl usao. Pode- se ut i l i zar
ExecBl ock
Pr i vat e cAl i as : = " SC5"

AADD( aRot i na, { " Pesqui sa" , " AxPesqui " , 0, 1})
AADD( aRot i na, { " Vi sual " , " U_Mod3Al l " , 0, 2})
AADD( aRot i na, { " I ncl ui " , " U_Mod3Al l " , 0, 3})
AADD( aRot i na, { " Al t er a" , " U_Mod3Al l " , 0, 4})
AADD( aRot i na, { " Excl ui " , " U_Mod3Al l " , 0, 5})

dbSel ect Ar ea( cAl i as)
dbSet Or der ( 1)
mBr owse( 6, 1, 22, 75, cAl i as)

Ret ur n

User Funct i on Mod3Al l ( cAl i as, nReg, nOpcx)

Local cTi t ul o : = " Cadast r o de Pedi dos de Venda"
Local cAl i asE : = " SC5"
Local cAl i asG : = " SC6"
Local cLi nOk : = " Al l waysTr ue( ) "
Local cTudOk : = " Al l waysTr ue( ) "
Local cFi el dOk: = " Al l waysTr ue( ) "
Local aCposE : = {}
Local nUsado, nX : = 0


- 215 -

ADVPL Completo



Exemplo (continuao):

/ /
/ / Opcoes de acesso par a a Model o 3
/ /
Do Case
Case nOpcx==3; nOpcE: =3 ; nOpcG: =3 / / 3 - " I NCLUI R"
Case nOpcx==4; nOpcE: =3 ; nOpcG: =3 / / 4 - " ALTERAR"
Case nOpcx==2; nOpcE: =2 ; nOpcG: =2 / / 2 - " VI SUALI ZAR"
Case nOpcx==5; nOpcE: =2 ; nOpcG: =2 / / 5 - " EXCLUI R"
EndCase

/ /
/ / Cr i a var i avei s M- >????? da Enchoi ce
/ /
RegToMemor y( " SC5" , ( nOpcx==3 . or . nOpcx==4 ) ) / / Se f or i ncl usao ou al t er acao
per mi t e al t er ar o cont eudo das var i avei s de memor i a

/ /
/ / Cr i a aHeader e aCol s da Get Dados
/ /
nUsado: =0
dbSel ect Ar ea( " SX3" )
dbSeek( " SC6" )
aHeader : ={}
Whi l e ! Eof ( ) . And. ( x3_ar qui vo==" SC6" )
I f Al l t r i m( x3_campo) ==" C6_I TEM"
dbSki p( )
Loop
Endi f
I f X3USO( x3_usado) . And. cNi vel >=x3_ni vel
nUsado: =nUsado+1
Aadd( aHeader , { TRI M( x3_t i t ul o) , x3_campo, x3_pi ct ur e, ;
x3_t amanho, x3_deci mal , " Al l waysTr ue( ) " , ;
x3_usado, x3_t i po, x3_ar qui vo, x3_cont ext } )
Endi f
dbSki p( )
End

I f nOpcx==3 / / I ncl ui r
aCol s: ={Ar r ay( nUsado+1) }
aCol s[ 1, nUsado+1] : =. F.
For nX: =1 t o nUsado
aCol s[ 1, nX] : =Cr i aVar ( aHeader [ nX, 2] )
Next
El se
aCol s: ={}
dbSel ect Ar ea( " SC6" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( ) +M- >C5_NUM)
Whi l e ! eof ( ) . and. C6_NUM==M- >C5_NUM
AADD( aCol s, Ar r ay( nUsado+1) )
For nX: =1 t o nUsado
aCol s[ Len( aCol s) , nX] : =Fi el dGet ( Fi el dPos( aHeader [ nX, 2] ) )
Next
aCol s[ Len( aCol s) , nUsado+1] : =. F.
dbSki p( )
End
Endi f

- 216 -

ADVPL Completo



Exemplo (continuao):

I f Len( aCol s) >0
/ /
/ / Execut a a Model o 3
/ /
aCposE : = {" C5_CLI ENTE" }

l Ret Mod3 : = Model o3( cTi t ul o, cAl i asE, cAl i asG, aCposE, cLi nOk, cTudOk, ;
nOpcE, nOpcG, cFi el dOk)
/ /
/ / Execut ar pr ocessament o
/ /
I f l Ret Mod3
Avi so( " Model o3( ) " , " Conf i r mada oper acao! " , {" Ok" })
Endi f
Endi f

Ret ur n





























- 217 -

ADVPL Completo



22.4. Mbrowse()

A Mbrowse() uma funcionalidade de cadastro que permite a utilizao de recursos mais
aprimorados na visualizao e manipulao das informaes do sistema, possuindo os
seguintes componentes:

Browse padro para visualizao das informaes da base de dados, de acordo com as
configuraes do SX3 Dicionrio de Dados (campo browse).

Parametrizao para funes especficas para as aes de visualizao, incluso,
alterao e excluso de informaes, o que viabiliza a manuteno de informaes com
estrutura de cabealhos e itens.

Recursos adicionais como identificadores de status de registros, legendas e filtros para
as informaes.

E Sintaxe: MBrowse(nLin1, nCol1, nLin2, nCol2, cAlias, aFixe, cCpo, nPar08,
cFun, nClickDef, aColors, cTopFun, cBotFun, nPar14, bInitBloc,
lNoMnuFilter, lSeeAll, lChgAll)

E Parmetros:

nLin1 Nmero da Linha Inicial
nCol1 Nmero da Coluna Inicial
nLin2 Nmero da Linha Final
nCol2 Nmero da Coluna Final
cAlias
Alias do arquivo que ser visualizado no browse.
Para utilizar a funo MBrowse com arquivos de trabalho, o alias do
arquivo de trabalho deve ser obrigatoriamente 'TRB' e o parmetro
aFixe torna-se obrigatrio.
aFixe
Array bi-dimensional contendo os nomes dos campos fixos pr-
definidos, obrigando a exibio de uma ou mais colunas ou a definio
das colunas quando a funo utilizada com arquivos de trabalho.
A estrutura do array diferente para arquivos que fazem parte do
dicionrio de dados e para arquivos de trabalho.

Arquivos que fazem parte do dicionrios de dados

[n][1]=>Descrio do campo
[n][2]=>Nome do campo

Arquivos de trabalho

[n][1]=>Descrio do campo
[n][2]=>Nome do campo
[n][3]=>Tipo
[n][4]=>Tamanho
[n][5]=>Decimal
[n][6]=>Picture




- 218 -

ADVPL Completo


E Parmetros:

cCpo
Campo a ser validado se est vazio ou no para exibio do bitmap de
status. Quando esse parmetro utilizado, a primeira coluna do browse
ser um bitmap indicando o status do registro, conforme as condies
configuradas nos parmetros cCpo, cFun e aColors.
nPar08 Parmetro reservado.
cFun
Funo que retornar um valor lgico para exibio do bitmap de
status.
Quando esse parmetro utilizado, o parmetro cCpo
automaticamente desconsiderado.
nClickDef
Nmero da opo do aRotina que ser executada quando for efetuado
um duplo clique em um registro do browse. O default executar a
rotina de visualizao.
aColors
Array bi-dimensional para possibilitar o uso de diferentes bitmaps de
status.
[n][1]=>Funo que retornar um valor lgico para a exibio do
bitmap
[n][2]=>Nome do bitmap que ser exibido quando a funo retornar
.T. (True).
O nome do bitmap deve ser um resource do repositrio e quando esse
parmetro utilizado os parmetros cCpo e cFun so
automaticamente desconsiderados.
cTopFun
Funo que retorna o limite superior do filtro baseado na chave de
ndice selecionada.
Esse parmetro deve ser utilizado em conjunto com o parmetro
cBotFun.
cBotFun
Funo que retorna o limite inferior do filtro baseado na chave de ndice
selecionada.
Esse parmetro deve ser utilizado em conjunto com o parmetro
cTopFun.
nPar14 Parmetro reservado.
bInitBloc
Bloco de cdigo que ser executado no ON INIT da janela do browse. O
bloco de cdigo receber como parmetro o objeto da janela do
browse.
lNoMnuFilter
Valor lgico que define se a opo de filtro ser exibida no menu da
MBrowse.
.T. => No exibe a opo no menu
.F. => (default) Exibe a opo no menu.
A opo de filtro na MBrowse est disponvel apenas para TopConnect.
lSeeAll
Identifica se o Browse dever mostrar todas as filiais.
O valor default .F. ( False ), no mostra todas as filiais. Caso os
parmetros cTopFun ou cBotFun sejam informados esse parmetro
ser configurado automaticamente para .F. ( False )
Parmetro vlido partir da verso 8.11.
A funo SetBrwSeeAll muda o valor default desse parmetro.
lChgAll
Identifica se o registro de outra filial est autorizado para alteraes.
O valor default .F. ( False ), no permite alterar registros de outras
filiais. Quando esse parmetro est configurado para .T. ( True ), o
parmetro lSeeAll configurado automaticamente para .T. ( True ).
Caso os parmetros cTopFun ou cBotFun sejam informados esse
parmetro ser configurado automaticamente para .F. ( False ).
Parmetro vlido partir da verso 8.11.
A funo SetBrwChgAll muda o valor default desse parmetro.

- 219 -

ADVPL Completo



E Variveis private adicionais

aRotina
Array contendo as funes que sero executadas pela Mbrowse, nele
ser definido o tipo de operao a ser executada (incluso, alterao,
excluso, visualizao, pesquisa, etc. ), e sua estrutura composta de
5 (cinco) dimenses:

[n][1] - Ttulo;
[n][2] Rotina;
[n][3] Reservado;
[n][4] Operao (1 - pesquisa; 2 - visualizao; 3 - incluso; 4 -
alterao; 5 - excluso);

Ele ainda pode ser parametrizado com as funes bsicas da
AxCadastro conforme abaixo:

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})
cCadastro Ttulo do browse que ser exibido.

E Informaes passadas para funes do aRotina:

Ao definir as funes no array aRotina, se o nome da funo no for especificado com (), a
Mbrowse passar como parmetros as seguintes variveis de controle:

cAlias Nome da rea de trabalho definida para a Mbrowse
nReg Recno do registro posicionado no Browse
nOpc
Posio da opo utilizada na Mbrowse de acordo com a ordem da
funo no array a Rotina.



A posio das funes no array aRotina define o contedo de uma varivel de
controle que ser repassada para as funes chamadas a partir da Mbrowse,
convencionada como nOpc. Desta forma, para manter o padro da aplicao
ERP a ordem a ser seguida na definio do aRotina :


1. Pesquisar
2. Visualizar
3. Incluir
4. Alterar
5. Excluir
6. Livre


- 220 -

ADVPL Completo



Exemplo: Funo Mbrowse()

#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MBRWSA1 | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Exempl o de ut i l i zao da f uno MBROWSE( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on MBr wSA1( )

Local cAl i as : = " SA1"
Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es"
Pr i vat e aRot i na : = {}

AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1})
AADD( aRot i na, {" Vi sual i zar " , " AxVi sual " , 0, 2})
AADD( aRot i na, {" I ncl ui r " , " AxI ncl ui " , 0, 3})
AADD( aRot i na, {" Al t er ar " , " AxAl t er a" , 0, 4})
AADD( aRot i na, {" Excl ui r " , " AxDel et a" , 0, 5})

dbSel ect Ar ea( cAl i as)
dbSet Or der ( 1)
mBr owse( 6, 1, 22, 75, cAl i as)

Ret ur n Ni l


Exemplo: Funo Inclui() substituindo a funo AxInclui() Chamada da Mbrowse()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MBRWSA1 | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Exempl o de ut i l i zao da f uno MBROWSE( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on MBr wSA1( )

Local cAl i as : = " SA1"
Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es"
Pr i vat e aRot i na : = {}

AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1})
AADD( aRot i na, {" Vi sual i zar " , " AxVi sual " , 0, 2})
AADD( aRot i na, {" I ncl ui r " , " U_I ncl ui " , 0, 3})


- 221 -

ADVPL Completo



Exemplo (continuao):

AADD( aRot i na, {" Al t er ar " , " AxAl t er a" , 0, 4})
AADD( aRot i na, {" Excl ui r " , " AxDel et a" , 0, 5})

dbSel ect Ar ea( cAl i as)
dbSet Or der ( 1)
mBr owse( 6, 1, 22, 75, cAl i as)

Ret ur n Ni l


Exemplo: Funo Inclui() substituindo a funo AxInclui() Funo Inclui()


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | I NCLUI | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo de i ncl uso espec f i ca chamando a AXI NCLUI ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on I ncl ui ( cAl i as, nReg, nOpc)

Local cTudoOk : = " ( Al er t ( ' OK' ) , . T. ) "
Local nOpcao : = 0

nOpcao : = AxI ncl ui ( cAl i as, nReg, nOpc, , , , cTudoOk)

I f nOpcao == 1
MsgI nf o( I ncl uso concl u da comsucesso! )
El seI f == 2
MsgI nf o( I ncl uso cancel ada! )
Endi f

Ret ur n Ni l









- 222 -

ADVPL Completo



Exemplo: Determinando a opo do aRotina pela informao recebida em nOpc

#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | EXCLUI | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo de excl uso especi f i ca chamando a AxDel et a |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Excl ui ( cAl i as, nReg, nOpc)

Local cTudoOk : = " ( Al er t ( ' OK' ) , . T. ) "
Local nOpcao : = 0

nOpcao : = AxDel et a( cAl i as, nReg, aRotina[nOpc,4])
// Identifica corretamente a opo definida para o funo em aRotinas com mais
// do que os 5 elementos padres.

I f nOpcao == 1
MsgI nf o( Excl uso r eal i zada comsucesso! )
El seI f == 2
MsgI nf o( Excl uso cancel ada! )
Endi f

Ret ur n Ni l


22.4.1. AxFunctions()

Conforme mencionado nos tpicos sobre as interfaces padres AxCadastro() e Mbrowse(),
existem funes padres da aplicao ERP que permitem a visualizao, incluso, alterao e
excluso de dados em formato simples.

Estas funes so padres na definio da interface AxCadastro() e podem ser utilizadas
tambm da construo no array aRotina utilizado pela Mbrowse(), as quais esto listadas a
seguir:

AXPESQUI()
AXVISUAL()
AXINCLUI()
AXALTERA()
AXDELETA()

- 223 -

ADVPL Completo



AXPESQUI()

Sintaxe AXPESQUI()
Descrio
Funo de pesquisa padro em registros exibidos pelos browses do sistema,
a qual posiciona o browse no registro pesquisado. Exibe uma tela que
permite a seleo do ndice a ser utilizado na pesquisa e a digitao das
informaes que compe a chave de busca.

AXVISUAL()

Sintaxe
AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,;
aButtons, lMaximized )
Descrio
Funo de visualizao padro das informaes de um registro, no formato
Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().

AXINCLUI()

Sintaxe
AxInclui(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
Funo de incluso padro das informaes de um registro, no formato
Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().

AXALTERA()

Sintaxe
AxAltera(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Descrio
Funo de alterao padro das informaes de um registro, no formato
Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().


AXDELETA()

Sintaxe
AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,;
aAuto, lMaximized)
Descrio
Funo de excluso padro das informaes de um registro, no formato
Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().









- 224 -

ADVPL Completo



22.4.2. FilBrowse()

A FilBrowse() uma funcionalidade que permite a utilizao de filtros na MBrowse().

E Sintaxe: FilBrowse(cAlias, aQuery, cFiltro, lShowProc)

E Parmetros:

cAlias Alias ativo definido para a Mbrowse()
aQuery
Este parmetro dever ser inicializado sempre vazio e sua passagem
obrigatoriamente por referncia, pois, seu retorno ser enviado para a
funo EndFilBrw().

[1]=>Nome do Arquivo Fsico
[2]=>Ordem correspondente ao Sindex
cFiltro Condio de filtro para a MBrowse()
lShowProc

Habilita (.T.) ou desabilita (.F.) a apresentao da mensagem
Selecionando registros ..., no processamento.



22.4.3. EndFilBrw()

A EndFilBrw() uma funcionalidade que permite eliminar o filtro e o arquivo temporrio
criados pela FilBrowse().

E Sintaxe: EndFilBrw(cAlias, aQuery)

E Parmetros:

cAlias Alias ativo definido para a Mbrowse()
aQuery
Array de retorno passado por referncia para a FilBrowse().

[1]=>Nome do Arquivo Fsico
[2]=>Ordem correspondente ao Sindex








- 225 -

ADVPL Completo



22.4.4. PesqBrw()

A PesqBrw() uma funcionalidade que permite a pesquisa dentro da MBrowse(). Esta funo
dever obrigatoriamente substituir a funo AxPesqui, no array do aRotina, sempre que for
utilizada a funo FilBrowse().

E Sintaxe: PesqBrw(cAlias , nReg, bBrwFilter)

E Parmetros:

cAlias Alias ativo definido para a Mbrowse()
nReg Nmero do registro
bBrwFilter
Bloco de Cdigo que contm a FilBrowse()

Ex: bBrwFilter := { || FilBrowse(cAlias, aQuery, cFiltro, lShowProc) }



22.4.5. BrwLegenda ()

A BrwLegenda() uma funcionalidade que permite a incluso de legendas na MBrowse().

E Sintaxe: BrwLegenda(cCadastro , cTitulo, aLegenda)

E Parmetros:

cCadastro
Mesma varivel utilizada para a MBrowse, que identifica o cadastro que
est em uso no momento
cTitulo Ttulo (identificao) da Legenda
aLegenda

Array contendo de definio da cor e do texto, explicativo sobre o que
ela representa na MBrowse

Ex: {{Cor,Texto}}




Lista de cores disponveis no Protheus

O BR_AMARELO
O BR_AZUL
O BR_BRANCO
O BR_CINZA
O BR_LARANJA
O BR_MARRON
O BR_VERDE
O BR_VERMELHO
O BR_PINK
O BR_PRETO




- 226 -

ADVPL Completo



Exemplo: Mbrowse() utilizando as funes acessrias


#I ncl ude " Pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | MBr wSA2 | Aut or | SERGI O FUZI NAKA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Exempl o da MBr owse ut i l i zando a t abel a de Cadast r o de |
| | For necedor es |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so de ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on MBr wSA2( )

Local cAl i as : = " SA2"
Local aCor es : = {}
Local cFi l t r a : = " A2_FI LI AL == ' " +xFi l i al ( ' SA2' ) +" ' . And. A2_EST == ' SP' "

Pr i vat e cCadast r o : = " Cadast r o de For necedor es"
Pr i vat e aRot i na : = {}
Pr i vat e aI ndexSA2 : = {}
Pr i vat e bFi l t r aBr w: = { | | Fi l Br owse( cAl i as, @aI ndexSA2, @cFi l t r a) }

AADD( aRot i na, {" Pesqui sar " , " PesqBr w" , 0, 1})
AADD( aRot i na, {" Vi sual i zar " , " AxVi sual " , 0, 2})
AADD( aRot i na, {" I ncl ui r " , " U_BI ncl ui " , 0, 3})
AADD( aRot i na, {" Al t er ar " , " U_BAl t er a" , 0, 4})
AADD( aRot i na, {" Excl ui r " , " U_BDel et a" , 0, 5})
AADD( aRot i na, {" Legenda" , " U_BLegenda" , 0, 3})

/ *
- - CORES DI SPONI VEI S PARA LEGENDA - -
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CI NZA
BR_LARANJ A
BR_MARRON
BR_VERDE
BR_VERMELHO
BR_PI NK
BR_PRETO
*/

AADD( aCor es, {" A2_TI PO == ' F' " , " BR_VERDE" })
AADD( aCor es, {" A2_TI PO == ' J ' " , " BR_AMARELO" })
AADD( aCor es, {" A2_TI PO == ' X' " , " BR_LARANJ A" })
AADD( aCor es, {" A2_TI PO == ' R' " , " BR_MARRON" })
AADD( aCor es, {" Empt y( A2_TI PO) " , " BR_PRETO" })

dbSel ect Ar ea( cAl i as)
dbSet Or der ( 1)


- 227 -

ADVPL Completo



Exemplo (continuao):

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Cr i a o f i l t r o na MBr owse ut i l i zando a f uno Fi l Br owse
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Eval ( bFi l t r aBr w)

dbSel ect Ar ea( cAl i as)
dbGoTop( )
mBr owse( 6, 1, 22, 75, cAl i as, , , , , , aCor es)

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Del et a o f i l t r o ut i l i zado na f uno Fi l Br owse
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EndFi l Br w( cAl i as, aI ndexSA2)

Ret ur n Ni l

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Funo: BI ncl ui - Rot i na de I ncl uso
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User Funct i on BI ncl ui ( cAl i as, nReg, nOpc)

Local nOpcao : = 0

nOpcao : = AxI ncl ui ( cAl i as, nReg, nOpc)

I f nOpcao == 1
MsgI nf o( " I ncl uso ef et uada comsucesso! " )
El se
MsgI nf o( " I ncl uso cancel ada! " )
Endi f

Ret ur n Ni l

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Funo: BAl t er a - Rot i na de Al t er ao
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User Funct i on BAl t er a( cAl i as, nReg, nOpc)

Local nOpcao : = 0

nOpcao : = AxAl t er a( cAl i as, nReg, nOpc)

I f nOpcao == 1
MsgI nf o( " Al t er ao ef et uada comsucesso! " )
El se
MsgI nf o( " Al t er ao cancel ada! " )
Endi f

Ret ur n Ni l


- 228 -

ADVPL Completo



Exemplo (continuao):

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Funo: BDel et a - Rot i na de Excl uso
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User Funct i on BDel et a( cAl i as, nReg, nOpc)

Local nOpcao : = 0

nOpcao : = AxDel et a( cAl i as, nReg, nOpc)

I f nOpcao == 1
MsgI nf o( " Excl uso ef et uada comsucesso! " )
El se
MsgI nf o( " Excl uso cancel ada! " )
Endi f

Ret ur n Ni l

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Funo: BLegenda - Rot i na de Legenda
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
User Funct i on BLegenda( )

Local aLegenda : = {}

AADD( aLegenda, {" BR_VERDE" , " Pessoa F si ca" })
AADD( aLegenda, {" BR_AMARELO" , " Pessoa J ur di ca" })
AADD( aLegenda, {" BR_LARANJ A" , " Expor t ao" })
AADD( aLegenda, {" BR_MARRON" , " For necedor Rur al " })
AADD( aLegenda, {" BR_PRETO" , " No Cl assi f i cado" })

Br wLegenda( cCadast r o, " Legenda" , aLegenda)

Ret ur n Ni l














- 229 -

ADVPL Completo



22.5. MarkBrowse()

A funo MarkBrow() permite que os elementos de um browse, sejam marcados ou
desmarcados. Para utilizao da MarkBrow() necessrio declarar as variveis cCadastro e
aRotina como Private, antes da chamada da funo.

E Sintaxe: MarkBrow (cAlias, cCampo, cCpo, aCampos, lInvert, cMarca, cCtrlM,
uPar8, cExpIni, cExpFim, cAval, bParBloco)

E Parmetros:

cAlias Alias ativo definido para a Mbrowse()
cCampo Campo do arquivo onde ser feito o controle (gravao) da marca.
cCpo
Campo onde ser feita a validao para marcao e exibio do bitmap
de status.
aCampos
Vetor de colunas a serem exibidas no browse, deve conter as seguintes
dimenses:

[n][1] nome do campo;
[n][2] - Nulo (Nil);
[n][3] - Ttulo do campo;
[n][4] - Mscara (picture).
lInvert Inverte a marcao.
cMarca String a ser gravada no campo especificado para marcao.
cCtrlM Funo a ser executada caso deseje marcar todos elementos.
uPar8 Parmetro reservado.
cExpIni
Funo que retorna o contedo inicial do filtro baseada na chave de
ndice selecionada.
cExpFim
Funo que retorna o contedo final do filtro baseada na chave de
ndice selecionada.
cAval Funo a ser executada no duplo clique em um elemento no browse.
bParBloco Bloco de cdigo a ser executado na inicializao da janela


E Informaes passadas para funes do aRotina:

Ao definir as funes no array aRotina, se o nome da funo no for especificado com (), a
MarkBrowse passar como parmetros as seguintes variveis de controle:

cAlias Nome da rea de trabalho definida para a Mbrowse
nReg Recno do registro posicionado no Browse
nOpc
Posio da opo utilizada na Mbrowse de acordo com a ordem da
funo no array a Rotina.
cMarca Marca em uso pela MarkBrw()
lInverte Indica se foi utilizada a inverso da seleo dos itens no browse.


- 230 -

ADVPL Completo



Exemplo: Funo MarkBrow() e acessrias


#i ncl ude " pr ot heus. ch"
/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | MkBr wSA1 | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Desc. | Mar kBr owse Genr i co |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so de ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON MkBr wSA1( )

Local aCpos : = {}
Local aCampos : = {}
Local nI : = 0
Local cAl i as : = " SA1"

Pr i vat e aRot i na : = {}
Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es"
Pr i vat e aRecSel : = {}

AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1})
AADD( aRot i na, {" Vi sual i zar " , " AxVi sual " , 0, 2})
AADD( aRot i na, {" I ncl ui r " , " AxI ncl ui " , 0, 3})
AADD( aRot i na, {" Al t er ar " , " AxAl t er a" , 0, 4})
AADD( aRot i na, {" Excl ui r " , " AxDel et a" , 0, 5})
AADD( aRot i na, {" Vi sual i zar Lot e" , " U_Vi sLot e" , 0, 5})

AADD( aCpos, " A1_OK" )
AADD( aCpos, " A1_FI LI AL" )
AADD( aCpos, " A1_COD" )
AADD( aCpos, " A1_LOJ A" )
AADD( aCpos, " A1_NOME" )
AADD( aCpos, " A1_TI PO" )

dbSel ect Ar ea( " SX3" )
dbSet Or der ( 2)
For nI : = 1 To Len( aCpos)
I F dbSeek( aCpos[ nI ] )
AADD( aCampos, {X3_CAMPO, " " , I I F( nI ==1, " " , Tr i m( X3_TI TULO) ) , ;
Tr i m( X3_PI CTURE) })
ENDI F
Next

DbSel ect Ar ea( cAl i as)
DbSet Or der ( 1)

Mar kBr ow( cAl i as, aCpos[ 1] , " A1_TI PO == ' ' " , aCampos, . F. , Get Mar k( , " SA1" , " A1_OK" ) )

Ret ur n Ni l

- 231 -

ADVPL Completo


Exemplo: Funo VisLote() utilizao das funes acessrias da MarkBrow()


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | Vi sLot e( ) | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Desc. | Funo ut i l i zada par a demonst r ar o uso do r ecur so da Mar kBr owse|
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so de ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */
USER FUNCTI ON Vi sLot e( )
Local cMar ca : = Thi sMar k( )
Local nX : = 0
Local l I nver t : = Thi sI nv( )
Local cText o : = " "
Local cEOL : = CHR( 10) +CHR( 13)
Local oDl g
Local oMemo

DbSel ect Ar ea( " SA1" )
DbGoTop( )
Whi l e SA1- >( ! EOF( ) )

/ / I sMar k( " A1_OK" , cMar ca, l I nver t e)
I F SA1- >A1_OK == cMar ca . AND. ! l I nver t
AADD( aRecSel , {SA1- >( Recno( ) ) , SA1- >A1_COD, SA1- >A1_LOJ A, SA1- >A1_NREDUZ})
ELSEI F SA1- >A1_OK ! = cMar ca . AND. l I nver t
AADD( aRecSel , {SA1- >( Recno( ) ) , SA1- >A1_COD, SA1- >A1_LOJ A, SA1- >A1_NREDUZ})
ENDI F

SA1- >( dbSki p( ) )
Enddo

I F Len( aRecSel ) > 0
cText o : = " Cdi go | Loj a | Nome Reduzi do " +cEol
/ / " 1234567890123456789012345678901234567890
/ / " CCCCCC | LL | NNNNNNNNNNNNNNNNNNNN +cEol

For nX : = 1 t o Len( aRecSel )

cText o += aRecSel [ nX] [ 2] +Space( 1) + " | " +Space( 2) +
aRecSel [ nX] [ 3] +Space( 3) +" | "
cText o += Space( 1) +SUBSTRI NG( aRecSel [ nX] [ 4] , 1, 20) +Space( 1)
cText o += cEOL

Next nX

DEFI NE MSDI ALOG oDl g TI TLE " Cl i ent es Sel eci onados" Fr om000, 000 TO 350, 400
PI XEL
@005, 005 GET oMemo VAR cText o MEMO SI ZE 150, 150 OF oDl g PI XEL
oMemo: bRCl i cked : = {| | Al l waysTr ue( ) }
DEFI NE SBUTTON FROM 005, 165 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g PI XEL
ACTI VATE MSDI ALOG oDl g CENTER
Li mpaMar ca( )
ENDI F

RETURN

- 232 -

ADVPL Completo


Exemplo: Funo LimpaMarca() utilizao das funes acessrias da MarkBrow()


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | Li mpaMar ca | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Desc. | Funo ut i l i zada par a demonst r ar o uso do r ecur so da Mar kBr owse|
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so de ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

STATI C FUNCTI ON Li mpaMar ca( )

Local nX : = 0

For nX : = 1 t o Len( aRecSel )
SA1- >( DbGot o( 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 arquivos e ndices temporrios ou de trabalho, so geralmente utilizados em ambiente
CodeBase, pois, neste ambiente no h os recursos de Join e Order By, como existe nos
bancos de dados relacionais. Por este motivo quando necessitar gerar uma informao
ordenada e consolidada, ou seja, de vrias tabelas, deveremos recorrer ao uso dos arquivos e
dos ndices temporrios.


23.2. Funes para manipulao de arquivos e ndices temporrios


23.2.1. CriaTrab()

A CriaTrab() uma funcionalidade que permite criar um arquivo fsico ou gerar um nome
aleatrio.

E Sintaxe: CriaTrab(aCampo, lCriar, cExt)

E Parmetros

aCampo
Array com o nome, tipo, tamanho e decimal do campo a ser criado no
arquivo
lCriar
Se verdadeiro (.T.) criar o arquivo, ou falso (.F.) somente retorna um
nome aleatrio
cExt Qual extenso dever ser criado o arquivo de trabalho



Os arquivos criados com a funo CRIATRAB() sero gerados no diretrio
especificado como StartPath, de acordo com o RootPath configurado no .ini
da aplicao.









- 234 -

ADVPL Completo



23.2.2. dbUseArea()

A dbUseArea() uma funcionalidade que permite definir um arquivo de base de dados, com
uma rea de trabalho disponvel na aplicao.

E Sintaxe: dbUseArea(lNewArea, cDriver, cName, cAlias, lShared, lReadOnly)

E Parmetros

lNewArea Indica se e um novo alias no conjunto de alias aberto
cDriver Drive (RddName()) do arquivo -> DBFCDX / TOPCONN / DBFNTX
cName Nome fsico da tabela que ser usado
cAlias Alias que ser usado enquanto estive aberto
lShared A tabela ter acesso exclusivo ou compartilhado
lReadOnly Se verdadeiro a tabela ser somente leitura


23.2.3. IndRegua()

A IndRegua() uma funcionalidade que permite criar ndices temporrios para o alias
especificado, podendo ou no ter um filtro.

E Sintaxe: IndRegua(cAlias, cNIndex, cExpress, xOrdem, cFor, cMens, lShow)

E Parmetros

cAlias Alias da tabela onde ser efetuada o ndice/filtro temporrio
cNIndex Nome do arquivo de trabalho retornado pela funo CriaTrab()
cExpress Expresso utilizada na chave do novo ndice
xOrdem Parmetro nulo
cFor Expresso utilizada para filtro
cMens Parmetro nulo
lShow Apresentar a tela de progresso do ndice/filtro temporrio




- 235 -

ADVPL Completo



Exemplo 01: Gerao de arquivo e ndice temporrios


#i ncl ude pr ot heus. ch

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | Ger aTr ab | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Desc. | Ut i l i zao de ar qui vos e ndi ces t empor r i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so de ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Ger aTr ab( )

Local aSt r u : = {}
Local aAr qTRB : = {}
Local nI : = 0
Local cI ndTRB : = " "
Local cNomAr q : = " "

AADD( aSt r u, { " PRODUTO" , " B1_COD" } )
AADD( aSt r u, { " DESCRI CAO" , " B1_DESC" } )
AADD( aSt r u, { " GRUPO" , " BM_GRUPO" } )
AADD( aSt r u, { " DESCGRUPO" , " BM_DESC" } )
AADD( aSt r u, { " TI PO" , " B1_TI PO" } )
AADD( aSt r u, { " DESCTI PO" , " B1_DESC" } )
AADD( aSt r u, { " CC" , " CTT_CC" } )
AADD( aSt r u, { " DESC_CC" , " CTT_DESC" } )
AADD( aSt r u, { " SERI E" , " D2_SERI E" } )
AADD( aSt r u, { " DOCTO" , " D2_COD" } )
AADD( aSt r u, { " TI PONOTA" , " D2_TP" } )
AADD( aSt r u, { " EMI SSAO" , " D2_EMI SSAO" } )
AADD( aSt r u, { " CLI ENTE" , " D2_CLI ENTE" } )
AADD( aSt r u, { " LOJ A" , " D2_LOJ A" } )
AADD( aSt r u, { " NOME" , " A1_NOME" } )
AADD( aSt r u, { " QTDE" , " D2_QUANT" } )
AADD( aSt r u, { " UNI T" , " D2_PRCVEN" } )
AADD( aSt r u, { " TOTAL" , " D2_TOTAL" } )
AADD( aSt r u, { " ALI QI CMS" , " D2_PI CM" } )
AADD( aSt r u, { " VALI CMS" , " D2_VALI CM" } )
AADD( aSt r u, { " ALI QI PI " , " D2_I PI " } )
AADD( aSt r u, { " VALI PI " , " D2_VALI PI " } )
AADD( aSt r u, { " VALMERC" , " D2_TOTAL" } )
AADD( aSt r u, { " TOTSEMI CMS" , " D2_TOTAL" } )
AADD( aSt r u, { " VALPI S" , " D2_TOTAL" } )
AADD( aSt r u, { " LI QUI DO" , " D2_TOTAL" } )
AADD( aSt r u, { " CUSTO" , " D2_TOTAL" } )

dbSel ect Ar ea( " SX3" )
dbSet Or der ( 2)
For nI : = 1 To Len( aSt r u )
dbSeek( aSt r u[ nI , 2] )
AADD( aAr qTRB, { aSt r u[ nI , 1] , X3_TI PO, X3_TAMANHO, X3_DECI MAL } )
Next nI


- 236 -

ADVPL Completo


Exemplo (continuao):

/ / ndi ce que ser cr i ado
cI ndTRB : = " PRODUTO+DTOS( EMI SSAO) "

cNomAr q : = Cr i aTr ab( aAr qTRB, . T. )

dbUseAr ea( . T. , " DBFCDX" , cNomAr q, " TRB" , . T. , . T. )

I ndRegua( " TRB" , cNomAr q, cI ndTRB )
dbSet Or der ( 1)

/ / ( . . . ) f azer o pr ocessament o necessr i o

dbSel ect Ar ea( " TRB" )
dbCl oseAr ea( )

I f MsgYesNo( " Apagar o ar qui vo ger ado \ syst em\ " +cNomAr q+" . dbf ?" , FunName( ) )
Fer ase( cNomAr q+" . dbf " )
Fer ase( cNomAr q+Or dBagExt ( ) )
Endi f

Ret ur n Ni l


Quando criamos um arquivo ou um ndice temporrio (trabalho),
utilizando a funo Indregua, obrigatrio apag-los no final do rotina.

A utilizao de arquivo ou ndice temporrio, dever ser bem analisada
a fim de evitar lentido no processamentos da rotina.


O array aStru foi criado com base nos campos existentes no sistema,
ao invs de criarmos novas estruturas dos campos, utilizamos as j
existentes no dicionrios de dados (SX3).














- 237 -

ADVPL Completo


Exemplo 02: Utilizando dois ndices temporrios com RDD DBFCDX


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | I ndTwoReg | Aut or | MI CHEL DANTAS | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Desc. | Ut i l i zao de doi s ndi ces t empor r i os comDBFCDX |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so de ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on I ndTwoReg( )

LOCAL nOr der : = 0
LOCAL cAr q1 : = Cr i aTr ab( NI L, . F. )
LOCAL cChave1 : = " A1_FI LI AL+A1_EST"
LOCAL cAr q2 : = Cr i aTr ab( NI L, . F. )
LOCAL cChave2 : = " A1_FI LI AL+A1_NOME"

dbSel ect Ar ea( " SA1" )
I ndRegua( " SA1" , cAr q1, cChave1, , , " Sel eci onando Regs. . . " )
I ndRegua( " SA1" , cAr q2, cChave2, , , " Sel eci onando Regs. . . " )

nOr der : = Ret I ndex( " SA1" )

dbSet I ndex( cAr q1+Or dBagExt ( ) )
dbSet I ndex( cAr q2+Or dBagExt ( ) )

Al er t ( " Agor a vai por est ado" )

dbset Or der ( nOr der +1)
dbGoTop( )
Whi l e ! Eof ( )
Al er t ( " Est ado : " + SA1- >A1_EST +" " +" Nome : " + SA1- >A1_NOME)
dbSki p( )
End

Al er t ( " Agor a vai por nome" )

dbSet Or der ( nOr der +2)
dbGoTop( )
Whi l e ! Eof ( )
Al er t ( " Est ado : " + SA1- >A1_EST +" " +" Nome : " + SA1- >A1_NOME)
dbSki p( )
End

Ret I ndex( " SA1" )
Fer ase( cAr q1+Or dBagext ( ) )
Fer ase( cAr q2+Or dBagext ( ) )

Ret ur n



- 238 -

ADVPL Completo



24. Relatrios no grficos

Os relatrios desenvolvidos em ADVPL possuem um padro de desenvolvimento que mais
depende de layout e tipos de parmetros do que qualquer outro tipo de informao, visto que
at o momento percebemos que a linguagem padro da Microsiga muito mais composta de
funes genricas do que de comandos.

Este tipo de relatrio caracterizado por um formato de impresso tipo PostScript, e permite
a gerao de um arquivo em formato texto (.txt), com uma extenso prpria da aplicao ERP
(.##R).

A estrutura de um relatrio no grfico baseada no uso da funo SetPrint(), complementada
pelo uso de outras funes acessrias, as quais esto detalhadas no Guia de Referncia Rpida
que acompanha este material.

24.1.1. Estrutura de relatrios baseados na SetPrint()

Neste tpico ser demonstrada a construo de relatrio no grfico baseado no uso da funo
SetPrint() o qual atende os formatos de base de dados ISAM e Topconnect, porm no
contemplando a tecnologia Protheus Embedded SQL.

Estrutura do programa

Linhas Programa
1 Funo principal;
2 Declarao e atribuio de variveis;
3 Atualizao do arquivo de perguntas atravs da funo especfica CriaSX1();
4 Definio as perguntas atravs da funo Pergunte();
5 Definio das ordens disponveis para impresso do relatrio;
6 Chamada da funo SetPrint;
7 Atualizao das configuraes de impresso com a funo SetDefault();
8 Execuo da rotina de impresso atravs da funo RptStatus()
9 Fim da funo principal.

10 Funo de processamento e impresso do relatrio
11 Declarao e atribuio de variveis;
12 Definio dos filtros de impresso, avaliando o bando de dados em uso pela aplicao;
13 Atualizao da rgua de processamento com a quantidade de registros que ser processada;
14 Estrutura principal de repetio para impresso dos dados do relatrio;
15 Controle da impresso do cabealho utilizando a funo Cabec();
16 Impresso dos totais do relatrio;
17 Impresso do rodap da ltima pgina do relatrio utilizando a funo Roda();
18 Limpeza dos arquivos e ndices temporrios criados para o processamento();
19 Tratamento da visualizao do relatrio (impresso em disco) atravs da funo OurSpool()
20 Tratamentos adicionais ao relatrio, de acordo com necessidades especficas;
21 Liberao do buffer de impresso, seja para impressora, seja para limpeza do contedo
visualizado em tela, utilizando a funo MS_FLUSH()

22 Fim da funo de processamento e impresso do relatrio

23 Funo de atualizao do arquivo de perguntas
24 Declarao e atribuio de variveis;
25 Opo 01: Adio individual de cada pergunta no SX1 utilizando a funo PUTSX1()

Criao de um array individual no formato utilizado pela PUTSX1() contendo apenas
as informaes da pergunta que ser adicionada no SX1.
25 Opo 02: Adio de um grupo de perguntas no SX1 utilizando a funo AJUSTASX1()

Criao de um array no formato utilizado pela AJUSTASX1() contendo todas as
perguntas que sero atualizadas.

26 Fim da funo de atualizao do arquivo de perguntas



- 239 -

ADVPL Completo


Funo Principal


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | I nf or m| Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 07 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a ger ar r el at r i o ut i l i zando as f unes |
/ / | | Set Pr i nt ( ) e Set Def aul t ( ) . |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

User Funct i on I NFORM( )
/ / +- - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Decl ar aes de var i vei s
/ / +- - - - - - - - - - - - - - - - - - - - - - - - -

Local cDesc1 : = " Est e r el at r i o i r i mpr i mi r i nf or maes do cont as a pagar
conf or me"
Local cDesc2 : = " par met r os i nf or mado. Ser ger ado umar qui vo no di r et r i o "
Local cDesc3 : = " Spool - I NFORM_????. XLS, onde ???? e o nome do usur i o. "

Pr i vat e cSt r i ng : = " SE2"
Pr i vat e Tamanho : = " M"
Pr i vat e aRet ur n : = { " Zebr ado" , 2, " Admi ni st r ao" , 2, 2, 1, " " , 1 }
Pr i vat e wnr el : = " I NFORM"
Pr i vat e NomePr og : = " I NFORM"
Pr i vat e nLast Key : = 0
Pr i vat e Li mi t e : = 132
Pr i vat e Ti t ul o : = " T t ul o a Pagar - Or demde "
Pr i vat e cPer g : = " I NFORM"
Pr i vat e nTi po : = 0
Pr i vat e cbCont : = 0
Pr i vat e cbTxt : = " r egi st r o( s) l i do( s) "
Pr i vat e Li : = 80
Pr i vat e m_pag : = 1
Pr i vat e aOr d : = {}
Pr i vat e Cabec1 : = " PREFI XO TI TULO PARCELA TI P EMI SSAO VENCTO VENCTO"
Pr i vat e Cabec1 += " REAL VLR. ORI GI NAL PAGO SALDO "
Pr i vat e Cabec2 : = " "
/ *
+- - - - - - - - - - - - - - - - - - - - - -
| Par met r os do aRet ur n
+- - - - - - - - - - - - - - - - - - - - - -
aRet ur n - Pr eenchi do pel o Set Pr i nt ( )
aRet ur n[ 1] - Reser vado par a f or mul r i o
aRet ur n[ 2] - Reser vado par a numer o de vi as
aRet ur n[ 3] - Dest i nat r i o
aRet ur n[ 4] - For mat o 1=Pai sagem2=Ret r at o
aRet ur n[ 5] - M di a 1- Di sco 2=I mpr essor a
aRet ur n[ 6] Por t a ou ar qui vo 1- Lpt 1. . . 4- Com1. . .
aRet ur n[ 7] - Expr esso do f i l t r o
aRet ur n[ 8] - Or dema ser sel eci onada
aRet ur n[ 9] [ 10] [ n] - Campos a pr ocessar se houver
*/




Continuao:

- 240 -

ADVPL Completo



AADD( aOr d, " For necedor " )
AADD( aOr d, " Ti t ul o" )
AADD( aOr d, " Emi sso" )
AADD( aOr d, " Venci ment o" )
AADD( aOr d, " Venct o. Real " )

/ / Par met r os de per gunt as par a o r el at r i o
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | mv_par 01 - For necedor de ? 999999 |
/ / | mv_par 02 - For necedor at e ? 999999 |
/ / | mv_par 03 - Ti po de ? XXX |
/ / | mv_par 04 - Ti po at e ? XXX |
/ / | mv_par 05 - Venci ment o de ? 99/ 99/ 99 |
/ / | mv_par 06 - Venci ment o at e ? 99/ 99/ 99 |
/ / | mv_par 07 - Agl ut . For necedor ? Si m/ No |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
Cr i aSx1( )

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Di sponi bi l i za par a usur i o di gi t ar os par met r os
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Per gunt e( cPer g, . F. )
/ / cPer g - > Nome do gr upo de per gunt as, . T. most r a a t el a, ;
/ / . F. soment e car r ega as var i vei s

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Sol i ci t a ao usur i o a par amet r i zao do r el at r i o.
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
wnr el : =
Set Pr i nt ( cSt r i ng, wnr el , cPer g, @Ti t ul o, cDesc1, cDesc2, cDesc3, . F. , aOr d, . F. , ;
Tamanho, . F. , . F. )
/ / Set Pr i nt ( cAl i as, cNome, cPer g, cDesc, cCnt 1, cCnt 2, cCnt 3, l Di c, aOr d, l Compr es, ;
/ / cSi ze, aFi l t er , l Fi l t r o, l Cr yst al , cNameDr v, l NoAsk, l Ser ver , cPor t ToPr i nt )

/ / +- - - - - - - - - - - - - - - - - - - -
/ / | Se t ecl ar ESC, sai r
/ / +- - - - - - - - - - - - - - - - - - - -
I f nLast Key == 27
Ret ur n
Endi f

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Est abel ece os padr es par a i mpr esso, conf or me escol ha do usur i o
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Set Def aul t ( aRet ur n, cSt r i ng)

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Ver i f i car se ser r eduzi do ou nor mal
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
nTi po : = I I F( aRet ur n[ 4] == 1, 15, 18)

/ / +- - - - - - - - - - - - - - - - - - - -
/ / | Se t ecl ar ESC, sai r
/ / +- - - - - - - - - - - - - - - - - - - -
I f nLast Key == 27
Ret ur n
Endi f

Continuao:

- 241 -

ADVPL Completo



/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Chama f uno que pr ocessa os dados
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Rpt St at us( {| l End| I mpRel ( @l End) }, Ti t ul o, " Pr ocessando e i mpr i mi ndo dados, ;
aguar de. . . " , . T. )

Ret ur n

Funo de processamento e impresso


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | I mpRel | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 07 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na de pr ocessament o e i mpr esso. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

St at i c Funct i on I mpRel ( l End)

Local nI ndi ce : = 0
Local cAr q : = " "
Local cI ndi ce : = " "
Local cFi l t r o : = " "
Local aCol : = {}
Local cFor nec : = " "
Local nVal or : = 0
Local nPago : = 0
Local nSal do : = 0
Local nT_Val or : = 0
Local nT_Pago : = 0
Local nT_Sal do : = 0
Local cAr qExcel : = " "
Local cAl i asI mp
Local oExcel App

Ti t ul o += aOr d[ aRet ur n[ 8] ]

#I FNDEF TOP
cAl i asI mp : = " SE2"

cFi l t r o : = " E2_FI LI AL == ' " +xFi l i al ( " SE2" ) +" ' "
cFi l t r o += " . And. E2_FORNECE >= ' " +mv_par 01+" ' "
cFi l t r o += " . And. E2_FORNECE <= ' " +mv_par 02+" ' "
cFi l t r o += " . And. E2_TI PO >= ' " +mv_par 03+" ' "
cFi l t r o += " . And. E2_TI PO <= ' " +mv_par 04+" ' "
cFi l t r o += " . And. Dt os( E2_VENCTO) >= ' " +Dt os( mv_par 05) +" ' "
cFi l t r o += " . And. Dt os( E2_VENCTO) <= ' " +Dt os( mv_par 06) +" ' "

I f aRet ur n[ 8] == 1 / / For necedor
cI ndi ce : = " E2_FORNECE+E2_LOJ A+E2_NUM"
El sei f aRet ur n[ 8] == 2 / / Ti t ul o
cI ndi ce : = " E2_NUM+E2_FORNECE+E2_LOJ A"
El sei f aRet ur n[ 8] == 3 / / Emi ssao

Continuao:


- 242 -

ADVPL Completo


cI ndi ce : = " Dt os( E2_EMI SSAO) +E2_FORNECE+E2_LOJ A"
El sei f aRet ur n[ 8] == 4 / / Venci ment o
cI ndi ce : = " Dt os( E2_VENCTO) +E2_FORNECE+E2_LOJ A"
El sei f aRet ur n[ 8] == 5 / / Venci ment o Real
cI ndi ce : = " Dt os( E2_VENCREA) +E2_FORNECE+E2_LOJ A"
Endi f

cAr q : = Cr i aTr ab( NI L, . F. )
dbSel ect Ar ea( cAl i asI mp)
I ndRegua( cAl i asI mp, cAr q, cI ndi ce, , cFi l t r o)
nI ndi ce : = Ret I ndex( )
nI ndi ce : = nI ndi ce + 1
dbSet I ndex( cAr q+Or dBagExt ( ) )
dbSet Or der ( nI ndi ce)
#ELSE
cAl i asI mp : = Get Next Al i as( )

cQuer y : = " SELECT "
cQuer y += " E2_PREFI XO, E2_NUM, E2_PARCELA, E2_TI PO, E2_FORNECE, E2_LOJ A,
E2_NOMFOR, "
cQuer y += " E2_EMI SSAO, E2_VENCTO, E2_VENCREA, E2_VALOR, E2_SALDO "
cQuer y += " FROM " +Ret Sql Name( " SE2" ) +" "
cQuer y += " WHERE E2_FI LI AL = ' " +xFi l i al ( " SE2" ) +" ' "
cQuer y += " AND E2_FORNECE >= ' " +mv_par 01+" ' "
cQuer y += " AND E2_FORNECE <= ' " +mv_par 02+" ' "
cQuer y += " AND E2_TI PO >= ' " +mv_par 03+" ' "
cQuer y += " AND E2_TI PO <= ' " +mv_par 04+" ' "
cQuer y += " AND E2_VENCTO >= ' " +Dt os( mv_par 05) +" ' "
cQuer y += " AND E2_VENCTO <= ' " +Dt os( mv_par 06) +" ' "
cQuer y += " AND D_E_L_E_T_ <> ' *' "
cQuer y += " ORDER BY "

I f aRet ur n[ 8] == 1 / / For necedor
cQuer y += " E2_FORNECE, E2_LOJ A, E2_NUM"
El sei f aRet ur n[ 8] == 2 / / Ti t ul o
cQuer y += " E2_NUM, E2_FORNECE, E2_LOJ A"
El sei f aRet ur n[ 8] == 3 / / Emi ssao
cQuer y += " E2_EMI SSAO, E2_FORNECE, E2_LOJ A"
El sei f aRet ur n[ 8] == 4 / / Venci ment o
cQuer y += " E2_VENCTO, E2_FORNECE, E2_LOJ A"
El sei f aRet ur n[ 8] == 5 / / Venci ment o Real
cQuer y += " E2_VENCREA, E2_FORNECE, E2_LOJ A"
Endi f

dbUseAr ea( . T. , " TOPCONN" , TcGenQr y( , , cQuer y) , cAl i asI mp, . T. , . F. )
dbSel ect Ar ea( cAl i asI mp)

/ * I nst r uo SQL Embedded
- - - - - - - - - - - - - - - - - - - - - -
I f aRet ur n[ 8] == 1 / / For necedor
cOr der : = " E2_FORNECE, E2_LOJ A, E2_NUM"
El sei f aRet ur n[ 8] == 2 / / Ti t ul o
cOr der : = " E2_NUM, E2_FORNECE, E2_LOJ A"
El sei f aRet ur n[ 8] == 3 / / Emi ssao
cOr der : = " E2_EMI SSAO, E2_FORNECE, E2_LOJ A"
El sei f aRet ur n[ 8] == 4 / / Venci ment o
cOr der : = " E2_VENCTO, E2_FORNECE, E2_LOJ A"


Continuao:

- 243 -

ADVPL Completo



El sei f aRet ur n[ 8] == 5 / / Venci ment o Real
cOr der : = " E2_VENCREA, E2_FORNECE, E2_LOJ A"
Endi f

Begi nSQL Al i as cAl i asI mp
Col umn E2_EMI SSAO As Dat e
Col umn E2_VENCTO As Dat e
Col umn E2_VENCREA As Dat e
Col umn E2_VALOR As Numer i c( 12)
Col umn E2_SALDO As Numer i c( 12)
%NoPar ser %

SELECT E2_PREFI XO, E2_NUM, E2_PARCELA, E2_TI PO, E2_FORNECE,
E2_LOJ A, E2_NOMFOR, E2_EMI SSAO, E2_VENCTO, E2_VENCREA, E2_VALOR,
E2_SALDO
FROM %Tabl e: SE2
WHERE
E2_FI LI AL = %xFi l i al %AND
E2_FORNECE BETWEEN %Exp: mv_par 01%AND %Exp: mv_par 02%AND
E2_TI PO BETWEEN%Exp: mv_par 03%AND %Exp: mv_par 04%AND
E2_VENCTO BETWEEN %Exp: mv_par 05%AND %Exp: mv_par 06%AND
%Not Del %
ORDER BY %Or der : cOr der %
EndSQL
*/
#ENDI F

dbGoTop( )
Set Regua( 0)

/ / +- - - - - - - - - - - - - - - - - - - -
/ / | Col una de i mpr esso
/ / +- - - - - - - - - - - - - - - - - - - -
AADD( aCol , 004 ) / / Pr ef i xo
AADD( aCol , 012 ) / / Ti t ul o
AADD( aCol , 024 ) / / Par cel a
AADD( aCol , 031 ) / / Ti po
AADD( aCol , 036 ) / / Emi ssao
AADD( aCol , 046 ) / / Venci ment o
AADD( aCol , 058 ) / / Venci ment o Real
AADD( aCol , 070 ) / / Val or Or i gi nal
AADD( aCol , 090 ) / / Pago
AADD( aCol , 110 ) / / Sal do

cFor nec : = ( cAl i asI mp) - >E2_FORNECE+( cAl i asI mp) - >E2_LOJ A

Whi l e ! Eof ( ) . And. ! l End

I f Li > 55
Cabec( Ti t ul o, Cabec1, Cabec2, NomePr og, Tamanho, nTi po)
Endi f







Continuao:

- 244 -

ADVPL Completo



@Li , aCol [ 1] PSay " Cod/ Loj / Nome: " +( cAl i asI mp) - >E2_FORNECE+;
" - " +( cAl i asI mp) - >E2_LOJ A+" " +( cAl i asI mp) - >E2_NOMFOR
Li ++

Whi l e ! Eof ( ) . And. ! l End . And. ;
( cAl i asI mp) - >E2_FORNECE+( cAl i asI mp) - >E2_LOJ A == cFor nec

I ncRegua( )

I f Li > 55
Cabec( Ti t ul o, Cabec1, Cabec2, NomePr og, Tamanho, nTi po)
Endi f

I f mv_par 07 == 2
@Li , aCol [ 1] PSay ( cAl i asI mp) - >E2_PREFI XO
@Li , aCol [ 2] PSay ( cAl i asI mp) - >E2_NUM
@Li , aCol [ 3] PSay ( cAl i asI mp) - >E2_PARCELA
@Li , aCol [ 4] PSay ( cAl i asI mp) - >E2_TI PO
@Li , aCol [ 5] PSay ( cAl i asI mp) - >E2_EMI SSAO
@Li , aCol [ 6] PSay ( cAl i asI mp) - >E2_VENCTO
@Li , aCol [ 7] PSay ( cAl i asI mp) - >E2_VENCREA
@Li , aCol [ 8] PSay ( cAl i asI mp) - >E2_VALOR ;
PI CTURE " @E 99, 999, 999, 999. 99"
@Li , aCol [ 9] PSay ( cAl i asI mp) - >E2_VALOR - ;
( cAl i asI mp) - >E2_SALDO ;
PI CTURE " @E 99, 999, 999, 999. 99"
@Li , aCol [ 10] PSay ( cAl i asI mp) - >E2_SALDO ;
PI CTURE " @E 99, 999, 999, 999. 99"
Li ++
Endi f

nVal or += ( cAl i asI mp) - >E2_VALOR
nPago += ( ( cAl i asI mp) - >E2_VALOR- ( cAl i asI mp) - >E2_SALDO)
nSal do += ( cAl i asI mp) - >E2_SALDO

nT_Val or += ( cAl i asI mp) - >E2_VALOR
nT_Pago += ( ( cAl i asI mp) - >E2_VALOR- ( cAl i asI mp) - >E2_SALDO)
nT_Sal do += ( cAl i asI mp) - >E2_SALDO

dbSki p( )
End

@Li , 000 PSay Repl i cat e( " - " , Li mi t e)
Li ++
@Li , aCol [ 1] PSay " TOTAL. . . . . "
@Li , aCol [ 8] PSay nVal or PI CTURE " @E 99, 999, 999, 999. 99"
@Li , aCol [ 9] PSay nPago PI CTURE " @E 99, 999, 999, 999. 99"
@Li , aCol [ 10] PSay nSal do PI CTURE " @E 99, 999, 999, 999. 99"
Li +=2

cFor nec : = ( cAl i asI mp) - >E2_FORNECE+( cAl i asI mp) - >E2_LOJ A
nVal or : = 0
nPago : = 0
nSal do : = 0

End


Continuao:

- 245 -

ADVPL Completo



I f l End
@Li , aCol [ 1] PSay cCancel
Ret ur n
Endi f

@Li , 000 PSay Repl i cat e( " =" , Li mi t e)
Li ++
@Li , aCol [ 1] PSay " TOTAL GERAL. . . . . "
@Li , aCol [ 8] PSay nT_Val or PI CTURE " @E 99, 999, 999, 999. 99"
@Li , aCol [ 9] PSay nT_Pago PI CTURE " @E 99, 999, 999, 999. 99"
@Li , aCol [ 10] PSay nT_Sal do PI CTURE " @E 99, 999, 999, 999. 99"

I f Li <> 80
Roda( cbCont , cbTxt , Tamanho)
Endi f

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Ger a ar qui vo do t i po . DBF comext enso . XLS p/ usur i o abr i r no Excel
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cAr qExcel : = __RELDI R+NomePr og+" _" +Subst r ( cUsuar i o, 7, 4) +" . XLS"
Copy To &cAr qExcel

#I FNDEF TOP
dbSel ect Ar ea( cAl i asI mp)
Ret I ndex( cAl i asI mp)
Set Fi l t er To
#ELSE
dbSel ect Ar ea( cAl i asI mp)
dbCl oseAr ea( )
#ENDI F
dbSet Or der ( 1)
dbGoTop( )

I f aRet ur n[ 5] == 1
Set Pr i nt er TO
dbCommi t Al l ( )
Our Spool ( wnr el )
EndI f

/ / +- - - - - - - - - - - - - - - - - - - - - - - -
/ / | Abr i r pl ani l ha MS- Excel
/ / +- - - - - - - - - - - - - - - - - - - - - - - -
I f mv_par 08 == 1
__CopyFi l e( cAr qExcel , " c: \ " +NomePr og+" _" +Subst r ( cUsuar i o, 7, 4) +" . XLS" )
I f ! ApOl eCl i ent ( " MsExcel " )
MsgAl er t ( " MsExcel no i nst al ado" )
Ret ur n
Endi f
oExcel App : = MsExcel ( ) : New( )
oExcel App: Wor kBooks: Open( " c: \ " +NomePr og+" _" +Subst r ( cUsuar i o, 7, 4) +" . XLS" )
oExcel App: Set Vi si bl e( . T. )
Endi f

Ms_Fl ush( )

Ret ur n

- 246 -

ADVPL Completo



Funo para gerar o grupo de parmetros no SX1


/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Rot i na | Cr i aSX1 | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 07 |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Descr . | Rot i na par a cr i ar o gr upo de par met r os. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Uso | Par a t r ei nament o e capaci t ao. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
St at i c Funct i on Cr i aSx1( )
Local aP : = {}
Local i : = 0
Local cSeq
Local cMvCh
Local cMvPar
Local aHel p : = {}

/ ******
Par met r os da f uno padr o
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Put SX1( cGr upo, ; cOr dem, ;
cPer gunt , cPer Spa, cPer Eng, ;
cVar , ;
cTi po, ;
nTamanho, ;
nDeci mal , ;
nPr esel , ;
cGSC, ;
cVal i d, ;
cF3, ;
cGr pSxg, ;
cPyme, ;
cVar 01, ;
cDef 01, cDef Spa1, cDef Eng1, ;
cCnt 01, ;
cDef 02, cDef Spa2, cDef Eng2, ;
cDef 03, cDef Spa3, cDef Eng3, ;
cDef 04, cDef Spa4, cDef Eng4, ;
cDef 05, cDef Spa5, cDef Eng5, ;
aHel pPor , aHel pEng, aHel pSpa, ;
cHel p)

Car act er st i ca do vet or p/ ut i l i zao da f uno SX1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[ n, 1] - - > t ext o da per gunt a
[ n, 2] - - > t i po do dado
[ n, 3] - - > t amanho
[ n, 4] - - > deci mal
[ n, 5] - - > obj et o G=get ou C=choi ce
[ n, 6] - - > val i dao
[ n, 7] - - > F3
[ n, 8] - - > def i ni o 1
[ n, 9] - - > def i ni o 2
[ n, 10] - > def i ni o 3
[ n, 11] - > def i ni o 4
[ n, 12] - > def i ni o 5
***/


- 247 -

ADVPL Completo


Continuao:

AADD( aP, {" For necedor de" , " C" , 6, 0, " G" , " " , " SA2" , " " , " " , " " , " " , " " })
AADD( aP, {" For necedor at e" , " C" , 6, 0, " G" , " ( mv_par 02>=mv_par 01) " , " SA2" , ;
" " , " " , " " , " " , " " })
AADD( aP, {" Ti po de" , " C" , 3, 0, " G" , " " , " 05" , " " , " " , " " , " " , " " })
AADD( aP, {" Ti po at e" , " C" , 3, 0, " G" , " ( mv_par 04>=mv_par 03) " , " 05" , " " , ;
" " , " " , " " , " " })
AADD( aP, {" Venci ment o de" , " D" , 8, 0, " G" , " " , " " , " " , " " , " " , " " , " " })
AADD( aP, {" Venci ment o at e" , " D" , 8, 0, " G" , " ( mv_par 06>=mv_par 05) " , " " , ;
" " , " " , " " , " " , " " })
AADD( aP, {" Agl ut i nar pagt o. de f or nec. " , " N" , 1, 0, " C" , " " , " " , ;
" Si m" , " No" , " " , " " , " " })
AADD( aP, {" Abr i r pl ani l ha MS- Excel " , " N" , 1, 0, " C" , " " , " " , ;
" Si m" , " No" , " " , " " , " " })

AADD( aHel p, {" I nf or me o cdi go do f or necedor . " , " i ni ci al . " })
AADD( aHel p, {" I nf or me o cdi go do f or necedor . " , " f i nal . " })
AADD( aHel p, {" Ti po de t t ul o i ni ci al . " })
AADD( aHel p, {" Ti po de t t ul o f i nal . " })
AADD( aHel p, {" Di gi t e a dat a do venci ment o i ni ci al . " })
AADD( aHel p, {" Di gi t e a dat a do venci ment o f i nal . " })
AADD( aHel p, {" Agl ut i nar os t t ul os do mesmo f or ne- " , ;
" cedor t ot al i zando seus val or es. " })
AADD( aHel p, {" Ser ger ada uma pl ani l ha par a " , ;
" MS- Excel , abr i r est a pl ani l ha?" })

For i : =1 To Len( aP)
cSeq : = St r Zer o( i , 2, 0)
cMvPar : = " mv_par " +cSeq
cMvCh : = " mv_ch" +I I F( i <=9, Chr ( i +48) , Chr ( i +87) )

Put Sx1( cPer g, ;
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] , ;
aHel p[ i ] , ;
{}, ;
{}, ;
" " )
Next i

Ret ur n


- 248 -

ADVPL Completo


25. Manipulao de arquivos I


25.1. Gerao e leitura de arquivos em formato texto

Arquivos do tipo texto (tambm conhecidos como padro TXT) so arquivos com registros de
tamanho varivel. A indicao do final de cada registro representada por dois bytes, 0D
0A em hexadecimal ou 13 10 em decimal ou, ainda, CR LF para padro ASCII.

Apesar do tamanho dos registros ser varivel, a maioria dos sistemas gera este tipo de arquivo
com registros de tamanho fixo, de acordo com um layout especfico que indica quais
so os dados gravados.

Para ilustrar estes procedimentos, sero gerados arquivos textos, com duas famlias de
funes:

1) Famlia: nesta famlia sero utilizadas as funes: FCreate(), FWrite(), FClose(),
FSeek(), FOpen() e FRead().


2) Famlia: nesta famlia sero utilizadas as funes: FT_FUse(), FT_FGoTop(),
FT_FLastRec(), FT_FEof(), FT_FReadLn(), FT_FSkip(), FT_FGoto(), FT_FRecno().




A diferena entre as duas famlias, est na leitura do arquivo texto.
Quando se tratar de arquivo texto com tamanho fixo das linhas, podero
ser utilizadas as duas famlias para leitura do arquivo, porm, quando se
tratar de arquivo texto com tamanho varivel das linhas, somente
poder ser utiliza a segunda famlia, representada pelas funes:
FT_FUse(), FT_FGoTo(), FT_FRecno(), FT_FGoTop(), FT_FLastRec(),
FT_FEof(), FT_FReadLn() e FT_FSkip().














- 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


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | Ger aTXT | Aut or | SERGI O FUZI NAKA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Ger a o ar qui vo TXT, a par t i r do Cadast r o de Cl i ent es |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Ger aTXT( )

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Decl ar ao de Var i vei s |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
Local oGer aTxt
Pr i vat e cPer g : = " EXPSA1"
Pr i vat e cAl i as : = " SA1"

/ / Cr i aSx1( cPer g)
/ / Per gunt e( cPer g, . F. )
dbSel ect Ar ea( cAl i as)
dbSet Or der ( 1)

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Mont agemda t el a de pr ocessament o. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

DEFI NE MSDI ALOG oGer aTxt TI TLE OemToAnsi ( " Ger ao de Ar qui vo Text o" ) ;
FROM 000, 000 TO 200, 400 PI XEL

@005, 005 TO 095, 195 OF oGer aTxt PI XEL
@010, 020 Say " Est e pr ogr ama i r a ger ar umar qui vo t ext o, conf or me os par ame- " ;
OF oGer aTxt PI XEL
@018, 020 Say " t r os def i ni dos pel o usur i o, comos r egi st r os do ar qui vo de " ;
OF oGer aTxt PI XEL
@026, 020 Say " SA1 " OF oGer aTxt PI XEL

DEFI NE SBUTTON FROM 070, 030 TYPE 1 ;
ACTI ON ( OkGer aTxt ( ) , oGer aTxt : End( ) ) ENABLE OF oGer aTxt

DEFI NE SBUTTON FROM 070, 070 TYPE 2 ;
ACTI ON ( oGer aTxt : End( ) ) ENABLE OF oGer aTxt

DEFI NE SBUTTON FROM 070, 110 TYPE 5 ;
ACTI ON ( Per gunt e( cPer g, . T. ) ) ENABLE OF oGer aTxt

ACTI VATE DI ALOG oGer aTxt CENTERED

Ret ur n Ni l


- 250 -

ADVPL Completo


Exemplo (continuao):

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | OKGERATXT | Aut or | SERGI O FUZI NAKA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo chamada pel o bot o OK na t el a i ni ci al de pr ocessament o. |
| | Execut a a ger ao do ar qui vo t ext o. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on OkGer aTxt

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Cr i a o ar qui vo t ext o
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Pr i vat e cAr qTxt : = " \ SYSTEM\ EXPSA1. TXT"
Pr i vat e nHdl : = f Cr eat e( cAr qTxt )

I f nHdl == - 1
MsgAl er t ( " O ar qui vo de nome " +cAr qTxt +" no pode ser execut ado! Ver i f i que os
par met r os. " , " At eno! " )
Ret ur n
Endi f


/ / I ni ci al i za a r gua de pr ocessament o
Pr ocessa( {| | RunCont ( ) }, " Pr ocessando. . . " )

Ret ur n Ni l

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | RUNCONT | Aut or | SERGI O FUZI NAKA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo auxi l i ar chamada pel a PROCESSA. A f uno PROCESSA |
| | mont a a j anel a coma r gua de pr ocessament o. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on RunCont

Local cLi n

dbSel ect Ar ea( cAl i as)
dbGoTop( )
Pr ocRegua( RecCount ( ) ) / / Numer o de r egi st r os a pr ocessar

Whi l e ( cAl i as) - >( ! EOF( ) )
/ / I ncr ement a a r gua
I ncPr oc( )

cLi n : = ( cAl i as) - >A1_FI LI AL
cLi n += ( cAl i as) - >A1_COD
cLi n += ( cAl i as) - >A1_LOJ A
cLi n += ( cAl i as) - >A1_NREDUZ
cLi n += STRZERO( ( cAl i as) - >A1_MCOMPRA*100, 16) / / 14, 2
cLi n += DTOS( ( cAl i as) - >A1_ULTCOM) / / AAAAMMDD
cLi n += CRLF


- 251 -

ADVPL Completo



Exemplo (continuao):

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Gr avao no ar qui vo t ext o. Test a por er r os dur ant e a gr avao da |
/ / | l i nha mont ada. |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

I f f Wr i t e( nHdl , cLi n, Len( cLi n) ) ! = Len( cLi n)
I f ! MsgAl er t ( " Ocor r eu umer r o na gr avao do ar qui vo. " +;
" Cont i nua?" , " At eno! " )
Exi t
Endi f
Endi f

( cAl i as) - >( dbSki p( ) )
EndDo

/ / O ar qui vo t ext o deve ser f echado, bemcomo o di al ogo cr i ado na f uno
ant er i or
f Cl ose( nHdl )

Ret ur n Ni l


Note que para a gerao do arquivo TXT foram utilizadas, basicamente, as funes
FCreate, FWrite e FClose que, respectivamente, gera o arquivo, adiciona dados e fecha
o arquivo. No exemplo, o formato estabelecido pela concatenao dos dados na
varivel cLin a qual utilizada na gravao dos dados. Para a leitura de dados TXT sero
utilizada as funes FOpen e FRead.

Exemplo: Leitura de arquivo TXT, utilizando a primeira famlia de funes


#I ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | LeTXT | Aut or | SERGI O FUZI NAKA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Lei t ur a de ar qui vo TXT |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */
User Funct i on LeTXT( )

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Decl ar ao de Var i vei s |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

Local cPer g : = " I MPSA1"
Local oLeTxt

Pr i vat e cAl i as : = " SA1"

/ / Cr i aSx1( cPer g)
/ / Per gunt e( cPer g, . F. )


- 252 -

ADVPL Completo



Exemplo (continuao):

dbSel ect Ar ea( cAl i as)
dbSet Or der ( 1)

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / Mont agemda t el a de pr ocessament o |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

DEFI NE MSDI ALOG oLeTxt TI TLE OemToAnsi ( " Lei t ur a de Ar qui vo Text o" ) ;
FROM 000, 000 TO 200, 400 PI XEL
@005, 005 TO 095, 195 OF oLeTxt PI XEL
@10, 020 Say " Est e pr ogr ama i r a l er o cont edo de umar qui vo t ext o, conf or me" ;
OF oLeTxt PI XEL
@18, 020 Say " os par met r os def i ni dos pel o usur i o, comos r egi st r os do
ar qui vo" ;
OF oLeTxt PI XEL
@26, 020 Say " SA1" OF oLeTxt PI XEL

DEFI NE SBUTTON FROM 070, 030 TYPE 1 ;
ACTI ON ( OkLeTxt ( ) , oLeTxt : End( ) ) ENABLE OF oLeTxt

DEFI NE SBUTTON FROM 070, 070 TYPE 2 ;
ACTI ON ( oLeTxt : End( ) ) ENABLE OF oLeTxt

DEFI NE SBUTTON FROM 070, 110 TYPE 5 ;
ACTI ON ( Per gunt e( cPer g, . T. ) ) ENABLE OF oLeTxt
ACTI VATE DI ALOG oLeTxt CENTERED

Ret ur n Ni l

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | OKLETXT | Aut or | SERGI O FUZI NAKA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo chamada pel o bot o OK na t el a i ni ci al de pr ocessament o |
| | Execut a a l ei t ur a do ar qui vo t ext o |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on OkLeTxt ( )

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Aber t ur a do ar qui vo t ext o |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

Pr i vat e cAr qTxt : = " \ SYSTEM\ EXPSA1. TXT"
Pr i vat e nHdl : = f Open( cAr qTxt , 68)

I f nHdl == - 1
MsgAl er t ( " O ar qui vo de nome " +cAr qTxt +" no pode ser aber t o! Ver i f i que os
par met r os. " , " At eno! " )
Ret ur n
Endi f

/ / I ni ci al i za a r gua de pr ocessament o
Pr ocessa( {| | RunCont ( ) }, " Pr ocessando. . . " )
Ret ur n Ni l


- 253 -

ADVPL Completo


Exemplo (continuao):

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | RUNCONT | Aut or | SERGI O FUZI NAKA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo auxi l i ar chamada pel a PROCESSA. A f uno PROCESSA |
| | mont a a j anel a coma r gua de pr ocessament o. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on RunCont

Local nTamFi l e : = 0
Local nTamLi n : = 56
Local cBuf f er : = " "
Local nBt Li dos : = 0
Local cFi l SA1 : = " "
Local cCodSA1 : = " "
Local cLoj aSA1 : = " "

/ / 1234567890123456789012345678901234567890123456789012345678901234567890
/ / 00000000010000000002000000000300000000040000000005000000000600000000070
/ / FFCCCCCCLLNNNNNNNNNNNNNNNNNNNNVVVVVVVVVVVVVVVVDDDDDDDD
/ / A1_FI LI AL - 01, 02 - TAM: 02
/ / A1_COD - 03, 08 - TAM: 06
/ / A1_LOJ A - 09, 10 - TAM: 02
/ / A1_NREDUZ - 11, 30 - TAM: 20
/ / A1_MCOMPRA - 31, 46 - TAM: 14, 2
/ / A1_ULTCOM- 47, 54 - TAM: 08

nTamFi l e : = f Seek( nHdl , 0, 2)
f Seek( nHdl , 0, 0)
cBuf f er : = Space( nTamLi n) / / Var i vel par a cr i ao da l i nha do r egi st r o par a
l ei t ur a

Pr ocRegua( nTamFi l e) / / Numer o de r egi st r os a pr ocessar
Whi l e nBt Li dos < nTamFi l e

/ / I ncr ement a a r gua
I ncPr oc( )

/ / Lei t ur a da pr i mei r a l i nha do ar qui vo t ext o
nBt Li dos += f Read( nHdl , @cBuf f er , nTamLi n)

cFi l SA1 : = Subst r ( cBuf f er , 01, 02) / / - 01, 02 - TAM: 02
cCodSA1 : = Subst r ( cBuf f er , 03, 06) / / - 03, 08 - TAM: 06
cLoj aSA1 : = Subst r ( cBuf f er , 09, 02) / / - 09, 10 - TAM: 02

Whi l e . T.
I F dbSeek( cFi l SA1+cCodSA1+cLoj aSA1)
cCodSA1 : = SOMA1( cCodSA1)
Loop
El se
Exi t
Endi f
Enddo


- 254 -

ADVPL Completo


Exemplo (continuao):

dbSel ect Ar ea( cAl i as)
RecLock( cAl i as, . T. )
( cAl i as) - >A1_FI LI AL : = cFi l SA1 / / - 01, 02 - TAM: 02
( cAl i as) - >A1_COD : = cCodSA1 / / - 03, 08 - TAM: 06
( cAl i as) - >A1_LOJ A : = cLoj aSA1 / / - 09, 10 - TAM: 02
( cAl i as) - >A1_NREDUZ : = Subst r ( cBuf f er , 11, 20)
/ / - 11, 30 - TAM: 20
( cAl i as) - >A1_MCOMPRA : = Val ( Subst r ( cBuf f er , 31, 16) ) / 100
/ / - 31, 46 - TAM: 14, 2
( cAl i as) - >A1_ULTCOM : = STOD( Subst r ( cBuf f er , 47, 08) )
/ / - 47, 54 - TAM: 08
MSUnLock( )

EndDo

/ / O ar qui vo t ext o deve ser f echado, bemcomo o di al ogo cr i ado na f uno
ant er i or .
f Cl ose( nHdl )

Ret ur n Ni l


2. Famlia de funes de gravao e leitura de arquivos texto


Exemplo: Leitura de arquivo TXT, utilizando a segunda famlia de funes


#I ncl ude " Pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Pr ogr ama | LeAr qTXT | Aut or | Robson Lui z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Lei t ur a de ar qui vo TXT |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */
User Funct i on LeAr qTxt ( )

Pr i vat e nOpc : = 0
Pr i vat e cCadast r o : = " Ler ar qui vo t ext o"
Pr i vat e aSay : = {}
Pr i vat e aBut t on : = {}

AADD( aSay, " O obj et i vo dest a r ot i na e ef et uar a l ei t ur a emumar qui vo t ext o" )

AADD( aBut t on, { 1, . T. , {| | nOpc : = 1, FechaBat ch( ) }})
AADD( aBut t on, { 2, . T. , {| | FechaBat ch( ) }} )

For mBat ch( cCadast r o, aSay, aBut t on )

I f nOpc == 1
Pr ocessa( {| | I mpor t ( ) }, " Pr ocessando. . . " )
Endi f
Ret ur n Ni l

- 255 -

ADVPL Completo


Exemplo (continuao):

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Funo - I mpor t ( )
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
St at i c Funct i on I mpor t ( )

Local cBuf f er : = " "
Local cFi l eOpen : = " "
Local cTi t ul o1 : = " Sel eci one o ar qui vo"
Local cExt ens : = " Ar qui vo TXT | *. t xt "

/ ***
* _________________________________________________________
* cGet Fi l e( <ExpC1>, <ExpC2>, <ExpN1>, <ExpC3>, <ExpL1>, <ExpN2>)
*
* <ExpC1> - Expr esso de f i l t r o
* <ExpC2> - Ti t ul o da j anel a
* <ExpN1> - Numer o de mascar a def aul t 1 par a *. Exe
* <ExpC3> - Di r et r i o i ni ci al se necessr i o
* <ExpL1> - . F. bot o sal var - . T. bot o abr i r
* <ExpN2> - Mascar a de bi t s par a escol her as opes de vi sual i zao do obj et o
* ( pr const . ch)
*/
cFi l eOpen : = cGet Fi l e( cExt ens, cTi t ul o1, , cMai nPat h, . T. )

I f ! Fi l e( cFi l eOpen)
MsgAl er t ( " Ar qui vo t ext o: " +cFi l eOpen+" no l ocal i zado" , cCadast r o)
Ret ur n
Endi f

FT_FUSE( cFi l eOpen) / / ABRI R
FT_FGOTOP( ) / / PONTO NO TOPO
Pr ocRegua( FT_FLASTREC( ) ) / / QTOS REGI STROS LER

Whi l e ! FT_FEOF( ) / / FACA ENQUANTO NAO FOR FI M DE ARQUI VO
I ncPr oc( )

/ / Capt ur ar dados
cBuf f er : = FT_FREADLN( ) / / LENDO LI NHA

cMsg : = " Fi l i al : " +SubSt r ( cBuf f er , 01, 02) + Chr ( 13) +Chr ( 10)
cMsg += " Cdi go: " +SubSt r ( cBuf f er , 03, 06) + Chr ( 13) +Chr ( 10)
cMsg += " Loj a: " +SubSt r ( cBuf f er , 09, 02) + Chr ( 13) +Chr ( 10)
cMsg += " Nome f ant asi a: " +SubSt r ( cBuf f er , 11, 15) + Chr ( 13) +Chr ( 10)
cMsg += " Val or : " +SubSt r ( cBuf f er , 26, 14) + Chr ( 13) +Chr ( 10)
cMsg += " Dat a: " +SubSt r ( cBuf f er , 40, 08) + Chr ( 13) +Chr ( 10)

MsgI nf o( cMsg)

FT_FSKI P( ) / / pr xi mo r egi st r o no ar qui vo t xt
EndDo

FT_FUSE( ) / / f echa o ar qui vo t xt
MsgI nf o( " Pr ocesso f i nal i zada" )
Ret ur n Ni l


- 256 -

ADVPL Completo



26. Oficina de programao I

26.1. Interfaces com sintaxe clssica

A sintaxe convencional para definio de componentes visuais da linguagem ADVPL depende
diretamente no include especificado no cabealho do fonte. Os dois includes disponveis para o
ambiente ADVPL Protheus so:

E RWMAKE.CH: permite a utilizao da sintaxe CLIPPER na definio dos componentes
visuais.

E PROTHEUS.CH: permite a utilizao da sintaxe ADVPL convencional, a qual um
aprimoramento da sintaxe CLIPPER, com a incluso de novos atributos para os
componentes visuais disponibilizados no ERP Protheus.

Para ilustrar a diferena na utilizao destes dois includes, segue abaixo as diferentes
definies para o componentes Dialog e MsDialog:

Exempl o 01 I ncl ude Rwmake. ch

#i ncl ude r wmake. ch

@0, 0 TO 400, 600 DI ALOG oDl g TI TLE " J anel a emsi nt axe Cl i pper "
ACTI VATE DI ALOG oDl g CENTERED


Exempl o 02 I ncl ude Pr ot heus. ch

#i ncl ude pr ot heus. ch

DEFI NE MSDI ALOG oDl g TI TLE " J anel a emsi nt axe ADVPL " FROM 000, 000 TO 400, 600
PI XEL
ACTI VATE MSDI ALOG oDl g CENTERED



Ambas as sintaxes produziro o mesmo efeito quando compiladas e
executadas no ambiente Protheus, mas deve ser utilizada sempre a sintaxe
ADVPL atravs do uso do include PROTHEUS.CH

Os componentes da interface visual que sero tratados neste tpico, utilizando a sintaxe
clssica da linguagem 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
Define o componente visual Button, o qual permite a incluso de botes de
operao na tela da interface, os quais sero visualizados somente com um
texto simples para sua identificao.

CHECKBOX()

Sintaxe
@ nLinha,nColuna CHECKBOX oCheckBox VAR VARIAVEL PROMPT
cTexto WHEN WHEN UNIDADE OF oObjetoRef SIZE nLargura,nAltura
MESSAGE cMensagem
Descrio
Define o componente visual CheckBox, o qual permite a utilizao da uma
marca para habilitar ou no uma opo escolhida, sendo esta marca
acompanhada de um texto explicativo. Difere do RadioMenu pois cada
elemento do check nico, mas o Radio permite a utilizao de uma lista
junto com um controle de seleo.

COMBOBOX()

Sintaxe
@ nLinha,nColuna COMBOBOX VARIAVEL ITEMS AITENS SIZE
nLargura,nAltura UNIDADE OF oObjetoRef
Descrio
Define o componente visual ComboBox, o qual permite seleo de um item
dentro de uma lista de opes de textos simples no formato de um vetor.

FOLDER()

Sintaxe
@ nLinha,nColuna FOLDER oFolder OF oObjetoRef PROMPT
&cTexto1,,&cTextoX PIXEL SIZE nLargura,nAltura
Descrio
Define o componente visual Folder, o qual permite a incluso de diversos
Dialogs dentro de uma mesma interface visual. Um Folder pode ser
entendido como um array de Dialogs, aonde cada painel recebe seus
componentes e tem seus atributos definidos independentemente dos demais.

MSDIALOG()

Sintaxe
DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni
TO nLiFim,nColFim OF oObjetoRef UNIDADE
Descrio
Define o componente MSDIALOG(), o qual utilizado como base para os
demais componentes da interface visual, pois um componente MSDIALOG()
uma janela da aplicao.


- 258 -

ADVPL Completo



MSGET()

Sintaxe
@ nLinha, nColuna MSGET VARIAVEL SIZE nLargura,nAltura
UNIDADE OF oObjetoRef F3 cF3 VALID VALID WHEN WHEN PICTURE
cPicture
Descrio
Define o componente visual MSGET, o qual utilizado para captura de
informaes digitveis na tela da interface.


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
Define o componente visual Radio, tambm conhecido como RadioMenu, o
qual seleo de uma opo ou de mltiplas opes atravs de uma marca
para os itens exibidos de uma lista. Difere do componente CheckBox, pois
cada elemento de check sempre nico, e o Radio pode conter um ou mais
elementos.

SAY()

Sintaxe
@ nLinha, nColuna SAY cTexto SIZE nLargura,nAltura UNIDADE OF
oObjetoRef
Descrio
Define o componente visual SAY, o qual utilizado para exibio de textos
em uma tela de interface.

SBUTTON()

Sintaxe
DEFINE SBUTTON FROM nLinha, nColuna TYPE N ACTION AO
STATUS OF oObjetoRef
Descrio
Define o componente visual SButton, o qual permite a incluso de botes de
operao na tela da interface, os quais sero visualizados dependendo da
interface do sistema ERP utilizada somente com um texto simples para sua
identificao, ou com uma imagem (BitMap) pr-definido.


- 259 -

ADVPL Completo



26.2. Rguas de processamento

Os indicadores de progresso ou rguas de processamento disponveis na linguagem ADVPL que
sero abordados neste material so:

RPTSTATUS()
PROCESSA()
MSNEWPROCESS()
MSAGUARDE()
MSGRUN()

26.2.1. RptStatus()

Rgua de processamento simples, com apenas um indicador de progresso, utilizada no
processamento de relatrios do padro SetPrint().

E Sintaxe: RptStatus(bAcao, cMensagem)

E Retorno: Nil

E Parmetros:

bAcao
Bloco de cdigo que especifica a ao que ser executada com
o acompanhamento da rgua de processamento.
cMensagem
Mensagem que ser exibida na rgua de processamento
durante a execuo.
Aparncia







- 260 -

ADVPL Completo



Exemplo: Funo RPTStatus() e acessrias


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GRPTSTATUS | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao das f unes RPTSTATUS( ) |
| | SETREGUA( ) E I NCREGUA( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on GRpt St at us( )
Local aSay : = {}
Local aBut t on : = {}
Local nOpc : = 0
Local cTi t ul o : = " Exempl o de Funes"
Local cDesc1 : = " Est e pr ogr ama exempl i f i ca a ut i l i zao da f uno Pr ocessa( ) em
conj unt o"
Local cDesc2 : = " comas f unes de i ncr ement o Pr ocRegua( ) e I ncPr oc( ) "

Pr i vat e cPer g : = " RPTSTA"

Cr i aSX1( )
Per gunt e( cPer g, . F. )

AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )

AADD( aBut t on, { 5, . T. , {| | Per gunt e( cPer g, . T. ) }} )
AADD( aBut t on, { 1, . T. , {| | nOpc : = 1, FechaBat ch( ) }} )
AADD( aBut t on, { 2, . T. , {| | FechaBat ch( ) }} )

For mBat ch( cTi t ul o, aSay, aBut t on )

I f nOpc <> 1
Ret ur n Ni l
Endi f

Rpt St at us( {| l End| RunPr oc( @l End) }, " Aguar de. . . " , " Execut ando r ot i na. " , . T. )

Ret ur n Ni l


- 261 -

ADVPL Completo


Exemplo: Funes acessrias da RPTStatus()


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | RUNPROC | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo de pr ocessament o execut ada at r avs da RPTSTATUS( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */


St at i c Funct i on RunPr oc( l End)
Local nCnt : = 0

dbSel ect Ar ea( " SX5" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( " SX5" ) +mv_par 01, . T. )

Whi l e ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. X5_TABELA <= mv_par 02
nCnt ++
dbSki p( )
End

dbSeek( xFi l i al ( " SX5" ) +mv_par 01, . T. )

Set Regua( nCnt )
Whi l e ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. X5_TABELA <= mv_par 02
I ncRegua( )
I f l End
MsgI nf o( cCancel , " Fi m" )
Exi t
Endi f
dbSki p( )
End
Ret ur n . T.


SETREGUA()

A funo SetRegua() utilizada para definir o valor mximo da rgua de progresso criada
atravs da funo RptStatus().

E Sintaxe: SetRegua(nMaxProc)

E Parmetros:

nMaxProc Varivel que indica o valor mximo de processamento (passos) que sero
indicados pela rgua.

E Retorno:

Nenhum .



- 262 -

ADVPL Completo


Exemplo:

...

dbSelectArea("SA1")
dbGoTop()
SetRegua(LastRec())
While !Eof()
IncRegua()
If Li > 60
...


INCREGUA()

A funo IncRegua() utilizada para incrementar valor na rgua de progresso criada atravs
da funo RptStatus()

E Sintaxe: IncRegua(cMensagem)

E Parmetros:

cMensagem Mensagem que ser exibida e atualizada na rgua de processamento a cada
execuo da funo IncRegua(), sendo que a taxa de atualizao da
interface controlada pelo Binrio.

E Retorno:

Nenhum .

Exemplo:

...

dbSelectArea("SA1")
dbGoTop()
SetRegua(LastRec())
While !Eof()
IncRegua(Avaliando cliente:+SA1->A1_COD)
If Li > 60
...




- 263 -

ADVPL Completo



26.2.2. Processa()

Rgua de processamento simples, com apenas um indicador de progresso, utilizada no
processamento de rotinas.

E Sintaxe: Processa(bAcao, cMensagem)

E Retorno: Nil

E Parmetros:

bAcao
Bloco de cdigo que especifica a ao que ser executada com
o acompanhamento da rgua de processamento.
cMensagem
Mensagem que ser exibida na rgua de processamento
durante a execuo.
Aparncia




Exemplo: Funo PROCESSA() e acessrias


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GPROCES1 | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao das f unes PROCESSA( ) |
| | PROCREGUA( ) E I NCPROC( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on GPr oces1( )
Local aSay : = {}
Local aBut t on : = {}
Local nOpc : = 0
Local cTi t ul o : = " Exempl o de Funes"
Local cDesc1 : = " Est e pr ogr ama exempl i f i ca a ut i l i zao da f uno Pr ocessa( ) "
Local cDesc2 : = " emconj unt o comas f unes de i ncr ement o Pr ocRegua( ) e"
Local cDesc3 : = " I ncPr oc( ) "



- 264 -

ADVPL Completo



Exempl o ( cont i nuao) :

Pr i vat e cPer g : = " PROCES"

Cr i aSX1( )
Per gunt e( cPer g, . F. )

AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )

AADD( aBut t on, { 5, . T. , {| | Per gunt e( cPer g, . T. ) }} )
AADD( aBut t on, { 1, . T. , {| | nOpc : = 1, FechaBat ch( ) }} )
AADD( aBut t on, { 2, . T. , {| | FechaBat ch( ) }} )

For mBat ch( cTi t ul o, aSay, aBut t on )

I f nOpc <> 1
Ret ur n Ni l
Endi f

Pr ocessa( {| l End| RunPr oc( @l End) }, " Aguar de. . . " , " Execut ando r ot i na. " , . T. )

Ret ur n Ni l

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | RUNPROC | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo de pr ocessament o execut ada at r avs da PROCRSSA( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on RunPr oc( l End)
Local nCnt : = 0

dbSel ect Ar ea( " SX5" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( " SX5" ) +mv_par 01, . T. )

dbEval ( {| x| nCnt ++ }, , {| | X5_FI LI AL==xFi l i al ( " SX5" ) . And. X5_TABELA<=mv_par 02})

dbSeek( xFi l i al ( " SX5" ) +mv_par 01, . T. )

Pr ocRegua( nCnt )
Whi l e ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. X5_TABELA <= mv_par 02
I ncPr oc( " Pr ocessando t abel a: " +SX5- >X5_CHAVE)
I f l End
MsgI nf o( cCancel a, " Fi m" )
Exi t
Endi f
dbSki p( )
End
Ret ur n . T.



- 265 -

ADVPL Completo



SETPROC()

A funo SetProc() utilizada para definir o valor mximo da rgua de progresso criada
atravs da funo Processa().

E Sintaxe: Processa(nMaxProc)

E Parmetros:

nMaxProc Varivel que indica o valor mximo de processamento (passos) que sero
indicados pela rgua.

E Retorno:

Nenhum .

Exemplo:
...
dbSelectArea("SA1")
dbGoTop()
SetProc(LastRec())
While !Eof()
IncProc()
If Li > 60
...

INCPROC()

A funo IncProc() utilizada para incrementar valor na rgua de progresso criada atravs da
funo Processa()

E Sintaxe: IncProc(cMensagem)

E Parmetros:

cMensagem Mensagem que ser exibida e atualizada na rgua de processamento a cada
execuo da funo IncProc(), sendo que a taxa de atualizao da interface
controlada pelo Binrio.

E Retorno:

Nenhum .

Exemplo:
...
dbSelectArea("SA1")
dbGoTop()
SetProc(LastRec())
While !Eof()
IncProc(Avaliando cliente:+SA1->A1_COD)
If Li > 60
...


- 266 -

ADVPL Completo




26.2.3. MsNewProcess().

Rgua de processamento dupla, possuindo dois indicadores de progresso independentes,
utilizada no processamento de rotinas.

E Sintaxe: MsNewProcess():New(bAcao, cMensagem)

E Retorno: oProcess objeto do tipo MsNewProcess()

E Parmetros:

bAcao
Bloco de cdigo que especifica a ao que ser executada com
o acompanhamento da rgua de processamento.
cMensagem
Mensagem que ser exibida na rgua de processamento
durante a execuo.
Aparncia




E Mtodos:

Activate() Inicia a execuo do objeto MsNewProcess instanciado.
SetRegua1() Define a quantidade de informaes que sero demonstradas
pelo indicador de progresso superior.
Parmetro: nMaxProc
IncRegua1() Incrementa em uma unidade o indicador de progresso
superior, o qual ir demonstrar a evoluo do processamento
de acordo com a quantidade definida pelo mtodo
SetRegua1().
Parmetro: cMensagem
SetRegua2() Define a quantidade de informaes que sero demonstradas
pelo indicador de progresso inferior.
Parmetro: nMaxProc
IncRegua2() Incrementa em uma unidade o indicador de progresso inferior,
o qual ir demonstrar a evoluo do processamento de acordo
com a quantidade definida pelo mtodo SetRegua2().
Parmetro: cMensagem


- 267 -

ADVPL Completo



Exemplo: Objeto MsNewProcess() e mtodos acessrios


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GPROCES2 | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o MsNewPr ocess( ) |
| | e seus mt odos I ncReguaX( ) e Set ReguaX( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on GPr oces2( )
Pr i vat e oPr ocess : = NI L

oPr ocess : = MsNewPr ocess( ) : New( {| l End| RunPr oc( l End, oPr ocess) };
" Pr ocessando" , " Lendo. . . " , . T. )
oPr ocess: Act i vat e( )

Ret ur n Ni l

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | RUNPROC | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo de pr ocessament o execut ada at r avs da MsNewPr ocess( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on RunPr oc( l End, oObj )
Local i : = 0
Local aTabel a : = {}
Local nCnt : = 0

aTabel a : = {{" 00" , 0}, {" 13" , 0}, {" 35" , 0}, {" T3" , 0}}

dbSel ect Ar ea( " SX5" )
cFi l i al SX5 : = xFi l i al ( " SX5" )
dbSet Or der ( 1)
For i : =1 To Len( aTabel a)
dbSeek( cFi l i al SX5+aTabel a[ i , 1] )
Whi l e ! Eof ( ) . And. X5_FI LI AL+X5_TABELA == cFi l i al SX5+aTabel a[ i , 1]
I f l End
Exi t
Endi f
nCnt ++
dbSki p( )
End
aTabel a[ i , 2] : = nCnt
nCnt : = 0
Next i

- 268 -

ADVPL Completo



Exempl o ( cont i nuao) :

oObj : Set Regua1( Len( aTabel a) )
For i : =1 To Len( aTabel a)
I f l End
Exi t
Endi f
oObj : I ncRegua1( " Lendo Tabel a: " +aTabel a[ i , 1] )
dbSel ect Ar ea( " SX5" )
dbSeek( cFi l i al SX5+aTabel a[ i , 1] )
oObj : Set Regua2( aTabel a[ i , 2] )
Whi l e ! Eof ( ) . And. X5_FI LI AL+X5_TABELA == cFi l i al SX5+aTabel a[ i , 1]
oObj : I ncRegua2( " Lendo chave: " +X5_CHAVE)
I f l End
Exi t
Endi f
dbSki p( )
End
Next i
Ret ur n



26.2.4. MsAguarde().

Indicador de processamento sem incremento.

E Sintaxe: Processa(bAcao, cMensagem, cTitulo)

E Retorno: Nil

E Parmetros:

bAcao
Bloco de cdigo que especifica a ao que ser executada com
o acompanhamento da rgua de processamento.
cMensagem
Mensagem que ser exibida na rgua de processamento
durante a execuo.
cTitulo Ttulo da janela da rgua de processamento.
Aparncia





- 269 -

ADVPL Completo



Exemplo: MSAguarde()


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GMSAGUARDE | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao das f unes MSAGUARDE( ) |
| | e MSPROCTXT( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON GMsAguar de( )
PRI VATE l End : = . F.

MsAguar de( {| l End| RunPr oc( @l End) }, " Aguar de. . . " , " Pr ocessando Cl i ent es" , . T. )

RETURN

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | RUNPROC | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo de pr ocessament o |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

STATI C FUNCTI ON RunPr oc( l End)

dbSel ect Ar ea( " SX5" )
dbSet Or der ( 1)
dbGoTop( )

Whi l e ! Eof ( )
I f l End
MsgI nf o( cCancel , " Fi m" )
Exi t
Endi f
MsPr ocTxt ( " Tabel a: " +SX5- >X5_TABELA+" Chave: " +SX5- >X5_CHAVE)
dbSki p( )
End

RETURN



- 270 -

ADVPL Completo



26.2.5. MsgRun().

Indicador de processamento sem incremento.

E Sintaxe: Processa(cMensagem, cTitulo, bAcao)

E Retorno: Nil

E Parmetros:

cMensagem
Mensagem que ser exibida na rgua de processamento
durante a execuo.
cTitulo Ttulo da janela da rgua de processamento.
bAcao
Bloco de cdigo que especifica a ao que ser executada com
o acompanhamento da rgua de processamento.
Aparncia




Exemplo: MSGRun()


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GMSGRUN | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao das f unes MSGRUN( ) |
| | e DBEVAL( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON GMsgRun( )
LOCAL nCnt : = 0

dbSel ect Ar ea( " SX1" )
dbGoTop( )

MsgRun( " Lendo ar qui vo, aguar de. . . " , " T t ul o opci onal " , {| | dbEval ( {| x| nCnt ++}) })

MsgI nf o( " Uf a! ! ! , l i " +Al l Tr i m( St r ( nCnt ) ) +" r egi st r os" , FunName( ) )

RETURN



- 271 -

ADVPL Completo



26.3. ListBox()

A sintaxe clssica da linguagem ADVPL permite que o componente visual ListBox implemente
dois tipos distintos de objetos:

E Lista simples: lista de apenas uma coluna no formato de um vetor, a qual no
necessita da especificao de um cabealho.

E Lista com colunas: lista com diversas colunas que necessita de um cabealho no
formato de um aHeader (array de cabealho).

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 Posio do objeto ListBox em funo da janela em que ele
ser definido.
oListBox Objeto ListBox que ser criado.
nLista Varivel numrica que contm o nmero do item
selecionado no ListBox.
aLista Vetor simples contendo as strings que sero exibidas no
ListBox.
nLargura,nAltura Dimenses do objeto ListBox.
oObjetoRef Objeto dialog no qual o componente ser definido.
UNIDADE Unidade de medida das dimenses: PIXEL.
CHANGE Funo ou lista de expresses que ser executada na
seleo de um item do ListBox.

E Aparncia:





- 272 -

ADVPL Completo



Exemplo: LISTBOX como lista simples


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | LI STBOXI TE | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do LI STBOX( ) como l i st a |
| | si mpl es. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */
User Funct i on Li st BoxI t e( )

Local aVet or : = {}
Local oDl g : = Ni l
Local oLbx : = Ni l
Local cTi t ul o : = " Consul t a Tabel a"
Local nChave : = 0
Local cChave : = " "

dbSel ect Ar ea( " SX5" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( " SX5" ) )

Cur sor Wai t ( )

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Car r ega o vet or conf or me a condi o |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
Whi l e ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. X5_TABELA==" 00"
AADD( aVet or , Tr i m( X5_CHAVE) +" - " +Capi t al ( Tr i m( X5_DESCRI ) ) )
dbSki p( )
End

Cur sor Ar r ow( )

I f Len( aVet or ) == 0
Avi so( cTi t ul o, " No exi st e dados a consul t ar " , {" Ok" } )
Ret ur n
Endi f

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | Mont a a t el a par a usur i o vi sual i zar consul t a |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 0, 0 TO 240, 500 PI XEL
@10, 10 LI STBOX oLbx VAR nChave I TEMS aVet or SI ZE 230, 95 OF oDl g PI XEL
oLbx: bChange : = {| | cChave : = SubSt r ( aVet or [ nChave] , 1, 2) }
DEFI NE SBUTTON FROM 107, 183 TYPE 14 ACTI ON LoadTabl e( cChave) ENABLE OF oDl g
DEFI NE SBUTTON FROM 107, 213 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g

ACTI VATE MSDI ALOG oDl g CENTER

Ret ur n


- 273 -

ADVPL Completo


Exemplo: LISTBOX como lista simples funes acessrias


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | LI STBOXI TE | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo que car r ega os dados da t abel a sel eci onada emum |
| | l i st box. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

STATI C FUNCTI ON LoadTabl e( cTabel a)

LOCAL aTabel a : = {}
LOCAL oDl g : = NI L
LOCAL oLbx : = NI L

dbSel ect Ar ea( " SX5" )
dbSeek( xFi l i al ( " SX5" ) +cTabel a)

/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | O vet or pode r eceber car ga de duas manei r as, acompanhe. . . |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / | Ut i l i zando Whi l e/ End |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

dbEval ( {| | AADD( aTabel a, {X5_CHAVE, Capi t al ( X5_DESCRI ) }) }, , {| |
X5_TABELA==cTabel a})

I f Len( aTabel a) ==0
Avi so( " FI M" , " Necessr i o sel eci onar umi t em" , {" Ok" } )
Ret ur n
Endi f

DEFI NE MSDI ALOG oDl g TI TLE " Dados da t abel a sel eci onada" FROM 300, 400 TO 540, 900
PI XEL
@10, 10 LI STBOX oLbx FI ELDS HEADER " Tabel a" , " Descr i o" SI ZE 230, 095 OF oDl g
PI XEL
oLbx: Set Ar r ay( aTabel a )
oLbx: bLi ne : = {| | {aTabel a[ oLbx: nAt , 1] , aTabel a[ oLbx: nAt , 2] } }
DEFI NE SBUTTON FROM 107, 213 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g
ACTI VATE MSDI ALOG oDl g

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 Posio do objeto ListBox em funo da
janela em que ele ser definido.
oListBox Objeto ListBox que ser criado.
nLista Varivel numrica que contm o nmero do
item selecionado no ListBox.
Header1,...,HeaderX Strings identificando os ttulos das colunas do
Grid.
nLargura,nAltura Dimenses do objeto ListBox.
oObjetoRef Objeto dialog no qual o componente ser
definido.
UNIDADE Unidade de medida das dimenses: PIXEL.
CHANGE Funo ou lista de expresses que ser
executada na seleo de um item do ListBox.

E Mtodos:

SetArray() Mtodo o objeto ListBox que define qual o
array contm os dados que sero exibidos no
grid.

E Atributos:

bLine Atributo do objeto ListBox que vincula cada
linha,coluna do array, com cada cabealho do
grid.

E Aparncia:



- 275 -

ADVPL Completo



Exemplo: LISTBOX com grid


#i ncl ude pr ot heus. ch

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | LI ST_BOX | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao de umLI STBOX( ) com |
| | gr i d. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Li st _Box( )

Local aVet or : = {}
Local oDl g
Local oLbx
Local cTi t ul o : = " Cadast r o de Bancos"
Local cFi l SA6

dbSel ect Ar ea( " SA6" )
dbSet Or der ( 1)
cFi l SA6 : = xFi l i al ( " SA6" )
dbSeek( cFi l SA6)

/ / Car r ega o vet or conf or me a condi o.
Whi l e ! Eof ( ) . And. A6_FI LI AL == cFi l SA6
AADD( aVet or , { A6_COD, A6_AGENCI A, A6_NUMCON, A6_NOME, A6_NREDUZ, A6_BAI RRO,
A6_MUN } )
dbSki p( )
End

/ / Se no houver dados no vet or , avi sar usur i o e abandonar r ot i na.
I f Len( aVet or ) == 0
Avi so( cTi t ul o, " No exi st e dados a consul t ar " , {" Ok" } )
Ret ur n
Endi f

/ / Mont a a t el a par a usur i o vi sual i zar consul t a.
DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 0, 0 TO 240, 500 PI XEL

/ / Pr i mei r a opo par a mont ar o l i st box.
@10, 10 LI STBOX oLbx FI ELDS HEADER ;
" Banco" , " Agenci a" , " C/ C" , " Nome Banco" , " Fant asi a" , " Bai r r o" , " Muni c pi o" ;
SI ZE 230, 95 OF oDl g PI XEL

oLbx: Set Ar r ay( aVet or )
oLbx: bLi ne : = {| | {aVet or [ oLbx: nAt , 1] , ;
aVet or [ oLbx: nAt , 2] , ;
aVet or [ oLbx: nAt , 3] , ;
aVet or [ oLbx: nAt , 4] , ;
aVet or [ oLbx: nAt , 5] , ;
aVet or [ oLbx: nAt , 6] , ;
aVet or [ oLbx: nAt , 7] }}


- 276 -

ADVPL Completo


Exempl o ( cont i nuao) :

/ / Segunda opo par a mont a o l i st box
/ *
oLbx : =
TWBr owse( ) : New( 10, 10, 230, 95, , aCabecal ho, , oDl g, , , , , , , , , , , , . F. , , . T. , , . F. , , , )
oLbx: Set Ar r ay( aVet or )
oLbx: bLi ne : = {| | aEval ( aVet or [ oLbx: nAt ] , {| z, w| aVet or [ oLbx: nAt , w] } ) }
*/

DEFI NE SBUTTON FROM 107, 213 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g
ACTI VATE MSDI ALOG oDl g CENTER

Ret ur n


26.4. ScrollBox()

O ScrollBox o objeto utilizado para permitir a um Dialog exibir barras de rolagem verticais e
Horizontais. Algumas aplicaes com objetos definem automaticamente o ScrollBox, tais como:

E Enchoice() ou MsMGet()
E NewGetDados()
E ListBox()

Quando definido um objeto ScrollBox, os demais componentes da janela devero referenciar
este objeto e no mais o objeto Dialog.

Desta forma o ScrollBox atribudo a um objeto Dialog, e os componentes ao ScrollBox.

O MsDialog() ScrollBox()
O ScrollBox() Componentes Visuais

E Sintaxe:


@ nLinha,nColuna SCROLLBOX oScrollBox HORIZONTAL VERTICAL SIZE
nLargura,nAltura OF oObjetoRef BORDER


E Parmetros:

nLinha,nColuna Posio do objeto ScrollBox em funo da
janela em que ele ser definido.
oScrollBox Objeto ScrollBox que ser criado.
HORIZONTAL Parmetro que quando definido habilita a
rgua de rolagem horizontal.
VERTICAL Parmetro que quando definido habilita a
rgua de rolagem vertical.
nLargura,nAltura Dimenses do objeto ScrollBox.
oObjetoRef Objeto dialog no qual o componente ser
definido.
BORDER

Parmetro que quando definido habilita a
exibio de uma borda de delimitao do
ScrollBox em relao a outros objetos.


- 277 -

ADVPL Completo


E Aparncia:





Exemplo: Utilizao de mltiplos ScrollBoxes


#I NCLUDE " PROTHEUS. CH"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | SCROLL( ) | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a como mont ar uma enchoi ce apenas |
| | comvar i vei s, i ncl ui ndo o r ecur so de r ol agem. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON Scr ol l ( )

LOCAL oDl g : = NI L
LOCAL oScr ol l : = NI L
LOCAL oLbx1 : = NI L
LOCAL oLbx2 : = NI L
LOCAL bGet : = NI L
LOCAL oGet : = NI L
LOCAL aAI I PM : = {}
LOCAL aTi t ul o : = {}
LOCAL nTop : = 5
LOCAL nWi dt h : = 0
LOCAL cGet : = " "
LOCAL cPi ct : = " "
LOCAL cVar : = " "
LOCAL n : = 0


- 278 -

ADVPL Completo


Exempl o ( cont i nuao) :

PRI VATE cTi t ul o : = " Consul t a Par cel ament o"
PRI VATE aSay : = {}
PRI VATE cPr ocesso, cPr ef i xo, cTi po, cCl i ent e, cLoj a, cNome, cCGC
PRI VATE dDat a, nTot al , nUFESP, cSt at us, cCond

cPr ocesso : = " P00001"
cPr ef i xo : = " UNI "
cTi po : = " MAN"
cCl i ent e : = " 000001"
cLoj a : = " 01"
cNome : = " J OSE DA SI LVA SANTOS SOARES"
cCGC : = " 00. 000. 000/ 0001- 91"
dDat a : = " 26/ 03/ 03"
nTot al : = 5922. 00
nUFESP : = 1000. 00
cSt at us : = " Z"
cCond : = " 001"

/ / Vet or par a os campos no Scr ool l Box
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | aSay[ n] [ 1] - Ti t ul o |
/ / | aSay[ n] [ 2] - Ti po |
/ / | aSay[ n] [ 3] - Tamanho |
/ / | aSay[ n] [ 4] - Deci mal |
/ / | aSay[ n] [ 5] - Cont edo/ Var i vel |
/ / | aSay[ n] [ 6] - For mat o |
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
AADD( aSay, {" Pr ocesso" , " C" , 06, 0, " cPr ocesso" , " @! " })
AADD( aSay, {" Pr ef i xo" , " C" , 03, 0, " cPr ef i xo" , " @! " })
AADD( aSay, {" Ti po" , " C" , 03, 0, " cTi po" , " @! " })
AADD( aSay, {" Cl i ent e" , " C" , 06, 0, " cCl i ent e" , " @! " })
AADD( aSay, {" Loj a" , " C" , 02, 0, " cLoj a" , " @! " })
AADD( aSay, {" Nome" , " C" , 30, 0, " cNome" , " @! " })
AADD( aSay, {" CNPJ / CPF" , " C" , 14, 0, " cCGC" , " @! " })
AADD( aSay, {" Dt . Pr ocesso" , " D" , 08, 0, " dDat a" , " @! " })
AADD( aSay, {" Tot al R$" , " N" , 17, 2, " nTot al " , " @! " })
AADD( aSay, {" Tot al UFESP" , " N" , 17, 2, " nUFESP" , " @! " })
AADD( aSay, {" St at us" , " C" , 01, 0, " cSt at us" , " @! " })
AADD( aSay, {" Cond. Pagt o" , " C" , 03, 0, " cCond" , " @! " })

/ / Vet or par a Li st Box
AADD( aAI I PM, {" 1234" , " DCD9815" , " 26/ 03/ 03" })
AADD( aAI I PM, {" 1234" , " DCD9815" , " 26/ 03/ 03" })
AADD( aAI I PM, {" 1234" , " DCD9815" , " 26/ 03/ 03" })

/ / Vet or par a Li st Box
AADD( aTi t ul o, {" A" , " 26/ 03/ 03" , " 26/ 03/ 03" , " 1. 974, 00" , " 100, 00" })
AADD( aTi t ul o, {" A" , " 26/ 03/ 03" , " 26/ 03/ 03" , " 1. 974, 00" , " 100, 00" })
AADD( aTi t ul o, {" A" , " 26/ 03/ 03" , " 26/ 03/ 03" , " 1. 974, 00" , " 100, 00" })

DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 122, 0 TO 432, 600 OF oDl g PI XEL
@013, 002 TO 154, 192 LABEL " Par cel ament o" OF oDl g PI XEL
@013, 195 TO 082, 298 LABEL " T t ul os" OF oDl g PI XEL
@083, 195 TO 154, 298 LABEL " AI I PM" OF oDl g PI XEL

/ / scr ol l box
@019, 006 SCROLLBOX oScr ol l HORI ZONTAL VERTI CAL SI ZE 131, 182 OF oDl g BORDER
For n: =1 TO Len( aSay)

- 279 -

ADVPL Completo


Exempl o ( cont i nuao) :

bGet : = &( " {| | ' " +aSay[ n] [ 1] +" ' }" )
cVar : = aSay[ n] [ 5]
cGet : = " {| u| I I F( PCount ( ) >0, " +cVar +" : =u, " +cVar +" ) }"
cPi ct : = aSay[ n] [ 6]

TSay( ) : New( nTop, 5, bGet , oScr ol l , , , . F. , . F. , . F. , . T. , , , ;
Get Text Wi dt h( 0, Tr i m( aSay[ n] [ 1] ) ) , 15, ;
. F. , . F. , . F. , . F. , . F. )
oGet : =TGet ( ) : New( nTop- 2, 40, &cGet , oScr ol l , , 7, cPi ct , , , , , . F. , , . T. , ;
, . F. , , . F. , . F. , , . T. , . F. , , ( cVar ) , , , , . T. )
nTop+=11
Next n

/ / l i st box t t ul os
@019, 199 LI STBOX oLbx1 FI ELDS HEADER ;
" Par cel a" , " Venct o" , " Venct o. Real " , " Val or R$" , " Qt d. UFESP" ;
COLSI ZES 21, 24, 33, 63, 100;
SI ZE 095, 059 OF oDl g PI XEL
oLbx1: Set Ar r ay( aTi t ul o )
oLbx1: bLi ne : = {| | {aTi t ul o[ oLbx1: nAt , 1] , aTi t ul o[ oLbx1: nAt , 2] , ;
aTi t ul o[ oLbx1: nAt , 3] , aTi t ul o[ oLbx1: nAt , 4] , aTi t ul o[ oLbx1: nAt , 5] }}

/ / l i st box ai i pm
@089, 199 LI STBOX oLbx2 FI ELDS HEADER " AI I PM" , " Pl aca" , " Dat a Mul t a" ;
COLSI ZES 24, 21, 30 SI ZE 095, 061 OF oDl g PI XEL
oLbx2: Set Ar r ay( aAI I PM )
oLbx2: bLi ne : =
{| | {aAI I PM[ oLbx2: nAt , 1] , aAI I PM[ oLbx2: nAt , 2] , aAI I PM[ oLbx2: nAt , 3] }}

ACTI VATE MSDI ALOG oDl g CENTER ON I NI T
Enchoi ceBar ( oDl g, {| | oDl g: End( ) }, {| | oDl g: End( ) })

RETURN














- 280 -

ADVPL Completo



26.5. ParamBox()

Implementa uma tela de parmetros, que no necessita da criao de um grupo de perguntas
no SX1, e com funcionalidades que a Pergunte() no disponibiliza, tais como CheckBox e
RadioButtons.

Cada componente da ParamBox ser associado a um parmetro Private denominado
MV_PARxx, de acordo com a ordem do componente na tela. Os parmetros da ParamBox
podem ser utilizados de forma independente em uma rotina especfica, ou complementando
opes de uma rotina padro.

Cuidados

A PARAMBOX define os parmetros seguindo o princpio das variveis MV_PARxx. Caso
ela seja utilizada em uma rotina em conjunto com parmetros padres (SX1 +
Pergunte()) necessrio salvar os parmetros padres, chamar a Parambox(), salvar o
retorno da Parambox() em variveis Private especficas (MVPARBOXxx) e depois
restaurar os parmetros padres, conforme o exemplo desta documentao.

O objeto COMBO() da PARAMBOX() possui um problema em seu retorno: Caso o combo
no seja selecionado, ele manter seu contedo como numrico, caso seja ele receber
o texto da opo e no o nmero da opo. O exemplo desta documentao ilustra o
tratamento de cdigo necessrio para proteger a aplicao.

Ao utilizar a ParamBox em uma funo que tambm utilize parmetros definidos pela
funo Pergunte() deve-se:

E Salvar e restaurar os MV_PARs da Pergunte()
E Definir variveis Private prprias para a ParamBox, as quais iro armazenar o
contedo das MV_PARs que esta retorna.

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 Array de parmetros de acordo com a regra da ParamBox
cTitulo Titulo da janela de parmetros
aRet
Array que ser passado por referencia e retornado com o
contedo de cada parmetro
bOk Bloco de cdigo para validao do OK da tela de parmetros
aButtons
Array contendo a regra para adio de novos botes (alm do
OK e Cancelar) // AADD(aButtons,{nType,bAction,cTexto})
lCentered
Se a tela ser exibida centralizada, quando a mesma no
estiver vinculada a outra janela
nPosx Posio inicial -> linha (Linha final: nPosX+274)
nPosy Posio inicial -> coluna (Coluna final: nPosY+445)
oMainDlg Caso o ParamBox deva ser vinculado a uma outra tela
cLoad
Nome do arquivo aonde as respostas do usurio sero salvas /
lidas
lCanSave Se as respostas para as perguntas podem ser salvas
lUserSave Se o usurio pode salvar sua prpria configurao.

- 281 -

ADVPL Completo


E Aparncia:





E Regras do array aParamBox:

[1] Tipo do parmetro: Para cada tipo de parmetro as demais posies do array variam de
contedo conforme abaixo:

1 - MsGet
[2] : Descrio
[3] : String contendo o inicializador do campo
[4] : String contendo a Picture do campo
[5] : String contendo a validao
[6] : Consulta F3
[7] : String contendo a validao When
[8] : Tamanho do MsGet
[9] : Flag .T./.F. Parmetro Obrigatrio ?

2 - Combo
[2] : Descrio
[3] : Numrico contendo a opo inicial do combo
[4] : Array contendo as opes do Combo
[5] : Tamanho do Combo
[6] : Validao
[7] : Flag .T./.F. Parmetro Obrigatrio ?

- 282 -

ADVPL Completo



3 - Radio
[2] : Descrio
[3] : Numrico contendo a opo inicial do Radio
[4] : Array contendo as opes do Radio
[5] : Tamanho do Radio
[6] : Validao
[7] : Flag .T./.F. Parmetro Obrigatrio ?

4 - CheckBox ( Com Say )
[2] : Descrio
[3] : Indicador Lgico contendo o inicial do Check
[4] : Texto do CheckBox
[5] : Tamanho do Radio
[6] : Validao
[7] : Flag .T./.F. Parmetro Obrigatrio ?

5 - CheckBox ( linha inteira )
[2] : Descrio
[3] : Indicador Lgico contendo o inicial do Check
[4] : Tamanho do Radio
[5] : Validao
[6] : Flag .T./.F. Parmetro Obrigatrio ?

6 - File
[2] : Descrio
[3] : String contendo o inicializador do campo
[4] : String contendo a Picture do campo
[5] : String contendo a validao
[6] : String contendo a validao When
[7] : Tamanho do MsGet
[8] : Flag .T./.F. Parmetro Obrigatrio ?
[9] : Texto contendo os tipos de arquivo
Ex.: "Arquivos .CSV |*.CSV"
[10]: Diretrio inicial do CGETFILE()
[11]: Parmetros do CGETFILE()

7 - Montagem de expresso de filtro
[2] : Descrio
[3] : Alias da tabela
[4] : Filtro inicial
[5] : Opcional - Clausula When Boto Editar Filtro

8 - MsGet Password
[2] : Descrio
[3] : String contendo o inicializador do campo
[4] : String contendo a Picture do campo
[5] : String contendo a validao
[6] : Consulta F3
[7] : String contendo a validao When
[8] : Tamanho do MsGet
[9] : Flag .T./.F. Parmetro Obrigatrio ?

- 283 -

ADVPL Completo



9 - MsGet Say
[2] : String Contendo o Texto a ser apresentado
[3] : Tamanho da String
[4] : Altura da String
[5] : Negrito (lgico)

Exemplo: Utilizao da ParamBox()


#i ncl ude pr ot heus. ch

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | xPar amBox | Aut or | ROBSON LUI Z | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao da PARAMBOX como |
| | f or ma al t er nat i va de di sponi bi l i zar par met r os emum |
| | pr ocessament o. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on xPar amBox( )

Local aRet : = {}
Local aPar amBox : = {}
Local aCombo : =
{" J anei r o" , " Fever ei r o" , " Mar o" , " Abr i l " , " Mai o" , " J unho" , " J ul ho" , " Agost o" , " Set embr o
" , " Out ubr o" , " Novembr o" , " Dezembr o" }
Local i : = 0
Pr i vat e cCadast r o : = " xPar ambox"

AADD( aPar amBox, {1, " Pr odut o" , Space( 15) , " " , " " , " SB1" , " " , 0, . F. })
AADD( aPar amBox, {2, " Ti po de cl i ent e" , 1, aCombo, 50, " " , . F. })

AADD( aPar amBox, {3, " Most r a
del et ados" , I I F( Set ( _SET_DELETED) , 1, 2) , {" Si m" , " No" }, 50, " " , . F. })

AADD( aPar amBox, {4, " Mar ca t odos ?" , . F. , " Mar que t odos se necessr i o
f or . " , 50, " " , . F. })

AADD( aPar amBox, {5, " Mar ca t odos ?" , . F. , 50, " " , . F. })

AADD( aPar amBox, {6, " Qual ar qui vo" , Space( 50) , " " , " " , " " , 50, . F. , ;
" Ar qui vo . DBF | *. DBF" })

AADD( aPar amBox, {7, " Mont e o f i l t r o" , " SX5" , " X5_FI LI AL==xFi l i al ( ' SX5' ) " })
AADD( aPar amBox, {8, " Di gi t e a senha" , Space( 15) , " " , " " , " " , " " , 80, . F. })

I f Par amBox( aPar amBox, " Test e Par met r os. . . " , @aRet )
For i : =1 To Len( aRet )
MsgI nf o( aRet [ i ] , " Opo escol hi da" )
Next
Endi f

Ret ur n


- 284 -

ADVPL Completo


Exemplo: Protegendo os parmetros MV_PARs da Pergunte() em uso.


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | XPARBOX( ) | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Funo ut i l i zando a PARAMBOX( ) e pr ot egendo os MV_PARs |
| | at i vos do pr ogr ama pr i nci pal . |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */
St at i c Funct i on XPARBOX( cPer g)

Local aPar amBox : = {}
Local cTi t ul o : = " Tr ansf er nci a par a Oper ao"
Local bOk : = {| | . T. }
Local aBut t ons : = {}; Local aRet : = {}
Local nPosx; Local nPosy; Local nX : = 0
Local cLoad : = " "
Local l Cent er ed : = . T. ; Local l CanSave : = . F. ; Local l User Save : = . F.
Local aPar amAt u : = Ar r ay( 4)

/ / Sal va as per gunt as padr es ant es da chamada da Par amBox
For nX : = 1 t o Len( aPar amAt u)
aPar amAt u [ nX] : = &( " Mv_Par " +St r Zer o( nX, 2) )
Next nX

AADD( aPar amBox, {2, " At ual i za t axa de depr eci ao?" , 2, {" Si m" , " No" }, 100, ;
" Al l waysTr ue( ) " , . T. })

Par amBox( aPar amBox, cTi t ul o, aRet , bOk, aBut t ons, l Cent er ed, nPosx, nPosy,
/ *oMai nDl g*/ , ;
cLoad, l CanSave, l User Save)

I F Val Type( aRet ) == " A" . AND. Len( aRet ) == Len( aPar amBox)
For nX : = 1 t o Len( aPar amBox)
I f aPar amBox[ nX] [ 1] == 1
&( " MvPar Box" +St r Zer o( nX, 2) ) : = aRet [ nX]
El seI f aPar amBox[ nX] [ 1] == 2 . AND. Val Type( aRet [ nX] ) == " C"
&( " MvPar Box" +St r Zer o( nX, 2) ) : = aScan( aPar amBox[ nX] [ 4] , ;
{| x| Al l t r i m( x) == aRet [ nX] })
El seI f aPar amBox[ nX] [ 1] == 2 . AND. Val Type( aRet [ nX] ) == " N"
&( " MvPar Box" +St r Zer o( nX, 2) ) : = aRet [ nX]
Endi f
Next nX
ENDI F

/ / Rest aur a as per gunt as padr es apos a chamada da Par amBox
For nX : = 1 t o Len( aPar amAt u)
&( " Mv_Par " +St r Zer o( nX, 2) ) : = aPar amAt u[ nX]
Next nX

Ret ur n


- 285 -

ADVPL Completo



MDULO 05: Introduo a orientao objetos


27. Conceitos de orientao objetos

O termo orientao a objetos pressupe uma organizao de software em termos de coleo
de objetos discretos incorporando estrutura e comportamento prprios. Esta abordagem de
organizao essencialmente diferente do desenvolvimento tradicional de software, onde
estruturas de dados e rotinas so desenvolvidas de forma apenas fracamente acopladas.

Neste tpico sero os conceitos de programao orientada a objetos listados abaixo. Esta
breve viso geral do paradigma permitir entender melhor os conceitos associados
programao orientada a objetos e, em particular, s construes implementadas atravs da
linguagem ADVPL.

E Objetos
E Herana
E Atributos
E Mtodos
E Classes
E Abstrao
E Generalizao
E Encapsulamento
E Polimorfismo

27.1. Definies

Objeto

Um objeto uma entidade do mundo real que tem uma identidade. Objetos podem
representar entidades concretas (um arquivo no meu computador, uma bicicleta) ou entidades
conceituais (uma estratgia de jogo, uma poltica de escalonamento em um sistema
operacional). Cada objeto ter sua identidade significa que dois objetos so distintos mesmo
que eles apresentem exatamente as mesmas caractersticas.

Embora objetos tenham existncia prpria no mundo real, em termos de linguagem de
programao um objeto necessita um mecanismo de identificao. Esta identificao de objeto
deve ser nica, uniforme e independente do contedo do objeto. Este um dos mecanismos
que permite a criao de colees de objetos, as quais so tambm objetos em si.

A estrutura de um objeto representada em termos de atributos. O comportamento de um
objeto representado pelo conjunto de operaes que podem ser executadas sobre o objeto.


- 286 -

ADVPL Completo



Classe

Objetos com a mesma estrutura e o mesmo comportamento so agrupados em classes. Uma
classe uma abstrao que descreve propriedades importantes para uma aplicao e
simplesmente ignora o resto.

Cada classe descreve um conjunto (possivelmente infinito) de objetos individuais. Cada objeto
dito ser uma instncia de uma classe. Assim, cada instncia de uma classe tem seus prprios
valores para cada atributo, mas dividem os nomes dos atributos e mtodos com as outras
instncias da classe. Implicitamente, cada objeto contm uma referncia para sua prpria
classe, em outras palavras, ele sabe o que ele .



Figura: Representao de uma classe de objetos




Figura: Representao de um objeto instanciado de uma classe

- 287 -

ADVPL Completo




Polimorfismo

Polimorfismo significa que a mesma operao pode se comportar de forma diferente em
classes diferentes. Por exemplo, a operao move quando aplicada a uma janela de um
sistema de interfaces tem um comportamento distinto do que quando aplicada a uma pea de
um jogo de xadrez. Um mtodo uma implementao especfica de uma operao para uma
certa classe.

Polimorfismo tambm implica que uma operao de uma mesma classe pode ser
implementada por mais de um mtodo. O usurio no precisa saber quantas implementaes
existem para uma operao, ou explicitar qual mtodo deve ser utilizado: a linguagem de
programao deve ser capaz de selecionar o mtodo correto a partir do nome da operao,
classe do objeto e argumentos para a operao. Desta forma, novas classes podem ser
adicionadas sem necessidade de modificao de cdigo j existente, pois cada classe apenas
define os seus mtodos e atributos.

No mundo real, alguns objetos e classes podem ser descritos como casos especiais, ou
especializaes, de outros objetos e classes. Por exemplo, a classe de computadores pessoais
com processador da linha 80x86 uma especializao de computadores pessoais, que por sua
vez uma especializao de computadores. No desejvel que tudo que j foi descrito para
computadores tenha de ser repetido para computadores pessoais ou para computadores
pessoais com processador da linha 80x86.

Herana

Herana o mecanismo do paradigma de orientao a objetos que permite compartilhar
atributos e operaes entre classes baseada em um relacionamento hierrquico. Uma classe
pode ser definida de forma genrica e depois refinada sucessivamente em termos de
subclasses ou classes derivadas. Cada subclasse incorpora, or herda, todas as propriedades de
sua superclasse (ou classe base) e adiciona suas propriedades nicas e particulares. As
propriedades da classe base no precisam ser repetidas em cada classe derivada. Esta
capacidade de fatorar as propriedades comuns de diversas classes em uma superclasse pode
reduzir dramaticamente a repetio de cdigo em um projeto ou programa, sendo uma das
principais vantagens da abordagem de orientao a objetos.


- 288 -

ADVPL Completo



27.2. Conceitos Bsicos

A abordagem de orientao a objetos favorece a aplicao de diversos conceitos considerados
fundamentais para o desenvolvimento de bons programas, tais como abstrao e
encapsulamento.

Tais conceitos no so exclusivos desta abordagem, mas so suportados de forma melhor no
desenvolvimento orientado a objetos do que em outras metodologias.

Abstrao

Abstrao consiste de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar
propriedades acidentais. Em termos de desenvolvimento de sistemas, isto significa
concentrar-se no que um objeto e faz antes de se decidir como ele ser implementado. O
uso de abstrao preserva a liberdade para tomar decises de desenvolvimento ou de
implementao apenas quando h um melhor entendimento do problema a ser resolvido.

Muitas linguagens de programao modernas suportam o conceito de abstrao de dados;
porm, o uso de abstrao juntamente com polimorfismo e herana, como suportado em
orientao a objetos, um mecanismo muito mais poderoso.

O uso apropriado de abstrao permite que um mesmo modelo conceitual (orientao a
objetos) seja utilizado para todas as fases de desenvolvimento de um sistema, desde sua
anlise at sua documentao.

Encapsulamento

Encapsulamento, tambm referido como esconder informao, consiste em separar os
aspectos externos de um objeto, os quais so acessveis a outros objetos, dos detalhes
internos de implementao do objeto, os quais permanecem escondidos dos outros objetos. O
uso de encapsulamento evita que um programa torne-se to interdependente que uma
pequena mudana tenha grandes efeitos colaterais.

O uso de encapsulamento permite que a implementao de um objeto possa ser modificada
sem afetar as aplicaes que usam este objeto. Motivos para modificar a implementao de
um objeto podem ser, por exemplo, melhoria de desempenho, correo de erros e mudana de
plataforma de execuo.

Assim como abstrao, o conceito de Encapsulamento no exclusivo da abordagem de
orientao a objetos. Entretanto, a habilidade de se combinar estrutura de dados e
comportamento em uma nica entidade torna a Encapsulamento mais elegante e mais
poderosa do que em linguagens convencionais que separam estruturas de dados e
comportamento.

Compartilhamento

Tcnicas de orientao a objetos promovem compartilhamento em diversos nveis distintos.
Herana de estrutura de dados e comportamento permite que estruturas comuns sejam
compartilhadas entre diversas classes derivadas similares sem redundncia. O
compartilhamento de cdigo usando herana uma das grandes vantagens da orientao a
objetos. Ainda mais importante que a economia de cdigo a clareza conceitual de reconhecer
que operaes diferentes so na verdade a mesma coisa, o que reduz o nmero de casos
distintos que devem ser entendidos e analisados.


- 289 -

ADVPL Completo


O desenvolvimento orientado a objetos no apenas permite que a informao dentro de um
projeto seja compartilhada como tambm oferece a possibilidade de reaproveitar projetos e
cdigo em projetos futuros. As ferramentas para alcanar este compartilhamento, tais como
abstrao, Encapsulamento e herana, esto presentes na metodologia; uma estratgia de
reuso entre projetos a definio de bibliotecas de elementos reusveis. Entretanto,
orientao a objetos no uma frmula mgica para alcanar reusabilidade; para tanto,
preciso planejamento e disciplina para pensar em termos genricos, no voltados
simplesmente para a aplicao corrente.

27.3. O Modelo de Objetos (OMT)

Um modelo de objetos busca capturar a estrutura esttica de um sistema mostrando os
objetos existentes, seus relacionamentos, e atributos e operaes que caracterizam cada
classe de objetos. atravs do uso deste modelo que se enfatiza o desenvolvimento em
termos de objetos ao invs de mecanismos tradicionais de desenvolvimento baseado em
funcionalidades, permitindo uma representao mais prxima do mundo real.

Uma vez que as principais definies e conceitos da abordagem de orientao a objetos esto
definidos, possvel introduzir o modelo de objetos que ser adotado ao longo deste texto. O
modelo apresentado um subconjunto do modelo OMT (Object Modeling Technique), proposto
por Rumbaugh entre outros. Este modelo tambm introduz uma representao diagramtica
para este modelo, a qual ser tambm apresentada aqui.

27.3.1. Objetos e Classes

Objeto definido neste modelo como um conceito, abstrao ou coisa com limites e
significados bem definidos para a aplicao em questo. Objetos tm dois propsitos:
promover o entendimento do mundo real e suportar uma base prtica para uma
implementao computacional. No existe uma maneira correta de decompor um problema
em objetos; esta decomposio depende do julgamento do projetista e da natureza do
problema. Todos os objetos tm identidade prpria e so distinguveis.

Uma classe de objetos descreve um grupo de objetos com propriedades (atributos) similares,
comportamentos (operaes) similares, relacionamentos comuns com outros objetos e uma
semntica comum. Por exemplo, Pessoa e Companhia so classes de objetos. Cada pessoa
tem um nome e uma idade; estes seriam os atributos comuns da classe. Companhias tambm
podem ter os mesmos atributos nome e idade definidos. Entretanto, devido distino
semntica elas provavelmente estariam agrupados em outra classe que no Pessoa. Como se
pode observar, o agrupamento em classes no leva em conta apenas o compartilhamento de
propriedades.

Todo objeto sabe a que classe ele pertence, ou seja, a classe de um objeto um atributo
implcito do objeto. Este conceito suportado na maior parte das linguagens de programao
orientada a objetos, inclusive em ADVPL.

OMT define dois tipos de diagramas de objetos, diagramas de classes e diagramas de
instncias. Um diagrama de classe um esquema, ou seja, um padro ou gabarito que
descreve as muitas possveis instncias de dados. Um diagrama de instncias descreve como
um conjunto particular de objetos est relacionado. Diagramas de instncias so teis para
apresentar exemplos e documentar casos de testes; diagramas de classes tm uso mais
amplos. A Figura abaixo apresenta a notao adotada para estes diagramas.

- 290 -

ADVPL Completo





Figura: Representao diagramtica de OMT para classes e objetos


O agrupamento de objetos em classes um poderoso mecanismo de abstrao. Desta forma,
possvel generalizar definies comuns para uma classe de objetos, ao invs de repet-las
para cada objeto em particular. Esta uma das formas de reutilizao e economia que a
abordagem de orientao a objetos suporta.

27.3.2. Atributos

Um atributo um valor de dado assumido pelos objetos de uma classe. Nome, idade e peso
so exemplos de atributos de objetos Pessoa. Cor, peso e modelo so possveis atributos de
objetos Carro. Cada atributo tem um valor para cada instncia de objeto. Por exemplo, o
atributo idade tem valor ``29'' no objeto Pedro Y. Em outras palavras, Pedro Y tem 29 anos de
idade. Diferentes instncias de objetos podem ter o mesmo valor para um dado atributo.
Cada nome de atributo nico para uma dada classe, mas no necessariamente nico entre
todas as classes. Por exemplo, ambos Pessoa e Companhia podem ter um atributo chamado
endereo.

No diagrama de classes, atributos so listados no segundo segmento da caixa que representa
a classe. O nome do atributo pode ser seguido por detalhes opcionais, tais como o tipo de
dado assumido e valor default. A Figura abaixo mostra esta representao.



Figura: Representao diagramtica de OMT para classes e objetos com atributos

No se deve confundir identificadores internos de objetos com atributos do mundo real.
Identificadores de objetos so uma convenincia de implementao, e no tm nenhum
significado para o domnio da aplicao. Por exemplo, CIC e RG no so identificadores de
objetos, mas sim verdadeiros atributos do mundo real.


- 291 -

ADVPL Completo


27.3.3. Operaes e Mtodos

Uma operao uma funo ou transformao que pode ser aplicada a ou por objetos em uma
classe. Por exemplo, abrir, salvar e imprimir so operaes que podem ser aplicadas a objetos
da classe Arquivo. Todos os objetos em uma classe compartilham as mesmas operaes.

Toda operao tem um objeto-alvo como um argumento implcito. O comportamento de uma
operao depende da classe de seu alvo. Como um objeto sabe qual sua classe, possvel
escolher a implementao correta da operao. Alm disto, outros argumentos (parmetros)
podem ser necessrios para uma operao.

Uma mesma operao pode se aplicar a diversas classes diferentes. Uma operao como esta
dita ser polimrfica, ou seja, ela pode assumir distintas formas em classes diferentes.

Um mtodo a implementao de uma operao para uma classe. Por exemplo, a operao
imprimir pode ser implementada de forma distinta, dependendo se o arquivo a ser impresso
contm apenas texto ASCII, um arquivo de um processador de texto ou binrio. Todos estes
mtodos executam a mesma operao: imprimir o arquivo; porm, cada mtodo ser
implementado por um diferente cdigo.

A assinatura de um mtodo dada pelo nmero e tipos de argumentos do mtodo, assim
como por seu valor de retorno. Uma estratgia de desenvolvimento recomendvel manter
assinaturas coerentes para mtodos implementando uma dada operao, assim como um
comportamento consistente entre as implementaes.

Em termos de diagramas OMT, operaes so listadas na terceira parte da caixa de uma
classe. Cada nome de operao pode ser seguida por detalhes opcionais, tais como lista de
argumentos e tipo de retorno. A lista de argumentos apresentada entre parnteses aps o
nome da operao. Uma lista de argumentos vazia indica que a operao no tem
argumentos; da ausncia da lista de argumentos no se pode concluir nada. O tipo de
resultado vem aps a lista de argumentos, sendo precedido por dois pontos (:). Caso a
operao retorne resultado, este no deve ser omitido, pois esta a forma de distingui-la de
operaes que no retornam resultado. Exemplos de representao de operaes em OMT so
apresentados na Figura abaixo:



Figura: Representao diagramtica de OMT para classes com atributos e operaes

- 292 -

ADVPL Completo



27.3.4. Sugestes de desenvolvimento

Na construo de um modelo para uma aplicao, as seguintes sugestes devem ser
observadas a fim de se obter resultados claros e consistentes:

E No comece a construir um modelo de objetos simplesmente definindo classes,
associaes e heranas. A primeira coisa a se fazer entender o problema a ser
resolvido.
E Tente manter seu modelo simples. Evite complicaes desnecessrias.
E Escolha nomes cuidadosamente. Nomes so importantes e carregam conotaes
poderosas. Nomes devem ser descritivos, claros e no deixar ambigidades. A escolha
de bons nomes um dos aspectos mais difceis da modelagem.
E No enterre apontadores ou outras referncias a objetos dentro de objetos como
atributos. Ao invs disto, modele estas referncias como associaes. Isto torna o
modelo mais claro e independente da implementao.
E Tente evitar associaes que envolvam trs ou mais classes de objetos. Muitas vezes,
estes tipos de associaes podem ser decompostos em termos de associaes binrias,
tornando o modelo mais claro.
E No transfira os atributos de ligao para dentro de uma das classes.
E Tente evitar hierarquias de generalizao muito profundas.
E No se surpreenda se o seu modelo necessitar vrias revises; isto o normal.
E Sempre documente seus modelos de objetos. O diagrama pode especificar a estrutura
do modelo, mas nem sempre suficiente para descrever as razes por trs da definio
do modelo. Uma explicao escrita pode clarificar pontos tais como significado de
nomes e explicar a razo para cada classe e relacionamento.
E Nem sempre todas as construes OMT so necessrias para descrever uma aplicao.
Use apenas aquelas que forem adequadas para o problema analisado.


- 293 -

ADVPL Completo



28. Orientao a objetos em ADVPL

Neste tpico ser detalhada a forma com a qual a linguagem ADVPL implementa os conceitos
de orientao a objetos e a sintaxe utilizada no desenvolvimento de aplicaes.


28.1. Sintaxe e operadores para orientao a objetos

Palavras reservadas

CLASS
CONSTRUCTOR
DATA
ENDCLASS
FROM
METHOD
SELF

CLASS

Descrio
Utilizada na declarao de uma classe de objetos, e para identificar a qual
classe um determinado mtodo est relacionado.
Sintaxe 1 CLASS <nome_da_classe>
Sintaxe 2 METHOD <nome_do_mtodo> CLASS <nome_da_classe>

CONSTRUCTOR

Descrio
Utilizada na especificao de um mtodo especial, definido como construtor,
o qual tem a funo de retornar um novo objeto com os atributos e mtodos
definidos na classe.
Sintaxe METHOD <nome_do_mtodo()> CONSTRUCTOR

DATA

Descrio Utilizada na declarao de um atributo da classe de objetos.
Sintaxe DATA <nome_do_atributo>

ENDCLASS

Descrio Utilizada na finalizao da declarao da classe.
Sintaxe ENDCLASS



- 294 -

ADVPL Completo


FROM

Descrio
Utilizada na declarao de uma classe, a qual ser uma instncia de uma
superclasse, recebendo os atributos e mtodos nela definidos,
implementando a herana entre classes.
Sintaxe CLASS <nome_da_classe> FROM <nome_da_superclasse>


METHOD

Descrio
Utilizada na declarao do prottipo do mtodo de uma classe de objetos, e
na declarao do mtodo efetivamente desenvolvido.
Sintaxe 1 METHOD <nome_do_mtodo()>
Sintaxe 2 METHOD <nome_do_mtodo(<parmetros>)> CLASS <nome_da_classe>

SELF

Descrio
Utilizada principalmente pelo mtodo construtor para retornar o objeto
criado para a aplicao.
Sintaxe Return SELF


Operadores especficos


:
Utilizado para referenciar um mtodo ou um atributo de um objeto j
instanciado.
Exemplo 1 cNome := oAluno:sNome
Exemplo 2 cNota := oAluno:GetNota(cCurso)


::
Utilizado pelos mtodos de uma classe para referenciar os atributos
disponveis para o objeto.
Exemplo

METHOD GetNota(cCurso) CLASS ALUNO

Local nPosCurso := 0
Local nNota := 0

nPosCurso := aScan(::aCursos,{|aCurso| aCurso[1] == cCurso})

IF nPosCurso > 0

nNota := ::aCursos[nPosCurso][2]

ENDIF

Return nNota




- 295 -

ADVPL Completo



28.2. Estrutura de uma classe de objetos em ADVPL

Declarao da classe

A declarao de uma classe da linguagem ADVPL realizada de forma similar a declarao de
uma funo, com a diferena de que uma classe no possui diferenciao quanto a sua
procedncia, como uma Function() e uma User Function(), e no possui visibilidade limitada
como uma Static Function().

Exempl o:

#i ncl ude pr ot heus. ch
CLASS Pessoa( )



Definio dos atributos

Seguindo o mesmo princpio de variveis no tipadas, os atributos das classes em ADVPL no
precisam ter seu tipo especificado, sendo necessrio apenas determinar seus nomes.

Desta forma recomendado o uso da notao Hngara tambm para a definio dos atributos
de forma a facilitar a anlise, interpretao e utilizao da classe e seus objetos instanciados.

Exempl o:

#i ncl ude pr ot heus. ch
CLASS Pessoa( )

DATA cNome
DATA nI dade



Prototipao dos mtodos

A prototipao dos mtodos uma regra utilizada pelas linguagens orientadas a objetos,
atravs da qual so especificadas as operaes que podem ser realizadas pelo objeto,
diferenciando os mtodos de outras funes internas de uso da classe, e para especificar quais
so os mtodos construtores.

Em linguagens tipadas, na prototipao dos mtodos necessrio definir quais so os
parmetros recebidos e seus respectivos tipos, alm de definir o tipo do retorno que ser
fornecido. Em ADVPL necessrio apenas descrever a chamada do mtodo e caso necessrio
se o mesmo um construtor.

- 296 -

ADVPL Completo



Exempl o:

#i ncl ude pr ot heus. ch
CLASS Pessoa( )

DATA cNome
DATA nI dade

METHOD Cr eat e( ) CONSTRUCTOR
METHOD Set Nome( )
METHOD Set I dade( )

ENDCLASS


28.3. Implementao dos mtodos de uma classe em ADVPL

Mtodo Construtor

O mtodo construtor possui a caracterstica de retornar um objeto com o tipo da classe da qual
o mesmo foi instanciado. Por esta razo diz-se que o tipo do objeto instanciado a classe
daquele objeto.

Para produzir este efeito, o mtodo construtor utiliza a palavra reservada SELF, a qual
utilizada pela linguagem ADVPL para referncia a prpria classe daquele objeto.

Exempl o:

#i ncl ude pr ot heus. ch
CLASS Pessoa( )

DATA cNome
DATA nI dade

METHOD Cr eat e( ) CONSTRUCTOR
METHOD Set Nome( )
METHOD Set I dade( )

ENDCLASS

METHOD Cr eat e( cNome, nI dade) CLASS Pessoa

: : cNome : = cNome
: : nI dade : = nI dade

Ret ur n SELF



- 297 -

ADVPL Completo



Manipulao de atributos

Os atributos definidos para uma classe com a utilizao da palavra reservada DATA em sua
declarao podem ser manipulados por seus mtodos utilizando o operador ::.

A utilizao deste operador permite ao interpretador ADVPL diferenciar variveis comuns
criadas pelas funes e mtodos que utilizam este objeto dos atributos propriamente ditos.

Exempl o:

#i ncl ude pr ot heus. ch
CLASS Pessoa( )

DATA cNome
DATA nI dade

METHOD Cr eat e( ) CONSTRUCTOR
METHOD Set Nome( )
METHOD Set I dade( )
ENDCLASS

METHOD Cr eat e( cNome, nI dade) CLASS Pessoa

: : cNome : = cNome
: : nI dade : = nI dade

Ret ur n SELF


Utilizao de funes em uma classe de objetos

Conforme mencionado anteriormente, a utilizao da palavra reservada METHOD permite ao
interpretador ADVPL diferenciar os mtodos que podem ser utilizados atravs da referncia do
objeto de funes internas descritas internamente na classe.

Isto permite a utilizao de funes tradicionais da linguagem ADVPL, como as Static
Functions() as quais sero visveis apenas a classe, e no podero ser referenciadas
diretamente pelo objeto.

Exempl o par t e 01: Funo CadPessoa ( usur i a da cl asse Pessoa)

#i ncl ude pr ot heus. ch

USER FUNCTI ON CadPessoa( )

Local oPessoa
Local cNome : =
Local dNasci ment o: = CTOD( )
Local aDados : = {}

aDados : = Get Dados( )
oPessoa : = Pessoa( ) : Cr eat e( cNome, dNasci ment o)

Ret ur n

- 298 -

ADVPL Completo



Exempl o par t e 02: Cl asse Pessoa

#i ncl ude pr ot heus. ch
CLASS Pessoa( )

DATA cNome
DATA nI dade
DATA dNasci ment o

METHOD Cr eat e( ) CONSTRUCTOR
METHOD Set Nome( )
METHOD Set I dade( )

ENDCLASS

METHOD Cr eat e( cNome, dNasci ment o) CLASS Pessoa
: : cNome : = cNome
: : dNasci ment o : = dNasci ment o
: : nI dade : = Cal cI dade( dNasci ment o)
Ret ur n SELF

STATI C FUNCTI ON Cal cI dade( dNasci ment o)
Local nI dade
nI dade : = dDat aBase - dNasci ment o
RETURN nI dade


Herana entre classes

Seguindo o principio da orientao a objetos, a linguagem ADVPL permite que uma classe
receba por herana os mtodos e atributos definidos em uma outra classe, a qual tornasse a
superclasse desta instncia.

Para utilizar este recurso deve ser utilizada a palavra reservada FROM na declarao da
classe, especificando a superclasse que ser referenciada.

Em ADVPL o exemplo prtico desta situao a superclasse TSrvObject, a qual utilizada pela
maioria das classes e componentes da interface visual, como demonstrado no mdulo 06.


Exempl o par t e 01: Decl ar ao da cl asse Pessoa

#i ncl ude pr ot heus. ch
CLASS Pessoa( )

DATA cNome
DATA nI dade
DATA dNasci ment o

METHOD Cr eat e( ) CONSTRUCTOR
METHOD Set Nome( )
METHOD Set I dade( )

ENDCLASS


- 299 -

ADVPL Completo



Exempl o par t e 02: Decl ar ao da cl asse Al uno

#i ncl ude pr ot heus. ch
CLASS Al uno( ) FROM Pessoa

DATA nI D
DATA aCur sos

METHOD Cr eat e( ) CONSTRUCTOR
METHOD I nscr ever ( )
METHOD Aval i ar ( )
METHOD Get Not a( )
METHOD Get St at us( )

ENDCLASS

/ / Os obj et os da cl asse Al uno, possuemt odos os mt odos e at r i but os da cl asse
Pessoa, al m
/ / dos mt odos e at r i but os decl ar ados na pr pr i a cl asse.


Construtor para classes com herana

Quanto utilizado o recurso de herana entre classes, o construtor da classe instanciada deve
receber um tratamento adicional, para que o objeto instanciado seja criado com os atributos e
mtodos definidos na superclasse.

Nestes casos, logo aps a definio do mtodo construtor da classe, dever ser executado o
mtodo construtor da superclasse.

Exempl o par t e 03: Mt odo Const r ut or da cl asse Al uno

METHOD Cr eat e( cNome, dNasci ment o, nI D)
: Cr eat e( cNome, dNasci ment o) / / Chamada do mt odo const r ut or da cl asse Pessoa.

: : nI D : = I D

Ret ur n SELF




- 300 -

ADVPL Completo



MDULO 06: ADVPL Orientado objetos I

Neste mdulo sero tratados os componentes e objetos da interface visual da linguagem
ADVPL, permitindo o desenvolvimento de aplicaes com interfaces grficas com sintaxe
orientada a objetos.

29. Componentes da interface visual do ADVPL

A linguagem ADVPL possui diversos componentes visuais e auxiliares, os quais podem ser
representados utilizando a estrutura abaixo:

. Classes da Interface Visual




Tsrvobject
. Classes Auxiliares


Tfont

. Classes de Janelas


Msdialog
Tdialog
Twindow

. Classes de Componentes


Tcontrol


.
Classes de Componentes
Visuais
Brgetddb
Mscalend
Mscalendgrid
Msselbr
Msworktime
Sbutton
Tbar
Tbitmap
Tbrowsebutton
Tbtnbmp
Tbtnbmp2
Tbutton
Tcbrowse
Tcheckbox
Tcolortriangle
Tcombobox
Tfolder
Tfont
Tget
Tgroup
Thbutton
Tibrowser
Tlistbox
Tmenu
Tmenubar
Tmeter
Tmsgraphic
Tmsgbar
Tmultibtn
Tmultiget
Tolecontainer
Tpageview
Tpanel
Tradmenu
Tsbrowse
Tsay
Tscrollbox
Tsimpleeditor
Tslider

- 301 -

ADVPL Completo






.
Classes de Componentes
Visuais
Tsplitter
Ttabs
Ttoolbox
Twbrowse
Vcbrowse

Classes da interface visual

TSRVOBJECT()

Descrio
Classe abstrata inicial de todas as classes de interface do ADVPL. No deve
ser instanciada diretamente.


Classes auxiliares

TFONT()

Descrio
Classe de objetos que define a fonte do texto utilizado nos controles
visuais.


Classes de janelas

MSDIALOG()

Descrio
Classe de objetos que deve ser utilizada como padro de janela para
entrada de dados. MSDialog um tipo de janela dilogo modal, isto ,
no permite que outra janela ativa receba dados enquanto esta estiver
ativa.

TDIALOG()

Descrio
Classe de objetos do tipo dilogo de entrada de dados, sendo seu uso
reservado. Recomenda-se utilizar a classe MSDialog que herdada desta
classe.

TWINDOW()

Descrio
Classe de objetos do tipo dilogo principal de programa. Dever existir
apenas uma instncia deste objeto na execuo do programa.


Classes de componentes

TCONTROL()

Descrio
Classe abstrata comum entre todos os componentes visuais editveis.
No deve ser instanciada diretamente.


- 302 -

ADVPL Completo



Classes de componentes visuais

BRGETDDB()

Descrio Classe de objetos visuais do tipo Grid.

MSCALEND()

Descrio Classe de objetos visuais do tipo Calendrio.


MSCALENDGRID()

Descrio Classe de objetos visuais do tipo Grade de Perodos.

MSSELBR()

Descrio Classe de objetos visuais do tipo controle - Grid

MSWORKTIME()

Descrio Classe de objetos visuais do tipo controle - Barra de Perodo.

SBUTTON()

Descrio
Classe de objetos visuais do tipo boto, o qual pode possuir imagens
padres associadas ao seu tipo.

TBAR()

Descrio Classe de objetos visuais do tipo Barra Superior.

TBITMAP()

Descrio Classe de objetos visuais que permite a exibio de uma imagem.

TBROWSEBUTTON()

Descrio
Classe de objetos visuais do tipo boto no formato padro utilizado
em browses da aplicao.

TBTNBMP()

Descrio
Classe de objetos visuais do tipo boto, o qual permite que seja
vinculada uma imagem ao controle.


- 303 -

ADVPL Completo



TBTNBMP2()

Descrio
Classe de objetos visuais do tipo boto, o qual permite a exibio de
uma imagem ou de um popup.

TBUTTON()

Descrio
Classe de objetos visuais do tipo boto, o qual permite a utilizao de
texto para sua identificao.

TCBROWSE()

Descrio Classe de objetos visuais do tipo Grid.

TCHECKBOX()

Descrio Classe de objetos visuais do tipo controle - CheckBox.

TCOLORTRIANGLE()

Descrio Classe de objetos visuais do tipo Paleta de Cores.

TCOMBOBOX()

Descrio
Classe de objetos visuais do tipo tComboBox, a qual cria uma entrada
de dados com mltipla escolha com item definido em uma lista
vertical, acionada por F4 ou pelo boto esquerdo localizado na parte
direita do controle. A varivel associada ao controle ter o valor de
um dos itens selecionados ou no caso de uma lista indexada, o valor
de seu ndice.

TFOLDER()

Descrio Classe de objetos visuais do tipo controle - Folder.

TGET()

Descrio
Classe de objetos visuais do tipo controle tGet, a qual cria um
controle que armazena ou altera o contedo de uma varivel atravs
de digitao. O contedo da varivel s modificado quando o
controle perde o foco de edio para outro controle.

TGROUP()

Descrio
Classe de objetos visuais do tipo painel tGroup, a qual cria um
painel onde controles visuais podem ser agrupados ou classificados.
Neste painel criada uma borda com ttulo em volta dos controles
agrupados.


- 304 -

ADVPL Completo



THBUTTON()

Descrio Classe de objetos visuais do tipo boto com hiperlink.

TIBROWSER()

Descrio
Classe de objetos visuais do tipo Pgina de Internet, sendo necessrio
incluir a clausula BrowserEnabled=1 no Config do Remote.INI

TLISTBOX()

Descrio
Classe de objetos visuais do tipo controle tListbox, a qual cria uma
janela com itens selecionveis e barra de rolagem. Ao selecionar um
item, uma varivel atualizada com o contedo do item selecionado.

TMENU()

Descrio Classe de objetos visuais do tipo controle - Menu.

TMENUBAR()

Descrio Classe de objetos visuais do tipo controle - Barra de Menu.

TMETER()

Descrio
Classe de objetos visuais do tipo controle tMeter, a qual exibe uma
rgua (gauge) de processamento, descrevendo o andamento de um
processo atravs da exibio de uma barra horizontal.

TMSGRAPHIC()

Descrio Classe de objetos visuais do tipo controle - Grfico.

TMSGBAR()

Descrio Classe de objetos visuais do tipo controle - Rodap.

TMULTIBTN()

Descrio Classe de objetos visuais do tipo controle - Mltiplos botes.

TMULTIGET()

Descrio
Classe de objetos visuais do tipo controle - edio de texto de
mltiplas linhas.


- 305 -

ADVPL Completo



TOLECONTAINER()

Descrio
Classe de objetos visuais do tipo controle, a qual permite a criao de
um boto vinculado a um objeto OLE.

TPAGEVIEW()

Descrio
Classe de objetos visuais do tipo controle, que permite a visualizao
de arquivos no formato gerado pelo spool de impresso do Protheus.

TPANEL()

Descrio
Classe de objetos visuais do tipo controle tPanel, a qual permite
criar um painel esttico, onde podem ser criados outros controles com
o objetivo de organizar ou agrupar componentes visuais.

TRADMENU()

Descrio
Classe de objetos visuais do tipo controle TRadMenu, a qual permite
criar um controle visual no formato Radio Button.

TSBROWSE()

Descrio
Classe de objetos visuais do tipo controle TSBrowse, a qual permite
criar um controle visual do tipo Grid.

TSAY()

Descrio
Classe de objetos visuais do tipo controle tSay, a qual exibe o
contedo de texto esttico sobre uma janela ou controle previamente
definidos.

TSCROLLBOX()

Descrio
Classe de objetos visuais do tipo controle tScrollbox, a qual permite
criar um painel com scroll deslizantes nas laterais (horizontais e
verticais) do controle.

TSIMPLEEDITOR()

Descrio
Classe de objetos visuais do tipo controle tSimpleEditor, a qual
permite criar um controle visual para edio de textos com recursos
simples, como o NotePad

TSLIDER()

Descrio
Classe de objetos visuais do tipo controle tSlider, a qual permite
criar um controle visual do tipo boto deslizante.

TSPLITTER()

Descrio
Classe de objetos visuais do tipo controle tSplitter, a qual permite
criar um controle visual do tipo divisor.

- 306 -

ADVPL Completo



TTABS()

Descrio
Classe de objetos visuais do tipo controle TTabs, a qual permite
criar um controle visual do tipo pasta.

TTOOLBOX()

Descrio
Classe de objetos visuais do tipo controle tToolbox, a qual permite
criar um controle visual para agrupar diferentes objetos.

TWBROWSE()

Descrio
Classe de objetos visuais do tipo controle TWBrowse, a qual permite
criar um controle visual do tipo Grid.

VCBROWSE()
Descrio
Classe de objetos visuais do tipo controle VCBrowse, a qual permite
criar um controle visual do tipo Grid.


Documentao dos componentes da interface visual

Os componentes da interface visual da linguagem ADVPL utilizados neste treinamento esto
documentados na seo Guia de Referncia, ao final deste material.

Para visualizar a documentao completa de todos os componentes mencionados neste
captulo deve ser acesso o site DEM Documentao Eletrnica Microsiga
(dem.microsiga.com.br) conforme abaixo:









- 307 -

ADVPL Completo



29.1. Particularidades dos componentes visuais


29.1.1. Configurando as cores para os componentes

Os componentes visuais da linguagem ADVPL utilizam o padro de cores RGB.

As cores deste padro so definidas pela seguinte frmula, a qual deve ser avaliada tendo
como base a paleta de cores no formato RGB:


nCor := nVermelho + (nVerde * 256) + (nAzul * 65536)





Figura: Paleta de cores no formato RGB

Com base nesta paleta, podemos definir os valores das seguintes cores bsicas:

Cor R G B Valor
Preto 0 0 0 0
Azul 0 0 255 16711680
Verde 0 255 0 65280
Ciano 0 255 255 16776960
Vermelho 255 0 0 255
Rosa 255 0 255 16711935
Amarelo 255 255 0 65535
Branco 255 255 255 16777215



- 308 -

ADVPL Completo



Para atribuir as cores aos objetos visuais devem ser observados os atributos utilizados para
estes fins em cada objeto, como por exemplo:

MSDIALOG()

nClrPane Cor de fundo do painel
nClrText Cor da fonte das letras do painel


TSAY()

nClrPane Cor de fundo do painel
nClrText Cor da fonte das letras do painel


Funo RGB()

A linguagem ADVPL possui a funo RGB() a qual retorna o valor da cor a ser definido, de
acordo com a parametrizao de cada um dos elementos da paleta RGB.


RGB(nRed, nGreen, nBlue)

nRed Valor de 0-255 para o elemento vermelho da paleta RGB
nGreen Valor de 0-255 para o elemento verde da paleta RGB
nBlue Valor de 0-255 para o elemento azul da paleta RGB
Retorno Valor a ser definido para o atributo cor do componente


- 309 -

ADVPL Completo



30. Aplicaes com a interface visual do ADVPL

A linguagem ADVPL possui interfaces visuais pr-definidas que auxiliam no desenvolvimento
de aplicaes mais completas, combinando estas interfaces com os componentes visuais
demonstrados anteriormente.

Didaticamente as interfaces visuais pr-definidas da linguagem ADVPL podem ser divididas em
trs grupos:

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)

Em ADVPL, as telas de captura de informaes compostas por mltiplos campos digitveis
acompanhados de seus respectivos textos explicativos so comumente chamados de
Enchoices.

Um Enchoice pode ser facilmente entendida como diversos conjuntos de objetos TSay e TGet
alinhados de forma a visualizar ou capturar informaes, normalmente vinculadas a arquivos
de cadastros ou movimentaes simples.

Abaixo temos a visualizao de uma Enchoice para o arquivo padro do ERP Protheus de
Cadastro de Clientes (SA1):



Figura: Enchoice do Cadastro de Clientes do ERP Protheus


- 310 -

ADVPL Completo



A linguagem ADVPL permite a implementao da Enchoice de duas formas similares:

E Funo Enchoice: Sintaxe tradicionalmente utilizada em ADVPL, a qual no retorna
um objeto para a aplicao chamadora;

E Classe MsMGet: Classe do objeto Enchoice, a qual permite a instanciao direta de um
objeto, tornando-o disponvel na aplicao chamadora.

A utilizao de um ou outro objeto depende unicamente da escolha do desenvolvedor j que os
parmetros para a funo Enchoice e para o mtodo New() da classe MsMGet so os mesmos,
lembrando que para manter a coerncia com uma aplicao escrita em orientao a objetos
dever ser utilizada a classe 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 Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser
editada
nReg Parmetro no utilizado
nOpc Nmero da linha do aRotina que definir o tipo de edio
(Incluso, Alterao, Excluso, Visualizao)
aCRA Parmetro no utilizado
cLetra Parmetro no utilizado
cTexto Parmetro no utilizado
aAcho Vetor com nome dos campos que sero exibidos. Os campos
de usurio sempre sero exibidos se no existir no parmetro
um elemento com a expresso "NOUSER"
aPos Vetor com coordenadas para criao da enchoice no formato
{<top>, <left>, <bottom>, <right>}
aCpos Vetor com nome dos campos que podero ser editados
nModelo Se for diferente de 1 desabilita execuo de gatilhos
estrangeiros
nColMens Parmetro no utilizado
cMensagem Parmetro no utilizado
cTudoOk Expresso para validao da Enchoice
oWnd Objeto (janela, painel, etc.) onde a enchoice ser criada.
lF3 Indica se a enchoice esta sendo criada em uma consulta F3
para utilizar variveis de memria
lMemoria Indica se a enchoice utilizar variveis de memria ou os
campos da tabela na edio
lColumn Indica se a apresentao dos campos ser em forma de
coluna
caTela Nome da varivel tipo "private" que a enchoice utilizar no
lugar da propriedade aTela
lNoFolder Indica se a enchoice no ir utilizar as Pastas de Cadastro
(SXA)
lProperty Indica se a enchoice no utilizar as variveis aTela e aGets,
somente suas propriedades com os mesmos nomes

- 311 -

ADVPL Completo




Exemplo: Utilizao da funo Enchoice()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MBRWENCH | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao da f uno Enchoi ce( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Mr bwEnch( )

Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es"
Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ;
{" Vi sual i zar " , " U_ModEnc" , 0, 2}}

DbSel ect Ar ea( " SA1" )
DbSet Or der ( 1)

MBr owse( 6, 1, 22, 75, " SA1" )

Ret ur n

User Funct i on ModEnc( cAl i as, nReg, nOpc)

Local aCpoEnch : = {}
Local aAl t er : = {}

Local cAl i asE : = cAl i as
Local aAl t er Ench : = {}
Local aPos : = {000, 000, 400, 600}
Local nModel o : = 3
Local l F3 : = . F.
Local l Memor i a : = . T.
Local l Col umn : = . F.
Local caTel a : = " "
Local l NoFol der : = . F.
Local l Pr oper t y : = . F.
Pr i vat e oDl g
Pr i vat e oGet D
Pr i vat e oEnch
Pr i vat e aTELA[ 0] [ 0]
Pr i vat e aGETS[ 0]

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( cAl i asE)



- 312 -

ADVPL Completo



Exempl o ( cont i nuao) :

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE
I f ! ( SX3- >X3_CAMPO $ " A1_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ;
X3Uso( SX3- >X3_USADO)
AADD( aCpoEnch, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er Ench : = aCl one( aCpoEnch)

DEFI NE MSDI ALOG oDl g TI TLE cCadast r o FROM 000, 000 TO 400, 600 PI XEL
RegToMemor y( " SA1" , I f ( nOpc==3, . T. , . F. ) )

Enchoi ce( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ;
aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , ;
/ *cMensagem*/ , / *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, ;
caTel a, l NoFol der , l Pr oper t y)

ACTI VATE MSDI ALOG oDl g CENTERED

Ret ur n


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 Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser
editada
nReg Parmetro no utilizado
nOpc Nmero da linha do aRotina que definir o tipo de edio
(Incluso, Alterao, Excluso, Visualizao)
aCRA Parmetro no utilizado
cLetra Parmetro no utilizado
cTexto Parmetro no utilizado
aAcho Vetor com nome dos campos que sero exibidos. Os campos
de usurio sempre sero exibidos se no existir no parmetro
um elemento com a expresso "NOUSER"
aPos Vetor com coordenadas para criao da enchoice no formato
{<top>, <left>, <bottom>, <right>}
aCpos Vetor com nome dos campos que podero ser editados
nModelo Se for diferente de 1 desabilita execuo de gatilhos
estrangeiros
nColMens Parmetro no utilizado
cMensagem Parmetro no utilizado
cTudoOk Expresso para validao da Enchoice
oWnd Objeto (janela, painel, etc.) onde a enchoice ser criada.
lF3 Indica se a enchoice esta sendo criada em uma consulta F3
para utilizar variveis de memria

- 313 -

ADVPL Completo


lMemoria Indica se a enchoice utilizar variveis de memria ou os
campos da tabela na edio
lColumn Indica se a apresentao dos campos ser em forma de
coluna
caTela Nome da varivel tipo "private" que a enchoice utilizar no
lugar da propriedade aTela
lNoFolder Indica se a enchoice no ir utilizar as Pastas de Cadastro
(SXA)
lProperty Indica se a enchoice no utilizar as variveis aTela e aGets,
somente suas propriedades com os mesmos nomes

Exemplo: Utilizao do objeto MsMGet()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MBRWMSGET | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o MsMget ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Mr bwMsGet ( )

Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es"
Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ;
{" Vi sual i zar " , " U_ModEnc" , 0, 2}}

DbSel ect Ar ea( " SA1" )
DbSet Or der ( 1)

MBr owse( 6, 1, 22, 75, " SA1" )

Ret ur n

User Funct i on ModEnc( cAl i as, nReg, nOpc)
Local aCpoEnch : = {}
Local aAl t er : = {}

Local cAl i asE : = cAl i as
Local aAl t er Ench : = {}
Local aPos : = {000, 000, 400, 600}
Local nModel o : = 3
Local l F3 : = . F.
Local l Memor i a : = . T.
Local l Col umn : = . F.
Local caTel a : = " "
Local l NoFol der : = . F.
Local l Pr oper t y : = . F.
Pr i vat e oDl g
Pr i vat e oGet D
Pr i vat e oEnch
Pr i vat e aTELA[ 0] [ 0]
Pr i vat e aGETS[ 0]

- 314 -

ADVPL Completo


Exemplo (continuao):

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( cAl i asE)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE
I f ! ( SX3- >X3_CAMPO $ " A1_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And.
X3Uso( SX3- >X3_USADO)
AADD( aCpoEnch, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er Ench : = aCl one( aCpoEnch)

oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. )

RegToMemor y( cAl i asE, I f ( nOpc==3, . T. , . F. ) )

oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , ;
/ *cText o*/ , aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , ;
/ *cMensagem*/ , / *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, caTel a, ;
l NoFol der , l Pr oper t y)

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n


30.2. Captura de mltiplas informaes (Multi-Lines)

A linguagem ADVPL permite a utilizao de basicamente dois tipos de objetos do tipo grid, ou
como tambm so conhecidos: multi-line:

E Grids digitveis: permitem a visualizao e captura de informaes, comumente
utilizados em interfaces de cadastro e manuteno, tais como:

MSGETDB()
MSGETDADOS()
MSNEWGETDADOS()

E Grids no digitveis: permitem somente a visualizao de informaes, comumente
utilizados como browses do ERP Protheus, tais como:

TWBROWSE()
MAWNDBROWSE()
MBROWSE()

Neste tpico sero tratadas as grids digitveis disponveis na linguagem ADVPL para o
desenvolvimento de interfaces de cadastros e manuteno de informaes.

- 315 -

ADVPL Completo



30.2.1. MsGetDB()

A classe de objetos visuais MsGetDB() permite a criao de um grid digitvel com uma ou mais
colunas, baseado em uma tabela temporria.

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 Distancia entre a MsGetDB e o extremidade superior do
objeto que a contm.
nLeft Distancia entre a MsGetDB e o extremidade esquerda do
objeto que a contm.
nBottom Distancia entre a MsGetDB e o extremidade inferior do objeto
que a contm.
nRight

Distancia entre a MsGetDB e o extremidade direita do objeto
que a contm.
nOpc Posio do elemento do vetor aRotina que a MsGetDB usar
como referncia.
cLinhaOk Funo executada para validar o contexto da linha atual do
aCols.
cTudoOk Funo executada para validar o contexto geral da MsGetDB
(todo aCols).
cIniCpos Nome dos campos do tipo caracter que utilizaro incremento
automtico. Este parmetro deve ser no formato +<nome
do primeiro campo>+<nome do segundo campo>+....
lDelete Habilita a opo de excluir linhas do aCols. Valor padro
falso.
aAlter Vetor com os campos que podero ser alterados.
nFreeze Indica qual coluna no ficara congelada na exibio.
lEmpty Habilita validao da primeira coluna do aCols para esta no
poder estar vazia. Valor padro falso.
uPar1 Parmetro reservado.
cFieldOk Funo executada na validao do campo.
cTRB Alias da tabela temporria.
lCondicional Reservado
lAppend Indica se a MsGetDB ira criar uma linha em branco
automaticamente quando for incluso.
cDelOk Funo executada para validar a excluso de uma linha do
aCols.
lDisparos Indica se ser utilizado o Dicionrio de Dados para consulta
padro, inicializao padro e gatilhos.
uPar2 Parmetro reservado.
cSuperDel -Funo executada quando pressionada as teclas
<Ctrl>+<Delete>.
oWnd Objeto no qual a MsGetDB ser criada.




- 316 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vetor com as rotinas que sero executadas na MBrowse e
que definira o tipo de operao que esta sendo executada
(incluso, alterao, excluso, visualizao, pesquisa, ...) no
formato:
{cTitulo, cRotina, nOpo, nAcesso}, aonde:
nOpo segue o padro do ERP Protheus para:
1- Pesquisar
2- Visualizar
3- Incluir
4- Alterar
5- Excluir
aHeader Vetor com informaes das colunas no formato:

{cTitulo, cCampo, cPicture, nTamanho, nDecimais,;
cValidao, cReservado, cTipo, xReservado1, xReservado2}

A tabela temporria utilizada pela MsGetDB dever ser criada
com base no aHeader mais um ltimo campo tipo lgico que
determina se a linha foi excluda.


lRefresh Varivel tipo lgica para uso reservado.


- 317 -

ADVPL Completo



E Variveis pblicas:

nBrLin Indica qual a linha posicionada do aCols.

E Funes de validao:

cLinhaOk Funo de validao na mudana das linhas da grid. No
pode ser definida como Static Function.
cTudoOk Funo de validao da confirmao da operao com o grid.
No pode ser definida como Static Function.

E Mtodos adicionais:

ForceRefresh() Atualiza a MsGetDB com a tabela e posiciona na primeira
linha.

Exemplo: Utilizao do objeto MsGetDB()


#i ncl ude pr ot heus. ch

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GETDBSA1 | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o MsGet DB( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Get DbSA1( )

Local nI
Local oDl g
Local oGet DB
Local nUsado : = 0
Local aSt r uct : = {}

Pr i vat e l Ref r esh : = . T.
Pr i vat e aHeader : = {}
Pr i vat e aCol s : = {}
Pr i vat e aRot i na : = {{" Pesqui sar " , " AxPesqui " , 0, 1}, ;
{" Vi sual i zar " , " AxVi sual " , 0, 2}, ;
{" I ncl ui r " , " AxI ncl ui " , 0, 3}, ;
{" Al t er ar " , " AxAl t er a" , 0, 4}, ;
{" Excl ui r " , " AxDel et a" , 0, 5}}

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( " SA1" )


- 318 -

ADVPL Completo


Exempl o ( cont i nuao) :

Whi l e ! Eof ( ) . and. SX3- >X3_ARQUI VO == " SA1"
I f X3Uso( SX3- >X3_USADO) . and. cNi vel >= SX3- >X3_NI VEL
nUsado++
AADD( aHeader , {Tr i m( X3Ti t ul o( ) ) , ;
SX3- >X3_CAMPO, ;
SX3- >X3_PI CTURE, ;
SX3- >X3_TAMANHO, ;
SX3- >X3_DECI MAL, ;
SX3- >X3_VALI D, ;
" " , ;
SX3- >X3_TI PO, ;
" " , ;
" " })
AADD( aSt r uct , {SX3- >X3_CAMPO, SX3- >X3_TI PO, SX3- >X3_TAMANHO, ;
SX3- >X3_DECI MAL})
EndI f
DbSki p( )
End

AADD( aSt r uct , {" FLAG" , " L" , 1, 0})

cCr i aTr ab : = Cr i aTr ab( aSt r uct , . T. )
DbUseAr ea( . T. , __Local Dr i ver , cCr i aTr ab, , . T. , . F. )

oDl g : = MSDI ALOG( ) : New( 000, 000, 300, 400, MsGet DB SA1, , , , , , , , , . T. )

oGet DB : = MsGet DB( ) : New( 05, 05, 145, 195, 3, " U_LI NHAOK" , " U_TUDOOK" , " +A1_COD" , ;
. T. , {" A1_NOME" }, 1, . F. , , cCr i aTr ab, " U_FI ELDOK" , , . T. , oDl g, . T. , , " U_DELOK" , ;
" U_SUPERDEL" )

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )
DbSel ect Ar ea( cCr i aTr ab)
DbCl oseAr ea( )

Ret ur n

User Funct i on LI NHAOK( )
ApMsgSt op( " LI NHAOK" )
Ret ur n . T.

User Funct i on TUDOOK( )
ApMsgSt op( " LI NHAOK" )
Ret ur n . T.

User Funct i on DELOK( )
ApMsgSt op( " DELOK" )
Ret ur n . T.

User Funct i on SUPERDEL( )
ApMsgSt op( " SUPERDEL" )
Ret ur n . T.

User Funct i on FI ELDOK( )
ApMsgSt op( " FI ELDOK" )
Ret ur n . T.



- 319 -

ADVPL Completo



30.2.2. MsGetDados()

A classe de objetos visuais MsGetDados() permite a criao de um grid digitvel com uma ou
mais colunas, baseado em um array.

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 Distancia entre a MsGetDados e o extremidade superior do
objeto que a contm.
nLeft Distancia entre a MsGetDados e o extremidade esquerda do
objeto que a contm.
nBottom Distancia entre a MsGetDados e o extremidade inferior do
objeto que a contm.
nRight

Distancia entre a MsGetDados e o extremidade direita do
objeto que a contm.
nOpc Posio do elemento do vetor aRotina que a MsGetDados
usar como referencia.
cLinhaOk Funo executada para validar o contexto da linha atual do
aCols.
cTudoOk Funo executada para validar o contexto geral da
MsGetDados (todo aCols).
cIniCpos Nome dos campos do tipo caracter que utilizaro incremento
automtico. Este parmetro deve ser no formato +<nome
do primeiro campo>+<nome do segundo campo>+....
lDelete Habilita excluir linhas do aCols. Valor padro falso.
aAlter Vetor com os campos que podero ser alterados.
uPar1 Parmetro reservado.
lEmpty Habilita validao da primeira coluna do aCols para esta no
poder estar vazia. Valor padro falso.
nMax Nmero mximo de linhas permitidas. Valor padro 99.
cFieldOk Funo executada na validao do campo.
cSuperDel Funo executada quando pressionada as teclas
<Ctrl>+<Delete>.
uPar2 Parmetro reservado.
cDelOk Funo executada para validar a excluso de uma linha do
aCols.
oWnd Objeto no qual a MsGetDados ser criada.


- 320 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vetor com as rotinas que sero executadas na MBrowse e
que definira o tipo de operao que esta sendo executada
(incluso, alterao, excluso, visualizao, pesquisa, ...) no
formato:
{cTitulo, cRotina, nOpo, nAcesso}, aonde:
nOpo segue o padro do ERP Protheus para:
6- Pesquisar
7- Visualizar
8- Incluir
9- Alterar
10- Excluir
aHeader Vetor com informaes das colunas no formato:

{cTitulo, cCampo, cPicture, nTamanho, nDecimais,;
cValidao, cReservado, cTipo, xReservado1, xReservado2}

A tabela temporria utilizada pela MsGetDB dever ser criada
com base no aHeader mais um ltimo campo tipo lgico que
determina se a linha foi excluda.


lRefresh Varivel tipo lgica para uso reservado.


- 321 -

ADVPL Completo



E Variveis pblicas:

N Indica qual a linha posicionada do aCols.

E Funes de validao:

cLinhaOk Funo de validao na mudana das linhas da grid. No
pode ser definida como Static Function.
cTudoOk Funo de validao da confirmao da operao com o grid.
No pode ser definida como Static Function.

E Mtodos adicionais:

ForceRefresh() Atualiza a MsGetDados com a tabela e posiciona na primeira
linha.
Hide() Oculta a MsGetDados.
Show() Mostra a MsGetDados.


Exemplo: Utilizao do objeto MsGetDados()


#i ncl ude pr ot heus. ch

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GETDADOSA1 | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o MSGETADOS( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Get DadoSA1( )

Local nI
Local oDl g
Local oGet Dados
Local nUsado : = 0
Pr i vat e l Ref r esh : = . T.
Pr i vat e aHeader : = {}
Pr i vat e aCol s : = {}

Pr i vat e aRot i na : = {{" Pesqui sar " , " AxPesqui " , 0, 1}, ;
{" Vi sual i zar " , " AxVi sual " , 0, 2}, ;
{" I ncl ui r " , " AxI ncl ui " , 0, 3}, ;
{" Al t er ar " , " AxAl t er a" , 0, 4}, ;
{" Excl ui r " , " AxDel et a" , 0, 5}}

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( " SA1" )


- 322 -

ADVPL Completo



Exempl o ( cont i nuao) :

Whi l e ! Eof ( ) . and. SX3- >X3_ARQUI VO == " SA1"
I f X3Uso( SX3- >X3_USADO) . and. cNi vel >= SX3- >X3_NI VEL
nUsado++
AADD( aHeader , {Tr i m( X3Ti t ul o( ) ) , ;
SX3- >X3_CAMPO, ;
SX3- >X3_PI CTURE, ;
SX3- >X3_TAMANHO, ;
SX3- >X3_DECI MAL, ;
SX3- >X3_VALI D, ;
" " , ;
SX3- >X3_TI PO, ;
" " , ;
" " })
EndI f
DbSki p( )
End

AADD( aCol s, Ar r ay( nUsado+1) )

For nI : = 1 To nUsado
aCol s[ 1] [ nI ] : = Cr i aVar ( aHeader [ nI ] [ 2] )
Next

aCol s[ 1] [ nUsado+1] : = . F.

oDl g : = MSDI ALOG( ) : New( 000, 000, 300, 400, MsGet Dados SA1, , , , , , , , , . T. )

oGet Dados : = MsGet Dados( ) : New( 05, 05, 145, 195, 4, " U_LI NHAOK" , " U_TUDOOK" , ;
" +A1_COD" , . T. , {" A1_NOME" }, , . F. , 200, " U_FI ELDOK" , " U_SUPERDEL" , , ;
" U_DELOK" , oDl g)

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n

User Funct i on LI NHAOK( )
ApMsgSt op( " LI NHAOK" )
Ret ur n . T.

User Funct i on TUDOOK( )
ApMsgSt op( " LI NHAOK" )
Ret ur n . T.

User Funct i on DELOK( )
ApMsgSt op( " DELOK" )
Ret ur n . T.

User Funct i on SUPERDEL( )
ApMsgSt op( " SUPERDEL" )
Ret ur n . T.

User Funct i on FI ELDOK( )
ApMsgSt op( " FI ELDOK" )
Ret ur n . T.



- 323 -

ADVPL Completo



30.2.3. MsNewGetDados()

A classe de objetos visuais MsNewGetDados() permite a criao de um grid digitvel com uma
ou mais colunas, baseado em um array.

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 Distancia entre a MsNewGetDados e o extremidade superior
do objeto que a contem
nEsquerda Distancia entre a MsNewGetDados e o extremidade esquerda
do objeto que a contem
nInferior Distancia entre a MsNewGetDados e o extremidade inferior do
objeto que a contem
nDireita Distancia entre a MsNewGetDados e o extremidade direita do
objeto que a contem
nOpc Operao em execuo: 2- Visualizar, 3- Incluir, 4- Alterar, 5-
Excluir
cLinOk Funo executada para validar o contexto da linha atual do
aCols
cTudoOk Funo executada para validar o contexto geral da
MsNewGetDados (todo aCols)
cIniCpos Nome dos campos do tipo caracter que utilizaro incremento
automtico.
aAlterGDa Campos alterveis da GetDados
nFreeze Campos estticos na GetDados, partindo sempre da posio
inicial da getdados aonde:
1- Primeiro campo congelado
2- Primeiro e segundo campos congelados...
nMax Nmero mximo de linhas permitidas. Valor padro 99
cFieldOk Funo executada na validao do campo
cSuperDel Funo executada quando pressionada as teclas
<Ctrl>+<Delete>
cDelOk Funo executada para validar a excluso de uma linha do
aCols
oDLG Objeto no qual a MsNewGetDados ser criada
aHeader Array a ser tratado internamente na MsNewGetDados como
aHeader
aCols Array a ser tratado internamente na MsNewGetDados como
aCols


- 324 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vetor com as rotinas que sero executadas na MBrowse e
que definira o tipo de operao que esta sendo executada
(incluso, alterao, excluso, visualizao, pesquisa, ...) no
formato:
{cTitulo, cRotina, nOpo, nAcesso}, aonde:

nOpo segue o padro do ERP Protheus para:
1- Pesquisar
2- Visualizar
3- Incluir
4- Alterar
5- Excluir
aHeader Vetor com informaes das colunas no formato:

{cTitulo, cCampo, cPicture, nTamanho, nDecimais,;
cValidao, cReservado, cTipo, xReservado1, xReservado2}

A tabela temporria utilizada pela MsGetDB dever ser criada
com base no aHeader mais um ltimo campo tipo lgico que
determina se a linha foi excluda.

lRefresh Varivel tipo lgica para uso reservado.

- 325 -

ADVPL Completo



E Variveis pblicas:

N Indica qual a linha posicionada do aCols.

E Funes de validao:

cLinhaOk Funo de validao na mudana das linhas da grid. No
pode ser definida como Static Function.
cTudoOk Funo de validao da confirmao da operao com o grid.
No pode ser definida como Static Function.

E Mtodos adicionais:

ForceRefresh() Atualiza a MsNewGetDados com a tabela e posiciona na
primeira linha.
Hide() Oculta a MsNewGetDados.
Show() Mostra a MsNewGetDados.

Exemplo: Utilizao dos objetos MsNewGetDados() e MsMGet()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MBRWGETD | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao dos obj et os |
| | MsNewGet Dados( ) e MsMGet ( ) combi nados |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Mr bwGet D( )

Pr i vat e cCadast r o : = " Pedi dos de Venda"
Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ;
{" Vi sual i zar " , " U_ModGt d" , 0, 2}, ;
{" I ncl ui r " , " U_ModGt d" , 0, 3}}

DbSel ect Ar ea( " SC5" )
DbSet Or der ( 1)

MBr owse( 6, 1, 22, 75, " SC5" )

Ret ur n

User Funct i on ModGt d( cAl i as, nReg, nOpc)

Local nX : = 0
Local nUsado : = 0
Local aBut t ons : = {}
Local aCpoEnch : = {}
Local cAl i asE : = cAl i as
Local aAl t er Ench : = {}


- 326 -

ADVPL Completo



Exempl o ( cont i nuao) :

Local aPos : = {000, 000, 080, 400}
Local nModel o : = 3
Local l F3 : = . F.
Local l Memor i a : = . T.
Local l Col umn : = . F.
Local caTel a : = " "
Local l NoFol der : = . F.
Local l Pr oper t y : = . F.
Local aCpoGDa : = {}
Local cAl i asGD : = " SC6"
Local nSuper i or : = 081
Local nEsquer da : = 000
Local nI nf er i or : = 250
Local nDi r ei t a : = 400
Local cLi nOk : = " Al l waysTr ue"
Local cTudoOk : = " Al l waysTr ue"
Local cI ni Cpos : = " C6_I TEM"
Local nFr eeze : = 000
Local nMax : = 999
Local cFi el dOk : = " Al l waysTr ue"
Local cSuper Del : = " "
Local cDel Ok : = " Al l waysFal se"
Local aHeader : = {}
Local aCol s : = {}
Local aAl t er GDa : = {}

Pr i vat e oDl g
Pr i vat e oGet D
Pr i vat e oEnch
Pr i vat e aTELA[ 0] [ 0]
Pr i vat e aGETS[ 0]

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( cAl i asE)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE
I f ! ( SX3- >X3_CAMPO $ " C5_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ;
X3Uso( SX3- >X3_USADO)
AADD( aCpoEnch, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er Ench : = aCl one( aCpoEnch)

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
MsSeek( cAl i asGD)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asGD
I f ! ( Al l Tr i m( SX3- >X3_CAMPO) $ " C6_FI LI AL" ) . And. ;
cNi vel >= SX3- >X3_NI VEL . And. X3Uso( SX3- >X3_USADO)
AADD( aCpoGDa, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

- 327 -

ADVPL Completo



Exempl o ( cont i nuao) :

aAl t er GDa : = aCl one( aCpoGDa)

nUsado: =0
dbSel ect Ar ea( " SX3" )
dbSeek( " SC6" )
aHeader : ={}
Whi l e ! Eof ( ) . And. ( x3_ar qui vo==" SC6" )
I f X3USO( x3_usado) . And. cNi vel >=x3_ni vel
nUsado: =nUsado+1
AADD( aHeader , { TRI M( x3_t i t ul o) , x3_campo, x3_pi ct ur e, x3_t amanho, ;
x3_deci mal , " Al l waysTr ue( ) " , x3_usado, x3_t i po, x3_ar qui vo, x3_cont ext } )
Endi f
dbSki p( )
End

I f nOpc==3 / / I ncl ui r
aCol s: ={Ar r ay( nUsado+1) }
aCol s[ 1, nUsado+1] : =. F.
For nX: =1 t o nUsado
I F aHeader [ nX, 2] == " C6_I TEM"
aCol s[ 1, nX] : = " 0001"
ELSE
aCol s[ 1, nX] : =Cr i aVar ( aHeader [ nX, 2] )
ENDI F
Next
El se
aCol s: ={}
dbSel ect Ar ea( " SC6" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( ) +M- >C5_NUM)
Whi l e ! eof ( ) . and. C6_NUM==M- >C5_NUM
AADD( aCol s, Ar r ay( nUsado+1) )
For nX: =1 t o nUsado
aCol s[ Len( aCol s) , nX] : =Fi el dGet ( Fi el dPos( aHeader [ nX, 2] ) )
Next
aCol s[ Len( aCol s) , nUsado+1] : =. F.
dbSki p( )
End
Endi f

oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. )
RegToMemor y( " SC5" , I f ( nOpc==3, . T. , . F. ) )

oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ;
aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , / *cMensagem*/ , ;
/ *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , ;
l Pr oper t y)

oGet D: = MsNewGet Dados( ) : New( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a, ;
nOpc, cLi nOk, cTudoOk, cI ni Cpos, aAl t er GDa, nFr eeze, nMax, cFi el dOk, ;
cSuper Del , cDel Ok, oDLG, aHeader , aCol s)

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, {| | oDl g: End( ) }, {| | oDl g: End( ) }, , aBut t ons) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )
Ret ur n

- 328 -

ADVPL Completo



30.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados()

Conforme visto no tpico sobre definio das propriedades de cores para os componentes
visuais, cada objeto possui caractersticas que devem ser respeitadas para correta utilizao
deste recurso.

E Atributos adicionais:

lUseDefaultColors Atributo que dever ser definido como .F. para que as
alteraes nas cores sejam permitidas.


E Mtodos adicionais:

SetBlkBackColor Mtodo que define a cor que ser utilizada para cada linha do
grid. No necessrio utilizar o mtodo Refresh() aps a
definio da cor por este mtodo.

E Aparncia:






- 329 -

ADVPL Completo



Exemplo: Definindo cores personalizadas para o objeto MsNewGetDados()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MRBWGTCL | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao dos obj et os |
| | MsNewGet Dados( ) e MsMGet ( ) combi nados e t r at ament o de cor es |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Mr bwGt Cl ( )

Pr i vat e cCadast r o : = " Pedi dos de Venda"
Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ;
{" Vi sual i zar " , " U_ModGt d" , 0, 2}, ;
{" I ncl ui r " , " U_ModGt d" , 0, 3}}

DbSel ect Ar ea( " SC5" )
DbSet Or der ( 1)

MBr owse( 6, 1, 22, 75, " SC5" )

Ret ur n

User Funct i on ModGt d( cAl i as, nReg, nOpc)

Local nX : = 0
Local nUsado : = 0

Local aBut t ons : = {}
Local aCpoEnch : = {}
Local cAl i asE : = cAl i as
Local aAl t er Ench : = {}
Local aPos : = {000, 000, 080, 400}
Local nModel o : = 3
Local l F3 : = . F.
Local l Memor i a : = . T.
Local l Col umn : = . F.
Local caTel a : = " "
Local l NoFol der : = . F.
Local l Pr oper t y : = . F.
Local aCpoGDa : = {}
Local cAl i asGD : = " SC6"
Local nSuper i or : = 081
Local nEsquer da : = 000
Local nI nf er i or : = 250
Local nDi r ei t a : = 400
Local cLi nOk : = " Al l waysTr ue"
Local cTudoOk : = " Al l waysTr ue"
Local cI ni Cpos : = " C6_I TEM"
Local nFr eeze : = 000
Local nMax : = 999


- 330 -

ADVPL Completo


Exempl o ( cont i nuao) :

Local cFi el dOk : = " Al l waysTr ue"
Local cSuper Del : = " "
Local cDel Ok : = " Al l waysFal se"
Local aHeader : = {}
Local aCol s : = {}
Local aAl t er GDa : = {}

Pr i vat e oDl g
Pr i vat e oGet D
Pr i vat e oEnch
Pr i vat e aTELA[ 0] [ 0]
Pr i vat e aGETS[ 0]

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( cAl i asE)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE
I f ! ( SX3- >X3_CAMPO $ " C5_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ;
X3Uso( SX3- >X3_USADO)
AADD( aCpoEnch, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er Ench : = aCl one( aCpoEnch)

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
MsSeek( cAl i asGD)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asGD
I f ! ( Al l Tr i m( SX3- >X3_CAMPO) $ " C6_FI LI AL" ) . And. cNi vel >= SX3-
>X3_NI VEL . And. X3Uso( SX3- >X3_USADO)
AADD( aCpoGDa, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er GDa : = aCl one( aCpoGDa)

nUsado: =0
dbSel ect Ar ea( " SX3" )
dbSeek( " SC6" )
aHeader : ={}
Whi l e ! Eof ( ) . And. ( x3_ar qui vo==" SC6" )
I f X3USO( x3_usado) . And. cNi vel >=x3_ni vel
nUsado: =nUsado+1
AADD( aHeader , { TRI M( x3_t i t ul o) , x3_campo, x3_pi ct ur e, ;
x3_t amanho, x3_deci mal , " Al l waysTr ue( ) " , ;
x3_usado, x3_t i po, x3_ar qui vo, x3_cont ext } )
Endi f
dbSki p( )
End


- 331 -

ADVPL Completo



Exempl o ( cont i nuao) :

I f nOpc==3 / / I ncl ui r
aCol s: ={Ar r ay( nUsado+1) }
aCol s[ 1, nUsado+1] : =. F.
For nX: =1 t o nUsado

I F aHeader [ nX, 2] == " C6_I TEM"
aCol s[ 1, nX] : = " 0001"
ELSE
aCol s[ 1, nX] : =Cr i aVar ( aHeader [ nX, 2] )
ENDI F

Next
El se
aCol s: ={}
dbSel ect Ar ea( " SC6" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( ) +M- >C5_NUM)
Whi l e ! eof ( ) . and. C6_NUM==M- >C5_NUM
AADD( aCol s, Ar r ay( nUsado+1) )
For nX: =1 t o nUsado
aCol s[ Len( aCol s) , nX] : =Fi el dGet ( Fi el dPos( aHeader [ nX, 2] ) )
Next
aCol s[ Len( aCol s) , nUsado+1] : =. F.
dbSki p( )
End
Endi f

oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. )

RegToMemor y( " SC5" , I f ( nOpc==3, . T. , . F. ) )

oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ;
aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , / *cMensagem*/ , ;
cTudoOk, oDl g, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y)

oGet D: = MsNewGet Dados( ) : New( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a, nOpc, ;
cLi nOk, cTudoOk, cI ni Cpos, aAl t er GDa, nFr eeze, nMax, cFi el dOk, cSuper Del , ;
cDel Ok, oDLG, aHeader , aCol s)

/ / Tr at ament o par a def i ni o de cor es espec f i cas,
/ / l ogo aps a decl ar ao da MsNewGet Dados

oGet D: oBr owse: l UseDef aul t Col or s : = . F.
oGet D: oBr owse: Set Bl kBackCol or ( {| | GETDCLR( oGet D: aCol s, oGet D: nAt , aHeader ) })

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, {| | oDl g: End( ) }, {| | oDl g: End( ) }, , aBut t ons) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n


- 332 -

ADVPL Completo



Exempl o ( cont i nuao) :

/ / Funo par a t r at ament o das r egr as de cor es par a a gr i d da MsNewGet Dados

St at i c Funct i on GETDCLR( aLi nha, nLi nha, aHeader )

Local nCor 2 : = 16776960 / / Ci ano - RGB( 0, 255, 255)
Local nCor 3 : = 16777215 / / Br anco - RGB( 255, 255, 255)
Local nPosPr od : = aScan( aHeader , {| x| Al l t r i m( x[ 2] ) == " C6_PRODUTO" })
Local nUsado : = Len( aHeader ) +1
Local nRet : = nCor 3

I f ! Empt y( aLi nha[ nLi nha] [ nPosPr od] ) . AND. aLi nha[ nLi nha] [ nUsado]
nRet : = nCor 2
El seI f ! Empt y( aLi nha[ nLi nha] [ nPosPr od] ) . AND. ! aLi nha[ nLi nha] [ nUsado]
nRet : = nCor 3
Endi f

Ret ur n nRet





























- 333 -

ADVPL Completo



30.3. Barras de botes

A linguagem ADVPL permite a implementao de barras de botes utilizando funes pr-
definidas desenvolvidas com o objetivo de facilitar sua utilizao, ou atravs da utilizao
direta dos componentes visuais disponveis. Dentre os recursos da linguagem que podem ser
utilizados com esta finalidade sero abordados:

E Funo EnchoiceBar: Sintaxe tradicionalmente utilizada em ADVPL, a qual no
retorna um objeto para a aplicao chamadora;

E Classe TBar: Classe do objeto TBar(), a qual permite a instanciao direta de um
objeto do tipo barra de botes superior, tornando-o disponvel na aplicao chamadora.

E Classe ButtonBar: Classe do objeto ButtonBar(), a qual permite a instanciao direta
de um objeto barra de botes genrico, o qual pode ser utilizado em qualquer posio
da tela, tornando-o disponvel na aplicao chamadora.


30.3.1. EnchoiceBar()

Funo que cria uma barra de botes no formato padro utilizado pelas interfaces de cadastro
da aplicao Protheus.

Esta barra possui os botes padres para confirmar ou cancelar a interface e ainda permite a
adio de botes adicionais com a utilizao do parmetro aButtons.


E Sintaxe:


EnchoiceBar( oDlg, bOk, bCancel, lMsgDel, aButtons, nRecno, cAlias)


E Parmetros:

oDlg Dialog onde ir criar a barra de botes
bOk Bloco de cdigo a ser executado no boto Ok
bCancel Bloco de cdigo a ser executado no boto Cancelar
lMsgDel Exibe dialog para confirmar a excluso
aButtons
Array contendo botes adicionais.
aArray[n][1] -> Imagem do boto
aArray[n][2] -> bloco de cdigo contendo a ao do boto
aArray[n][3] -> ttulo do boto
nRecno Registro a ser posicionado aps a execuo do boto Ok.
cAlias
Alias do registro a ser posicionado aps a execuo do boto
Ok. Se o parmetro nRecno for informado, o cAlias passa ser
obrigatrio.

E Aparncia:





- 334 -

ADVPL Completo


Exemplo: Utilizao da funo EnchoiceBar()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | DENCHBAR | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao da f uno |
| | Enchoi ceBar ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on DEnchBar ( )
Local oDl g, oBt n
Local aBut t ons : = {}

DEFI NE MSDI ALOG oDl g TI TLE " Test e Enchoi ceBar " FROM 000, 000 TO 400, 600 PI XEL OF;
oMai nWnd

AADD( aBut t ons, {" HI STORI C" , {| | Test Hi st ( ) }, " Hi st r i co. . . " , ;
" Hi st r i co" , {| | . T. }} )

@- 15, - 15 BUTTON oBt n PROMPT " . . . " SI ZE 1, 1 PI XEL OF oDl g

ACTI VATE MSDI ALOG oDl g ;
ON I NI T ( Enchoi ceBar ( oDl g, {| | l Ok: =. T. , oDl g: End( ) }, {| | oDl g: End( ) }, , @aBut t ons) )

Ret ur n















- 335 -

ADVPL Completo



30.3.2. TBar()

Classe de objetos visuais que permite a implementao de um componente do tipo barra de
botes para a parte superior de uma janela previamente definida.

E Sintaxe: New(oWnd, nBtnWidth, nBtnHeight, l3D, cMode, oCursor, cResource,
lNoAutoAdjust)

E Retorno: oTBar objeto do tipo TBar()

E Parmetros:

oWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
nBtnWidth Numrico, opcional. Largura do boto contido na barra
nBtnHeight Numrico, opcional. Altura do boto contido na barra
l3D Lgico, opcional. Define tipo da barra
cMode No utilizado.
oCursor
Objeto, opcional. Define Cursor ao posicionar o mouse sobre a
barra.
cResource
Caracter, opcional. Imagem do recurso a ser inserido como
fundo da barra.
lNoAutoAdjust Lgico.

E Aparncia:





Exemplo: Utilizao da funo EnchoiceBar()


#i ncl ude ' pr ot heus. ch'

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TSTBAR | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o TBar ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Tst TBar ( )
Local oDl g

oDl g : = MSDI ALOG( ) : New( 000, 000, 305, 505, ' Exempl o - TBAR' , , , , , , , , , . T. )

- 336 -

ADVPL Completo



Exemplo (continuao):

oTBar : = TBar ( ) : New( oDl g, 25, 32, . T. , , , , . F. )

oTBt nBmp2_1 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' copyuser ' , , , , ;
{| | Al er t ( ' TBt nBmp2_1' ) }, oTBar , ' msGet Ex' , , . F. , . F. )

oTBt nBmp2_2 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' cr i t i ca' , , , , ;
{| | }, oTBar , ' Cr i t i ca' , , . F. , . F. )

oTBt nBmp2_3 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' bmpcpo' , , , , ;
{| | }, oTBar , ' PCO' , , . F. , . F. )

oTBt nBmp2_4 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' pr eco' , , , , ;
{| | }, oTBar , ' Pr eo' , , . F. , . F. )

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n



30.3.3. ButtonBar

A sintaxe ButtonBar a forma clssica utilizada na linguagem ADVPL para implementar um
objeto da classe TBar(), o qual possui as caractersticas mencionadas no tpico anterior.

E Sintaxe:


DEFINE BUTTONBAR oBar SIZE nWidth, nHeight 3D MODE OF oDlg
CURSOR


E Retorno: ().

E Parmetros:

oBar Objeto do tipo TBar() que ser criado com a utilizao da
sintaxe ButtonBar().
nWidth Numrico, opcional. Largura do boto contido na barra.
nHeight Numrico, opcional. Altura do boto contido na barra.
3D Se definido habilita a visualizao em 3D da barra de botes.
oDlg Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
MODE Define a forma de orientao do objeto ButtonBar utilizando
os seguintes termos pr-definidos:
TOP, BOTTOM, FLOAT

CURSOR Objeto, opcional. Define Cursor ao posicionar o mouse sobre
a barra.


- 337 -

ADVPL Completo


A sintaxe ButtonBar requer a adio dos botes como recursos adicionais da barra
previamente definida utilizando a sintaxe abaixo:

E Botes: BUTTON RESOURCE

E Sintaxe adicional:


DEFINE BUTTON RESOURCE cBitMap OF oBar ACTION cAcao TOOLTIP
cTexto


E Parmetros:

cBitMap Nome da imagem disponvel na aplicao.
oBar Objeto do tipo TBar() no qual o boto ser adicionado.
cAcao Funo ou lista de expresses que determina a ao que ser
realizada pelo boto.
cTexto Texto no estilo tooltip text que ser exibido quando o
cursor do mouse for posicionado sobre o boto na barra de
ferramentas.

E Aparncia:





Exemplo: Utilizao da sintaxe ButtonBar


#i ncl ude ' pr ot heus. ch'

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | Tst BBar | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o TBar ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Tst BBar ( )

Local oDl g
Local oBt n1
Local oBt n2

oDl g : = MSDI ALOG( ) : New( 000, 000, 305, 505, ' Exempl o - BUTTONBAR' , , , , , , , , , . T. )

DEFI NE BUTTONBAR oBar SI ZE 25, 25 3D TOP OF oDl g

- 338 -

ADVPL Completo



Exemplo (continuao):

DEFI NE BUTTON RESOURCE " S4WB005N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Recor t ar "
DEFI NE BUTTON RESOURCE " S4WB006N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Copi ar "
DEFI NE BUTTON RESOURCE " S4WB007N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Col ar "
DEFI NE BUTTON oBt n1 RESOURCE " S4WB008N" OF oBar GROUP;
ACTI ON Cal cul ador a( ) TOOLTI P " Cal cul ador a"

oBt n1: cTi t l e: =" Cal c"
DEFI NE BUTTON RESOURCE " S4WB009N" OF oBar ACTI ON Agenda( ) TOOLTI P " Agenda"
DEFI NE BUTTON RESOURCE " S4WB010N" OF oBar ACTI ON Our Spool ( ) TOOLTI P " Spool "
DEFI NE BUTTON RESOURCE " S4WB016N" OF oBar GROUP;
ACTI ON Hel Pr og( ) TOOLTI P " Aj uda"

DEFI NE BUTTON oBt n2 RESOURCE " PARAMETROS" OF oBar GROUP;
ACTI ON Sx1C020( ) TOOLTI P " Par met r os"

oBt n2: cTi t l e: =" Par am. "

DEFI NE BUTTON oBt Ok RESOURCE " FI NAL" OF oBar GROUP;
ACTI ON oDl g: End( ) TOOLTI P " Sai r "

oBar : bRCl i cked : = {| | Al l waysTr ue( ) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n





















- 339 -

ADVPL Completo



30.3.4. Imagens pr-definidas para as barras de botes

Conforme mencionado nos tpicos anteriores, os botes visuais do tipo barra de botes
permitem a definio de itens com aes e imagens vinculadas.

Dentre os objetos e funes mencionados, foi citada a EnchoiceBar(), a qual permite a adio
de botes adicionais atravs do parmetro aButton, sendo que os itens deste array devem
possuir o seguinte formato:

E Sintaxe: AADD(aButtons,{cBitMap, bAcao, cTexto})

E Estrutura:

cBitMap
Nome da imagem pr-definida existente na aplicao ERP que
ser vinculada ao boto.
bAcao
Bloco de cdigo que define a ao que ser executada com a
utilizao do boto.
cTexto
Texto no estilo tooltip text que ser exibido quando o cursor
do mouse for posicionado sobre o boto na barra de
ferramentas.

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( aBut t ons, {" USER" , {| | Al l waysTr ue( ) }, " Usur i o" })



- 340 -

ADVPL Completo



APNDICES

BOAS PRTICAS DE PROGRAMAO

31. Arredondamento

Algumas operaes numricas podem causar diferenas de arredondamento. Isso ocorre
devido a diferenas no armazenamento de variveis numricas nos diversos processadores,
diferena esta, inclusive, presente no ADVPL, mesmo antes do surgimento do Protheus.

Para evitar esses problemas de arredondamento, deve ser utilizada a funo Round(),
principalmente antes de realizar uma comparao e antes de se utilizar a funo Int().

Desse modo, assegura-se que o resultado ser correto independentemente do processador ou
plataforma.

Exemplo 01:


I f ( Val or / 30) == 50 / / pode ser f al so ou i nvl i do
I f Round( Val or / 30, 0) == 50 / / cor r et o


Exemplo 02:


M- >EE8_QTDEM1 : = I nt ( M- >EE8_SLDI NI / M- >EE8_QE) / / pode ser f al so ou i nvl i do
M- >EE8_QTDEM1 : = I nt ( Round( M- >EE8_SLDI NI / M- >EE8_QE, 10) ) / / cor r et o



32. Utilizao de Identao

obrigatria a utilizao da identao, pois torna o cdigo muito mais legvel. Veja os
exemplos abaixo:


Whi l e ! SB1- >( Eof ( ) )
I f mv_par 01 == SB1- >B1_COD
dbSki p( )
Loop
Endi f
Do Case
Case SB1- >B1_LOCAL == 01 . OR. SB1- >B1_LOCAL == 02
Tr at aLocal ( SB1- >B1_COD, SB1- >B1_LOCAL)
Case SB1- >B1_LOCAL == 03
Tr at aDef ei t o( SB1- >B1_COD)
Ot her Wi se
Tr at aCompr a( SB1- >B1_COD, SB1- >B1_LOCAL)
EndCase
dbSki p( )
EndDo


- 341 -

ADVPL Completo




A utilizao da identao seguindo as estruturas de controle de fluxo (while, IF, caso etc.)
torna a compreenso do cdigo muito mais fcil:


Whi l e ! SB1- >( Eof ( ) )

I f mv_par 01 == SB1- >B1_COD
dbSki p( )
Loop
Endi f

Do Case
Case SB1- >B1_LOCAL == 01 . OR. SB1- >B1_LOCAL == 02
Tr at aLocal ( SB1- >B1_COD, SB1- >B1_LOCAL)

Case SB1- >B1_LOCAL == 03
Tr at aDef ei t o( SB1- >B1_COD)

Ot her Wi se
Tr at aCompr a( SB1- >B1_COD, SB1- >B1_LOCAL)
EndCase
dbSki p( )

EndDo


Para identar o cdigo utilize a tecla <TAB> e na ferramenta DEV-Studio, a qual pode ser
configurada atravs da opo Preferncias:



- 342 -

ADVPL Completo




33. Capitulao de Palavras-Chave

Uma conveno amplamente utilizada a de capitular as palavras chaves, funes, variveis e
campos utilizando uma combinao de caracteres em maisculo e minsculo, visando facilitar
a leitura do cdigo fonte. O cdigo a seguir:


Local ncnt while ( ncnt++ < 10 ) ntotal += ncnt * 2 enddo


Ficaria melhor com as palavras chaves e variveis capituladas:


Local nCnt While ( nCnt++ < 10 ) nTotal += nCnt * 2 EndDo




Para funes de manipulao de dados que comecem por db, a capitulao
s ser efetuada aps o db:

E dbSeek()
E dbSelectArea()


33.1. Palavras em maisculo

A regra utilizar caracteres em maisculo para:

E Constantes:


#define NUMLINES 60 #define NUMPAGES 1000


E Variveis de memria:


M-> CT2_CRCONV M->CT2_MCONVER := CriaVar("CT2_CONVER")


E Campos:


SC6->C6_NUMPED


E Querys:


SELECT * FROM...


- 343 -

ADVPL Completo



34. Utilizao da Notao Hngara

A notao hngara consiste em adicionar os prefixos aos nomes de variveis, de modo a
facilmente se identificar seu tipo. Isto facilita na criao de cdigos-fonte extensos, pois
usando a Notao Hngara, voc no precisa ficar o tempo todo voltando definio de uma
varivel para se lembrar qual o tipo de dados que deve ser colocado nela. Variveis devem
ter um prefixo de Notao Hngara em minsculas, seguido de um nome que identifique a
funo da varivel, sendo que a inicial de cada palavra deve ser maiscula.
obrigatria a utilizao desta notao para nomear variveis.
Notao Tipo de dado Exemplo
a Array aValores
b Bloco de cdigo bSeek
c Caracter cNome
d Data dDataBase
l Lgico lContinua
n Numrico nValor
o Objeto oMainWindow
x Indefinido xConteudo

35. Tcnicas de programao eficiente

Para o desenvolvimento de sistemas e a programao de rotinas, sempre esperado que
qualquer cdigo escrito seja:

O Funcionalmente correto
O Eficiente
O Legvel
O Reutilizvel
O Extensvel
O Portvel

Aps anos de experincia na utilizao de linguagens padro xBase e do desenvolvimento da
linguagem ADVPL, algumas tcnicas para uma programao otimizada e eficiente foram
reconhecidas. A utilizao das tcnicas a seguir, visa buscar o mximo aproveitamento dos
recursos da linguagem com o objetivo de criar programas com estas caractersticas.

Criao de funes segundo a necessidade

Observe o cdigo de exemplo:


User Funct i on Get Answer ( l Def aul t )
Local l Ok
l Ok : = Get Ok( l Def aul t )
I f l Ok
Ret ur n . T.
El se
Ret ur n . F.
Endi f
Ret ur n ni l


- 344 -

ADVPL Completo




Utilizando-se apenas o critrio "a funo funciona corretamente?", a funo GetAnswer
perfeita. Recebe um parmetro lgico com a resposta padro e retorna um valor lgico
dependente da opo escolhida pelo usurio em uma funo de dilogo "sim/no" designada
para isso. Pode entretanto ser melhorada, particularmente se eficincia for considerada como
um critrio para um cdigo melhor. Eficincia tipicamente envolve a utilizao de poucos
recursos de mquina, poucos chamadas de funes ou tornar mais rpido um processo.

Segundo esse raciocnio, poderia se produzir o seguinte cdigo:


User Funct i on Get Answer ( l Def aul t )
Ret ur n I f ( Get Ok( l Def aul t ) , . T. , . F. )


O cdigo acima ainda pode ser aprimorado conforme abaixo:


User Funct i on Get Answer ( l Def aul t )
Ret ur n Get Ok( l Def aul t )


Com a otimizao do cdigo da funo GetAnswer(), pode facilmente verificar que a mesma
no realiza nada adicional chamada de GetOk(), podendo ser substituda por uma chamada
direta desta, continuando a funcionar corretamente.

Codificao auto-documentvel

Nenhum comentrio substitui um cdigo claramente escrito, e este no um acidente.
Considere o exemplo:


cVar : = " " / / 11 espaos


O tamanho da varivel cVar no evidente por si s e no facilmente verificado. Estes
mesmos 10 espaos estariam mais bvios e ainda assim garantidos se a instruo fosse escrita
como:


cVar : = Space( 11)


O mesmo princpio pode ser aplicado para qualquer string longa de caracteres repetidos. A
funo Replicate pode ser utilizada como a seguir:


cVar : = Repl i cat e( " *" , 80 )


Este tipo de programao deixa o cdigo fcil de digitar, fcil de ler e mais flexvel.



- 345 -

ADVPL Completo



Utilizao de solues simples

Simplicidade na criao de instrues torna a programao e at mesmo a execuo mais
rpida. Considere a linha de cdigo:


I f nVar > 0 . Or . nVar < 0


Se o valor da varivel nVar for igual a zero (0) no momento da execuo desta linha de
cdigo, ambas as comparaes separadas pelo operador lgico .Or. sero efetuadas: Aps ser
avaliada, a primeira comparao ir falhar. A segunda comparao ser ento avaliada e
falhar tambm. Como resultado, o cdigo existente dentro da estrutura de fluxo If no ser
executado. Tal cdigo somente ser executado quando o valor desta varivel for maior OU
menor do que zero. Ou seja, sempre que for DIFERENTE de zero, o que torna a linha a seguir
mais eficiente:


I f nVar ! = 0


Este tipo de alterao torna o cdigo mais legvel e o processamento mais rpido, evitando a
avaliao de instrues desnecessariamente.

Existem outras situaes onde a simplificao pode ser utilizada. A expresso de avaliao a
seguir:


I f cVar == " A" . Or . cVar == " B" . Or cVar == " C" . Or . cVar == " D"


Pode ser substitudo pelo operador de conteno:


I f cVar $ " ABCD"


Opo por flexibilidade

A melhor soluo aquela que envolve o problema imediato e previne problemas no futuro.
Considere o exemplo:


@nRow, nCol PSAY cVar Pi ct ur e " ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! "


Exceto contando-se os caracteres, no existe maneira de saber se o nmero de caracteres de
exclamao o esperado. Enquanto isto um problema, existem algo mais grave. A expresso
de picture esttica. Se no futuro for necessrio ajustar o tamanho da varivel cVar, ser
necessrio localizar todos os lugares no cdigo onde esta mscara de picture est sendo
utilizada para ajuste manual.




- 346 -

ADVPL Completo



Existe uma opo de soluo de auto-ajuste disponvel que fcil de digitar e tem a garantia
de executar a tarefa igualmente (tornar todos os caracteres maisculos):


@nRow, nCol PSAY cVar Pi ct ur e " @! "


Opo da praticidade ao drama

Se a soluo parece complexa, provavelmente porque o caminho escolhido est levando a
isso. Deve-se sempre se perguntar porque algum desenvolveria uma linguagem que requisite
tantos comandos complicados para fazer algo simples. Na grande maioria dos casos, existe
uma soluo mais simples. O exemplo abaixo deixa isso bem claro:


@10, 25 Say Subst r ( cCep, 1, 5) + " - " + Subst r ( cCep, 6, 3) Pi ct ur e " ! ! ! ! ! ! ! ! ! "


Este cdigo pode ser escrito de uma forma muito mais simples, conforme demonstrado abaixo:


@10, 25 Say cCep Pi ct ur e " @R 99999- 999"


Utilizao de operadores de incremento/decremento

Utilizados devidamente, os operadores de incremento e decremento tornam o cdigo mais fcil
de ler e possivelmente um pouco mais rpidos. Ao contrrio de escrever adies simples como:


nVar : = nVar + 1
nVar : = nVar - 1


Pode-se escrev-las assim:


++nVar
- - nVar


Deve-se apenas tomar cuidado com a precedncia destes operadores, pois o "++" ou o "--"
podem aparecer antes ou depois de uma varivel, e em alguns casos quando a varivel for
utilizada dentro de uma expresso, a prefixao ou sufixao destes operadores afetar o
resultado. Para maiores detalhes, consulte a documentao de operadores da linguagem
ADVPL.


- 347 -

ADVPL Completo



Evitar passos desnecessrios

Existe uma diferena entre um bom hbito e perda de tempo. Algumas vezes estes conceitos
podem estar muito prximos, mas um modo de diferenci-los balancear os benefcios de
realizar alguma ao contra o problema que resultaria se no fosse executada. Observe o
exemplo:


Local nCnt : = 0
For nCnt : = 1 To 10
<cdi go>
Next nCnt


Inicializar a varivel no momento da declarao no um problema. Se o 0 fosse necessrio
no exemplo, teria sido til a inicializao na declarao. Mas neste caso a estrutura de
repetio For...Next atribui o seu valor imediatamente com 1, portanto no houve ganho em
atribuir a varivel com 0 no comeo.

Neste exemplo no h nenhum ponto negativo e nada errado ocorrer se a varivel no for
inicializada, portanto aconselhvel evitar este tipo de inicializao, pois no torna o cdigo
mais seguro e tambm no expressa a inteno do cdigo mais claramente.

Porm note este exemplo, onde a varivel no inicializada:


Local nCnt
Whi l e ( nCnt ++ < 10 )
<cdi go>
EndDo


Em ADVPL, variveis no inicializadas sempre tem seu valor contendo nulo (nil) a princpio, o
que far com que uma exceo em tempo de execuo acontea quando a instruo de
repetio while for executada.

Diferentemente do primeiro exemplo, onde a inicializao da varivel no fazia diferena
alguma, neste segundo exemplo a inicializao absolutamente necessria. Deve-se procurar
inicializar variveis numricas com zero (0) e variveis caracter com string nula ("") apenas
quando realmente necessrio.




- 348 -

ADVPL Completo




Utilizao de alternativas

Quando se est trabalhando em uma simples rotina, deve-se tomar algum tempo para
explorar duas ou trs diferentes abordagens. Quando se est trabalhando em algo mais
complexo, deve-se planejar prototipar algumas a mais. Considere o seguinte cdigo:


I f cHai r = " A"
Repl ace hai r Wi t h " Loi r a"
El se
I f cHai r = " B"
Repl ace hai r Wi t h " Mor ena"
El se
I f cHai r = " C"
Repl ace hai r Wi t h " Rui va"
El se
I f cHai r = " D"
Repl ace hai r Wi t h " Gr i sal ho"
El se
Repl ace hai r Wi t h " Pr et o"
Endi f
Endi f
Endi f
Endi f


Um cdigo de uma nica letra, (A at E), foi informado para indicar a cor de cabelo. Este
cdigo foi ento convertido e armazenado como uma string. Pode-se notar que a cor "Preto"
ser atribuda se nenhuma outra opo for verdadeira.

Uma alternativa que reduz o nvel de identao torna o cdigo mais fcil de ler enquanto reduz
o nmero de comandos replace:


Do Case
Case cHai r == " A"
cCol or : = " Loi r a"
Case cHai r == " B"
cCol or : = " Mor ena"
Case cHai r == " C"
cCol or : = " Rui va"
Case cHai r == " D"
cCol or : = " Gr i sal ho"
Ot her Wi se
cCol or : = " Pr et o"
EndCase

Repl ace hai r Wi t h cCol or



- 349 -

ADVPL Completo



Utilizao de arquivos de cabealho quando necessrio

Se um arquivo de cdigo criado se referencia a comandos para interpretao e tratamento de
arquivos XML, este deve se incluir o arquivo de cabealho prprio para tais comandos
(XMLXFUN.CH no exemplo). Porm no deve-se incluir arquivos de cabealho apenas por
segurana. Se no se est referenciando nenhuma das constantes ou utilizando nenhum dos
comandos contidos em um destes arquivos, a incluso apenas tornar a compilao mais
demorada.

Constantes em maisculo

Isto uma conveno que faz sentido. Em ADVPL, como em C por exemplo, a regra utilizar
todos os caracteres de uma constante em maisculo, a fim de que possam ser claramente
reconhecidos como constantes no cdigo, e que no seja necessrios lembrar onde foram
declarados.

Utilizao de identao

Este um hbito que todo programador deve desenvolver. No consome muito esforo para
manter o cdigo alinhado durante o trabalho, porm quando necessrio pode-se utilizar a
ferramenta TOTVS DevStudio para a re-identao de cdigo. Para maiores detalhes, consulte a
documentao sobre a identao de cdigos fontes disponvel nos demais tpicos deste
material.

Utilizao de espaos em branco

Espaos em branco extras tornam o cdigo mais fcil para a leitura. No necessrio imensas
reas em branco, mas agrupar pedaos de cdigo atravs da utilizao de espaos em branco
funciona muito bem. Costuma-se separar parmetros com espaos em branco.

Quebra de linhas muito longas

Com o objetivo de tornar o cdigo mais fcil de ler e imprimir, as linhas do cdigo no devem
estender o limite da tela ou do papel. Podem ser "quebradas" em mais de uma linha de texto
utilizando o ponto-e-vrgula (;).

Capitulao de palavras-chave

Uma conveno amplamente utilizada a de capitular as palavras chaves, funes, variveis e
campos utilizando uma combinao de caracteres em maisculo e minsculo, visando facilitar
a leitura do cdigo fonte.

Avaliando o cdigo a seguir:


l ocal ncnt
whi l e ( ncnt ++ < 10 )
nt ot al += ncnt * 2
enddo




- 350 -

ADVPL Completo



O mesmo ficaria muito mais claro se re-escrito conforme abaixo:


Local nCnt

Whi l e ( nCnt ++ < 10 )
nTot al += nCnt * 2
EndDo


Utilizao da Notao Hngara

A Notao Hngara muito comum entre programadores xBase e de outras linguagens. A
documentao do ADVPL utiliza esta notao para a descrio das funes e comandos e
aconselhvel sua utilizao na criao de rotinas, pois ajuda a evitar pequenos erros e facilita
a leitura do cdigo. Para maiores detalhes, consulte a documentao sobre a utilizao da
Notao Hngara de cdigos fontes disponvel nos demais tpicos deste material.

Utilizao de nomes significantes para variveis

A principal vantagem da liberdade na criao dos nomes de variveis a facilidade de
identificao da sua utilidade. Portanto deve-se utilizar essa facilidade o mximo possvel.
Nomes sem sentido apenas tornaro difcil a identificao da utilidade de uma determinada
varivel, assim como nomes extremamente curtos. Nem sempre a utilizao de uma varivel
chamada i a melhor sada. Claro, no convm criar uma varivel com um nome muito longo
que ser utilizada como um contador, e referenciada muitas vezes no cdigo. O bom senso
deve ser utilizado.

Criar variveis como nNumero ou dData tambm no ajudam na identificao. A Notao
Hngara j est sendo utilizada para isso e o objetivo do nome da varivel deveria ser
identificar sua utilizao, no o tipo de dado utilizado. Deve-se procurar substituir tais
variveis por algo como nTotal ou dCompra.

O mesmo vlido para nomes de funes, que devem descrever um pouco sobre o que a
funo faz. Novamente nomes extremamente curtos no so aconselhveis.

Utilizao de comentrios

Comentrios so muito teis na documentao de programas criados e para facilitar a
identificao de processos importantes no futuro e devem sempre ser utilizados.

Sempre que possvel, funes criadas devem ter uma breve descrio do seu objetivo,
parmetros e retorno. Alm de servir como documentao, os comentrios embelezam o
cdigo ao separar as funes umas das outras. Os comentrios devem ser utilizados com bom
senso, pois reescrever a sintaxe ADVPL em portugus torna-se apenas perda de tempo:


I f nLast Key == 27 / / Se o nLast Key f or i gual a 27



- 351 -

ADVPL Completo



Criao de mensagens sistmicas significantes e consistentes

Seja oferecendo assistncia, exibindo mensagens de aviso ou mantendo o usurio informado
do estado de algum processo, as mensagens devem refletir o tom geral e a importncia da
aplicao. Em termos gerais, deve-se evitar ser muito informal e ao mesmo tempo muito
tcnico.


" Aguar de. Rei ndexando ( FI LI AL+COD+ LOCAL) do ar qui vo: \ DADOSADV\ SB1990. DBF"


Esse tipo de mensagem pode dar informaes demais para o usurio e deix-lo sentindo-se
desconfortvel se no souber o que significa "reindexando", etc. E de fato, o usurio no devia
ser incomodado com tais detalhes. Apenas a frase "Aguarde, indexando." funcionaria
corretamente, assim como palavras "processando" ou "reorganizando".

Outra boa idia evitar a referencia a um item corrente de uma tabela como um "registro":


" Del et ar est e r egi st r o?"


Se a operao estiver sendo efetuada em um arquivo de clientes, o usurio deve ser
questionado sobre a remoo do cliente corrente, se possvel informando valores de
identificao como o cdigo ou o nome.

Evitar abreviao de comandos em 4 letras

Apesar do ADVPL suportar a abreviao de comandos em quatro letras (por exemplo, repl no
lugar de replace) no h necessidade de utilizar tal funcionalidade. Isto apenas torna o cdigo
mais difcil de ler e no torna a compilao mais rpida ou simples.

Evitar "disfarces" no cdigo

No deve-se criar constantes para expresses complexas. Isto tornar o cdigo muito difcil de
compreender e poder causar erros primrios, pois pode-se imaginar que uma atribuio
efetuada a uma varivel quando na verdade h toda uma expresso disfarada:


#def i ne NUMLI NES aPr i nt Def s[ 1]
#def i ne NUMPAGES aPr i nt Def s[ 2]
#def i ne I SDI SK aRet ur n[ 5]

I f I SDI SK == 1
NUMLI NES : = 55
Endi f

NUMPAGES += 1




- 352 -

ADVPL Completo



A impresso que se tem aps uma leitura deste cdigo de que valores esto sendo atribudos
s variveis ou que constantes esto sendo utilizadas. Se o objetivo flexibilidade, o cdigo
anterior deve ser substitudo por:


#def i ne NUMLI NES 1
#def i ne NUMPAGES 2
#def i ne I SDI SK 5

I f aRet ur n[ I SDI SK] == 1
aPr i nt Def s[ NUMLI NES ] : = 55
Endi f

aPr i nt Def s[ NUMPAGES ] += 1


Evitar cdigo de segurana desnecessrio

Dada sua natureza binria, tudo pode ou no acontecer dentro de um computador. Adicionar
pedaos de cdigo apenas para "garantir a segurana" freqentemente utilizado como uma
desculpa para evitar corrigir o problema real. Isto pode incluir a checagem para validar
intervalos de datas ou para tipos de dados corretos, o que comumente utilizando em
funes:


St at i c Funct i on Mul t Mal or ( nVal )
I f Val Type( nVal ) ! = " N"
nVal : = 0
Endi f
Ret ur n ( nVal * nVal )


O ganho irrisrio na checagem do tipo de dado do parmetro j que nenhum programa
corretamente escrito em execuo poderia enviar uma string ou uma data para a funo. De
fato, este tipo de "captura" o que torna a depurao difcil, j que o retorno ser sempre um
valor vlido (mesmo que o parmetro recebido seja de tipo de dado incorreto). Se esta
captura no tiver sido efetuada quando um possvel erro de tipo de dado invlido ocorrer, o
cdigo pode ser corrigido para que este erro no mais acontea.

Isolamento de strings de texto

No caso de mensagens e strings de texto, a centralizao um bom negcio. Pode-se colocar
mensagens, caminhos para arquivos, e mesmo outros valores em um local especfico. Isto os
torna acessveis de qualquer lugar no programa e fceis de gerenciar.

Por exemplo, se existe uma mensagem comum como "I mprimindo, por favor aguarde..."
em muitas partes do cdigo, corre-se o risco de no seguir um padro para uma das
mensagens em algum lugar do cdigo. E mant-las em um nico lugar, como um arquivo de
cabealho, torna fcil a produo de documentao e a internacionalizao em outros idiomas.



- 353 -

ADVPL Completo




LISTAS DE EXERCCIOS

Mdulo 04.1.: Desenvolvendo aplicaes em ADVPL



01

Desenvolver um programa que implemente a funo AxCadastro() para a
tabela padro do sistema SA2 Cadastro de Fornecedores.



02

Implementar no AxCadastro() desenvolvido no item anterior as funes de
validao de alterao e validao de excluso.



03

Desenvolver um programa que implemente a funo Mbrowse() utilizando as
funes padres de cadastro, para a tabela padro do sistema SA2 Cadastro
de Fornecedores.




- 354 -

ADVPL Completo


04

Implementar no Mbrowse() desenvolvido no item anterior a funo de
legenda.


05

Implementar no Mbrowse() desenvolvido no item anterior uma funo
especfica de incluso utilizando os recursos adicionais da funo AxInclui().


06

Desenvolver um programa que implemente uma MarkBrowse utilizando as
funes padres de cadastro, para a tabela padro do sistema SA2 Cadastro
de Fornecedores.


07

Implementar na MarkBrowse() desenvolvida no item anterior uma funo para
excluso de mltiplos registros da tabela padro do sistema SA2 Cadastro
de Fornecedores.



- 355 -

ADVPL Completo


08

Desenvolver um programa que implemente uma MarkBrowse() para a tabela
padro do sistema SA1 Cadastro de Cliente, contemplando uma funo que
permita a visualizao dos dados principais de mltiplos clientes selecionados.


09

Desenvolver um programa que implemente uma Modelo2() para a tabela
padro do sistema SX5 Cadastro de tabelas, contemplando a funcionalidade
de incluso.


10

Implementar na Modelo2() desenvolvida no item anterior as funcionalidades
de Visualizao, Alterao e Excluso.


11
Desenvolver um programa que implemente uma Modelo3() para as tabelas
padres do sistema SF1 Cabealho do Documento de Entrada e SD1 Itens
do documento de entrada, contemplando as funcionalidades de Visualizao e
Incluso.


- 356 -

ADVPL Completo



12

Implementar na Modelo3() desenvolvida no item anterior as funcionalidades e
Alterao e Excluso.


13

Desenvolver um programa que crie um arquivo de trabalho com estrutura
similar ao SA1 e receba as informaes desta tabela.


14

Implementar na rotina desenvolvida no item anterior, um MarkBrowse que
permite a seleo e visualizao de apenas um registro selecionado.


15

Desenvolver um programa que implemente um relatrio que permita a
impresso de uma listagem simples dos dados da tabela padro SA1
Cadastro de clientes.



- 357 -

ADVPL Completo


16

Desenvolver um programa que implemente um relatrio que permita a
impresso de uma listagem simples das notas fiscais e seus respectivos itens.


17

Desenvolver um programa que realize a exportao dos itens marcados no
SA1 Cadastro de Clientes para um arquivo no formato .TXT em um diretrio
especificado pelo usurio.


18

Desenvolver um programa que realize a importao das informaes contidas
em um arquivo no formato .TXT selecionado pelo usurio e as atualize no SA1
Cadastro de Clientes.


19

Desenvolver o mesmo programa do item anterior utilizando as funes da
famlia FT.



- 358 -

ADVPL Completo



Mdulo 04.2.: Oficina de Programao I


20

Desenvolver uma aplicao visual que implemente cada um dos componentes
disponveis no fonte DIALOG_OBJETOS.PRW.




21

Implementar as rotinas de importao e exportao desenvolvidas nos itens
anterior as rguas de processamento mais adequadas.




22

Substituir em uma das rotinas desenvolvidas anteriormente a funo
Pergunte() pela funo ParamBox().




- 359 -

ADVPL Completo



23

Desenvolver uma rotina que implementar um ListBox simples que permita
visualizar as tabelas cadastradas no SX5 Cadastro de Tabelas.


25

Implementar na rotina desenvolvida no item anterior a opo de visualizao
dos itens de uma das tabelas selecionadas, demonstrando-os em uma ListBox
Grid.


26

Desenvolver uma rotina que implemente uma Modelo2() utilizando os
componentes visuais necessrios, complementados com os recursos de
rolagem do objeto ScrollBox().



- 360 -

ADVPL Completo




Mdulo 05: Introduo a orientao objetos



27

Implementar a classe Aluno() com os mtodos New(), BuscaAluno() e
SalvaAluno().




28

Desenvolver a interface visual para interagir com a classe Aluno()
implementada anteriormente.




29

Implementar na rotina desenvolvida no item anterior os recursos necessrios
para persistir as informaes e recuperar os dados de itens previamente
salvos.




- 361 -

ADVPL Completo




Mdulo 06: ADVPL orientado objetos I



30

Desenvolver uma rotina que implemente uma Enchoice() para o SA1
Cadastro de clientes.


31

Adequar a rotina desenvolvida no item anterior para permitir o uso da classe
de objetos MsMGet().



32

Desenvolver uma interface de cadastro combinando os recursos de um objeto
MsMGet() e um objeto MsNewGetDados() causando o mesmo efeito de uma
interface no padro da Modelo3().





- 362 -

ADVPL Completo



33

Implementar na rotina desenvolvida no item anterior o uso da funo
EnchoiceBar() com um boto que permita ao usurio visualizar um dos itens
exibidos na interface.


34

Adequar a rotina desenvolvida no item anterior de forma a substituir o uso da
funo EnchoiceBar() pela classe de objeto TBar().


35

Converter a sintaxe clssica utilizada no fonte DIALOG_OBJETOS.PRW para a
sintaxe orientada a objetos.


36

Converter a sintaxe clssica dos fontes ListBox para a sintaxe orientada a
objetos.



- 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 projeto ser realizada aps a entrega, no prazo estabelecido pelo
instrutor;

E Pode ser realizado em grupos de at 03 pessoas. Caso existam alunos sem grupos, estes podero
integrar equipes j formadas com o total de membros estabelecido, mediante aprovao do
instrutor;

Avaliao do 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

Efetue a leitura de um arquivo em formato .TXT com os dados necessrios
para realizar o cadastro de fornecedores no sistema Protheus, e grave estas
informaes em um arquivo intermedirio.


02
A partir da seleo dos registros disponveis neste arquivo intermedirio, o
usurio poder:

O Imprimir os itens selecionados;
O Efetivar os itens selecionados, gravando-os no SA2 Cadastro de
Fornecedores;
O Estornar itens j efetivados, eliminando-os do SA2 - Cadastro de
Fornecedores;
O Excluir os registros selecionados do arquivo intermedirio;
O Excluir todos os registros importados de um arquivo em formato .TXT
especificado.
O Visualizar as informaes do registro gerado no arquivo intermedirio;
O Visualizar o registro gerado no SA2 Cadastro de Fornecedores a
partir de um item selecionado no arquivo intermedirio.



- 364 -

ADVPL Completo



MDULO 07: ADVPL Orientado objetos II

Neste mdulo sero tratados os componentes e objetos da interface visual da linguagem
ADVPL, permitindo o desenvolvimento de aplicaes com interfaces grficas com sintaxe
orientada a objetos.

36. Componentes da interface visual do ADVPL

A linguagem ADVPL possui diversos componentes visuais e auxiliares, os quais podem ser
representados utilizando a estrutura abaixo:

. Classes da Interface Visual




Tsrvobject
. Classes Auxiliares


Tfont

. Classes de Janelas


Msdialog
Tdialog
Twindow

. Classes de Componentes


Tcontrol


.
Classes de Componentes
Visuais
Brgetddb
Mscalend
Mscalendgrid
Msselbr
Msworktime
Sbutton
Tbar
Tbitmap
Tbrowsebutton
Tbtnbmp
Tbtnbmp2
Tbutton
Tcbrowse
Tcheckbox
Tcolortriangle
Tcombobox
Tfolder
Tfont
Tget
Tgroup
Thbutton
Tibrowser
Tlistbox
Tmenu
Tmenubar
Tmeter
Tmsgraphic
Tmsgbar
Tmultibtn
Tmultiget
Tolecontainer
Tpageview
Tpanel
Tradmenu
Tsbrowse
Tsay
Tscrollbox
Tsimpleeditor
Tslider

- 365 -

ADVPL Completo






.
Classes de Componentes
Visuais
Tsplitter
Ttabs
Ttoolbox
Twbrowse
Vcbrowse

Atributos comuns as classes de componentes visuais

cCaption Ttulo ou contedo do objeto.
cF3
Consulta F3 ao qual o objeto est vinculado, quando o
mesmo do tipo get.
cMsg
Mensagem exibida na barra de status da janela principal
quando o objeto ganha foco.
cName Nome do objeto
cTooltip Mensagem exibida quando objeto exibe seu tooltip.
cVariable
Varivel que receber o contedo selecionado ou digitado no
objeto, quando o mesmo for to tipo get ou similar.
lPassword
Indica se o texto digitado no objeto ser exibido no formato
de password, quando o mesmo do tipo get.
lReadOnly Flag que indica se o objeto pode ou no ser editado.
lShowHint
Flag que ativa .T. ou desativa .F. a exibio do tooltip do
objeto.
lVisibleControl Se .T. o objeto visvel, se .F. o objeto invisvel.
nHeight Altura em pixels.
nLeft Coordenada horizontal em pixels.
nTop Coordenada vertical em pixels.
nWidth Largura em pixels.
Picture
Picture de digitao do objeto, quando o mesmo do tipo
get.

Eventos comuns as classes de componentes visuais

bAction
Bloco de cdigo executado quando o objeto utilizado,
quando o mesmo do tipo boto ou similar.
bChange
Bloco de cdigo executado quando ocorre uma mundana na
seleo de itens que compe o objeto, como por exemplo
em listas ou grids.
bF3
Bloco de cdigo executado quando utilizado o recurso de
consulta F3 vinculado ao objeto.
bGotFocus Executado quando objeto ganha foco.
blClicked
Executado quando acionado click do boto esquerdo do
mouse sobre o objeto.
blDblClick
Executado quando acionado duplo click do boto esquerdo
do mouse sobre o objeto.
bLostFocus Executado quando objeto perde foco.
brClicked
Executado quando acionado click do boto direito do mouse
sobre o objeto.
bValid
Executado quando o contedo do objeto modificado e
dever ser validado. Deve retornar .T. se o contedo
vlido e .F. se contedo invlido.
bWhen
Executado quando h movimentao de foco na janela.Se
retornar .T. o objeto continua habilitado, se retornar .F. o
objeto ser desabilitado.

- 366 -

ADVPL Completo




Classes da interface visual

TSRVOBJECT()

E Descrio: Classe abstrata inicial de todas as classes de interface do ADVPL. No deve
ser instanciada diretamente.

E Propriedades:

nLeft Coordenada horizontal em pixels.
nTop Coordenada vertical em pixels.
nWidth Largura em pixels.
nHeight Altura em pixels.
cCaption Ttulo ou contedo do objeto.
cTooltip Mensagem exibida quando objeto exibe seu tooltip.
lShowHint
Flag que ativa .T. ou desativa .F. a exibio do tooltip do
objeto.
cMsg
Mensagem exibida na barra de status da janela principal
quando o objeto ganha foco.
nClrText Cor do texto do objeto.
nClrPane Cor do fundo do objeto.
bWhen
Executado quando h movimentao de foco na janela.Se
retornar .T. o objeto continua habilitado, se retornar .F. o
objeto ser desabilitado.
bValid
Executado quando o contedo do objeto modificado e
dever ser validado. Deve retornar .T. se o contedo
vlido e .F. se contedo invlido.
blClicked
Executado quando acionado click do boto esquerdo do
mouse sobre o objeto.
brClicked
Executado quando acionado click do boto direito do mouse
sobre o objeto.
blDblClick
Executado quando acionado duplo click do boto esquerdo
do mouse sobre o objeto.
oWnd Janela onde o objeto foi criado.
lVisible Se .T. o objeto visvel, se .F. o objeto invisvel.
Cargo Contedo associado ao objeto.
bLostFocus Executado quando objeto perde foco.
bGotFocus Executado quando objeto ganha foco.

E Construtor: No pode ser instanciada.

E Parmetros:

Nenhum -

- 367 -

ADVPL Completo



E Mtodos auxiliares:

SetFocus

O Descrio: Fora mudana do foco de entrada de dados para o controle.
O Sintaxe: SetFocus( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Hide

O Descrio: Torna objeto invisvel.
O Sintaxe: Hide( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Show

O Descrio: Torna objeto visvel.
O Sintaxe: Show( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Enable

O Descrio: Habilita o objeto.
O Sintaxe: Enable( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 368 -

ADVPL Completo



Disable

O Descrio: Desabilita o objeto.
O Sintaxe: Disable( )
O Parmetros:

Nenhum -

O Retorno:

Nil

Refresh

O Descrio: Fora atualizao (sincronia) de propriedades entre o programa e o
Protheus Remote.
O Sintaxe: Refresh( )
O Parmetros:

Nenhum -

O Retorno:

Nil


Exemplo:


CLASS TCONTROL FROM TSRVOBJ ECT



- 369 -

ADVPL Completo



Classes auxiliares

TFONT()

E Descrio: Classe de objetos que define a fonte do texto utilizado nos controles
visuais.

E Propriedades:

- Herdadas as classes superiores

E Construtor: New([acName], [nPar2], [anHeight], [lPar4], [alBold], [nPar6],
[lPar7], [nPar8], [alItalic], [alUnderline])

E Parmetros:

acName Caractere, opcional. Nome da fonte, o padro Arial.
nPar2 Reservado.
anHeight Numrico, opcional. Tamanho da fonte. O padro -11.
lPar4 Reservado.
alBold Lgico, opcional. Se .T. o estilo da fonte ser negrito.
nPar6 Reservado.
lPar7 Reservado.
nPar8 Reservado.
alItalic Lgico, opcional. Se .T. o estilo da fonte ser itlico.
alUnderline Lgico, opcional. Se .T. o estilo da fonte ser sublinhado.

E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g, oSay
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 200, 200 TI TLE ' My di al og' PI XEL
/ / Cr i a f ont par a uso
oFont : = TFont ( ) : New( ' Cour i er New' , , - 14, . T. )
/ / Apr esent a o t Say coma f ont e Cour i er New
oSay : = TSay( ) : New( 10, 10, {| | ' Mensagem' }, oDl g, , oFont , , , , . T. ,
CLR_WHI TE, CLR_RED )
oSay: l Tr anspar ent : = . F.
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n


- 370 -

ADVPL Completo



Classes de janelas

MSDIALOG()

E Descrio: Classe de objetos que deve ser utilizada como padro de janela para
entrada de dados. MSDialog um tipo de janela dilogo modal, isto
, no permite que outra janela ativa receba dados enquanto esta
estiver ativa.

E Propriedades:

- Herdadas as classes superiores


E Construtor: New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack], [oPar12],
[aoWnd], [alPixel], [oPar15], [oPar16], [lPar17])


E Parmetros:

anTop
Numrico, opcional. Coordenada vertical superior em pixels
ou caracteres.
anLeft
Numrico, opcional. Coordenada horizontal esquerda em
pixels ou caracteres.
anBotom
Numrico, opcional. Coordenada vertical inferior em pixels
ou caracteres.
anRight
Numrico, opcional. Coordenada horizontal direita em pixels
ou caracteres.
acCaption Caractere, opcional. Ttulo da janela.
cPar6 Reservado.
nPar7 Reservado.
lPar8 Reservado.
nPar9 Reservado.
anClrText Numrico,opcional. Cor do texto.
anClrBack Numrico,opcional. Cor de fundo.
oPar12 Reservado.
aoWnd
Objeto, opcional. Janela me da janela a ser criada, padro
a janela principal do programa.
alPixel
Lgico, opcional. Se .T. considera as coordenadas passadas
em pixels, se .F. considera caracteres.
oPar15 Reservado.
oPar16 Reservado.
nPar17 Reservado.


- 371 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
/ / cr i a di l ogo
Local oDl g : = MSDi al og( ) : New( 10, 10, 300, 300, ' Meu
di al ogo' , , , , , CLR_BLACK, CLR_WHI TE, , , . T. )

/ / at i va di l ogo cent r al i zado
oDl g: Act i vat e( , , , . T. , {| | msgst op( ' val i dou! ' ) , . T. }, , {| | msgst op( ' i ni ci ando'
) } )
Ret ur n


TDIALOG()

E Descrio: Classe de objetos do tipo dilogo de entrada de dados, sendo seu
uso reservado. Recomenda-se utilizar a classe MSDialog que
herdada desta classe.


E Propriedades:

- Herdadas as classes superiores


E Construtor: New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack], [oPar12],
[aoWnd], [alPixel], [oPar15], [oPar16], [nPar17], [anWidth],
[anHeight])


E Parmetros:

anTop
Numrico, opcional. Coordenada vertical superior em pixels
ou caracteres.
anLeft
Numrico, opcional. Coordenada horizontal esquerda em
pixels ou caracteres.
anBotom
Numrico, opcional. Coordenada vertical inferior em pixels
ou caracteres.
anRight Numrico, opcional. Coordenada horizontal direita em pixels

- 372 -

ADVPL Completo


ou caracteres.
acCaption Caractere, opcional. Ttulo da janela.
cPar6 Reservado.
nPar7 Reservado.
lPar8 Reservado.
nPar9 Reservado.
anClrText Numrico,opcional. Cor do texto.
anClrBack Numrico,opcional. Cor de fundo.
oPar12 Reservado.
aoWnd
Objeto, opcional. Janela me da janela a ser criada, padro
a janela principal do programa.
alPixel
Lgico, opcional. Se .T. considera as coordenadas passadas
em pixels, se .F. considera caracteres.
oPar15 Reservado.
oPar16 Reservado.
nPar17 Reservado.
anWidth Numrico, opcional. Largura da janela em pixels.
anHeight Numrico, opcional. Altura da janela em pixels.


E Mtodos auxiliares:

Activate

O Descrio: Ativa (exibe) o dilogo. Chamar somente uma vez este
mtodo.
O Sintaxe: Activate([bPar1], [bPar2], [bPar3], [alCentered], [abValid],
[lPar6], [abInit], [bPar8], [bPar9] )
O Parmetros:

bPar1 Reservado.
bPar2 Reservado.
bPar3 Reservado.
alCentered
Lgico, opcional. Se .T. exibe a janela centralizada, .F.
padro.
abValid
Bloco de cdigo, opcional. Deve retornar .T. se contedo
do dilogo vlido, se retornar .F. o dilogo no fechar
quando solicitada de encerrar.
lPar6 Reservado.
abInit
Bloco de cdigo, opcional. Executado quando o dilogo
inicia exibio.
bPar8 Reservado.
bPar9 Reservado.

O Retorno:

Nenhum -


- 373 -

ADVPL Completo



End

O Descrio: Encerra (fecha) o dilogo.
O Sintaxe: End( )
O Parmetros:

Nenhum -

O Retorno: Lgico .T. se o dilogo foi encerrado.

Lgico Indica se o dilogo foi encerrado.


E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
/ / cr i a di l ogo
oDl g : = MSDi al og( ) : New( 10, 10, 300, 300, ' Meu
di al ogo' , , , , , CLR_BLACK, CLR_WHI TE, , , . T. )
/ / at i va di l ogo cent r al i zado
oDl g: Act i vat e( , , , . T. , {| | msgst op( ' val i dou! ' ) , . T. }, , {| | msgst op( ' i ni ci ando. .
. ' ) } )

/ * os comandos abai xo pr opor ci onamo mesmo r esul t ado
/ / cr i a di l ogo
DEFI NE DI ALOG oDl g TI TLE ' Meu di al ogo' FROM 10, 10 TO 300, 300 COLOR
CLR_BLACK, CLR_WHI TE PI XEL
/ / at i va di l ogo cent r al i zado
ACTI VATE DI ALOG oDl g CENTER ON I NI T ( msgst op( ' i ni ci ando. . . ' ) ) VALI D
( msgst op( ' val i dou! ' ) , . T. )
*/
Ret ur n Ni l

- 374 -

ADVPL Completo



TWINDOW()

E Descrio: Classe de objetos do tipo dilogo principal de programa. Dever
existir apenas uma instncia deste objeto na execuo do programa.

E Propriedades:

- Herdadas das classes superiores


E Construtor: New( [anTop], [anLeft],[anBottom], [anRight], [acTitle], [nPar6],
[oPar7] ,[oPar8],[oPar9], [aoParent], [lPar11], [lPar12], [anClrFore],
[anClrBack], [oPar15], [cPar16], [lPar17], [lPar18], [lPar19],
[lPar20], [alPixel] );

E Parmetros:

nTop
Numrico, opcional. Coordenada vertical superior em pixels
ou caracteres.
nLeft
Numrico, opcional. Coordenada horizontal esquerda em
pixels ou caracteres.
nBottom
Numrico, opcional. Coordenada vertical inferior em pixels
ou caracteres.
nRight
Numrico, opcional. Coordenada horizontal inferior em pixels
ou caracteres.
cTitle Caractere, opcional. Ttulo da janela.
nPar6 Reservado.
oPar7 Reservado.
oPar8 Reservado.
oPar9 Reservado.
oParent Objeto, opcional. Janela me da janela corrente.
lPar11 Reservado.
lPar12 Reservado.
nClrFore Numrico, opcional. Cor de fundo da janela.
nClrText Numrico, opcional. Cor do texto da janela.
oPar15 Reservado.
cPar16 Reservado.
lPar17 Reservado.
lPar18 Reservado.
lPar19 Reservado.
lPar20 Reservado.
lPixel
Lgico, opcional. Se .T. (padro) considera coordenadas
passadas em pixels, se .F. considera caracteres.


- 375 -

ADVPL Completo


E Mtodos auxiliares:

Activate

O Descrio: Ativa (exibe) a janela. Chamar esse mtodo apenas uma vez.
O Sintaxe: Activate([acShow], [bPar2], [bPar3], [bPar4], [bPar5], [bPar6],
[ abInit ], [bPar8], [bPar9], [bPar10], [bPar11], [bPar12] ,[bPar13],
[bPar14], [bPar15], [abValid], [bPar17], [bPar18] ).
O Parmetros:

acShow
Caracter, opcional. ICONIZED para janela iconizada ou
MAXIMIZED para janela maximizada.
bPar2 Reservado.
bPar3 Reservado.
bPar4 Reservado.
bPar5 Reservado.
bPar6 Reservado.
abInit
Bloco de cdigo. Executado quando janela est sendo
exibida.
bPar8 Reservado.
bPar9 Reservado.
bPar10 Reservado.
bPar11 Reservado.
bPar12 Reservado.
bPar13 Reservado.
bPar14 Reservado.
bPar15 Reservado.
abValid
Bloco de cdigo. Executado quando a janela for solicitada
de fechar. Dever retornar .T. se o contedo da janela for
vlido, ou .F. se no. Se o bloco retornar .F. a janela no
fechar.
bPar17 Reservado.
bPar18 Reservado.


O Retorno:

Nenhum -


End

O Descrio: Solicita encerramento da janela.
O Sintaxe: End( )
O Parmetros:

Nenhum -

O Retorno: Lgico .T. se o dilogo foi encerrado.

Lgico Indica se a janela foi encerrada.


- 376 -

ADVPL Completo


Center

O Descrio: Centraliza a janela.
O Sintaxe: Center( )
O Parmetros:

Nenhum -

O Retorno: Lgico .T. se o dilogo foi encerrado.

Nenhum -

E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oWi ndow
Local abI ni t : = {| | conout ( ' at i vando! ' ) }
Local abVal i d: = {| | conout ( ' encer r ando! ' ) , . T. }
oWi ndow: = t Wi ndow( ) : New( 10, 10, 200, 200, ' Meu
pr ogr ama' , , , , , , , , CLR_WHI TE, CLR_BLACK, , , , , , , . T. )
oWi ndow: Act i vat e( ' MAXI MI ZED' , , , , , , abI ni t , , , , , , , , , abVal i d, , )

/ * os comandos abai xo pr opor ci onamo mesmo r esul t ado
DEFI NE WI NDOWoWi ndow FROM 10, 10 TO 200, 200 PI XEL TI TLE ' Meu pr ogr ama'
COLOR CLR_WHI TE, CLR_BLACK
ACTI VATE WI NDOWoWi ndow MAXI MI ZED ON I NI T abI ni t VALI D abVal i d
*/
Ret ur n
.


- 377 -

ADVPL Completo



Classes de componentes

TCONTROL()

E Descrio: Classe abstrata comum entre todos os componentes visuais
editveis. No deve ser instanciada diretamente.


E Propriedades:

Align
Numrico. Alinhamento do controle no espao
disponibilizado pelo seu objeto parente. 0 = Nenhum
(padro), 1= no topo, 2 = no rodap, 3= a esquerda, 4 = a
direita e 5 = em todo o parente.
lModified
Lgico. Se .T. indica que o contedo da varivel associada
ao controle foi modificado.
lReadOnly
Lgico. Se .T. o contedo da varivel associada ao controle
permanecer apenas para leitura.
hParent
Numrico. Handle (identificador) do objeto sobre o qual o
controle foi criado.
bChange
Bloco de cdigo. Executado quando o estado ou contedo do
controle modificado pela ao sobre o controle.

E Construtor: No pode ser instanciada.

E Parmetros:

Nenhum -

E Mtodos auxiliares:

SetFocus

O Descrio: Fora mudana do foco de entrada de dados para o controle.
O Sintaxe: SetFocus( )
O Parmetros:

Nenhum -

O Retorno:

Nil


Exemplo:


CLASS TSay FROM Tcont r ol


- 378 -

ADVPL Completo



Classes de componentes visuais

BRGETDDB()

E Descrio: Classe de objetos visuais do tipo Grid.

E Propriedades:

+ Herdadas da classe superior
nAt Linha atualmente selecionada / posicionada no objeto
nLen Nmero total de linhas do objeto

E Construtor: New([nRow], [nCol], [nWidth], [nHeigth], [bFields], [aHeaders],
[aColSizes], [oDlg], [cField], [uValue1], [uValue2], [uChange],
[uLDblClick], [uRClick], [oFont], [oCursor], [nClrFore], [nClrBack],
[cMsg], [lUpdate], [cAlias], [lPixel], [bWhen], [lDesign], [bValid],
[aAlter], [oMother])

E Parmetros:

nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
bFields Bloco de cdigo, Lista de Campos
aHeaders Vetor, Descrio dos campos para no cabealho
aColSizes Vetor, Largura das colunas
oDlg
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
cField Caracter, opcional. Campos necessrios ao filtro
uValue1 Indefinido, opcional. Inicio do intervalo para o filtro
uValue2 Indefinido, opcional. Fim do intervalo para o filtro
bChange
Bloco de cdigo, opcional. Executado quando o item
selecionado alterado.
bLDblClick
Bloco de cdigo, opcional. Executado quando acionado duplo
click do boto esquerdo do mouse sobre o controle.
bRClick No utilizado
oFont Objeto, opcional. Fonte
oCursor Objeto, opcional. Tipo do Cursor
nClrFore Numrico, opcional. Cor do texto da janela.
nClrBack Numrico, opcional. Cor de fundo da janela.
cMsg
Caracter, opcional. Mesamge ao posicionar o mouse sobre o
objeto
lUpdate No utilizado
cAlias
Caracter, opcional se objeto utilizado com Vetor, obrigatorio
se utilizado com Tabela
lPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lDesign No Utilizado

- 379 -

ADVPL Completo


bValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
aAlter No Utilizado
oMother No Utilizado

E Mtodos auxiliares:

GoUp

O Descrio: Salta uma linha para cima.
O Sintaxe: GoUp( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoDown

O Descrio: Salta uma linha para baixo.
O Sintaxe: GoDown( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoTop

O Descrio: Salta para primeira linha.
O Sintaxe: GoTop( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoBottom

O Descrio: Salta para ultima linha.
O Sintaxe: GoBottom( )
O Parmetros:

Nenhum -

O Retorno:

Nil

- 380 -

ADVPL Completo



RowCount

O Descrio: Retorna numero de linhas visiveis.
O Sintaxe: RowCount( )
O Parmetros:

Nenhum -

O Retorno:

Nil


E Aparncia:



- 381 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 302, 402 PI XEL TI TLE ' Exempl o'

DbSel ect Ar ea( ' SA1' )
oBr owse : = Br Get DDB( ) : New(
1, 1, 200, 150, , , , oDl g, , , , , , , , , , , , . F. , ' SA1' , . T. , , . F. , , , )
oBr owse: AddCol umn( TCCol umn( ) : New( ' Codi go' , {| | SA1- >A1_COD
}, , , , ' LEFT' , , . F. , . F. , , , , . F. , ) )
oBr owse: AddCol umn( TCCol umn( ) : New( ' Loj a' , {| | SA1-
>A1_LOJ A}, , , , ' LEFT' , , . F. , . F. , , , , . F. , ) )
oBr owse: AddCol umn( TCCol umn( ) : New( ' Nome' , {| | SA1-
>A1_NOME}, , , , ' LEFT' , , . F. , . F. , , , , . F. , ) )

/ / Pr i nci pai s commandos
TBut t on( ) : New( 160, 001, ' GoUp( ) ' , oDl g, {| | oBr owse: GoUp( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 170, 001, ' GoDown( ) ' , oDl g, {| | oBr owse: GoDown( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 180, 001, ' GoTop( ) ' , oDl g, {| | oBr owse: GoTop( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 190, 001, ' GoBot t om( ) ' , oDl g, {| | oBr owse: GoBot t om( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 160, 060, ' nAt ( Li nha sel eci onada) ' , oDl g, ;
{| | Al er t ( oBr owse: nAt ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 170, 060, ' nRowCount ( Nr de l i nhas vi si vei s) ' , oDl g, ;
{| | Al er t ( oBr owse: nRowCount ( ) ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 180, 060, ' nLen ( Numer o t ot al de l i nhas) ' , oDl g, ;
{| | Al er t ( oBr owse: nLen) }, 80, 10, , , , . T. )


ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

MSCALEND()

E Descrio: Classe de objetos visuais do tipo Calendrio.

E Propriedades:

+ Herdadas da classe superior
bChange
Bloco de cdigo executado na mudana de seleo de um
dia.
bChangeMes
Bloco de cdigo executado na mundaa de seleo de um
ms.
dDiaAtu Dia atualmente selecionado

E Construtor: New([nRow], [nCol], [oDlg], [lCanMultSel])

- 382 -

ADVPL Completo



E Parmetros:

nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
oDlg
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.

lCanMultSel Logico, opcional. Permite seleo de multiplos dias


E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
user f unct i on Cal end_Ex( )
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 1000, 1000 PI XEL TI TLE ' Exempl o de
MsCal end'
/ / Cr i a obj et o
oCal end: =MsCal end( ) : New( 01, 01, oDl g, . T. )
/ / Code- Bl ock par a mudana de Di a
oCal end: bChange : = {| | Al er t ( ' Di a Sel eci onado: ' +
dt oc( oCal end: dDi aAt u) ) }
/ / Code- Bl ock par a mudana de mes
oCal end: bChangeMes : = {| | al er t ( ' Mes al t er ado' ) }
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n


- 383 -

ADVPL Completo



MSCALENDGRID()

E Descrio: Classe de objetos visuais do tipo Grade de Perodos.

E Propriedades:

bAction
Bloco de cdigo. Executado quando o boto esquerdo do
mouse pressionado.
bRClick
Bloco de cdigo. Executado quando o boto direito do mouse
pressionado.

E Construtor: New([aoWnd], [anRow], [anCol], [anHeight], [anWidth],
[dDateIni], [nResolution], [abWhen], [abAction], [nDefColor],
[bRClick], [lFillAll])

E Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.

anRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
anHeight Numrico, opcional. Altura do boto em pixels.
anWidth Numrico, opcional. Largura do boto em pixels.

dDateIni Data, Data inicial do Calendrio
nResolution Numrico, Resoluo a ser aplicada na grid do Calendrio
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.

abAction
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.

nDefColor Numrico, opcional. Cor do Fundo da Grid.
bRClick
Bloco de cdigo, opcional. Executado quando acionado o
boto direito do mouse sobre o controle.
lFillAll Lgico, opcional. Preenche todo o periodo

E Mtodos auxiliares:

Add

O Descrio: Adiciona periodo na Grid.
O Sintaxe: Add(cCaption, nLin, nInitial, nFinal, nColor, cDescri )
O Parmetros:

cCaption Caracter. Descrio a ser inserida a esquerda da Grid
nLin Numerico. Numero da linha a ser inserido o item
nInitial Numerico. Dia inicial
nFinal Numerico. Dia Final

- 384 -

ADVPL Completo


nColor Numerico. Cor que destacara o item
cDescri Caracter, Opicional. Descrio do tipo tooltip(hint) do item

O Retorno:

Nil

E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
nResol ut i on : = 1
oMsCal endGr i d : = MsCal endGr i d( ) : New( oDl g, 01, 01, 500, 300, ;
dat e( ) , nResol ut i on, , {| x, y| Al er t ( x) }, ;
RGB( 255, 255, 196) , {| x, y| Al er t ( x, y) }, . T.
)
oMsCal endGr i d: Add( ' capt i on 01' , 1, 10, 20, RGB( 255, 000, 0) ,
' Descr i cao 01' )
oMsCal endGr i d: Add( ' capt i on 02' , 2, 20, 30, RGB( 255, 255, 0) ,
' Descr i cao 02' )
oMsCal endGr i d: Add( ' capt i on 03' , 3, 01, 05, RGB( 255, 0, 255) ,
' Descr i cao 03' )
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

- 385 -

ADVPL Completo



MSSELBR()

E Descrio: Classe de objetos visuais do tipo controle - Grid

E Propriedades:

+ Herdadas da classe superior
nAt Linha atualmente selecionada / posicionada no objeto
nLen Nmero total de linhas do objeto

E Construtor: New([nRow], [nCol], [nWidth], [nHeigth], [bFields], [aHeaders],
[aColSizes], [oDlg], [cField], [uValue1], [uValue2], [uChange],
[uLDblClick], [uRClick], [oFont], [oCursor], [nClrFore], [nClrBack],
[cMsg], [lUpdate], [cAlias], [lPixel], [bWhen], [lDesign], [bValid])

E Parmetros:

nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
bFields Bloco de cdigo, Lista de Campos
aHeaders Vetor, Descrio dos campos para no cabealho
aColSizes Vetor, Largura das colunas
oDlg
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
cField Caracter, opcional. Campos necessrios ao filtro
uValue1 Indefinido, opcional. Inicio do intervalo para o filtro
uValue2 Indefinido, opcional. Fim do intervalo para o filtro
bChange
Bloco de cdigo, opcional. Executado quando o item
selecionado alterado.
bLDblClick
Bloco de cdigo, opcional. Executado quando acionado duplo
click do boto esquerdo do mouse sobre o controle.
bRClick No utilizado
oFont Objeto, opcional. Fonte
oCursor Objeto, opcional. Tipo do Cursor
nClrFore Numrico, opcional. Cor do texto da janela.
nClrBack Numrico, opcional. Cor de fundo da janela.
cMsg
Caracter, opcional. Mesamge ao posicionar o mouse sobre o
objeto
lUpdate No utilizado
cAlias
Caracter, opcional se objeto utilizado com Vetor, obrigatorio
se utilizado com Tabela
lPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lDesign No Utilizado
bValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.


- 386 -

ADVPL Completo


E Mtodos auxiliares:

GoUp

O Descrio: Salta uma linha para cima.
O Sintaxe: GoUp( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoDown

O Descrio: Salta uma linha para baixo.
O Sintaxe: GoDown( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoTop

O Descrio: Salta para primeira linha.
O Sintaxe: GoTop( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoBottom

O Descrio: Salta para ultima linha.
O Sintaxe: GoBottom( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 387 -

ADVPL Completo



RowCount

O Descrio: Retorna numero de linhas visiveis.
O Sintaxe: RowCount( )
O Parmetros:

Nenhum -

O Retorno:

Nil

E Aparncia:




- 388 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 302, 402 PI XEL TI TLE ' Exempl o'

DbSel ect Ar ea( ' SA1' )
oBr owse : = MsSel Br ( ) : New(
1, 1, 200, 150, , , , oDl g, , , , , , , , , , , , . F. , ' SA1' , . T. , , . F. , , , )
oBr owse: AddCol umn( TCCol umn( ) : New( ' Codi go' , {| | SA1- >A1_COD
}, , , , ' LEFT' , , . F. , . F. , , , , . F. , ) )
oBr owse: AddCol umn( TCCol umn( ) : New( ' Loj a' , {| | SA1-
>A1_LOJ A}, , , , ' LEFT' , , . F. , . F. , , , , . F. , ) )
oBr owse: AddCol umn( TCCol umn( ) : New( ' Nome' , {| | SA1-
>A1_NOME}, , , , ' LEFT' , , . F. , . F. , , , , . F. , ) )

/ / Pr i nci pai s commandos
TBut t on( ) : New( 160, 001, ' GoUp( ) ' , oDl g, {| | oBr owse: GoUp( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 170, 001, ' GoDown( ) ' , oDl g, {| | oBr owse: GoDown( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 180, 001, ' GoTop( ) ' , oDl g, {| | oBr owse: GoTop( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 190, 001, ' GoBot t om( ) ' , oDl g, {| | oBr owse: GoBot t om( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 160, 060, ' nAt ( Li nha sel eci onada) ' , oDl g, {| |
Al er t ( oBr owse: nAt ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 170, 060, ' nRowCount ( Nr de l i nhas vi si vei s) ' , oDl g, ;
{| | Al er t ( oBr owse: nRowCount ( ) ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 180, 060, ' nLen ( Numer o t ot al de l i nhas) ' , oDl g, ;
{| | Al er t ( oBr owse: nLen) }, 80, 10, , , , . T. )


ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L
.

MSWORKTIME()

E Descrio: Classe de objetos visuais do tipo controle - Barra de Perodo.

E Propriedades:

bChange
Bloco de cdigo. Executado ao disparar qualquer ao sobre
o objeto.

E Construtor: New([aoWnd], [anRow], [anCol], [anHeight], [anWidth],
[nResolution], [cValue], [abWhen], [abChange])

E Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
anRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anCol Numrico, opcional. Coordenada horizontal em pixels ou

- 389 -

ADVPL Completo


caracteres.
anHeight Numrico, opcional. Altura do boto em pixels.
anWidth Numrico, opcional. Largura do boto em pixels.
nResolution Numrico, Resoluo a ser aplicada na grid do Calendrio
cValue Caracter, opcional. Descritivo
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
abChange
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.

E Mtodos auxiliares:

GetValue

O Descrio: Retorna os item selecionados no formato XX X XX.
O Sintaxe: GetValue()
O Parmetros:

Nenhum -

O Retorno:

Caracter Retorna os item selecionados no formato XX X XX.

GetInterTime

O Descrio: Retorna periodo selecionado.
O Sintaxe: GetInterTime()
O Parmetros:

Nenhum -

O Retorno:

Caracter Retorna o perodo selecionada no formato HH:MM:SS

SetResol

O Descrio: Define a resoluo da demonstrao da barra de perodos.
O Sintaxe: SetResol (nResolution)
O Parmetros:

nResolution Resoluo

O Retorno:

Nil


- 390 -

ADVPL Completo



SetValue

O Descrio: Atribui um determindo contedo para um objeto ou atributo
de um objeto.
O Sintaxe: SetValue(xValue, cPicture)
O Parmetros:

xValue Valor que ser atribudo ao objeto ou atributo do objeto.
cPicture Picture de formao opcional para o contedo atribudo.

O Retorno:

Nenhum


E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
oMsWor kTi me : = MsWor kTi me( ) : New( oDl g, 04, 04, 280, 133, 0, ' ' , {| | . T. }, ;
{| oWor kTi me| Al er t ( ' Get Val ue( ) :
' +oWor kTi me: Get Val ue( ) +chr ( 13) +;
' Get I nt er Ti me( ) :
' +oWor kTi me: Get I nt er Ti me( ) ) } )
oMsWor kTi me: Set Val ue( ' X X XX X' )
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L


- 391 -

ADVPL Completo



SBUTTON()

E Descrio: Classe de objetos visuais do tipo boto que Define o componente
visual SButton, o qual permite a incluso de botes de operao na
tela da interface, os quais sero visualizados dependendo da
interface do sistema ERP utilizada somente com um texto simples
para sua identificao, ou com uma imagem (BitMap) pr-definido.

E Propriedades:

bAction
Bloco de cdigo. Executado ao precionar o boto esquerdo
do mouse.

E Construtor: New([nTop], [nLeft], [nType], [bAction], [oWnd], [lEnable],
[cMsg], [bWhen])

E Parmetros:

Parmetro Tipo / Descrio
nTop
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
nLeft
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
nType Numrico. Tipo do Boto
bAction
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.
oWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
lEnable Logico, opcional. Habilita/Desabilita boto
cMsg Caracter, Opicional. Descrio do tipo tooltip(hint) do item
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.

E Mtodos auxiliares:

Create

O Descrio: Retorna Mtodo construtor opcional da classe.
O Sintaxe: Create()
O Parmetros:

Nenhum -

O Retorno:

Objeto
Objeto da classe Sbutton com todos os atributos com
contedos padres.


- 392 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
oSBut t on1 : = SBut t on( ) : New( 01, 01, 1, {| | Al er t ( ' SBut t on
01' ) }, oDl g, . T. , , )
oSBut t on2 : = SBut t on( ) : New( 21, 01, 2, {| | Al er t ( ' SBut t on
02' ) }, oDl g, . T. , , )
oSBut t on3 : = SBut t on( ) : New( 41, 01, 3, {| | Al er t ( ' SBut t on
03' ) }, oDl g, . T. , , )
oSBut t on4 : = SBut t on( ) : New( 61, 01, 4, {| | Al er t ( ' SBut t on
04' ) }, oDl g, . T. , , )
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L











- 393 -

ADVPL Completo



TBAR()

E Descrio: Classe de objetos visuais que permite a implementao de um
componente do tipo barra de botes para a parte superior de uma
janela previamente definida.

E Propriedades:

- Herdados das classes superiores.

E Construtor:

E Parmetros:

oWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
nBtnWidth Numrico, opcional. Largura do boto contido na barra
nBtnHeight Numrico, opcional. Altura do boto contido na barra
l3D Lgico, opcional. Define tipo da barra
cMode No utilizado.
oCursor
Objeto, opcional. Define Cursor ao posicionar o mouse sobre a
barra.
cResource
Caracter, opcional. Imagem do recurso a ser inserido como
fundo da barra.
lNoAutoAdjust Lgico.

E Aparncia:



- 394 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TSTBAR | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o TBar ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Tst TBar ( )
Local oDl g

oDl g : = MSDI ALOG( ) : New( 000, 000, 305, 505, ' Exempl o - TBAR' , , , , , , , , , . T. )

Exemplo (continuao):

oTBar : = TBar ( ) : New( oDl g, 25, 32, . T. , , , , . F. )

oTBt nBmp2_1 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' copyuser ' , , , , ;
{| | Al er t ( ' TBt nBmp2_1' ) }, oTBar , ' msGet Ex' , , . F. , . F. )

oTBt nBmp2_2 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' cr i t i ca' , , , , ;
{| | }, oTBar , ' Cr i t i ca' , , . F. , . F. )

oTBt nBmp2_3 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' bmpcpo' , , , , ;
{| | }, oTBar , ' PCO' , , . F. , . F. )

oTBt nBmp2_4 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' pr eco' , , , , ;
{| | }, oTBar , ' Pr eo' , , . F. , . F. )

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n










- 395 -

ADVPL Completo



TBITMAP()

E Descrio: Classe de objetos visuais que permite a exibio de uma imagem.

E Propriedades:

cResName Caractere, Nome do resource
cBmpFile Caractere, Nome do arquivo
lStretch Lgico, opcional. Strech da imagem
lAutoSize Lgico, opcional. Tamanho automtico
lTransparent Lgico, opcional. Transparente

E Construtor: New([anTop], [anLeft], [anWidth], [anHeight], [acResName],
[acBmpFile], [alNoBorder], [aoWnd], [abLClicked], [abRClicked],
[alScroll], [alStretch], [aoCursor], [acMsg], [alUpdate], [abWhen],
[alPixel], [abValid], [alDesign], [alIsIcon], [alIsJpeg] )

E Parmetros:

anTop
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anLeft
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
anWidth Numrico, opcional. Largura em pixels.
anHeight Numrico, opcional. Altura em pixels.
acResName Caractere, Nome do resource.
acBmpFile Caractere, Nome do arquivo.
alNoBorder Lgico, opcional. Exibe borda
aoWnd
Objeto, opcional. Janela ou controle onde a imagem dever
ser criada.
abLClicked
Bloco de cdigo, opcional. Bloco que dever ser acionado
boto esquerdo do mouse for pressionado.
abRClicked
Bloco de cdigo, opcional. Bloco que dever ser acionado
boto direito do mouse for pressionado.
alScroll Lgico, opcional. Ativa o scroll
alStretch Lgico, opcional. Strech da imagem
aoCursor Objeto, opcional. Cursor a ser exibido
acMsg No utilizado
alUpdate No utilizado
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
alPixel Lgico, opcional. Utiliza coordenadas em pixel
abValid
Bloco de cdigo, opcional. Bloco que dever ser acionado na
validao.
alDesign No utilizado
alIsIcon
Lgico, opcional. cone. No utilizado a partir da verso
Protheus 8
alIsJpeg
Lgico, opcional. Jpeg. No utilizado a partir da verso
Protheus 8


- 396 -

ADVPL Completo



E Mtodos auxiliares:

Create

O Descrio: Retorna Mtodo construtor opcional da classe.
O Sintaxe: Create()
O Parmetros:

Nenhum -

O Retorno:

Objeto
Objeto da classe TBar com todos os atributos com
contedos padres.

SetBmp

O Descrio: Mtodo para carregar uma imagem do repositrio.
O Sintaxe: SetBmp( acResName )
O Parmetros:

acResName Caractere, Nome do resource

O Retorno:

Nenhum -

Load

O Descrio: Mtodo para carregar uma imagem do repositrio ou local.
O Sintaxe: Load( acResName, acBmpFile )
O Parmetros:

acResName Caractere, Nome do resource.
acBmpFile Caractere, Nome do arquivo.

O Retorno:

Nenhum -

E Aparncia:



- 397 -

ADVPL Completo



Exemplo:


#i ncl ude pr ot heus. ch


User Funct i on t Bi t mapTst ( )
Local oDl g
Local oBmp

DEFI NE MSDI ALOG oDl g TI TLE ' ' FROM 0, 0 TO 280, 330 PI XEL

@10, 10 BI TMAP oBmp RESOURCE ' t ot vs. bmp' SI ZE 150, 150 OF oDl g PI XEL
oBmp: l Aut oSi ze : = . T.

ACTI VATE MSDI ALOG oDl g CENTERED

Ret ur n

.

TBROWSEBUTTON()

E Descrio: Classe de objetos visuais do tipo boto no formato padro utilizado
em browses da aplicao.

E Propriedades:

bAction
Bloco de cdigo. Executado ao precionar o boto esquerdo
do mouse.

E Construtor: New([nRow], [nCol], [cCaption], [oWnd], [bAction], [nWidth],
[nHeight], [nHelpId], [oFont], [lDefault], [lPixel], [lDesign], [cMsg],
[lUpdate], [bWhen], [bValid], [lCancel])

E Parmetros:

nRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
nCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
cCaption Caractere, opcional. Titulo do boto.
oWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
bAction
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.
nWidth Numrico, opcional. Largura do boto em pixels
nHeight Numrico, opcional. Altura do boto em pixels.

nHelpId Reservado
oFont
Objeto, opcional. Objeto tipo tFont com propriedades da
fonte utilizada para o ttulo do boto.
lDefault Reservado
lPixel
Lgico, opcional. Se .T. considera as coordenadas passadas
em pixels, se .F. (padro) considera em caracteres.

- 398 -

ADVPL Completo


lDesign Reservado
cMsg Reservado
lUpdate Reservado
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
bValid Reservado
lCancel Reservado

E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
oTBr owseBut t on : = TBr owseBut t on( ) : New( 01, 01, ' TBr owseBut t on' , oDl g, ;

{| | Al er t ( ' TBr owseBut t on' ) }, 40, 10, , , . F. , . T. , . F. , , . F. , , , )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L















- 399 -

ADVPL Completo



TBTNBMP()

E Descrio: Classe de objetos visuais do tipo boto, o qual permite que seja
vinculada uma imagem ao controle.

E Propriedades:

bAction
Bloco de cdigo. Executado ao precionar o boto esquerdo
do mouse.

E Construtor: NewBar([cResName1], [cResName2], [cBmpFile1], [cBmpFile2],
[cMsg], [bAction], [lGroup], [oWnd], [lAdjust], [bWhen], [cToolTip],
[lPressed], [bDrop], [cAction], [nPos], [cPrompt], [oFont],
[cResName3], [cBmpFile3], [lBorder])

E Parmetros:

cResName1 Caractere, Nome do resource
cResName2 Caractere, Nome do resource
cBmpFile1 Caractere, NO UTILIZADO
cBmpFile2 Caractere, NO UTILIZADO
cMsg Caractere, Mensagem de Hint
bAction Bloco de cdigo. Ao executada
lGroup Lgico. Define grupo
oWnd
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
lAdjust Lgico, NO UTILIZADO
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
cToolTip Mensagem exibida quando objeto exibe seu tooltip.
lPressed No utilizado
bDrop No utilizado
cAction No utilizado
nPos No utilizado
cPrompt Caracter, opcional. Caption do boto.
oFont
Objeto, opcional. Objeto tipo tFont utilizado para definir as
caractersticas da fonte utilizada para exibir o contedo do
controle.
cResName3 No utilizado
cBmpFile3 No utilizado
lBorder No utilizado


- 400 -

ADVPL Completo



E Mtodos auxiliares:

LoadBitmaps

O Descrio: Atribui ao boto os bitmaps ou recursos para exibio.
O Sintaxe: LoadBitmaps([cResName1], [cResName2], [cBmpFile1],
[cBmpFile2], [cResName3], [cBmpFile3])

O Parmetros:

cResName1 Caractere, Nome do resource
cResName2 Caractere, Nome do resource
cBmpFile1 Caractere, Nome do arquivo BMP
cBmpFile2 Caractere, Nome do arquivo BMP
cResName3 Caractere, Nome do resource
cBmpFile3 Caractere, Nome do resource

O Retorno:

Nenhum


SetPopUpMenu

O Descrio: Seta o objeto do tipo TMenu referente ao boto.
O Sintaxe: SetPopupMenu(oMenu)
O Parmetros:

Nenhum -

O Retorno:

Nenhum -

E Aparncia:



- 401 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
oTBar : = TBar ( ) : New( oDl g, 25, 32, . T. , , , , . F. ) / / Or i g: 25, 45
oTBt nBmp1 : = TBt nBmp( ) : NewBar ( ' RPMNEW' , , , , ' Msg 01' , ;
{| | Al er t ( ' TBt nBmp
01' ) }, . F. , oTBar , . T. , {| | . T. }, , . F. , , , 1, , , , , . T. )
oTBt nBmp2 : = TBt nBmp( ) : NewBar ( ' copyuser ' , , , , ' Msg 02' , ;
{| | Al er t ( ' TBt nBmp
02' ) }, . F. , oTBar , . T. , {| | . T. }, , . F. , , , 1, , , , , . T. )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L


TBTNBMP2()

E Descrio: Classe de objetos visuais do tipo boto, o qual permite a exibio de
uma imagem ou de um popup.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New([anTop], [anLeft], [anWidth], [anHeight], [acResName1],
[acResName2], [acBmpFile1], [acBmpFile2],[abAction], [aoWnd],
[acMsg], [abWhen], [lAdjuste], [lUpdate])

E Parmetros:

anTop
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anLeft
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
anWidth Numrico, opcional. Largura em pixels.
anHeight Numrico, opcional. Altura em pixels.
acResName1 Caractere, Nome do resource
acResName2 Caractere, NO UTILIZADO
acBmpFile1 Caractere, NO UTILIZADO
acBmpFile2 Caractere, NO UTILIZADO
abAction Bloco de cdigo. Ao executada
aoWnd
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
acMsg Caractere, Mensagem de Hint
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lAdjust Lgico, NO UTILIZADO
lUpdate Lgico, NO UTILIZADO

E Mtodos auxiliares:

- 402 -

ADVPL Completo



LoadBitmaps

O Descrio: Atribui ao boto os bitmaps ou recursos para exibio.
O Sintaxe: LoadBitmaps([cResName1], [cResName2], [cBmpFile1],
[cBmpFile2], [cResName3], [cBmpFile3])

O Parmetros:

cResName1 Caractere, Nome do resource
cResName2 Caractere, Nome do resource
cBmpFile1 Caractere, Nome do arquivo BMP
cBmpFile2 Caractere, Nome do arquivo BMP
cResName3 Caractere, Nome do resource
cBmpFile3 Caractere, Nome do resource

O Retorno:

Nenhum

SetPopUpMenu

O Descrio: Seta o objeto do tipo TMenu referente ao boto.
O Sintaxe: SetPopupMenu(oMenu)
O Parmetros:

Nenhum -

O Retorno:

Nenhum -

E Aparncia:



- 403 -

ADVPL Completo



Exemplo:

Local oBt n : = TBt nBmp2( ) : New( 10, 10, 25, 25, ' pr i nt er _r 2' , , , , , oDl g,
, , )
Exempl o 2 ( Popup)
#I NCLUDE ' PROTHEUS. CH'
User Funct i on Bt nBmpPopUp
Local oDl g
Local oBt n
DEFI NE MSDI ALOG oDl g TI TLE ' ' FROM 0, 0 TO 100, 200 PI XEL
oBt n : = TBt nBmp2( ) : New( 10, 10, 13, 13, ' I BF- MENU. BMP' , ' I BF- MENU. BMP' ,
, , , oDl g, , , . T. )
oBt n: Set Popupmenu( TShowMenu( ) )
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n

/ **************************/
St at i c Funct i on TShowMenu( )
Local oMenu
oMenu : = TMenu( ) : New( 0, 0, 0, 0, . T. )
oMenu: Add( TMenuI t em( ) : New( , ' Det al hes' , ' Det al hes' , , , , , , , , , , , , . T. ) )
oMenu: Add( TMenuI t em( ) : New( , ' Add I nf o' , ' Add I nf o' , , , , , , , , , , , , . T. ) )
Ret ur n oMenu

TBUTTON()

E Descrio: Classe de objetos visuais do tipo boto, o qual permite a utilizao
de texto para sua identificao.

E Propriedades:

lProcessing Lgico. Se .T. indica o boto est efetuando uma ao.
bAction Bloco de cdigo. Executado quando o boto pressionado.

E Construtor: New([anRow], [anCol], [acCaption], [aoWnd], [abAction],
[anWidth], [anHeight], [nPar8], [aoFont], [lPar10],
[alPixel],[lPar12],[cPar13], [lPar14], [abWhen], [bPar16], [lPar17])

E Parmetros:

Parmetro Tipo / Descrio
anRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
acCaption Caractere, opcional. Titulo do boto.
aoWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
abAction
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.
anWidth Numrico, opcional. Largura do boto em pixels.
anHeight Numrico, opcional. Altura do boto em pixels.
nPar8 Reservado.
aoFont
Objeto, opcional. Objeto tipo tFont com propriedades da
fonte utilizada para o ttulo do boto.

- 404 -

ADVPL Completo


lPar10 Reservado.
alPixel
Lgico, opcional. Se .T. considera as coordenadas passadas
em pixels, se .F. (padro) considera em caracteres.
lPar12 Reservado.
cPar13 Reservado.
lPar14 Reservado.
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
bPar16 Reservado.
lPar17 Reservado.

E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test eGet ( )
Local oDl g, oBut t on, oCombo, cCombo
aI t ems: = {' i t em1' , ' i t em2' , ' i t em3' }
cCombo: = aI t ems[ 2]
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 300, 300 PI XEL TI TLE ' Meu Combo'
oCombo: = t ComboBox( ) : New( 10, 10, {| u| i f ( PCount ( ) >0, cCombo: =u, cCombo) }, ;
aI t ems, 100, 20, oDl g, , {| | MsgSt op( ' Mudou i t em' ) }, , , , . T. , , , , , , , , , ' cCombo' )

/ / Bot o par a f echar a j anel a
oBut t on: =t But t on( ) : New( 30, 10, ' f echar ' , oDl g, {| | oDl g: End( ) }, 100, 20, , , , . T. )
ACTI VATE MSDI ALOG oDl g CENTERED
MsgSt op( ' O val or ' +cCombo )
Ret ur n NI L

- 405 -

ADVPL Completo



TCBROWSE()

E Descrio: Classe de objetos visuais do tipo Grid.

E Propriedades:

+ Herdadas da classe superior
nAt Linha atualmente selecionada / posicionada no objeto
nLen Nmero total de linhas do objeto

E Construtor: New([nRow], [nCol], [nWidth], [nHeigth],[bFields], [aHeaders],
[aColSizes], [oDlg], [cField], [uValue1], [uValue2],
[uChange],[{|nRow,nCol,nFlags|[uLDblClick]}],
[{|nRow,nCol,nFlags|[uRClick]}], [oFont], [oCursor], [nClrFore],
[nClrBack], [cMsg], [lUpdate], [cAlias], [lPixel], [{uWhen}],
[lDesign], [bValid], [lHScroll], [lVScroll])

E Parmetros:

nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
bFields Bloco de cdigo, Lista de Campos
aHeaders Vetor, Descrio dos campos para no cabealho
aColSizes Vetor, Largura das colunas
oDlg
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
cField Caracter, opcional. Campos necessrios ao filtro
uValue1 Indefinido, opcional. Inicio do intervalo para o filtro
uValue2 Indefinido, opcional. Fim do intervalo para o filtro
bChange
Bloco de cdigo, opcional. Executado quando o item
selecionado alterado.
bLDblClick
Bloco de cdigo, opcional. Executado quando acionado duplo
click do boto esquerdo do mouse sobre o controle.
bRClick No utilizado
oFont Objeto, opcional. Fonte
oCursor Objeto, opcional. Tipo do Cursor
nClrFore Numrico, opcional. Cor do texto da janela.
nClrBack Numrico, opcional. Cor de fundo da janela.
cMsg
Caracter, opcional. Mesamge ao posicionar o mouse sobre o
objeto
lUpdate No utilizado
cAlias
Caracter, opcional se objeto utilizado com Vetor, obrigatorio
se utilizado com Tabela
lPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lDesign No Utilizado
bValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo

- 406 -

ADVPL Completo


for vlido e .F. quando o contedo for invlido.
lHScroll
Lgico, opcional. Se .T., habilita barra de rolagem
horizontal.
lVScroll Lgico, opcional. Se .T., habilita barra de rolagem vertical.

E Mtodos auxiliares:

GoUp

O Descrio: Salta uma linha para cima.
O Sintaxe: GoUp( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoDown

O Descrio: Salta uma linha para baixo.
O Sintaxe: GoDown( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoTop

O Descrio: Salta para primeira linha.
O Sintaxe: GoTop( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoBottom

O Descrio: Salta para ultima linha.
O Sintaxe: GoBottom( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 407 -

ADVPL Completo


RowCount

O Descrio: Retorna numero de linhas visiveis.
O Sintaxe: RowCount( )
O Parmetros:

Nenhum -

O Retorno:

Nil

E Aparncia:




- 408 -

ADVPL Completo


Exemplo:

#i ncl ude ' pr ot heus. ch'
user f unct i on TcBr owse_EX( )
Local oOK : = LoadBi t map( Get Resour ces( ) , ' br _ver de' )
Local oNO : = LoadBi t map( Get Resour ces( ) , ' br _ver mel ho' )
Local aLi st : = {} / / Vet or comel ement os do Br owse
Local nX
/ / Cr i a Vet or par a t est e
f or nX : = 1 t o 100
aLi st Aux : = {. T. , st r zer o( nX, 10) , ' Descr i o do Pr odut o ' +;
st r zer o( nX, 3) , 1000. 22+nX}
aadd( aLi st , aLi st Aux)
next

DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 520, 600 PI XEL TI TLE ' Exempl o da TCBr owse'
/ / Cr i a obj et o de f ont e que ser a usado na Br owse
Def i ne Font oFont Name ' Cour i er New' Si ze 0, - 12
/ / Cr i a Br owse
oLi st : = TCBr owse( ) : New( 01 , 01, 300, 200, , ;
' ' , ' Codi go' , ' Descr i o' , ' Val or ' }, {20, 50, 50, 50}, ;
oDl g, , , , , {| | }, , oFont , , , , , . F. , , . T. , , . F. , , , )
/ / Set a o vet or a ser ut i l i zado
oLi st : Set Ar r ay( aLi st )
/ / Mont a a l i nha a ser exi bi na no Br owse
oLi st : bLi ne : = {| | { I f ( aLi st [ oLi st : nAt , 01] , oOK, oNO) , ;
aLi st [ oLi st : nAt , 02] , ;
aLi st [ oLi st : nAt , 03] , ;
Tr ansf or m( aLi st [ oLi st : nAT, 04] , ' @E 99, 999, 999, 999. 99' ) } }
/ / Event o de Dupl oCl i ck ( t r oca o val or do pr i mei r o el ement o do Vet or )
oLi st : bLDbl Cl i ck : = {| | aLi st [ oLi st : nAt ] [ 1] : =;
! aLi st [ oLi st : nAt ] [ 1] , oLi st : Dr awSel ect ( ) }
/ / Pr i nci pai s commandos
oBt n : = TBut t on( ) : New( 210, 001, ' GoUp( ) ' , oDl g, {| | oLi st : GoUp( ) }, ;
40, 010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 220, 001, ' GoDown( ) ' , oDl g, {| | oLi st : GoDown( ) }, ;
40, 010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 230, 001, ' GoTop( ) ' , oDl g, {| | oLi st : GoTop( ) }, ;
40, 010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 240, 001, ' GoBot t om( ) ' , oDl g, {| | oLi st : GoBot t om( ) }, ;
40, 010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 210, 060, ' nAt ( Li nha sel eci onada) ' , ;
oDl g, {| | Al er t ( oLi st : nAt ) }, ;
90, 010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 220, 060, ' nRowCount ( Nr de l i nhas vi si vei s) ' ,
oDl g, ; {| | Al er t ( oLi st : nRowCount ( ) ) }, 90, 010, , , . F. , . T. , . F. , , . F. , , , . F. )

oBt n : = TBut t on( ) : New( 230, 060, ' nLen ( Numer o t ot al de l i nhas) ' , oDl g, ;
{| | Al er t ( oLi st : nLen) }, 90, 010, , , . F. , . T. , . F. , , . F. , , , . F. )

oBt n : = TBut t on( ) : New( 240, 060, ' l Edi t Cel l ( Edi t a a cel ul a) ' , oDl g, ;
{| | l Edi t Cel l ( @aLi st , oLi st , ' @! ' , 3) }, 90, 010, , , . F. , . T. , . F. , , . F. , , , . F. )
ACTI VATE MSDI ALOG oDl g CENTERED
r et ur n


- 409 -

ADVPL Completo



TCHECKBOX()

E Descrio: Classe de objetos visuais do tipo controle - CheckBox.

E Propriedades:

bLClicked Bloco de cdigo disparado ao clique do mouse no objeto
bSetGet
Bloco de cdigo disparado na mudana de item selecionado,
responsavel pela mudana de valor da variavel numerica
que indica o item selecionado.
bWhen
Bloco de cdigo recebe um lgico e de True permite
alterao, se False no permite.
bValid Bloco de cdigo executado na saida do objeto.

E Construtor: New([nRow], [nCol], [cCaption], [bSetGet], [oDlg], [nWidth],
[nHeight], [aHelpIds], [bLClicked], [oFont], [bValid], [nClrText],
[nClrPane], [lDesign], [lPixel], [cMsg], [lUpdate], [bWhen])

E Parmetros:

nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
cCaption Caracter, Texto descritivo
bSetGet Code-block, opcional, Responsvel pela setagem de valor
oDlg
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
aHelpIds No utilizado
bLClicked Bloco de cdigo, opcional. Executado ao clique do mouse.
oFont Objeto, opcional. Fonte
bValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
nClrText Numrico, opcional. Cor do texto da janela.
nClrPane Numrico, opcional. Cor de fundo da janela.
lDesign No utilizado
lPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
cMsg
Caracter, opcional. Mesamge ao posicionar o mouse sobre o
objeto
lUpdate No utilizado
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.


- 410 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
user f unct i on TCheckBox( )
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 270, 400 PI XEL TI TLE ' Exempl o da
TCBr owse'
l Check1 : = . T.
oCheck1 : = TCheckBox( ) : New( 01, 01, ' CheckBox 001' , , oDl g,
100, 210, , , , , , , , . T. , , , )
oCheck2 : = TCheckBox( ) : New( 11, 01, ' CheckBox 002' , , oDl g,
100, 210, , , , , , , , . T. , , , )
oCheck3 : = TCheckBox( ) : New( 21, 01, ' CheckBox 003' , , oDl g,
100, 210, , , , , , , , . T. , , , )

oCheck4 : =TCheckBox( ) : New( 31, 01, ' CheckBox 004' , , oDl g,
100, 210, , , , , , , , . T. , , , )
oCheck5 : = TCheckBox( ) : New( 41, 01, ' CheckBox
005' , , oDl g, 100, 210, , , , , , , , . T. , , , )


/ / Set a Event os do pr i mei r o Check
oCheck1: bSet Get : = {| | l Check1 }
oCheck1: bLCl i cked : = {| | l Check1: =! l Check1 }
oCheck1: bWhen : = {| | . T. }
oCheck1: bVal i d : = {| | Al er t ( ' bVal i d' ) }
/ / Pr i nci pai s comandos
oBt n : = TBut t on( ) : New( 060, 001, ' Ret or na est ado do CheckBox
001' , ;
oDl g, {| | Al er t ( l Check1) }, 120,
010, , , . F. , . T. , . F. , , . F. , , , . F. )
ACTI VATE MSDI ALOG oDl g CENTERED
r et ur n

- 411 -

ADVPL Completo



TCOLORTRIANGLE()

E Descrio: Classe de objetos visuais do tipo Paleta de Cores.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New([anRow], [anCol], [aoWnd], [anWidth], [anHeight] )

E Parmetros:

anRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
aoWnd
Objeto, opcional. Janela ou controle onde a paleta dever
ser criada.
anWidth Numrico, opcional. Largura da paleta em pixels.
anHeight Numrico, opcional. Altura da paleta em pixels.

E Mtodos auxiliares:

Create

O Descrio: Mtodo construtor opcional da classe.
O Sintaxe: Create(aoWnd)
O Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde a paleta dever
ser criada.

O Retorno:

Objeto
Objeto do tipo TColorTriangule com os atributos definidos
com contedo padro.

RetColor

O Descrio: Retorna o RGB da cor selecionada
O Sintaxe: RetColor ( )
O Parmetros:

Nenhum -

O Retorno:

Numrico Valor que representa do RGB da cor.



- 412 -

ADVPL Completo




SetColorIni

O Descrio: Define a cor inicial selecionada para o controle.
O Sintaxe: SetColorIni (nColor )
O Parmetros:

nColor Valor da cor inicial no padro RGB.

O Retorno:

Nenhum -

SetColor

O Descrio: Define a cor corrente.
O Sintaxe: SetColor (nColor )
O Parmetros:

nColor Valor da cor inicial no padro RGB.

O Retorno:

Nenhum -

SetSizeTriangule

O Descrio: Define o tamanho do tringulo de configurao das cores.
O Sintaxe: SetSizeTriangule (nWidh, nHeight)
O Parmetros:

nWidth Numrico. Largura
nHeight Numrico.Altura

O Retorno:

Nenhum -

E Aparncia:



- 413 -

ADVPL Completo



Exemplo:

#i ncl ude pr ot heus. ch


User Funct i on t Col or ( )
Local oDl g, oCol or T
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 500, 600 PI XEL TI TLE Cor es
/ / Usando o mt odo cr eat e
oCol or T : = t Col or Tr i angl e( ) : Cr eat e( oDl g )
oCol or T: Set Col or I ni ( nCol or I ni )
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n Ni l

TCOMBOBOX()

E Descrio: Classe de objetos visuais do tipo tComboBox, a qual cria uma
entrada de dados com mltipla escolha com item definido em uma
lista vertical, acionada por F4 ou pelo boto esquerdo localizado na
parte direita do controle. A varivel associada ao controle ter o
valor de um dos itens selecionados ou no caso de uma lista
indexada, o valor de seu ndice.

E Propriedades:

aItems
Array. Lista de itens, caracteres, a serem exibidos. Pode ter
os seguintes formatos: a) Seqencial, exemplo:
{item1,item2,...,itemN} ou b) Indexada, exemplo:
{a=item1,b=item2, ..., n=itemN}.
nAt Numrico. Posio do item selecionado.

E Construtor: New([anRow], [anCol], [abSetGet], [anItems], [anWidth],
[anHeight], [aoWnd], [nPar8], [abChange], [abValid], [anClrText],
[anClrBack], [alPixel], [aoFont], [cPar15], [lPar16], [abWhen],
[lPar18], [aPar19], [bPar20], [cPar21], [acReadVar])

E Parmetros:

Parmetro
anRow
Numrico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
abSetGet
Bloco de cdigo, opcional. Bloco de cdigo no formato {|u|
if( Pcount( )>0, <var>:= u, <var> ) } que o controle utiliza
para atualizar a varivel <var>. <var> deve ser tipo
caracter. Se a lista for seqencial, o controle atualizar
<var> com o contedo do item selecionado, se a lista for
indexada, <var> ser atualizada com o valor do ndice do
item selecionado.
anItems
Array, opcional. Lista de items, caracteres, a serem exibidos.
Pode ter os seguintes formatos: a) Seqencial, exemplo:
{item1,item2,...,itemN} ou b) Indexada, exemplo:
{a=item1,b=item2, ..., n=itemN}.
anWidth Numrico, opcional. Largura do controle em pixels.

- 414 -

ADVPL Completo


anHeight Numrico, opcional. Altura do controle em pixels.
aoWnd
Objeto, opcional. Janela ou controle onde o controle ser
criado.
nPar8 Reservado.
abChange
Bloco de cdigo, opcional. Executado quando o controle
modifica o item selecionado.
abValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
anClrBack Numrico, opcional. Cor de fundo do controle.
anClrText Numrico, opcional. Cor do texto do controle.
alPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
aoFont
Objeto, opcional. Objeto tipo tFont utilizado para definir as
caractersticas da fonte utilizada para exibir o contedo do
controle.
cPar15 Reservado.
lPar16 Reservado.
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lPar18 Reservado.
aPar19 Reservado.
bPar20 Reservado.
cPar21 Reservado.
acReadVar
Caractere, opcional. Nome da varivel que o controle dever
manipular, dever ser a mesma varivel informada no
parmetro abSetGet, e ser o retorno da funo ReadVar( ).

E Mtodos auxiliares:

Select

O Descrio: Muda o item selecionado no combobox.
O Sintaxe: Select( [anItem] )
O Parmetros:

anItem Numrico, opcional. Posio do item a ser selecionado.

O Retorno:

Nenhum -


- 415 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test eGet ( )
Local oDl g, oBut t on, oCombo, cCombo
aI t ems: = {' i t em1' , ' i t em2' , ' i t em3' }
cCombo: = aI t ems[ 2]
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 300, 300 PI XEL TI TLE ' Meu Combo'
oCombo: = t ComboBox( ) : New( 10, 10, {| u| i f ( PCount ( ) >0, cCombo: =u, cCombo) }, ;
aI t ems, 100, 20, oDl g, , {| | MsgSt op( ' Mudou i t em' ) }, , , , . T. , , , , , , , , , ' cCombo' )

/ / Bot o par a f echar a j anel a
oBut t on: =t But t on( ) : New( 30, 10, ' f echar ' , oDl g, {| | oDl g: End( ) }, 100, 20, , , , . T. )
ACTI VATE MSDI ALOG oDl g CENTERED
MsgSt op( ' O val or ' +cCombo )
Ret ur n NI L

- 416 -

ADVPL Completo



TFOLDER()

E Descrio: Classe de objetos visuais do tipo controle - Folder.

E Propriedades:

aPrompts Array, Titulo dos folders
aDialogs Array, Nome dos dilogos
nOption Numrico, Folder selecionado
bSetOption Bloco de cdigo, Executado na seleo do folder

E Construtor: New([anTop], [anLeft], [aPrompts], [aDialogs], [aoWnd],
[anOption], [anClrFore], [anClrBack], [alPixel], [alDesign], [anWidth],
[anHeight], [acMsg], [alAllWidth])

E Parmetros:

anTop
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anLeft
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
aPrompts Array, Titulo dos folders
aDialogs Array, Nome dos dilogos
aoWnd
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
anOption Numrico, opcional. Folder selecionado
anClrFore Numrico, opcional. Cor de frente
anClrBack Numrico, opcional. Cor de fundo
alPixel Lgico, opcional. Utiliza coordenadas em pixel
alDesign Lgico, opcional. NO USADO
anWidth Numrico, opcional. Largura em pixels.
anHeight Numrico, opcional. Altura em pixels.
acMsg Caractere, Mensagem de Hint
alAllWidth Lgico, opcional. NO USADO

E Mtodos auxiliares:

SetOption

O Descrio: Seleciona folder desejado
O Sintaxe: SetOption( nOption )
O Parmetros:

nOption Numrico. Folder a ser selecionado

O Retorno:

Nenhum -


- 417 -

ADVPL Completo


AddItem

O Descrio: Insere um folder
O Sintaxe: AddItem ( cItem, lVisible )
O Parmetros:

cItem Caractere. Ttulo do Folder
lVisible Lgico. Visvel

O Retorno:

Nenhum -

aEnable

O Descrio: Habilita/Desabilita um folder
O Sintaxe: aEnable( nItem, lEnable )
O Parmetros:

nItem Numrico. Folder para habilitar/desabilitar
lEnable Lgico. Habilita/Desabilita

O Retorno:

Nenhum -

E Aparncia:




- 418 -

ADVPL Completo



Exemplo:

Local oFol der
Local aFol der : = { ' Fol der 1' , ' Fol der 2' , ' Fol der 3' }

oFol der : = TFol der ( ) : New( 0, 0, aFol der , aFol der , oDl g, , , , . T. , , 200, ;
200 )



TGET()

E Descrio: Classe de objetos visuais do tipo controle tGet, a qual cria um
controle que armazena ou altera o contedo de uma varivel atravs
de digitao. O contedo da varivel s modificado quando o
controle perde o foco de edio para outro controle.

E Propriedades:

lPassword
Lgico. Se .T. o controle se comporta como entrada de
dados de senha, exibindo asteriscos * para esconder o
contedo digitado.
Picture
Caractere. Mscara de formatao do contedo a ser
exibido.

E Construtor: 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
Numrico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
abSetGet
Bloco de cdigo, opcional. Bloco de cdigo no formato {|u|
if( Pcount( )>0, <var>:= u, <var> ) } que o controle utiliza
para atualizar a varivel <var>. <var> deve ser tipo
caracter, numrico ou data.
aoWnd
Objeto, opcional. Janela ou controle onde o controle ser
criado.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
acPict
Caractere, opcional. Mscara de formatao do contedo a
ser exibido.
abValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
anClrFore Numrico, opcional. Cor de fundo do controle.
anClrBack Numrico, opcional. Cor do texto do controle.
aoFont
Objeto, opcional. Objeto tipo tFont utilizado para definir as
caractersticas da fonte utilizada para exibir o contedo do

- 419 -

ADVPL Completo


controle.
lPar12 Reservado.
oPar13 Reservado.
alPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
cPar15 Reservado.
lPar16 Reservado.
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lPar18 Reservado.
lPar19 Reservado.
abChange
Bloco de cdigo, opcional. Executado quando o controle
modifica o valor da varivel associada.
alReadOnly Lgico, opcional. Se .T. o controle no poder ser editado.
alPassword
Lgico, opcional. Se .T. o controle exibir asteriscos * no
lugar dos caracteres exibidos pelo controle para simular
entrada de senha.
cPar23 Reservado.
acReadVar
Caractere, opcional. Nome da varivel que o controle dever
manipular, dever ser a mesma varivel informada no
parmetro abSetGet, e ser o retorno da funo ReadVar( ).
cPar25 Reservado.
lPar26 Reservado.
nPar27 Reservado.
lPar28 Reservado.

E Aparncia:



- 420 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test eGet ( )
Local oDl g, oBut t on, oCombo, cCombo, nGet 1: =0
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 300, 300 PI XEL TI TLE ' Meu Get '
oGet 1: = TGet ( ) : New( 10, 10, {| u| i f ( PCount ( ) >0, nGet 1: =u, nGet 1) }, oDl g, ;
100, 20, ' @E 999, 999. 99' , ;
{| o| nGet 1>1000. 00}, , , , , , . T. , , , , , , , , , , ' nGet 1' )

/ / Bot o par a f echar a j anel a
oBut t on: =t But t on( ) : New( 30, 10, ' f echar ' , oDl g, {| | oDl g: End( ) }, 100, 20, , , , . T. )
ACTI VATE MSDI ALOG oDl g CENTERED
MsgSt op( ' O val or ' +Tr ansf or m( nGet 1, ' @E 999, 999. 00' ) )

Ret ur n NI L

TGROUP()

E Descrio: Classe de objetos visuais do tipo painel tGroup, a qual cria um
painel onde controles visuais podem ser agrupados ou classificados.
Neste painel criada uma borda com ttulo em volta dos controles
agrupados.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New([anTop], [anLeft], [anBottom], [anRight], [acCaption],
[aoWnd], [anClrText], [anClrPane], [alPixel], [lPar10])

E Parmetros:

anTop
Numrico, opcional. Coordenada vertical superior em pixels
ou caracteres.
anLeft
Numrico, opcional. Coordenada horizontal esquerda em
pixels ou caracteres.
anBottom
Numrico, opcional. Coordenada vertical inferior em pixels
ou caracteres.
anRight
Numrico, opcional. Coordenada horizontal direita em pixels
ou caracteres.
acCaption Caractere, opcional. Ttulo do grupo.
aoWnd
Objeto, opcional. Janela ou controle onde o controle ser
criado.
anClrText Numrico, opcional. Cor do texto.
anClrPane Numrico, opcional. Cor do fundo.
alPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
lPar10 Reservado.


- 421 -

ADVPL Completo



E Aparncia:




Exemplo:


#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g, oBut t on, oCombo, cCombo, cGet 1: =' Test e'
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 300, 300 PI XEL TI TLE ' Meu t est '
oGr oup: = t Gr oup( ) : New( 10, 10, 130, 130, ' gr upo de get s' , oDl g, , , . T. )
@18, 16 MSGET oGet 1 VAR cGet 1 SI ZE 100, 10 OF oGr oup PI XEL
@38, 16 MSGET oGet 2 VAR cGet 1 SI ZE 100, 10 OF oGr oup PI XEL
ACTI VATE MSDI ALOG oDl g CENTERED











- 422 -

ADVPL Completo



THBUTTON()

E Descrio: Classe de objetos visuais do tipo boto com hiperlink.

E Propriedades:

bAction Bloco de cdigo. Executado quando o boto pressionado.

E Construtor: New([anRow], [anCol], [acCaption], [aoWnd], [abAction],
[anWidth], [anHeight], [aoFont], [abWhen])

E Parmetros:

Parmetro Tipo / Descrio
anRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
acCaption Caractere, opcional. Titulo do boto.
aoWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
abAction
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.
anWidth Numrico, opcional. Largura do boto em pixels.
anHeight Numrico, opcional. Altura do boto em pixels.
aoFont
Objeto, opcional. Objeto tipo tFont com propriedades da
fonte utilizada para o ttulo do boto.
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.

E Mtodos auxiliares:

Create

O Descrio: Mtodo construtor opcional da classe.
O Sintaxe: Create(aoWnd)
O Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde a paleta dever
ser criada.

O Retorno:

Objeto
Objeto do tipo THButton com os atributos definidos com
contedo padro.


- 423 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude pr ot heus. ch
#i ncl ude hbut t on. ch
User Funct i on MyhBt n( )
Local oDl g, ohBt n
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 500, 600 PI XEL TI TLE Meu hBut t on
/ / Usando o mt odo cr eat e
ohBt n: = t HBut t on( ) : Cr eat e( oDl g )
ohBt n: nTop : = 100
ohBt n: nLef t : = 10
ohBt n: nWi dt h : = 100
ohBt n: nHei ght : = 30
ohBt n: cCapt i on : = ' hBut t on'
ohBt n: bl Cl i cked : = { | | MsgSt op( ' Cl i quei ' ) }
/ / Usando o command
@200, 100 HBUTTON ohBt n PROMPT ' Exempl o hBut t on' SI ZE 100, 30 ACTI ON
MsgSt op( ' Cl i quei ' ) OF oDl g MESSAGE ' hBut t on'
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n Ni l


TIBROWSER()

E Descrio: Classe de objetos visuais do tipo Pgina de Internet, sendo
necessrio incluir a clausula BrowserEnabled=1 no Config do
Remote.INI

E Propriedades:

- Herdadas da classe superior

E Construtor: New([nRow], [nCol], [nWidth], [nHeight], [cPager], [oWnd])

E Parmetros:

nRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
nCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres
nWidth Numrico, opcional. Largura em pixels
nHeigth Numrico, opcional. Altura em pixels.
cPage Caracter. Enredeo URL da pgina de Internet
oWnd
Objeto, opcional. Janela ou controle onde a boto dever ser
criado

E Aparncia:

- 424 -

ADVPL Completo





Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'

/ / Habi l i t ar no Remot e( Conf i g) - > Br owser Enabl ed=1
oTI Br owser : =
TI Br owser ( ) : New( 0, 0, 306, 134, ' ht t p: / / www. mi cr osi ga. com. br ' , oDl g )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L












- 425 -

ADVPL Completo



TLISTBOX()

E Descrio: Classe de objetos visuais do tipo controle tListbox, a qual cria uma
janela com itens selecionveis e barra de rolagem. Ao selecionar um
item, uma varivel atualizada com o contedo do item selecionado.

E Propriedades:

nAt Numrico. Posio do item selecionado.
aItems Array de items caracteres. Lista do itens selecionveis.

E Construtor: New([anRow], [anCol], [abSetGet], [aaItems], [anWidth],
[anHeigth], [abChange], [aoWnd], [abValid], [anClrFore],
[anClrBack], [alPixel], [lPar13], [abLDBLClick], [aoFont], [cPar16],
[lPar17], [abWhen], [aPar19], [bPar20], [lPar21], [lPar22],
[abRightClick] )

E Parmetros:

anRow
Numrico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
abSetGet
Bloco de cdigo, opcional. Bloco de cdigo no formato {|u|
if( Pcount( )>0, <var>:= u, <var> )} que o controle utiliza
para atualizar a varivel <var>. <var> deve ser tipo
caracter ou numrica.
aaItems
Array de items caracteres, opcional. Lista de items
selecionveis.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
abChange
Bloco de cdigo, opcional. Executado quando o item
selecionado alterado.
aoWnd
Objeto, opcional. Janela ou controle onde o controle ser
criado.
abValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
anClrFore Numrico, opcional. Cor de fundo do controle.
anClrBack Numrico, opcional. Cor do texto do controle.
alPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
lPar13 Reservado.
abLDBLClick
Bloco de cdigo, opcional. Executado quando acionado duplo
click do boto esquerdo do mouse sobre o controle.
aoFont
Objeto, opcional. Objeto tipo tFont utilizado para definir as
caractersticas da fonte utilizada para exibir o contedo do
controle.
cPar16 Reservado.
lPar17 Reservado.
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.

- 426 -

ADVPL Completo


aPar19 Reservado.
bPar20 Reservado.
lPar21 Reservado.
lPar22 Reservado.
abRightClick
Bloco de cdigo, opcional. Executado quando acionado click
do boto direito do mouse sobre o controle.

E Mtodos auxiliares:

Select

O Descrio: Fora a seleo de um item.
O Sintaxe: Select( [anItem] )
O Parmetros:

nItem Numrico, opcional. Posio do item a ser selecionado.

O Retorno:

Nenhum -

Add

O Descrio: Adiciona novo item.
O Sintaxe: Add( cText, nPos )
O Parmetros:

cText Caractere, obrigatrio. Texto do item.
nPos
Numrico, obrigatrio. Se 0 ou maior que o nmero de
itens, insere o item no final da lista. Se valor entre 1 e
nmero de itens, insere o item na posio informada,
empurrando o item anterior para baixo.

O Retorno:

Nenhum -

Modify

O Descrio: Modifica o texto de um item.
O Sintaxe: Modify( cText, nPos )
O Parmetros:

cText Caractere, obrigatrio. Novo texto do item.
nPos
Numrico, obrigatrio. Posio a ser modificada deve ser
maior que 0 e menor ou igual que o nmero de itens.

O Retorno:

Nenhum -


- 427 -

ADVPL Completo



Del

O Descrio: Remove um item.
O Sintaxe: Del( nPos )
O Parmetros:

nPos
Numrico, obrigatrio. Posio a ser excluida, deve ser
maior que 0 e menor ou igual que o nmero de itens.

O Retorno:

Nenhum -

Len

O Descrio: Retorna o nmero de itens.
O Sintaxe: Len( )
O Parmetros:

Nenhum -

O Retorno:

Numrico Nmero de itens.

Reset

O Descrio: Apaga todos os itens.
O Sintaxe: Reset( )
O Parmetros:

Nenhum -

O Retorno:

Nenhum -


- 428 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g, oLi st , nLi st : = 1
Local aI t ems: ={}
Aadd( aI t ems, ' I t em1' )
Aadd( aI t ems, ' I t em2' )
Aadd( aI t ems, ' I t em3' )
Aadd( aI t ems, ' I t em4' )
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 400, 400 PI XEL TI TLE ' Test e'
oLi st : = t Li st Box( ) : New( 10, 10, {| u| i f ( Pcount ( ) >0, nLi st : =u, nLi st ) };
, aI t ems, 100, 100, , oDl g, , , , . T. )
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

- 429 -

ADVPL Completo



TMENU()

E Descrio: Classe de objetos visuais do tipo controle - Menu.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New ([nTop], [nLeft], [nHeight], [nWidth], [lPopUp], [cBmpName],
[oWnd], [nClrNoSelect], [nClrSelect], [cArrowUpNoSel],
[cArrowUpSel], [cArrowDownNoSel], [cArrowDownSel])

E Parmetros:

nTop Numrico, opcional. Coordenada vertical em pixels.
nLeft Numrico, opcional. Coordenada horizontal em pixels.
nHeight Numrico, opcional. Altura do controle em pixels.
nWidth Numrico, opcional. Largura do controle em pixels.
lPopUp Lgico. Define se o objeto ser um PoPup
cBmpName Caracter opcional. Figura do Menu
oWnd
Objeto, opcional. Janela ou controle onde a boto dever
ser criado
nClrNoSelect Numerico opcional. Cor quando no selecionado
nClrSelect Numerico opcional. Cor quando selecionado
cArrowUpNoSel
Caracter opcional, Define a figura da seta para cima
quando no selecionado o item.
cArrowUpSel
Caracter opcional, Define a figura da seta para cima
quando selecionado o item.
cArrowDownNoSel
Caracter opcional, Define a figura da seta para baixo
quando no selecionado o item.
cArrowDownSel
Caracter opcional, Define a figura da seta para baixo
quando selecionado o item.

E Aparncia:



- 430 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
oMenu : = TMenu( ) : New( 0, 0, 0, 0, . F. , ' ' , oDl g, CLR_WHI TE, CLR_BLACK)
/ / Adi ci ona I t emao Menu Pr i nci pal
oMenuI t em1 : = TMenuI t em( ) : New2( oMenu: Owner ( ) , ' I t em001' , ' I t em
001' , , , )
oMenu: Add( oMenuI t em1 )

/ / Adi ci ona sub- I t ens
oMenuI t em2 : = TMenuI t em( ) : New2( oMenu: Owner ( ) , ' Sub- I t em
001' , , , {| | Al er t ( ' TMenuI t em' ) })
oMenuI t em3 : = TMenuI t em( ) : New2( oMenu: Owner ( ) , ' Sub- I t em
002' , , , {| | Al er t ( ' TMenuI t em' ) })
oMenuI t em1: Add( oMenuI t em2 )
oMenuI t em1: Add( oMenuI t em3 )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L


TMENUBAR()

E Descrio: Classe de objetos visuais do tipo controle - Barra de Menu.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New([oWnd])

E Parmetros:

oWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.

E Aparncia:




- 431 -

ADVPL Completo


Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
/ / Mont a umMenu Suspenso
TMenuBar : = TMenuBar ( ) : New( oDl g)
TMenuBar : nCl r Pane : = RGB( 183, 208, 248) / / Cor de f undo do Menu
oTMenu1 : = TMenu( ) : New( 0, 0, 0, 0, . T. , , oDl g)
oTMenu2 : = TMenu( ) : New( 0, 0, 0, 0, . T. , , oDl g)
TMenuBar : AddI t em( ' Ar qui vo' , oTMenu1, . T. )
TMenuBar : AddI t em( ' Rel at or i o' , oTMenu2, . T. )

/ / Cr i a I t ens do Menu
oTMenuI t em: = TMenuI t em( ) : New( oDl g, ' TMenuI t em01' , , , , ;
{| | Al er t ( ' TMenuI t em01' ) }, , ' AVGLBPAR1' , , , , , , , . T. )
oTMenu1: Add( oTMenuI t em)
oTMenu2: Add( oTMenuI t em)
oTMenuI t em: = TMenuI t em( ) : New( oDl g, ' TMenuI t em02' , , , , ;
{| | Al er t ( ' TMenuI t em02' ) }, , , , , , , , , . T. )
oTMenu1: Add( oTMenuI t em)
oTMenu2: Add( oTMenuI t em)

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

TMETER()

E Descrio: Classe de objetos visuais do tipo controle tMeter, a qual exibe uma
rgua (gauge) de processamento, descrevendo o andamento de um
processo atravs da exibio de uma barra horizontal.

E Propriedades:

nTotal
Numrico. Nmero total de passos at o preenchimento da
rgua de processo.
lPercentage
Lgico. Se .T. considera o passo de movimentao em
porcentagem.
nClrBar Numrico. Cor da barra de andamento.

E Construtor: New([anRow], [anCol], [abSetGet], [anTotal], [aoWnd], [anWidth],
[anHeight], [lPar8], [alPixel], [oPar10], [cPar11], [alNoPerc],
[anClrPane], [nPar14], [anClrBar], [nPar16], [lPar17])

E Parmetros:

anRow
Numrico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
abSetGet
Bloco de cdigo, opcional. Bloco de cdigo no formato {|u|
if( Pcount( )>0, <var>:= u, <var> ) } que o controle utiliza
para atualizar a varivel <var>. <var> deve ser tipo
numrico.
anTotal
Numrico, opcional. Numero total de passos at o
preenchimento da rgua de processo.

- 432 -

ADVPL Completo


aoWnd
Objeto, opcional. Janela ou controle onde o controle sera
criado.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
lPar8 Reservado.
alPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
oPar10 Reservado.
cPar11 Reservado.
alNoPerc
Lgico, opcional. Se .T. (padro) no considera os passos de
atualizao em porcentagem.
anClrPane Numrico, opcional. Cor de fundo do controle.
nPar14 Reservado.
anClrBar Numrico, opcional. Cor da barra de andamento.
nPar16 Reservado.
lPar17 Reservado.

E Mtodos auxiliares:

Set

O Descrio: Atualiza a posio da rgua de processamento.
O Sintaxe: Set( [nVal] )
O Parmetros:

nVal
Numrico, opcional. Novo valor da posio da rgua de
processamento.

O Retorno:

Nenhum -


E Aparncia:



- 433 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
STATI C l Runni ng: =. F. , l St op: =. F.
User Funct i on Test e( )
Local oDl g, oMet er , nMet er : =0, oBt n1, oBt n2
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 400, 400 TI TLE ' Test e' Pi xel
oMet er : = t Met er ( ) : New( 10, 10, {| u| i f ( Pcount ( ) >0, nMet er : =u, nMet er ) };
, 100, oDl g, 100, 16, , . T. ) / / cr i a a r gua
/ / bot o par a at i var andament o da r gua
@30, 10 BUTTON oBt n1 PROMPT ' Run ' OF oDl g PI XEL ACTI ON RunMet er ( oMet er )
@50, 10 BUTTON oBt n2 PROMPT ' St op' OF oDl g PI XEL ACTI ON l St op: =. T.
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L
STATI C Funct i on RunMet er ( oMet er )
I f l Runni ng
Ret ur n
Endi f
l Runni ng: = . T.

oMet er : Set ( 0)
/ / i ni ci a a r gua
Whi l e . T. . and. ! l St op
Sl eep( 1000) / / pr a 1 segundo
Pr ocessMessages( ) / / at ual i za a pi nt ur a da j anel a, pr ocessa mensagens do
wi ndows
nCur r ent : = Eval ( oMet er : bSet Get ) / / pega val or cor r ent e da r gua
nCur r ent +=10 / / at ual i za r gua

oMet er : Set ( nCur r ent )
i f nCur r ent ==oMet er : nTot al
Ret ur n
endi f
Enddo

l Runni ng: = . F.
l St op: = . F.
Ret ur n


- 434 -

ADVPL Completo



TMSGRAPHIC()

E Descrio: Classe de objetos visuais do tipo controle - Grfico.

E Propriedades:

l3D Lgico, opcional Grfico em 3D
lAxisVisib Lgico, opcional Mostra eixos do grfico

E Construtor: New([anRow], [anCol], [aoWnd], [aoFont], [anClrText],
[anClrBack], [anWidth], [anHeight])

E Parmetros:

anRow Numrico, opcional. Coordenada vertical em pixels.
anCol Numrico, opcional. Coordenada horizontal em pixels.
aoWnd
Objeto, opcional. Janela ou controle onde a imagem dever
ser criada.
aoFont Objeto, opcional. Fonte utilizada no grfico.
anClrText Caractere, Nome do resource.
anClrBack Caractere, Nome do arquivo.
anWidth Lgico, opcional. Exibe borda
anHeight
Objeto, opcional. Janela ou controle onde a imagem dever
ser criada.

E Mtodos auxiliares:

CreateSerie

O Descrio: Mtodo para criao de uma serie para o grfico.
O Sintaxe: CreateSerie( [nSerieType], [cLegend], [nDecimals],
[lShowValues] )
O Parmetros:

nSerieType
Numrico. Indica o tipo do grfico
GRP_LINE 1
GRP_AREA 2
GRP_POINT 3
GRP_BAR 4
GRP_PIE 10
cLegend Caractere, opcional. Legenda da srie.
nDecimals
Numrico, opcional. Numero de casas decimais dos
valores.
lShowValues Lgico, opcional. Mostra valores

O Retorno:

Numrico Numero da srie criada.


- 435 -

ADVPL Completo



Add

O Descrio: Mtodo para adicionar um item ao grfico.
O Sintaxe: Add(nSerie, nVal, cLegend, nColor )
O Parmetros:

nSerie Numrico. Serie a ser inserido o item.
nVal Numrico. Valor do item.
cLegend Caractere. Legenda do item.
nColor Numrico, Cor do item.

O Retorno:

Nenhum -

SetGradiente

O Descrio: Mtodo para setar o fundo do grfico com uma cor gradiente
em determinada direo.
O Sintaxe: SetGradient(nDirection, StartColor, EndColor )
O Parmetros:

nDirection
Numrico. Indica direo do gradiente.
GDTOPBOTTOM 1
GDBOTTOMTOP 2
GDLEFTRIGHT 3
GDRIGHTLEFT 4
StartColor Numrico. Cor inicial.
EndColor Numrico. Cor final.

O Retorno:

Nenhum -

SetTitle

O Descrio: Define o titulo do grfico.
O Sintaxe: SetTitle(cTitle, cTitle2, Color, Aligment, lFoot)
O Parmetros:

cTitle Caractere. Primeiro titulo.
cTitle2 Caractere. Segundo titulo.
Color Numrico. Cor do titulo.
Aligment
Numrico. Alinhamento do titulo.
A_LEFTJUST 1
A_RIGHTJUS 2
A_CENTER 3
lFoot Lgico. Indica titulo no rodap do grfico.

O Retorno:

Nenhum -


- 436 -

ADVPL Completo



SetLegenProp

O Descrio: Mtodo para setar propriedades da legenda.
O Sintaxe: SetLegenProp(Align, Color, Style, Visible )
O Parmetros:

Align
Numerico. Alinhamento da legenda.
GRP_SCRTOP 1
GRP_SCRLEFT 2
GRP_SCRBOTTOM 3
GRP_SCRRIGHT 4
Color Numrico. Cor da legenda.
Style
Numrico. Estilo da legenda.
GRP_AUTO 1
GRP_SERIES 2
GRP_VALUES 3
GRPLASTVAL 4
Visible Lgico. Indica de o titulo ser visvel.

O Retorno:

Nenhum -


SetMargins

O Descrio: Mtodo para setar as margens superior, inferior e laterais do
grfico.
O Sintaxe: SetMargins(nTop, nLeft, nBottom, nRight )
O Parmetros:

nTop Numrico. Posio em relao ao topo do grfico.
nLeft Numrico. Posio em relao a esquerda.
nBottom Numrico. Posio em relao ao rodap.
nRight Numrico. Posio em relao a direita.

O Retorno:

Nenhum -

SetRangeY

O Descrio: Define a escala dos valores do eixo Y
O Sintaxe: SetRangeY (min, max, delta).
O Parmetros:

Min valor inicial
Max valor final
delta
intervalo entre os valores [ opcional, calculado
automaticamente ]

O Retorno:

Nenhum -

- 437 -

ADVPL Completo



SaveToBMP

O Descrio: Mtodo para salvar o grfico atual em um bitmap no
server(Obsoleto, ver SaveToImage).
O Sintaxe: SaveToBMP(BmpName, PathToWrite )
O Parmetros:

BmpName Caractere, Nome do da figura a ser salva.
PathToWrite Caractere. Path no Server onde ser salva a figura.

O Retorno:

Lgico Indica se a imagem foi salva corretamente.


SaveToImage

O Descrio: Mtodo para salvar o grfico atual em um formato de pr-
determinado no server.
O Sintaxe: SaveToImage(BmpName, PathToWrite, TypeImage)
O Parmetros:

BmpName Caractere, Nome do da figura a ser salva.
PathToWrite Caractere. Path no Server onde ser salva a figura.
TypeImage
Caractere. Tipo da Figura (Default 'JPEG')
Tipos suportados: JPEG, PNG, BMP

O Retorno:

Lgico Indica se a imagem foi salva corretamente.

DelSerie

O Descrio: Mtodo para deletar uma srie do grafico.
O Sintaxe: DelSerie ( nSerie )
O Parmetros:

nSerie Numrico. Serie a ser deletada.

O Retorno:

Lgico Indica se a sria foi removida do grfico

ZoomIn

O Descrio: Mtodo para efetuar zoom interno ( + ).
O Sintaxe: ZoomIn()
O Parmetros:

Nenhum -

O Retorno:

Nenhum -

- 438 -

ADVPL Completo



ZoomOut

O Descrio: Mtodo para efetuar zoom externo ( - ).
O Sintaxe: ZoomOut()
O Parmetros:

Nenhum -

O Retorno:

Nenhum -

E Aparncia:
















- 439 -

ADVPL Completo



Exemplo:

#i ncl ude ' MSGRAPHI . CH'
User Funct i on t MsGr aphi cTst ( )

DEFI NE MSDI ALOG oDl g TI TLE ' ' FROM 0, 0 TO 250, 330 PI XEL

@001, 001 MSGRAPHI C oGr aphi c SI ZE 120, 120 OF oDl g

oGr aphi c: Set Ti t l e( ' Ti t ul o do Gr af i co' , DTOC( Dat e( ) ) , CLR_BLACK,
A_LEFTJ UST, GRP_TI TLE )
oGr aphi c: Set Mar gi ns( 2, 6, 6, 6)
oGr aphi c: Set Gr adi ent ( GDBOTTOMTOP, CLR_HGRAY, CLR_WHI TE)
oGr aphi c: Set LegenPr op( GRP_SCRRI GHT, CLR_HGRAY, GRP_AUTO, . T. )

nSer i e : = oGr aphi c: Cr eat eSer i e( 10 )
oGr aphi c: l 3D : = . T. / / Gr af i co em3D
oGr aphi c: l Axi sVi si b : = . T. / / Most r a os ei xos

/ / I t ens do Gr af i co
oGr aphi c: Add( nSer i e, 200, ' I t em01' , CLR_BLUE )
oGr aphi c: Add( nSer i e, 180, ' I t em02' , CLR_RED )
oGr aphi c: Add( nSer i e, 210, ' I t em03' , CLR_BLUE )
oGr aphi c: Add( nSer i e, 110, ' I t em04' , CLR_BLUE )
oGr aphi c: Add( nSer i e, 100, ' I t em05' , CLR_BLUE )
oGr aphi c: Add( nSer i e, 080, ' I t em06' , CLR_BLUE )
oGr aphi c: Add( nSer i e, 110, ' I t em07' , CLR_BLUE )

@001, 124 BUTTON ' Sal va Gr af i co' SI ZE 40, 14 OF oDl g PI XEL ACTI ON
oGr aphi c: SaveToBMP( ' Exempl o. bmp' , ' \ web\ ' )
@020, 124 BUTTON ' ZoomI N' SI ZE 40, 14 OF oDl g PI XEL ACTI ON
oGr aphi c: ZoomI n( )
@040, 124 BUTTON ' ZoomOUT' SI ZE 40, 14 OF oDl g PI XEL ACTI ON
oGr aphi c: ZoomOut ( )
@060, 124 BUTTON ' Del et a Ser i e' SI ZE 40, 14 OF oDl g PI XEL ACTI ON
oGr aphi c: Del Ser i e( nSer i e)

ACTI VATE MSDI ALOG oDl g CENTERED

Ret ur n









- 440 -

ADVPL Completo



TMSGBAR()

E Descrio: Classe de objetos visuais do tipo controle - Rodap.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New ([oWnd], [cPrompt,], [lCentered], [lClock], [lDate], [lKbd],
[nClrFore], [nClrBack], [oFont], [lInset], [imageName])

E Parmetros:

oWnd
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
cPrompt Caracter. Descrio na Barra
lCentered Logico. Define centralizao do texto
lClock Nao utilizado
lDate Nao utilizado
lKbd Nao utilizado
nClrFore Numerico, opcional. Define cor da fonte da barra
nClrBack Numerico, opcional. Define cor do fundo da barra
oFont
Objeto, opcional. Objeto tipo tFont com propriedades da
fonte utilizada para o ttulo do boto.
lInset Nao utilizado
imageName Caracter, opcional. Insere figura lateral esquerda

E Mtodos auxiliares:

AddItem

O Descrio: Mtodo insere um subitem no rodap
O Sintaxe: AddItem( oTMsgItem )
O Parmetros:

oTMsgItem
Objeto do tipo TMsgItem que ser inserido como subitem
do rodap.

O Retorno:

Nenhum -


- 441 -

ADVPL Completo


SetMsg

O Descrio: Define a descrio da barra de rodap
O Sintaxe: SetMsg(cTexto )
O Parmetros:

cTexto Texto a ser inserido na barra

O Retorno:

Nenhum -

E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
oTMsgBar : = TMsgBar ( ) : New( oDl g, ' MP10 | Tot vs/ Sof t war e' ,
. F. , . F. , . F. , . F. , RGB( 116, 116, 116) , , , . F. )
oTMsgI t em1 : = TMsgI t em( ) : New( oTMsgBar , ' oTMsgI t em1' , 204, , , , . T. ,
{| | })
oTMsgI t em2 : = TMsgI t em( ) : New( oTMsgBar , ' oTMsgI t em2' , 040, , , , . T. ,
{| | Al er t ( ' I t emda Bar r a Aci onado' ) } )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

- 442 -

ADVPL Completo


TMSGITEM()

E Descrio: Classe de objetos visuais do tipo controle utilizado para adicionar
mensagens em outros objetos, como barras e menus.

E Propriedades:

- Herdadas das classes superiores

E Construtor: New( <oMsgBar>, <cMsg>, <nSize>, <oFont>, <nClrFore>,
<nClrBack>, lEnable , [<{bAction}>], cImagem )

E Parmetros:

oMsgBar Objeto do tipo barra ou menu no qual ser adicionado o item
de mensagem.
cMsg Mensagem que ser exibida pelo objeto
nSize Tamanho da fonte do texto
oFont Fonte do texto
nClrFore Cor da fonte do texto
nClrBack Cor do fundo do objeto
lEnable Indica se o objeto est habilitado.
bAction Bloco de cdigo executado quando o objeto ativado
cImagem Imagem a ser vinculada no objeto.

E Aparncia:



- 443 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'
oTMsgBar : = TMsgBar ( ) : New( oDl g, ' MP10 | Tot vs/ Sof t war e' ,
. F. , . F. , . F. , . F. , RGB( 116, 116, 116) , , , . F. )
oTMsgI t em1 : = TMsgI t em( ) : New( oTMsgBar , ' oTMsgI t em1' , 204, , , , . T. ,
{| | })
oTMsgI t em2 : = TMsgI t em( ) : New( oTMsgBar , ' oTMsgI t em2' , 040, , , , . T. ,
{| | Al er t ( ' I t emda Bar r a Aci onado' ) } )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

.


TMULTIBTN()

E Descrio: Classe de objetos visuais do tipo controle - Mltiplos botes.

E Propriedades:

bAction
Bloco de cdigo. Executado ao precionar o boto esquerdo
do mouse.

E Construtor: New([nRow], [nCol], [cTitle], [oWnd], [bAction], [nWidth],
[nHeight], [imgName], [ori], [cMsg], [btnPerLine])

E Parmetros:

nRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
nCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres
oWnd
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
bAction
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.
nWidth Numrico, opcional. Largura em pixels
nHeigth Numrico, opcional. Altura em pixels.
imgName
Caracter. Imagem a ser inserida ao lado esquerdo do
componente
ori Numerico, opcional. Orientao dos botes.
cMsg Caracter, Opicional. Descrio do tipo tooltip(hint) do item
btnPerLine Numerico, opcional. Quantidade de botes por linha


- 444 -

ADVPL Completo



E Mtodos auxiliares:

LoadImage
O Descrio: Muda a figura a esquerda do componente
O Sintaxe: LoadImage(cImagem)
O Parmetros:

cImagem Nome da imagem que ser carregada pelo objeto

O Retorno:

Nenhum -

AddButton
O Descrio: Insere um boto
O Sintaxe: AddButton(cTexto)
O Parmetros:

cTexto Texto para exibio no boto inserido.

O Retorno:

Nenhum -

SetTitle
O Descrio: Muda o titulo e o numero de botes por linha
O Sintaxe: SetTitle(cTexto, nBotoes)
O Parmetros:

cTexto Texto que ser atribudo aos botes
nBotoes Nmero de botes por linha

O Retorno:

Nenhum -

SetFonts
O Descrio: Muda a font do titulo e dos botes
O Sintaxe: SetTitle(cFontTit, nSizeTit, nFontBut, nSizeBut)
O Parmetros:

cFontTit Nome da fonte que ser atribuda ao ttulo
nSizeTit Tamanho da fonte do ttulo
nFontBut Nome da fonte que ser atribuda aos botes
nSizeBut Tamanho da fonte dos botes

O Retorno:

Nenhum -


- 445 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'

ot Mul t i Bt n : = t Mul t i Bt n( ) : New( 01, 01, ' cTi t l e1' , oDl g, ;
{| x| Al er t ( St r ( x) ) }, 200, 150, ' af ast ament o' , 0, ' cTi t l e' , 3
)

ot Mul t i Bt n: Set Font s( ' Tahoma' , 16, ' Tahoma' , 10)
ot Mul t i Bt n: AddBut t on( ' bt n01' )
ot Mul t i Bt n: AddBut t on( ' bt n02' )
ot Mul t i Bt n: AddBut t on( ' bt n04' )
ot Mul t i Bt n: AddBut t on( ' bt n05' )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L
.

- 446 -

ADVPL Completo



TMULTIGET()

E Descrio: Classe de objetos visuais do tipo controle - edio de texto de
mltiplas linhas.

E Propriedades:

lWordWrap Lgico. Se .T., faz quebra automtica de linhas.

E Construtor: New([anRow], [anCol], [abSetGet], [aoWnd], [anWidth],
[anHeight], [aoFont], [alHScroll], [anClrFore], [anClrBack], [oPar11],
[alPixel], [cPar13], [lPar14], [abWhen], [lPar16], [lPar17],
[alReadOnly], [abValid], [bPar20], [lPar21], [alNoBorder],
[alNoVScroll])

E Parmetros:

Parmetro
anRow
Numrico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
abSetGet
Bloco de cdigo, opcional. Bloco de cdigo no formato {|u|
if( Pcount( )>0, <var>:= u, <var> ) } que o controle utiliza
para atualizar a varivel <var>. <var> deve ser tipo
caracter.
aoWnd
Objeto, opcional. Janela ou controle onde o controle ser
criado.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
aoFont
Objeto, opcional. Objeto tipo tFont utilizado para definir as
caractersticas da fonte utilizada para exibir o contedo do
controle.
alHScroll
Lgico, opcional. Se .T., habilita barra de rolagem
horizontal.
anClrFore Numrico, opcional. Cor de fundo do controle.
anClrBack Numrico, opcional. Cor do texto do controle.
oPar11 Reservado.
alPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
cPar13 Reservado.
lPar14 Reservado.
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lPar16 Reservado.
lPar17 Reservado.
alReadOnly Lgico, opcional. Se .T. o controle so permitira leitura.
abValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
bPar20 Reservado.
lPar21 Reservado.

- 447 -

ADVPL Completo


alNoBorder Lgico, opcional. Se .T. cria controle sem borda.
alNoVScroll Lgico, opcional. Se .T., habilita barra de rolagem vertical.

E Mtodos auxiliares:

EnableVScroll

O Descrio: Habilita a barra de rolagem vertical.
O Sintaxe: EnableVScroll( lEnable )
O Parmetros:

lEnable
Lgico, obrigatrio. Se .T. habilita se .F. desabilita a barra
de rolagem.

O Retorno:

Nenhum -

EnableHScroll

O Descrio: Habilita a barra de rolagem horizontal.
O Sintaxe: EnableHScroll( lEnable )
O Parmetros:

lEnable
Lgico, obrigatrio. Se .T. habilita se .F. desabilita a barra
de rolagem.

O Retorno:

Nenhum -


E Aparncia:



- 448 -

ADVPL Completo



Exemplo:

#i ncl ude pr ot heus. ch
User Funct i on Test e( )

Local oDl g, oMemo, cMemo: = space( 50)

DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 400, 400 PI XEL TI TLE My t est

oMemo: = t Mul t i get ( ) : New( 10, 10, {| u| i f ( Pcount ( ) >0, cMemo: =u, cMemo) };
, oDl g, 100, 100, , , , , , . T. )

@200, 10 BUTTON oBt n PROMPT Fecha OF oDl g PI XEL ACTI ON oDl g: End( )

ACTI VATE MSDI ALOG oDl g CENTERED

MsgSt op( cMemo)

Ret ur n NI L


TOLECONTAINER()

E Descrio: Classe de objetos visuais do tipo controle, a qual permite a criao
de um boto vinculado a um objeto OLE.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New([nRow], [nCol], [nWidth], [nHeight], [oWnd], [lAutoActivate],
[cFileName])

E Parmetros:

nRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
nCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
nWidth Numrico, opcional. Largura do boto em pixels
nHeight Numrico, opcional. Altura do boto em pixels.

oWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
lAutoActivate Nao utilizado
cFileName Caracter. Endereo do arquivo Ole a ser aberto


- 449 -

ADVPL Completo



E Mtodos auxiliares:

OpenFromFile

O Descrio: Abre arquivo do tipo OLE.
O Sintaxe: New([cFileName, [lAsIcon], [allowInPlace])
O Parmetros:

cFileName Caracter. Endereo do arquivo Ole a ser aberto
lAsIcon Logico. Define objeto Ole como Icone
allowInPlace Logico opcional. Permite abertura de arquivo local

O Retorno:

Nenhum -


E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'

/ / TOl eCont ai ner
oTOl eCont ai ner : = TOl eCont ai ner ( ) : New(
05, 05, 306, 134, oDl g, . T. , ' C: \ Li xo\ Test eRemot e. doc' )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L


- 450 -

ADVPL Completo


TPAGEVIEW()

E Descrio: Classe de objetos visuais do tipo controle, que permite a
visualizao de arquivos no formato gerado pelo spool de impresso
do Protheus.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New([nCol], [nRow], [nWidth], [nHeight], [oPrinter], [oWnd],
[nPageWidth], [nPageHeight])

E Parmetros:

nCol
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
nRow
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres
nWidth Numrico, opcional. Largura em pixels
nHeigth Numrico, opcional. Altura em pixels.

oPrinter Objeto do tipo TMsPrinter()
oWnd
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
nPageWidth Numrico, opcional. Largura em pixels da pagina
nPageHeight Numrico, opcional. Altura em pixels da pagina

E Mtodos auxiliares:

PageSize

O Descrio: Define o tamanho da pagina.
O Sintaxe: AddItem(nLargura, nAltura)
O Parmetros:

nLargura Lagura da pgina
nAltura Altura da pgina

O Retorno:

Nenhum -

PrintPage

O Descrio: Imprime uma determinada pgina.
O Sintaxe: PrintPage(nNrPagina)
O Parmetros:

nNrPagina Pgina que ser impressa

O Retorno:

Nenhum -


- 451 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'

/ / TPageVi ew
__Rel Di r : = WSPLRel Di r ( )
oPr i nt er : = TMsPr i nt er ( ) : New( )
oPr i nt er : Set Fi l e( __RELDI R + ' mat r 020. pr t ' , . F. )
oTPageVi ew : = TPageVi ew( ) : New(
0, 0, 500, 300, oPr i nt er , oTFol der 2: aDi al ogs[ 07] , 550, 350 )
oTPageVi ew: Reset ( 400, 400)
oTPageVi ew: Pr i nt Page( 1)
oTPageVi ew: Show( )
oTPageVi ew: nZoom: = 150

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

- 452 -

ADVPL Completo



TPANEL()

E Descrio: Classe de objetos visuais do tipo controle tPanel, a qual permite
criar um painel esttico, onde podem ser criados outros controles
com o objetivo de organizar ou agrupar componentes visuais.

E Propriedades:

- Herdadas das classes superiores

E Construtor: New([anRow], [anCol], [acText], [aoWnd], [aoFont], [alCentered],
[lPar6], [anClrText], [anClrBack], [anWidth], [anHeight], [alLowered],
[alRaised])

E Parmetros:

anRow Numrico, opcional. Coordenada vertical em pixels.
anCol Numrico, opcional. Coordenada horizontal em pixels.
acText Caractere, opcional. Texto a ser exibido ao fundo.
aoWnd
Objeto, opcional. Janela ou controle onde ser criado o
objeto.
alCentered
Lgico, opcional. Se .T. exibe o texto de ttulo ao centro do
controle.
lPar6 Reservado.
anClrText Numrico, opcional. Cor do texto do controle.
anClrBack Numrico, opcional. Cor do fundo do controle.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
alLowered
Lgico, opcional. Se .T. exibe o painel rebaixado em relao
ao controle de fundo.
alRaised
Lgico, opcional. Se .T. exibe a borda do controle rebaixada
em relao ao controle de fundo.

E Aparncia:



- 453 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g, oBut t on, oCombo, cCombo, cGet 1: =' Test e'
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 300, 300 PI XEL TI TLE ' Meu t est '
oPanel : = t Panel ( ) : New( 10, 10, , oDl g, , , , , CLR_BLUE, 100, 100) / / cr i a o
pai nel
@10, 10 BUTTON oBt n1 PROMPT ' hi de' OF oPanel ACTI ON oPanel : Hi de( ) / / cr i a
bot o sobr e o pai nel
@200, 10 BUTTON oBt n2 PROMPT ' show' OF oDl g ACTI ON oPanel : Show( ) / / cr i a
bot o f or a o pai nel
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n


TRADMENU()

E Descrio: Classe de objetos visuais do tipo controle TRadMenu, a qual
permite criar um controle visual no formato Radio Button.

E Propriedades:

bChange Bloco de cdigo disparado na mudana de item selecionado
bSetGet
Bloco de cdigo disparado na mudana de item selecionado,
responsavel pela mudana de valor da variavel numerica
que indica o item selecionado.
bWhen Bloco de cdigo que permite ou no a alterao do objeto
bValid Bloco de cdigo executado na saida do objeto.

E Construtor: New([nRow], [nCol], [aItems], [bSetGet], [oDlg], [aHelpIds],
[bChange], [nClrText], [nClrPane], [cMsg], [lUpdate], [bWhen],
[nWidth], [nHeight], [bValid], [lDesign], [l3d], [lPixel])

E Parmetros:


nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
aItems Vetor, elementos do Radio
bSetGet Code-block, Responsvel pela setagem de valor
oDlg
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
aHelpIds No utilizado
bChange
Bloco de cdigo, opcional. Executado quando o item
selecionado alterado.
nClrText Numrico, opcional. Cor do texto da janela.
nClrPane Numrico, opcional. Cor de fundo da janela.
cMsg
Caracter, opcional. Mesamge ao posicionar o mouse sobre o
objeto
lUpdate No utilizado
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.

- 454 -

ADVPL Completo


nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
bValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
lDesign No utilizado
l3d No utilizado
lPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.


E Mtodos auxiliares:

SetOption

O Descrio: Seleciona um item.
O Sintaxe: SetOption(nItem)
O Parmetros:

nItem Item que ser selecionado

O Retorno:

Nenhum -

EnableItem

O Descrio: Habilita/Desabilita um Item
O Sintaxe: EnableItem(nItem, lStatus)
O Parmetros:

nItem Item que ser modificado
lStatus Status que ser atribudo ( .T. Enable , .F. Disable)

O Retorno:

Nenhum -

Enable

O Descrio: Habilita um item.
O Sintaxe: Enable(nItem)
O Parmetros:

nItem Item que ser habilitado

O Retorno:

Nenhum -


- 455 -

ADVPL Completo



Disable

O Descrio: Desabilita um item
O Sintaxe: Disable(nItem)
O Parmetros:

nItem Item que ser desabilitado

O Retorno:

Nenhum -

E Aparncia:















- 456 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
user f unct i on TRadMenu( )
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 270, 400 PI XEL TI TLE ' Exempl o da
TCBr owse'
/ / Var i avel numer i ca que guar da o i t emsel eci onado do Radi o
nRadi o : = 1
/ / Cr i a o Obj et o
oRadi o : = TRadMenu( ) : New
( 01, 01, {' I t em01' , ' I t em02' , ' I t em03' , ' I t em04' , ' I t em05' }, ;

, oDl g, , , , , , , , 200, 200, , , , . T. )
/ / Set a Event os
oRadi o: bchange : = {| | Al er t ( ' bChange' ) }
oRadi o: bSet Get : = {| u| I i f ( PCount ( ) ==0, nRadi o, nRadi o: =u) }
oRadi o: bWhen : = {| | . T. }
oRadi o: bVal i d : = {| | Al er t ( ' bVal i d' ) }
/ / Pr i nci pai s comandos
oBt n : = TBut t on( ) : New( 060, 001, ' Ret or na i t emsel eci onado' , ;
oDl g, {| | Al er t ( nRadi o) }, 120,
010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 070, 001, ' Set Opt i on( 2) ( Set a um
i t em) ' , ;
oDl g, {| | oRadi o: Set Opt i on( 2) }, 120,
010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 080, 001, ' Enabl eI t em( 2, . T. ) ( Habi l i t a
i t em) ' , ;
oDl g, {| | oRadi o: Enabl eI t em( 2, . T. ) }, 120,
010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 090, 001, ' Enabl eI t em( 2, . F. )
( Desabi l i t a i t em) ' , ;
oDl g, {| | oRadi o: Enabl eI t em( 2, . F. ) }, 120,
010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 100, 001, ' Enabl e( 3) ( Habi l i t a
i t em) ' , ;
oDl g, {| | oRadi o: Enabl e( 3) }, 120,
010, , , . F. , . T. , . F. , , . F. , , , . F. )
oBt n : = TBut t on( ) : New( 110, 001, ' Di sabl e( 3) ( Desabi l i t a
i t em) ' , ;
oDl g, {| | oRadi o: Di sabl e( 3) }, 120,
010, , , . F. , . T. , . F. , , . F. , , , . F. )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n


- 457 -

ADVPL Completo



TSBROWSE()

E Descrio: Classe de objetos visuais do tipo controle TSBrowse, a qual
permite criar um controle visual do tipo Grid.

E Propriedades:

+ Herdadas da classe superior
nAt Linha atualmente selecionada / posicionada no objeto
nLen Nmero total de linhas do objeto

E Construtor: New([nRow], [nCol], [nWidth], [nHeight], [oWnd], [bChange],
[nHWidth], [oFont], [nLines])

E Parmetros:

nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
oWnd
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
bChange Bloco de cdigo, na mudana de linha
nHWidth No utilizado
oFont Objeto, opcional. Fonte
nLines Nmerico. Nr de linhas por clula

E Mtodos auxiliares:

GoUp

O Descrio: Salta uma linha para cima.
O Sintaxe: GoUp( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoDown

O Descrio: Salta uma linha para baixo.
O Sintaxe: GoDown( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 458 -

ADVPL Completo



GoTop

O Descrio: Salta para primeira linha.
O Sintaxe: GoTop( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoBottom

O Descrio: Salta para ultima linha.
O Sintaxe: GoBottom( )
O Parmetros:

Nenhum -

O Retorno:

Nil

RowCount

O Descrio: Retorna numero de linhas visiveis.
O Sintaxe: RowCount( )
O Parmetros:

Nenhum -

O Retorno:

Nil


LEditCell

O Descrio: Edita o valor de uma coluna.
O Sintaxe: lEditCell( aList, oList, cPicture, nCol )
O Parmetros:

aList Vetor da Browse onde esto os valores da mesma
oList Objeto, Browse a ser editado
cPicture Caracter, picture necessria para edio do campo
nCol Numrico, coluna a ser editada.

O Retorno:

Nil


- 459 -

ADVPL Completo



E Aparncia:



















- 460 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 302, 402 PI XEL TI TLE ' Exempl o'

aBr owse : = {{' CLI ENTE 001' , ' RUA CLI ENTE 001' , ' BAI RRO CLI ENTE
001' }, ;
{' CLI ENTE 001' , ' RUA CLI ENTE 001' , ' BAI RRO CLI ENTE
001' }, ;
{' CLI ENTE 001' , ' RUA CLI ENTE 001' , ' BAI RRO CLI ENTE 001' }
}
oBr owse : = TSBr owse( ) : New( 01, 01, 245, 150, oDl g, , 16, , 5)
nFor eCor : = CLR_GRAY
nBackCor : = CLR_WHI TE
oBr owse: AddCol umn( TcCol umn( ) : New( ' Nome' , , , {| | nFor eCor }, {| |
nBackCor }) )
oBr owse: AddCol umn( TcCol umn( ) : New( ' Ender eo' , , , {| | nFor eCor }, {| |
nBackCor }) )
oBr owse: AddCol umn( TcCol umn( ) : New( ' Bai r r o' , , , {| | nFor eCor }, {| |
nBackCor }) )
oBr owse: Set Ar r ay( aBr owse)

/ / Pr i nci pai s commandos
TBut t on( ) : New( 160, 001, ' GoUp( ) ' , oDl g, {| | oBr owse: GoUp( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 170, 001, ' GoDown( ) ' , oDl g, {| | oBr owse: GoDown( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 180, 001, ' GoTop( ) ' , oDl g, {| | oBr owse: GoTop( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 190, 001, ' GoBot t om( ) ' , oDl g, {| | oBr owse: GoBot t om( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 160, 060, ' nAt ( Li nha sel eci onada) ' , oDl g, ;
{| | Al er t ( oBr owse: nAt ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 170, 060, ' nRowCount ( Nr de l i nhas vi si vei s) ' , oDl g, ;
{| | Al er t ( oBr owse: nRowCount ( ) ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 180, 060, ' nLen ( Numer o t ot al de l i nhas) ' , oDl g, ;
{| | Al er t ( oBr owse: nLen) }, 80, 10, , , , . T. )
TBut t on( ) : New( 190, 060, ' l Edi t Cel l ( Edi t a a cel ul a) ' , oDl g, ;
{| | l Edi t Cel l ( @aBr owse, oBr owse, ' @! ' , 3)
}, 40, 10, , , , . T. )


ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

.

- 461 -

ADVPL Completo



TSAY()

E Descrio: Classe de objetos visuais do tipo controle tSay, a qual exibe o
contedo de texto esttico sobre uma janela ou controle
previamente definidos.

E Propriedades:

lWordWrap
Lgico. Se .T. quebra o texto em vrias linhas de maneira a
enquadrar o contedo na rea determinada para o controle,
sendo o padro .F.
lTransparent
Lgico. Se .T. a cor de fundo do controle ignorada
assumindo o contedo ou cor do controle ou janela ao
fundo, sendo o padro .T.

E Construtor: New([anRow], [anCol], [abText], [aoWnd], [acPicture], [aoFont],
[lPar7], [lPar8], [lPar9], [alPixels], [anClrText], [anClrBack],
[anWidth], [anHeight], [lPar15], [lPar16], [lPar17], [lPar18], [lPar19])

E Parmetros:

anRow
Numrico, opcional. Coordenada vertical em pixels ou
caracteres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
abText
Codeblock, opcional. Quando executado deve retornar uma
cadeia de caracteres a ser exibida.
aoWnd
Objeto, opcional. Janela ou dilogo onde o controle ser
criado.
acPicture
Caractere, opcional. Picture de formatao do contedo a
ser exibido.
aoFont
Objeto, opcional. Objeto tipo tFont para configurao do tipo
de fonte que ser utilizado para exibir o contedo.
lPar7 Reservado.
lPar8 Reservado.
lPar9 Reservado.
alPixels
Lgico, opcional. Se .T. considera coordenadas passadas em
pixels se .F., padro, considera as coordenadas passadas em
caracteres.
anClrText Numrico, opcional. Cor do contedo do controle.
anClrBack Numrico, opcional. Cor do fundo do controle.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
lPar15 Reservado.
lPar16 Reservado.
lPar17 Reservado.
lPar18 Reservado.
lPar19 Reservado.


- 462 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g, oBut t on, oCombo, cCombo, cGet 1: =' Test e'
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 300, 300 PI XEL TI TLE ' Meu t est '
oSay: = t Say( ) : New( 01, 01, {| | ' par a exi bi r ' }, oDl g, , , , ;
, , . T. , CLR_RED, CLR_WHI TE, 100, 20)
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n













- 463 -

ADVPL Completo



TSCROLLBOX()

E Descrio: Classe de objetos visuais do tipo controle tScrollbox, a qual
permite criar um painel com scroll deslizantes nas laterais
(horizontais e verticais) do controle.

E Propriedades:

- Herdadas das classes superiores

E Construtor: New([aoWnd], [anTop], [anLeft], [anHeight], [anWidth],
[alVertical], [alHorizontal], [alBorder])

E Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde o controle ser
criado.
anTop Numrico, opcional. Coordenada vertical em pixels.
anLeft Numrico, opcional. Coordenada horizontal em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
anWidth Numrico, opcional. Largura do controle em pixels.
alVertical Lgico, opcional. Se .T. exibe a barra de scroll vertical.
alHorizontal Lgico, opcional. Se .T. exibe a barra de scroll horizontal.
alBorder Lgico, opcional. Se .T. exibe a borda do controle.

E Aparncia:




- 464 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g, oScr , oGet 1, oGet 2, oGet 3
Local cGet 1, cGet 2, cGet 3
cGet 1: = Space( 10)
cGet 2: = Space( 10)
cGet 3: = Space( 10)
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 220, 220 PI XEL TI TLE ' Meu t est '
oScr : = TScr ol l Box( ) : New( oDl g, 10, 10, 100, 100, . T. , . T. , . T. ) / / cr i a cont r ol es
dent r o do scr ol l box
@10, 10 MSGET oGet 1 VAR cGet 1 SI ZE 100, 10 OF oScr PI XEL
@50, 10 MSGET oGet 2 VAR cGet 2 SI ZE 100, 10 OF oScr PI XEL
@150, 100 MSGET oGet 3 VAR cGet 3 SI ZE 100, 10 OF oScr PI XEL
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n


TSIMPLEEDITOR()

E Descrio: Classe de objetos visuais do tipo controle tSimpleEditor, a qual
permite criar um controle visual para edio de textos com recursos
simples, como o NotePad

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New([anRow], [anCol], [aoWnd], [anWidth], [anHeight],[ acText],
[alReadOnly])

E Parmetros:

anRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
aoWnd Janela ou controle onde o editor dever ser criado.
anWidth Numrico, opcional. Largura do editor em pixels.
anHeight Numrico, opcional. Altura do editor em pixels.
acText Texto, opcional. Inserido na inicializao do objeto.
alReadOnly Lgico, opcional. Permite ou no a edio do texto

E Mtodos auxiliares:

Create

O Descrio: Mtodo construtor opcional da classe.
O Sintaxe: Create( aoWnd )
O Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde o editor dever
ser criado.


- 465 -

ADVPL Completo


O Retorno:

Objeto Objeto do tipo TsimpleEditor.

Load

O Descrio: Carrega um texto para o editor.
O Sintaxe: Load( acTexto )
O Parmetros:

acTexto Texto. Texto que inicializar o editor.

O Retorno:

Nenhum -

TextBold

O Descrio: Texto em Negrito.
O Sintaxe: TextBold( alBold )
O Parmetros:

alBold
Lgico. Habilita ou Desabilita a sesso do texto como
Negrito.

O Retorno:

Nenhum -

TextUnderline

O Descrio: Texto Sublinhado.
O Sintaxe: TextUnderline( alUnderline )
O Parmetros:

alUnderline
Lgico. Habilita ou Desabilita a sesso do texto
Sublinhado.

O Retorno:

Nenhum -

TextItalic

O Descrio: Texto Itlico.
O Sintaxe: TextItalic( alItalic )
O Parmetros:

alItalic Lgico. Habilita ou Desabilita a sesso do texto Itlico.

O Retorno:

Nenhum -


- 466 -

ADVPL Completo



TextFamily

O Descrio: Famlia de fontes.
O Sintaxe: TextFamily( acFamily )
O Parmetros:

acFamily
Texto. Nome da famlia da fonte a ser usada na sesso do
texto.

O Retorno:

Nenhum -


TextSize

O Descrio: Tamanho da fonte.
O Sintaxe: TextSize( anSize )
O Parmetros:

anSize Numrico. Tamanho da fonte utilizada na sesso do texto.

O Retorno:

Nenhum -

TextStyle

O Descrio: Estilo do pargrafo.
O Sintaxe: TextStyle( anStyle )
O Parmetros:

anStyle
Numrico. Estilo do pargrafo a ser utilizada na sesso do
texto.

1 Normal
2 Disco (Bullet)
3 Circulo (Bullet)
4 Quadrado (Bullet)
5 Ordem decimal
6 Ordem alfanumrica minsculo
7 Ordem alfanumrica maisculo

O Retorno:

Nenhum -


- 467 -

ADVPL Completo



TextAlign

O Descrio: Alinhamento do texto.
O Sintaxe: TextAlign( anAlign )
O Parmetros:

anAlign
Numrico. Tipo do alinhamento do pargrafo.
1 Esquerda
2 Direita
3 Centralizado
4 Justificado

O Retorno:

Nenhum -

TextFormat

O Descrio: Formato do texto.
O Sintaxe: TextFormat( anFormat )
O Parmetros:

anFormat
Numrico. Formato do texto
1 Html
2 Plain Text

O Retorno:

Nenhum -

RetText

O Descrio: Retorna o texto em formato string.
O Sintaxe: RetText( void )
O Parmetros:

void Retorna uma string com o contedo do editor

O Retorno:

Nenhum -

RetTextSel

O Descrio: Retorna o texto selecionado em formato string..
O Sintaxe: RetText()
O Parmetros:

Nenhum -

O Retorno:

String Texto selecionado.


- 468 -

ADVPL Completo



TextStatus

O Descrio: Retorna um array com as propriedades do texto posicionado.
O Sintaxe: TextStatus()
O Parmetros:

Nenhum -

O Retorno:

Array
Retorna um array com as seguintes propriedades :

1 Lgico Negrito
2 Lgico Itlico
3 Lgico Sublinhado
4 Caracter RGB da cor
5 Caracter Tamanho da fonte
6 Caracter Fonte

E Aparncia:




- 469 -

ADVPL Completo



Exemplo:

#i ncl ude pr ot heus. ch


User Funct i on MyEdi t or ( )
Local oDl g, oEdi t or
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 500, 600 PI XEL TI TLE Meu Edi t or
/ / Usando o mt odo cr eat e
oEdi t : = t Si mpl eEdi t or ( ) : Cr eat e( oDl g )
oEdi t : nTop : = 10
oEdi t : nLef t : = 10
oEdi t : nWi dt h : = 600
oEdi t : nHei ght : = 500


/ / Usando o mt odo new
oEdi t : = t Si mpEdi t ( ) : New( 0, 0, oDl g, 500, 600 )


ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n Ni l


TSLIDER()

E Descrio: Classe de objetos visuais do tipo controle tSlider, a qual permite
criar um controle visual do tipo boto deslizante.

E Propriedades:

bChange
Bloco de cdigo. Executado toda vez que o valor alterado
retornando o novo valor.

E Construtor: New([anRow], [anCol], [aoWnd], [abChange], [anWidth],
[anHeight], [acMsg], [abWhen])

E Parmetros:

anRow Numrico, opcional. Coordenada vertical em pixels
anCol Numrico, opcional. Coordenada horizontal em pixels
aoWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
abChange
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for movimentado.
anWidth Numrico, opcional. Largura do boto em pixels.
anHeight Numrico, opcional. Altura do boto em pixels.
acMsg Caracter, opcional. Mensagem de hint do boto
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.

E Mtodos auxiliares:


- 470 -

ADVPL Completo


Create

O Descrio: Mtodo construtor da classe.
O Sintaxe: Create( aoWnd )
O Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde o boto dever
ser criado.

O Retorno:

Objeto Objeto do tipo TSlide criado.

setRange

O Descrio: Especifica a faixa de valores.
O Sintaxe: setRange( min, max )
O Parmetros:

Min Nmrico. Valor mnimo do boto.
Max Nmrico. Valor mximo do boto.

O Retorno:

Nenhum -

setMarks

O Descrio: Especifica o tipo de marcao do boto.
O Sintaxe: setMarks( nTipo )
O Parmetros:

nTipo
Nmrico. Tipo de marcao do boto.
1 -
Max
Nmrico. Valor mximo do boto.
0 Sem marcao
1 Acima (esquerda se vertical)
2 Abaixo (direita se vertical)
3 Ambos os lados

O Retorno:

Nenhum -


- 471 -

ADVPL Completo



setInterval

O Descrio: Especifica a distncia entre um marcador e outro.
O Sintaxe: setInterval( nInterval )
O Parmetros:

nInterval Nmrico. Valor entre os marcadores

O Retorno:

Nenhum -

setValue

O Descrio: Especifica um valor para o boto.
O Sintaxe: setValue( nVal )
O Parmetros:

nVal Nmrico. Valor do boto

O Retorno:

Nenhum -

setStep

O Descrio: Especifica o valor dos passos do boto.
O Sintaxe: setStep( nStep )
O Parmetros:

nStep Nmrico. Valor do passo do boto

O Retorno:

Nenhum -

setOrient

O Descrio: Especifica a orientao do boto, horizontal ou vertical.
O Sintaxe: setOrient( nOrient )
O Parmetros:

nOrient
Nmrico. Orientao do boto
0 Horizontal
1 Vertical

O Retorno:

Nenhum -


- 472 -

ADVPL Completo



E Aparncia:



Exemplo:

#i ncl ude pr ot heus. ch
#i ncl ude hbut t on. ch
User Funct i on Myt Sl i der ( )
Local oDl g, oSl i der
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 500, 600 PI XEL TI TLE Meu t Sl i der
/ / Usando o mt odo cr eat e
oSl i der : = t Sl i der ( ) : Cr eat e( oDl g )
oSl i der : nTop : = 100
oSl i der : nLef t : = 10
oSl i der : nWi dt h : = 100
oSl i der : nHei ght : = 30


/ / Usando o command
@100, 10 SLI DER oSl i der SI ZE 30, 100 OF oDl g MESSAGE ' t Sl i der '
ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n Ni l


TSPLITTER()

E Descrio: Classe de objetos visuais do tipo controle tSplitter, a qual permite
criar um controle visual do tipo divisor.

E Propriedades:

- Herdadas as classes superiores.

E Construtor: New( [anRow], [anCol], [aoWnd], [anWidth], [anHeight],
[anOrientation] )

E Parmetros:

anRow Numrico, opcional. Coordenada vertical
anCol Numrico, opcional. Coordenada horizontal
aoWnd
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
anWidth Numrico, opcional. Largura do objeto
anHeight Numrico, opcional. Altura do objeto
anOrientation
Numrico, opcional. Sentido no qual devero ser criado os
divisores.
0 Horizontal
1 Vertical


- 473 -

ADVPL Completo


E Mtodos auxiliares:

Create

O Descrio: Mtodo construtor da classe.
O Sintaxe: Create( aoWnd )
O Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.

O Retorno:

Objeto Objeto do tipo Tsplitter gerado.


setOrient

O Descrio: Especifica a orientao do divisor, horizontal ou vertical.
O Sintaxe: setOrient( nOrient )
O Parmetros:

nOrient
Nmrico. Orientao do boto
0 Horizontal
1 Vertical

O Retorno:

Nenhum -

setChildCollapse

O Descrio: Especifica se os elementos podem ser collapsibles.
O Sintaxe: setChildCollpse( lColl )
O Parmetros:

lColl Lgico. Ativa / Desativa

O Retorno:

Nenhum -


- 474 -

ADVPL Completo



setCollapse

O Descrio: Especifica o objeto que pode ser collapsible.
O Sintaxe: setCollapse( oObj, lColl )
O Parmetros:

oObj Objeto. Controle a ser collapsed
lColl Lgico. Ativa / Desativa

O Retorno:

Nenhum -

movToLast

O Descrio: Coloca o objeto como ultimo das divises.
O Sintaxe: movToLast( oObj )
O Parmetros:

oObj Objeto. Controle a posicionado

O Retorno:

Nenhum -

movToFirst

O Descrio: Coloca o objeto como primeiro das divises.
O Sintaxe: movToFirst( oObj )
O Parmetros:

oObj Objeto. Controle a ser posicionado

O Retorno:

Nenhum -

setOpaqueResize

O Descrio: Especifica se o resize deve ser opaco.
O Sintaxe: setOpaqueResize( lOpaq )
O Parmetros:

lOpaq Lgico. Ativa / Desativa

O Retorno:

Nenhum -


- 475 -

ADVPL Completo



setResizeMode

O Descrio: Especifica o mode de resize do objeto..
O Sintaxe: setResizeMode ( oObj, nMode )
O Parmetros:

oObj Objeto. Controle a ser resized
nMode
Numrico. Modo do resize
0 Stretch
1- KeepSize
2 FollowSizeHint
3 Auto

O Retorno:

Nenhum -


E Aparncia:














- 476 -

ADVPL Completo



Exemplo:

#i ncl ude pr ot heus. ch
#i ncl ude hbut t on. ch

User Funct i on Myt Spl i t t er ( )
Local oDl g, oSpl i t t er , oPanel 1, oPanel 2, oPanel 3


DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 500, 600 PI XEL TI TLE Meu t Spl i t t er

/ / Usando o mt odo cr eat e
oSpl i t t er : = t Spl i t t er ( ) : Cr eat e( oDl g )
@1, 1 MSPANEL oPanel 1 OF oSpl i t t er
@1, 2 MSPANEL oPanel 2 OF oSpl i t t er
@1, 3 MSPANEL oPanel 3 OF oSpl i t t er

/ / Usando o command
@1, 1 SPLI TTER oSpl i t t er SI ZE 100, 100 OF oDl g
@1, 1 MSPANEL oPanel 1 OF oSpl i t t er
@1, 2 MSPANEL oPanel 2 OF oSpl i t t er
@1, 3 MSPANEL oPanel 3 OF oSpl i t t er

ACTI VATE MSDI ALOG oDl g CENTERED

Ret ur n Ni l


TTABS()

E Descrio: Classe de objetos visuais do tipo controle TTabs, a qual permite
criar um controle visual do tipo pasta.

E Propriedades:

- Herdadas das classes superiores.

E Construtor: New([anTop], [anLeft], [aPrompts], [bAction], [oWnd], [nOption],
[nClrFore], [nClrBack], [lPixel], [lDesign], [nWidth], [nHeigth],
[cMsg])

E Parmetros:

anTop
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anLeft
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres
aPrompts Array, Titulo dos folders
bAction Bloco de codigo, Disparado na troca da aba.

oWnd
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
nOption Numrico, opcional. Folder selecionado
nClrFore Numrico, opcional. Cor de frente
nClrBack Numrico, opcional. Cor de fundo
lPixel Lgico, opcional. Utiliza coordenadas em pixel

- 477 -

ADVPL Completo


lDesign Lgico, opcional. NO USADO
nWidth Numrico, opcional. Largura em pixels
nHeigth Numrico, opcional. Altura em pixels.
cMsg Caractere, Mensagem de Hint


E Mtodos auxiliares:

AddItem

O Descrio: Adiciona uma aba na pasta
O Sintaxe: AddItem(cTtulo)
O Parmetros:

cTtulo Ttulo da aba que ser adicionada

O Retorno:

Nenhum -

SetOption

O Descrio: Seleciona a Aba
O Sintaxe: SetOption( nNrAba )
O Parmetros:

nNrAba
Nmero que identifica a posio da aba que ser
selecionada.

O Retorno:

Nenhum -


E Aparncia:





- 478 -

ADVPL Completo


Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 304, 504 PI XEL TI TLE ' Exempl o'

oTTabs : = TTabs( ) : New( 01, 01, {' Aba01' , ' Aba02' , ' Aba03' }, ;
{| | oPanel 01: LVI SI BLECONTROL: =( oTTabs: nOpt i on==1) }, ;
oDl g, , RGB( 255, 0, 0) , RGB( 255, 255, 0) , . T. , , 120, 120, )
oPanel 01 : = TPanel ( ) : New( 000, 000, ' ' , oTTabs, , , , , , 100, 100, , . T. )
oPanel 01: l Vi si bl eCont r ol : = . T.
oBt n01 : = TBut t on( ) : New( 01, 01, ' TBut t on01' , oPanel 01, ;
{| | oTTabs: Set Opt i on( 2) }, 037,
012, , , . F. , . T. , . F. , , . F. , , , . F. )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L


TTOOLBOX()

E Descrio: Classe de objetos visuais do tipo controle tToolbox, a qual permite
criar um controle visual para agrupar diferentes objetos.

E Propriedades:

bChangeGrp
Bloco de cdigo. Executado na troca entre os grupos
existentes.

E Construtor: New([anRow], [anCol], [aoWnd], [anWidth], [anHeight], [aoFont],
[acMsg]], [abWhen])

E Parmetros:

anRow
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
anCol
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
aoWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
anWidth Numrico, opcional. Largura do boto em pixels.
anHeight Numrico, opcional. Altura do boto em pixels.
aoFont
Objeto, opcional. Objeto tipo tFont com propriedades da
fonte utilizada para o ttulo do boto.
acMsg Mensagem, opcional. Tooltip/Hint do componente.
abWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.


- 479 -

ADVPL Completo


E Mtodos auxiliares:

Create

O Descrio: Mtodo construtor opcional da classe.
O Sintaxe: Create( aoWnd )
O Parmetros:

aoWnd
Objeto, opcional. Janela ou controle onde o boto dever
ser criado.

O Retorno:

Objeto Objeto do tipo TtoolBox gerado.


addGroup

O Descrio: Adiciona um grupo
O Sintaxe: addGroup( aoObj, acName, aoIcon )
O Parmetros:

aoObj Objeto. Objeto Pai que vai ser inserido no grupo.
acName Caractere. Descrio do grupo
aoIcon Objeto, opcional. cone para o grupo

O Retorno:

Nenhum -

removeGroup

O Descrio: Remove um grupo
O Sintaxe: removeGroup( aoObj )
O Parmetros:

aoObj Objeto. Objeto Pai que vai ser removido do grupo.

O Retorno:

Nenhum -


setCurrentGroup

O Descrio: Define o grupo corrente
O Sintaxe: setCurrentGroup( aoObj )
O Parmetros:

aoObj Objeto. Objeto Pai que ser definido como grupo corrente.

O Retorno:

Nenhum -


- 480 -

ADVPL Completo


E Aparncia:



Exemplo:

#i ncl ude pr ot heus. ch

User Funct i on Myt Tool box( )
Local oDl g, oTb

DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 500, 600 PI XEL TI TLE Meu Tool box

/ / Usando o mt odo cr eat e
oTb: = t Tool box( ) : Cr eat e( oDl g )
oTb: nTop : = 100
oTb: nLef t : = 10
oTb: nWi dt h : = 100
oTb: nHei ght : = 30

oTb: Add( oPanel , Opo 1, oI cone)

/ / Usando o command
@200, 100 TOOLBOX oTb SI ZE 100, 30 OF oDl g

TOOLBOX oTb ADDGROUP TI TLE Opo 1 OBJ ECT oPanel I CON oI cone

ACTI VATE MSDI ALOG oDl g CENTERED

Ret ur n Ni l



- 481 -

ADVPL Completo



TWBROWSE()

E Descrio: Classe de objetos visuais do tipo controle TWBrowse, a qual
permite criar um controle visual do tipo Grid.

E Propriedades:

+ Herdadas da classe superior
nAt Linha atualmente selecionada / posicionada no objeto
nLen Nmero total de linhas do objeto

E Construtor: New([nRow], [nCol], [nWidth], [nHeigth],[bFields], [aHeaders],
[aColSizes], [oDlg], [cField], [uValue1], [uValue2],
[uChange],[{|nRow,nCol,nFlags|[uLDblClick]}],
[{|nRow,nCol,nFlags|[uRClick]}], [oFont], [oCursor], [nClrFore],
[nClrBack], [cMsg], [lUpdate], [cAlias], [lPixel], [{uWhen}],
[lDesign], [bValid], [lHScroll], [lVScroll])

E Parmetros:

nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
bFields Bloco de cdigo, Lista de Campos
aHeaders Vetor, Descrio dos campos para no cabealho
aColSizes Vetor, Largura das colunas
oDlg
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
cField Caracter, opcional. Campos necessrios ao filtro
uValue1 Indefinido, opcional. Inicio do intervalo para o filtro
uValue2 Indefinido, opcional. Fim do intervalo para o filtro
bChange
Bloco de cdigo, opcional. Executado quando o item
selecionado alterado.
bLDblClick
Bloco de cdigo, opcional. Executado quando acionado duplo
click do boto esquerdo do mouse sobre o controle.
bRClick No utilizado
oFont Objeto, opcional. Fonte
oCursor Objeto, opcional. Tipo do Cursor
nClrFore Numrico, opcional. Cor do texto da janela.
nClrBack Numrico, opcional. Cor de fundo da janela.
cMsg
Caracter, opcional. Mesamge ao posicionar o mouse sobre o
objeto
lUpdate No utilizado
cAlias
Caracter, opcional se objeto utilizado com Vetor, obrigatorio
se utilizado com Tabela
lPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lDesign No Utilizado
bValid Bloco de cdigo, opcional. Executado quando o contedo do

- 482 -

ADVPL Completo


controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
lHScroll
Lgico, opcional. Se .T., habilita barra de rolagem
horizontal.
lVScroll Lgico, opcional. Se .T., habilita barra de rolagem vertical.

E Mtodos auxiliares:

GoUp

O Descrio: Salta uma linha para cima.
O Sintaxe: GoUp( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoDown

O Descrio: Salta uma linha para baixo.
O Sintaxe: GoDown( )
O Parmetros:

Nenhum -

O Retorno:

Nil


GoTop

O Descrio: Salta para primeira linha.
O Sintaxe: GoTop( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoBottom

O Descrio: Salta para ultima linha.
O Sintaxe: GoBottom( )
O Parmetros:

Nenhum -

O Retorno:


- 483 -

ADVPL Completo


Nil

RowCount

O Descrio: Retorna numero de linhas visiveis.
O Sintaxe: RowCount( )
O Parmetros:

Nenhum -

O Retorno:

Nil


LEditCell

O Descrio: Edita o valor de uma coluna.
O Sintaxe: lEditCell( aList, oList, cPicture, nCol )
O Parmetros:

aList Vetor da Browse onde esto os valores da mesma
oList Objeto, Browse a ser editado
cPicture Caracter, picture necessria para edio do campo
nCol Numrico, coluna a ser editada.

O Retorno:

Nil

E Aparncia:



- 484 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
Local oOK : = LoadBi t map( Get Resour ces( ) , ' br _ver de' )
Local oNO : = LoadBi t map( Get Resour ces( ) , ' br _ver mel ho' )

DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 402, 402 PI XEL TI TLE ' Exempl o'

oBr owse : = TWBr owse( ) : New( 01 , 01, 245, 150, , ;
{' ' , ' Codi go' , ' Descr i o' }, {20, 30, 30}, oDl g, , , , , ;
{| | }, , , , , , , . F. , , . T. , , . F. , , , )
aBr owse : = {{. T. , ' CLI ENTE 001' , ' RUA CLI ENTE 001' , ' BAI RRO CLI ENTE
001' }, ;
{. F. , ' CLI ENTE 002' , ' RUA CLI ENTE 002' , ' BAI RRO CLI ENTE
002' }, ;
{. T. , ' CLI ENTE 003' , ' RUA CLI ENTE 003' , ' BAI RRO CLI ENTE
003' } }

oBr owse: Set Ar r ay( aBr owse)
oBr owse: bLi ne : = {| | {;
I f ( aBr owse[ oBr owse: nAt , 01] , oOK, oNO) , ;
aBr owse[ oBr owse: nAt , 02] , ;
aBr owse[ oBr owse: nAt , 03] , ;
aBr owse[ oBr owse: nAt , 04] } }
oBr owse: bLDbl Cl i ck : = ;
{| | aBr owse[ oBr owse: nAt ] [ 1] : =
! aBr owse[ oBr owse: nAt ] [ 1] , oBr owse: Dr awSel ect ( ) }

/ / Pr i nci pai s commandos
TBut t on( ) : New( 160, 001, ' GoUp( ) ' , oDl g, {| | oBr owse: GoUp( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 170, 001, ' GoDown( ) ' , oDl g, {| | oBr owse: GoDown( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 180, 001, ' GoTop( ) ' , oDl g, {| | oBr owse: GoTop( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 190, 001, ' GoBot t om( ) ' , oDl g, {| | oBr owse: GoBot t om( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 160, 060, ' nAt ( Li nha sel eci onada) ' , oDl g, ;
{| | Al er t ( oBr owse: nAt ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 170, 060, ' nRowCount ( Nr de l i nhas vi si vei s) ' , oDl g, ;
{| | Al er t ( oBr owse: nRowCount ( ) ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 180, 060, ' nLen ( Numer o t ot al de l i nhas) ' , oDl g, ;
{| | Al er t ( oBr owse: nLen) }, 80, 10, , , , . T. )
TBut t on( ) : New( 190, 060, ' l Edi t Cel l ( Edi t a a cel ul a) ' , oDl g, ;
{| | l Edi t Cel l ( @aBr owse, oBr owse, ' @! ' , 3)
}, 80, 10, , , , . T. )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L

- 485 -

ADVPL Completo



VCBROWSE()

E Descrio: Classe de objetos visuais do tipo controle VCBrowse, a qual
permite criar um controle visual do tipo Grid.

E Propriedades:

+ Herdadas da classe superior
nAt Linha atualmente selecionada / posicionada no objeto
nLen Nmero total de linhas do objeto


E Construtor: New([nRow], [nCol], [nWidth], [nHeigth],[bFields], [aHeaders],
[aColSizes], [oDlg], [cField], [uValue1], [uValue2],
[uChange],[{|nRow,nCol,nFlags|[uLDblClick]}],
[{|nRow,nCol,nFlags|[uRClick]}], [oFont], [oCursor], [nClrFore],
[nClrBack], [cMsg], [lUpdate], [cAlias], [lPixel], [{uWhen}],
[lDesign], [bValid], [lHScroll], [lVScroll])

E Parmetros:

nRow Numrico, opcional. Coordenada vertical
nCol Numrico, opcional. Coordenada horizontal
nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
bFields Bloco de cdigo, Lista de Campos
aHeaders Vetor, Descrio dos campos para no cabealho
aColSizes Vetor, Largura das colunas
oDlg
Objeto, opcional. Janela ou controle onde o divisor dever
ser criado.
cField Caracter, opcional. Campos necessrios ao filtro
uValue1 Indefinido, opcional. Inicio do intervalo para o filtro
uValue2 Indefinido, opcional. Fim do intervalo para o filtro
bChange
Bloco de cdigo, opcional. Executado quando o item
selecionado alterado.
bLDblClick
Bloco de cdigo, opcional. Executado quando acionado duplo
click do boto esquerdo do mouse sobre o controle.
bRClick No utilizado
oFont Objeto, opcional. Fonte
oCursor Objeto, opcional. Tipo do Cursor
nClrFore Numrico, opcional. Cor do texto da janela.
nClrBack Numrico, opcional. Cor de fundo da janela.
cMsg
Caracter, opcional. Mesamge ao posicionar o mouse sobre o
objeto
lUpdate No utilizado
cAlias
Caracter, opcional se objeto utilizado com Vetor, obrigatorio
se utilizado com Tabela
lPixel
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
bWhen
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lDesign No Utilizado

- 486 -

ADVPL Completo


bValid
Bloco de cdigo, opcional. Executado quando o contedo do
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
lHScroll
Lgico, opcional. Se .T., habilita barra de rolagem
horizontal.
lVScroll Lgico, opcional. Se .T., habilita barra de rolagem vertical.

E Mtodos auxiliares:

GoUp

O Descrio: Salta uma linha para cima.
O Sintaxe: GoUp( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoDown

O Descrio: Salta uma linha para baixo.
O Sintaxe: GoDown( )
O Parmetros:

Nenhum -

O Retorno:

Nil

GoTop

O Descrio: Salta para primeira linha.
O Sintaxe: GoTop( )
O Parmetros:

Nenhum -

O Retorno:

Nil


- 487 -

ADVPL Completo



GoBottom

O Descrio: Salta para ultima linha.
O Sintaxe: GoBottom( )
O Parmetros:

Nenhum -

O Retorno:

Nil

RowCount

O Descrio: Retorna numero de linhas visiveis.
O Sintaxe: RowCount( )
O Parmetros:

Nenhum -

O Retorno:

Nil


LEditCell

O Descrio: Edita o valor de uma coluna.
O Sintaxe: lEditCell( aList, oList, cPicture, nCol )
O Parmetros:

aList Vetor da Browse onde esto os valores da mesma
oList Objeto, Browse a ser editado
cPicture Caracter, picture necessria para edio do campo
nCol Numrico, coluna a ser editada.

O Retorno:

Nil


- 488 -

ADVPL Completo



E Aparncia:



















- 489 -

ADVPL Completo



Exemplo:

#i ncl ude ' pr ot heus. ch'
User Funct i on Test e( )
Local oDl g
Local oOK : = LoadBi t map( Get Resour ces( ) , ' br _ver de' )
Local oNO : = LoadBi t map( Get Resour ces( ) , ' br _ver mel ho' )
DEFI NE MSDI ALOG oDl g FROM 0, 0 TO 402, 402 PI XEL TI TLE ' Exempl o'

oBr owse : = VCBr owse( ) : New( 01 , 01, 245, 150, , ;
{' ' , ' Codi go' , ' Descr i o' }, {20, 30, 30}, oDl g, , , , , ;
{| | }, , , , , , , . F. , , . T. , , . F. , , , )
aBr owse : = {{. T. , ' CLI ENTE 001' , ' RUA CLI ENTE 001' , ' BAI RRO CLI ENTE
001' }, ;
{. F. , ' CLI ENTE 002' , ' RUA CLI ENTE 002' , ' BAI RRO CLI ENTE
002' }, ;
{. T. , ' CLI ENTE 003' , ' RUA CLI ENTE 003' , ' BAI RRO CLI ENTE
003' } }

oBr owse: Set Ar r ay( aBr owse)
oBr owse: bLi ne : = {| | {;
I f ( aBr owse[ oBr owse: nAt , 01] , oOK, oNO) , ;
aBr owse[ oBr owse: nAt , 02] , ;
aBr owse[ oBr owse: nAt , 03] , ;
aBr owse[ oBr owse: nAt , 04] } }
oBr owse: bLDbl Cl i ck : =;
{| | aBr owse[ oBr owse: nAt ] [ 1] : =
! aBr owse[ oBr owse: nAt ] [ 1] , oBr owse: Dr awSel ect ( ) }

/ / Pr i nci pai s commandos
TBut t on( ) : New( 160, 001, ' GoUp( ) ' , oDl g, {| | oBr owse: GoUp( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 170, 001, ' GoDown( ) ' , oDl g, {| | oBr owse: GoDown( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 180, 001, ' GoTop( ) ' , oDl g, {| | oBr owse: GoTop( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 190, 001, ' GoBot t om( ) ' , oDl g, {| | oBr owse: GoBot t om( )
}, 40, 10, , , , . T. )
TBut t on( ) : New( 160, 060, ' nAt ( Li nha sel eci onada) ' , oDl g, ;
{| | Al er t ( oBr owse: nAt ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 170, 060, ' nRowCount ( Nr de l i nhas vi si vei s) ' , oDl g, ;
{| | Al er t ( oBr owse: nRowCount ( ) ) }, 80, 10, , , , . T. )
TBut t on( ) : New( 180, 060, ' nLen ( Numer o t ot al de l i nhas) ' , oDl g, ;
{| | Al er t ( oBr owse: nLen) }, 80, 10, , , , . T. )
TBut t on( ) : New( 190, 060, ' l Edi t Cel l ( Edi t a a cel ul a) ' , oDl g, ;
{| | l Edi t Cel l ( @aBr owse, oBr owse, ' @! ' , 3)
}, 40, 10, , , , . T. )

ACTI VATE MSDI ALOG oDl g CENTERED
Ret ur n NI L


- 490 -

ADVPL Completo



Documentao dos componentes da interface visual

Os componentes da interface visual da linguagem ADVPL utilizados neste treinamento esto
documentados na seo Guia de Referncia, ao final deste material.

Para visualizar a documentao completa de todos os componentes mencionados neste
captulo deve ser acesso o site DEM Documentao Eletrnica Microsiga
(dem.microsiga.com.br) conforme abaixo:























- 491 -

ADVPL Completo



36.1. Particularidades dos componentes visuais


36.1.1. Configurando as cores para os componentes

Os componentes visuais da linguagem ADVPL utilizam o padro de cores RGB.

As cores deste padro so definidas pela seguinte frmula, a qual deve ser avaliada tendo
como base a paleta de cores no formato RGB:


nCor := nVermelho + (nVerde * 256) + (nAzul * 65536)





Figura: Paleta de cores no formato RGB

Com base nesta paleta, podemos definir os valores das seguintes cores bsicas:

Cor R G B Valor
Preto 0 0 0 0
Azul 0 0 255 16711680
Verde 0 255 0 65280
Ciano 0 255 255 16776960
Vermelho 255 0 0 255
Rosa 255 0 255 16711935
Amarelo 255 255 0 65535
Branco 255 255 255 16777215



- 492 -

ADVPL Completo



Para atribuir as cores aos objetos visuais devem ser observados os atributos utilizados para
estes fins em cada objeto, como por exemplo:

MSDIALOG()

nClrPane Cor de fundo do painel
nClrText Cor da fonte das letras do painel


TSAY()

nClrPane Cor de fundo do painel
nClrText Cor da fonte das letras do painel


Funo RGB()

A linguagem ADVPL possui a funo RGB() a qual retorna o valor da cor a ser definido, de
acordo com a parametrizao de cada um dos elementos da paleta RGB.


RGB(nRed, nGreen, nBlue)

nRed Valor de 0-255 para o elemento vermelho da paleta RGB
nGreen Valor de 0-255 para o elemento verde da paleta RGB
nBlue Valor de 0-255 para o elemento azul da paleta RGB
Retorno Valor a ser definido para o atributo cor do componente


- 493 -

ADVPL Completo



37. Aplicaes com a interface visual do ADVPL

A linguagem ADVPL possui interfaces visuais pr-definidas que auxiliam no desenvolvimento
de aplicaes mais completas, combinando estas interfaces com os componentes visuais
demonstrados anteriormente.

Didaticamente as interfaces visuais pr-definidas da linguagem ADVPL podem ser divididas em
trs grupos:

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)

Em ADVPL, as telas de captura de informaes compostas por mltiplos campos digitveis
acompanhados de seus respectivos textos explicativos so comumente chamados de
Enchoices.

Um Enchoice pode ser facilmente entendida como diversos conjuntos de objetos TSay e TGet
alinhados de forma a visualizar ou capturar informaes, normalmente vinculadas a arquivos
de cadastros ou movimentaes simples.

Abaixo temos a visualizao de uma Enchoice para o arquivo padro do ERP Protheus de
Cadastro de Clientes (SA1):



Figura: Enchoice do Cadastro de Clientes do ERP Protheus


- 494 -

ADVPL Completo



A linguagem ADVPL permite a implementao da Enchoice de duas formas similares:

E Funo Enchoice: Sintaxe tradicionalmente utilizada em ADVPL, a qual no retorna
um objeto para a aplicao chamadora;

E Classe MsMGet: Classe do objeto Enchoice, a qual permite a instanciao direta de um
objeto, tornando-o disponvel na aplicao chamadora.

A utilizao de um ou outro objeto depende unicamente da escolha do desenvolvedor j que os
parmetros para a funo Enchoice e para o mtodo New() da classe MsMGet so os mesmos,
lembrando que para manter a coerncia com uma aplicao escrita em orientao a objetos
dever ser utilizada a classe 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 Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser
editada
nReg Parmetro no utilizado
nOpc Nmero da linha do aRotina que definir o tipo de edio
(Incluso, Alterao, Excluso, Visualizao)
aCRA Parmetro no utilizado
cLetra Parmetro no utilizado
cTexto Parmetro no utilizado
aAcho Vetor com nome dos campos que sero exibidos. Os campos
de usurio sempre sero exibidos se no existir no parmetro
um elemento com a expresso "NOUSER"
aPos Vetor com coordenadas para criao da enchoice no formato
{<top>, <left>, <bottom>, <right>}
aCpos Vetor com nome dos campos que podero ser editados
nModelo Se for diferente de 1 desabilita execuo de gatilhos
estrangeiros
nColMens Parmetro no utilizado
cMensagem Parmetro no utilizado
cTudoOk Expresso para validao da Enchoice
oWnd Objeto (janela, painel, etc.) onde a enchoice ser criada.
lF3 Indica se a enchoice esta sendo criada em uma consulta F3
para utilizar variveis de memria
lMemoria Indica se a enchoice utilizar variveis de memria ou os
campos da tabela na edio
lColumn Indica se a apresentao dos campos ser em forma de
coluna
caTela Nome da varivel tipo "private" que a enchoice utilizar no
lugar da propriedade aTela
lNoFolder Indica se a enchoice no ir utilizar as Pastas de Cadastro
(SXA)
lProperty Indica se a enchoice no utilizar as variveis aTela e aGets,
somente suas propriedades com os mesmos nomes

- 495 -

ADVPL Completo




Exemplo: Utilizao da funo Enchoice()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MBRWENCH | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao da f uno Enchoi ce( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Mr bwEnch( )

Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es"
Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ;
{" Vi sual i zar " , " U_ModEnc" , 0, 2}}

DbSel ect Ar ea( " SA1" )
DbSet Or der ( 1)

MBr owse( 6, 1, 22, 75, " SA1" )

Ret ur n

User Funct i on ModEnc( cAl i as, nReg, nOpc)

Local aCpoEnch : = {}
Local aAl t er : = {}

Local cAl i asE : = cAl i as
Local aAl t er Ench : = {}
Local aPos : = {000, 000, 400, 600}
Local nModel o : = 3
Local l F3 : = . F.
Local l Memor i a : = . T.
Local l Col umn : = . F.
Local caTel a : = " "
Local l NoFol der : = . F.
Local l Pr oper t y : = . F.
Pr i vat e oDl g
Pr i vat e oGet D
Pr i vat e oEnch
Pr i vat e aTELA[ 0] [ 0]
Pr i vat e aGETS[ 0]

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( cAl i asE)



- 496 -

ADVPL Completo



Exempl o ( cont i nuao) :

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE
I f ! ( SX3- >X3_CAMPO $ " A1_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ;
X3Uso( SX3- >X3_USADO)
AADD( aCpoEnch, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er Ench : = aCl one( aCpoEnch)

DEFI NE MSDI ALOG oDl g TI TLE cCadast r o FROM 000, 000 TO 400, 600 PI XEL
RegToMemor y( " SA1" , I f ( nOpc==3, . T. , . F. ) )

Enchoi ce( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ;
aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , ;
/ *cMensagem*/ , / *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, ;
caTel a, l NoFol der , l Pr oper t y)

ACTI VATE MSDI ALOG oDl g CENTERED

Ret ur n

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 Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser
editada
nReg Parmetro no utilizado
nOpc Nmero da linha do aRotina que definir o tipo de edio
(Incluso, Alterao, Excluso, Visualizao)
aCRA Parmetro no utilizado
cLetra Parmetro no utilizado
cTexto Parmetro no utilizado
aAcho Vetor com nome dos campos que sero exibidos. Os campos
de usurio sempre sero exibidos se no existir no parmetro
um elemento com a expresso "NOUSER"
aPos Vetor com coordenadas para criao da enchoice no formato
{<top>, <left>, <bottom>, <right>}
aCpos Vetor com nome dos campos que podero ser editados
nModelo Se for diferente de 1 desabilita execuo de gatilhos
estrangeiros
nColMens Parmetro no utilizado
cMensagem Parmetro no utilizado
cTudoOk Expresso para validao da Enchoice
oWnd Objeto (janela, painel, etc.) onde a enchoice ser criada.
lF3 Indica se a enchoice esta sendo criada em uma consulta F3
para utilizar variveis de memria

- 497 -

ADVPL Completo


lMemoria Indica se a enchoice utilizar variveis de memria ou os
campos da tabela na edio
lColumn Indica se a apresentao dos campos ser em forma de
coluna
caTela Nome da varivel tipo "private" que a enchoice utilizar no
lugar da propriedade aTela
lNoFolder Indica se a enchoice no ir utilizar as Pastas de Cadastro
(SXA)
lProperty Indica se a enchoice no utilizar as variveis aTela e aGets,
somente suas propriedades com os mesmos nomes

Exemplo: Utilizao do objeto MsMGet()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MBRWMSGET | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o MsMget ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Mr bwMsGet ( )

Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es"
Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ;
{" Vi sual i zar " , " U_ModEnc" , 0, 2}}

DbSel ect Ar ea( " SA1" )
DbSet Or der ( 1)

MBr owse( 6, 1, 22, 75, " SA1" )

Ret ur n

User Funct i on ModEnc( cAl i as, nReg, nOpc)
Local aCpoEnch : = {}
Local aAl t er : = {}

Local cAl i asE : = cAl i as
Local aAl t er Ench : = {}
Local aPos : = {000, 000, 400, 600}
Local nModel o : = 3
Local l F3 : = . F.
Local l Memor i a : = . T.
Local l Col umn : = . F.
Local caTel a : = " "
Local l NoFol der : = . F.
Local l Pr oper t y : = . F.
Pr i vat e oDl g
Pr i vat e oGet D
Pr i vat e oEnch
Pr i vat e aTELA[ 0] [ 0]
Pr i vat e aGETS[ 0]

- 498 -

ADVPL Completo


Exemplo (continuao):

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( cAl i asE)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE
I f ! ( SX3- >X3_CAMPO $ " A1_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And.
X3Uso( SX3- >X3_USADO)
AADD( aCpoEnch, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er Ench : = aCl one( aCpoEnch)

oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. )

RegToMemor y( cAl i asE, I f ( nOpc==3, . T. , . F. ) )

oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , ;
/ *cText o*/ , aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , ;
/ *cMensagem*/ , / *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, caTel a, ;
l NoFol der , l Pr oper t y)

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n


37.2. Captura de mltiplas informaes (Multi-Lines)

A linguagem ADVPL permite a utilizao de basicamente dois tipos de objetos do tipo grid, ou
como tambm so conhecidos: multi-line:

E Grids digitveis: permitem a visualizao e captura de informaes, comumente
utilizados em interfaces de cadastro e manuteno, tais como:

MSGETDB()
MSGETDADOS()
MSNEWGETDADOS()

E Grids no digitveis: permitem somente a visualizao de informaes, comumente
utilizados como browses do ERP Protheus, tais como:

TWBROWSE()
MAWNDBROWSE()
MBROWSE()

Neste tpico sero tratadas as grids digitveis disponveis na linguagem ADVPL para o
desenvolvimento de interfaces de cadastros e manuteno de informaes.

- 499 -

ADVPL Completo



37.2.1. MsGetDB()

A classe de objetos visuais MsGetDB() permite a criao de um grid digitvel com uma ou mais
colunas, baseado em uma tabela temporria.

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 Distancia entre a MsGetDB e o extremidade superior do
objeto que a contm.
nLeft Distancia entre a MsGetDB e o extremidade esquerda do
objeto que a contm.
nBottom Distancia entre a MsGetDB e o extremidade inferior do objeto
que a contm.
nRight

Distancia entre a MsGetDB e o extremidade direita do objeto
que a contm.
nOpc Posio do elemento do vetor aRotina que a MsGetDB usar
como referncia.
cLinhaOk Funo executada para validar o contexto da linha atual do
aCols.
cTudoOk Funo executada para validar o contexto geral da MsGetDB
(todo aCols).
cIniCpos Nome dos campos do tipo caracter que utilizaro incremento
automtico. Este parmetro deve ser no formato +<nome
do primeiro campo>+<nome do segundo campo>+....
lDelete Habilita a opo de excluir linhas do aCols. Valor padro
falso.
aAlter Vetor com os campos que podero ser alterados.
nFreeze Indica qual coluna no ficara congelada na exibio.
lEmpty Habilita validao da primeira coluna do aCols para esta no
poder estar vazia. Valor padro falso.
uPar1 Parmetro reservado.
cFieldOk Funo executada na validao do campo.
cTRB Alias da tabela temporria.
lCondicional Reservado
lAppend Indica se a MsGetDB ira criar uma linha em branco
automaticamente quando for incluso.
cDelOk Funo executada para validar a excluso de uma linha do
aCols.
lDisparos Indica se ser utilizado o Dicionrio de Dados para consulta
padro, inicializao padro e gatilhos.
uPar2 Parmetro reservado.
cSuperDel -Funo executada quando pressionada as teclas
<Ctrl>+<Delete>.
oWnd Objeto no qual a MsGetDB ser criada.




- 500 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vetor com as rotinas que sero executadas na MBrowse e
que definira o tipo de operao que esta sendo executada
(incluso, alterao, excluso, visualizao, pesquisa, ...) no
formato:
{cTitulo, cRotina, nOpo, nAcesso}, aonde:
nOpo segue o padro do ERP Protheus para:
11- Pesquisar
12- Visualizar
13- Incluir
14- Alterar
15- Excluir
aHeader Vetor com informaes das colunas no formato:

{cTitulo, cCampo, cPicture, nTamanho, nDecimais,;
cValidao, cReservado, cTipo, xReservado1, xReservado2}

A tabela temporria utilizada pela MsGetDB dever ser criada
com base no aHeader mais um ltimo campo tipo lgico que
determina se a linha foi excluda.


lRefresh Varivel tipo lgica para uso reservado.


- 501 -

ADVPL Completo



E Variveis pblicas:

nBrLin Indica qual a linha posicionada do aCols.

E Funes de validao:

cLinhaOk Funo de validao na mudana das linhas da grid. No
pode ser definida como Static Function.
cTudoOk Funo de validao da confirmao da operao com o grid.
No pode ser definida como Static Function.

E Mtodos adicionais:

ForceRefresh() Atualiza a MsGetDB com a tabela e posiciona na primeira
linha.

Exemplo: Utilizao do objeto MsGetDB()


#i ncl ude pr ot heus. ch

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GETDBSA1 | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o MsGet DB( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Get DbSA1( )

Local nI
Local oDl g
Local oGet DB
Local nUsado : = 0
Local aSt r uct : = {}

Pr i vat e l Ref r esh : = . T.
Pr i vat e aHeader : = {}
Pr i vat e aCol s : = {}
Pr i vat e aRot i na : = {{" Pesqui sar " , " AxPesqui " , 0, 1}, ;
{" Vi sual i zar " , " AxVi sual " , 0, 2}, ;
{" I ncl ui r " , " AxI ncl ui " , 0, 3}, ;
{" Al t er ar " , " AxAl t er a" , 0, 4}, ;
{" Excl ui r " , " AxDel et a" , 0, 5}}

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( " SA1" )


- 502 -

ADVPL Completo


Exempl o ( cont i nuao) :

Whi l e ! Eof ( ) . and. SX3- >X3_ARQUI VO == " SA1"
I f X3Uso( SX3- >X3_USADO) . and. cNi vel >= SX3- >X3_NI VEL
nUsado++
AADD( aHeader , {Tr i m( X3Ti t ul o( ) ) , ;
SX3- >X3_CAMPO, ;
SX3- >X3_PI CTURE, ;
SX3- >X3_TAMANHO, ;
SX3- >X3_DECI MAL, ;
SX3- >X3_VALI D, ;
" " , ;
SX3- >X3_TI PO, ;
" " , ;
" " })
AADD( aSt r uct , {SX3- >X3_CAMPO, SX3- >X3_TI PO, SX3- >X3_TAMANHO, ;
SX3- >X3_DECI MAL})
EndI f
DbSki p( )
End

AADD( aSt r uct , {" FLAG" , " L" , 1, 0})

cCr i aTr ab : = Cr i aTr ab( aSt r uct , . T. )
DbUseAr ea( . T. , __Local Dr i ver , cCr i aTr ab, , . T. , . F. )

oDl g : = MSDI ALOG( ) : New( 000, 000, 300, 400, MsGet DB SA1, , , , , , , , , . T. )

oGet DB : = MsGet DB( ) : New( 05, 05, 145, 195, 3, " U_LI NHAOK" , " U_TUDOOK" , " +A1_COD" , ;
. T. , {" A1_NOME" }, 1, . F. , , cCr i aTr ab, " U_FI ELDOK" , , . T. , oDl g, . T. , , " U_DELOK" , ;
" U_SUPERDEL" )

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )
DbSel ect Ar ea( cCr i aTr ab)
DbCl oseAr ea( )

Ret ur n

User Funct i on LI NHAOK( )
ApMsgSt op( " LI NHAOK" )
Ret ur n . T.

User Funct i on TUDOOK( )
ApMsgSt op( " LI NHAOK" )
Ret ur n . T.

User Funct i on DELOK( )
ApMsgSt op( " DELOK" )
Ret ur n . T.

User Funct i on SUPERDEL( )
ApMsgSt op( " SUPERDEL" )
Ret ur n . T.

User Funct i on FI ELDOK( )
ApMsgSt op( " FI ELDOK" )
Ret ur n . T.



- 503 -

ADVPL Completo



37.2.2. MsGetDados()

A classe de objetos visuais MsGetDados() permite a criao de um grid digitvel com uma ou
mais colunas, baseado em um array.

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 Distancia entre a MsGetDados e o extremidade superior do
objeto que a contm.
nLeft Distancia entre a MsGetDados e o extremidade esquerda do
objeto que a contm.
nBottom Distancia entre a MsGetDados e o extremidade inferior do
objeto que a contm.
nRight

Distancia entre a MsGetDados e o extremidade direita do
objeto que a contm.
nOpc Posio do elemento do vetor aRotina que a MsGetDados
usar como referencia.
cLinhaOk Funo executada para validar o contexto da linha atual do
aCols.
cTudoOk Funo executada para validar o contexto geral da
MsGetDados (todo aCols).
cIniCpos Nome dos campos do tipo caracter que utilizaro incremento
automtico. Este parmetro deve ser no formato +<nome
do primeiro campo>+<nome do segundo campo>+....
lDelete Habilita excluir linhas do aCols. Valor padro falso.
aAlter Vetor com os campos que podero ser alterados.
uPar1 Parmetro reservado.
lEmpty Habilita validao da primeira coluna do aCols para esta no
poder estar vazia. Valor padro falso.
nMax Nmero mximo de linhas permitidas. Valor padro 99.
cFieldOk Funo executada na validao do campo.
cSuperDel Funo executada quando pressionada as teclas
<Ctrl>+<Delete>.
uPar2 Parmetro reservado.
cDelOk Funo executada para validar a excluso de uma linha do
aCols.
oWnd Objeto no qual a MsGetDados ser criada.


- 504 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vetor com as rotinas que sero executadas na MBrowse e
que definira o tipo de operao que esta sendo executada
(incluso, alterao, excluso, visualizao, pesquisa, ...) no
formato:
{cTitulo, cRotina, nOpo, nAcesso}, aonde:
nOpo segue o padro do ERP Protheus para:
16- Pesquisar
17- Visualizar
18- Incluir
19- Alterar
20- Excluir
aHeader Vetor com informaes das colunas no formato:

{cTitulo, cCampo, cPicture, nTamanho, nDecimais,;
cValidao, cReservado, cTipo, xReservado1, xReservado2}

A tabela temporria utilizada pela MsGetDB dever ser criada
com base no aHeader mais um ltimo campo tipo lgico que
determina se a linha foi excluda.


lRefresh Varivel tipo lgica para uso reservado.


- 505 -

ADVPL Completo



E Variveis pblicas:

N Indica qual a linha posicionada do aCols.

E Funes de validao:

cLinhaOk Funo de validao na mudana das linhas da grid. No
pode ser definida como Static Function.
cTudoOk Funo de validao da confirmao da operao com o grid.
No pode ser definida como Static Function.

E Mtodos adicionais:

ForceRefresh() Atualiza a MsGetDados com a tabela e posiciona na primeira
linha.
Hide() Oculta a MsGetDados.
Show() Mostra a MsGetDados.


Exemplo: Utilizao do objeto MsGetDados()


#i ncl ude pr ot heus. ch

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GETDADOSA1 | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o MSGETADOS( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Get DadoSA1( )

Local nI
Local oDl g
Local oGet Dados
Local nUsado : = 0
Pr i vat e l Ref r esh : = . T.
Pr i vat e aHeader : = {}
Pr i vat e aCol s : = {}

Pr i vat e aRot i na : = {{" Pesqui sar " , " AxPesqui " , 0, 1}, ;
{" Vi sual i zar " , " AxVi sual " , 0, 2}, ;
{" I ncl ui r " , " AxI ncl ui " , 0, 3}, ;
{" Al t er ar " , " AxAl t er a" , 0, 4}, ;
{" Excl ui r " , " AxDel et a" , 0, 5}}

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( " SA1" )


- 506 -

ADVPL Completo



Exempl o ( cont i nuao) :

Whi l e ! Eof ( ) . and. SX3- >X3_ARQUI VO == " SA1"
I f X3Uso( SX3- >X3_USADO) . and. cNi vel >= SX3- >X3_NI VEL
nUsado++
AADD( aHeader , {Tr i m( X3Ti t ul o( ) ) , ;
SX3- >X3_CAMPO, ;
SX3- >X3_PI CTURE, ;
SX3- >X3_TAMANHO, ;
SX3- >X3_DECI MAL, ;
SX3- >X3_VALI D, ;
" " , ;
SX3- >X3_TI PO, ;
" " , ;
" " })
EndI f
DbSki p( )
End

AADD( aCol s, Ar r ay( nUsado+1) )

For nI : = 1 To nUsado
aCol s[ 1] [ nI ] : = Cr i aVar ( aHeader [ nI ] [ 2] )
Next

aCol s[ 1] [ nUsado+1] : = . F.

oDl g : = MSDI ALOG( ) : New( 000, 000, 300, 400, MsGet Dados SA1, , , , , , , , , . T. )

oGet Dados : = MsGet Dados( ) : New( 05, 05, 145, 195, 4, " U_LI NHAOK" , " U_TUDOOK" , ;
" +A1_COD" , . T. , {" A1_NOME" }, , . F. , 200, " U_FI ELDOK" , " U_SUPERDEL" , , ;
" U_DELOK" , oDl g)

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n

User Funct i on LI NHAOK( )
ApMsgSt op( " LI NHAOK" )
Ret ur n . T.

User Funct i on TUDOOK( )
ApMsgSt op( " LI NHAOK" )
Ret ur n . T.

User Funct i on DELOK( )
ApMsgSt op( " DELOK" )
Ret ur n . T.

User Funct i on SUPERDEL( )
ApMsgSt op( " SUPERDEL" )
Ret ur n . T.

User Funct i on FI ELDOK( )
ApMsgSt op( " FI ELDOK" )
Ret ur n . T.



- 507 -

ADVPL Completo



37.2.3. MsNewGetDados()

A classe de objetos visuais MsNewGetDados() permite a criao de um grid digitvel com uma
ou mais colunas, baseado em um array.

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 Distancia entre a MsNewGetDados e o extremidade superior
do objeto que a contem
nEsquerda Distancia entre a MsNewGetDados e o extremidade esquerda
do objeto que a contem
nInferior Distancia entre a MsNewGetDados e o extremidade inferior do
objeto que a contem
nDireita Distancia entre a MsNewGetDados e o extremidade direita do
objeto que a contem
nOpc Operao em execuo: 2- Visualizar, 3- Incluir, 4- Alterar, 5-
Excluir
cLinOk Funo executada para validar o contexto da linha atual do
aCols
cTudoOk Funo executada para validar o contexto geral da
MsNewGetDados (todo aCols)
cIniCpos Nome dos campos do tipo caracter que utilizaro incremento
automtico.
aAlterGDa Campos alterveis da GetDados
nFreeze Campos estticos na GetDados, partindo sempre da posio
inicial da getdados aonde:
3- Primeiro campo congelado
4- Primeiro e segundo campos congelados...
nMax Nmero mximo de linhas permitidas. Valor padro 99
cFieldOk Funo executada na validao do campo
cSuperDel Funo executada quando pressionada as teclas
<Ctrl>+<Delete>
cDelOk Funo executada para validar a excluso de uma linha do
aCols
oDLG Objeto no qual a MsNewGetDados ser criada
aHeader Array a ser tratado internamente na MsNewGetDados como
aHeader
aCols Array a ser tratado internamente na MsNewGetDados como
aCols


- 508 -

ADVPL Completo


E Aparncia:





E Variveis private:

aRotina Vetor com as rotinas que sero executadas na MBrowse e
que definira o tipo de operao que esta sendo executada
(incluso, alterao, excluso, visualizao, pesquisa, ...) no
formato:
{cTitulo, cRotina, nOpo, nAcesso}, aonde:

nOpo segue o padro do ERP Protheus para:
6- Pesquisar
7- Visualizar
8- Incluir
9- Alterar
10- Excluir
aHeader Vetor com informaes das colunas no formato:

{cTitulo, cCampo, cPicture, nTamanho, nDecimais,;
cValidao, cReservado, cTipo, xReservado1, xReservado2}

A tabela temporria utilizada pela MsGetDB dever ser criada
com base no aHeader mais um ltimo campo tipo lgico que
determina se a linha foi excluda.

lRefresh Varivel tipo lgica para uso reservado.

- 509 -

ADVPL Completo



E Variveis pblicas:

N Indica qual a linha posicionada do aCols.

E Funes de validao:

cLinhaOk Funo de validao na mudana das linhas da grid. No
pode ser definida como Static Function.
cTudoOk Funo de validao da confirmao da operao com o grid.
No pode ser definida como Static Function.

E Mtodos adicionais:

ForceRefresh() Atualiza a MsNewGetDados com a tabela e posiciona na
primeira linha.
Hide() Oculta a MsNewGetDados.
Show() Mostra a MsNewGetDados.

Exemplo: Utilizao dos objetos MsNewGetDados() e MsMGet()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MBRWGETD | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao dos obj et os |
| | MsNewGet Dados( ) e MsMGet ( ) combi nados |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Mr bwGet D( )

Pr i vat e cCadast r o : = " Pedi dos de Venda"
Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ;
{" Vi sual i zar " , " U_ModGt d" , 0, 2}, ;
{" I ncl ui r " , " U_ModGt d" , 0, 3}}

DbSel ect Ar ea( " SC5" )
DbSet Or der ( 1)

MBr owse( 6, 1, 22, 75, " SC5" )

Ret ur n

User Funct i on ModGt d( cAl i as, nReg, nOpc)

Local nX : = 0
Local nUsado : = 0
Local aBut t ons : = {}
Local aCpoEnch : = {}
Local cAl i asE : = cAl i as
Local aAl t er Ench : = {}


- 510 -

ADVPL Completo



Exempl o ( cont i nuao) :

Local aPos : = {000, 000, 080, 400}
Local nModel o : = 3
Local l F3 : = . F.
Local l Memor i a : = . T.
Local l Col umn : = . F.
Local caTel a : = " "
Local l NoFol der : = . F.
Local l Pr oper t y : = . F.
Local aCpoGDa : = {}
Local cAl i asGD : = " SC6"
Local nSuper i or : = 081
Local nEsquer da : = 000
Local nI nf er i or : = 250
Local nDi r ei t a : = 400
Local cLi nOk : = " Al l waysTr ue"
Local cTudoOk : = " Al l waysTr ue"
Local cI ni Cpos : = " C6_I TEM"
Local nFr eeze : = 000
Local nMax : = 999
Local cFi el dOk : = " Al l waysTr ue"
Local cSuper Del : = " "
Local cDel Ok : = " Al l waysFal se"
Local aHeader : = {}
Local aCol s : = {}
Local aAl t er GDa : = {}

Pr i vat e oDl g
Pr i vat e oGet D
Pr i vat e oEnch
Pr i vat e aTELA[ 0] [ 0]
Pr i vat e aGETS[ 0]

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( cAl i asE)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE
I f ! ( SX3- >X3_CAMPO $ " C5_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ;
X3Uso( SX3- >X3_USADO)
AADD( aCpoEnch, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er Ench : = aCl one( aCpoEnch)

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
MsSeek( cAl i asGD)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asGD
I f ! ( Al l Tr i m( SX3- >X3_CAMPO) $ " C6_FI LI AL" ) . And. ;
cNi vel >= SX3- >X3_NI VEL . And. X3Uso( SX3- >X3_USADO)
AADD( aCpoGDa, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

- 511 -

ADVPL Completo



Exempl o ( cont i nuao) :

aAl t er GDa : = aCl one( aCpoGDa)

nUsado: =0
dbSel ect Ar ea( " SX3" )
dbSeek( " SC6" )
aHeader : ={}
Whi l e ! Eof ( ) . And. ( x3_ar qui vo==" SC6" )
I f X3USO( x3_usado) . And. cNi vel >=x3_ni vel
nUsado: =nUsado+1
AADD( aHeader , { TRI M( x3_t i t ul o) , x3_campo, x3_pi ct ur e, x3_t amanho, ;
x3_deci mal , " Al l waysTr ue( ) " , x3_usado, x3_t i po, x3_ar qui vo, x3_cont ext } )
Endi f
dbSki p( )
End

I f nOpc==3 / / I ncl ui r
aCol s: ={Ar r ay( nUsado+1) }
aCol s[ 1, nUsado+1] : =. F.
For nX: =1 t o nUsado
I F aHeader [ nX, 2] == " C6_I TEM"
aCol s[ 1, nX] : = " 0001"
ELSE
aCol s[ 1, nX] : =Cr i aVar ( aHeader [ nX, 2] )
ENDI F
Next
El se
aCol s: ={}
dbSel ect Ar ea( " SC6" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( ) +M- >C5_NUM)
Whi l e ! eof ( ) . and. C6_NUM==M- >C5_NUM
AADD( aCol s, Ar r ay( nUsado+1) )
For nX: =1 t o nUsado
aCol s[ Len( aCol s) , nX] : =Fi el dGet ( Fi el dPos( aHeader [ nX, 2] ) )
Next
aCol s[ Len( aCol s) , nUsado+1] : =. F.
dbSki p( )
End
Endi f

oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. )
RegToMemor y( " SC5" , I f ( nOpc==3, . T. , . F. ) )

oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ;
aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , / *cMensagem*/ , ;
/ *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , ;
l Pr oper t y)

oGet D: = MsNewGet Dados( ) : New( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a, ;
nOpc, cLi nOk, cTudoOk, cI ni Cpos, aAl t er GDa, nFr eeze, nMax, cFi el dOk, ;
cSuper Del , cDel Ok, oDLG, aHeader , aCol s)

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, {| | oDl g: End( ) }, {| | oDl g: End( ) }, , aBut t ons) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )
Ret ur n

- 512 -

ADVPL Completo



37.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados()

Conforme visto no tpico sobre definio das propriedades de cores para os componentes
visuais, cada objeto possui caractersticas que devem ser respeitadas para correta utilizao
deste recurso.

E Atributos adicionais:

lUseDefaultColors Atributo que dever ser definido como .F. para que as
alteraes nas cores sejam permitidas.


E Mtodos adicionais:

SetBlkBackColor Mtodo que define a cor que ser utilizada para cada linha do
grid. No necessrio utilizar o mtodo Refresh() aps a
definio da cor por este mtodo.

E Aparncia:






- 513 -

ADVPL Completo



Exemplo: Definindo cores personalizadas para o objeto MsNewGetDados()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | MRBWGTCL | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao dos obj et os |
| | MsNewGet Dados( ) e MsMGet ( ) combi nados e t r at ament o de cor es |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Mr bwGt Cl ( )

Pr i vat e cCadast r o : = " Pedi dos de Venda"
Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ;
{" Vi sual i zar " , " U_ModGt d" , 0, 2}, ;
{" I ncl ui r " , " U_ModGt d" , 0, 3}}

DbSel ect Ar ea( " SC5" )
DbSet Or der ( 1)

MBr owse( 6, 1, 22, 75, " SC5" )

Ret ur n

User Funct i on ModGt d( cAl i as, nReg, nOpc)

Local nX : = 0
Local nUsado : = 0

Local aBut t ons : = {}
Local aCpoEnch : = {}
Local cAl i asE : = cAl i as
Local aAl t er Ench : = {}
Local aPos : = {000, 000, 080, 400}
Local nModel o : = 3
Local l F3 : = . F.
Local l Memor i a : = . T.
Local l Col umn : = . F.
Local caTel a : = " "
Local l NoFol der : = . F.
Local l Pr oper t y : = . F.
Local aCpoGDa : = {}
Local cAl i asGD : = " SC6"
Local nSuper i or : = 081
Local nEsquer da : = 000
Local nI nf er i or : = 250
Local nDi r ei t a : = 400
Local cLi nOk : = " Al l waysTr ue"
Local cTudoOk : = " Al l waysTr ue"
Local cI ni Cpos : = " C6_I TEM"
Local nFr eeze : = 000
Local nMax : = 999


- 514 -

ADVPL Completo


Exempl o ( cont i nuao) :

Local cFi el dOk : = " Al l waysTr ue"
Local cSuper Del : = " "
Local cDel Ok : = " Al l waysFal se"
Local aHeader : = {}
Local aCol s : = {}
Local aAl t er GDa : = {}

Pr i vat e oDl g
Pr i vat e oGet D
Pr i vat e oEnch
Pr i vat e aTELA[ 0] [ 0]
Pr i vat e aGETS[ 0]

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
DbSeek( cAl i asE)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE
I f ! ( SX3- >X3_CAMPO $ " C5_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ;
X3Uso( SX3- >X3_USADO)
AADD( aCpoEnch, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er Ench : = aCl one( aCpoEnch)

DbSel ect Ar ea( " SX3" )
DbSet Or der ( 1)
MsSeek( cAl i asGD)

Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asGD
I f ! ( Al l Tr i m( SX3- >X3_CAMPO) $ " C6_FI LI AL" ) . And. cNi vel >= SX3-
>X3_NI VEL . And. X3Uso( SX3- >X3_USADO)
AADD( aCpoGDa, SX3- >X3_CAMPO)
EndI f
DbSki p( )
End

aAl t er GDa : = aCl one( aCpoGDa)

nUsado: =0
dbSel ect Ar ea( " SX3" )
dbSeek( " SC6" )
aHeader : ={}
Whi l e ! Eof ( ) . And. ( x3_ar qui vo==" SC6" )
I f X3USO( x3_usado) . And. cNi vel >=x3_ni vel
nUsado: =nUsado+1
AADD( aHeader , { TRI M( x3_t i t ul o) , x3_campo, x3_pi ct ur e, ;
x3_t amanho, x3_deci mal , " Al l waysTr ue( ) " , ;
x3_usado, x3_t i po, x3_ar qui vo, x3_cont ext } )
Endi f
dbSki p( )
End


- 515 -

ADVPL Completo



Exempl o ( cont i nuao) :

I f nOpc==3 / / I ncl ui r
aCol s: ={Ar r ay( nUsado+1) }
aCol s[ 1, nUsado+1] : =. F.
For nX: =1 t o nUsado

I F aHeader [ nX, 2] == " C6_I TEM"
aCol s[ 1, nX] : = " 0001"
ELSE
aCol s[ 1, nX] : =Cr i aVar ( aHeader [ nX, 2] )
ENDI F

Next
El se
aCol s: ={}
dbSel ect Ar ea( " SC6" )
dbSet Or der ( 1)
dbSeek( xFi l i al ( ) +M- >C5_NUM)
Whi l e ! eof ( ) . and. C6_NUM==M- >C5_NUM
AADD( aCol s, Ar r ay( nUsado+1) )
For nX: =1 t o nUsado
aCol s[ Len( aCol s) , nX] : =Fi el dGet ( Fi el dPos( aHeader [ nX, 2] ) )
Next
aCol s[ Len( aCol s) , nUsado+1] : =. F.
dbSki p( )
End
Endi f

oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. )

RegToMemor y( " SC5" , I f ( nOpc==3, . T. , . F. ) )

oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ;
aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , / *cMensagem*/ , ;
cTudoOk, oDl g, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y)

oGet D: = MsNewGet Dados( ) : New( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a, nOpc, ;
cLi nOk, cTudoOk, cI ni Cpos, aAl t er GDa, nFr eeze, nMax, cFi el dOk, cSuper Del , ;
cDel Ok, oDLG, aHeader , aCol s)

/ / Tr at ament o par a def i ni o de cor es espec f i cas,
/ / l ogo aps a decl ar ao da MsNewGet Dados

oGet D: oBr owse: l UseDef aul t Col or s : = . F.
oGet D: oBr owse: Set Bl kBackCol or ( {| | GETDCLR( oGet D: aCol s, oGet D: nAt , aHeader ) })

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, {| | oDl g: End( ) }, {| | oDl g: End( ) }, , aBut t ons) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n


- 516 -

ADVPL Completo



Exempl o ( cont i nuao) :

/ / Funo par a t r at ament o das r egr as de cor es par a a gr i d da MsNewGet Dados

St at i c Funct i on GETDCLR( aLi nha, nLi nha, aHeader )

Local nCor 2 : = 16776960 / / Ci ano - RGB( 0, 255, 255)
Local nCor 3 : = 16777215 / / Br anco - RGB( 255, 255, 255)
Local nPosPr od : = aScan( aHeader , {| x| Al l t r i m( x[ 2] ) == " C6_PRODUTO" })
Local nUsado : = Len( aHeader ) +1
Local nRet : = nCor 3

I f ! Empt y( aLi nha[ nLi nha] [ nPosPr od] ) . AND. aLi nha[ nLi nha] [ nUsado]
nRet : = nCor 2
El seI f ! Empt y( aLi nha[ nLi nha] [ nPosPr od] ) . AND. ! aLi nha[ nLi nha] [ nUsado]
nRet : = nCor 3
Endi f

Ret ur n nRet





























- 517 -

ADVPL Completo



37.3. Barras de botes

A linguagem ADVPL permite a implementao de barras de botes utilizando funes pr-
definidas desenvolvidas com o objetivo de facilitar sua utilizao, ou atravs da utilizao
direta dos componentes visuais disponveis. Dentre os recursos da linguagem que podem ser
utilizados com esta finalidade sero abordados:

E Funo EnchoiceBar: Sintaxe tradicionalmente utilizada em ADVPL, a qual no
retorna um objeto para a aplicao chamadora;

E Classe TBar: Classe do objeto TBar(), a qual permite a instanciao direta de um
objeto do tipo barra de botes superior, tornando-o disponvel na aplicao chamadora.

E Classe ButtonBar: Classe do objeto ButtonBar(), a qual permite a instanciao direta
de um objeto barra de botes genrico, o qual pode ser utilizado em qualquer posio
da tela, tornando-o disponvel na aplicao chamadora.


37.3.1. EnchoiceBar()

Funo que cria uma barra de botes no formato padro utilizado pelas interfaces de cadastro
da aplicao Protheus.

Esta barra possui os botes padres para confirmar ou cancelar a interface e ainda permite a
adio de botes adicionais com a utilizao do parmetro aButtons.


E Sintaxe:


EnchoiceBar( oDlg, bOk, bCancel, lMsgDel, aButtons, nRecno, cAlias)


E Parmetros:

oDlg Dialog onde ir criar a barra de botes
bOk Bloco de cdigo a ser executado no boto Ok
bCancel Bloco de cdigo a ser executado no boto Cancelar
lMsgDel Exibe dialog para confirmar a excluso
aButtons
Array contendo botes adicionais.
aArray[n][1] -> Imagem do boto
aArray[n][2] -> bloco de cdigo contendo a ao do boto
aArray[n][3] -> ttulo do boto
nRecno Registro a ser posicionado aps a execuo do boto Ok.
cAlias
Alias do registro a ser posicionado aps a execuo do boto
Ok. Se o parmetro nRecno for informado, o cAlias passa ser
obrigatrio.

E Aparncia:





- 518 -

ADVPL Completo


Exemplo: Utilizao da funo EnchoiceBar()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | DENCHBAR | Aut or | ARNALDO RAYMUNDO J R. | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao da f uno |
| | Enchoi ceBar ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on DEnchBar ( )
Local oDl g, oBt n
Local aBut t ons : = {}

DEFI NE MSDI ALOG oDl g TI TLE " Test e Enchoi ceBar " FROM 000, 000 TO 400, 600 PI XEL OF;
oMai nWnd

AADD( aBut t ons, {" HI STORI C" , {| | Test Hi st ( ) }, " Hi st r i co. . . " , ;
" Hi st r i co" , {| | . T. }} )

@- 15, - 15 BUTTON oBt n PROMPT " . . . " SI ZE 1, 1 PI XEL OF oDl g

ACTI VATE MSDI ALOG oDl g ;
ON I NI T ( Enchoi ceBar ( oDl g, {| | l Ok: =. T. , oDl g: End( ) }, {| | oDl g: End( ) }, , @aBut t ons) )

Ret ur n















- 519 -

ADVPL Completo



37.3.2. TBar()

Classe de objetos visuais que permite a implementao de um componente do tipo barra de
botes para a parte superior de uma janela previamente definida.

E Sintaxe: New(oWnd, nBtnWidth, nBtnHeight, l3D, cMode, oCursor, cResource,
lNoAutoAdjust)

E Retorno: oTBar objeto do tipo TBar()

E Parmetros:

oWnd
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
nBtnWidth Numrico, opcional. Largura do boto contido na barra
nBtnHeight Numrico, opcional. Altura do boto contido na barra
l3D Lgico, opcional. Define tipo da barra
cMode No utilizado.
oCursor
Objeto, opcional. Define Cursor ao posicionar o mouse sobre a
barra.
cResource
Caracter, opcional. Imagem do recurso a ser inserido como
fundo da barra.
lNoAutoAdjust Lgico.

E Aparncia:





Exemplo: Utilizao da funo EnchoiceBar()


#i ncl ude ' pr ot heus. ch'

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TSTBAR | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o TBar ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Tst TBar ( )
Local oDl g

oDl g : = MSDI ALOG( ) : New( 000, 000, 305, 505, ' Exempl o - TBAR' , , , , , , , , , . T. )

- 520 -

ADVPL Completo



Exemplo (continuao):

oTBar : = TBar ( ) : New( oDl g, 25, 32, . T. , , , , . F. )

oTBt nBmp2_1 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' copyuser ' , , , , ;
{| | Al er t ( ' TBt nBmp2_1' ) }, oTBar , ' msGet Ex' , , . F. , . F. )

oTBt nBmp2_2 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' cr i t i ca' , , , , ;
{| | }, oTBar , ' Cr i t i ca' , , . F. , . F. )

oTBt nBmp2_3 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' bmpcpo' , , , , ;
{| | }, oTBar , ' PCO' , , . F. , . F. )

oTBt nBmp2_4 : = TBt nBmp2( ) : New( 00, 00, 35, 25, ' pr eco' , , , , ;
{| | }, oTBar , ' Pr eo' , , . F. , . F. )

oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n



37.3.3. ButtonBar

A sintaxe ButtonBar a forma clssica utilizada na linguagem ADVPL para implementar um
objeto da classe TBar(), o qual possui as caractersticas mencionadas no tpico anterior.

E Sintaxe:


DEFINE BUTTONBAR oBar SIZE nWidth, nHeight 3D MODE OF oDlg
CURSOR


E Retorno: ().

E Parmetros:

oBar Objeto do tipo TBar() que ser criado com a utilizao da
sintaxe ButtonBar().
nWidth Numrico, opcional. Largura do boto contido na barra.
nHeight Numrico, opcional. Altura do boto contido na barra.
3D Se definido habilita a visualizao em 3D da barra de botes.
oDlg Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
MODE Define a forma de orientao do objeto ButtonBar utilizando
os seguintes termos pr-definidos:
TOP, BOTTOM, FLOAT

CURSOR Objeto, opcional. Define Cursor ao posicionar o mouse sobre
a barra.


- 521 -

ADVPL Completo


A sintaxe ButtonBar requer a adio dos botes como recursos adicionais da barra
previamente definida utilizando a sintaxe abaixo:

E Botes: BUTTON RESOURCE

E Sintaxe adicional:


DEFINE BUTTON RESOURCE cBitMap OF oBar ACTION cAcao TOOLTIP
cTexto


E Parmetros:

cBitMap Nome da imagem disponvel na aplicao.
oBar Objeto do tipo TBar() no qual o boto ser adicionado.
cAcao Funo ou lista de expresses que determina a ao que ser
realizada pelo boto.
cTexto Texto no estilo tooltip text que ser exibido quando o
cursor do mouse for posicionado sobre o boto na barra de
ferramentas.

E Aparncia:





Exemplo: Utilizao da sintaxe ButtonBar


#i ncl ude ' pr ot heus. ch'

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | Tst BBar | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Pr ogr ama que demonst r a a ut i l i zao do obj et o TBar ( ) |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on Tst BBar ( )

Local oDl g
Local oBt n1
Local oBt n2

oDl g : = MSDI ALOG( ) : New( 000, 000, 305, 505, ' Exempl o - BUTTONBAR' , , , , , , , , , . T. )

DEFI NE BUTTONBAR oBar SI ZE 25, 25 3D TOP OF oDl g

- 522 -

ADVPL Completo



Exemplo (continuao):

DEFI NE BUTTON RESOURCE " S4WB005N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Recor t ar "
DEFI NE BUTTON RESOURCE " S4WB006N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Copi ar "
DEFI NE BUTTON RESOURCE " S4WB007N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Col ar "
DEFI NE BUTTON oBt n1 RESOURCE " S4WB008N" OF oBar GROUP;
ACTI ON Cal cul ador a( ) TOOLTI P " Cal cul ador a"

oBt n1: cTi t l e: =" Cal c"
DEFI NE BUTTON RESOURCE " S4WB009N" OF oBar ACTI ON Agenda( ) TOOLTI P " Agenda"
DEFI NE BUTTON RESOURCE " S4WB010N" OF oBar ACTI ON Our Spool ( ) TOOLTI P " Spool "
DEFI NE BUTTON RESOURCE " S4WB016N" OF oBar GROUP;
ACTI ON Hel Pr og( ) TOOLTI P " Aj uda"

DEFI NE BUTTON oBt n2 RESOURCE " PARAMETROS" OF oBar GROUP;
ACTI ON Sx1C020( ) TOOLTI P " Par met r os"

oBt n2: cTi t l e: =" Par am. "

DEFI NE BUTTON oBt Ok RESOURCE " FI NAL" OF oBar GROUP;
ACTI ON oDl g: End( ) TOOLTI P " Sai r "

oBar : bRCl i cked : = {| | Al l waysTr ue( ) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

Ret ur n




















- 523 -

ADVPL Completo



37.3.4. Imagens pr-definidas para as barras de botes

Conforme mencionado nos tpicos anteriores, os botes visuais do tipo barra de botes
permitem a definio de itens com aes e imagens vinculadas.

Dentre os objetos e funes mencionados, foi citada a EnchoiceBar(), a qual permite a adio
de botes adicionais atravs do parmetro aButton, sendo que os itens deste array devem
possuir o seguinte formato:

E Sintaxe: AADD(aButtons,{cBitMap, bAcao, cTexto})

E Estrutura:

cBitMap
Nome da imagem pr-definida existente na aplicao ERP que
ser vinculada ao boto.
bAcao
Bloco de cdigo que define a ao que ser executada com a
utilizao do boto.
cTexto
Texto no estilo tooltip text que ser exibido quando o cursor
do mouse for posicionado sobre o boto na barra de
ferramentas.

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( aBut t ons, {" USER" , {| | Al l waysTr ue( ) }, " Usur i o" })



- 524 -

ADVPL Completo



38. Outras aplicaes da interface visual do ADVPL


38.1. MaWndBrowse()

E Descrio: Browse que permite a visualizao de registros para arquivos / tabelas que
no possuem estrutura definida no Dicionrio de Dados do sistema.

E Sintaxe: MaWndBrowse (nLin1, nCol1, nLin2, nCol2, cTitle, cAlias, aCampos, aRotina,
cFunLeg, cTopFun, cBotFun, lCentered, aResource, nMod, aPesqui, cSeek,
lDic, lSavOrd)

E Parmetros:

nLin1 Linha inicial do browse
nCol1 Coluna inicial do browse
nLin2 Linha final do browse
nCol2 Coluna final do browse
cTitle Ttulo do browse (obrigatrio)
cAlias Alias da tabela corrente podendo ser um temporrio
aCampos
Se lDic=.T. utilizar o SX3, do contrrio o aCampos
informado
aRotina Idntico ao aRotina para mBrowse
cFunLeg
Funo que dever retornar um valor lgico e com isso ser
atribudo semafro na primeira coluna do browse
cTopFun Mostrar os registros com a chave de
cBotFun Mostrar os registros com a chave ate
lCentered Valor verdadeiro centraliza
aResource aAdd(aResource,{"IMAGEM","Texto significativo"})
nModelo
Posio do Menu:
1- Horizontal (superior)
2- Vertical (esquerda)
3- Horizontal (inferior)
aPesqui
aAdd(aPesqui{"Ttulo",nOrdem}), se no passado ser
utilizado o AxPesqui
cSeek Chave principal para a busca, exemplo: xFilial("???")
lDic Parmetro em conjunto com aCampos
lSavOrd Estabelecer a ordem aps pesquisas.

E Estrutura do array aCampos

aAdd(aCampo,{X3_CAMPO,X3_PICTURE,X3_TITULO,X3_TAMANHO})

- 525 -

ADVPL Completo



E Aparncia:



Exemplo: MaWndBrowse para arquivo temporrio


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | WndBr wTRB | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Demonst r a a ut i l i zao da MaWndBr owse comTempor r i o |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on WndBr wTRB( )

/ / Var i vei s par a o Ar qui vo Tempor ar i o
Local cChave : = " "
Local cAr qTr b : = " "
Local aSt r uTRB : = {}

/ / Var i vei s par a o MaWndBr owse
Local cTi t ul o : = " Cadast r o Tempor ar i o" / / T t ul o obr i gat r i o
Local cAl i as : = " TRB" / / Al i as da t abel a cor r ent e podendo ser TRB
Local cFunLeg : = " " / / Funo que dever r et or nar umval or l gi co e comi sso
ser at r i bu do semaf r o na pr i mei r a col una do br owse
Local cTopFun : = " " / / Most r ar os r egi st r os coma chave de
Local cBot Fun : = " " / / Most r ar os r egi st r os coma chave at e
Local l Cent er ed : = . T. / / Val or ver dadei r o cent r al i za
Local aResour ce : = {} / / aAdd( aResour ce, {" I MAGEM" , " Text o si gni f i cat i vo" })
Local nModel o : = 1 / / 1- Menu do aRot i na
Local aPesqui : = {} / / aAdd( aPesqui {" T t ul o" , nOr dem}) , se no passado ser
ut i l i zado o AxPesqui
Local cSeek : = " " / / Chave pr i nci pal par a a busca, exempl o: xFi l i al ( " ???" )
Local l Di c : = . F. / / Par met r o emconj unt o comaCampos
Local l SavOr d : = . T. / / Est abel ecer a or demaps pesqui sas.

- 526 -

ADVPL Completo



/ / Var i avei s par a a MsAdvSi ze
Local l EnchBar : = . F. / / Se a j anel a de di l ogo possui r enchoi cebar ( . T. )
Local l Padr ao : = . F. / / Se a j anel a deve r espei t ar as medi das padr es do
/ / Pr ot heus ( . T. ) ou usar o mxi mo di spon vel ( . F. )
Local nMi nY : = 400 / / Al t ur a m ni ma da j anel a

Local aSi ze : = MsAdvSi ze( l EnchBar , l Padr ao, nMi nY)

Pr i vat e cCadast r o : = " "
Pr i vat e aCampos : = {} / / Se l Di c=. T. ut i l i zar o SX3, do cont r r i o o aCampos
/ / i nf or mado - > aAdd( aCampo, {X3_CAMPO, X3_PI CTURE, X3_TI TULO, X3_TAMANHO})
Pr i vat e aRot i na : = {} / / I dnt i co ao aRot i na par a mBr owse

aAdd( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1})
aAdd( aRot i na, {" Vi sual i zar " , " U_TVi sual " , 0, 2})
aAdd( aRot i na, {" I ncl ui r " , " U_TI ncl ui " , 0, 3})
aAdd( aRot i na, {" Al t er ar " , " U_TAl t er a" , 0, 4})
aAdd( aRot i na, {" Excl ui r " , " U_TExcl ui " , 0, 5})

/ / Est r ut ur a do Ar qui vo: Nome do campo / t i po, t amanho, deci mai s ( SX3 par a
/ / t empor r i o)
AADD( aSt r uTRB, {" TRB_FI LI AL" , " C" , 02, 0}) / / Nome_Campo , Ti po_Campo,
/ / Tamanho, Deci mal
AADD( aSt r uTRB, {" TRB_I D" , " C" , 14, 0})
AADD( aSt r uTRB, {" TRB_NOME" , " C" , 20, 0})
AADD( aSt r uTRB, {" TRB_I DADE" , " N" , 03, 0})
AADD( aSt r uTRB, {" TRB_STATUS" , " C" , 01, 0})

/ / aCampos padr o par a a MaWndBr owse
/ / AADD( aCampos, {<Nome_Campo>, <Pi ct ur e>, <Ti t ul o>, <Tamanho>})

/ / aCampos mel hor ado par a a WndBr wTRB
/ / AADD( aCampos, {<Nome_Campo>, <Pi ct ur e>, <Ti t ul o>, <Tamanho>, <Ti po>, <cWhen>, <l Obr i g
/ / at or i o>})
/ / Not a: l Obr i gat or i o deve ser sempr e a ul t i ma i nf or macao do aCampos

AADD( aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02, " C" , " . F. " , . T. })
AADD( aCampos, {" TRB_I D" , " @! " , " Mat r i cul a" , 14, " C" , " . F. " , . T. })
AADD( aCampos, {" TRB_NOME" , " @! " , " Nome" , 20, " C" , " . T. " , . F. })
AADD( aCampos, {" TRB_I DADE" , " @E 999" , " I dade" , 03, " N" , " . T. " , . F. })
AADD( aCampos, {" TRB_STATUS" , " @! " , " St at us" , 01, " C" , " . T. " , . T. })

I f ( Sel ect ( " TRB" ) <> 0 )
dbSel ect Ar ea ( " TRB" )
dbCl oseAr ea ( )
Endi f

/ /
/ / Cr i o ar q. de t r ab. p/ gr avar as i nconsi st enci as.
/ /
cAr qTr b : = Cr i aTr ab( aSt r uTRB, . t . )
dbUseAr ea( . T. , , cAr qTr b, " TRB" , . T. , . F. )

cChave : = " TRB_FI LI AL+TRB_I D"
I ndRegua( " TRB" , cAr qTr b, cChave, , , " Sel eci onando Regi st r os. . . " )





- 527 -

ADVPL Completo


dbSel ect Ar ea( " TRB" )
MaWndBr owse( aSi ze[ 7] , aSi ze[ 2] , aSi ze[ 6] , aSi ze[ 5] , cTi t ul o, cAl i as, aCampos, aRot i na, ,
cTopFun, cBot Fun, l Cent er ed, , nModel o, , cSeek, l Di c, l SavOr d)

I f ( Sel ect ( " TRB" ) <> 0 )
dbSel ect Ar ea ( " TRB" )
dbCl oseAr ea ( )
Endi f

Ret ur n



38.1.1. Enchoice para Arquivos Temporrios

Para aproveitar inteiramente o recurso da MaWndBrowse utilizada com arquivos
temporrios, necessrio implementar uma funo do tipo Enchoice para realizar as
operaes de Visualizar, Incluir, Alterar e Excluir os registros deste arquivo / tabela.

Com foco nesta necessidade, foi desenvolvida para o curso de ADVPL a funo
TEnchoice.

E Descrio: Funo para manipulao de registros de um arquivo temporrio simular a
Enchoice do ambiente Protheus.

E Sintaxe: TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE, lEnchBar)

E Parmetros:

oDlg Objeto Dialog no qual a TEnchoice ser vinculada
aCampos Estrutura de campos para exibio da tela da TEnchoice
nLeftE Coordenada horizontal em pixels.
nTopE Coordenada vertical em pixels.
nHeightE Altura em pixels
nWidthE Largura em pixels.
lEnchBar Se a enchoice ser montada em conjunto com uma barra de
botes do tipo Enchoicebar()

E Pr-requisitos da funo chamadora:

Para correta utilizao da funo TEnchoice so necessrios os seguintes tratamentos /
definies na funo chamadora:


E Tratamento 01: Montagem do array aCampos

O array aCampos utilizado pela TEnchoice possui basicamente o mesmo formato do
array utilizado pela funo Modelo2().

"<Variavel>" Nome da varivel Private que est vinculada ao campo
digitvel.
{nLinha,nColuna} Posio em pixels do campo na Enchoice.
"<Titulo>" Ttulo do campo.
"<Picture>" Picture de formatao do campo.
"<Validacao>" Validao do campo digitvel.
"<F3>" Consulta F3 vinculada ao campo.

- 528 -

ADVPL Completo


"<lWhen>" Se o campo est editvel.
<Tamanho> Tamanho do campo para visualizao.


AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una} , " <Ti t ul o>" , ;
" <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , ;
<Tamanho>})



E Tratamento 02: Definio das dimenses da TEnchoice

Os parmetros de dimenso da TEnchoice no precisam se informados, pois ela ir se
ajustar ao tamanho do objeto Dialog ao qual for vinculado, caso o objetivo seja que a
TEnchoice ocupe toda a rea disponvel do objeto.

importante especificar se o Dialog ir conter uma EnchoiceBar() para que a
TEnchoice() seja posicionada adequadamente no objeto.

E Aparncia:






E Detalhamento da funo TEnchoice:

- 529 -

ADVPL Completo




/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TEnchoi ce | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on TEnchoi ce( oDl g, aCampos, nLef t E, nTopE, nHei ght E, nWi dt hE, ;
l EnchBar )

Local aSays : = {}
Local aGet s : = {}
Local cCapt i on : = " "
Local cPi ct : = " "
Local cVal i d : = " "
Local cF3 : = " "
Local cWhen : = " "
Local cBl KSay : = " "
Local cBl kGet : = " "
Local cBl KVl d : = " "
Local cBl KWhen : = " "
Local nLef t : = 0
Local nTop : = 0
Local nI : = 0

Def aul t l EnchBar : = . F.
Def aul t nLef t E : = I I F( l EnchBar , ( oDl g: nLef t ) +16, 2)
Def aul t nTopE : = 2
Def aul t nHei ght E : = ( oDl g: nHei ght ) - 135
Def aul t nWi dt hE : = ( oDl g: nWi dt h) - 102
/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aC, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})

I f Len( aCampos) > 0

oScr ol l : = TScr ol l Box( ) : New( oDl g, nLef t E, nTopE, nHei ght E , nWi dt hE, . T. , ;
. T. , . T. )

For nI : =1 t o Len( aCampos)

I f Len( aCampos[ nI ] ) ==8

cCampo : = aCampos[ nI , 1]
nLef t : = aCampos[ nI , 2, 1] - 13
nTop : = aCampos[ nI , 2, 2]
cCapt i on: = I i f ( Empt y( aCampos[ nI , 3] ) , " " , aCampos[ nI , 3] )
cPi ct : = I i f ( Empt y( aCampos[ nI , 4] ) , Ni l , aCampos[ nI , 4] )
cVal i d : = I i f ( Empt y( aCampos[ nI , 5] ) , " . t . " , aCampos[ nI , 5] )
cF3 : = I i f ( Empt y( aCampos[ nI , 6] ) , NI L , aCampos[ nI , 6] )
cWhen : = I i f ( Empt y( aCampos[ nI , 7] ) , " . T. " , aCampos[ nI , 7] )


nWi dt hG : = I i f ( Empt y( aCampos[ nI , 8] ) , 100, ;
I i F( aCampos[ nI , 8] *3. 5 > 100, 100, ni l ) )

- 530 -

ADVPL Completo



cBl KSay : = " {| | OemToAnsi ( ' " +cCapt i on+" ' ) }"
cBl kGet : = " { | u | I f ( PCount ( ) == 0, ;
" +cCampo+" , " +cCampo+" : = u ) }"
cBl KVl d : = " {| | " +cVal i d+" }"
cBl KWhen : = " {| | " +cWhen+" }"

AADD( aSays, Ar r ay( 1) )
aSays[ nI ] : = TSay( ) : New( nLef t +1, nTop, &( cBl kSay) , oScr ol l , , , ;
. F. , . F. , . F. , . T. , , , 50, 8, . F. , . F. , . F. , . F. , ;
. F. )
AADD( aGet s, Ar r ay( 1) )

aGet s[ nI ] : = TGet ( ) : New( nLef t , nTop+50, &( cBl KGet ) , oScr ol l , ;
nWi dt hG, 11, cPi ct , &( cBl kVl d) , , , , . F. , , . T. , , ;
. F. , &( cBl kWhen) , . F. , . F. , , . F. , . F. , cF3, ;
( cCampo) )

EndI f
Next
Endi f

Ret ur n
























- 531 -

ADVPL Completo



Exemplo: Funo TVisual ( MaWndBrowse com TEnchoice)


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TVi sual | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TVi sual ( cAl i as, nReg, nOpc)

LOCAL aCposEnch : = {}
LOCAL nLi nha : = 15
LOCAL nCol una : = 10
LOCAL nOpcE : = aRot i na[ nOpc] [ 4] / / Opcao de ver dade
LOCAL bOk : = {| | oDl g: End( ) }
LOCAL bCancel : = {| | oDl g: End( ) }
LOCAL nX

/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})
/ / aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02}

For nX : = 1 t o Len( aCampos)

I f nX > 1
nLi nha : = I I F( nX%2 > 0 , nLi nha : = nLi nha +015, nLi nha) / / I mpar
nCol una : = I I F( nX%2 == 0, nCol una : = nCol una+170, 10) / / Par
Endi f

AADD( aCposEnch, {" _" +aCampos[ nX] [ 1] , {nLi nha, nCol una} , ;
aCampos[ nX] [ 3] , aCampos[ nX] [ 2] , " Al l waysTr ue( ) " , ;
" " , " . F. " , aCampos[ nX] [ 4] })

Set Pr vt ( " _" +aCampos[ nX] [ 1] )

&( " _" +aCampos[ nX] [ 1] ) : = ( cAl i as) - >&( aCampos[ nX] [ 1] )

Next nX

oDl g : = TDi al og( ) : New( 000, 000, 400, 650, cCadast r o, , , , , , , , , . T. )

TEnchoi ce( oDl g, aCposEnch, , , , , . T. )

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, bOk, bCancel , . F. , {}, nReg, cAl i as) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

RETURN


- 532 -

ADVPL Completo



Exemplo: Funo TInclui ( MaWndBrowse com TEnchoice)


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TI ncl ui | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TI ncl ui ( cAl i as, nReg, nOpc)

LOCAL aCposEnch : = {}
LOCAL nLi nha : = 15
LOCAL nCol una : = 10
LOCAL nOpcE : = aRot i na[ nOpc] [ 4] / / Opcao de ver dade
LOCAL bOk
LOCAL bCancel : = {| | oDl g: End( ) }
LOCAL aAr ea : = Get Ar ea( )
LOCAL nX

/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})
/ / aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02}

For nX : = 1 t o Len( aCampos)

I f nX > 1
nLi nha : = I I F( nX%2 > 0 , nLi nha : = nLi nha +015, nLi nha) / / I mpar
nCol una : = I I F( nX%2 == 0, nCol una : = nCol una+170, 10) / / Par
Endi f

AADD( aCposEnch, {" _" +aCampos[ nX] [ 1] , {nLi nha, nCol una} , ;
aCampos[ nX] [ 3] , aCampos[ nX] [ 2] , " Al l waysTr ue( ) " , ;
" " , " . T. " , aCampos[ nX] [ 4] })

Set Pr vt ( " _" +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

oDl g : = TDi al og( ) : New( 000, 000, 400, 650, cCadast r o, , , , , , , , , . T. )


- 533 -

ADVPL Completo


TEnchoi ce( oDl g, aCposEnch, , , , , . T. )

bOk : = {| | I I F( U_TVal i d( cAl i as, nReg, nOpcE, aCampos) , ;
( U_TGr avar ( cAl i as, nReg, nOpcE, aCampos) , oDl g: End( ) ) , ) }

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, bOk, bCancel , . F. , {}, nReg, cAl i as) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

RETURN

Exemplo: Funo TAltera ( MaWndBrowse com TEnchoice)


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TAl t er a | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TAl t er a( cAl i as, nReg, nOpc)

LOCAL aCposEnch : = {}
LOCAL nLi nha : = 15
LOCAL nCol una : = 10
LOCAL nOpcE : = aRot i na[ nOpc] [ 4] / / Opcao de ver dade
LOCAL bOk
LOCAL bCancel : = {| | oDl g: End( ) }
LOCAL aAr ea : = Get Ar ea( )
LOCAL nX

/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})
/ / aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02}

For nX : = 1 t o Len( aCampos)

I f nX > 1
nLi nha : = I I F( nX%2 > 0 , nLi nha : = nLi nha +015, nLi nha) / / I mpar
nCol una : = I I F( nX%2 == 0, nCol una : = nCol una+170, 10) / / Par
Endi f

AADD( aCposEnch, {" _" +aCampos[ nX] [ 1] , {nLi nha, nCol una} , ;
aCampos[ nX] [ 3] , aCampos[ nX] [ 2] , " Al l waysTr ue( ) " , ;
" " , aCampos[ nX] [ 6] , aCampos[ nX] [ 4] })

Set Pr vt ( " _" +aCampos[ nX] [ 1] )

&( " _" +aCampos[ nX] [ 1] ) : = ( cAl i as) - >&( aCampos[ nX] [ 1] )

Next nX

oDl g : = TDi al og( ) : New( 000, 000, 400, 650, cCadast r o, , , , , , , , , . T. )


- 534 -

ADVPL Completo


TEnchoi ce( oDl g, aCposEnch, , , , , . T. )

bOk : = {| | I I F( U_TVal i d( cAl i as, nReg, nOpcE, aCampos) , ;
( U_TGr avar ( cAl i as, nReg, nOpcE, aCampos) , oDl g: End( ) ) , ) }

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, bOk, bCancel , . F. , {}, nReg, cAl i as) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

RETURN


Exemplo: Funo TExclui ( MaWndBrowse com TEnchoice)


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TExcl ui | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TExcl ui ( cAl i as, nReg, nOpc)

LOCAL aCposEnch : = {}
LOCAL nLi nha : = 15
LOCAL nCol una : = 10
LOCAL nOpcE : = aRot i na[ nOpc] [ 4] / / Opcao de ver dade
LOCAL bOk
LOCAL bCancel : = {| | oDl g: End( ) }
LOCAL nX

/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})
/ / aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02}

For nX : = 1 t o Len( aCampos)

I f nX > 1
nLi nha : = I I F( nX%2 > 0 , nLi nha : = nLi nha +015, nLi nha) / / I mpar
nCol una : = I I F( nX%2 == 0, nCol una : = nCol una+170, 10) / / Par
Endi f

AADD( aCposEnch, {" _" +aCampos[ nX] [ 1] , {nLi nha, nCol una} , ;
aCampos[ nX] [ 3] , aCampos[ nX] [ 2] , " Al l waysTr ue( ) " , ;
" " , " . F. " , aCampos[ nX] [ 4] })

Set Pr vt ( " _" +aCampos[ nX] [ 1] )

&( " _" +aCampos[ nX] [ 1] ) : = ( cAl i as) - >&( aCampos[ nX] [ 1] )

Next nX

oDl g : = TDi al og( ) : New( 000, 000, 400, 650, cCadast r o, , , , , , , , , . T. )


- 535 -

ADVPL Completo



TEnchoi ce( oDl g, aCposEnch, , , , , . T. )

bOk : = {| | I I F( U_TVal i d( cAl i as, nReg, nOpcE, aCampos) , ;
( U_TGr avar ( cAl i as, nReg, nOpcE, aCampos) , oDl g: End( ) ) , ) }

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, bOk, bCancel , . F. , {}, nReg, cAl i as) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

RETURN

Exemplo: Funo TValid ( MaWndBrowse com TEnchoice)


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TVal i d | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TVal i d( cAl i as, nReg, nOpc, aCampos)
LOCAL l Ret
LOCAL nX
LOCAL nPosObr i g : = Len( aCampos[ 1] )

For nX : = 1 t o Len( aCampos)
I F aCampos[ nX, nPosObr i g] == . T.
I F ! ( l Ret : = ! Empt y( &( " _" +aCampos[ nX, 1] ) ) )
Hel p( " TEnchoi ce" , 1, " HELP" , " OBRI GATORI O" , " Exi st emcampos
obr i gat or i os nao pr eenchi dos" , 1, 0)
RETURN l Ret / / EXI T
ENDI F
ENDI F
Next nX

I F nOpc == 3
I F ! ( l Ret : = ! ( ( cAl i as) - >( dbSeek( _TRB_FI LI AL+_TRB_I D) ) ) )
Hel p( " TEnchoi ce" , 1, " HELP" , " I NCLUSAO" , " J a exi st e umr egi st r o comest a
chave" , 1, 0)
ENDI F
ELSE
I F ! ( l Ret : = ( cAl i as) - >( dbSeek( _TRB_FI LI AL+_TRB_I D) ) )
Hel p( " TEnchoi ce" , 1, " HELP" , " ALTERACAO" , " Nao exi st e umr egi st r o com
est a chave" , 1, 0)
ENDI F
ENDI F

RETURN l Ret



- 536 -

ADVPL Completo



Exemplo: Funo TGravar ( MaWndBrowse com TEnchoice)


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TGr avar | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TGr avar ( cAl i as, nReg, nOpc, aCampos)
LOCAL nX

RecLock( cAl i as, nOpc==3)
I F nOpc == 5
DbDel et e( )
ELSE
For nX : = 1 t o Len( aCampos)
( cAl i as) - >&( aCampos[ nX] [ 1] ) : = &( " _" +aCampos[ nX] [ 1] )
Next nX
ENDI F
Msunl ock( )

RETURN




















- 537 -

ADVPL Completo




38.2. DbTree()

E Descrio: Classe Advpl que permite a criao de um objeto visual do tipo Tree.

E Propriedades:

bChange Armazena o code-block executado quando da mudana de
foco entre elementos do Tree atual.


E Mtodos principais:

New
Contrutor da Classe DbTree.
Retorna uma nova instncia do Objeto da Classe DbTree.
AddTree
Atravs do mtodo AddTree, possvel acrescentar um 'n'
na rvore atual.
Uma vez acrescentado o n, as prximas incluses de itens
na parvore sero realizadas neste n, at que o mesmo
seja fechado atravs do mtodo EndTree.
AddTreeItem
Atravs dele, podemos acrescentar itens na rvore atual ou
ltimo n acrescentado em aberto.
EndTree
Deve ser utilizado aps todos os elementos e itens serem
acrescentados a um n da rvore, aberto com o mtodo
AddTree().


E Aparncia:







- 538 -

ADVPL Completo



Mtodo: New()

E Sintaxe: DbTree():New ( [ nTop ] , [ nLeft ] , [ nBottom ] , [ nRight ] , [oWnd] ,
[ bchange ] , [ bRClick ] , [ lCargo ] , [ lDisable ] )

E Parmetros:

nTop Coordenada vertical superior do Objeto.
nLeft Coordenada horizontal esquerda do Objeto.
nBottom Coordenada vertical inferior do Objeto.
nRight Coordenada horizontal direita do Objeto.
oWnd Janela pai do Objeto Tree
bchange
Code-Block contendo a ao a ser edxecutada na mudana
de foco enrte os elementos da rvore.
bRClick
Code-Block a ser executado quando pressionado o boto
direito do Mouse sobre um elemento da rvoew.
lCargo
Se .T., indica que os elementos do Tree utilizaro a
propriedade CARGO, capaz de armazenar uma string
identificadora, fornecida na montagem para cada elemento
e item da rvore.
lDisable
Se .T., cria o objeto do Tree desabilitado, no permitindo
foco e navegao no mesmo qneuando ele no seja
habilitado.

E Retorno:

Objeto Retorna uma nova instncia do Objeto da Classe DbTree.


Mtodo: AddTree()

E Sintaxe: oObj:AddTree ( < cLabel > , [ lPar02 ] , [ cResOpen ] , [ cResClose ] ,
[ cBMPOpen ] , [ cBMPClose ] , [ cCargo ] )

E Parmetros:

cLabel Ttulo do "n" da rvore a ser acrescentado.
lPar02 (reservado)
cResOpen
Resource do RPO a ser utilizado quando o n estiver
aberto.
cResClose
Resource do RPO (bitmap) a ser utilizado quando o n
estiver fechado.
cBMPOpen
Path + Imagem bitmap a ser utilizada quando o n[o estiver
aberto.

A especificao de imagens a partir dos parametros
cBMPOpen e cBMPClose apenas ser considerada caso os
parmetros cResOpen e cResClose no forem
especificados.
cBMPClose
Path + Imagem bitmap a ser utilizada quando o n estiver
fechado.

A especificao de imagens a partir dos parametros
cBMPOpen e cBMPClose apenas ser considerada caso os

- 539 -

ADVPL Completo


parmetros cResOpen e cResClose no forem
especificados.
cCargo
String com valor nico, fornecido para identificar o n
atual. Pode ser recuperado posteriormente durante a
navegao.


E Retorno:

Nenhum -


Mtodo: AddTreeItem()

E Sintaxe: oObj:AddTreeItem ( <cLabel> , [cResource] , [cBitMap] , [cCargo] )

E Parmetros:

cLabel Ttulo do item da rvore.
cResource
Resource (BMP) do repositrio, a ser mostrado esquerda
do ttulo do item.
cBitMap
Arquivo de imagem (bitmap) a ser mostrado esquerda do
ttulo do item.

Este parm,etro apenas ser considerado caso o parmetro
cResource no for informado.
cCargo
atravs dele, podemos especificar uma string de
identificao para este item na rvore.

E Retorno:

Nenhum -


Mtodo: EndTree()

E Sintaxe: oObj:EndTree ( )

E Parmetros:

Nenhum

E Retorno:

Nenhum


- 540 -

ADVPL Completo



Exemplo:


#i ncl ude " Pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TDBTr ee | Aut or | MI CROSI GA | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Exempl o de ut i l i zao da f uno DbTr ee |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on TDBTr ee( )
Local cBmp1 : = " PMSEDT3"
Local cBmp2 : = " PMSDOC"
Pr i vat e cCadast r o : = " Meu Comput ador "
Pr i vat e oDl g
Pr i vat e oDBTr ee

DEFI NE MSDI ALOG oDl g TI TLE cCadast r o FROM 0, 0 TO 240, 500 PI XEL

oDBTr ee : = dbTr ee( ) : New( 10, 10, 95, 240, oDl g, {| | U_Pr oc( oDBTr ee: Get Car go( ) ) }, ;
, . T. )

oDBTr ee: AddTr ee( " Pent i um4" +Space( 24) , . T. , cBmp1, cBmp1, , , " 1. 0" )

oDBTr ee: AddTr eeI t em( " Gabi net e" , cBmp2, , " 1. 1" )
oDBTr ee: AddTr eeI t em( " Moni t or " , cBmp2, , " 1. 2" )
oDBTr ee: AddTr eeI t em( " Tecl ado" , cBmp2, , " 1. 3" )
oDBTr ee: AddTr eeI t em( " Mouse" , cBmp2, , " 1. 4" )
oDBTr ee: AddTr eeI t em( " Som" , cBmp2, , " 1. 5" )
oDBTr ee: AddTr ee( " Pl aca Me" , . T. , cBmp1, cBmp1, , , " 2. 0" )
oDBTr ee: AddTr eeI t em( " Pr ocessador " , cBmp2, , " 2. 1" )
oDBTr ee: AddTr eeI t em( " Memr i a" , cBmp2, , " 2. 2" )
oDBTr ee: AddTr eeI t em( " V deo" , cBmp2, , " 2. 3" )
oDBTr ee: AddTr eeI t em( " Font e" , cBmp2, , " 2. 4" )

oDBTr ee: EndTr ee( )

oDBTr ee: EndTr ee( )

DEFI NE SBUTTON FROM 107, 213 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g
ACTI VATE MSDI ALOG oDl g CENTER

Ret ur n












- 541 -

ADVPL Completo



User Funct i on Pr oc( cCar go)
Local cRet : = " "

I f cCar go == " 1. 1"
MsgI nf o( " Gabi net e Tor r e com4 bai as - Pr et o, comuni dade de l ei t ur a e+;
gr avao de CD/ DVD" , cCadast r o)
El sei f cCar go == " 1. 2"
MsgI nf o( " Moni t or LCD 17' - LG" , cCadast r o)
El sei f cCar go == " 1. 3"
MsgI nf o( " Tecl ado mul t i m di a comf unes de i nt er net e e- mai l " , cCadast r o)
El sei f cCar go == " 1. 4"
MsgI nf o( " Mouse Opt i co semf i o" , cCadast r o)
El sei f cCar go == " 1. 5"
MsgI nf o( " 2 Cai xas de Som- 50WRMS Cada" , cCadast r o)
El sei f cCar go == " 2. 1"
MsgI nf o( " Pr ocessador Pent i um4 - 3. 8 Ghz" , cCadast r o)
El sei f cCar go == " 2. 2"
MsgI nf o( " 1 Pent e de Memr i a de 1Gb - DDR 500" , cCadast r o)
El sei f cCar go == " 2. 3"
MsgI nf o( " Pl aca de V deo GeoFor ce 5000 com256Mb" , cCadast r o)
El sei f cCar go == " 2. 4"
MsgI nf o( " Font e de Al i ment ao de 500W" , cCadast r o)
Endi f

Ret ur n
























- 542 -

ADVPL Completo


38.3. MsSelect()

E Descrio: A classe MsSelect cria um objeto browse (ou grid), com a primeira coluna
sendo do tipo marcao.

E Propriedades:

oWnd
Objeto pai da MsSelect (MSDIALOG, MSWINDOW,
MSPANEL)
oBrowse
Objeto browse (ou grid) da MsSelect, herdado da classe
TCBROWSE


E Mtodos principais:

New Contrutor da Classe MsSelect.
Retorna uma nova instncia do Objeto da Classe MsSelect.


E Aparncia:







- 543 -

ADVPL Completo



Mtodo: New()

E Sintaxe: MsSelect():NEW ( < cAlias > , [ cCampo ] , [ cCpo ] , [ aCampos ] , [
lInv ] , [ cMar ] , [ aCord ] , [ cTopFun ] , [ cBotFun ] , [ oWnd ] , [
reserved ] , [ aColors ] )
E Parmetros:

cAlias Tabela que ser utilizada pela MsSelect
cCampo Campo que ser utilizado na coluna de marcao
cCpo
Campo da tabela informada pelo parametro cAlias ou
funo que ser executada na apresentao da coluna que
indica se a linha da MsSelect esta habilitada ou no
aCampos
Vetor com informaes dos campos para criao das
colunas da MsSelect. Se no for informado, a MsSelect ir
criar as colunas baseado no Dicionrio de Campos (SX3) da
tabela informada no parametro cAlias.
Formato:
1 - campo ou bloc de cdigo com contedo que ser
apresentado na coluna pela MsSelect
2 - no utilizado
3 - cabealho
4 - mcara de apresentao (picture)
lInv Indica se MsSelect ir utilizar marcao invertida
cMar
Marca que ser utilizada pela MsSelect para controle do
campo informado pelo parametro cCampo. Para utilizar o
parametro cMar, utilize a funo GetMark para retornar a
prxima marca.
aCord
Coordenadas para criao da MsSelect.
Formato:
1 - Linha inicial
2 - Coluna inicial
3 - Linha final
4 - Coluna final
cTopFun
Funo que retornar o contedo inicial que a MsSelect
utilizar para apresentar a primeira linha da tabela, como
um range, junto com o parametro cBotFun.
O contedo retornado ser utilizado para fazer o
posicionamento da tabela informada pelo parametro cAlias,
baseado na chave de ndice posicionada para a mesma.
cBotFun
Funo que retornar o contedo final que a MsSelect
utilizar para apresentar a ltima linha da tabela, como um
range, junto com o parametro cTopFun.
O contedo retornado ser utilizado para o posicionamento
final da tabela informada pelo parametro cAlias, baseado
na chave de ndice posicionada para a mesma
oWnd
Objeto pai da MsSelect (MSDIALOG, MSWINDOW,
MSPANEL, etc.)
reserved Parametro reservado
aColors
Vetor com regras para a apresentao da coluna de
legenda.
Formato:
1 - Expresso ADVPL com retorno lgico que indica se a
cor ser utilizada pela coluna
2 - cor da coluna:

- 544 -

ADVPL Completo


BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARROM
BR_PINK
BR_PRETO
BR_VERDE
BR_VERMELHO

E Retorno:

Objeto Retorna uma nova instncia do Objeto da Classe MsSelect.


Exemplo:


DEFI NE MSDI ALOG oDl g1 TI TLE " Sel ecao par a Tr ansf er enci a" Fr om9, 0 To 32, 80;
OF oMai nWnd
@1. 4, . 8 Say " Val or Tot al : "
@1. 4, 7 Say oVal or VAR nVal or Pi ct ur e " @E 999, 999, 999, 999. 99"
@1. 9, . 8 Say " Quant i dade: "
@1. 9, 9 Say oQt da VAR nQt dBemPi ct ur e " @E 99999" SI ZE 50, 10
@1. 4, 15 Say I i f ( MVPar Box01==1, ;
" Soment e gr upos de [ " +MVPar Box02+" ] at e [ " +MVPar Box03+" ] " , " " )
I f cTi poDet == " D"
@12. 4, 01 Say " Qt de. a Det al har "
@158, 60 MSGET nQt de Pi ct ur e " @E 999" SI ZE 036, 10 OF oDl g PI XEL;
VALI D nQt de > 0
El seI f cTi poDet == " P"
@12. 4, 01 Say oLabel Var cLabel : = " Ti po de Pr oj et o"
oRad : = TRadMenu( ) : New( 169, 005, {" I ndust r i al " , " Fl or est al " }, ;
bSet Get ( nOpcRad) , oDl g, , {| | AF250RAD( nOpcRad) }, , , , , , 100, 12, , , , . T. )
@15. 5, 01 Say oLabel 2 Var cLabel 2 : = " Det al hament o: "
oRad2 : = TRadMenu( ) : New( 210, 005, {" Mant er " , " Al t er ar " }, ;
bSet Get ( nOpcRad2) , oDl g, , {| | AF250RAD2( nOpcRad2) }, , , , , , ;
100, 12, , , , . T. )
@16. 4, 01 Say oLabel 3 Var cLabel 3 : = " Per cent ual "
oGet : = TGet ( ) : New( 210, 043, bSet Get ( nPer c) , oDl g, 030, 010, ;
" @E 999. 99" , , , , , , , . T. )
@18. 2, 01 Say oLabel 4 Var cLabel 4 : = " Qt de. Det . "
oGet 2 : = TGet ( ) : New( 235, 040, bSet Get ( nQt de) , oDl g, 030, 010, ;
" @E 999" , , , , , , , . T. )
oGet : Hi de( )
oGet 2: Hi de( )
oLabel 3: Hi de( )
oLabel 4: Hi de( )
EndI f
oMar k : = MsSel ect ( ) : New( " SN3" , " N3_OK" , " ! N3_BAI XA" , , @l I nver t e, ;
@cMar ca, {35, 1, 143, 315})
oMar k: bMar k : = {| | a250Di spl ay( cMar ca, l I nver t e, oVal or , oQt da) }

ACTI VATE MSDI ALOG oDl g1
ON I NI T Enchoi ceBar ( oDl g1, ;
{| | nOpct : =1, i i f ( DePar aEnt ( ) , oDl g1: End( ) , . f . ) }, {| | nOpct : =2, oDl g1: End( ) })


- 545 -

ADVPL Completo



39. Introduo relatrios grficos


39.1. TReport()


39.1.1. Introduo


Finalidade

O Protheus oferece o recurso personalizao para alguns relatrios de cadastros e
movimentaes do sistema. Ele tem como principais funcionalidades a definio de cores,
estilos, tamanho, fontes, quebras, mscara das clulas para cada seo, criao de frmulas e
funes (Soma, Mdia, etc.), possibilidade de salvar as configuraes por usurio e criao de
grficos.
Com a funcionalidade de Relatrios Personalizveis, o usurio pode modificar os relatrios
padres, criando seu prprio layout.


Vale lembrar que nem todos os relatrios so personalizveis. Por exemplo, relatrios que
tenham layout pr-definidos por lei e formulrios (boletos, notas-fiscais, etc) no podero ser
alterados.
Os relatrios personalizados so gravados com extenso .PRT, diferenciando-se dos relatrios
padres que recebem a extenso .##R.

- 546 -

ADVPL Completo




Descrio
O TReport uma classe de impresso que substitui as funes SetPrint, SetDefault,
RptStatus e Cabec.
A classe TReport permite que o usurio personalize as informaes que sero apresentadas no
relatrio, alterando fonte (tipo, tamanho, etc), cor, tipo de linhas, cabealho, rodap, etc.
Estrutura do componente TReport:
O relatrio (TReport) contm 1 ou mais sees (TRSection);
Uma seo (TRSection) pode conter 1 ou mais sees;
A seo (TRSection) contm clulas pr-definidas e clulas selecionadas pelo usurio;
A seo (TRSection) tambm contm as quebras (TRBreak) para impresso de
totalizadores (TRFunction);
Os totalizadores so includos pela seo que automaticamente inclui no relatrio
(TReport).
Pr-Requisitos
Para utilizar o TReport, verifique se o seu repositrio est com o Release 4 do Protheus-8, ou
verso superior.
A funo TRepInUse() verifica se a lib do TReport est liberada no repositrio em uso. O
retorno uma varivel lgica.
#i ncl ude " pr ot heus. ch"

User Funct i on MyRepor t ( )
Local oRepor t

I f TRepI nUse( ) / / ver i f i ca se a opo r el at r i os per sonal i zvei s est
di spon vel
Per gunt e( " MTR025" , . F. )

oRepor t : = Repor t Def ( )
oRepor t : Pr i nt Di al og( )
EndI f
Ret ur n

Verifique tambm o parmetro MV_TReport. Para utilizar os relatrios personalizveis, o
parmetro MV_TREPORT (tipo numrico) deve ser alterado no ambiente Configurador,
conforme uma das opes que seguem:
1 = utiliza relatrio no formato tradicional (antigo);
2 = utiliza relatrio personalizvel;
3 = pergunta qual relatrio ser utilizado: tradicional (antigo) ou personalizvel.



- 547 -

ADVPL Completo


39.1.2. Impresso do relatrio personalizvel

Cada componente da tela de impresso do TReport, deve ser configurado no programa, para
que o usurio tenha acesso s personalizaes:



39.1.2.1. Parmetros de impresso

A caixa de listagem apresentada deve ser utilizada conforme o meio de sada do relatrio. Veja
a seguir.

Impresso

Arquivo

O relatrio ser gravado em disco com o nome apresentado. Caso seja escolhida a opo
"Servidor" ele ser gravado no diretrio determinado na senha do usurio, atravs do
configurador, sendo este sempre no servidor (padro \SPOOL\). Na escolha da opo "Local"
ser aberta uma janela para que seja escolhido o local onde o relatrio ser gravado na
mquina do usurio.
O relatrio gerado a partir desta opo pode ser impresso ou enviado por e-mail aps ser
apresentado na tela.

- 548 -

ADVPL Completo



Spool

Direciona o relatrio para impresso via configurao do Windows das impressoras
instaladas.
E-mail

Envia o relatrio por e-mail (Internet). Para isto, devem ser configurados os seguintes
parmetros no Ambiente Configurador:
E MV_RELACNT
Define a conta de e-mail para identificar a provenincia dos relatrios.
Exemplo: relprotheus@microsiga.com.br
E MV_RELPSW
Define a senha da conta de e-mail para envio dos relatrios.
E MV_RELSERV
Define o servidor da conta de e-mail para o envio do relatrio.
Exemplo: smtp.microsiga.com.br

Quando selecionada esta opo, deve-se informar, no campo em destaque na figura abaixo, o
e-mail para o qual o relatrio deve ser remetido.



- 549 -

ADVPL Completo


O Protheus Server pode tambm ser executado como um servidor Web, respondendo a
requisies HTTP. No momento destas requisies, pode executar rotinas escritas em ADVPL
como processos individuais, enviando o resultado das funes como retorno das requisies
para o cliente HTTP (como por exemplo, um Browser de Internet). Qualquer rotina escrita em
ADVPL que no contenha comandos de interface pode ser executada atravs de requisies
HTTP. O Protheus permite a compilao de arquivos HTML contendo cdigo ADVPL embutido.
So os chamados arquivos ADVPL ASP, para a criao de pginas dinmicas.

E Programao TelNet

TelNet parte da gama de protocolos TCP/IP que permite a conexo a um computador remoto
atravs de uma aplicao cliente deste protocolo. O PROTHEUS Server pode emular um
terminal TelNet, atravs da execuo de rotinas escritas em ADVPL. Ou seja, pode-se escrever
rotinas ADVPL cuja interface final ser um terminal TelNet ou um coletor de dados mvel.


Papel

Tamanho do papel
Selecione o tamanho do papel em que o relatrio ser impresso.
As especificaes de tamanho do papel so as do padro do mercado,
conforme o formato escolhido, o Protheus ir ajustar a impresso.
Formato da impresso
Selecione o formato de impresso, clicando nos botes de opo Retrato ou Paisagem,
fazendo assim que o relatrio seja impresso na orientao vertical ou horizontal,
respectivamente.

Configuraes

Ttulo

Caso queira alterar a opo sugerida pelo sistema, digite o cabealho do relatrio.

Ordem

Escolha a ordem em que as informaes sero apresentadas no relatrio, clicando em uma das
chaves disponveis.

Layout

Permite selecionar o modelo de relatrio para impresso, medida que novos leiautes forem
gravados para um relatrio, seus nomes sero listados nessa caixa.

Preview

Faz a exibio do relatrio gerado na tela, possibilitando, na seqncia, o seu envio para
impressora ou a cancelamento da impresso.

- 550 -

ADVPL Completo



Executar em segundo plano

Essa opo permite que o relatrio seja gerado e enviado para a fila de impresso, enquanto o
usurio pode executar outras tarefas no sistema.


39.1.3. Personalizao

possvel configurar-se as colunas do lay-out do relatrio, bem como os acumuladores,
cabealhos e linhas.
Esto disponveis para personalizao tambm a fonte, tamanho, cores, e etc.




39.1.3.1. Editando o layout do relatrio

O primeiro passo entender a nova estrutura dos relatrios desenvolvidos com a ferramenta
TReport.
O Relatrio possui Sees e Clulas. chamada de Seo, cada um dos grupos de
informaes, e de Clula, cada um dos campos que sero impressos.

- 551 -

ADVPL Completo


Nova estrutura do relatrio TReport:



O relatrio mais simples que se consegue emitir em TReport, uma listagem.

39.1.4. Definindo a Funo ReportDef()

A funo ReportDef() responsvel pela construo do lay-out do relatrio (oReport). ela
quem define as colunas, os campos e as informaes que sero impressas.
Os comandos que far essa construo so:

1. DEFINE REPORT
2. DEFINE SECTION
3. DEFINE CELL


- 552 -

ADVPL Completo



DEFINE REPORT

A funo DEFINE REPORT responsvel pela criao do objeto Report, ou seja, o relatrio.
Internamente, o DEFINE REPORT ir executar o mtodo TReport():New().
Estrutura do componente TReport:

O relatrio (TReport) contm 1 ou mais sees (TRSection);
Uma seo (TRSection) pode conter 1 ou mais sees;
A seo (TRSection) contm clulas pr-definidas e clulas selecionadas pelo usurio;
A seo (TRSection) tambm contm as quebras (TRBreak) para impresso de
totalizadores (TRFunction);
Os totalizadores so includos pela seo que automaticamente inclui no relatrio
(TReport).


DEFINE SECTION

Ainda no ReportDef(), so definidas as sees (oSection) do relatrio.
As sees do relatrio representam os diferentes grupos de informaes exibidos.
H a seo principal e as especficas.
Internamente, o DEFINE SECTION ir executar o mtodo TRSection():New().
A classe TRSection pode ser entendida como um layout do relatrio, por conter clulas,
quebras e totalizadores que daro um formato para sua impresso.
Com a classe TRSection possvel definir uma query, filtro ou ndice com filtro (IndRegua) que
ser utilizada por ela para processamento do relatrio, atravs do mtodo Print e utilizando as
clulas de posicionamento (TRPosition).


DEFINE CELL

Para cada seo, devem ser definidas as clulas. Clula cada informao que dever ser
impressa. Pode ser um campo do cadastro, ou um resultado de uma operao. uma Clula
de impresso de uma seo (TRSection) de um relatrio que utiliza a classe TReport
Internamente, o DEFINE CELL ir executar o mtodo TRCell():New ().

- 553 -

ADVPL Completo



MDULO 08: Aplicaes ADVPL para o ERP


40. Protheus e o TOPCONNECT / TOTVS DbAccess

O TOTVSDBAccess uma ferramenta de conectividade a bases de dados, permitindo que
aplicativos acessem uma ampla variedade de servidores de banco de dados sem a necessidade
de gerao de cdigos especficos para cada uma delas.

Os bancos de dados hoje suportados pelo TOTVSDBAccess so:

E Microsoft SQL7 ou superior
E Oracle 8 ou superior
E IBM Universal Database (DB2)
E Informix
E Sybase Adaptive Server
E Postgres 7.1.1 ou superior
E MySQL

O TOTVSDBAccess permite gerenciar as informaes pertinentes utilizao do banco de
dados, registrando e apresentado dados, como:

E Dados estatsticos de forma grfica com relao :
E Quantidade de usurios conectados
E Quantidade de tabelas em utilizao
E IOs por segundo
E Mximo de IOs por segundo
E Relao dos usurios conectados
E Checagem das querys geradas pelos usurios conectados
E Quebra de conexo do usurio
E Mensagens de utilizao do TOTVSDBAccess
E Configuraes Gerais quanto a:
Banco de dados em utilizao
Relao de usurios e senhas por banco de dados
Logins de usurio
Configurao de "Table Spaces" para determinados bancos de dados
Definio dos parmetros de criao de tabelas para determinados bancos de dados
Validao de conexo, checando os parmetros de conexo com o banco de dados
Monitoramento de ndices gerados


- 554 -

ADVPL Completo



40.1. Caractersticas tcnicas com o uso do TOTVS DbAccess

Comportamento de Queries Colunas Calculadas

Aps enviar ao Banco de Dados uma solicitao de abertura de Query, em caso de sucesso na
operao, o TOPConnect obtm do Banco de Dados a quantidade de colunas que sero
retornadas, e qual o tamanho e tipo e especificaes de cada uma das colunas, para retornar
ao Protheus uma estrutura definida de informaes, e o cursor aberto lido conforme so
solicitados os prximos registros ( DBSkip() no Advpl ), e a cada requisio, uma linha do
cursor retornada, at no haver mais linhas no cursor, atingindo o final do arquivo no Advpl (
EOF() ).

Quando especificamos uma coluna de retorno na Query, que corresponde a informaes lidas
diretamente de uma ou mais coluna(s) da tabela, cada coluna retornada pela Query contm
uma definio de tipo e tamanho correspondente ao campo de origem do dado de retorno.
Deste modo, se considerarmos, por exemplo, a Query : SELECT A1_FILIAL FROM SA1990 ,
onde o campo A1_FILIAL na tabela SA1990 um campo do tipo varchar, com 2 bytes de
tamanho, quando o cursor for aberto no Banco de Dados, o TOPConnect ir obter do banco
que o result-set gerado possui apenas uma coluna, e esta coluna do tipo varchar, com no
mximo 2 bytes de tamanho.

Os Bancos de Dados no apenas permitem recuperar retornos diretamente lidos de uma ou
mais tabelas, mas tambm possvel abrir um cursor onde uma ou mais colunas contenham
um resultado calculado, utilizando-se de expresses e/ou funes nativas do Banco de Dados.
Para estes tipos de retorno, cada banco de dados pode apresentar comportamentos
diferenciados ao descrever o tamanho de retorno da(s) coluna(s).

Este comportamento pode variar de acordo com o Banco de Dados, a expresso e/ou funes
utilizadas para gerar a coluna de retorno, e inclusive podem ter diferenas entre verses e
Builds do mesmo Banco de Dados e/ou parametrizaes especficas do Banco de Dados e/ou
da aplicao Client / ODBC / API utilizada para acesso ao Banco.

Para ilustrar melhor estas diferenas, vejamos abaixo os resultados obtidos com queries, em
bancos distintos, onde foi criada uma tabela com a mesma estrutura, e 10 linhas de dados, e
nela foram executadas algumas querys, onde temos como retorno uma coluna calculada. A
tabela possui os campos CPOC, tipo Caractere, tamanho 10 bytes, numerados de 0000000001
a 0000000010 e um campo numrico CPON, alimentado com valores positivos. Para cada
Query, mostramos o valor retornado ao Advpl, contendo o tipo de dado retornado e o tamanho
(len) da coluna, no formato . ( Tipo ( tamanho ) ).

Query: SELECT MIN(CPOC) CPOTESTE FROM TESTRET

E Retorno: Todos os bancos retornaram uma coluna com tamanho de 10 bytes.

E Bancos:

Database Tipo Tamanho Contedo
MSSQL 2000 Caracter 10 0000000001
INFORMIX Caracter 10 0000000001
ORACLE Caracter 10 0000000001
MYSQL Caracter 10 0000000001
DB2 Caracter 10 0000000001



- 555 -

ADVPL Completo



Query: SELECT MIN(CPOC) CPOTESTE FROM TESTRET WHERE CPON < 0

E Retorno: Todos os bancos retornaram uma coluna vazia.

E Bancos:

Database Tipo Tamanho Contedo
MSSQL 2000 Caracter 10 Vazio
POSTGRES Caracter 0 Vazio
INFORMIX Caracter 10 Vazio
ORACLE Caracter 10 Vazio
MYSQL Caracter 10 Vazio
DB2 Caracter 10 Vazio


Query: SELECT LEFT(CPOC,5) CPOTESTE FROM TESTRET

E Retorno: Todos os bancos que suportam a funo LEFT() retornaram uma coluna
de informaes, onde os 5 primeiros bytes eram '00000'.

E Observaes: Os bancos retornaram que a coluna tem 5 bytes de tamanho.
Porm, o BAnco DB2 informa que a coluna tm tamanho de 4000 Bytes.
Este mesmo retorno foi obtido no DB2 quando utilizadas funes
RIGHT(), REPLACE() e REPEAT(), no banco DB2, e para o BAnco
Postgres, foi retornado o tamanho de 2000 bytes para estas funes.


E Bancos:

Database Tipo Tamanho Contedo
MSSQL 2000 Caracter 5 00000
MYSQL Caracter 5 00000
DB2 Caracter 4000 00000


Query: SELECT SUBSTRING(CPOC,2,4) CPOTESTE FROM TESTRET

E Retorno: Todos os bancos retornaram uma coluna de tamanho 4 bytes, exceto o
POSTGRES, que retornou tamanho de 2000 bytes.

E Bancos:

Database Tipo Tamanho Contedo
MSSQL 2000 Caracter 4 0000
POSTGRES Caracter 2000 0000
INFORMIX Caracter 4 0000
ORACLE Caracter 4 0000
MYSQL Caracter 4 0000
DB2 Caracter 4 0000


- 556 -

ADVPL Completo




Devido a estas diferenas de comportamento, devemos tomar alguns cuidados ao desenvolver
aplicaes que utilizam colunas calculadas em queries. Nestes casos, deve ser utilizada uma
funo do banco de dados, para assegurar que o banco de dados retorne o tamanho de coluna
adequado ao TOPConnect / TotvsDBAccess.

Por exemplo, vejamos a query abaixo :


SELECT REPLACE(CPOC,'0','_') AS CPOTESTE FROM TESTRET



Se j de conhecimento do programador que o campo da base de dados CPOC desta tabela
tem 10 bytes de tamanho, devemos fazer um cast deste retorno, para char ou varchar, com
tamanho de 10 bytes. Dessa forma, o banco retorna o tamanho esperado da coluna para o
TOPConnect quando da abertura da query. Isto evita que espaos desnecessrios trafeguem
pela rede para atender requisio, e que este valor excedente seja usado para alimentar
uma varivel do Advpl. Vejamos como usar este recurso na query acima descrita, utilizando
uma sintaxe aceita pela maioria dos Bancos de Dados homologados :


SELECT CAST( REPLACE(CPOC,'0','_') AS VARCHAR(10)) CPOTESTE FROM TESTRET


Vale a pena salientar que, cada banco de dados possui, com pequenas variaes, uma sintaxe
para permitir o CAST de um retorno. Para maiores detalhes, a documentao do banco deve
ser consultada.

Comportamento diferenciado com Bandos de Dados PostGres

O Banco de Dados Postgres possuem um comportamento diferenciado entre os Builds do
Server do Banco, e possui uma parametrizao na configurao do ODBC que pode interferir
na maneira como os atributos das colunas de retorno de uma query so retornados.

Em verses inferiores o Postgres 8.x, as diferenas de comportamento em relao os demais
Bancos de Dados possuem um diferencial muito significativo, em praticamente todas as
funes de retorno calculado. Para estes casos, em se tratando de Postgres verses inferiores
a 8.x, a preciso de retorno da coluna corresponde ao tamanho mximo de retorno do tipo
VarChar. ( Este tamanho mximo pode ser configurado na conexo ODBC do PostgreSql, e o
valor default 65536 bytes. )

Na funo Substring(), mesmo que esteja especificado no 3. parmetro da funo, a
quantidade final limitada de Bytes, o Banco de Dados descreve esta coluna de retorno como
sendo um VarChar() com a preciso do maior valor VARCHAR() a ser retornado pelo client. Na
funo Max(), quando especificado um campo da base do tipo Char ou Varchar, temos um
comportamento semelhante.

Quando foram homologados os Bancos Postgres para uso com o ERP Microsiga e TOPConnect
4, praticamente no eram utilizadas queries com colunas calculadas nas aplicaes Advpl, e
este comportamento diferenciado no foi percebido. Conforme as rotinas foram evoluindo,
buscando mais performance atravs do uso de Queries, tornou-se perceptvel estas diferenas
operacionais.


- 557 -

ADVPL Completo



Algumas destas diferenas operacionais foram assimiladas pelas funes do ERP, por exemplo
a ChangeQuery, que em verso atualizada (** Protheus 8 e P10, fonte aplib070.prw com data
igual ou superior a 08/03/2008) , aplicam o CAST() automaticamente para SELECT
MAX(CAMPO), quando o banco Postgres, e o campo selecionado for um campo da base de
dados, presente no Dicionrio de Campos ( SX3 ).

Para todos os efeitos, para utilizao com as verses homologadas de Postgres inferiores a
8.x, necessrio alterar a configurao de ODBC do Postgres, para limitar o retorno do tipo
VarChar para 2000 Bytes, pois o retorno do valor default ( 65536 bytes ) no suportado pelo
TOPConnect / TOTVSDBAccess. Alteramos esta configurao no arquivo .odbc.ini no linux, e/ou
no arquivo de configurao do ODBC do Postgres utilizado, inserindo na seo da conexo /
identificao do banco a chave abaixo :


MaxLongVarcharSize=2000


Atualmente est em processo de homologao as verses mais recentes (8.x) do banco
Posgres. Quando homologado, a informao estar disponivel na DEM, em Principal -> Guia de
Referncia -> Guia de Plataformas Homologadas -> Bancos de Dados Relacional X S.O.

Conceito de ndices Permanentes e Diferenas das RDDs

Na RDD TOPCONN, no temos o conceito de criao de ndice temporrio, apenas ndice
permanente. Um ndice permanente criado fisicamente no Banco de Dados relacional
utilizado, atravs do TOPConnect / DbAccess, onde devemos especificar um ou mais campos
para compor a chave / expresso de ndice.

Quando utilizamos CodeBase/DBF, podemos especificar como campos de chave de ndice o
retorno de funes, como por exemplo STR(), DTOS(), SUBSTR(), entre outras suportadas de
modo nativo pela aplicao provedora de acesso, no caso ADS Local e/ou ADS Server.

Quando usamos um Banco Relacional SGDB atravs do TOPConnect / DbAccess, devemos
especificar uma expresso de chave que sempre retorne um valor Caractere, e as nicas
funes permitidas para adequaes de tipo de dado no Advpl para estas expresses de ndice
so : DTOS() e STR().

Funcionamento Interno

A expresso utilizada para a criao de um ndice permanente em Advpl, por exemplo : CPOC
+ DTOS(CPOD) + STR( CPON,10 ), quando utilizamos o RDD TOPCONN, ser ajustada para o
Banco de Dados relacional utilizado para uma expresso contendo apenas a lista de campos
desejada, na sequncia em que foi especificada, e as funes DTOS() e STR() nao so
passadas ao banco de dados, pois no existe a necessidade de converso de dados para o
Banco.

Um campo do tipo 'D' Data tratado pelo TOPConnect e gravado na tabela em questo como
um campo 'C' Caractere, de 10 bytes, no formato AAAAMMDD, e os nmeros so gravados em
um campo DOUBLE*.


- 558 -

ADVPL Completo



Quebra de Compatibilidade com CodeBase/DBF

Os Bancos relacionais, em sua grande maioria, seno todos, suportam apenas a criao de
ndices onde sejam especificados campos fsicos da base de dados. No so suportadas
funes de converso ou transformao de dados na criao de ndices, como por exemplo
substring(), left(), entre outras. Embora alguns bancos permitam a criao de colunas
calculadas, as mesmas so 'virtuais', isto , no existem fisicamente na tabela, e tambm no
permitido o uso de colunas virtuais para a criao de ndices.

Entendemos que o RDD CodeBase / DBF, onde originalmente foi desenvolvido o ERP, nos dava
certa flexibilidade ao permitir operaes como estas, porm a um custo de processamento
mais alto, pois para cada insero ou alterao, o RDD tem que executar funes de conversao
e concatenao de strings para atualizao dos ndices que usam este recurso.

Manter o suporte a todos os indices permanentes, criados a partir de resultados de
expresses, nas verses anteriores do ERP, teramos um custo muito alto de complexidade,
performance e duplicidade de informaes nas tabelas. Seria necessrio criar colunas fsicas
nas tabelas, transparentes ao usuario, para manter copias em duplicidade de partes de colunas
agrupadas, com gatilhos do banco de dados disparados internamente em operaes de insert e
update, um mecanismo relativamente complexo de se manter, instvel para dar manuteno,
e custoso em performance para o Banco de Dados.

Partindo da premissa que, se uma determinada informao deve ser indexada para busca, ela
deve ser uma informao que ocupa exclusivamente um campo fsico da base de dados, so
evitadas as operaes constantes de concatenao e desmembramento de uma informao
agrupada, colocando cada parte da informao em seu devido espao ( campo )
definido, mesmo com o impacto gerado para alterar as aplicaes que usavam estes tipos
de ndices, os ganhos obtidos em organizao e performance foram muito significativos.

- 559 -

ADVPL Completo



Lista dos cdigos de erro do TOPConnect / DbAccess

Quanto utilizado o TOPConnect / DbAccess para conexo e operaes com Bancos de Dados,
as ocorrncias de erro so reportadas ao Protheus informando em conjunto com o erro um
nmero menor que zero, correspondendo a um tipo de erro.

Para a maioria das ocorrncias, relacionadas ao Banco de Dados, deve-se olhar o log de erro
gravado pelo TOPConnect / DbAccess ( arquivo topconn.log ) para obter maiores detalhes
sobre a ocorrncia.

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

Neste tpico sero descritas as funes da linguagem ADVPL que permitem a interao
com a aplicao TopConnect / 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 ()

Verifica a existncia de tabelas e ndices no servidor.

E Sintaxe: TCCanOpen(cTable , cIndice)

E Parmetros:

cTable Nome completo da tabela no banco de dados.
cIndice Opcional, indica o nome completo do ndice referente a tabela especificada.

E Retorno:

Lgico Indica a existncia da tabela e/ou do ndice especificado.


E Exemplo:


/ / Ver i f i ca a exi st nci a da t abel a cust omer
I F ! TCCanOpen( " CUSTOMER" )
dbCr eat e( " CUSTOMER" , aSt r u, " TOPCONN" )
ENDI F
USE CUSTOMER SHARED NEWVI A " TOPCONN"

/ / Ver i f i ca a exi st nci a do ndi ce
I F ! TCCanOpen( " CUSTOMER" , " CUSTCOD" )
I NDEX ON CODI GO TO CUSTCOD
ELSE
SET I NDEX TO CUSTCOD
ENDI F



TCCONTYPE()

Especifica o protocolo de comunicao a ser utilizado pelo TOPConnect.

E Sintaxe: TCConType(cType)

E Parmetros:

cType Tipo de protocolo de comunicao a ser utilizado pelo TopConnect, aonde:

TCPIP: Utiliza o protocolo TCP/IP.
NPIPE: Utiliza o protocolo Named Pipes.
APPC: Utiliza o protocolo APPC.
BRIDGE: Utiliza o utilitrio TOPBrigde para comunicao de estaes DOS
NPIPE com servidor AS/400 utilizando TCP/IP.




- 562 -

ADVPL Completo


E Retorno:

Nenhum .


E Exemplo:


#I NCLUDE " TOPCONN. CH"
/ / Especi f i ca conexo TCP/ I P
TCConType( " TCPI P" )

/ / Conect a- se ao ambi ent e SI GAADV no Mi cr osof t SQL- Ser ver
TCLi nk( " MSSQL/ SI GAADV" )



TCDELFILE()

Exclui uma tabela no servidor.

E Sintaxe: TCDelFile(cTable)

E Parmetros:

cTable Nome completo da tabela a ser excluda.

E Retorno:

Nenhum .


E Exemplo:


TCDelFile("CUSTOMER")











- 563 -

ADVPL Completo


TCGENQRY()

Permite a execuo de uma query de seleo no banco de dados e retorna um recordset com o
resultado.

E Sintaxe: TCGENQRY(xParam1,xParam2,cQuery)

E Parmetros:

xParam1 Parmetro reservado.
xParam2 Parmetro reservado.
cQuery Query de seleo com sintaxe no padro SQL ANSI a ser executada no banco
de dados.

E Retorno:

RecordSet RecordSet contendo o resultado da execuo da query de seleo.




Para que os dados contidos no RecordSet retornado pela funo TCGenQry()
sejam utilizados pela aplicao ADVPL necessrio disponibiliz-los em uma
WorkArea.

Desta forma a funo TCGenQry() dever ser utilizada em conjunto com a
funo DbUseArea(), para que a mesma disponibilize o RecordSet como uma
rea de trabalho do ADVPL.



E Exemplo:


cQuer y : = " SELECT DI STI NCT CV8_PROC FROM " +RETSQLNAME( " CV8" )
cQuer y += " WHERE "
cQuer y += " CV8_FI LI AL = ' " +MV_PAR01+" ' AND "
cQuer y += " D_E_L_E_T_ = ' ' "
cQuer y += " ORDER BY CV8_PROC"
cQuer y : = ChangeQuer y( cQuer y)
dbUseAr ea( . T. , " TOPCONN" , TCGenQr y( , , cQuer y) , " CV8QRY" , . F. , . T. )


TCGETDB()

Retorna o tipo de Banco de Dados corrente.

E Sintaxe: TCGETDB()

E Parmetros:

Nenhum .




- 564 -

ADVPL Completo


E Retorno:

Caracter Descrio referente ao tipo do banco de dados corrente, aonde:

ANYWHERE - Sybase SQL Anywhere
ANYSYBASE - Sybase SQL Anywhere (Emulando Sybase SQL-Server)
DB2 - IBM Universal Database
INFORMIX Informix
MSSQL - Microsoft SQL-Server 6.5
MSSQL7 - Microsoft SQL-Server 7.0 ou superior
ORACLE - Oracle
POSTGRES - PostGres
SYBASE - Sybase SQL-Server

Nota: O retorno da funo pode variar de acordo com a homologao de
novos databases para utilizao com a ferrramenta TopConnect / DbAccess.

E Exemplo:


cDat aBase : = TCGETDB( ) / / MSSQL7



TCLINK()

Abre uma conexo com o Servidor TOPConnect.

E Sintaxe: TCLink(cConectString,cServer)

E Parmetros:

cConectString String composta conforme a regra:
Para TOPConnect NT : Nome do Banco de Dados / Nome do Ambiente

Para TOPConnect/400: Nome do Ambiente

cServer Nome do servidor conforme a regra:
Para conexes NamedPipe, APPC e Brigde : O nome do servidor
TOPConnect.

Para conexes TCP/IP : O endereo IP do servidor TOPConnect


E Observaes:

Para o TOPConnect NT acessando Oracle, um ambiente o nome do Alias criado
com o utilitrio SQL-Net.

Para o TOPConnect NT acessando os demais SGDB's um ambiente um System
DSN criado atravs do ODBC Data Source Administrator.

Para o TOPConnect AS/400 um ambiente uma Library criada atravs do comando
CRTTOPENV do TOPConnect.


- 565 -

ADVPL Completo


Para informaes sobre a criao de ambientes consulte o manual de instalao do
TOPConnect.

A lista dos tipos de bancos de dados suportados pela aplicao TopConnect /
DbAccess a mesma das possibilidades de retorno da funo TCGETDB conforme
abaixo:

ANYWHERE - Sybase SQL Anywhere
ANYSYBASE - Sybase SQL Anywhere (Emulando Sybase SQL-Server)
DB2 - IBM Universal Database
INFORMIX Informix
MSSQL - Microsoft SQL-Server 6.5
MSSQL7 - Microsoft SQL-Server 7.0 ou superior
ORACLE - Oracle
POSTGRES - PostGres
SYBASE - Sybase SQL-Server

E Retorno:

Numrico A funo TCLink retorna ou o nmero da conexo ou um valor negativo
contendo o cdigo do erro.

A relaes dos cdigos de erros ocorridos durante uma tentativa de conexo
est disponvel no tpico 8.1. deste material.

E Exemplo:


/ / Conect a- se ao Mi cr osof t SQL- Ser ver no ambi ent e SI GAADV
/ / Pr ot ocol o Named Pi pes
TCConType( " NPI PE" )

nCon : = TCLi nk( " MSSQL/ SI GAADV" , " TOPSRV" )
i f nCon < 0 / / Conexes comr et or no < 0 si gni f i camer r o
Al er t ( " Fal ha de conexo como TOPConnect " )
endi f
/ / Pr ot ocol o TCP/ I P
TCConType( " TCPI P" )
/ / Conect a- se ao Or acl e no ambi ent e TESTES
nCon : = TCLi nk( " ORACLE/ TESTES" , 172. 16. 1. 2)

/ / Pr ot ocol o APPC
/ / Conect a- se ao AS/ 400 no ambi ent e PRODUCAO
nCon : = TCLi nk( " PRODUCAO" , " TOP400" )





- 566 -

ADVPL Completo



TCQUERY()

Executa uma Query no servidor e coloca seu retorno em uma WorkArea.



Durante o processo de compilao, a sintaxe TCQUERY() substituda pelas
expresso:

dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery), ALIAS ,.T.,.F.)

Esta substituio realizada conforme as definies do include TOPCONN.CH.

Desta forma recomendvel a utilizao direta da sintaxe DbUseArea() +
TcGeQry().


E Sintaxe: TCQUERY cSQLExpr ALIAS cAlias NEW VIA "TOPCONN"

E Parmetros:

cSQLExpr Expresso SQL a ser enviada ao servidor.
ALIAS cAlias Especifica um nome para a Work Area a ser aberta.
NEW Abre a tabela <cTable> na prxima Work Area disponvel. Se esta
clausula no for especificada, <cTable> ser na Work Area corrente.
VIA "TOPCONN" Este parmetro indica ao ADVPL que esta Work Area ser gerenciada
pelo TOPconnect.


E Observaes:

A Work Area criada com o comando TCQUERY READ-ONLY, portanto no
permitido o uso de APPEND's ou REPLACE's.

O TOPConnect tem apenas um cursor para a Query executada portando apenas os
seguintes comandos so suportados em uma Work Area criada com TCQUERY:

o GO TOP - DbGoTop()
o GO BOTTOM - DbGoBottom()
o SKIP - DbSkip()
o Eof()
o Bof()

Ao executar uma Query que retorne um ou mais valores calculados, o nome dos
campos da WorkArea sero COLUMN1, COLUMN2... COLUMNn.

E Retorno:

Nenhum .


- 567 -

ADVPL Completo



E Exemplo:


/ / Abr e a t abel a de Cl i ent es emuma nova Wor kAr ea

cQuer y : = " SELECT a. codi go, b. nome FROM CLI ENTES a, CLI DATA b "
cQuer y += " WHERE a. CODI GO = b. CODI GO ORDER BY CODI GO, NOME "

TCQUERY cQuer y ALI AS CLI ENTES NEWVI A " TOPCONN"
dbGoTop( )

Whi l e ! Eof ( )
ALERT( CODI GO+" | " +NOME)
dbSki p( )
end

cQuer y : = ' SELECT SUM( VALOR) , SUM( SALDO) FROM CUSTOMER'
TCQUERY cQuer y NEWVI A " TOPCONN"
ALERT( CVal ToChar ( COLUMN1) +" | " +CVal ToChar ( COLUMN2) )
/ / COLUMN1 - Somat or i a dos val or es
/ / COLUMN2 - Somat or i a dos sal dos


TCQUIT()

Encerra todas as conexes com o TOPConnect.

E Sintaxe: TCQuit()

E Parmetros:

Nenhum .

E Retorno:

Nenhum .


TCSETCONN()

Seleciona a conexo ativa.

E Sintaxe: TCSETCONN(nConn)

E Parmetros:

nConn Nmero da conexo

E Retorno:

Nenhum .


- 568 -

ADVPL Completo



E Exemplo:


/ / Abr e conexo como ambi ent e de Pr oduo
nCon1 : = TCLi nk( " MSSQL/ PRODUCAO" )
i f nCon1 < 0
Al er t ( " Fal ha conect ando ambi ent e de Pr oduo" )
QUI T
endi f

/ / Abr e conexo como ambi ent e de Test es
nCon2 : = TCLi nk( " MSSQL/ TESTES" )

i f nCon2 < 0 t hen
Al er t ( " f al ha conect ando ambi ent e de Test es" )
QUI T
endi f

TCSet Conn( nCon1)

/ / Abr e t abel a de Cl i ent es no ambi ent e de pr oduo
USE CUSTOMER ALI AS PROD SHARED NEWVI A " TOPCONN"

TCSet Conn( nCon2)

/ / Abr e t abel a de Cl i ent es no ambi ent e de t est es
USE CUSTOMER ALI AS TEST SHARED NEWVI A " TOPCONN"
. . .


TCSETFIELD()

Esta funo serve como apoio ao comando TCQUERY, na recuperao de campos tipo
NUMERIC, DATE e LOGICAL, pois os mesmos so gravados fisicamente no Banco de Dados
como caracteres, e no caso dos numricos como float.

E Sintaxe: TCSetField(cAlias, cField ,cType, nTam, nDec )

E Parmetros:

cAlias Alias da WorkArea gerada pela execuo da query.
cField Nome do campo a ser tratado
cType Tipo desejado para o campo
nTam Tamanho total desejado para o campo
nDec Nmero de decimais desejado para o campo

E Retorno:

Nenhum .


- 569 -

ADVPL Completo



E Exemplo 01:


TCQUERY " SELECT NOME, DATA, MARRI ED, VALOR FROM CUSTOMER" ALI AS QUERY VI A
" TOPCONN"

TCSet Fi el d( " QUERY" , " DATA" , " D" )
TCSet Fi el d( " QUERY" , " VALOR" , " N" , 12, 2)




Dentro de um programa ADVPL j podemos considerar como um campo data
no mais um campo caracter como o seu armazenamento.

O campo Data s retornado como um campo caracter por que estamos
utilizando a funo TCQUERY, se no o tratamento automtico.





A estrutura dos parmetros da funo TCSETFIELD() a mesma retornada
pela funo DbStruct() e que utilizada em diversas funes que manipulam
arquivos de dados.

Desta forma muito comum a montagem de queries em tabelas do sistema
partindo da estrutura de campos retornada pela funo DbStruct() sendo que
aps a execuo dos campos Tcquery() ou DbUseArea() normalmente
utilizado o campo TcSetField com base no contedo deste mesmo array de
estrutura.


E Exemplo 02:


Local cQuer y : = " "
Local cCampos : = " "
Local aSt r uSA1 : = SA1- >( DbSt r uct ( ) )
Local nX : = 0
Local nMax : = Len( aSt r uSA1)

/ / Mont a a St r i ng cCampos de acor do como cont edo de aSt r uSA1

aEval ( aSt r uSA1, {| aCampo| nX++, cCampos += aCampo[ 1] +;
I I F( nX == nMax, ' ' , ' , ' ) })

/ / Mont a a quer y ut i l i zando a St r i ng cCampos

cQuer y : = " SELECT " +cCampos+" FROM " +Ret Sql Name( " SA1" )

I f Sel ect ( " SA1SQL" ) <> 0
DbSel ect Ar ea( " SA1SQL" )
DbCl oseAr ea( )
Endi f

dbUseAr ea( . T. , " TOPCONN" , TcGenQr y( , , cQuer y) , " SA1SQL" , . T. , . F. )



- 570 -

ADVPL Completo



Continuao:

For nX : = 1 t o Len( aSt r uSA1)
I F ! ( aSt r ut SA1[ nX] [ 2] $ " C/ M" )
TCSet Fi el d( cAl i as, aSt r uSA1[ nX] [ 1] , aSt r uSA1[ nX] [ 2] , ;
aSt r uSA1[ nX] [ 3] , aSt r uSA1[ nX] [ 4] )
ENDI F
Next nX



TCSPEXEC()

Executa uma Stored Procedure no Banco de Dados.



Devido a uma limitao em alguns dos Bancos de Dados suportados na
obteno dos tipos de parmetros (se so de INPUT e/ou OUTPUT) todos as
Stored Procedures a serem executadas atravs do TOPConnect devero
obedecer o seguinte padro de nomenclatura de seus parmetros :

Parmetros de INPUT devem comear com IN_... Ex. IN_VALOR.
Parmetros de OUTPUT devem comear com OUT_... Ex. OUT_CODIGO

Aps a execuo de uma Stored Procedure o TOPConnect retornar ao ADVPL
um array com 'n' elementos, onde n o nmero de parmetros de OUTPUT da
Stored Procedure.



E Sintaxe: TCSPExec(cSPName,xParam1,xParam2...xParamN)

E Parmetros:

cSPName Nome completo da Stored Procedure no banco de dados.
xParamN Parmetros de input da Stored Procedure.


As procedur es padres da aplicao ERP Protheus possuem concatenadas em
seus nomes o cdigo da empresa para a qual foram aplicadas.

Desta forma ao executar uma procedure padro do ERP atravs do comando
TCSPEXEC necessrio utilizar a funo xProcedures(), pois a mesma ir
concatenar ao nome da procedure que ser executada o cdigo da empresa.

Por exemplo: Procedure MAT001

Se for executada com a sintaxe: TCSPExec(MAT001,...) ocorrer
um erro na aplicao pois esta procedure no existe.

Utilizando a funo xProcedures() temos:

TCSPExec( xProcedures(MAT001), ...), onde caso a empresa em uso
seja a 01, ser executada a MAT001_01, a qual vlida.


- 571 -

ADVPL Completo




E Retorno:

Array Array com os parmetros de retorno da Stored Procedure e <cSPName> o
nome da Stored Procedure a ser executada e os demais parmetros variam
conforme a definio da Stored Procedure.


E Exemplo:


/ / Ver i f i ca se a St or ed Pr ocedur e Test e exi st e no Ser vi dor
I f TCSPExi st ( " TESTE" )

/ / Execut a a St or ed Pr ocedur e Test e
aRet : = TCSPExec( " TESTE" , " J OSE" , 1000)
i f aRet <> ni l

cRet or no : = " "
For i : = 1 t o Len( aRet )
cRet or no += " | " + I I F( Val Type( aRet [ i ] ) == " C" , aRet [ i ] , ;
I I F( Val Type( aRet [ i ] ) == " N" , CVal ToChar ( aRet [ i ] ) , " U" ) )
Next

/ / Most r a os val or es de r et or no
ALERT( cRet or no)

El se
ALERT( " Er r o execut ando St or ed Pr ocedur e" +CRLF+" Mensagem: " +TCSQLEr r or ( ) )
Endi f
EndI f




A funo TCSPExist() deve ser utilizada apenas para verificao da existncia
de Stored Procedures padres da aplicao ERP, ou que possuam concate
nadas no nome a informao da empresa para qual esto habilitadas.

Para verificao de procedures sem esta caracterstica deve ser utilizada a
funo ExistProc().








- 572 -

ADVPL Completo



TCSPEXIST()

Verifica a existncia de uma determinada Stored Procedure no servidor.

E Sintaxe: TCSPExist(cSPName)

E Parmetros:

CSPName Nome da procedure a ser verificada no banco de dados.

E Retorno:

Lgico Indica se a Stored Procedure existe ou no e <cSPName> o nome da
Stored Procedure procurada.

E Exemplo:


I f TCSPExi st ( " MAT001_01" )
TCSPExec( " MAT001_01" , . . . )
Endi f




A funo TCSPExist() deve ser utilizada apenas para verificao da existncia
de Stored Procedures padres da aplicao ERP, ou que possuam concate
nadas no nome a informao da empresa para qual esto habilitadas.

Para verificao de procedures sem esta caracterstica deve ser utilizada a
funo ExistProc().


TCSQLERROR()

Retorna o ltimo erro registrado pelo TOPConnect durante a execuo de uma Query.

E Sintaxe: TCSQLError()

E Parmetros:

Nenhum .

E Retorno:

String Mensagem de erro registrada no TopConnect para a ocorrncia.

E Exemplo:


I f TCSQLExec( " UPDATE CUSTOMER SET VALUE=0" ) < 0 t hen
ALERT( TCSQLEr r or ( ) )
Endi f


- 573 -

ADVPL Completo



Esta a mesma mensagem que esta registrada no log de eventos do
TopConnect / TOTVS DbAccess Manager.

TCSQLEXEC()

Permite a execuo de comandos de atualizao no servidor de banco de dados.

E Sintaxe: TCSQLExec(cCommand)

E Parmetros:

cCommand Comando SQL a ser executado.

E Retorno:

Numrico Retorna um valor negativo em caso de erros.

E Exemplo:

nRet := TCSQLExec("UPDATE CUSTOMER SET VALUE=0)

TCSRVTYPE()

Retorna o tipo do servidor no qual TOPConnect / TOTVS DbAccess est em execuo.

E Sintaxe: TCSrvType()

E Parmetros:

Nenhum .

E Retorno:

String Tipo do servidor, como por exemplo: "WinNT" ou "AS/400".

E Exemplo:


TCLi nk( " MSSQL/ TESTE" , " TOPSRV" )
ALERT( TCSr vt ype( ) )



- 574 -

ADVPL Completo




Devido aos tratamentos especficos necessrios nas queries que sero
executadas em bancos de dados DB2 com sistemas operacionais AS/400
normal a seguinte verificao:

#IFDEF TOP
If TcSrvType() != "AS/400"

<Tratamento SQL convencional>

Else

#ENDIF

<Tratamento padro CODBASE>

#IFDEF TOP
Endif
#ENDIF


TCUNLINK()

Encerra uma conexo com o TOPConnect.

E Sintaxe: TCUnlink(nConn)

E Parmetros:

nConn Nmero da conexo previamente retornado pela funo TCLink()

E Retorno:

Nenhum .


E Exemplo:


TCConType( " NPI PE" )
nConn : = TCLi nk( " MSSQL/ TOPCONN" , " TOPSRV" )
TCUnLi nk( nConn)





- 575 -

ADVPL Completo



TCCHKOBJ()

Verifica a existncia de um objeto no servidor AS/400

E Sintaxe: TCChkObj(cObj,cLibrary,cType)

E Parmetros:

cObj Nome do objeto a ser verificado.
cLibrary Nome da biblioteca que deve conter o objeto
cType Tipo do de objeto AS/400, como por exemplo: *FILE ou *PGM.

E Retorno:

Numrico 0 quando o objeto existe ou o nmero do erro no AS/400.


E Exemplo:


nEr r or : = TCChkObj ( " CALCCUST" , " PRODUCAO" , " *PGM" )



Funo para uso apenas com o TOPConnect em servidores AS/400.


TCEXEERROR()

Retorna uma string com a mensagem de erro retornada pela execuo das funes
TCPGMEXE() e TCSYSEXE().

E Sintaxe: TCExeError()

E Parmetros:

Nenhum .

E Retorno:

String Mensagem de erro.

E Exemplo:


I f TCPGMEXE( " CALCCUST" ) ! = 0
ALERT( TCExeEr r or ( ) )
Endi f


- 576 -

ADVPL Completo



Funo para uso apenas com o TOPConnect em servidores AS/400.

TCPGMEXE()

Executa um programa no servidor AS/400.

E Sintaxe: TCPGMEXE(cProgram)

E Parmetros:

cProgram Nome do programa a ser executado.

E Retorno:

Numrico 0 quando o objeto existe ou o nmero do erro no AS/400.


E Exemplo:


I f TCPGMEXE( " CALCCUST" ) ! = 0
ALERT( TCExeEr r or ( ) )
Endi f



Funo para uso apenas com o TOPConnect em servidores AS/400.

TCSYSEXE()

Permite a execuo de um comando utilizando a sintaxe e recursos nativos do DB2/400,
diretamente no servidor do banco de dados.

E Sintaxe: TCSysExe(cCommand)

E Parmetros:

cCommand Comando a ser executado no servidor de banco de dados utilizando sintaxe
DB2/400.

E Retorno:

Numrico 0 quando o objeto existe ou o nmero do erro no AS/400.


- 577 -

ADVPL Completo



E Exemplo:


cCommand : = " CRTCBLMOD MODULE( " +cTDat aBase+" / " +cName+" F" +cCr r Emp+" ) "
cCommand += " SRCFI LE( " +cTDat aBase+" / QSPSRC) "
cCommand += " SRCMBR( " +cName+" F" +cCr r Emp+" ) "
cCommand += " REPLACE( *YES) "

I f TCSysExe( cCommand ) ! = 0
ALERT( TCExeEr r or ( ) )
Endi f



Funo para uso apenas com o TOPConnect em servidores AS/400.


Funes acessrias para uso em fontes com interao com o TOTVS DbAccess

CHANGEQUERY()

Funo que efetua as adequaes necessrias a query para que a mesma possa ser executada
adequadamente no banco de dados em uso pela aplicao ERP atravs do TopConnect.

Esta funo necessria pois a aplicao ERP Protheus pode ser utilizada com diversos bancos
de dados, e cada banco possui particularidades em sua sintaxe, de forma que mesmo uma
query escrita respeitando o padro SQL ANSI pode necessitar de adequaes.

E Sintaxe: ChangeQuery(cQuery)

E Parmetros:

cQuery String contendo a query escrita em sintaxe SQL ANSI.

E Retorno:

String
Query adequada em funo do banco em uso pela conexo ativa com a
aplicao TopConnect.


E Exemplo:


cQuer y : = " SELECT DI STI NCT CV8_PROC FROM " +RETSQLNAME( " CV8" )
cQuer y += " WHERE "
cQuer y += " CV8_FI LI AL = ' " +MV_PAR01+" ' AND "
cQuer y += " D_E_L_E_T_ = ' ' "
cQuer y += " ORDER BY CV8_PROC"
cQuer y : = ChangeQuer y( cQuer y)
dbUseAr ea( . T. , " TOPCONN" , TCGenQr y( , , cQuer y) , " CV8QRY" , . F. , . T. )


- 578 -

ADVPL Completo





A funo ChangeQuery() deve obrigatoriamente ser utilizada pelos fontes da
aplicao ERP, pois a mesma pode ser instalada em diversos ambientes,
utilizando os vrios bancos de dados homologados, mas para
desenvolvimentos especficos de clientes, o analista pode optar por no
utilizar a funo ChangeQuery().

A razo disto permitir ao analista, que tenha conhecimentos mais apurados
do banco de dados em uso pelo cliente, utilizar uma sintaxe focada em utilizar
melhor os recursos do banco, otimizando a performance da aplicao.


RETFULLNAME()

Retorna o nome real da tabela no banco de dados para utilizao desta na seleo da query.


A funo RetFullName() no exclusiva para uso em queries, sendo utilizada
pela aplicao ERP para verificar o nome da tabela para o alias, especificado
no SX2 da empresa indicada.


E Sintaxe: RetFullName(cAlias, cEmp)

E Parmetros:

cAlias Nome da rea de trabalho da aplicao para identificao da tabela no banco
de dados.
cEmp Cdigo da empresa a ser avaliada.

E Retorno:

String Nome completo / real da tabela no banco de dados.

E Exemplo:


SA1- >( DbSet Or der ( 1) ) / / A1_FI LI AL+A1_COD+A1_LOJ A
cOr der : = Sql Or der ( I ndexKey( ) )

cQuer y : = " SELECT * FROM " +RETSQLNAME( " SA1" ) + " WHERE "
cQuer y += Ret Sql Cond( " SA1" )
cQuer y += " ORDER BY " +cOr der

dbUseAr ea( . T. , " TOPCONN" , TcGenQr y( , , cQuer y) , " TRBSQL" , . T. , . F. )

cReal Name : = Ret Ful l Name( " TRBSQL" )



- 579 -

ADVPL Completo



RETSQLCOND()

Retorna uma string com as condies padres de uso em uma query.

E Sintaxe: RetSqlCond(cAlias)

E Parmetros:

cAlias Nome do alias para composio a string de condies.

E Retorno:

String
Condies de seleo padres para o alias indicado.
As condies padres so:
ALIAS_FILIAL = xFilial(ALIAS) .AND.
ALIAS.D_E_L_E_T_ = .


E Exemplo:


cQuer y : = " SELECT DI STI NCT CV8_PROC FROM " +RETSQLNAME( " CV8" )
cQuer y += " WHERE "
cQuer y += Ret Sql Cond( " CV8" )
cQuer y += " ORDER BY CV8_PROC"
cQuer y : = ChangeQuer y( cQuer y)
dbUseAr ea( . T. , " TOPCONN" , TCGenQr y( , , cQuer y) , " CV8QRY" , . F. , . T. )


RETSQLNAME()

Retorna o nome padro da tabela para seleo no banco de dados atravs da query.

E Sintaxe: RetSqlName(cAlias)

E Parmetros:

cAlias Alias para ser avaliado o nome padro da tabela.

E Retorno:

String Nome completo da tabela para seleo atravs da query.

E Exemplo:


cQuer y : = " SELECT DI STI NCT CV8_PROC FROM " +RETSQLNAME( " CV8" )
cQuer y += " WHERE "
cQuer y += Ret Sql Cond( " CV8" )
cQuer y += " ORDER BY CV8_PROC"
cQuer y : = ChangeQuer y( cQuer y)
dbUseAr ea( . T. , " TOPCONN" , TCGenQr y( , , cQuer y) , " CV8QRY" , . F. , . T. )


- 580 -

ADVPL Completo



RETSQLTABLE()

Retorna o nome real da tabela para seleo no banco de dados atravs da query.

E Sintaxe: RetSqlTable(cAlias)

E Parmetros:

cAlias Alias para ser avaliado o nome real da tabela.

E Retorno:

String Nome real da tabela no banco de dados.


E Exemplo:


cQuer y : = " SELECT DI STI NCT CV8_PROC FROM " +RETSQLTABLE( " CV8" )
cQuer y += " WHERE "
cQuer y += Ret Sql Cond( " CV8" )
cQuer y += " ORDER BY CV8_PROC"
cQuer y : = ChangeQuer y( cQuer y)
dbUseAr ea( . T. , " TOPCONN" , TCGenQr y( , , cQuer y) , " CV8QRY" , . F. , . T. )



SQLCOPY()

Cria um arquivo no formato especificado pela configurao LOCALFILES do ambiente com o
retorno da query.

E Sintaxe: SqlCopy(cFile, cWhere, aStru, cAlias, aDates, lRecno)

E Parmetros:

cFile Nome do arquivo temporario destino a ser gerado
cWhere Condicao "Where" da query
aStru Array com os Campos a serem selecionados pela query
cAlias Alias origem dos dados
aDates Array com os nomes dos campos que devero ter o tratamento da funo
TCSetField() para o formato de data.
lRecno Se copia o contedo da coluna R_E_C_N_O_ para o arquivo gerado.

E Retorno:

Nenhum .



- 581 -

ADVPL Completo



SQLORDER()

Converte a sintaxe de um indce em formato ISAM (CODEBASE) para o formato SQL ANSI

E Sintaxe: SqlOrdem(cOrder)

E Parmetros:

cOrder Sintaxe de ndice em formato ISAM.

E Retorno:

String ndice convertido para sintaxe SQL ANSI


E Exemplo:


SA1- >( DbSet Or der ( 1) ) / / A1_FI LI AL+A1_COD+A1_LOJ A
cOr der : = Sql Or der ( I ndexKey( ) )

cQuer y : = " SELECT * FROM " +RETSQLNAME( " SA1" ) + " WHERE "
cQuer y += Ret Sql Cond( " SA1" )
cQuer y += " ORDER BY " +cOr der

dbUseAr ea( . T. , " TOPCONN" , TcGenQr y( , , cQuer y) , " TRBSQL" , . T. , . F. )

cReal Name : = Ret Ful l Name( " TRBSQL" )



















- 582 -

ADVPL Completo



SQLTOTRB()

Preenche um arquivo temporrio com o contedo do retorno da query.

E Sintaxe: SqlToTrb(cQuery, aStru, cAlias)

E Parmetros:

cQuery Query para seleo dos registros no banco de dados.
aStru Array contendo a estrutura do arquivo temporrio a ser preenchido com os
dados de retorno da query.
cAlias Alias do arquivo temporrio a ser preenchido com os dados de retorno da
query.


Para correta utilizao da funo SQLTOTRB() o arquivo temporrio deve estar
criado e com a rea de trabalho (ALIAS) definido.

E Retorno:

Nenhum .


E Exemplo:


/ / Ar qui vo de t r abal ho que ser ut i l i zado pel a MaWndBr owse

cCampos: = " "
nX : = 0
nMax : = Len( aSt r uSQL)

aEval ( aSt r uSQL, {| aCampo| nX++, cCampos += aCampo[ 1] +;
I I F( nX == nMax, ' ' , ' , ' ) })

cAr qTr b : = Cr i aTr ab( aSt r uSQL, . T. )
dbUseAr ea( . T. , __LOCALDRI VER, cAr qTr b, cAl i as, . T. , . F. )
cQuer y : = " SELECT " +cCampos+" FROM " +Ret Sql Name( " SA1" ) +" ( NOLOCK) "
Sql ToTr b( cQuer y, aSt r uSQL, cAl i as)

cAr qI nd : = Cr i aTr ab( Ni l , . F. )
cChave : = " A1_FI LI AL+A1_COD+A1_LOJ A"
I ndRegua( cAl i as, cAr qI nd, cChave, , , " I ndexando Regi st r os. . . " )

dbSel ect Ar ea( cAl i as )
dbGot op( )






- 583 -

ADVPL Completo



40.3. Aplicaes com controle de comunio com o Banco de Dados

Utilizando as funo de interao com a aplicao TopConnect / TOTVS DbAccess tm-se um
grande nmero de aplicaes que podem ser desenvolvidas, combinando-se recursos
previamente estudados nos mdulos Bsico, Intermedirio e utilizando os conceitos de
orientao objetos e as classes de objetos disponveis na linguagem ADVPL, tais como:

E Rotinas de processamento utilizando queries para seleo dos registros;
E Relatrios para seleo dos registros;
E Rotinas de atualizao para execuo dos comando de atualizao diretamente
no banco de dados.

Em resumo, qualquer aplicao do ambiente ERP pode ser escrita utilizando os recursos de
interao com a aplicao TopConnect / TOTVS DbAccess, para obter, manipular e atualizar os
dados do banco do banco de dados.

Neste tpico sero detalhadas duas aplicaes utilizando estas funes, cujo grau de
complexidade ilustra bem o potencial desta ferramenta.

E MaWndBrowse com Alias Temporrio gerado por Query

E Banco de dados de interface


40.3.1. MaWndBrowse com Alias Temporrio gerado por Query

Conforme descrito no tpico 6.1. MaWndBrowse, esta funo permite a montagem de
um browse cuja estrutura do arquivo no necessita estar definida no dicionrio de dados
da aplicao ERP.

Utilizando esta particularidade da MaWndBrowse possvel ento compor um alias
temporrio contendo o retorno de uma query e exibi-lo em um browse.

A vantagem deste BrowseSQL em relao ao browse de uma tabela normal a
possibilidade de combinar informaes de vrias tabelas atravs de uma query e exibi-
las em tela.

Algumas aplicaes interessantes para este recurso seriam:

E Consulta Kardex em tela, pois este relatrio combina dados das tabelas de
itens dos documentos de entrada (SD1), itens dos documentos de sada
(SD2) e movimentaes internas (SD3).

E Conciliao de contabilizaes, pois uma contabilizao composta por
uma origem, a qual pode ser praticamente de qualquer tabela de
movimentos da aplicao ERP, e de um ou mais lanamentos contbeis
(CT2) gerados por esta origem.

E Demonstrao em tela das depreciaes dos bens do imobilizado por
perodo, compondo dinamicamente as colunas de depreciao de acordo
com o intervalo de meses selecionados. Este recurso interessante pois
elimina a limitao de espao da impresso e pode ser combinado com a
funcionalidade de exportao de grids de dados para o Microsoft Excel.



- 584 -

ADVPL Completo


Exemplo: MaWndBrowse com Alias Temporrio gerado por Query


Este exemplo de uso da MaWndBrowse com alias de temporrio utilizando
queries derivado do exemplo de utilizao da MaWndBrowse com arquivo
temporrio descrito no item 6.1. MaWndBrowse.


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | WndSQLTRB | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Demonst r a a ut i l i zao da MaWndBr owse comSQL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */


User Funct i on WndSQLTRB( )

/ / Var i vei s par a o Ar qui vo Tempor ar i o
Local cChave : = " "
Local cAr qTr b : = " "
Local aSt r uTRB : = {}
Local aSt r uSQL : = SA1- >( DbSt r uct ( ) )

/ / Var i vei s par a o MaWndBr owse
Local cTi t ul o : = " Cadast r o Tempor ar i o" / / T t ul o obr i gat r i o
Local cAl i as : = " SA1" / / Al i as da t abel a cor r ent e podendo ser TRB
Local cFunLeg : = " " / / Funo que dever r et or nar umval or l gi co e comi sso
ser at r i bu do semaf r o na pr i mei r a col una do br owse
Local cTopFun : = " " / / Most r ar os r egi st r os coma chave de
Local cBot Fun : = " " / / Most r ar os r egi st r os coma chave at e
Local l Cent er ed : = . T. / / Val or ver dadei r o cent r al i za
Local aResour ce : = {} / / aAdd( aResour ce, {" I MAGEM" , " Text o si gni f i cat i vo" })
Local nModel o : = 1 / / 1- Menu do aRot i na
Local aPesqui : = {} / / aAdd( aPesqui {" T t ul o" , nOr dem}) , se no passado ser
ut i l i zado o AxPesqui
Local cSeek : = " " / / Chave pr i nci pal par a a busca, exempl o: xFi l i al ( " ???" )
Local l Di c : = . T. / / Par met r o emconj unt o comaCampos
Local l SavOr d : = . T. / / Est abel ecer a or demaps pesqui sas.

/ / Var i avei s par a a MsAdvSi ze
Local l EnchBar : = . F. / / Se a j anel a de di l ogo possui r enchoi cebar ( . T. )
Local l Padr ao : = . F. / / Se a j anel a deve r espei t ar as medi das padr es do
Pr ot heus ( . T. ) ou usar o mxi mo di spon vel ( . F. )
Local nMi nY : = 400 / / Al t ur a m ni ma da j anel a

Local aSi ze : = MsAdvSi ze( l EnchBar , l Padr ao, nMi nY)

Pr i vat e cCadast r o : = " "
Pr i vat e aCampos : = {} / / Se l Di c=. T. ut i l i zar o SX3, do cont r r i o o aCampos
i nf or mado - > aAdd( aCampo, {X3_CAMPO, X3_PI CTURE, X3_TI TULO, X3_TAMANHO})
Pr i vat e aRot i na : = {} / / I dnt i co ao aRot i na par a mBr owse


- 585 -

ADVPL Completo



Continuao:

aAdd( aRot i na, {" Vi sual i zar " , " U_TcVi sual " , 0, 2}) / / Desenvol ver Enchoi ce par a
campos de ar qui vo t empor r i o
aAdd( aRot i na, {" I ncl ui r " , " U_TcI ncl ui " , 0, 3}) / / Desenvol ver Enchoi ce par a
campos de ar qui vo t empor r i o
aAdd( aRot i na, {" Al t er ar " , " U_TcAl t er a" , 0, 4}) / / Desenvol ver Enchoi ce par a
campos de ar qui vo t empor r i o


aAdd( aRot i na, {" Excl ui r " , " U_TcExcl ui " , 0, 5}) / / Desenvol ver Enchoi ce par a
campos de ar qui vo t empor r i o

/ / Est r ut ur a do Ar qui vo: Nome do campo / t i po, t amanho, deci mai s ( SX3 par a
t empor r i o)
/ *
AADD( aSt r uTRB, {" TRB_FI LI AL" , " C" , 02, 0})
/ / Nome_Campo , Ti po_Campo, Tamanho, Deci mal
AADD( aSt r uTRB, {" TRB_I D" , " C" , 14, 0})
AADD( aSt r uTRB, {" TRB_NOME" , " C" , 20, 0})
AADD( aSt r uTRB, {" TRB_I DADE" , " N" , 03, 0})
AADD( aSt r uTRB, {" TRB_STATUS" , " C" , 01, 0})
*/
/ / aCampos padr o par a a MaWndBr owse
/ / AADD( aCampos, {<Nome_Campo>, <Pi ct ur e>, <Ti t ul o>, <Tamanho>})

/ / aCampos mel hor ado par a a WndBr wTRB
/ / AADD( aCampos, {<Nome_Campo>, <Pi ct ur e>, <Ti t ul o>, <Tamanho>, <Ti po>, <cWhen>, ;
/ / <l Obr i gat or i o>})
/ / Not a: l Obr i gat or i o deve ser sempr e a ul t i ma i nf or macao do aCampos
/ *
AADD( aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02, " C" , " . F. " , . T. })
AADD( aCampos, {" TRB_I D" , " @! " , " Mat r i cul a" , 14, " C" , " . F. " , . T. })
AADD( aCampos, {" TRB_NOME" , " @! " , " Nome" , 20, " C" , " . T. " , . F. })
AADD( aCampos, {" TRB_I DADE" , " @E 999" , " I dade" , 03, " N" , " . T. " , . F. })
AADD( aCampos, {" TRB_STATUS" , " @! " , " St at us" , 01, " C" , " . T. " , . T. })
*/

I f ( Sel ect ( cAl i as ) <> 0 )
dbSel ect Ar ea ( cAl i as )
dbCl oseAr ea ( )
Endi f

/ / Ar qui vo de t r abal ho que ser ut i l i zado pel a MaWndBr owse

cCampos: = " "
nX : = 0
nMax : = Len( aSt r uSQL)
aEval ( aSt r uSQL, {| aCampo| nX++, cCampos += aCampo[ 1] +;
I I F( nX == nMax, ' ' , ' , ' ) })

cAr qTr b : = Cr i aTr ab( aSt r uSQL, . T. )
dbUseAr ea( . T. , __LOCALDRI VER, cAr qTr b, cAl i as, . T. , . F. )
cQuer y : = " SELECT " +cCampos+" FROM " +Ret Sql Name( " SA1" ) +" ( NOLOCK) "
Sql ToTr b( cQuer y, aSt r uSQL, cAl i as)





- 586 -

ADVPL Completo


Continuao:

cAr qI nd : = Cr i aTr ab( Ni l , . F. )
cChave : = " A1_FI LI AL+A1_COD+A1_LOJ A"

I ndRegua( cAl i as, cAr qI nd, cChave, , , " I ndexando Regi st r os. . . " )

dbSel ect Ar ea( cAl i as )
dbGot op( )

MaWndBr owse( aSi ze[ 7] , aSi ze[ 2] , aSi ze[ 6] , aSi ze[ 5] , cTi t ul o, cAl i as, / *aCampos*/ , ;
aRot i na, , cTopFun, cBot Fun, l Cent er ed, , nModel o, , cSeek, l Di c, l SavOr d)


I f ( Sel ect ( cAl i as ) <> 0 )
dbSel ect Ar ea ( cAl i as )
dbCl oseAr ea ( )
Endi f

I f Fi l e( cAr qI nd+Or dBagExt ( ) )
FEr ase( cAr qI nd+Or dBagExt ( ) )
ENDI F

DbSel ect Ar ea( " SA1" )
DbSet Or der ( 1)

Ret ur n

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TcVi sual | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */


USER FUNCTI ON TcVi sual ( cAl i as, nReg, nOpc)

LOCAL aCposEnch : = {}
LOCAL nLi nha : = 15
LOCAL nCol una : = 10
LOCAL nOpcE : = aRot i na[ nOpc] [ 4] / / Opcao de ver dade
LOCAL bOk : = {| | oDl g: End( ) }
LOCAL bCancel : = {| | oDl g: End( ) }
LOCAL nX

/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})
/ / aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02}






Continuao:

- 587 -

ADVPL Completo



For nX : = 1 t o Len( aCampos)

I f nX > 1
nLi nha : = I I F( nX%2 > 0 , nLi nha : = nLi nha +015, nLi nha) / / I mpar
nCol una : = I I F( nX%2 == 0, nCol una : = nCol una+170, 10) / / Par
Endi f

AADD( aCposEnch, {" _" +aCampos[ nX] [ 1] , {nLi nha, nCol una} , ;
aCampos[ nX] [ 3] , aCampos[ nX] [ 2] , " Al l waysTr ue( ) " , ;
" " , " . F. " , aCampos[ nX] [ 4] })

Set Pr vt ( " _" +aCampos[ nX] [ 1] )

&( " _" +aCampos[ nX] [ 1] ) : = ( cAl i as) - >&( aCampos[ nX] [ 1] )

Next nX

oDl g : = TDi al og( ) : New( 000, 000, 400, 650, cCadast r o, , , , , , , , , . T. )

TEnchoi ce( oDl g, aCposEnch, , , , , . T. )

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, bOk, bCancel , . F. , {}, nReg, cAl i as) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

RETURN

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TcI ncl ui | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TcI ncl ui ( cAl i as, nReg, nOpc)

LOCAL aCposEnch : = {}
LOCAL nLi nha : = 15
LOCAL nCol una : = 10
LOCAL nOpcE : = aRot i na[ nOpc] [ 4] / / Opcao de ver dade
LOCAL bOk
LOCAL bCancel : = {| | oDl g: End( ) }
LOCAL aAr ea : = Get Ar ea( )
LOCAL nX

/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})
/ / aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02}





Continuao:


- 588 -

ADVPL Completo


For nX : = 1 t o Len( aCampos)

I f nX > 1
nLi nha : = I I F( nX%2 > 0 , nLi nha : = nLi nha +015, nLi nha) / / I mpar
nCol una : = I I F( nX%2 == 0, nCol una : = nCol una+170, 10) / / Par
Endi f

AADD( aCposEnch, {" _" +aCampos[ nX] [ 1] , {nLi nha, nCol una} , ;
aCampos[ nX] [ 3] , aCampos[ nX] [ 2] , " Al l waysTr ue( ) " , ;
" " , " . T. " , aCampos[ nX] [ 4] })

Set Pr vt ( " _" +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

oDl g : = TDi al og( ) : New( 000, 000, 400, 650, cCadast r o, , , , , , , , , . T. )

TEnchoi ce( oDl g, aCposEnch, , , , , . T. )

bOk : = {| | I I F( U_TVal i d( cAl i as, nReg, nOpcE, aCampos) , ;
( U_TGr avar ( cAl i as, nReg, nOpcE, aCampos) , oDl g: End( ) ) , ) }

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, bOk, bCancel , . F. , {}, nReg, cAl i as) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

RETURN







- 589 -

ADVPL Completo



Continuao:

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TcAl t er a | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TcAl t er a( cAl i as, nReg, nOpc)

LOCAL aCposEnch : = {}
LOCAL nLi nha : = 15
LOCAL nCol una : = 10
LOCAL nOpcE : = aRot i na[ nOpc] [ 4] / / Opcao de ver dade
LOCAL bOk
LOCAL bCancel : = {| | oDl g: End( ) }
LOCAL aAr ea : = Get Ar ea( )
LOCAL nX

/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})
/ / aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02}

For nX : = 1 t o Len( aCampos)

I f nX > 1
nLi nha : = I I F( nX%2 > 0 , nLi nha : = nLi nha +015, nLi nha) / / I mpar
nCol una : = I I F( nX%2 == 0, nCol una : = nCol una+170, 10) / / Par
Endi f

AADD( aCposEnch, {" _" +aCampos[ nX] [ 1] , {nLi nha, nCol una} , ;
aCampos[ nX] [ 3] , aCampos[ nX] [ 2] , " Al l waysTr ue( ) " , ;
" " , aCampos[ nX] [ 6] , aCampos[ nX] [ 4] })

Set Pr vt ( " _" +aCampos[ nX] [ 1] )

&( " _" +aCampos[ nX] [ 1] ) : = ( cAl i as) - >&( aCampos[ nX] [ 1] )

Next nX

oDl g : = TDi al og( ) : New( 000, 000, 400, 650, cCadast r o, , , , , , , , , . T. )

TEnchoi ce( oDl g, aCposEnch, , , , , . T. )

bOk : = {| | I I F( U_TVal i d( cAl i as, nReg, nOpcE, aCampos) , ;
( U_TGr avar ( cAl i as, nReg, nOpcE, aCampos) , oDl g: End( ) ) , ) }

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, bOk, bCancel , . F. , {}, nReg, cAl i as) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

RETURN



- 590 -

ADVPL Completo


Continuao:

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TcExcl ui | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TcExcl ui ( cAl i as, nReg, nOpc)

LOCAL aCposEnch : = {}
LOCAL nLi nha : = 15
LOCAL nCol una : = 10
LOCAL nOpcE : = aRot i na[ nOpc] [ 4] / / Opcao de ver dade
LOCAL bOk
LOCAL bCancel : = {| | oDl g: End( ) }
LOCAL nX

/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aCposEnch, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})
/ / aCampos, {" TRB_FI LI AL" , " @! " , " Fi l i al " , 02}

For nX : = 1 t o Len( aCampos)

I f nX > 1
nLi nha : = I I F( nX%2 > 0 , nLi nha : = nLi nha +015, nLi nha) / / I mpar
nCol una : = I I F( nX%2 == 0, nCol una : = nCol una+170, 10) / / Par
Endi f

AADD( aCposEnch, {" _" +aCampos[ nX] [ 1] , {nLi nha, nCol una} , ;
aCampos[ nX] [ 3] , aCampos[ nX] [ 2] , " Al l waysTr ue( ) " , ;
" " , " . F. " , aCampos[ nX] [ 4] })

Set Pr vt ( " _" +aCampos[ nX] [ 1] )

&( " _" +aCampos[ nX] [ 1] ) : = ( cAl i as) - >&( aCampos[ nX] [ 1] )

Next nX

oDl g : = TDi al og( ) : New( 000, 000, 400, 650, cCadast r o, , , , , , , , , . T. )

TEnchoi ce( oDl g, aCposEnch, , , , , . T. )

bOk : = {| | I I F( U_TVal i d( cAl i as, nReg, nOpcE, aCampos) , ;
( U_TGr avar ( cAl i as, nReg, nOpcE, aCampos) , oDl g: End( ) ) , ) }

oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, bOk, bCancel , . F. , {}, nReg, cAl i as) }
oDl g: l Cent er ed : = . T.
oDl g: Act i vat e( )

RETURN



Continuao:

- 591 -

ADVPL Completo



/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TcVal i d | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON TcVal i d( cAl i as, nReg, nOpc, aCampos)
LOCAL l Ret
LOCAL nX
LOCAL nPosObr i g : = Len( aCampos[ 1] )

For nX : = 1 t o Len( aCampos)
I F aCampos[ nX, nPosObr i g] == . T.
I F ! ( l Ret : = ! Empt y( &( " _" +aCampos[ nX, 1] ) ) )
Hel p( " TEnchoi ce" , 1, " HELP" , " OBRI GATORI O" , " Exi st emcampos
obr i gat or i os nao pr eenchi dos" , 1, 0)
RETURN l Ret / / EXI T
ENDI F
ENDI F
Next nX

I F nOpc == 3
I F ! ( l Ret : = ! ( ( cAl i as) - >( dbSeek( _TRB_FI LI AL+_TRB_I D) ) ) )
Hel p( " TEnchoi ce" , 1, " HELP" , " I NCLUSAO" , " J a exi st e umr egi st r o comest a
chave" , 1, 0)
ENDI F
ELSE
I F ! ( l Ret : = ( cAl i as) - >( dbSeek( _TRB_FI LI AL+_TRB_I D) ) )
Hel p( " TEnchoi ce" , 1, " HELP" , " ALTERACAO" , " Nao exi st e umr egi st r o com
est a chave" , 1, 0)
ENDI F
ENDI F

RETURN l Ret










- 592 -

ADVPL Completo




Continuao:

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TcGr avar | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */


USER FUNCTI ON TcGr avar ( cAl i as, nReg, nOpc, aCampos)
LOCAL nX

RecLock( cAl i as, nOpc==3)
I F nOpc == 5
DbDel et e( )
ELSE
For nX : = 1 t o Len( aCampos)
( cAl i as) - >&( aCampos[ nX] [ 1] ) : = &( " _" +aCampos[ nX] [ 1] )
Next nX
ENDI F
Msunl ock( )

RETURN





















- 593 -

ADVPL Completo




Continuao:

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | TEnchoi ce | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | Enchoi ce par a ar qui vos t empor ar i os |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on TEnchoi ce( oDl g, aCampos, nLef t E, nTopE, nHei ght E, nWi dt hE, ;
l EnchBar )

Local aSays : = {}
Local aGet s : = {}
Local cCapt i on : = " "
Local cPi ct : = " "
Local cVal i d : = " "
Local cF3 : = " "
Local cWhen : = " "
Local cBl KSay : = " "
Local cBl kGet : = " "
Local cBl KVl d : = " "
Local cBl KWhen : = " "
Local nLef t : = 0
Local nTop : = 0
Local nI : = 0

Def aul t l EnchBar : = . F.
Def aul t nLef t E : = I I F( l EnchBar , ( oDl g: nLef t ) +16, 2)
Def aul t nTopE : = 2
Def aul t nHei ght E : = ( oDl g: nHei ght ) - 135
Def aul t nWi dt hE : = ( oDl g: nWi dt h) - 102
/ / Padr ao Model o2( ) , coml When - > cWhen
/ / AADD( aC, {" <Var i avel >" , {nLi nha, nCol una}
/ / , " <Ti t ul o>" , " <Pi ct ur e>" , " <Val i dacao>" , " <F3>" , " <l When>" , <Tamanho>})

I f Len( aCampos) > 0

oScr ol l : = TScr ol l Box( ) : New( oDl g, nLef t E, nTopE, nHei ght E , nWi dt hE, . T. , ;
. T. , . T. )

For nI : =1 t o Len( aCampos)

I f Len( aCampos[ nI ] ) ==8

cCampo : = aCampos[ nI , 1]
nLef t : = aCampos[ nI , 2, 1] - 13
nTop : = aCampos[ nI , 2, 2]
cCapt i on: = I i f ( Empt y( aCampos[ nI , 3] ) , " " , aCampos[ nI , 3] )
cPi ct : = I i f ( Empt y( aCampos[ nI , 4] ) , Ni l , aCampos[ nI , 4] )
cVal i d : = I i f ( Empt y( aCampos[ nI , 5] ) , " . t . " , aCampos[ nI , 5] )
cF3 : = I i f ( Empt y( aCampos[ nI , 6] ) , NI L , aCampos[ nI , 6] )

cWhen : = I i f ( Empt y( aCampos[ nI , 7] ) , " . T. " , aCampos[ nI , 7] )


- 594 -

ADVPL Completo



Continuao:

nWi dt hG : = I i f ( Empt y( aCampos[ nI , 8] ) , 100, ;
I i F( aCampos[ nI , 8] *3. 5 > 100, 100, ni l ) )

cBl KSay : = " {| | OemToAnsi ( ' " +cCapt i on+" ' ) }"
cBl kGet : = " { | u | I f ( PCount ( ) == 0, ;
" +cCampo+" , " +cCampo+" : = u ) }"
cBl KVl d : = " {| | " +cVal i d+" }"
cBl KWhen : = " {| | " +cWhen+" }"

AADD( aSays, Ar r ay( 1) )
aSays[ nI ] : = TSay( ) : New( nLef t +1, nTop, &( cBl kSay) , oScr ol l , , , ;
. F. , . F. , . F. , . T. , , , 50, 8, . F. , . F. , . F. , . F. , ;
. F. )
AADD( aGet s, Ar r ay( 1) )

aGet s[ nI ] : = TGet ( ) : New( nLef t , nTop+50, &( cBl KGet ) , oScr ol l , ;
nWi dt hG, 11, cPi ct , &( cBl kVl d) , , , , . F. , , . T. , , ;
. F. , &( cBl kWhen) , . F. , . F. , , . F. , . F. , cF3, ;
( cCampo) )

EndI f
Next
Endi f

Ret ur n





















- 595 -

ADVPL Completo



40.3.2. Banco de dados de interface

O termo Banco de dados de interface utilizado para classificar uma aplicao ADVPL escrita
com funes de interao com a aplicao TopConnect / TOTVS DbAccess para realizar a
integrao entre a aplicao ERP Protheus e outro sistema, utilizando como meio de
comunicao um banco de dados e no mais importao de arquivos em N formatos, tais
como .TXT, .DBF e similares.



Este tipo de integrao no visa substituir formatos de integraes padres j
existentes como o padro CNAB e o padro Web XML.
Sua aplicao integrao direta entre sistemas atravs de um banco de
dados com formato e padres comuns entre elas.


As vantagens da utilizao do conceito de Banco de Dados de Interface em comparao da
integrao por importao / exportao de arquivos so:

E Maior controle da integrao das informaes entre os sistemas, permitindo um
tratamento adequado de eventos de erros;

E Transparncia e rastreabilidade das informaes integradas, implementando
confiabilidade no processo;

E Possibilidade de utilizao de um tipo de banco de dados pela aplicao ERP
Protheus e de outro tipo de banco de dados para integrao entre os sistemas.

E Possibilidade de desenvolvimento de ferramentas para monitorar e gerenciar a
integrao entre os sistemas atravs do controle da rea de interface no banco
de dados, inclusive com a utilizao de Stored Procedures para aumentar a
performance da aplicao de interface.

Consideraes relevantes sobre as funes TCLink() e TCSetConn()

E A funo TCLink() permite a abertura de uma conexo com um banco de dados,
desde que haja o OBDC configurado no ambiente da aplicao e na aplicao
TOPConnect / TOTVS DBAccess;

E Cada abertura de conexo atravs da funo TcLink() consome uma licensa de
usurio do TOPConnect / TOTVS DBAccess. Aps a abertura de uma conexo a
mesma deve ser selecionada pela funo TcSetConn() para se tornar a conexo
ativa;

E Podem ser utilizadas diversas conexes em uma mesma aplicao ADVPL, e
podem ser utilizadas as informaes das tabelas j abertas e vinculadas a uma
rea de trabalho independente da conexo que est ativa. Somente deve ser
verificado que para abertura de uma tabela e vnculo desta com uma rea de
trabalho obrigatoriamente deve estar ativa a conexo com o banco de dados que
contm esta tabela.

E A conexo aberta entre o ERP Protheus e o TopConnect / DbAccess possu o
nmero de referncia 0. Desta forma, aps finalizar uma conexo aberta com o
comando TCLink() deve ser efetuado um TCSetConn(0) para restaurar como
conexo ativa a conexo padro do Protheus com o TopConnec.


- 596 -

ADVPL Completo


A figura abaixo ilustra a estrutura tpica de uma aplicao utilizando o conceito de Banco de
Dados de Interface, com foco na aplicao ERP Protheus e seus recursos pr-disponveis:




Tarefa Descrio Detalhamento
01 Exportao Protheus -> DbInterface
Utilizao de queries ou stored
procedures para atualizao das
tabelas do banco DBInterface no
formato necessrio ao ERP X,
executadas a partir do ERP Protheus.
02 Importao DbInterface -> ERP X
Ferramentas proprietrias do ERP X
para leitura do DBInterface e
tratamento das informaes para
atualizao do banco de dados desta
aplicao.
03 Extrao ERP X -> DbInterface
Pode ser uma ferramenta proprietria
da aplicao ERP X, ou pode ser um
conjunto de queries e stored
procedures desenvolvidas em
conjunto com a equipe do ERP X e a
equipe TOTVS, permitindo o controle
de execuo da extrao pelo ERP
Protheus.
04 Importao DbInterface -> Protheus
Utilizao de queries ou stored
procedures para leitura das
informaes do DBInterface e
atualizao de tabelas intermedirias
no banco de dados do ERP Protheus,
executadas a partir do ERP Protheus.
05 Efetivao Protheus -> Protheus
Utilizao de funes prprias para
esta finalidade no ERP Protheus para
efetivao das informaes
importadas em informaes vlidas no
ERP. Estas funes normalmente so
compatveis com a execuo atravs
do recurso de MsExecAuto().


Consideraes complementares sobre o conceito de Banco de Dados de Interface

- 597 -

ADVPL Completo



E A utilizao de tabelas intermedirias no banco de dados Protheus apesar de no
ser obrigatria recomendada para permitir um tratamento adequado das
ocorrncias de efetivao das informaes, principalmente quando utilizada a
funo MsExecAuto() para executao das rotinas de efetivao dos dados;

E Para extrao das informaes tanto do banco de dados Protheus para
exportao, quanto do banco de dados do sistema ERP X recomendvel o uso
de Stored Procedures para aumentar a performance do processo como um todo.
importante lembrar que se o sistema ERP X possuir procedures de exportao
as mesmas podero ser executadas diretamente pelo Protheus atravs da funo
TCSpExec();

E recomendvel que as funcionalidades de Exportao, Extrao, Importao e
Efetivao sejam tratadas tanto com interfaces de execuo direta quanto
atravs de execuo via Job.






























- 598 -

ADVPL Completo



40.4. Embedded SQL Facilitador de Querys


O objetivo do Embedded SQL facilitar a escrita e leitura de query's. Foi definida uma sintaxe
para que se possa escrever a query diretamente no cdigo ADVPL, sem a necessidade de ficar
concatenando pedaos de string para compor a string final.

Disponibilidade do Recurso

Este recurso est disponvel apenas no Protheus 8. A utilizao do Embedded SQL divide-se
em : compilao do fonte, e execuo do fonte. Para ser possvel compilar um fonte com o
cdigo escrito no formato Embedded, deve ser utilizado um Protheus, com Build igual ou
superior a 7.00.050721p, em um ambiente com repositrio para TopConnect ( RPODB=TOP ).

A utiliao deste recurso tambm depende da atualizao da LIB 811, superior a 'Lib
20050902 - 811'.

E Exemplo bsico - Fonte atual


cQuer y : ' SELECT SE2. E2_PREFI XO, SE2. E2_NUM '
cQuer y += ' FROM ' +Ret Sql Tabl e( ' SE2' ) +' SE2, ' +Ret Sql Tabl e( ' QEK' ) +' QEK '
cQuer y += ' WHERE SE2. E2_FI LI AL= ' +xf i l i al ( ' SE2' ) +' AND '
cQuer y += ' SE2. E2_PREFI XO<> ' ' +cPr ef i xo+' ' AND '
cQuer y += ' SE2. D_E_L_E_T_ = ' ' '
cQuer y += ' ORDER BY ' +Ret Sql Or der ( ' SE2' )
dbUseAr ea( . T. , ' TOPCONN' , TcGenQr y( , , cQuer y) , ' E2TEMP' , . T. , . T. )
TCSet Fi el d( ' E2TEMP' , ' E2_EMI SSAO' , ' D' , 8, 0)


E Exemplo bsico - Utilizando Embedded SQL


Begi nSql al i as ' E2TEMP'
col umn E2_EMI SSAO as Dat e
%nopar ser %
SELECT SE2. E2_PREFI XO, SE2. E2_NUM
FROM %t abl e: SE2%SE2, %t abl e: QEK%QEK
WHERE SE2. E2_FI LI AL= %xf i l i al : SE2%AND
SE2. E2_PREFI XO<> %exp: cPr ef i xo%AND
SE2. %not Del %
ORDER BY %Or der : SE2%
EndSql



- 599 -

ADVPL Completo



Caractersticas operacionais - Sintaxe

O bloco onde ser escrito o Select deve sempre ser iniciado com 'BeginSql alias' e finalizado
com 'EndSql'.

Partes do cdigo que devem ser substitudas aparecem entre os sinais de %. Estas expresses
possuem tratamento especial em momento de execuo.

Qualquer instruo colocada entre BEGINSQL... ENDSQL, que no seja uma expresso %...% ,
ser inserida na query a ser enviada para o banco, de forma literal.

Variveis, expresses, funes aparecem iniciando com %exp: %.

Em column, especificar campos da query que so do tipo data, lgico ou numrico (DATE,
LOGIC, NUMBER). Esta linha trocada por chamadas funo TCSetField.

%noparser% indica que a query no deve passar pela funo 'ChangeQuery' antes de ser
enviada ao banco de dados. Caso no especificado, o default a string da query ser passada
automaticamente pela funo ChangeQuery.

%table:<alias>% substituda por RetSqlName(<alias>)

%notDel% substituda por D_E_L_E_T_= ' '

%Order:<alias>% substituda por SqlOrder(<alias>->(IndexKey()))

H 3 opes para o %Order:
1. %Order: <cAlias> % traduzido para
SqlOrder(<cAlias>->(IndexKey()))
2. %Order: <cAlias>, <nI ndice>% traduzido para
SqlOrder(<cAlias>->(IndexKey(<nIndice>)))
3. %Order: <cAlias>, <cNick>% traduzido para
SqlOrder(<alias>->(DBNickIndexKey(<cNick>)))

Limitao:

No permitido incluir funes no meio do cdigo 'embedded'. Se precisar, o valor deve ser
guardado em uma varivel antes do incio do BeginSql.


tam_cp := GetE2ValorSize()

Begi nSql al i as ' E2TEMP'
col umn E2_EMI SSAO as Dat e, E2_VALOR as Numer i c( tam_cp, 2)
. . .
EndSql



- 600 -

ADVPL Completo



Erros de Compilao

Caso seja utilizado algum argumento invlido para especificar as colunas, ou erros de sintaxe
nas expresses a serem transformadas para a montagem da query, a compilao do fonte
interrompida com a ocorrncia 'Syntax Error', informando a linha onde a primeira ocorrncia
foi encontrada.


ENDSQL (Error C2001 Syntax error:)


Caso a ocorrncia de compilao aponte diretamente para a linha do cdigo-fonte, onde est
escrita a instruo EndSql, verifique se existe algum espao em branco ou tabulao, a partir
do incio da linha, antes da instruo EndSql. A verso atual desde ambiente no suporta esta
declarao, exigindo que a instruo EndSql seja alinhada esquerda do fonte, sem espaos
ou tabulaes.


Erros de Execuo

E 'Query Argument Error : Alias [XXX] already in use.'

Caso a instruo BeginSQL especifique um alias que j esteja aberto (em uso), a aplicao
abortada com a ocorrncia de erro fatal acima, informando em XXX o alias utilizado.


E 'Query Argument Error : Invalid Value Type [X]'

Caso alguma expresso informada na Query, atravs da tag %exp: ... %, retorne um valor de
tipo diferente de 'C' Catacter, 'D' Data, 'N' Numrico, ou 'L' Lgico, a aplicao abortada com
a ocorrncia de erro acima, onde o tipo do argumento inesperado mostrado em [X].

E 'Type Mismach on +'

Esta ocorrncia, se reproduzida, informar na pilha de chamadas o nmero da linha do cdigo-
fonte correspondente instruo EndSQL. Ocorre caso alguma funo intermediria do engine
do Embedded SQL, excluindo-se as funes especificadas na query com a sintaxe %exp: ... %
, retornar um contedo no-caractere a ser acrescentado na Query. Esta ocorrncia de mais
difcil localizao, sendo til nestes casos a anlise do arquivo temporrio gerado pelo Protheus
IDE, no momento da compilao.

E Help NOFUNCW - Funo __EXECSQL

Caso um fonte com o Embedded SQL seja executado em um repositrio que no tenha sido
atualizado, OU que no seja um Repositrio para o ambiente TOPConnect ( RPODB=TOP), a
aplicao exibir a ocorrncia acima, indicando que a funo interna de execuo da Query
no est presente no ambiente. Verifique se a lib est atualizada, e se o RPO em uso de um
ambiente TOPConnect.


- 601 -

ADVPL Completo



Caractersticas operacionais - depurao

Dada a montagem da Query, no possvel depurar o bloco do cdigo-fonte compreendido
entre as instrues BeginSql e EndSql, no sendo considerados pontos de parada de depurao
( BreakPoints ), caso colocados neste intervalo do cdigo. A colocao de pontos de parada
deve ser realizada antes ou depois deste bloco.


Funo auxiliar - GETLastQuery()

Aps a abertura do cursor, no alias especificado, a funo GetLastQuery() retorna um array,
com 5 elementos, onde esto disponveis as seguintes informaes sobre a Query executada :

[1] cAlias - Alias usado para abrir o Cursor.
[2] cQuery - Query executada.
[3] aCampos - Array de campos com critrio de converso especificados.
[4] lNoParser - Caso .T., no foi utilizada ChangeQuery() na String original.
[5] nTimeSpend - Tempo, em segundos, utilizado para a abertura do Cursor.

E Exemplo mais completo: Cdigo ADVPL


Begi nSql al i as ' E2TEMP'
col umn E2_EMI SSAO as Dat e, E2_VALOR as Numer i c( t am_cp, 2)
col umn QEK_SKLDOC As Logi cal

%nopar ser %

SELECT SE2. E2_PREFI XO, SE2. E2_NUM, SE2. E2_FORNECE, SE2. E2_LOJ A, 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 %t abl e: SE2%SE2, %t abl e: qeK%QEK
WHERE SE2. E2_FI LI AL= %xf i l i al : SE2%AND
qek. %not Del % and
SE2. E2_PREFI XO<> %exp: cPr ef i xo%AND
SE2. E2_NUM<> %exp: ( cAl i as) - >M0_CODI GO%AND
SE2. E2_NUM<>45 AND
SE2. E2_FORNECE=%exp: Space( Len( SE2- >E2_FORNECE) ) %AND
SE2. E2_EMI SSAO<>%exp: MV_PAR06%AND
SE2. E2_LOJ A<>%exp: MV_PAR05%AND
SE2. E2_VALOR<>%exp: MV_PAR04%AND
qek. QEK_SKLDOC<>%exp: MV_PAR03% And
SE2. %not Del %
ORDER BY %Or der : SE2, 1%
EndSql



- 602 -

ADVPL Completo



E Exemplo mais completo: Fonte gerado pelo pr-compilador (PPO)


__execSql (
' E2TEMP' ,
' SELECT SE2. E2_PREFI XO, SE2. E2_NUM, SE2. E2_FORNECE, SE2. E2_LOJ A, 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 ' +Ret Sql Name( ' SE2' ) +' SE2, ' +Ret Sql Name( ' QEK' ) +' QEK WHERE
SE2. E2_FI LI AL= ' ' +xFi l i al ( ' SE2' ) +' ' AND qek. D_E_L_E_T_= ' ' AND
SE2. E2_PREFI XO<> ' +___SQLGet Val ue( CPREFI XO) +' AND SE2. E2_NUM <> ' +
___SQLGet Val ue( ( CALI AS) - >M0_CODI GO) +' AND SE2. E2_NUM<>45 AND SE2. E2_FORNECE= ' +
___SQLGet Val ue( SPACE( LEN( SE2- >E2_FORNECE) ) ) +' AND SE2. E2_EMI SSAO<> ' +
___SQLGet Val ue( MV_PAR06) +' AND SE2. E2_LOJ A<> ' +___SQLGet Val ue( MV_PAR05) +' AND
SE2. E2_VALOR<> ' +___SQLGet Val ue( MV_PAR04) +' AND qek. QEK_SKLDOC<> ' +
___SQLGet Val ue( MV_PAR03) +' And SE2. D_E_L_E_T_= ' ' ORDER BY ' +
Sql Or der ( SE2- >( I ndexKey( 1) ) ) , {{' E2_EMI SSAO' , ' D' , 8, 0}, {' E2_VALOR' , ' N' , t am_cp, 2},
{' QEK_SKLDOC' , ' L' , 1, 0}}, . T. )
)

























- 603 -

ADVPL Completo



41. Funcionalidade MsExecAuto

Sobre a MsExecAuto e Rotinas Automticas

A funcionalidade MsExecAuto, ou tambm conhecida como Rotina Automtica, permite a
execuo de rotinas do ambiente ERP Protheus por funes especficas, o que confere ao
desenvolvedor a possibilidade de efetuar tratamentos especficos antes da execuo da rotina
padro, e mais importante, no perder nenhuma funcionalidade que a rotina padro oferece.

Avaliando esta funcionalidade apenas pelo pargrafo acima, tem-se a impresso de ser um
recurso simples e at mesmo desnecessrio, pois um desenvolvedor experiente poderia
reproduzir todas as validaes e tratamentos existentes em sua rotina, ento porque ter de
tratar a rotina padro?

Para responder a esta pergunta devemos fazer as seguintes consideraes:

E A aplicao ERP est em constante evoluo:

No momento de desenvolvimento da rotina especfica era necessrio apenas o
tratamento de um conjunto isolado de informaes, mas com o aprimoramento do
ERP como um todo, agora so necessrios outros conjuntos de dados, os quais no
foram tratados pelo desenvolvedor naquele momento, mas que esto contemplados
na rotina padro do sistema.

Como o desenvolvedor optou por realizar todo o tratamento de forma especfica, em
uma atualizao do ERP este desenvolvimento precisar ser revisto ou at mesmo
refeito, o que implacar em custo para o cliente ou para o desenvolvedor.

Se o desenvolvedor tivesse optado por utilizar a rotina padro encapsulada em seu
desenvolvimento ele no teria problemas em adaptar sua rotina as novas
necessidades do sistema, pois a rotina padro j se preocupada com a
compatibilidade entre as verses, possibilitando que uma simples manuteno
atualize toda a rotina especfica, isto se esta manuteno for necessria, pois a
rotina padro poder tratar a novas informaes com contedos padres
dependendo da situao em que estas no forem informadas.

E A aplicao ERP pode ser personalidada atravs de pontos de entrada e
do dicionrio de dados:

A partir do momento que uma aplicao padro desenvolvida e disponibilizada a
mesma pode sofrer diversas personalizaes em campo, as quais podem ser
implementadas em paralelo ou aps o desenvolvimento da rotina especfica
disponibilizada pelo desenvolvedor.

Se esta situao no for prevista, a incluso de informaes utilizando a rotina
padro do sistema poder sofrer diversas validaes ou at mesmo efetuar a
gravao de informaes adicionais, as quais no esto visveis na rotina especfica,
gerando graves inconistncias na base de dados.

Avaliando estas consideraes percebesse o fator de sucesso que um desenvolvimento
especfico pode ter ao optar por refazer todos os tratamentos do sistema em detrimento de
utilizar a funcionalidade MsExecAuto, ou seja, qualquer modificao no ambiente,
independente do quo simples pode tornar a rotina especfica inadequada.

- 604 -

ADVPL Completo


Quando utilizar a funcionalidade MsExecAuto ?

Tendo em vista este cenrio fica a pergunta: Quando utilizar a funcionalidade MsExecAuto ?

A resposta pode ser bvia e at conservadora, mas Sempre que a funcionalidade estiver
disponvel naquele processo.

Em resumo, qualquer funcionalidade de interface, seja ela de carga ou contnua, qualquer
funcionalidade de atualizao, ou seja, qualquer manuteno na base de dados do sistema,
sempre que possvel, deve utilizar a funcionalidade MsExecAuto.


Processos da aplicao ERP com tratamentos para execuo por MsExecAuto

Pode-se dizer que as principais rotinas de atualizao do ERP Protheus atualmente possuem o
tratamento necessrio para sua execuo por MsExecAuto, e com base nas necessidades de
desenvolvimento internas da TOTVS e nas melhorias solicitadas por clientes e analistas de
implantao as demais rotinas necessrias so atualizadas para contemplar este tratamento.

O quadro abaixo ilustra um dos ltimos cenrios de tratamento de MsExecAuto pelas rotinas
da aplicao ERP Protheus.

Rotina Parmetros
ATFA010 (xAutoCab, xAutoItens, nOpcAuto)
ATFA030 (xAutoCab, nOpc)
ATFA035 (xAutoCab, nOpc)
CFGX016 (xAutoCab, xAutoItens)
CTBA015 (nOpcAuto, aAuto)
CTBA016 (nOpcAuto, aAuto)
CTBA020 (aRotAuto, nOpcAuto, aRotItem)
CTBA102 (xAutoCab, xAutoItens, nOpcAuto)
CTBA270 (xAutoCab, xAutoItens, nOpcAuto)
FATA140 (nOpcAuto, aAuto)
FATA220 (nOpcAuto, aAutoCab)
FATA300 (nOpcAuto, xAutoCab, xAutoAD2, xAutoAD3, xAutoAD4, xAutoAD9)
FATA310 (xAutoCab, xAutoItens, nOpcAuto)
FATA320 (xAutoVend, xAutoTask, xAutoCalend)
FINA010 (aRotAuto, nOpcAuto)
FINA040 (aRotAuto, nOpcAuto)
FINA050 (aRotAuto, nOpcion, nOpcAuto)
FINA070 (xAutoCab, nOpc)
FINA080 (xAutoCab, nOpc)
FINA390 (nPosArotina, xAutoCab, nOpcAuto)
MATA040 (aAuto, nOpcAuto)
MATA080 (aRotauto, nOpcAuto)
MATA103 (xAutoCab, xAutoItens, nOpcAuto, lWhenGet, xAutoImp)
MATA105 (xReservCab, xReservItens, nOpcAuto)
MATA110 (xAutoCab, xAutoItens, nOpcAuto)
MATA116A (xAutoCab, xAutoItens, lInclui)
MATA120 (nFuncao, xAutoCab, xAutoItens, nOpcAuto, )
MATA125 (xAutoCab, xAutoItens, nOpcAuto)
MATA140 (xAutoCab, xAutoItens, nOpcAuto)
MATA145 (xAutoCab, xAutoIt, xAutoIt2, nOpcAuto)
MATA150 (xAutoCab, xAutoItens, nOpcAuto)

- 605 -

ADVPL Completo


Rotina Parmetros
MATA175 (xRotAuto, xOpcAuto)
MATA185 (xAutoSCP, xAutoSD3, nOpcAuto, xPerg)
MATA200 (xAutoCab, xAutoItens, nOpcAuto)
MATA230 (aAuto, nOpcAuto)
MATA241 (xAutoCab, xAutoItens, nCallOpcx)
MATA242 (xAutoCab, xAutoItens, nOpcAuto)
MATA261 (aAutoItens, nOpcAuto)
MATA265 (xAutoCab, xAutoItens, nOpcAuto)
MATA266 (aAutoItens)
MATA267 (aAutoItens)
MATA360 (xAutoCab, xAutoItens, nOpcAuto)
MATA410 (xAutoCab, xAutoItens, nOpcAuto)
MATA415 (xAutoCab, xAutoItens, nOpcAuto)
MATA416 (xAutoCab, xAutoItens)
MATA490 (xAuto, nOpcAuto)
MATA685 (xAutoCab, xAutoItens, nOpcAuto)
MATA700 (xAuto, nOpcAuto)
MATA920 (xAutoCab, xAutoItens, nOpcAuto)
TMKA061 (xAutoCab, xAutoItens, nOpcAuto)
TMKA062 (xAutoCab, xAutoItens, nOpcAuto)
TMKA271 (xAutoCab, xAutoItens, nOpcAuto)
TMSA040 (xAutoCab, xAutoItens, nOpcAuto)
TMSA050 (xAutoCab, xAutoItens, xItensPesM3, xItensEnder, nOpcAuto)
TMSA170 (xAutoCab, nOpcAuto)
TMSA360 (xAutoCab, xAutoItens, xAutoNFAva, nOpcAuto)
TMSA430 (cAlias, xAutoCab, xAutoVei, xAutoMot, nOpcAuto)
TMSA440 (xAutoCab, xAutoItens, nOpcAuto)


Quando no utilizar a funcionalidade MsExecAuto

Apesar de todas as orientaes dos tpicos anteriores existem situaes nas quais no
recomendado utilizar a funcionalidade MsExecAuto, no caso, em situaes para as quais
existem rotinas padres da aplicao ERP para processamentos de integraes e atualizaes
que possuem tratamento para execuo direta ou execuo via Job.

Para estes casos a rotina j est pr-disposta a execuo direta, no havendo a necessidade
de tratamento via MsExecAuto, ou o tratamento realizado pela rotina o mais adequado para
aquele volume de dados.

O exemplo clssico desta situao para importao de lanamentos ou saldos contbeis. A
aplicao ERP possui uma rotina de integrao denominada Contabilizao TXT (CTBA500)
mas a rotina de lanamentos contbeis (CTBA102) pode ser executada atravs da
MsExecAuto.

Para importaes de saldos e lanamentos deve-se optar pela utilizao da rotina de
Contabilizao TXT, devido aos tratamentos que a mesma permite atravs das configuraes
da prpria rotina em conjunto com as parametrizaes do mdulo. O uso da CTBA102
Laamentos Contbeis via MsExecAuto recomendado para rotinas de manuteno ou
funcionalidades especficas / melhorias, com por exemplo o estorno de lanamentos contbeis
sem a necessidade de avaliar regras de contabilizao.



- 606 -

ADVPL Completo


41.1. Desenvolvendo aplicaes com MsExecAuto


Estrutura de uma rotina com execuo de MsExecAuto

E Definio das variveis de controle da MsExecAuto
E Montagem dos arrays de parmetros
E Definio dos parmetros especficos da rotina que ser executada
E Controle de transao
E Tratamento do sucesso ou no da operao

Variveis de controle

E Private lMsErroAuto
Indica de se houve erro no fatal durante a execuo.

E Private lMsHelpAuto
Habilita a captura das mensagens de erro.

E Private lAutoErrNoFile
Desabilita a gerao do arquivo de log padro do sistema.


Montagem dos arrays de parmetros

E Tipos de arrays de parmetros:

Basicamente uma MsExecAuto possui dois tipos de arrays de parmetros: Array de
Dados de Cabealho e Array de Dados de Itens.

Os exemplos a seguir visam ilustrar a utilizao de cada uma dos tipos de arrays:

Cadastro de clientes (MATA030): Esta rotina atualiza apenas os dados da tabela
SA1 Cadastro de Clientes, portanto ser necessrio apenas um array de dados
contendo as informaes que devero ser gravadas na tabela SA1.

Documentos de entrada (MATA103): Esta rotina atualiza basicamente os dados
das tabelas SF1 Cabealho do Documento de Entrada e SD1 Itens do
Documento de entrada, portanto sero necessrios dois arrays de dados
contendo as informaes do cabealho do documento de entrada e dos itens do
documento de entrada, sendo que este ltimo ter sua estrutura de contedo
repetida para cada item do documento.

Aviso de Recebimento de Carga (MATA145): Esta rotina atualiza basicamente os
dados das tabelas DB1 Aviso de Recebimento de Carga, DB2 Cabealho do
documento recebido e DB3 Itens do documento recebido, portanto so
necessrios trs array de dados contendo as respectivas informaes para as
tabelas DB1, DB2 e DB3, sendo que as duas ltimas tero suas estruturas de
contedo repetidas para cada documento recebido.



- 607 -

ADVPL Completo


E Estrutura dos arrays de parmetros:

Array de dados do cabealho (xAutoCab):

O array contendo os dados do cabealho composto por: Campo, Contedo e
Validao.

Cada item deste array um dos campos da tabela de cabealho das informaes
que sero processadas pela MsExecAuto. Com base nos exemplos anteriores, a
MsExecAuto da MATA030 possui apenas um array de parmetros no formato
xAutoCab, sendo que a MATA103 utilizar o xAutoCab para a tabela SF1 e a
MATA145 para a tabela DB1.

Sintaxe:


AADD( xAut oCab, {Campo, xCont edo, Val i dao})


Exemplo:


AADD( xAut oCab, {A1_FI LI AL , xFi l i al ( SA1) , Ni l })
AADD( xAut oCab, {A1_COD , 000001 , Ni l })
AADD( xAut oCab, {A1_LOJ A , 01 , Ni l })
AADD( xAut oCab, {A1_NOME , TESTE- 000001 , Ni l })

MsExecAut o( {| x, y| MATA030( x, y) }, xAut oCab, 3)


Array de dados dos itens (xAutoItens):

O array contendo os dados dos itens tambm composto por: Campo, Contedo
e Validao; sendo que a diferena est no fato de que para cada item a ser
tratado pela MsExecAuto dever ser repetida e preenchida a estrutura do array
com as informaes do mesmo.

Com base nos exemplos anteriores, a MsExecAuto da MATA030 no possui um
array de parmetros no formato xAutoItens, j a MATA103 utilizar o xAutoItens
para a tabela SD1 e a MATA145 utilizar dois xAutoItens, sendo o primeiro para
a tabela DB2 e o segundo para a tabela DB3.

Sintaxe:


<Est r ut ur a de cont r ol e e r epet i o>

xAut oI t em: = {}

AADD( xAut oI t em, {Campo, xCont edo, Val i dao})

AADD( xAut oI t ens, xAut oI t em)

</ Est r ut ur a>



- 608 -

ADVPL Completo


Exemplo:


AADD( xAut oCab, {F1_FI LI AL , xFi l i al ( SF1) , Ni l })
AADD( xAut oCab, {F1_DOC , 000001 , Ni l })
AADD( xAut oCab, {F1_SERI E , 1 , Ni l })
AADD( xAut oCab, {F1_FORNECE , 000001 , Ni l })
AADD( xAut oCab, {F1_LOJ A , 01 , Ni l })

For nX : = 1 t o 2

xAut oI t em: = {}

AADD( xAut oI t em, {D1_FI LI AL , xFi l i al ( SD1) , Ni l })
AADD( xAut oI t em, {D1_DOC , 000001 , Ni l })
AADD( xAut oI t em, {D1_SERI E , 1 , Ni l })
AADD( xAut oI t em, {D1_FORNECE , 000001 , Ni l })
AADD( xAut oI t em, {D1_LOJ A , 01 , Ni l })
AADD( xAut oI t em, {D1_I TEM , STRZERO( nx, 04) , Ni l })
AADD( xAut oI t em, {D1_COD , STRZERO( nx, 15) , Ni l })
AADD( xAut oI t em, {D1_QUANT , 100*nX , Ni l })
AADD( xAut oI t em, {D1_VUNI T , 5*nX , Ni l })
AADD( xAut oI t em, {D1_TOTAL , ( 100*nX) *( 5*nX) , Ni l })
AADD( xAut oI t em, {D1_TES , 001 , Ni l })

AADD( xAut oI t ens, xAut oI t em)

Next nX

MsExecAut o( {| x, y, z| MATA103( x, y, z) }, xAut oCab, xAut oI t ens, 3)


E Mtodo de atribuio de contedo Direto:
O mtodo direto consiste em atribuir diretamente na montagem do array de parmetros
o contedo de cada campo que ser tratado pela MsExecAuto.

Este mtodo o mais comum de ser utilizado dado sua praticidade, e pela possibilidade
do desenvolvedor especificar somente os campos obrigatrios para a tabela e aqueles
que contero as informaes geradas por sua aplicao.

Exemplo:


AADD( xAut oCab, {A1_FI LI AL , xFi l i al ( SA1) , Ni l })
AADD( xAut oCab, {A1_COD , 000001 , Ni l })
AADD( xAut oCab, {A1_LOJ A , 01 , Ni l })
AADD( xAut oCab, {A1_NOME , TESTE- 000001 , Ni l })

MsExecAut o( {| x, y| MATA030( x, y) }, xAut oCab, 3)





- 609 -

ADVPL Completo



E Mtodo de atribuio de contedo pela estrutura:
O mtodo de atribuio pela estrutura recomendvel em rotinas que efetuam a
importao das informaes atravs da leitura de arquivos de dados, sejam eles
CODEBASE ou via banco de dados.

Este mtodo consiste em comparar a estrutura do arquivo de origem (a ser importado)
contra a do arquivo de destino (tratado pela MsExecAuto). Desta forma os campos que
forem coincidentes entre o arquivo de origem e o arquivo de destino sero preenchidos
com as informaes do arquivo importado, caso contrrio os mesmos podero ser
desconsiderados ou serem preenchidos com um contedo padro.

Exemplo:


/ / Capt ur a a est r ut ur a da t abel a padr o do si st ema
DbSel ect Ar ea( " SN1" )
DbSet Or der ( 1)
aSt r uSN1 : = SN1- >( DbSt r uct ( ) )

/ / Ef et ua a aber t ur a do ar qui vo SN1 que ser i mpor t ado
cAr qSN1: = cDi r Ar q+" SN1I MP"
I F Fi l e( cAr qSN1+cFi l eExt )
dbUseAr ea( . T. , , cAr qSN1+cFi l eExt , " SN1I MP" , . F. , . F. )
I ndRegua( " SN1I MP" , cAr qSN1+Or dBagExt ( ) , " N1_FI LI AL+N1_CBASE+N1_I TEM" , ;
, , " Sel eci onando Regi st r os. . . " )
ELSE
HELP( " I ATF001" , 1, " HELP" , " NO_FI LE" , " ARQUI VO SN1I MP no exi st e. " +;
CRLF+" Ver i f i que cami nho i nf or mado. " , 1, 0)
RETURN
ENDI F

/ / Ef et ua a l ei t ur a do ar qui vo a ser i mpor t ado
DbSel ect Ar ea( " SN1I MP" )
DbGot op( )
WHI LE SN1I MP- >( ! Eof ( ) )

/ / Ef et ua a mont agemdo xAut oCab combase nas est r ut ur as dos
/ / ar qui vos

FOR nX : = 1 TO LEN( aSt r uSN1)
I F SN1I MP- >( Fi el dPos( aSt r uSN1[ nX] [ 1] ) ) >0
DO CASE
CASE EMPTY( SN1I MP- >&( aSt r uSN1[ nX] [ 1] ) )
AADD( xAut oCab, {aSt r uSN1[ nX] [ 1] , ;
CRI AVAR( aSt r uSN1[ nX] [ 1] ) , NI L})

CASE aSt r uSN1[ nX] [ 2] == " C"
AADD( xAut oCab, {aSt r uSN1[ nX] [ 1] , ;
SN1I MP- >&( aSt r uSN1[ nX] [ 1] ) , ;
" " , aSt r uSN1[ nX] [ 3] ) , NI L})

CASE aSt r uSN1[ nX] [ 2] == " N"
AADD( xAut oCab, {aSt r uSN1[ nX] [ 1] , ;
ABS( SN1I MP- >&( aSt r uSN1[ nX] [ 1] ) ) , NI L})




- 610 -

ADVPL Completo


OTHERWI SE
AADD( xAut oCab, {aSt r uSN1[ nX] [ 1] , ;
SN1I MP- >&( aSt r uSN1[ nX] [ 1] ) , NI L})
ENDCASE
ELSE
AADD( xAut oCab, {aSt r uSN1[ nX] [ 1] , ;
CRI AVAR( aSt r uSN1[ nX] [ 1] ) , NI L})
ENDI F
NEXT nX

. . .

MsExecAut o( {| x, y, z| ATFA010( x, y, z) }, xAut oCab, xAut oI t ens, 3)

END


Definio dos parmetros especficos da rotina que ser executada

Este ponto no qual o desenvolvedor inclui os tratamentos necessrios a correta execuo da
rotina, alm de seus tratamentos especficos, os quais justificaram o desenvolvimento.

Utilizando o mesmo exemplo anterior da ATFA010 Cadastro de Ativos podemos citar dois
tratamentos especficos necessrios para a correta execuo da MsExecAuto:

Chamada das perguntas da ATFA010:

A execuo da funo Pergunte( ATFA010,.F.) permite que seja definidos os
contedos desejados para os parmetros da rotina de cadastro conforme a
necessidade da aplicao, como por exemplo permitir a incluso de uma chapa de
bem em branco ou no efetuar a contabilizao da incluso.

Atualizao das variavis de memria do ALIAS M-> para o SN1:

A execuo da funo RegToMemory( SN1,.T.) necessria para a utilizao da
funo CRIAVAR() no mtodo de atribuio pela estrutura.



Muitas vezes uma estrutura que funciona para um MsExecAuto pode no
funcionar para outro do mesmo tipo, devido as caractersticas individuais de
cada rotina. Podemos citar os seguintes exemplos:

MATA103 (Documento de Entrada): Para tratamento do ttulo
financeiro a ser gerado pela nota fiscal quando o parmetro de
atualizao de financeiro da TES est ativado, deve ser includo
o seguinte item no array xAutoCab:

{" E2_NATUREZ " ,"NAT01" ,NIL})

MATA650 (Abertura de ordem de produo): Para que sejam
geradas as ordens de produo intermedirias na abertura de
uma ordem de produo principal deve ser includo o seguinte
item no array xAutoCab:

{"AUTEXPLODE" ,"S" ,NIL})



- 611 -

ADVPL Completo


Controle de transao

A utilizao do controle de transao permite garantir a integridade das informaes gravadas
pelo processamento.

Para utilizao do controle de transao na aplicao podem ser utilizados os seguintes blocos
de controle:

E Begin Transaction ... DisarmTransaction() ... End Transaction

Um bloco de cdigo determinado pelos comandos Begin Transaction ... End Transaction
ter suas informaes atualizadas somente se antes do execuo do comando End
Transaction no for executada a funo DisarmTransaction().

Desta forma pode-se implementar um controle de transao por item processado, sendo
executado o DisarmTransaction() para aquele elemento em que houve algum problema
de processamento.

Seguindo este mesmo raciocnio, caso ocorra um erro fatal na aplicao, somente o item
que est em processamento ser desconsiderado, pois a aplicao ERP efetua um
DisarTransaction() automaticamente, fechamento as transaes pendentes e
restaurando as situaes anteriores, mas apenas para aqueles processamento protegidos
pelo bloco de controle de transao.




O comando END TRANSACTION no pode ter sua interpretao vinculada a
uma condio. Nestes casos ocorrer um erro de compilao indicando que o
bloco aberto pelo comando BEGIN TRANSACTION no foi corretamente
fechado.


Exemplo:


AADD( xAut oCab, {A1_FI LI AL , xFi l i al ( SA1) , Ni l })
AADD( xAut oCab, {A1_COD , 000001 , Ni l })
AADD( xAut oCab, {A1_LOJ A , 01 , Ni l })
AADD( xAut oCab, {A1_NOME , TESTE- 000001 , Ni l })

BEGI N TRANSACTI ON

l MsEr r oAut o : = . F.
MsExecAut o( {| x, y| MATA030( x, y) }, xAut oCab, 3)

I F l MsEr r oAut o
Di sar mTr ansact i on( )
ENDI F

END TRANSACTI ON



- 612 -

ADVPL Completo



E BeginTran() ... DisarmTransaction() ... EndTran()

As funes BeginTran() e EndTran() visam permitir que o trmino da transao seja
condicional, eliminando a limitao da estrutura BEGIN TRANSACTION ... END
TRANSACTION.

Exemplo:


AADD( xAut oCab, {A1_FI LI AL , xFi l i al ( SA1) , Ni l })
AADD( xAut oCab, {A1_COD , 000001 , Ni l })
AADD( xAut oCab, {A1_LOJ A , 01 , Ni l })
AADD( xAut oCab, {A1_NOME , TESTE- 000001 , Ni l })

Begi nTr an( )

l MsEr r oAut o : = . F.
MsExecAut o( {| x, y| MATA030( x, y) }, xAut oCab, 3)

I F l MsEr r oAut o
Di sar mTr ansact i on( )
ELSE
EndTr an( )
ENDI F

MsUnl ockAl l ( )



Neste modelo de controle de transao recomendvel a utilizao da funo
MsUnlockAll() para destravar todos os registros que estejam eventualmente
travados.















- 613 -

ADVPL Completo



Tratamento de mensagens de erro

Com a utilizao da funcionalidade MsExecAuto a aplicao ERP disponibiliza diversos mtodos
para visualizao e tratamento das mensagens de erro ocorridas durante a execuo da rotina,
sendo estes:

Visualizao do evento de erro;
Gravao do evento de erro em arquivo texto;
Personalizao da gravao do evento de erro.


E Visualizao do evento de erro

Para visualizao em tela do evento de erro ocorrido durante o processamento da
rotina via MsExecAuto deve-se utilizar a funo MostraErro(), conforme o exemplo:


Pr i vat e l MsHel pAut o : = . T.
Pr i vat e l Aut oEr r NoFi l e : = . F.

AADD( xAut oCab, {A1_FI LI AL , xFi l i al ( SA1) , Ni l })
AADD( xAut oCab, {A1_COD , 000001 , Ni l })
AADD( xAut oCab, {A1_LOJ A , 01 , Ni l })
AADD( xAut oCab, {A1_NOME , TESTE- 000001 , Ni l })

BEGI N TRANSACTI ON

l MsEr r oAut o : = . F.
MsExecAut o( {| x, y| MATA030( x, y) }, xAut oCab, 3)

I F l MsEr r oAut o
Most r aEr r o( )
Di sar mTr ansact i on( )
ENDI F

END TRANSACTI ON





O contedo das variveis PRIVATE de controle da MsExecAuto deve ser
configurado conforme abaixo:

Private lMsHelpAuto := .T.
Private lAutoErrNoFile := .F.



- 614 -

ADVPL Completo



E Gravao do evento de erro em arquivo texto

Para gravao em arquivo no formato texto do evento de erro ocorrido durante o
processamento da rotina via MsExecAuto deve-se utilizar a funo MostraErro(),
conforme o exemplo:


Pr i vat e l MsHel pAut o : = . T.
Pr i vat e l Aut oEr r NoFi l e : = . F.

AADD( xAut oCab, {A1_FI LI AL , xFi l i al ( SA1) , Ni l })
AADD( xAut oCab, {A1_COD , 000001 , Ni l })
AADD( xAut oCab, {A1_LOJ A , 01 , Ni l })
AADD( xAut oCab, {A1_NOME , TESTE- 000001 , Ni l })

BEGI N TRANSACTI ON

l MsEr r oAut o : = . F.
MsExecAut o( {| x, y| MATA030( x, y) }, xAut oCab, 3)

I F l MsEr r oAut o
Most r aEr r o( \ syst em\ )
Di sar mTr ansact i on( )
ENDI F

END TRANSACTI ON





A funo MostraErro() possui o parmetro cPath o qual pode ser informado
de duas formas:

Apenas o diretrio: Se for informado apenas o diretrio ser
gerado um arquivo com denominao no formato SCxxxxxx.log,
aonde xxxxxx ser um nmero sequencial gerado internamente
pelo sistema.

Informando o diretrio e o nome do arquivo: A funo ir
respeitar o nome do arquivo informado, sobrescrendo o
contedo anterior.





Caso seja necessrio gerar um nico arquivo texto contendo todos os
eventos de erro gerados pelos sucessivos processamentos da MsExecAuto,
a funo MostraErro(cPath) dever ser chamada apenas uma vez, ao
trmino do processamento da rotina.

Isto ocorre pois a funo MostraErro() limpa o cache de eventos de erros
controlado pela MsExecAuto.



- 615 -

ADVPL Completo



E Personalizao da gravao do evento de erro

Para processamentos mais volumosos, a gerao de diversos arquivos de textos ou
at mesmo a gerao de um nico arquivo texto contendo todos os eventos de erro
pode dificultar a anlise e correo dos problemas encontrados durante o
processamento.

Desta forma possvel personalizar a gravao do evento de erro, de forma que o
mesmo seja gerado em um arquivo no formato .DBF, permitindo o vnculo do registro
processado com a mensagem de erro gerada.


Pr i vat e l MSHel pAut o : = . F.
Pr i vat e l Aut oEr r NoFi l e : = . T.

AADD( xAut oCab, {A1_COD , 000001 , Ni l })
AADD( xAut oCab, {A1_LOJ A , 01 , Ni l })
AADD( xAut oCab, {A1_NOME , TESTE- 000001 , Ni l })

/ / Funo espec f i ca que cr i a o ar qui vo no f or mat o DBF que cont er as
/ / mensagens de er r o.
XDBFLOG( )

BEGI N TRANSACTI ON

l MsEr r oAut o : = . F.
MsExecAut o( {| x, y| MATA030( x, y) }, xAut oCab, 3)

I F l MsEr r oAut o
/ / Funo que r et or na o event o de er r o na f or ma de umar r ay
aAut oEr r o : = GETAUTOGRLOG( )

/ / Funo especi f i ca que conver t e o ar r ay aAut oEr r o emt ext o
/ / cont nuo, coma quant i dade de car act er es desej ada por l i nha

/ / Funo espec f i ca que ef et ua a gr avao do event o de er r o no
/ / ar qui vo pr evi ament e cr ado.
XGRVLOG( XCONVERRLOG( aAut oEr r o) )

Di sar mTr ansact i on( )
ENDI F

END TRANSACTI ON




As funes especficas XDBFLOG(), XCONVERRLOG() e XGRVLOG() sero
detalhadas no exemplo completo de utilzao da funo MsExecAuto().





- 616 -

ADVPL Completo




Aplicao completa de importao utilizando MsExecAuto: Carga de imobilizado

#I NCLUDE " PROTHEUS. CH"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | I ATF001 | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | I MPORTACAO DO CADASTRO DE ATI VO I MOBI LI ZADO |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON I ATF001( )

LOCAL oPr ocess

PRI VATE oMai nWnd

/ / Per gunt as par a par amet r i zacao da r ot i na ( PARAMBOX)
/ / MVPar Box01 - Ti po de i nf or mao ( . DBF/ . TXT)
/ / MVPar Box02 - LayOut do ar qui vo ( Padr o / Especi f i co)
/ / MVPar Box03 - Ar qui vo de dados ( Consul t a)
/ / MVPar Box04 - Ar qui vo de l ayout ( Consul t a)
/ / MVPar Box05 - Oper acao ( I ncl ui r , Al t er ar , Excl ui r )
/ / MVPar Box06 - Di r et or i o de Log ( Consul t a)
/ / MVPar Box07 - I mpor t a CI AP ( SI M/ NAO)

PRI VATE aTi posFi l e : = {" . DBF" , " . DTC" , " . TXT" }
PRI VATE MvPar Box01 : = 0
PRI VATE MvPar Box02 : = 0
PRI VATE MvPar Box03 : = " "
PRI VATE MvPar Box04 : = " "
PRI VATE MvPar Box05 : = 0
PRI VATE MvPar Box06 : = " "
PRI VATE MVPar Box07 : = 0

PRI VATE _cDi r ect or y : = " "

RpcSet Type( 3)
RpcSet Env( " 99" , " 01" , , , , ,
{" CT1" , " SF9" , " SN1" , " SN2" , " SN3" , " SN4" , " SN5" , " SNG" , " SM2" })

SET DATE FORMAT " dd/ mm/ yyyy"

oMai nWnd : = TWi ndow( ) : New( 000, 000, 001, 001, " I mpor t ao: Fi chas do
i mobi l i zado" , , , , , , , , , , , , , , , , . T. )
oMai nWnd: bI ni t : = {| | I I F( I C001PARBX( ) , ( oPr ocess: = MsNewPr ocess( ) : New( {| l End|
PROCATI VO( . F. , oPr ocess) }) , oPr ocess: Act i vat e( ) , oMai nWnd: End( ) ) , oMai nWnd: End( ) ) }
oMai nWnd: Act i vat e( " I CONI ZED" )

RpcCl ear Env( )
RETURN


- 617 -

ADVPL Completo



Continuao:

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | PROCATI VO | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | PROCESSAMENTO DA I MPORTACAO DO CADASTRO DE I MOBI LI ZADO |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

STATI C FUNCTI ON PROCATI VO( l End, oPr ocess)

Local aAr ea : = Get Ar ea( )
Local aDadosSN1 : = {}
Local aDadosSN3 : = {}
Local aDadosSF9 : = {}
Local aDadosTN1 : = {}
Local aDadosTN2 : = {}
Local aDadosTN3 : = {}
Local aI t emSN3 : = {}
Local cAr qSN1 : = " "
Local cAr qSN2 : = " "
Local cAr qSN3 : = " "
Local cAr qSA2 : = " "
Local aSt r uSN1 : = {}
Local aSt r uSN2 : = {}
Local aSt r uSN3 : = {}
Local aSt r uSF9 : = {}
Local nX : = 0
Local nTot Regs : = 0
Local nPr ocRegs : = 0
Local nPosDados : = 0
Local cCodFor : = " "
Local cLoj aFor : = " "
Local cDescFor : = " "
Local cFi l At u : = cFi l Ant
Local cDi r Ar q : = Al l t r i m( MVPar Box03)
Local cHi st or i co : = " "
Local nX : = 0
Local cFi l eExt : = aTi posFi l e[ MvPar Box01]
Local l I mpSF9 : = MvPar Box07==1
Local l I mpSNG : = . F. / / Ai nda nao i mpl ement ado
Local cKeyI mp : = " "
Local aAut oEr r o : = {}

/ / Tr at ament os adi ci onai s - ar qui vos especi f i cos do cl i ent e
Local cAr qCTA : = " "
Local cAr qSM2 : = " "
Local cI ndSNG
Local nI ndex : = 0
Local cGr upo : = " "
Local cCont ab : = " "
Local aEnt SNG : = {}
Local cChapa : = " 000000"

Pr i vat e l MsEr r oAut o : = . F.
Pr i vat e l MSHel pAut o : = . F.

- 618 -

ADVPL Completo



Continuao:

Pr i vat e l Aut oEr r NoFi l e : = . T.

/ / Gar ant e a aber t ur a dos ar qui vos padr es do si st ema
DbSel ect Ar ea( " CT1" )
DbSet Or der ( 2) / / FI LI AL + COD. REDUZI DO

DbSel ect Ar ea( " SM2" )
DbSet Or der ( 1)

DbSel ect Ar ea( " SN1" )
DbSet Or der ( 1)
aSt r uSN1 : = SN1- >( DbSt r uct ( ) )

DbSel ect Ar ea( " SN2" )
DbSet Or der ( 1)
aSt r uSN2 : = SN2- >( DbSt r uct ( ) )

DbSel ect Ar ea( " SN3" )
DbSet Or der ( 1)
aSt r uSN3 : = SN3- >( DbSt r uct ( ) )

DbSel ect Ar ea( " SF9" )
DbSet Or der ( 1)
aSt r uSF9 : = SF9- >( DbSt r uct ( ) )

/ / Pr epar a o ar qui vo no f or mat o . DBF par a gr avao dos event os de er r o
XDBFLOG( )

DbSel ect Ar ea( " SNG" )
cI ndSNG : = CRI ATRAB( Ni l , . F. )
I ndRegua( " SNG" , cI ndSNG, " NG_FI LI AL+NG_CCONTAB" , , , " Sel eci onando Regi st r os. . . " )
nI ndex : = Ret I ndex( )
#I FNDEF TOP
DbSet I ndex( cI ndSNG+Or dBagExt ( ) )
#ENDI F
DbSet Or der ( nI ndex)

PERGUNTE( " ATF010" , . F. )
MV_PAR02 : = 1 / / Per mi t e r epet i r chapa def i ni do como si m

I F Sel ect ( " SN1I MP" ) > 0
DbSel ect Ar ea( " SN1I MP" )
DbCl oseAr ea( )
ENDI F
I F Sel ect ( " SN2I MP" ) > 0
DbSel ect Ar ea( " SN2I MP" )
DbCl oseAr ea( )
ENDI F
I F Sel ect ( " SN3I MP" ) > 0
DbSel ect Ar ea( " SN3I MP" )
DbCl oseAr ea( )
ENDI F
I F Sel ect ( " SF9I MP" ) > 0
DbSel ect Ar ea( " SF9I MP" )
DbCl oseAr ea( )
ENDI F


- 619 -

ADVPL Completo



Continuao:

I F Sel ect ( " CTAI MP" ) > 0
DbSel ect Ar ea( " CTAI MP" )
DbCl oseAr ea( )
ENDI F

cAr qSN1: = cDi r Ar q+" SN1I MP"
I F Fi l e( cAr qSN1+cFi l eExt )
dbUseAr ea( . T. , , cAr qSN1+cFi l eExt , " SN1I MP" , . F. , . F. )
I ndRegua( " SN1I MP" , cAr qSN1+Or dBagExt ( ) , " N1_FI LI AL+N1_CBASE+N1_I TEM" , , , ;
" Sel eci onando Regi st r os. . . " )
ELSE
HELP( " I ATF001" , 1, " HELP" , " NO_FI LE" , " ARQUI VO SN1I MP no exi st e. " +CRLF+;
" Ver i f i que cami nho i nf or mado. " , 1, 0)
RETURN
ENDI F

cAr qSN2: = cDi r Ar q+" SN2I MP"
I F Fi l e( cAr qSN2+cFi l eExt )
dbUseAr ea( . T. , , cAr qSN2+cFi l eExt , " SN2I MP" , . F. , . F. )
I ndRegua( " SN2I MP" , cAr qSN2+Or dBagExt ( ) , ;
" N2_FI LI AL+N2_CBASE+N2_I TEM+N2_TI PO+N2_SEQ" , , , " Sel eci onando Regi st r os. . . " )
ELSE
HELP( " I ATF001" , 1, " HELP" , " NO_FI LE" , " ARQUI VO SN2I MP no exi st e. " +CRLF+;
" Ver i f i que cami nho i nf or mado. " , 1, 0)
RETURN
ENDI F

cAr qSN3: = cDi r Ar q+" SN3I MP"
I F Fi l e( cAr qSN3+cFi l eExt )
dbUseAr ea( . T. , , cAr qSN3+cFi l eExt , " SN3I MP" , . F. , . F. )
I ndRegua( " SN3I MP" , cAr qSN3+Or dBagExt ( ) , " N3_FI LI AL+N3_CBASE+N3_I TEM" , , , ;
" Sel eci onando Regi st r os. . . " )
ELSE
HELP( " I ATF001" , 1, " HELP" , " NO_FI LE" , " ARQUI VO SN3I MP no exi st e. " +CRLF+;
" Ver i f i que cami nho i nf or mado. " , 1, 0)
RETURN
ENDI F

I F l I mpSF9
cAr qSF9: = cDi r Ar q+" SF9I MP"
I F Fi l e( cAr qSF9+cFi l eExt )
dbUseAr ea( . T. , , cAr qSF9+cFi l eExt , " SF9I MP" , . F. , . F. )
I ndRegua( " SF9I MP" , cAr qSF9+Or dBagExt ( ) , " F9_FI LI AL+F9_CODI GO" , , , ;
" Sel eci onando Regi st r os. . . " )
ELSE
HELP( " I ATF001" , 1, " HELP" , " NO_FI LE" , " ARQUI VO SF9I MP no exi st e. " +;
CRLF+" Ver i f i que cami nho i nf or mado. " , 1, 0)
RETURN
ENDI F
ENDI F


- 620 -

ADVPL Completo



Continuao:

cAr qCTA: = cDi r Ar q+" CTAI MP"
I F Fi l e( cAr qCTA+cFi l eExt )
dbUseAr ea( . T. , , cAr qCTA+cFi l eExt , " CTAI MP" , . F. , . F. )
I ndRegua( " CTAI MP" , cAr qCTA+Or dBagExt ( ) , " CODI GO_CON" , , , ;
" Sel eci onando Regi st r os. . . " )
ELSE
HELP( " I ATF001" , 1, " HELP" , " NO_FI LE" , " ARQUI VO CTAI MP no exi st e. " +CRLF+;
" Ver i f i que cami nho i nf or mado. " , 1, 0)
RETURN
ENDI F

cAr qSM2: = cDi r Ar q+" SM2I MP"
I F Fi l e( cAr qSM2+cFi l eExt )
dbUseAr ea( . T. , , cAr qSM2+cFi l eExt , " SM2I MP" , . F. , . F. )
I ndRegua( " SM2I MP" , cAr qSM2+Or dBagExt ( ) , " DTOS( BTN_DATA) " , , , " Sel eci onando
Regi st r os. . . " )
ELSE
HELP( " I ATF001" , 1, " HELP" , " NO_FI LE" , " ARQUI VO SM2I MP no exi st e. " +CRLF+;
" Ver i f i que cami nho i nf or mado. " , 1, 0)
RETURN
ENDI F

l MSHel pAut o : = . T.
DbSel ect Ar ea( " SN1I MP" )
DbGot op( )

/ /
/ / Pr epar ao par a i ni ci o do pr ocessament o
/ /
cKeyI mp : = DTOS( dDat abase) +St r Zer o( Hor aToI nt ( Ti me( ) ) , 6)
/ / I dent i df i cador dos r egi st r os do l og de er r os

ConOut ( " Pr ocessando i mpor t ao: " )
ConOut ( " I ni ci o: " +Ti me( ) )
ConOut ( " Regi st r os SN1I MP: " +CVal ToChar ( SN1I MP- >( RecCount ( ) ) ) )
ConOut ( " Regi st r os SN2I MP: " +CVal ToChar ( SN2I MP- >( RecCount ( ) ) ) )
ConOut ( " Regi st r os SN3I MP: " +CVal ToChar ( SN3I MP- >( RecCount ( ) ) ) )

dbEval ( {| x| nTot Regs++ }, , {| | SN1I MP- >( ! EOF( ) ) })
oPr ocess: Set Regua1( nTot Regs+2)
oPr ocess: I ncRegua1( " I ni ci ando pr ocessament o. . . " )
oPr ocess: Set Regua2( nTot Regs+1)
oPr ocess: I ncRegua2( " Fi cha de At i vo: " )

DbSel ect Ar ea( " SN1I MP" )
DbGot op( )


- 621 -

ADVPL Completo



Continuao:

Whi l e SN1I MP- >( ! Eof ( ) )

nPr ocRegs++
oPr ocess: I ncRegua1( " Pr ocessando i t em: " +CVal ToChar ( nPr ocRegs) +" / " +;
CVal ToChar ( nTot Regs) )
oPr ocess: I ncRegua2( " Fi cha de At i vo: " )

aDadosSN1 : = {}
aDadosSN3 : = {}

/ / Compat i bi l i zao par a ut i l i zao do CRI AVAR( )
REGTOMEMORY( " SN1" , . T. )

/ / Monst agemdo ar r ay comdados semt r at ament o e comas i nf or mao da I MP

FOR nX : = 1 TO LEN( aSt r uSN1)
I F SN1I MP- >( Fi el dPos( aSt r uSN1[ nX] [ 1] ) ) >0
DO CASE
CASE EMPTY( SN1I MP- >&( aSt r uSN1[ nX] [ 1] ) )
AADD( aDadosSN1, {aSt r uSN1[ nX] [ 1] , ;
CRI AVAR( aSt r uSN1[ nX] [ 1] ) , NI L})
CASE aSt r uSN1[ nX] [ 2] == " C"
AADD( aDadosSN1, {aSt r uSN1[ nX] [ 1] , ;
SN1I MP- >&( aSt r uSN1[ nX] [ 1] ) , ;
" " , aSt r uSN1[ nX] [ 3] ) , NI L})
CASE aSt r uSN1[ nX] [ 2] == " N"
AADD( aDadosSN1, {aSt r uSN1[ nX] [ 1] , ;
ABS( SN1I MP- >&( aSt r uSN1[ nX] [ 1] ) ) , NI L})
OTHERWI SE
AADD( aDadosSN1, {aSt r uSN1[ nX] [ 1] , ;
SN1I MP- >&( aSt r uSN1[ nX] [ 1] ) , NI L})
ENDCASE
ELSE
AADD( aDadosSN1, {aSt r uSN1[ nX] [ 1] , CRI AVAR( aSt r uSN1[ nX] [ 1] ) , ;
NI L})
ENDI F
NEXT nX

/ / Al t er ao das i nf or maes do ar r ay de acor do coma necessi dade
/ / AADD( aDadosTN1, {" CAMPO" , CONTEUDO, " VALI DACAO" })
aDadosTN1 : = {}

/ / ALTERACAO DO ARRAY ADADOSSN1 COM AS I NFORMACOES TRABALHADAS E
/ / ARMAZENADAS EM ADADOSTN1
/ / AADD( aDadosTN1, {" N1_XXXXXX" , xCont eudo , Ni l })

For nX : = 1 TO LEN( aDadosTN1)
I F ( nPosFi el d : = aScan( aDadosSN1, {| aDadoSN1| aDadosSN1[ 1] ==;
aDadosTN1[ nX] [ 1] }) ) > 0
aDadosSN1[ nPosFi el d] [ 2] : = aDadosTN1[ nX] [ 2]
aDadosSN1[ nPosFi el d] [ 3] : = aDadosTN1[ nX] [ 3]
ENDI F
Next nX


- 622 -

ADVPL Completo



Continuao:

I F SN1- >( DbSeek( aDadosSN1[ 1] [ 2] +aDadosSN1[ 2] [ 2] +aDadosSN1[ 3] [ 2] ) )
ConOut ( " Regi st r o j i mpor t ado: " +;
aDadosSN1[ 1] [ 2] +" / " +aDadosSN1[ 2] [ 2] +" / " +aDadosSN1[ 3] [ 2] )
ConOut ( " Regi st r os i mpor t ados comsucesso: " +CVal ToChar ( nPr ocRegs) )
SN1I MP- >( dbSki p( ) )
Loop
ENDI F

SN3I MP- >( DbSeek( SN1I MP- >( N1_FI LI AL+N1_CBASE+N1_I TEM) ) )
Whi l e SN3I MP- >( ! Eof ( ) ) . AND. SN3I MP- >( N3_FI LI AL+N3_CBASE+N3_I TEM) ==;
SN1I MP- >( N1_FI LI AL+N1_CBASE+N1_I TEM)

aI t ensSN3 : = {}

/ / Monst agemdo ar r ay comdados semt r at ament o e comas i nf or maes

FOR nX : = 1 TO LEN( aSt r uSN3)
I F SN3I MP- >( Fi el dPos( aSt r uSN3[ nX] [ 1] ) ) >0
DO CASE
CASE EMPTY( SN3I MP- >&( aSt r uSN3[ nX] [ 1] ) )
AADD( aI t ensSN3, {aSt r uSN3[ nX] [ 1] , ;
CRI AVAR( aSt r uSN3[ nX] [ 1] ) , NI L})
CASE aSt r uSN3[ nX] [ 2] == " C"
AADD( aI t ensSN3, {aSt r uSN3[ nX] [ 1] , ;
SN3I MP- >&( aSt r uSN3[ nX] [ 1] ) , ;
aSt r uSN3[ nX] [ 3] ) , NI L})
CASE aSt r uSN3[ nX] [ 2] == " N"
AADD( aI t ensSN3, {aSt r uSN3[ nX] [ 1] , ;
ABS( SN3I MP- >&( aSt r uSN3[ nX] [ 1] ) ) , ;
" . T. " })

OTHERWI SE
AADD( aI t ensSN3, {aSt r uSN3[ nX] [ 1] , ;
SN3I MP- >&( aSt r uSN3[ nX] [ 1] ) , NI L})

ENDCASE
ELSEI F aSt r uSN3[ nX] [ 2] == " N"
AADD( aI t ensSN3, {aSt r uSN3[ nX] [ 1] , ;
CRI AVAR( aSt r uSN3[ nX] [ 1] ) , " . T. " })
ELSE
AADD( aI t ensSN3, {aSt r uSN3[ nX] [ 1] , ;
CRI AVAR( aSt r uSN3[ nX] [ 1] ) , NI L})
ENDI F
NEXT nX

/ / Al t er ao das i nf or maes do ar r ay de acor do coma necessi dade
/ / AADD( aDadosTN3, {" CAMPO" , CONTEUDO, " VALI DACAO" })
aDadosTN3 : = {}

/ / ALTERACAO DO ARRAY aI t enSN3 COM AS I NFORMACOES TRABALHADAS E
/ / ARMAZENADAS EM aDadosTN3

For nX : = 1 TO LEN( aDadosTN3)
I F ( nPosFi el d : = aScan( aI t ensSN3, {| aI t enSN3| aI t enSN3[ 1] ==;
aDadosTN3[ nX] [ 1] }) ) > 0
aI t ensSN3[ nPosFi el d] [ 2] : = aDadosTN3[ nX] [ 2]
aI t ensSN3[ nPosFi el d] [ 3] : = aDadosTN3[ nX] [ 3]

- 623 -

ADVPL Completo



Continuao:

ENDI F
Next nX

AADD( aDadosSN3, aI t ensSN3)
SN3I MP- >( DbSki p( ) )
Enddo

I F Len( aDadosSN1) > 0 . AND. Len( aDadosSN3) > 0

ConOut ( " I ni ci ando MsExecAut o - ATFA010: " +Ti me( ) )

Begi n Tr ansact i on
cFi l Ant : = SN1I MP- >N1_FI LI AL
l MsEr r oAut o : = . F.
MSExecAut o( {| x, y, z| At f a010( x, y, z) }, aDadosSN1, aDadosSN3, 3)
/ / Cabeal ho, I t ens e Opo

ConOut ( " Fi nal i zada MsExecAut o - ATFA010: " +Ti me( ) )

I F l MsEr r oAut o
aAut oEr r o : = GETAUTOGRLOG( )
XGRVLOG( cKeyI mp, ;
SN1I MP- >( N1_FI LI AL+N1_CBASE+N1_I TEM) , ;
SN1I MP- >N1_DESCRI C, XCONVERRLOG( aAut oEr r o) )
Di sar mTr ansact i on( )
Most r aEr r o( Al l t r i m( MVPar Box06) )
ELSE

/ / TRATAMENTO DA DESCRI O ESTENDI DA ( SN2)
SN2I MP- >( DbSeek( SN1I MP- >( N1_FI LI AL+N1_CBASE+N1_I TEM) ) )
cHi st or i co : = ALLTRI M( SN2I MP- >N2_HI STOR1) +;
ALLTRI M( SN2I MP- >N2_HI STOR2)

For nX : = 1 t o Len( cHi st or i co) STEP 40

RECLOCK( " SN2" , . T. )
SN2- >N2_FI LI AL : = SN1- >N1_FI LI AL
SN2- >N2_CBASE : = SN1- >N1_CBASE
SN2- >N2_I TEM : = SN1- >N1_I TEM
SN2- >N2_TI PO : = " 01"
SN2- >N2_SEQ : = " 001"
SN2- >N2_SEQUENC : = STRZERO( nX, 2)
SN2- >N2_HI STOR : = SUBSTR( cHi st or i co, nX, 40)
MSUNLOCK( )

NEXT nX

/ / TRATAMENTO DA CARGA DO CI AP
I F l I mpSF9
I ATFCI AP( aSt r uSF9, aDadosSF9)
ENDI F

ConOut ( " Regi st r os i mpor t ados comsucesso: " +;
CVal ToChar ( nPr ocRegs) )

ENDI F
End Tr ansact i on

- 624 -

ADVPL Completo



Continuao:

ENDI F

SN1I MP- >( DbSki p( ) )
Enddo

oPr ocess: I ncRegua1( " Pr ocessament o f i nal i zado" )

DbSel ect Ar ea( " SN1I MP" )
DbCl oseAr ea( )
I F Fi l e( cAr qSN1+Or dBagExt ( ) )
FEr ase( cAr qSN1+Or dBagExt ( ) )
ENDI F

DbSel ect Ar ea( " SN2I MP" )
DbCl oseAr ea( )
I F Fi l e( cAr qSN2+Or dBagExt ( ) )
FEr ase( cAr qSN2+Or dBagExt ( ) )
ENDI F

DbSel ect Ar ea( " SN3I MP" )
DbCl oseAr ea( )
I F Fi l e( cAr qSN3+Or dBagExt ( ) )
FEr ase( cAr qSN3+Or dBagExt ( ) )
ENDI F

I F l I mpSF9
DbSel ect Ar ea( " SF9I MP" )
DbCl oseAr ea( )
I F Fi l e( cAr qSF9+Or dBagExt ( ) )
FEr ase( cAr qSF9+Or dBagExt ( ) )
ENDI F
ENDI F

I F l I mpSNG
DbSel ect Ar ea( " SNGI MP" )
DbCl oseAr ea( )
I F Fi l e( cI ndSNG+Or dBagExt ( ) )
FEr ase( cI ndSNG+Or dBagExt ( ) )
ENDI F
ENDI F

DbSel ect Ar ea( " CTAI MP" )
DbCl oseAr ea( )
I F Fi l e( cAr qCTA+Or dBagExt ( ) )
FEr ase( cAr qCTA+Or dBagExt ( ) )
ENDI F

DbSel ect Ar ea( " SM2I MP" )
DbCl oseAr ea( )
I F Fi l e( cAr qSM2+Or dBagExt ( ) )
FEr ase( cAr qSM2+Or dBagExt ( ) )
ENDI F






- 625 -

ADVPL Completo



Continuao:

DbSel ect Ar ea( " LOGI MP" )
DbCl oseAr ea( )

ConOut ( " Tot al de r egi st r os i mpor t ados: " +CVal ToChar ( nPr ocRegs) )
ConOut ( " Tr mi no da i mpor t ao: " +Ti me( ) )

cFi l Ant : = cFi l At u
Rest Ar ea( aAr ea)
RETURN

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | CT001PARBX | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | TELA DE PARAMETROS ESPECI FI COS DA ROTI NA CUSTOMI ZADA |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

STATI C FUNCTI ON I C001PARBX( )

LOCAL aPar amBox : = {}
LOCAL cTi t ul o : = " I mpor t acao de cadast r os"
LOCAL aRet : = {}
LOCAL bOk : = {| | . T. }
LOCAL aBut t ons : = {}
LOCAL l Cent er ed : = . T.
LOCAL nPosx
LOCAL nPosy
LOCAL cLoad : = " "
LOCAL l CanSave : = . T.
LOCAL l User Save : = . T.
LOCAL nX : = 0
LOCAL l Ret : = . F.

AADD( aPar amBox, {2, " Ti po de i nf or mao" , 1 , aTi posFi l e , 060, ;
" Al l waysTr ue( ) " , . T. })
AADD( aPar amBox, {2, " LayOut do ar qui vo " , 1 , ;
{" Padr o" , " Especi f i co" }, 060, " Al l waysTr ue( ) " , . T. })
AADD( aPar amBox, {1, " Di r et or i o de dados" , Space( 60) , ;
" @! " , " Al l waysTr ue( ) " , " HSSDI R" , " . T. " , 120, . T. })
AADD( aPar amBox, {1, " Ar qui vo de l ayout " , Space( 60) , ;
" @! " , " Al l waysTr ue( ) " , " " , " . T. " , 120, . F. })
AADD( aPar amBox, {2, " Oper acao " , 1 , ;
{" I ncl ui r " , " Al t er ar " , " Excl ui r " }, 060, " Al l waysTr ue( ) " , . T. })
AADD( aPar amBox, {1, " Di r et or i o de Log " , Space( 60) , ;
" @! " , " Al l waysTr ue( ) " , " HSSDI R" , " . T. " , 120, . F. })
AADD( aPar amBox, {2, " I mpor t a CI AP " , 1 , ;
{" Si m" , " No" } , 060, " Al l waysTr ue( ) " , . T. })

l Ret : = Par amBox( aPar amBox, cTi t ul o, aRet , bOk, aBut t ons, l Cent er ed, nPosx, ;
nPosy, / *oMai nDl g*/ , cLoad, l CanSave, l User Save)





- 626 -

ADVPL Completo



Continuao:

I F Val Type( aRet ) == " A" . AND. Len( aRet ) == Len( aPar amBox)
For nX : = 1 t o Len( aPar amBox)
I f aPar amBox[ nX] [ 1] == 1
&( " MvPar Box" +St r Zer o( nX, 2) ) : = aRet [ nX]
El seI f aPar amBox[ nX] [ 1] == 2 . AND. Val Type( aRet [ nX] ) == " C"
&( " MvPar Box" +St r Zer o( nX, 2) ) : = aScan( aPar amBox[ nX] [ 4] , ;
{| x| Al l t r i m( x) == aRet [ nX] })
El seI f aPar amBox[ nX] [ 1] == 2 . AND. Val Type( aRet [ nX] ) == " N"
&( " MvPar Box" +St r Zer o( nX, 2) ) : = aRet [ nX]
Endi f
Next nX
ENDI F

RETURN l Ret


/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | I ATFCI AP | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | I MPORTACAO DO LI VRO FI SCAL CI AP |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */
STATI C FUNCTI ON I ATFCI AP( aSt r uSF9, aDadosSF9)
Local aDadosCI AP : = {}
Local nX : = 0
Local nPosSF9 : = 0

/ / Mont a ar r ay comdados padr es do SF9 de acor do como SX3
FOR nX : = 1 t o Len( aSt r uSF9)
AADD( aDadosCI AP, {aSt r uSF9[ nX] [ 1] , CRI AVAR( aSt r uSF9[ nX] [ 1] ) , NI L})
NEXT nX

/ / At ual i za dados do ar r ay comas i nf or maes pr esent es no SN1
FOR nX : = 1 t o Len( aDadosSF9)
I F ( nPosSF9 : = aScan( aDadosCI AP, {| aLi nhaCI AP| aLi nhaCI AP[ 1] ==
aDadosSF9[ nX] [ 1] }) ) > 0
aDadosCI AP[ nPosSF9] [ 2] : = aDadosSF9[ nX] [ 2]
ENDI F
NEXT nX

ConOut ( " I ni ci ando MsExecAut o - ATFCI AP: " +Ti me( ) )
l MsEr r oAut o : = . F.
MSExecAut o( {| x, y| U_ATFCI AP( x, y) }, aDadosCI AP, 3) / / Dados e Opo
ConOut ( " Fi nal i zada MsExecAut o - ATFCI AP: " +Ti me( ) )

RETURN l MsEr r oAut o


- 627 -

ADVPL Completo



Continuao:

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | XDBFLOG | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | CRI ACAO DO ARQUI VO DBF PARA TRATAMENTO DOS EVENTOS DE ERR|
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */
STATI C FUNCTI ON XDBFLOG( )
LOCAL aCampos : = {}
LOCAL cAr qLog : = MVPar Box06+" LOGI MP" +Get DbExt ensi on( )

I F ! Fi l e( cAr qLog)
AADD( aCampos, {" CKEYI MP" , " 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})
dbCr eat e( cAr qLog, aCampos, __Local Dr i ver )
ENDI F

dbUseAr ea( . T. , __Local Dr i ver , cAr qLog, " LOGI MP" , . T. , . F. )
RETURN

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | XGRVLOG | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | GRAVACAO DA MENSAGEM DE ERRO NO ARQUI VO DBF DE CONTROLE |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */
STATI C FUNCTI ON XGRVLOG( cKeyI mp, cKeyReg, cDescReg, cMsgEr r )

LOCAL cSeqLog : = " 000"

FOR nX : = 1 TO Len( cMsgEr r ) STEP 254

cSeqLog : = SOMA1( cSeqLog)
RECLOCK( " LOGI MP" , . T. )
LOGI MP- >CKEYI MP : = cKeyI mp
LOGI MP- >CKEYREG : = cKeyReg
LOGI MP- >CDESCR : = cDescReg
LOGI MP- >CSEQMSG : = cSeqLog
LOGI MP- >CMSGERR : = SUBSTR( cMsgEr r , nX, 254)
MSUNLOCK( )

NEXT nX

RETURN


- 628 -

ADVPL Completo



Continuao:

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | XCONVERRLOG | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | CONVERTE O ARRAY AAUTOERRO EM TEXTO CONTI NUO. |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

STATI C FUNCTI ON XCONVERRLOG( aAut oEr r o)

LOCAL cRet : = " "
LOCAL nX : = 1

FOR nX : = 1 t o Len( aAut oEr r o)
cRet += aAut oEr r o[ nX] +CHR( 13) +CHR( 10)
NEXT nX

RETURN cRet



























- 629 -

ADVPL Completo




42. Recursos de envio de e-mail


Neste tpico sero descritas as funes da linguagem ADVPL que permitem o envio e o
recebimento de mensagens atravs de e-mails.

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()

Mtodo do objeto oRpcSrv que permite a utilizao de todas as funes de envio e
recebimento de e-mail descritas neste tpico.

E Sintaxe: CallProc(cFuncao, xParam1, ..., xParamN)

E Parmetros:

cFuncao Nome da funo ou mtodo do objeto oRpcSrv que ser executado.
xParamN Parmetros da funo ou mtodo que ser executado.

E Retorno:

Nenhum .


- 630 -

ADVPL Completo


MAILSMTPON()

Ativa uma conexo com o servio de SMTP para a thread ativa.

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 Endereo do servidor para conexo
Cuser Nome do usurio para autenticao no servidor.
CPass Senha do usurio para autenticao no servidor.
NTimeOut Tempo de espera para operao de autenticao.

E Retorno:

Lgico Indica se foi realizada com sucesso a conexo com o servidor indicado.


MAILPOPON()

Ativa uma conexo com o servio de POP para a thread ativa. -> lReturn

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 Endereo do servidor para conexo
Cuser Nome do usurio para autenticao no servidor.
CPass Senha do usurio para autenticao no servidor.
NTimeOut Tempo de espera para operao de autenticao.

E Retorno:

Lgico Indica se foi realizada com sucesso a conexo com o servidor indicado.


- 631 -

ADVPL Completo



MAILSMTPOFF()

Encerra a conexo com o servio de SMTP.

E Sintaxe: MailSmtpOff()

E Sintaxe clssica:


DISCONNECT SMTP SERVER IN SERVER oRpcSrv RESULT lResult


E Parmetros:

Nenhum .

E Retorno:

Lgico Indica se a operao foi realizada com sucesso.


MAILPOPOFF()

Encerra a conexo com o servio de POP

E Sintaxe: MailPopOff()

E Sintaxe clssica:


DISCONNECT POP SERVER IN SERVER oRpcSrv RESULT lResult


E Parmetros:

Nenhum .

E Retorno:

Lgico Indica se a operao foi realizada com sucesso.


- 632 -

ADVPL Completo



MAILRECEIVE()

Efetua o recebimento de um e-mail, salvando-o no local definido.

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 Nmero da mensagem que dever ser recebida. Este nmero em funo da
quantidade de mensagens na caixa de e-mails.
cFrom Varivel local do fonte que ser atualizada com o remetente da mensagem.
cTo Varivel local do fonte que ser atualizada com o destinatrio da mensagem.
cCc Varivel local do fonte que ser atualizada com a conta copiada na
mensagem.
cBcc Varivel local do fonte que ser atualizada com a conta copiada em cpia
oculta na mensagem.
cSubject Varivel local do fonte que ser atualizada com o assunto da mensagem.
cBody Varivel local do fonte que ser atualizada com corpo da mensagem.
aFiles Varivel local do fonte que ser atualizada os nomes dos anexos da
mensagem.
cPath Diretrio no qual sero salvos os anexos da mensagem.
lDelete Indica se a mensagem dever ser apagada do servidor de e-mails aps sua
recepo pela aplicao.

E Retorno:

Lgico Indica se a operao de recebimento de mensagens foi realizada com
sucesso.







- 633 -

ADVPL Completo



MAILAUTH()

Funo que executa a autenticao do usurio no servio ativo.

E Sintaxe: MailAuth(cUser, cPassword)

E Parmetros:

cUser Nome do usurio para validao da conexo com o servidor.
cPassword Senha do usurio para validao da conexo com o servidor.

E Retorno:

Lgico Indica se foi realizada a autenticao do usurio com sucesso.



A funo MailAuth() dever ser utilizada obrigatoriamente aps a abertura da
conexo com o servidor, seja ele de envio ou recebimento de mensagens.



Para validao da conexo sempre efetue a verificao com o usurio contendo
o endereo completo do e-mail, e caso necessrio somente com o usurio,
eliminando o restante do endereo aps o caractere @.

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











- 634 -

ADVPL Completo



POPMSGCOUNT()

Verifica quantas mensagens existem na caixa de entrada do servio POP ativo.

E Sintaxe: PopMsgCount(@nMsgCount)

E Sintaxe clssica:


POP MESSAGE COUNT nMsgCount IN SERVER oRpcSrv RESULT lResult


E Parmetros:

nMsgCount Varivel local do fonte que ser atualizada com a quantidade de mensagens
disponveis para recebimento na caixa de e-mails.

E Retorno:

Lgico Indica se foi realizado o acesso a caixa de mensagens.


MAILSEND()

Envia um e-mail utilizando a servio de SMTP ativo.

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 Endereo de e-mail do remente da mensagem.
aTo Array contendo os endereos de e-mails dos destinatrios da mensagem.
aCc Array contendo os endereos de e-mails dos copiados na mensagem.
aBcc Array contendo os endereos de e-mails dos copiados de forma oculta na
mensagem.
cSubject Texto de assunto do e-mail.
cBody Texto da mensagem do e-mail.
aFiles Array contendo os nomes dos arquivos que sero anexados a mensagem.
lText Indica se o corpo do e-mail est em formato texto.

E Retorno:

Lgico Indica se a operao de envio de mensagens foi realizada com sucesso.

- 635 -

ADVPL Completo



MAILGETERR()

Retorna o erro que ocorreu no envio do e-mail.

E Sintaxe: MailGetErr()

E Sintaxe clssica:


GET MAIL ERROR cErrorMsg IN SERVER oRpcSrv


E Parmetros:

Nenhum .

E Retorno:

Caracter Mensagem de erro ocorrida no processamento do envio ou recebimento dos
e-mails.



Exemplos de utilizao das funcionalidades de envio e recebimento de e-mail


Envio de mensagens utilizando sintaxe clssica


#i ncl ude " pr ot heus. ch"
#i ncl ude " t bi conn. ch"
#i ncl ude " AP5MAI L. CH"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | SENDMAI L | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | ENVI O DE E- MAI L GENERI CO |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON SendMai l ( _l J ob)

Local l Resul Conn : = . T.
Local l Resul Send : = . T.
Local cEr r or : = " "

Local cSer ver : = Al l Tr i m( Get MV( " MV_RELSERV" ) )
Local cEmai l : = Al l Tr i m( Get MV( " MV_RELACNT" ) )
Local cPass : = Al l Tr i m( Get MV( " MV_RELPSW" ) )
Local l Rel aut h : = Get Mv( " MV_RELAUTH" )

Local cDe : = cEmai l
Local cPar a : = " ar nal doj r @mi cr osi ga. com. br "

- 636 -

ADVPL Completo



Continuao:

Local cCc : = " "
Local cAssunt o : = " Test e de envi o de e- mai l : Cur so ADVPL"
Local cAnexo : = " \ SYSTEM\ l gr l 99. bmp"
Local cMsg : = Space( 200)

Def aul t _l J ob : = . T.

cMsg : = " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
cMsg += " CURSO DE ADVPL "
cMsg += " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
cMsg += " Voc est r ecebendo ume- mai l do cur so de ADVPL avanado"

CONNECT SMTP SERVER cSer ver ACCOUNT cEmai l PASSWORD cPass RESULT l Resul Conn

I f ! l Resul Conn
GET MAI L ERROR cEr r or
I f _l J ob
ConOut ( Padc( " Fal ha na conexao " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha na conexao " +cEr r or )
Endi f
Ret ur n( . F. )
Endi f

/ / Si nt axe: SEND MAI L FROM cDe TO cPar a CC cCc SUBJ ECT cAssunt o BODY cMsg
ATTACHMENT cAnexo RESULT l Resul Send
/ / Todos os e- mai l t er o: De, Par a, Assunt o e Mensagem, por mpr eci sa anal i sar
se t em: ComCpi a e/ ou Anexo

I f l Rel aut h
l Resul t : = Mai l Aut h( Al l t r i m( cEmai l ) , Al l t r i m( cPass) )
/ / Se nao consegui u f azer a Aut ent i cacao usando o E- mai l compl et o, t ent a f azer
a aut ent i cacao usando apenas o nome de usuar i o do E- mai l
I f ! l Resul t
nA : = At ( " @" , cEmai l )
cUser : = I f ( nA>0, Subs( cEmai l , 1, nA- 1) , cEmai l )
l Resul t : = Mai l Aut h( Al l t r i m( cUser ) , Al l t r i m( cPass) )
Endi f

Endi f

I f l Resul t
I f Empt y( cCc) . And. Empt y( cAnexo)
SEND MAI L FROM cDe TO cPar a SUBJ ECT cAssunt o BODY cMsg RESULT
l Resul Send
El se
I f Empt y( cCc) . And. ! Empt y( cAnexo)
SEND MAI L FROM cDe TO cPar a SUBJ ECT cAssunt o BODY cMsg
ATTACHMENT cAnexo RESULT l Resul Send
El seI f ! Empt y( cCc) . And. ! Empt y( cAnexo)
SEND MAI L FROM cDe TO cPar a CC cCc SUBJ ECT cAssunt o BODY cMsg
ATTACHMENT cAnexo RESULT l Resul Send
El seI f Empt y( cCc) . And. Empt y( cAnexo)
SEND MAI L FROM cDe TO cPar a CC cCc SUBJ ECT cAssunt o BODY cMsg
RESULT l Resul Send
Endi f
Endi f

- 637 -

ADVPL Completo



Continuao:

I f ! l Resul Send
GET MAI L ERROR cEr r or
I f _l J ob
ConOut ( Padc( " Fal ha no Envi o do e- mai l " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha no Envi o do e- mai l " + cEr r or )
Endi f
Endi f

El se

I f _l J ob
ConOut ( Padc( " Fal ha na aut ent i cao do e- mai l : " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha na aut ent i cao do e- mai l : " + cEr r or )
Endi f

Endi f

DI SCONNECT SMTP SERVER

I F l Resul Send
I f _l J ob
ConOut ( Padc( " E- mai l envi ado comsucesso" , 80) )
El se
MsgI nf o( " E- mai l envi ado comsucesso" + cEr r or )
Endi f
ENDI F

RETURN l Resul Send
















- 638 -

ADVPL Completo



Envio de mensagens utilizando funes


#i ncl ude " pr ot heus. ch"
#i ncl ude ' t bi conn. ch'
#i ncl ude " AP5MAI L. CH"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | SENDMAI L | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | ENVI O DE E- MAI L GENERI CO |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON FSendMai l ( _l J ob)

Local l Resul Conn : = . T.
Local l Resul Send : = . T.
Local l Resul t : = . T.
Local cEr r or : = " "

Local cSer ver : = Al l Tr i m( Get MV( " MV_RELSERV" ) )
Local cEmai l : = Al l Tr i m( Get MV( " MV_RELACNT" ) )
Local cPass : = Al l Tr i m( Get MV( " MV_RELPSW" ) )
Local l Rel aut h : = Get Mv( " MV_RELAUTH" )

Local cDe : = cEmai l
Local cPar a : = " ar nal doj r @mi cr osi ga. com. br "
Local cCc : = " "
Local cBcc : = " "
Local cAssunt o : = " Test e de envi o de e- mai l : Cur so ADVPL"
Local cAnexo : = " \ SYSTEM\ l gr l 99. bmp"
Local cMsg : = Space( 200)

Def aul t _l J ob : = . F.

cMsg : = " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
cMsg += " CURSO DE ADVPL "
cMsg += " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
cMsg += " Voc est r ecebendo ume- mai l do cur so de ADVPL avanado"

/ / CONNECT SMTP SERVER cSer ver ACCOUNT cEmai l PASSWORD cPass RESULT l Resul Conn
l Resul Conn : = Mai l Smt pOn( cSer ver , cEmai l , cPass)

I f ! l Resul Conn
/ / GET MAI L ERROR cEr r or
cEr r or : = Mai l Get Er r ( )
I f _l J ob
ConOut ( Padc( " Fal ha na conexao " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha na conexao " +cEr r or )
Endi f
Ret ur n( . F. )
Endi f



- 639 -

ADVPL Completo


Continuao:

/ / Si nt axe: SEND MAI L FROM cDe TO cPar a CC cCc SUBJ ECT cAssunt o BODY cMsg
ATTACHMENT cAnexo RESULT l Resul Send
/ / Todos os e- mai l t er o: De, Par a, Assunt o e Mensagem, por mpr eci sa anal i sar
se t em: ComCpi a e/ ou Anexo

I f l Rel aut h
l Resul t : = Mai l Aut h( Al l t r i m( cEmai l ) , Al l t r i m( cPass) )
/ / Se nao consegui u f azer a Aut ent i cacao usando o E- mai l compl et o, t ent a f azer
a aut ent i cacao usando apenas o nome de usuar i o do E- mai l
I f ! l Resul t
nA : = At ( " @" , cEmai l )
cUser : = I f ( nA>0, Subs( cEmai l , 1, nA- 1) , cEmai l )
l Resul t : = Mai l Aut h( Al l t r i m( cUser ) , Al l t r i m( cPass) )
Endi f

Endi f

I f l Resul t

/ *
I f Empt y( cCc) . And. Empt y( cAnexo)
SEND MAI L FROM cDe TO cPar a SUBJ ECT cAssunt o BODY cMsg RESULT
l Resul Send
El se
I f Empt y( cCc) . And. ! Empt y( cAnexo)
SEND MAI L FROM cDe TO cPar a SUBJ ECT cAssunt o BODY cMsg
ATTACHMENT cAnexo RESULT l Resul Send
El seI f ! Empt y( cCc) . And. ! Empt y( cAnexo)
SEND MAI L FROM cDe TO cPar a CC cCc SUBJ ECT cAssunt o BODY cMsg
ATTACHMENT cAnexo RESULT l Resul Send
El seI f Empt y( cCc) . And. Empt y( cAnexo)
SEND MAI L FROM cDe TO cPar a CC cCc SUBJ ECT cAssunt o BODY cMsg
RESULT l Resul Send
Endi f
Endi f
*/

l Resul Send : = Mai l Send( cDe, {cPar a}, {cCc}, {cBcc}, cAssunt o, cMsg, {cAnexo}, . T. )

I f ! l Resul Send
/ / GET MAI L ERROR cEr r or
cEr r or : = Mai l Get Er r ( )
I f _l J ob
ConOut ( Padc( " Fal ha no Envi o do e- mai l " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha no Envi o do e- mai l " + cEr r or )
Endi f
Endi f

El se
I f _l J ob
ConOut ( Padc( " Fal ha na aut ent i cao do e- mai l : " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha na aut ent i cao do e- mai l : " + cEr r or )
Endi f
Endi f

Continuao:

- 640 -

ADVPL Completo



/ / DI SCONNECT SMTP SERVER
Mai l Smt pOf f ( )

I F l Resul Send
I f _l J ob
ConOut ( Padc( " E- mai l envi ado comsucesso" , 80) )
El se
MsgI nf o( " E- mai l envi ado comsucesso" + cEr r or )
Endi f
ENDI F

RETURN l Resul Send


































- 641 -

ADVPL Completo



Recebimento de mensagens utilizando funes


#i ncl ude " pr ot heus. ch"
#i ncl ude " t bi conn. ch"
#i ncl ude " AP5MAI L. CH"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | POPMAI L | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | RECEBI MENTO DE E- MAI L GENERI CO |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

USER FUNCTI ON FPopMai l ( _l J ob)

Local l Resul Conn : = . T.
Local l Resul Pop : = . T.
Local l Resul t : = . T.
Local cEr r or : = " "

Local cSer ver : = Al l Tr i m( Get MV( " MV_RELSERV" ) )
Local cEmai l : = Al l Tr i m( Get MV( " MV_RELACNT" ) )
Local cPass : = Al l Tr i m( Get MV( " MV_RELPSW" ) )
Local l Rel aut h : = Get Mv( " MV_RELAUTH" )

Local cDe : = " "
Local cPar a : = " "
Local cCc : = " "
Local cBcc : = " "
Local cAssunt o : = " "
Local aAnexo : = {}
Local cMsg : = " "
Local cPat h : = " \ Mai l Box"
Local nMsgCount : = 0
Local nNumber : = 0

Def aul t _l J ob : = . F.

l Resul Conn : = Mai l PopOn( cSer ver , cEmai l , cPass, 1000)

I f ! l Resul Conn
cEr r or : = Mai l Get Er r ( )
I f _l J ob
ConOut ( Padc( " Fal ha na conexao " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha na conexao " +cEr r or )
Endi f
Ret ur n( . F. )
Endi f


- 642 -

ADVPL Completo



Continuao:

/ *I f l Rel aut h
l Resul t : = Mai l Aut h( Al l t r i m( cEmai l ) , Al l t r i m( cPass) )
/ / Se nao consegui u f azer a Aut ent i cacao usando o E- mai l compl et o, t ent a
/ / f azer a aut ent i cacao usando apenas o nome de usuar i o do E- mai l
I f ! l Resul t
nA : = At ( " @" , cEmai l )
cUser : = I f ( nA>0, Subs( cEmai l , 1, nA- 1) , cEmai l )
l Resul t : = Mai l Aut h( Al l t r i m( cUser ) , Al l t r i m( cPass) )
Endi f

Endi f */

I f l Resul t

PopMsgCount ( @nMsgCount )

For nNumber : = 1 t o nMsgCount

l Resul Pop : = Mai l Recei ve( nNumber , @cDe, @cPar a, @cCc, @cBcc, ;
@cAssunt o, @cMsg, @aAnexo , cPat h, . F. )

I f ! l Resul Pop
cEr r or : = Mai l Get Er r ( )
I f _l J ob
ConOut ( Padc( " Fal ha no r ecebi ment o do e- mai l " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha no r ecebi ment o do e- mai l " + cEr r or )
Endi f

El se / / Sal var mensagemde e- mai l

cMessage : = " DE: " +cDe+CRLF
cMessage += " PARA: " +cPar a+CRLF
cMessage += " CC: " +cCc+CRLF
cMessage += " BCC: " +cBcc+CRLF
cMessage += " ASSUNTO: " +cAssunt o+CRLF
cMessage += " MENSAGEM: " +cMsg+CRLF

MsgI nf o( cMessage, " E- mai l Recebi do" )

Endi f

End- For / / Next nNumber

El se

I f _l J ob
ConOut ( Padc( " Fal ha na aut ent i cao do e- mai l : " +cEr r or , 80) )
El se
MsgAl er t ( " Fal ha na aut ent i cao do e- mai l : " + cEr r or )
Endi f

Endi f

Mai l PopOf f ( )



- 643 -

ADVPL Completo


Continuao:

I F l Resul Pop
I f _l J ob
ConOut ( Padc( " E- mai l s r ecebi dos comsucesso" , 80) )
El se
MsgI nf o( " E- mai l r ecebi dos comsucesso" + cEr r or )
Endi f
ENDI F

RETURN l Resul Pop



43. Integrao bsica com MsOffice


43.1. Exportao para EXCEL

A funcionalidade bsica de exportao de informaes para o Microsoft Excel utiliza a funo
DlgToExcel(), a qual permite que as informaes em formatos de array sejam geradas em uma
planilha.

DLGTOEXCEL()

Realiza a exportao das informaes do ambiente Protheus em formato de arrays para uma
planilha do Microsoft Excel.

E Sintaxe: DlgToExcel(cOrigem, cTitulo, aDadosCab, aDadosItens)

E Parmetros:

cOrigem Contedo fixo definido como: GETDADOS
cTitulo Nome para exibio da planilha
aDadosCab Array contendo os nomes dos campos que sero exibidos na planilha.
aDadosItens Array contendo as informaes dos campos, de acordo com a ordem do
array de cabealho.

E Retorno:

Nenhum .




Na exportao das informaes para o Microsoft Excel deve-se atentar para as
colunas que possurem informaes alfanumricas mas que contm apenas
nmeros. Para que estas colunas sejam exibidas corretamente deve ser
acrescentado um caracter especial no incio da string de forma que o Microsoft
Excel as reconhea como texto e no como numricas.






- 644 -

ADVPL Completo


Exemplo de exportao para o Microsoft Excel utilizando a funo DlgToExcel()


#i ncl ude " pr ot heus. ch"

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GExpExcel | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Descr i o | EXPORTACAO PARA EXCEL GENERI CO |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

User Funct i on GExpExcel ( )

Local aCabExcel : ={}
Local aI t ensExcel : ={}

/ / AADD( aCabExcel , {" TI TULO DO CAMPO" , " TI PO" , NTAMANHO, NDECI MAI S})
AADD( aCabExcel , {" A1_FI LI AL" , " C" , 02, 0})
AADD( aCabExcel , {" A1_COD" , " C" , 06, 0})
AADD( aCabExcel , {" A1_LOJ A" , " C" , 02, 0})
AADD( aCabExcel , {" A1_NOME" , " C" , 40, 0})
AADD( aCabExcel , {" A1_MCOMPRA" , " N" , 18, 2})

MsgRun( " Favor Aguar dar . . . . . " , " Sel eci onando os Regi st r os" , ;
{| | GPr ocI t ens( aCabExcel , @aI t ensExcel ) })

MsgRun( " Favor Aguar dar . . . . . " , " Expor t ando os Regi st r os par a o Excel " , ;
{| | Dl gToExcel ( {{" GETDADOS" , ;
" POSI O DE T TULOS DE VENDOR NO PER ODO" , ;
aCabExcel , aI t ensExcel }}) })

Ret ur n

/ */
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Funo | GPr ocI t ens | Aut or | Ar nal do R. J uni or | Dat a | |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| Uso | Cur so ADVPL |
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ */

St at i c Funct i on GPr ocI t ens( aHeader , aCol s)

Local aI t em
Local nX

DbSel ect Ar ea( " SA1" )
DbSet Or der ( 1)
DbGot op( )


- 645 -

ADVPL Completo



Continuao:

Whi l e SA1- >( ! EOF( ) )

aI t em: = Ar r ay( Len( aHeader ) )

For nX : = 1 t o Len( aHeader )
I F aHeader [ nX] [ 2] == " C"
aI t em[ nX] : = CHR( 160) +SA1- >&( aHeader [ nX] [ 1] )
ELSE
aI t em[ nX] : = SA1- >&( aHeader [ nX] [ 1] )
ENDI F
Next nX

AADD( aCol s, aI t em)
aI t em: = {}
SA1- >( dbSki p( ) )

End

Ret ur n





























- 646 -

ADVPL Completo



APNDICES

Relao de imagens para aplicaes visuais


AFASTAME

BPMSDOCI

COLTOT

AFASTAMENTO

BPMSEDT1

CONTAINR

ALT_CAD

BPMSEDT2

DBG05

AMARELO

BPMSEDT3

DBG06

ANALITICO

BPMSEDT4

DBG09

ANALITIC

BPMSRELA

DBG3

AGENDA

BPMSTASK1

DESTINOS

ALTERA

BPMSTASK2

DESTINOS2

AREA

BPMSTASK3

DISABLE

ASIENTOS

BPMSTASK4

DISCAGEM

AUTOM

BR_AMARELO

DOWN

BAIXATIT

BR_AZUL

E5

BAR

BR_AZUL_OCEAN

EDITABLE

BMPCALEN

BR_CINZA

EXCLUIR

BMPEMERG

BR_LARANJA

FILTRO

BMPGROUP

BR_MARROM

FINAL

BMPINCLUIR

BR_PRETO

FOLDER10

BMPPERG

BR_VERDE

FOLDER11

BMPPOST

BR_VERDE_OCEAN

FOLDER12

BMPTABLE

BR_VERMELHO

FOLDER14

BMPTRG

BR_VERMELHO_OCEAN

FOLDER5

BMPUSER

BUDGET

FOLDER6

BMPVISUAL

BUDGETY

FOLDER7

BONUS

CADEADO

GEOROTA

- 647 -

ADVPL Completo




BOTTOM

CALCULADORA

GRAF2D

BPMSDOC

CANCEL

GRAF3D

BPMSDOCA

CHAVE2

HISTORIC

BPMSDOCE

CHECKED

INSTRUME

IMPRESSAO

PCO_ITALT

PMSSETATOP

LBNO

PCO_ITEXC

PMSSETAUP

LBOK

PCOCO

PMSTASK1

LBTIK

PCOCUBE

PMSTASK2

LEFT

PCOFXCANCEL

PMSTASK3

LINE

PCOFXOK

PMSTASK4

LIQCHECK

PENDENTE

PMSUSER

LJPRECO

PESQUISA

PMSZOOMIN

LOCALIZA

PGNEXT

PMSZOOMOUT

LUPA

PGPREV

POSCLI

MAQFOTO

PMSCOLOR

PRECO

MATERIAL

PMSEDT3

PREV

METAS_BAIXO_16

PMSEDT4

PRINT03

METAS_BAIXO_LEG

PMSEXCEL

PRODUTO

METAS_CIMA_16

PMSEXPALL

RECALC

METAS_CIMA_LEG

PMSEXPCMP

RECORTAR

MSGHIGH

PMSMAIS

RIGHT

MSVISIO

PMSMATE

RPMNEW

NEXT

PMSMENOS

RPMSAVE

NOTE

PMSPESQ

S4SB014N

NOVACELULA

PMSPRINT

S4WB001N

OBJETIVO

PMSRELA

S4WB005N

- 648 -

ADVPL Completo




OK

PMSRRFSH

S4WB006N

ORDEM

PMSSETABOT

S4WB007N

PARAMETROS

PMSSETADIR

S4WB008N

PCO_COINC

PMSSETADOWN

S4WB009N

PCO_CONOR

PMSSETAESQ

S4WB010N

S4WB011N

WEB

CARAGANEW

S4WB014B

WFCHK

CARGASEQ

S4WB016N

WFUNCHK

CCTCALC

SALVAR

ADDCONTAINER

CHAT

SDUIMPORT

ADICIONAR_001

CHAT1

SDUPACK

ARMAZEM

CHAT2

SDUPROPR

ATALHO

CHAT3

SDUSETDEL

AVGARMAZEM

CHECK

SDUSOFTSEEK

AVGBOX1

CHECKOK

SHORTCUTDEL

AVGLBPAR1

CLOCK01

SHORTCUTEDIT

AVGOIC1

CLOCK02

SHORTCUTMINUS

AVIAO

CLOCK03

SHORTCUTNEW

AZUL

CLOCK04

SHORTCUTPLUS

BALANCA

DEVOLNF

SIMULACA

BGCOLOR

COBROWSR

SIMULACAO

BMPPARAM COLFORM

SUGESTAO

BMPCONS

COMPTITL

SUMARIO

BMPCPO

COMSOM

SVM

BMPDEL

CRITICA

TK_VERTIT

BR_BRANCO

COPYUSER

UNCHECKED

BRANCO

CTBLANC

- 649 -

ADVPL Completo




UP

BR_CANCEL

CTBREPLA

USER

BR_MARROM

DBG07

VCDOWN

BR_PINK

DELWEB

VCUP

BTCALC

COLOR

VENDEDOR

BTPESQ

DBG12

VERNOTA

CARGA

DBG10

DEPENDENTES

F7_VERM

F14_PINK

GEO

F8_NULL

F14_PRET

EDITWEB

F10_AMAR

F14_VERD

EMPILHADEIRA

F10_AZUL

F14_VERM

ENABLE

F10_CINZ

FRIAS

ESCALA

F10_LARA

FILTRO1

ESTOMOVI

F10_MARR

FOLDER8

F5_AZUL

F10_NULL

FOLDER13

F5_NULL

F10_PINK

FOLDER15

F5_VERD

F10_PRET

FORM

F5_VERM

F10_VERD

FRCOLOR

F6_NULL

F10_VERM

FRTOFFLINE

F5_AMAR

F11_NULL

FRTONLINE

F5_CINZ

F12_AMAR

GEO

F5_LARA

F12_AZUL

GEOEMAIL

F5_MARR

F12_CINZ

GEOTRECHO

F5_PINK

F12_LARA

GERPROJ

F5_PRET

F12_MARR

GLOBO

F7_AMAR

F12_PINK

IC_17

F7_AZUL

F12_PRET

INSTRUME

- 650 -

ADVPL Completo




F7_CINZ

F12_VERD

LANDSCAPE

F7_LARA

F12_VERM

LIGHTBLU

F7_MARR

F14_AMAR

MDIHELP

F7_NULL

F14_AZUL

MDILOGOFF

F7_PINK

F14_CINZ

MDIRUN

F7_PRET

F14_LARA

MDISPOOL

F7_VERD

F14_MARR

MEDEXT

MENURUN

RPMCABEC

SDUFIELDS

MPWIZARD

RPMCPO

SDUFIND

NCO

RPMDES

SDUGOTO

NEWWEB

RPMFORM

SDUNEW

NOCONNECT

RPMFUNC

SDUOPEN

NOCHECKED

RPMGROUP

SDUOPENIDX

NOMEDICA

RPMIMP

SDUORDER

NORMAS

RPMIMPORT

SDURECALL

OPEN

RPMNEW2

SDUREPL

OPERACAO

RPMOPEN

SDUSEEK

OUTLOOK

RPMPERG

SDUSTRUCT

PAPEL_ESCRITO

RPMTABLE

SDUSUM

PEDIDO

S4WB004N

SDUZAP

PIN

S4WB013N

SEMSOM

PMSINFO

S4WB014A

SOLICITA

PREDIO

SALARIOS

SSFONTES

PRINT02

SAVECLOCK

TAB1

PROCESSA

SDUADDTBL

TABPRICE

PRODUT2

SDUAPPEND

TEXTBOLD

- 651 -

ADVPL Completo




PROJETPMS

SDUCLOSE

TEXTCENTER

PRTETQ

SDUCLOSEIDX

XCLOSE

QMT_COND

SDUCOPYTO

TEXTITALIC

QMT_NO

SDUCOUNT

TEXTJUSTIFY

QMT_OK

SDUCREATEIDX

TEXTLEFT

RESPADEX

SDUDELETE

TEXTRIGHT

RESPONSA

SDUDRPTBL

TEXTUNDERLINE

ROSA

SDUERASE

TK_ALTFIN

TK_CLIFIN

BPMSEDT3A

GCT_NEW

TK_FIND

BPMSEDT3E

INVOICE1

TK_FONE

BPMSEDT3I

MSGGROUP

TK_HISTORY

BPMSEDT4A

MSGHIGH

TK_NOVO

BPMSEDT4E

PCO_COALT

TK_REFRESH

BPMSEDT4I

PCO_COEXC

TPOPAGTO1

BPMSREC

PCO_ITINC

UPDWARNING

BPMSRECA

PCOCOLA

UPDERROR

BPMSRECE

PCOCOPY

UPDINFORMATION

BPMSRECI

PCOEDIT

VERDE

BPMSRELAA

PCOFX

VERMELHO

BPMSRELAE

PCOLOCK

VERMESCURO

BPMSRELAI

PEDIDO2

WATCH

BPMSTSK1A

PEDIDO2_MDI

CLIENTE

BPMSTSK1E

PGRSAVE

ACAO

BPMSTSK1I

PMSAPONT

BOXBOM1

BPMSTSK2A

PMSCANC

BOXBOM2

BPMSTSK2E

PMSCOLUM

- 652 -

ADVPL Completo




BOXBOM3

BPMSTSK2I

PMSCONS

BOXBOM4

BPMSTSK3A

PMSCUSTO

BOXBOM5

BPMSTSK3E

PMSDATE

BPMSEDT1A

BPMSTSK3I

PMSESTRU

BPMSEDT1E

BPMSTSK4A

PMSEXCEL

BPMSEDT1I

BPMSTSK4E

PMSEXEC

BPMSEDT2A

BPMSTSK4I

PMSEXPEXC

BPMSEDT2E

ENGRENAGEM2

PMSFILTER

BPMSEDT2I

GCT_EDIT

PMSGRAPH

PMSNEXT

MSGFORWD

UNSELECTALL

PMSOPCAO

MSGREPLY

BSTART

PMSPESQ

OMSDIVIDE

BTURNSHARPLEFT

PMSPREV

PMSUPDOWN

BTURNSHARPRIGHT

PMSPREVIO

SHAPE01

ENGRENAGEM

PMSPRINT

SHAPE02

PAGEDOWN

PMSPROG

SHAPE03

PAGEUP

PMSSUPALOC

SHAPE04

SELECT

PMSTOOLS

SHAPE05

SELECTALL

PMSUSERP

TRIDOWN

BBEARRIGHT

REFRESH

WORD

BEND

SHAPE06

ROTEIRO

BKEEPLEFT

TRILEFT

CLIPS_PQ

BKEEPRIGHT

TRIRIGHT

NEXT_PQ

BLEFT

VINCULA1

RELACIONAMENTO_DIREIRA_PQ

BRIGHT

BAHEAD

PREV_PQ

CANCEL

BBEARLEFT

UP.GIF

CONFIRM


- 653 -

ADVPL Completo




DOWN

GOTOP

INVERTSELECTION

GOBOTTOM


- 654 -

ADVPL Completo



LISTAS DE EXERCCIOS




01
Implementar a classe Aluno com os mtodos New(), Inscrever() e Avaliar().




02
Desenvolver um dilogo para interagir com a classe Aluno desenvolvida no
exerccio anterior.



03
Implementar uma Enchoice para o cadastro de produtos (SB1).





- 655 -

ADVPL Completo



04
Converter o cadastro desenvolvido no exerccio anterior para que o mesmo
utilize o objeto MsMGet().



05
Desenvolver uma interface de cadastro que combine os objetos MsMGet e
MsNewGetDados causando o efeito de uma Modelo3().



06
Adicionar na interface de cadastro desenvolvida no exerccio anterior uma
EnchoiceBar() com um boto definido pelo usurio que exiba o AxCadastro de
um item utilizado na interface.




07
Converter o fonte DIALOG_OBJETOS.PRW para sintaxe orientada objetos.




- 656 -

ADVPL Completo




08
Desenvolver uma MaWndBrowse utilizando um arquivo temporrio.




09
Implementar uma funcionalidade com mltiplos TwBrowses que permita
pesquisar clientes e visualizar os ttulos a receber dos mesmos.



10
Implementar um objeto TFolder para montar um rodap para uma interface
que contenha MsMGet() e MsNewGetDados().



11
Implementar a MsAdvSize() e MsObjSize() no fonte desenvolvido no exerccio
anterior.




- 657 -

ADVPL Completo



12
Desenvolver uma MaWndBrowse utilizando um Alias gerado pela funo
TcGenQry().



13
Desenvolver uma MaWndBrowse utilizando um Alias gerado pela funo
TcGenQry() para um banco de dados externo a aplicao ERP.



14
Desenvolver uma aplicao que execute a Stored Procedure padro de
reprocessamento de saldos contbeis.



15
Implementar no fonte WndSqlConn desenvolvido anteriormente as funes
TcInclui(), TcAltera(), TcExclui() com o uso das funes TEnchoice() e
TcSqlExec().



- 658 -

ADVPL Completo



16
Implementar uma funo que realize o envio de um texto simples para uma
conta de e-mail @totvs, que permita sua fcil identificao.




17
Implementar uma rotina que realize o recebimento do e-mail enviado
anteriormente para a conta de e-mail @totvs.



18
Implementar uma rotina automtica para gravar as informaes no cadastro
de clientes (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 projeto ser realizada aps a entrega, no prazo estabelecido pelo
instrutor;

E Pode ser realizado em grupos de at 03 pessoas. Caso existam alunos sem grupos, estes podero
integrar equipes j formadas com o total de membros estabelecido, mediante aprovao do
instrutor;

Avaliao do 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

Desenvolver uma aplicao de cadastro utilizando a classe Aluno e os mtodos
disponveis para a mesma.


Projeto 02

Converter os fontes do pacote de oficina de programao para orientao a
objetos.


Projeto 03

Implementar uma aplicao ADVPL que consulte e atualize dados em um
banco de interface externo ao Protheus.


- 660 -

ADVPL Completo



REFERNCIAS BIBLIOGRFICAS

Referncias bibliogrficas

Gesto empresarial com ERP
Ernesto Haberkorn, 2006

Programao Orientada a Objetos com C ++
Ivan Luiz Marques Ricarte, 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
Arnaldo Raymundo Junior CSA
Luis Akira Tamura Educao Corporativa
Mrcia Satiko Sasaki Tokura ACR-N1_FRAMEW1
Patricia Lopes Legas Educao Corporativa
Robson Luiz Estefani Gonalves Fbrica de Software
Srgio Sueo Fuzinaka Inteligncia Protheus

Você também pode gostar