Você está na página 1de 661

ADVPL Completo

Análise de Sistemas de Engenharia


Centro Universitário Uniftec
660 pag.

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Edu ca çã o Cor por a t iva

Pr ogr a m a çã o e m AD VPL
Com ple t o

Mat riz – Av. Br az Lem e, 1.717 – 02511- 000 – São Paulo – SP – Br asil.
Tel.: 55 ( 11) 3981- 7001 www.m icr osiga.com .br

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


ESTRUTURA D O TREI N AM EN TO

MÓDULO 01: Introdução à programação...................................................................................................................... 11


1. Lógica de Programação e Algoritmos .................................................................................................................... 11
1.1. Lógica de Programação ................................................................................................................ 11
1.2. Desenvolvendo algoritmos ............................................................................................................ 12
1.2.1. Estudando algoritmos ................................................................................................................................ 13
1.2.2. Teste de mesa ............................................................................................................................................ 15
2. Estruturas de programação .................................................................................................................................... 16
2.1. Diagrama de bloco ........................................................................................................................ 16
2.2. Estruturas de decisão e repetição ................................................................................................ 19
2.2.1. Estruturas de decisão ................................................................................................................................. 19
2.2.2. Estruturas de repetição .............................................................................................................................. 22
MÓDULO 02: A linguagem ADVPL ............................................................................................................................... 24
3. Estrutura de um Programa ADVPL ...................................................................................................................... 26
3.1. Áreas de um Programa ADVPL .................................................................................................. 28
4. Declaração e Atribuição de Variáveis .................................................................................................................... 31
4.1. Tipo de Dados ................................................................................................................................ 31
4.2. Declaração de variáveis ................................................................................................................ 32
4.3. Escopo de variáveis ....................................................................................................................... 33
4.4. Entendendo a influência do escopo das variáveis ...................................................................... 37
4.5. Operações com Variáveis ............................................................................................................. 38
4.5.1. Atribuição de variáveis.............................................................................................................................. 38
4.5.2. Operadores da linguagem ADVPL............................................................................................................ 39
4.5.3. Operação de Macro Substituição ............................................................................................................... 44
4.5.4. Funções de manipulação de variáveis ....................................................................................................... 45
5. Estruturas básicas de programação ....................................................................................................................... 51
5.1. Estruturas de repetição ................................................................................................................ 51
5.1.1. Influenciando o fluxo de repetição ............................................................................................................ 54
5.2. Estruturas de decisão .................................................................................................................... 56
6. Arrays e Blocos de Código...................................................................................................................................... 60
6.1. Arrays ............................................................................................................................................ 60
6.1.1. Inicializando arrays ................................................................................................................................... 62
6.1.2. Funções de manipulação de arrays ............................................................................................................ 63
6.1.3. Cópia de arrays .......................................................................................................................................... 65
6.2. Listas de Expressões e Blocos de Código .................................................................................... 67
6.2.1. Premissas para utilização de Blocos de Código ........................................................................................ 67
6.2.2. Lista de expressões .................................................................................................................................... 68
6.2.3. Blocos de Código ...................................................................................................................................... 70
6.2.4. Funções para manipulação de blocos de código........................................................................................ 72
7. Funções ................................................................................................................................................................... 73
7.1. Tipos e escopos de funções ........................................................................................................... 74
7.2. Passagem de parâmetros entre funções ...................................................................................... 77

- 2 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


8. Diretivas de compilação.......................................................................................................................................... 83
MÓDULO 03: Desenvolvendo pequenas customizações ................................................................................................ 88
9. ADVPL e o ERP Microsiga Protheus .................................................................................................................... 88
9.1. O Ambiente Protheus ................................................................................................................... 88
9.2. Organização e configuração inicial do ambiente Protheus ....................................................... 92
9.3. O Configurador do Protheus ....................................................................................................... 98
9.3.1. Funcionalidades Abordadas ...................................................................................................................... 98
9.3.2. Estruturas básicas da aplicação ERP Protheus .......................................................................................... 98
9.3.3. Acessando o módulo Configurador ......................................................................................................... 101
9.4. Funcionalidades do Configurador ............................................................................................. 104
9.4.1. Dicionário de Dados da aplicação ERP ................................................................................................... 105
9.4.2. Adição de tabelas ao Dicionário de Dados .............................................................................................. 105
9.4.3. Adição de campos as tabelas do Dicionário de Dados ............................................................................ 108
9.4.4. Adição de índices para as tabelas do Dicionário de Dados ..................................................................... 113
9.4.5. Adição de gatilhos para os campos das tabelas do sistema ..................................................................... 116
9.4.6. Criação de Tabelas Genéricas ................................................................................................................. 118
9.4.7. Criação de Parâmetros ............................................................................................................................. 119
10. TOTVS Development Studio ................................................................................................................................ 121
Desenvolvimento de pequenas customizações ....................................................................................... 124
11. Acesso e manipulação de bases de dados em ADVPL ......................................................................................... 124
11.1. Diferenças e compatibilizações entre bases de dados............................................................... 125
11.2. Funções de acesso e manipulação de dados .............................................................................. 126
11.3. Diferenciação entre variáveis e nomes de campos ................................................................... 131
11.4. Controle de numeração seqüencial............................................................................................ 132
12. Customizações para a aplicação ERP .................................................................................................................. 133
12.1. Customização de campos – Dicionário de Dados ..................................................................... 134
12.1.1. Validações de campos e perguntas ..................................................................................................... 134
12.1.2. Pictures de formação disponíveis ....................................................................................................... 136
12.2. Customização de gatilhos – Configurador ................................................................................ 138
12.3. Customização de parâmetros – Configurador ......................................................................... 139
12.3.1. Funções para manipulação de parâmetros .......................................................................................... 139
12.3.2. Cuidados na utilização de um parâmetro ............................................................................................ 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 padrões para atualizações de dados ........................................................................ 145
13.2.1. AxCadastro() ...................................................................................................................................... 145
13.2.2. MBrowse().......................................................................................................................................... 146
13.2.3. AxFunctions() ..................................................................................................................................... 150
APÊNDICES .................................................................................................................................................................. 152
BOAS PRÁTICAS DE PROGRAMAÇÃO .................................................................................................................... 152
14. Utilização de Identação ........................................................................................................................................ 152
15. Capitulação de Palavras-Chave ........................................................................................................................... 153
15.1. Palavras em maiúsculo ............................................................................................................... 154

- 3 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


16. Utilização da Notação Húngara ........................................................................................................................... 154
17. Palavras reservadas .............................................................................................................................................. 155
LISTAS DE EXERCÍCIOS ........................................................................................................................................... 156
Módulo 01: Introdução à programação ................................................................................................. 156
Módulo 02: A linguagem ADVPL........................................................................................................... 157
Módulo 03: Desenvolvendo pequenas customizações ........................................................................... 160
MÓDULO 04: Desenvolvendo aplicações em ADVPL ................................................................................................. 162
18. A linguagem ADVPL ............................................................................................................................................ 162
19. Estrutura de um Programa ADVPL .................................................................................................................... 164
19.1. Áreas de um Programa ADVPL ................................................................................................ 166
20. Declaração e Atribuição de Variáveis .................................................................................................................. 169
20.1. Tipo de Dados .............................................................................................................................. 169
20.2. Declaração de variáveis .............................................................................................................. 170
20.3. Escopo de variáveis ..................................................................................................................... 171
20.4. Entendendo a influência do escopo das variáveis .................................................................... 175
21. Regras adicionais da linguagem ADVPL ............................................................................................................ 176
21.1. Palavras reservadas .................................................................................................................... 176
21.2. Pictures de formatação disponíveis ........................................................................................... 177
22. Programas de Atualização.................................................................................................................................... 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. Função Modelo2() .............................................................................................................................. 197
22.3. Modelo3() ..................................................................................................................................... 201
22.3.1. Estrutura de um programa utilizando a Modelo3() ............................................................................. 204
22.3.2. Função 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 Temporários........................................................................................................................... 233
23.1. Utilização de arquivos e índices temporários ........................................................................... 233
23.2. Funções para manipulação de arquivos e índices temporários .............................................. 233
23.2.1. CriaTrab() ........................................................................................................................................... 233
23.2.2. dbUseArea() ....................................................................................................................................... 234
23.2.3. IndRegua() .......................................................................................................................................... 234
24. Relatórios não gráficos ......................................................................................................................................... 238
24.1.1. Estrutura de relatórios baseados na SetPrint() .................................................................................... 238
25. Manipulação de arquivos I ................................................................................................................................... 248

- 4 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


25.1. Geração e leitura de arquivos em formato texto ...................................................................... 248
1ª. Família de funções de gravação e leitura de arquivos texto .................................................................... 249
2ª. Família de funções de gravação e leitura de arquivos texto .................................................................... 254
26. Oficina de programação I .................................................................................................................................... 256
26.1. Interfaces com sintaxe clássica................................................................................................... 256
26.2. Réguas 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 múltiplas colunas .................................................................................................................. 274
26.4. ScrollBox() ................................................................................................................................... 276
26.5. ParamBox().................................................................................................................................. 280
MÓDULO 05: Introdução a orientação à objetos......................................................................................................... 285
27. Conceitos de orientação à objetos ........................................................................................................................ 285
27.1. Definições ..................................................................................................................................... 285
27.2. Conceitos Básicos ........................................................................................................................ 288
27.3. O Modelo de Objetos (OMT) ..................................................................................................... 289
27.3.1. Objetos e Classes ................................................................................................................................ 289
27.3.2. Atributos ............................................................................................................................................. 290
27.3.3. Operações e Métodos ......................................................................................................................... 291
27.3.4. Sugestões de desenvolvimento ........................................................................................................... 292
28. Orientação a objetos em ADVPL ......................................................................................................................... 293
28.1. Sintaxe e operadores para orientação a objetos ....................................................................... 293
28.2. Estrutura de uma classe de objetos em ADVPL ...................................................................... 295
28.3. Implementação dos métodos de uma classe em ADVPL ......................................................... 296
MÓDULO 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. Aplicações com a interface visual do ADVPL ..................................................................................................... 309
30.1. Captura de informações simples (Multi-Gets) ......................................................................... 309
30.1.1. Enchoice() .......................................................................................................................................... 310
30.1.2. MsMGet() ........................................................................................................................................... 312
30.2. Captura de múltiplas informações (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

- 5 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


30.3. Barras de botões .......................................................................................................................... 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 botões.................................................................................. 339
APÊNDICES .................................................................................................................................................................. 340
BOAS PRÁTICAS DE PROGRAMAÇÃO .................................................................................................................... 340
31. Arredondamento ................................................................................................................................................... 340
32. Utilização de Identação ........................................................................................................................................ 340
33. Capitulação de Palavras-Chave ........................................................................................................................... 342
33.1. Palavras em maiúsculo ............................................................................................................... 342
34. Utilização da Notação Húngara ........................................................................................................................... 343
35. Técnicas de programação eficiente ...................................................................................................................... 343
LISTAS DE EXERCÍCIOS ........................................................................................................................................... 353
Módulo 04.1.: Desenvolvendo aplicações em ADVPL ......................................................................... 353
Módulo 04.2.: Oficina de Programação I .............................................................................................. 358
Módulo 05: Introdução a orientação à objetos ..................................................................................... 360
Módulo 06: ADVPL orientado à objetos I ............................................................................................ 361
Projeto: Avaliação prática do treinamento de ADVPL Intermediário ............................................... 363
MÓDULO 07: ADVPL Orientado à objetos II.............................................................................................................. 364
36. Componentes da interface visual do ADVPL ...................................................................................................... 364
TSRVOBJECT() .......................................................................................................................................... 366
TFONT() ...................................................................................................................................................... 369
MSDIALOG() .............................................................................................................................................. 370
TDIALOG() ................................................................................................................................................. 371
TWINDOW() ............................................................................................................................................... 374
TCONTROL().............................................................................................................................................. 377
BRGETDDB() ............................................................................................................................................. 378
MSCALEND() ............................................................................................................................................. 381
MSCALENDGRID() ................................................................................................................................... 383
MSSELBR()................................................................................................................................................. 385
MSWORKTIME() ....................................................................................................................................... 388
SBUTTON() ................................................................................................................................................ 391
TBAR() ........................................................................................................................................................ 393
TBITMAP() ................................................................................................................................................. 395
TBROWSEBUTTON()................................................................................................................................ 397
TBTNBMP() ................................................................................................................................................ 399
TBTNBMP2() .............................................................................................................................................. 401
TBUTTON() ................................................................................................................................................ 403
TCBROWSE() ............................................................................................................................................. 405
TCHECKBOX() .......................................................................................................................................... 409
TCOLORTRIANGLE() ............................................................................................................................... 411
TCOMBOBOX() ......................................................................................................................................... 413
TFOLDER() ................................................................................................................................................. 416
TGET()......................................................................................................................................................... 418
TGROUP() ................................................................................................................................................... 420
THBUTTON() ............................................................................................................................................. 422
TIBROWSER() ............................................................................................................................................ 423
TLISTBOX()................................................................................................................................................ 425
TMENU()..................................................................................................................................................... 429

- 6 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


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. Aplicações com a interface visual do ADVPL ..................................................................................................... 493
37.1. Captura de informações simples (Multi-Gets) ......................................................................... 493
37.1.1. Enchoice() .......................................................................................................................................... 494
37.1.2. MsMGet() ........................................................................................................................................... 496
37.2. Captura de múltiplas informações (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 botões .......................................................................................................................... 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 botões.................................................................................. 523
38. Outras aplicações da interface visual do ADVPL ............................................................................................... 524
38.1. MaWndBrowse() ......................................................................................................................... 524
38.1.1. Enchoice para Arquivos Temporários ................................................................................................ 527
38.2. DbTree() ....................................................................................................................................... 537
38.3. MsSelect()..................................................................................................................................... 542
39. Introdução à relatórios gráficos ........................................................................................................................... 545
39.1. TReport() ..................................................................................................................................... 545
39.1.1. Introdução ........................................................................................................................................... 545
Finalidade..................................................................................................................................................... 545
Descrição ..................................................................................................................................................... 546
Pré-Requisitos .............................................................................................................................................. 546
39.1.2. Impressão do relatório personalizável ................................................................................................ 547
39.1.2.1. Parâmetros de impressão ............................................................................................................... 547
Impressão ..................................................................................................................................................... 547
Arquivo ........................................................................................................................................................ 547
Spool ............................................................................................................................................................ 548

- 7 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


E-mail........................................................................................................................................................... 548
Papel............................................................................................................................................................. 549
Tamanho do papel ........................................................................................................................................ 549
Formato da impressão .................................................................................................................................. 549
Configurações .............................................................................................................................................. 549
Título ............................................................................................................................................................ 549
Ordem .......................................................................................................................................................... 549
Layout .......................................................................................................................................................... 549
Preview ........................................................................................................................................................ 549
Executar em segundo plano ......................................................................................................................... 550
39.1.3. Personalização .................................................................................................................................... 550
39.1.3.1. Editando o layout do relatório ....................................................................................................... 550
Nova estrutura do relatório TReport: ........................................................................................................... 551
39.1.4. Definindo a Função ReportDef() ........................................................................................................ 551
DEFINE REPORT ....................................................................................................................................... 552
DEFINE SECTION ..................................................................................................................................... 552
DEFINE CELL ............................................................................................................................................ 552
MÓDULO 08: Aplicações ADVPL para o ERP ............................................................................................................ 553
40. Protheus e o TOPCONNECT / TOTVS DbAccess .............................................................................................. 553
40.1. Características técnicas 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 Diferenças das RDDs .......................................................................... 557
Funcionamento Interno ................................................................................................................................ 557
Quebra de Compatibilidade com CodeBase/DBF ........................................................................................ 558
Lista dos códigos de erro do TOPConnect / DbAccess................................................................................ 559
40.2. Funções ADVPL para TOPCONNECT / TOTVS DbAccess.................................................. 560
Lista das funções de interação com a aplicação TopConnect / DbAccess: .................................................. 560
Lista das funções acessórias utilizadas nos fontes como facilitadoras: ........................................................ 560
Funções de interação 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
Funções acessórias para uso em fontes com interação com o TOTVS DbAccess ....................................... 577
CHANGEQUERY() .................................................................................................................................... 577
RETFULLNAME()...................................................................................................................................... 578
RETSQLCOND() ........................................................................................................................................ 579
RETSQLNAME() ........................................................................................................................................ 579
RETSQLTABLE() ....................................................................................................................................... 580
SQLCOPY()................................................................................................................................................. 580

- 8 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


SQLORDER() .............................................................................................................................................. 581
SQLTOTRB() .............................................................................................................................................. 582
40.3. Aplicações com controle de comunição com o Banco de Dados.............................................. 583
40.3.1. MaWndBrowse com Alias Temporário gerado por Query ................................................................. 583
Exemplo: MaWndBrowse com Alias Temporário gerado por Query .......................................................... 584
40.3.2. Banco de dados de interface ............................................................................................................... 595
Considerações relevantes sobre as funções TCLink() e TCSetConn()......................................................... 595
Considerações complementares sobre o conceito de Banco de Dados de Interface..................................... 596
40.4. Embedded SQL – Facilitador de Query’s................................................................................. 598
Disponibilidade do Recurso ......................................................................................................................... 598
Características operacionais - Sintaxe .......................................................................................................... 599
Limitação: .................................................................................................................................................... 599
Erros de Compilação .................................................................................................................................... 600
Erros de Execução........................................................................................................................................ 600
Características operacionais - depuração ..................................................................................................... 601
Função auxiliar - GETLastQuery() .............................................................................................................. 601
41. Funcionalidade MsExecAuto ............................................................................................................................... 603
Sobre a MsExecAuto e Rotinas Automáticas .............................................................................................. 603
Quando utilizar a funcionalidade MsExecAuto ?......................................................................................... 604
Processos da aplicação ERP com tratamentos para execução por MsExecAuto.......................................... 604
Quando não utilizar a funcionalidade MsExecAuto..................................................................................... 605
41.1. Desenvolvendo aplicações com MsExecAuto ............................................................................ 606
Estrutura de uma rotina com execução de MsExecAuto .............................................................................. 606
Variáveis de controle ................................................................................................................................... 606
Montagem dos arrays de parâmetros............................................................................................................ 606
Definição dos parâmetros específicos da rotina que será executada ............................................................ 610
Controle de transação ................................................................................................................................... 611
Tratamento de mensagens de erro ................................................................................................................ 613
Aplicação completa de importação utilizando MsExecAuto: Carga de imobilizado ................................... 616
42. Recursos de envio de e-mail ................................................................................................................................. 629
Funções para manipulação de e-mails .......................................................................................................... 629
Detalhamento das funções de manipulação 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 utilização das funcionalidades de envio e recebimento de e-mail .......................................... 635
Envio de mensagens utilizando sintaxe clássica .......................................................................................... 635
Envio de mensagens utilizando funções ...................................................................................................... 638
Recebimento de mensagens utilizando funções ........................................................................................... 641
43. Integração básica com MsOffice.......................................................................................................................... 643
43.1. Exportação para EXCEL ........................................................................................................... 643
DLGTOEXCEL() ........................................................................................................................................ 643
Exemplo de exportação para o Microsoft Excel utilizando a função DlgToExcel() .................................... 644
APÊNDICES .................................................................................................................................................................. 646
Relação de imagens para aplicações visuais .......................................................................................... 646
LISTAS DE EXERCÍCIOS ........................................................................................................................................... 654

- 9 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Projeto: Avaliação prática do treinamento de ADVPL Avançado ...................................................... 659
REFERÊNCIAS BIBLIOGRÁFICAS .......................................................................................................................... 660

- 10 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ÓD ULO 0 1 : I nt r oduçã o à pr ogr a m a çã o
1 . Lógica de Pr ogr a m a çã o e Algor it m os

No aprendizado de qualquer linguagem de pr ogram ação é essencial desenvolver os conceit os


relacionados a lógica e a t écnica da escrit a de um program a.

Com foco nest a necessidade, est e t ópico irá descr ev er r esum idam ent e os conceit os envolvidos
no pr ocesso de desenv olvim ent o de um program a at rav és dos conceit os r elacionados à:

 Lógica de program ação


 Algorit m os
 Diagram as de blocos

1 .1 . Lógica de Pr ogr a m a çã o

Lógica

A lógica de program ação é necessária para pessoas que desej am t rabalhar com
desenvolvim ent o de sist em as e pr ogram as, ela perm it e definir a seqüência lógica para o
desenvolvim ent o. Ent ão o que é lógica?

Lógica de p r og r a m a çã o é a t é cn ica de e n ca de a r pe n sa m e n t os pa r a a t in gir


de t e r m in a d o obj e t ivo.

Se qü ê n cia Lóg ica

Est es pensam ent os, podem ser descrit os com o um a seqüência de inst ruções, que dev em ser
seguidas para se cum prir um a det erm inada t arefa.

Se qü ê n cia Lóg ica sã o p a ssos e x e cu t a d os a t é a t in gir u m ob j e t ivo ou solu çã o d e u m


pr ob le m a .

I n st r u çõe s

Na linguagem com um , ent ende- se por inst ruções “ um conj unt o de r egras ou norm as definidas
para a realização ou em prego de algo” .

Em inform át ica, porém , inst rução é a inform ação que indica a um com put ador um a ação
elem ent ar a ex ecut ar . Convém r essalt ar que um a ordem isolada não per m it e realizar o
processo com plet o, par a isso é necessário um conj unt o de inst ruções colocadas em ordem
seqüencial lógica.

Por ex em plo, se quiser m os fazer um a om elet e de bat at as, pr ecisar em os colocar em prát ica
um a série de inst ruções: descascar as bat at as, bat er os ov os, frit ar as bat at as, et c. É evident e
que essas inst ruções t êm que ser ex ecut adas em um a ordem adequada – não se pode
descascar as bat at as depois de frit á- las.

Dessa m aneira, um a inst rução t om ada em separado não t em m uit o sent ido; para obt erm os o
result ado, precisam os colocar em prát ica o conj unt o de t odas as inst ruções, na ordem cor ret a.

- 11 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


I n st r u çõe s sã o u m con j u n t o de r e gr a s ou n or m a s de fin id a s pa r a a r e a liz a çã o ou
e m pr e go de a lgo. Em in f or m á t ica , é o que in d ica a u m com pu t a dor u m a a çã o
e le m e n t a r a e x e cu t a r .

Alg or it m o

Um algorit m o é for m alm ent e um a seqüência finit a de passos que lev am a execução de um a
t arefa. Podem os pensar em algorit m o com o um a receit a, um a seqüência de inst ruções que dão
cabo de um a m et a específica. Est as t arefas não podem ser r edundant es nem subj et ivas na sua
definição, dev em ser claras e precisas.

Com o ex em plos de algorit m os podem os cit ar os algorit m os das oper ações básicas ( adição,
m ult iplicação, divisão e subt ração) de núm er os r eais decim ais. Out ros exem plos seriam os
m anuais de aparelhos elet rônicos, com o um videocasset e, que explicam passo- a- passo com o,
por ex em plo, gravar um ev ent o.

At é m esm o as coisas m ais sim ples, podem ser descrit as por seqüências lógicas, t ais com o:

 “ Chupar um a bala”
1. Pegar a bala;
2. Ret irar o papel;
3. Chupar a bala;
4. Jogar o papel no lixo.

 “ Som ar dois núm eros quaisquer”


1. Escr eva o prim eiro núm er o no r et ângulo A;
2. Escr eva o segundo núm er o no r et ângulo B;
3. Som e o núm ero do r et ângulo A com núm ero do r et ângulo B e coloque o
result ado no r et ângulo C.

1 .2 . D e se nvolv e ndo a lgor it m os

Pse u docód igo

Os algorit m os são descrit os em um a linguagem cham ada pseudocódigo. Est e nom e é um a


alusão à post erior im plem ent ação em um a linguagem de pr ogram ação, ou sej a, quando for
ut ilizada a linguagem a de pr ogram ação pr opriam ent e dit a com o, por exem plo, ADVPL.

Por isso os algorit m os são independent es das linguagens de pr ogr am ação, sendo que ao
cont rário de um a linguagem de pr ogram ação não exist e um form alism o rígido de com o dev e
ser escrit o o algorit m o.

O algorit m o deve ser fácil de int erpret ar e fácil de codificar. Ou sej a, ele dev e ser o
int erm ediário ent r e a linguagem falada e a linguagem de pr ogram ação.

- 12 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Re gr a s p a r a con st r u çã o do Algor it m o

Para escr ev er um algorit m o precisam os descrever a seqüência de inst ruções, de m aneira


sim ples e obj et iva. Para isso ut ilizarem os algum as t écnicas:

1. Usar som ent e um v erbo por frase;


2. I m aginar que você est á desenv olvendo um algorit m o para pessoas que não t rabalham
com inform át ica;
3. Usar frases curt as e sim ples;
4. Ser obj et ivo;
5. Procurar usar palavras que não t enham sent ido dúbio.

Fa se s

Para im plem ent ar de um algorit m o de sim ples int erpr et ação e codificação é necessário
inicialm ent e dividir o pr oblem a apr esent ado em t rês fases fundam ent ais, as quais são:

 EN TRAD A: São os dados de ent rada do algorit m o;


 PROCESSAM EN TO: São os procedim ent os ut ilizados para chegar ao r esult ado final;
 SAÍ D A: São os dados j á processados.

1 .2 .1 . Est uda ndo a lgor it m os

Nest e t ópico serão dem onst rados alguns algorit m os do cot idiano, os quais foram
im plem ent ados ut ilizando os princípios descrit os nos t ópicos ant erior es.

 M a sca r u m ch icle t e
 Ut iliz a r u m t e le fon e p ú blico – ca r t ã o
 Fr it a r u m ovo
 Tr oca r lâ m pa da s
 D e sca sca r b a t a t a s
 Joga r o j ogo d a f or ca
 Ca lcu la r a m é dia de n ot a s
 Joga r o j ogo d a v e lh a – con t r a o a lgor it m o

M a sca r u m ch icle t e

1. Pegar o chiclet e
2. Ret irar o papel
3. Mast igar
4. Jogar o papel no lixo

Ut iliz a r u m t e le fon e p ú blico - ca r t ã o

1. Ret irar o t elefone do gancho


2. Esperar o sinal
3. Colocar o cart ão
4. Discar o núm er o
5. Falar no t elefone
6. Colocar o t elefone no ganho

- 13 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fr it a r u m 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 esquent ar
6. Quebr ar o ov o na frigideira
7. Jogar a casca no lixo
8. Ret irar a frigideira do fogo quando o ovo est iver no pont o
9. Desligar o fogo
10. Colocar sal a gost o

Tr oca r lâ m pa da s

1. Se a lâm pada est iver fora do alcance, pegar um a escada


2. Pegar a lâm pada nova
3. Se a lâm pada queim ada est iver quent e, pegar um pano
4. Tirar lâm pada queim ada
5. Colocar lâm pada nova

D e sca sca r b a t a t a s

1. Pegar faca, bacia e bat at as


2. Colocar água na bacia
3. Enquant o houv er bat at as, descascar as bat at as
3.1. Colocar as bat at as descascadas na bacia

Joga r o j ogo d a f or ca

1. Escolher a palavra
2. Mont ar o diagram a do j ogo
3. Enquant o houv er lacunas vazias e o corpo est iver incom plet o:
3.1. Se acert ar a let ra: escr ever na lacuna corr espondent e
3.2. Se er rar a let ra: desenhar um a part e do corpo na forca

Ca lcu la r a m é dia de n ot a s

1. Enquant o houv er not as a ser em recebidas:


1.1. Receber a not a;

2. Som e t odas as not as r ecebidas;


3. Divida o t ot al obt ido pela quant idade de not as r ecebidas;
4. Exiba a m édia das not as.

Joga r o j ogo d a v e lh a – con t r a o a lgor it m o

1. Enquant o exist ir um quadrado livre e ninguém ganhou ou perdeu o j ogo:


1.1. Esper e a j ogada do adv er sário, cont inue depois
1.2. Se cent r o est iver livre: j ogue no cent r o
1.3. Senão, se o adversário possuir 2 quadrados em linha com um quadr ado livre,
j ogue nest e quadrado
1.4. Senão, se há algum cant o livre, j ogue nest e cant o

- 14 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 .2 .2 . Te st e de m e sa

Após desenv olver um algorit m o ele dev erá sem pr e ser t est ado. Est e t est e é cham ado de
TESTE D E M ESA, que significa seguir as inst ruções do algorit m o de m aneira pr ecisa para
verificar se o procedim ent o ut ilizado est á cor ret o ou não.

Para avaliar a aplicação do t est e de m esa, ut ilizarem os o algorit m o de calcular a m édia de


not as:

Alg or it m o: Ca lcu la r a m é dia de n ot a s

1. Enquant o houver not as a serem r ecebidas:


a. Receber a not a;

2. Som e t odas as not as recebidas;


3. Divida o t ot al obt ido pela quant idade de not as r ecebidas;
4. Exiba a m édia das not as.

Te st e de m e sa :

1. Par a cada not a infor m ada, r eceber e r egist rar na t abela abaixo:

ID N ot a

2. Ao t érm ino das not as, a t abela deverá cont er t odas as not as inform adas, com o abaixo:

ID N ot a
1 8 .0
2 7 .0
3 8 .0
4 8 .0
5 7 .0
6 7 .0

3. Som ar t odas as not as: 45


4. Dividir a som a das not as, pelo t ot al de not as inform ado: 45/ 6  7.5
5. Exibir a m édia obt ida: Mensagem ( Média: 7.5)

- 15 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 . Est r ut ur a s de pr ogr a m a çã o

2 .1 . D ia gr a m a de bloco

O diagram a de blocos é um a form a padr onizada e eficaz para r epr esent ar os passos lógicos de
um det erm inado processam ent o.

Com o diagram a podem os definir um a seqüência de sím bolos, com significado bem definido,
port ant o, sua principal função é a de facilit ar a visualização dos passos de um pr ocessam ent o.

Sim bolog ia

Exist em diver sos sím bolos em um diagram a de bloco. No quadr o abaixo est ão represent ados
alguns dos sím bolos m ais ut ilizados:

Sím bolo Fu n çã o

I ndica o início e o fim de um processam ent o.


Te r m in a dor

Processam ent o em geral.

Pr oce ssa m e n t o

I ndica a ent rada de dados at rav és do t eclado.


En t r a da
M a nu a l

I ndica um pont o no qual deverá ser efet uada


um a escolha ent r e duas sit uações possíveis.
D e cisã o

Most ra os r esult ados obt idos com um


processam ent o.
Ex ibiçã o
I ndica um docum ent o ut ilizado pelo
processam ent o, sej a para ent rada de
inform ações ou para exibição dos dados
disponíveis após um processam ent o.
D ocum e n t o

Cada sím bolo irá cont er um a descrição pert inent e a form a com o qual o
m esm o foi ut ilizado no fluxo, indicando o processam ent o ou a inform ação
que o m esm o r epr esent a.

- 16 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Re pr e se n t a çã o de a lg or it m os a t r a v é s de dia gr a m a s de b loco

Alg or it m o 0 1 : Fr it a r u m ovo

1. Pegar frigideira, ov o, óleo e sal


2. Colocar óleo na frigideira
3. Ascender o fogo
4. Colocar a frigideira no fogo
5. Esperar o óleo esquent ar
6. Quebrar o ovo na frigideira
7. Jogar a casca no lixo
8. Ret irar a frigideira do fogo quando o ov o est iver no pont o
9. Desligar o fogo
10. Colocar sal a gost o

- 17 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Alg or it m o 0 2 : Ca lcu la r a m é dia de n ot a s

1. Enquant o houver not as a serem r ecebidas:


a. Receber a not a;

2. Som e t odas as not as recebidas;


3. Divida o t ot al obt ido pela quant idade de not as r ecebidas;
4. Exiba a m édia das not as.

- 18 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 .2 . Est r ut ur a s de de cisã o e r e pe t içã o

A ut ilização de est rut ur as de decisão e r epet ição em um algorit m o per m it e a realização de


ações r elacionadas a sit uações que influenciam na ex ecução e solução do pr oblem a.

Com o foco na ut ilização da linguagem ADVPL serão ilust radas as seguint es est rut uras:

 Est r u t u r a s de de cisã o
o I F...ELSE
o DO CASE ... CASE

 Est r u t u r a s de r e pe t içã o
o WHI LE...END
o FOR...NEXT

2 .2 .1 . Est r ut ur a s de de cisã o

Os com andos de decisão são ut ilizados em algorit m os cuj a solução não é obt ida at ravés da
ut ilização de ações m eram ent e seqüenciais, perm it indo que est e avalie as condições
necessárias para opt ar por um a ou out ra m aneira de cont inuar seu fluxo.

As est rut uras de decisão que serão analisadas são:

 I F...ELSE
 D O CASE ... CASE

I F...ELSE

A est rut ura I F...ELSE ( Se/ Senão) perm it e a análise de um a condição e a part ir da qual ser
ex ecut ada um a de duas ações possíveis: se a análise da condição r esult ar em um valor
verdadeiro ou se a análise da condição r esult ar em um valor falso.

Re pr e se n t a çã o 0 1 : I F...ELSE com a çõe s p a r a a m b a s a s sit u a çõe s

Ações anteriores
...

Verdadeiro Análise da Falso


condição

Ação vinculada ao
Ação vinculada ao
resultado
resultado falso
verdadeiro

Continuação do
fluxo após a
tomada da
decisão

- 19 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Est a est rut ura perm it e ainda que sej a execut ada apenas um a ação, na sit uação em que a a
análise da condição result ar em um valor v erdadeiro.

Re pr e se n t a çã o 0 2 : I F...ELSE som e n t e com a çã o p a r a sit u a çã o ve r da de ir a

Ações anteriores
...

Análise da Falso
condição

Verdadeiro

Ação vinculada ao
resultado
verdadeiro

Continuação do
fluxo após a
tomada da
decisão

Apesar das linguagens de pr ogram ação possuírem variações para a est rut ura
I F...ELSE, conceit ualm ent e t odas as r epr esent ações podem ser descrit as com
base no m odelo apr esent ado.

A linguagem ADVPL possui um a variação para a est rut ura I F...ELSE, descrit a
com o I F...ELSEI F...ELSE.

Com est a est rut ura é possível realizar a análise de diversas condições em
seqüência, para as quais será avaliada som ent e a ação da prim eira ex pressão
cuj o análise r esult ar em um valor v erdadeiro.

- 20 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D O CASE...CASE

A est rut ura DO CASE...ENDCASE ( Caso) perm it e a análise de diversas condições consecut ivas,
para as quais som ent e a condição a prim eira condição v erdadeira será sua ação vinculada
ex ecut ada.

O r ecurso de análise de m últ iplas condições é necessário para solução de problem as m ais
com plexos, nos quais as possibilidades de solução superam a m er a análise de um único
result ado verdadeiro ou falso.

Ações anteriores
...

Falso

Análise da Verdadeiro Ação vinculada a


condição 1 condição 1

Falso

Análise da Verdadeiro Ação vinculada a


condição 2 condição 2

Falso

Análise da Verdadeiro Ação vinculada a


condição N condição N

Falso

Continuação do
fluxo após a
tomada da
decisão

Apesar das linguagens de program ação possuírem variações para a est rut ura
DO CASE...CASE, conceit ualm ent e t odas as repr esent ações podem ser
descrit as com base no m odelo apresent ado.

- 21 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 .2 .2 . Est r ut ur a s de r e pe t içã o

Os com andos de r epet ição são ut ilizados em algorit m os nas sit uações em que é necessário
realizar um a det erm inada ação ou um conj unt o de ações para um núm ero definido ou
indefinido de v ezes, ou ainda enquant o um a det erm inada condição for verdadeira.

As est rut uras de decisão que serão analisadas são:

 W H I LE...EN D
 FOR...TO...N EXT

W H I LE...EN D

Nest a est rut ura, o conj unt o de ações será execut ado enquant o a análise de um a condição de
referência result ar em um valor v erdadeiro. É im port ant e v erificar que o bloco som ent e ser á
ex ecut ado, inclusive se na prim eira análise a condição result ar em um valor v erdadeiro.

Re pr e se n t a çã o: W H I LE...EN D

Ações anteriores
...

Análise da Falso
condição

Loop Verdadeiro

Ação vinculada ao
resultado
verdadeiro

Continuação do
fluxo
...

Exist em diver sas variações para a est rut ura WHI LE...END, na qual há a
possibilidade da prim eira ex ecução ser r ealizada sem a análise da condição, a
qual valerá apenas a part ir da segunda ex ecução.

A linguagem ADVPL aceit a a sint axe DO WHI LE...ENDDO, que em out ras
linguagens represent a a sit uação descrit a ant eriorm ent e ( análise da condição
som ent e a part ir da segunda execução) , m as em ADVPL est a sint axe t em o
m esm o efeit o do WHI LE...END.

- 22 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


FOR...TO...N EXT

Nest a est rut ura, o conj unt o de ações será execut ado um a quant idade de v ezes definida,
norm alm ent e referenciada com o “ passo” .

Para cada “ passo” realizado pela est rut ura FOR...TO...NEXT, será avaliada um a condição que
verificará se foi at ingido o núm ero de ex ecuções previam ent e definido. Dest a form a a
est rut ura com preende um cont role de núm ero de “ passos” ex ecut ados, o qual é increm ent ado
na análise da expressão NEXT.

Sem elhant e a est rut ura WHI LE...END, a prim eira ação som ent e será realizada m ediant e um
result ado verdadeiro na análise da condição.

Re pr e se n t a çã o: FOR...TO...N EXT

Ações anteriores
...

Análise da Falso
condição

Verdadeiro

Ação vinculada ao
resultado
verdadeiro

Incrementa o
contador de
“passos”

Continuação do
fluxo
...

A est rut ura FOR...TO...NEXT, dependendo da linguagem de program ação,


perm it e a r ealização de um increm ent o sim ples a cada ex ecução da inst rução
NEXT, ou a adição de out ro valor ao cont ador, o qual deverá especificado de
acordo com a sint axe da linguagem .

Em ADVPL pode ser ut ilizada a inst rução “ STEPS” para alt erar o valor a ser
adicionado no cont ador de passos a cada ex ecução da inst rução NEXT, sendo
que est e valor poder á ser at é negat ivo, viabilizando um a cont agem
decrescent e.

- 23 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ÓD ULO 0 2 : A lingua ge m AD VPL
A Linguagem ADVPL t ev e seu início em 1994, sendo na v erdade um a evolução na ut ilização de
linguagens no padrão xBase pela Microsiga Soft ware S.A. ( Clipper, Visual Obj ect s e depois
FiveWin) . Com a criação da t ecnologia Prot heus, era necessário criar um a linguagem que
suport asse o padrão x Base para a m anut enção de t odo o código exist ent e do sist em a de ERP
Siga Advanced. Foi ent ão criada a linguagem cham ada Advanced Pr ot heus Language.

O ADVPL é um a ext ensão do padrão x Base de com andos e funções, operador es, est rut uras de
cont r ole de fluxo e palavras reservadas, cont ando t am bém com funções e com andos
disponibilizados pela Microsiga que a t orna um a linguagem com plet a para a criação de
aplicações ERP pront as para a I nt ernet . Tam bém é um a linguagem orient ada a obj et os e
ev ent os, perm it indo ao program ador desenv olver aplicações visuais e criar suas próprias
classes de obj et os.

Quando com pilados, t odos os arquivos de código t ornam - se unidades de int eligência básicas,
cham ados APO´ s ( de Advanced Prot heus Obj ect s) . Tais APO´ s são m ant idos em um
reposit ório e car regados dinam icam ent e pelo PROTHEUS Ser ver para a execução. Com o não
exist e a linkedição, ou união física do código com pilado a um det erm inado m ódulo ou
aplicação, funções criadas em ADVPL podem ser ex ecut adas em qualquer pont o do am bient e
Advanced Pr ot heus.

O com pilador e o int erpret ador da linguagem ADVPL é o própr io ser vidor PROTHEUS
( PROTHEUS Ser ver) , e exist e um am bient e visual para desenvolvim ent o int egrado
( PROTHEUSI DE) onde o código pode ser criado, com pilado e depurado.

Os program as em ADVPL podem cont er com andos ou funções de int er face com o usuário. De
acordo com t al caract eríst ica, t ais program as são subdivididos nas seguint es cat egorias:

Pr ogr a m a çã o Com I n t e r f a ce Pr óp r ia com o Usu á r io

Nest a cat egoria ent ram os pr ogram as desenvolvidos para serem ex ecut ados at rav és do
t erm inal rem ot o do Prot heus, o Pr ot heus Rem ot e. O Pr ot heus Rem ot e é a aplicação
encar r egada da int erface e da int eração com o usuário, sendo que t odo o pr ocessam ent o do
código em ADVPL, o acesso ao banco de dados e o gerenciam ent o de conexões é efet uado no
Prot heus Ser ver. O Pr ot heus Rem ot e é o principal m eio de acesso a execução de r ot inas
escrit as em ADVPL no Prot heus Serv er, e por isso perm it e ex ecut ar qualquer t ipo de código,
t enha ele int erface com o usuário ou não. Por ém nest a cat egoria são considerados apenas os
program as que realizem algum t ipo de int erface r em ot a ut ilizando o prot ocolo de com unicação
do Prot heus.

Podem - se criar r ot inas para a cust om ização do sist em a ERP Micr osiga Prot heus, desde
processos adicionais at é m esm o relat órios. A grande v ant agem é apr ov eit ar t odo o am bient e
m ont ado pelos m ódulos do ERP Microsiga Prot heus. Por ém , com o ADVPL é possível at é
m esm o criar t oda um a aplicação, ou m ódulo, do com eço.

Todo o código do sist em a ERP Microsiga Prot heus é escrit o em ADVPL.

Pr ogr a m a çã o Se m I n t e r f a ce Pr óp r ia com o Usu á r io

As rot inas criadas sem int erface são consideradas nest a cat egoria porque geralm ent e t êm um a
ut ilização m ais específica do que um processo adicional ou um relat ório nov o. Tais rot inas não
t êm int erface com o usuário at rav és do Pr ot heus Rem ot e, e qualquer t ent at iva nesse sent ido

- 24 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


( com o a criação de um a j anela padrão) ocasionará um a exceção em t em po de execução. Est as
rot inas são apenas processos, ou Jobs, execut ados no Pr ot heus Ser ver. Algum as vezes, a
int erface dest as rot inas fica a cargo de aplicações ext ernas, desenvolvidas em out ras
linguagens, que são responsáv eis por iniciar os pr ocessos no ser vidor Pr ot heus at ravés dos
m eios disponíveis de int egração e conect ividade no Prot heus.

De acordo com a ut ilização e com o m eio de conect ividade ut ilizado, est as rot inas são
subcat egorizadas assim :

 Pr ogr a m a çã o por Pr oce ssos

Rot inas escrit as em ADVPL podem ser iniciadas com o pr ocessos individuais ( sem int erface) no
Prot heus Serv er at rav és de duas m aneiras: I niciadas por out ra r ot ina ADVPL at rav és da
cham ada de funções com o St art Job( ) ou CallProc( ) ou iniciadas aut om at icam ent e na
inicialização do Pr ot heus Serv er ( quando pr opriam ent e configurado) .

 Pr ogr a m a çã o de RPC

At ravés de um a bibliot eca de funções disponível no Prot heus ( um a API de com unicação) ,
podem - se execut ar r ot inas escrit as em ADVPL diret am ent e no Prot heus Serv er, at r avés de
aplicações ext ernas escrit as em out ras linguagens. I st o é o que se cham a de RPC ( de Rem ot e
Procedure Call, ou Cham ada de Pr ocedim ent os Rem ot a) .

O servidor Prot heus t am bém pode ex ecut ar r ot inas em ADVPL em out ros servidores Pr ot heus
at ravés de conexão TCP/ I P dir et a ut ilizando o conceit o de RPC. Do m esm o m odo, aplicações
ext ernas podem r equisit ar a execução de r ot inas escrit as em ADVPL at rav és de conexão
TCP/ I P diret a.
Program ação Web

O Pr ot heus Ser ver pode t am bém ser ex ecut ado com o um servidor Web, r espondendo a
requisições HTTP. No m om ent o dest as r equisições, pode ex ecut ar r ot inas escrit as em ADVPL
com o pr ocessos individuais, enviando o result ado das funções com o ret orno das requisições
para o client e HTTP ( com o por exem plo, um Br owser de I nt ernet ) . Qualquer rot ina escrit a em
ADVPL que não cont enha com andos de int erface pode ser ex ecut ada at rav és de r equisições
HTTP. O Pr ot heus perm it e a com pilação de arquivos HTML cont endo código ADVPL em but ido.
São os cham ados arquivos ADVPL ASP, para a criação de páginas dinâm icas.

 Pr ogr a m a çã o Te lN e t

TelNet é part e da gam a de pr ot ocolos TCP/ I P que perm it e a conexão a um com put ador rem ot o
at ravés de um a aplicação client e dest e pr ot ocolo. O PROTHEUS Ser ver pode em ular um
t erm inal TelNet , at ravés da execução de r ot inas escrit as em ADVPL. Ou sej a, pode- se escrever
rot inas ADVPL cuj a int erface final será um t erm inal TelNet ou um colet or de dados m óv el.

- 25 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 . Est r ut ur a de um Pr ogr a m a AD VPL

Um program a de com put ador nada m ais é do que um grupo de com andos logicam ent e
dispost os com o obj et ivo de ex ecut ar det erm inada t arefa. Esses com andos são gravados em
um arquivo t ext o que é t ransform ado em um a linguagem ex ecut ável por um com put ador
at ravés de um pr ocesso cham ado com pilação. A com pilação subst it ui os com andos de alt o
nível ( que os hum anos com pr eendem ) por inst ruções de baixo nível ( com preendida pelo
sist em a operacional em execução no com put ador) . No caso do ADVPL, não é o sist em a
operacional de um com put ador que irá execut ar o código com pilado, m as sim o Prot heus
Ser ver.

Dent r o de um program a, os com andos e funções ut ilizados devem seguir regras de sint axe da
linguagem ut ilizada, pois caso cont rário o pr ogram a será int errom pido por er ros. Os er ros
podem ser de com pilação ou de ex ecução.

Er ros de com pilação são aqueles encont rados na sint axe que não per m it em que o arquivo de
código do program a sej a com pilado. Podem ser com andos especificados de form a err ônea,
ut ilização inválida de operador es, et c.

Er ros de execução são aqueles que acont ecem depois da com pilação, quando o program a est á
sendo ex ecut ado. Podem ocor rer por inúm eras razões, m as geralm ent e se refer em as funções
não exist ent es, ou variáveis não criadas ou inicializadas, et c.

Lin h a s d e Pr ogr a m a

As linhas exist ent es dent ro de um arquivo t ex t o de código de program a podem ser linhas de
com ando, linhas de com ent ário ou linhas m ist as.

 Lin h a s d e Com a n do

Linhas de com ando possuem os com andos ou inst ruções que serão ex ecut adas. Por ex em plo:

Local nCnt
Local nSom a : = 0
For nCnt : = 1 To 10
nSom a + = nCnt
Next nCnt

 Lin h a s d e Com e n t á r io

Linhas de com ent ário possuem um t ext o qualquer, m as não são ex ecut adas. Serv em apenas
para docum ent ação e para t ornar m ais fácil o ent endim ent o do pr ogram a. Exist em t r ês form as
de se com ent ar linhas de t ext o. A prim eira delas é ut ilizar o sinal de * ( ast erisco) no com eço
da linha:

* Pr ogram a para cálculo do t ot al


* Aut or: Micr osiga Soft ware S.A.
* Dat a: 2 de out ubr o de 2001

- 26 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Todas as linhas iniciadas com um sinal de ast erisco são consideradas com o com ent ário. Pode-
se ut ilizar a palavra NOTE ou dois sím bolos da let ra " e" com er cial ( &&) para r ealizar a função
do sinal de ast erisco. Por ém t odas est as for m as de com ent ário de linhas são obsolet as e
exist em apenas para com pat ibilização com o padrão xBase. A m elhor m aneira de com ent ar
linhas em ADVPL é ut ilizar duas barr as t ransv er sais:

/ / Program a para cálculo do t ot al


/ / Aut or: Micr osiga Soft ware S.A.
/ / Dat a: 2 de out ubro de 2001

Out ra form a de docum ent ar t ext os é ut ilizar as barras t ransversais j unt am ent e com o
ast erisco, podendo- se com ent ar t odo um bloco de t ext o sem pr ecisar com ent ar linha a linha:

/*
Program a para cálculo do t ot al
Aut or: Micr osiga Soft ware S.A.
Dat a: 2 de out ubro de 2001
*/

Todo o t ext o encont rado ent r e a abert ura ( indicada pelos caract er es / * ) e o fecham ent o
( indicada pelos caract er es * / ) é considerado com o com ent ário.

 Lin h a s M ist a s

O ADVPL t am bém per m it e que exist am linhas de com ando com com ent ário. I st o é possív el
adicionando- se as duas barras t ransv er sais ( / / ) ao final da linha de com ando e adicionando- se
o t ext o do com ent ário:

Local nCnt
Local nSom a : = 0 / / I nicializa a variável com zer o para a som a
For nCnt : = 1 To 10
nSom a + = nCnt
Next nCnt

 Ta m a n h o d a Lin h a

Assim com o a linha física, delim it ada pela quant idade de caract er es que pode ser digit ado no
edit or de t ext os ut ilizado, exist e um a linha considerada linha lógica. A linha lógica, é aquela
considerada para a com pilação com o um a única linha de com ando.

A princípio, cada linha digit ada no arquivo t ext o é diferenciada após o pressionam ent o da t ecla
< Ent er> . Ou sej a, a linha lógica, é a linha física no arquivo. Por ém algum as vezes, por
lim it ação física do edit or de t ext o ou por est ét ica, pode- se " quebrar" a linha lógica em m ais de
um a linha física no arquivo t ext o. I st o é efet uado ut ilizando- se o sinal de pont o- e- vírgula ( ; ) .

I f ! Em pt y( cNom e) .And. ! Em pt y( cEnd) .And. ; < ent er >


! Em pt y( cTel) .And. ! Em pt y( cFax) .And. ; < ent er>
! Em pt y( cEm ail)

GravaDados( cNom e,cEnd,cTel,cFax,cEm ail)

Endif

- 27 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Nest e exem plo exist e um a linha de com ando para a checagem das v ar iáveis ut ilizadas. Com o a
linha t orna- se m uit o grande, pode- se dividi- la em m ais de um a linha física ut ilizando o sinal de
pont o- e- vírgula. Se um sinal de pont o- e- vír gula for esquecido nas duas prim eiras linhas,
durant e a ex ecução do program a ocor rerá um err o, pois a segunda linha física será
considerada com o um a segunda linha de com ando na com pilação. E durant e a ex ecução est a
linha não t erá sent ido.

3 .1 . Ár e a s de um Pr ogr a m a AD VPL

Apesar de não ser um a linguagem de padr ões rígidos com relação à est rut ura do program a, é
im port ant e ident ificar algum as de suas part es. Consider e o pr ogram a de ex em plo abaixo:

# include prot heus.ch

/*
+===========================================+
| Pr ogram a: Cálculo do Fat orial |
| Aut or : Micr osiga Soft ware S.A. |
| Dat a : 02 de out ubr o de 2001 |
+===========================================+
*/

User Funct ion CalcFat or ( )

Local nCnt
Local nResult ado : = 1 / / Result ado do fat orial
Local nFat or : = 5 / / Núm er o para o cálculo

/ / Cálculo do fat orial


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

/ / Exibe o r esult ado na t ela, at rav és da função alert


Alert ( " O fat orial de " + cValToChar( nFat or) + ;
" é " + cValToChar( nResult ado) )

/ / Term ina o pr ogram a


Ret urn

A est rut ura de um pr ogr am a ADVPL é com post a pelas seguint es áreas:

 Área de I dent ificação


 Declaração dos includes
 Declaração da função
 I dent ificação do pr ogr am a

 Área de Aj ust es I niciais


 Declaração das variáveis

 Corpo do Program a
 Preparação para o processam ent o
 Processam ent o

 Área de Encer ram ent o

- 28 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ár e a de I d e n t ifica çã o

Est a é um a área que não é obrigat ória e é dedicada a docum ent ação do program a. Quando
exist ent e, cont ém apenas com ent ários explicando a sua finalidade, dat a de criação, aut or , et c.,
e aparece no com eço do program a, ant es de qualquer linha de com ando.

O form at o para est a área não é definido. Pode- se colocar qualquer t ipo de inform ação
desej ada e escolher a form at ação apr opriada.

# include “ prot heus.ch”

/*
+==========================================+
| Pr ogram a: Cálculo do Fat orial |
| Aut or : Micr osiga Soft ware S.A. |
| Dat a : 02 de out ubr o de 2001 |
+==========================================+
*/

User Funct ion CalcFat or ( )

Opcionalm ent e podem - se incluir definições de const ant es ut ilizadas no program a ou inclusão
de arquivos de cabeçalho nest a ár ea.

Ár e a de Aj u st e s I n icia is

Nest a área geralm ent e se fazem os aj ust es iniciais, im port ant es para o cor ret o funcionam ent o
do program a. Ent re os aj ust es se encont ram declarações de variáveis, inicializações, abert ura
de arquivos, et c. Apesar do ADVPL não ser um a linguagem rígida e as variáveis poderem ser
declaradas em qualquer lugar do program a, é aconselhável fazê- lo nest a área visando t ornar o
código m ais legível e facilit ar a ident ificação de variáveis não ut ilizadas.

Local nCnt
Local nResult ado : = 0 / / Result ado do fat orial
Local nFat or : = 10 / / Núm ero para o cálculo

Cor po do Pr ogr a m a

É nest a ár ea que se encont ram as linhas de código do pr ogram a. É onde se realiza a t arefa
necessária at rav és da organização lógica dest as linhas de com ando. Espera- se que as linhas de
com ando est ej am organizadas de t al m odo que no final dest a área o result ado esperado sej a
obt ido, sej a ele arm azenado em um arquivo ou em variáveis de m em ória, pront o par a ser
exibido ao usuário at rav és de um r elat ório ou na t ela.

/ / Cálculo do fat orial


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

- 29 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A preparação para o pr ocessam ent o é form ada pelo conj unt o de validações e processam ent os
necessários ant es da r ealização do pr ocessam ent o em si.

Avaliando o processam ent o do cálculo do fat orial descrit o ant eriorm ent e, pode- se definir que a
validação inicial a ser r ealizada é o cont eúdo da variável nFat or, pois a m esm a det erm inará a
corr et a ex ecução do código.

/ / Cálculo do fat orial


nFat or : = Get Fat or( )
/ / Get Fat or – função ilust rat iva na qual a variável recebe a inform ação do usuário.

I f nFat or < = 0
Alert ( “ I nform ação inválida” )
Ret urn
Endif

For nCnt : = nFat or To 1 St ep - 1


nResult ado * = nCnt
Next nCnt

Ár e a de En ce r r a m e n t o

É nest a área onde as finalizações são efet uadas. É onde os arquivos abert os são fechados, e o
result ado da ex ecução do pr ogr am a é ut ilizado. Pode- se exibir o r esult ado arm azenado em
um a variável ou em um arquivo ou sim plesm ent e finalizar, caso a t arefa j á t enha sido t oda
com plet ada no corpo do program a. É nest a área que se encont r a o encerram ent o do
program a. Todo program a em ADVPL dev e sem pre t erm inar com a palavra chave r et urn.

/ / Exibe o r esult ado na t ela, at rav és da função alert


Alert ( " O fat orial de " + cValToChar( nFat or) + ;
" é " + cValToChar( nResult ado) )

/ / Term ina o pr ogram a


Ret urn

- 30 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 . D e cla r a çã o e At r ibuiçã o de Va r iá ve is

4 .1 . Tipo de D a dos

O ADVPL não é um a linguagem de t ipos rígidos ( st rongly t yped) , o que significa que variáveis
de m em ória podem r eceber difer ent es t ipos de dados durant e a execução do program a.

As variáveis podem t am bém cont er obj et os, m as os t ipos prim ários da linguagem são:

N u m é r ico

O ADVPL não difer encia valores int eiros de v alores com pont o flut uant e, port ant o podem - se
criar variáveis num éricas com qualquer valor dent ro do int ervalo perm it ido. Os seguint es
elem ent os são do t ipo de dado num érico:

2
43.53
0.5
0.00001
1000000

Um a variável do t ipo de dado num érico pode cont er um núm er o de dezoit o dígit os incluindo o
pont o flut uant e, no int ervalo de 2.2250738585072014 E–308 at é 1.7976931348623158
E+ 308.

Lógico

Valores lógicos em ADVPL são ident ificados at r avés de .T. ou .Y. para verdadeiro e .F. ou .N.
para falso ( independent em ent e se os caract er es est iver em em m aiúsculo ou m inúsculo) .

Ca r a ct e r e

St rings ou cadeias de caract er es são ident ificadas em ADVPL por blocos de t ext o ent r e aspas
duplas ( " ) ou aspas sim ples ( ') :

" Olá m undo! "


'Est a é um a st ring'
" Est a é 'out ra' st ring"

Um a variável do t ipo caract er e pode cont er st rings com no m áxim o 1 MB, ou sej a, 1048576
caract eres.

Data

O ADVPL t em um t ipo de dados específico para dat as. I nt ernam ent e as variáveis dest e t ipo de
dado são arm azenadas com o um núm ero cor respondent e a d a t a Ju lia n a .

Variáveis do t ipo de dados Dat a não podem ser declaradas diret am ent e, e sim at rav és da
ut ilização de funções específicas com o por ex em plo CTOD( ) que convert e um a st ring para
dat a.

- 31 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ar r a y

O Ar ray é um t ipo de dado especial. É a disposição de out r os elem ent os em colunas e linhas. O
ADVPL suport a ar ray s unidim ensionais ( vet or es) ou m ult idim ensionais ( m at rizes) . Os
elem ent os de um arr ay são acessados at r avés de índices num éricos iniciados em 1,
ident ificando a linha e coluna para quant as dim ensões exist irem .

Array s dev em ser ut ilizadas com caut ela, pois se forem m uit o grandes podem exaurir a
m em ória do servidor.

Bloco d e Código

O bloco de código é um t ipo de dado especial. É ut ilizado para arm azenar inst ruções escrit as
em ADVPL que poderão ser ex ecut adas post eriorm ent e.

4 .2 . D e cla r a çã o de va r iá ve is

Variáveis de m em ória são um dos r ecursos m ais im port ant es de um a linguagem . São ár eas de
m em ória criadas para arm azenar inform ações ut ilizadas por um progr am a para a execução de
t arefas. Por ex em plo, quando o usuário digit a um a inform ação qualquer , com o o nom e de um
produt o, em um a t ela de um program a est a inform ação é arm azenada em um a variável de
m em ória para post erior m ent e ser gravada ou im pressa.

A part ir do m om ent o que um a variável é criada, não é necessário m ais se r efer enciar ao seu
cont eúdo, e sim ao seu nom e.

O nom e de um a variáv el é um ident ificador único o qual deve r espeit ar um m á x im o de 1 0


ca r a ct e r e s. O ADVPL não im pede a criação de um a variável de m em ór ia cuj o nom e cont enha
m ais de 10 caract er es, por é m a p e n a s os 1 0 pr im e ir os se r ã o con side r a d os para a
localização do cont eúdo arm azenado.

Port ant o se forem criadas duas v ariáveis cuj os 10 prim eiros car act er es for em iguais, com o
nTot alGeralAnual e nTot alGeralMensal, as refer ências a qualquer um a delas no pr ogram a
result arão o m esm o, ou sej a, serão a m esm a v ariável:

nTot alGeralMensal : = 100


nTot alGeralAnual : = 300
Alert ( " Valor m ensal: " + cValToChar( nTot alGeralMensal) )

Quando o cont eúdo da variável nTot alGeralMensal é exibido, o seu v alor será de 300. I sso
acont ece porque no m om ent o que esse valor foi at ribuído à variável nTot alGeralAnual, o
ADVPL consider ou apenas os 10 prim eiros caract er es ( assim com o o faz quando dev e exibir o
valor da variável nTot alGeralMensal) , ou sej a, consider ou- as com o a m esm a v ariável. Assim o
valor original de 100 foi subst it uído pelo de 300.

- 32 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 .3 . Escopo de va r iá ve is

O ADVPL não é um a linguagem de t ipos rígidos para variáveis, ou sej a, não é necessário
inform ar o t ipo de dados que det erm inada variável irá cont er no m om ent o de sua declaração,
e o seu valor pode m udar durant e a ex ecução do pr ogram a.

Tam bém não há necessidade de declarar variáveis em um a seção específica do seu código
font e, em bora sej a aconselhável declarar t odas as variáveis necessárias no com eço, t ornando
a m anut enção m ais fácil e evit ando a declaração de variáveis desnecessárias.

Para declarar um a variável dev e- se ut ilizar um ident ificador de escopo. Um ident ificador de
escopo é um a palavra chave que indica a que cont ext o do pr ogram a a variável declarada
pert ence. O cont ext o de variáveis pode ser local ( visualizadas apenas dent r o do pr ogram a
at ual) , público ( visualizadas por qualquer out ro program a) , ent r e out r os.

O Con t e x t o d e Va r iá v e is de n t r o de u m Pr ogr a m a

As variáveis declaradas em um program a ou função, são visíveis de acordo com o escopo onde
são definidas. Com o t am bém do escopo depende o t em po de exist ência das variáveis. A
definição do escopo de um a variável é efet uada no m om ent o de sua declaração.

Local nNum ero : = 10

Est a linha de código declara um a variável cham ada nNum ero indicando que pert ence seu
escopo é local.

Os ident ificador es de escopo são:

 Local
 St at ic
 Privat e
 Public

O ADVPL não é rígido em relação à declaração de variáveis no com eço do program a. A inclusão
de um ident ificador de escopo não é necessário para a declaração de um a variável, cont ant o
que um valor lhe sej a at ribuído.

nNum er o2 : = 15

Quando um valor é at r ibuído à um a variável em um program a ou função, o ADVPL criará a


variável caso ela não t enha sido declarada ant eriorm ent e. A variável ent ão é criada com o se
t ivesse sido declarada com o Privat e.

Devido a essa caract eríst ica, quando se pret ende fazer um a at ribuição a um a variável
declarada pr eviam ent e m as escr ev e- se o nom e da variável de form a incorr et a, o ADVPL não
gerará nenhum err o de com pilação ou de ex ecução. Pois com pr eenderá o nom e da variável
escrit o de form a incorr et a com o se fosse a criação de um a nova variável. I st o alt erará a lógica
do pr ogram a, e é um er ro m uit as vezes difícil de ident ificar.

- 33 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Va r iá ve is de e scopo loca l

Variáveis de escopo local são pert encent es apenas ao escopo da função onde foram declaradas
e devem ser explicit am ent e declaradas com o ident ificador LOCAL, com o no exem plo:

Fu n ct ion Pa i( )
Local nVar : = 10, aMat r iz : = { 0,1,2,3}
.
< com andos>
.
Filha( )
.
< m ais com andos>
.
Ret urn( .T.)

Nest e ex em plo, a variável nVar foi declarada com o local e at ribuída com o valor 10. Quando a
função Filha é execut ada, nVar ainda exist e m as não pode ser acessada. Quando a execução
da função Pai t erm inar, a variável nVar é dest r uída. Qualquer variável com o m esm o nom e no
program a que cham ou a função Pai não é afet ada.

Variáveis de escopo local são criadas aut om at icam ent e cada vez que a função onde for em
declaradas for at ivada. Elas cont inuam a exist ir e m ant êm seu valor at é o fim da at ivação da
função ( ou sej a, at é que a função r et orne o cont role para o código que a execut ou) . Se um a
função é cham ada r ecursivam ent e ( por ex em plo, cham a a si m esm a) , cada cham ada em
recursão cria um nov o conj unt o de variáveis locais.

A visibilidade de variáv eis de escopo locais é idênt ica ao escopo de sua declaração, ou sej a, a
variável é visível em qualquer lugar do código font e em que foi declarada. Se um a função é
cham ada r ecursivam ent e, apenas as variáveis de escopo local criadas na m ais r ecent e at ivação
são visíveis.

Va r iá ve is de e scopo st a t ic

Variáveis de escopo st at ic funcionam basicam ent e com o as variáveis de escopo local, m as


m ant êm seu valor at rav és da ex ecução e dev em ser declaradas explicit am ent e no código com
o ident ificador STATI C.

O escopo das variáveis st at ic depende de onde são declaradas. Se for em declaradas dent r o do
corpo de um a função ou procedim ent o, seu escopo será lim it ado àquela rot ina. Se forem
declaradas for a do corpo de qualquer rot ina, seu escopo afet a a t odas as funções declaradas
no font e.

- 34 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Nest e ex em plo, a variável nVar é declarada com o st at ic e inicializada com o valor 10:

Fu n ct ion Pa i( )
St at ic nVar : = 10
.
< com andos>
.
Filha( )
.
< m ais com andos>
.
Re t u r n ( .T.)

Quando a função Filha é ex ecut ada, nVar ainda exist e m as não pode ser acessada. Difer ent e
de variáveis declaradas com o LOCAL ou PRI VATE, nVar cont inua a exist ir e m ant êm seu valor
at ual quando a execução da função Pai t erm ina. Ent ret ant o, som ent e pode ser acessada por
ex ecuções subseqüent es da função Pai.

Va r iá ve is de e scopo p r iv a t e

A declaração é opcional para variáveis privadas. Mas podem ser declaradas explicit am ent e com
o ident ificador PRI VATE.

Adicionalm ent e, a at ribuição de valor a um a variável não criada ant eriorm ent e
aut om at icam ent e cria a variável com o privada. Um a vez criada, um a variável privada cont inua
a exist ir e m ant ém seu valor at é que o program a ou função onde foi criada t erm ine ( ou sej a,
at é que a função onde foi criada ret orne para o código que a execut ou) . Nest e m om ent o, é
aut om at icam ent e dest r uída.

É possível criar um a nova variável privada com o m esm o nom e de um a variável j á exist ent e.
Ent ret ant o, a nova ( duplicada) variável pode apenas ser criada em um nível de at ivação
inferior ao nível onde a variável foi declarada pela prim eira vez ( ou sej a, apenas em um a
função cham ada pela função onde a variável j á havia sido criada) . A nova variável privada irá
esconder qualquer out r a variável privada ou pública ( vej a a docum ent ação sobr e variáveis
públicas) com o m esm o nom e enquant o exist ir.

Um a vez criada, um a variável privada é visível em t odo o pr ogr am a enquant o não for
dest ruída aut om at icam ent e quando a rot ina que a criou t erm inar ou um a out ra variável
privada com o m esm o nom e for criada em um a subfunção cham ada ( nest e caso, a variável
exist ent e t orna- se inacessível at é que a nova variável privada sej a dest r uída) .
Em t erm os m ais sim ples, um a variável privada é visível dent ro da função de criação e t odas as
funções cham adas por est a, a m enos que um a função cham ada crie sua pr ópria variável
privada com o m esm o nom e.

- 35 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Por e x e m p lo:

Fu n ct ion Pa i( )
Privat e nVar : = 10
< com andos>
.
Filha( )
< m ais com andos>
.
Re t u r n ( .T.)

Nest e ex em plo, a variável nVar é criada com escopo privat e e inicializada com o valor 10.
Quando a função Filha é execut ada, nVar ainda exist e e, diferent e de um a variável de escopo
local, pode ser acessada pela função Filha. Quando a função Pai t erm inar, nVar será dest ruída
e qualquer declaração de nVar ant erior se t ornará acessível novam ent e.

No am bient e ERP Pr ot heus, exist e um a convenção adicional a qual deve ser


respeit ada que variáveis em uso pela aplicação não sej am incorr et am ent e
m anipuladas. Por est a conv enção deve ser adicionado o caract er “ _” ant es
do nom e de variáveis PRI VATE e PUBLI C. Maiores inform ações avaliar o
t ópico: Boas Prát icas de Pr ogram ação.

Ex e m plo: Privat e _dDat a

Va r iá ve is de e scopo p u blic

Podem - se criar variáv eis de escopo public dinam icam ent e no código com o ident ificador
PUBLI C. As variáveis dest e escopo cont inuam a exist ir e m ant êm seu valor at é o fim da
ex ecução da t hread ( conexão) .

É possível criar um a variável de escopo privat e com o m esm o nom e de um a variável de escopo
public exist ent e, ent r et ant o, não é perm it ido criar um a variável de escopo public com o m esm o
nom e de um a variável de escopo privat e exist ent e.

Um a vez criada, um a variável de escopo public é visível em t odo o program a onde foi
declarada at é que sej a escondida por um a variável de escopo privat e criada com o m esm o
nom e. A nova variável de escopo privat e criada esconde a variável de escopo public exist ent e,
e est a se t ornará inacessível at é que a nova var iável privat e sej a dest ruída. Por ex em plo:

Fu n ct ion Pa i( )
Public nVar : = 10
< com andos>
.
Filha( )
< m ais com andos>
.
Re t u r n ( .T.)

- 36 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Nest e ex em plo, nVar é criada com o public e inicializada com o valor 10. Quando a função Filha
é execut ada, nVar ainda exist e e pode ser acessada. Difer ent e de variáveis locais ou privat es,
nVar ainda exist e após o t érm ino da a ex ecução da função Pai.

Diferent em ent e dos out ros ident ificadores de escopo, quando um a var iável é declarada com o
pública sem ser inicializada, o valor assum ido é falso ( .F.) e não nulo ( nil) .

No am bient e ERP Pr ot heus, exist e um a convenção adicional a qual deve ser


respeit ada que variáveis em uso pela aplicação não sej am incorr et am ent e
m anipuladas. Por est a conv enção deve ser adicionado o caract er “ _” ant es
do nom e de variáveis PRI VATE e PUBLI C. Maiores inform ações avaliar o
t ópico: Boas Prát icas de Pr ogram ação.

Ex e m plo: Public _cRot ina

4 .4 . Ent e nde ndo a influê ncia do e scopo da s va r iá ve is

Consider e as linhas de código de ex em plo:

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

Se est a linha for ex ecut ada em um program a ADVPL, ocorr erá um err o de execução com a
m ensagem " variable does not exist : nPercent ual" , pois est a variável est á sendo ut ilizada em
um a expr essão de cálculo sem t er sido declarada. Para solucionar est e er ro, dev e- se declarar a
variável previam ent e:

Local nPercent ual, nResult ado


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

Nest e exem plo, as variáveis são declaradas pr eviam ent e ut ilizando o ident ificador de escopo
local. Quando a linha de cálculo for execut ada, o er ro de variável não exist ent e, não m ais
ocor rerá. Por ém variáveis não inicializadas t êm sem pr e o valor default nulo ( Nil) e est e valor
não pode ser ut ilizado em um cálculo pois t am bém gerará err os de ex ecução ( nulo não pode
ser dividido por 100) . A resolução dest e pr oblem a é efet uada inicializando- se a variável
at ravés de um a das for m as:

Local nPercent ual, nResult ado


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

ou

Local nPercent ual : = 10, nResult ado


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

A diferença ent re o últ im o exem plo e os dois ant erior es é que a variável é inicializada no
m om ent o da declaração. Em am bos os ex em plos, a variável é prim eiro declarada e ent ão
inicializada em um a out ra linha de código.

- 37 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


É aconselhável opt ar pelo operador de at ribuição com post o de dois pont os e sinal de igual, pois
o operador de at ribuição ut ilizando som ent e o sinal de igual pode ser facilm ent e confundido
com o operador r elacional ( para com paração) durant e a criação do program a.

4 .5 . Ope r a çõe s com Va r iá ve is

4 .5 .1 . At r ibuiçã o de va r iá ve is

Um a vez que um valor lhe sej a at ribuído, o t ipo de dado de um a variável é igual ao t ipo de
dado do valor at ribuído. Ou sej a, um a variável passa a ser num érica se um núm er o lhe é
at ribuído, passa a ser caract ere se um a st ring de t ext o lhe for at ribuída, et c. Por ém m esm o
que um a variável sej a de det erm inado t ipo de dado, pode- se m udar o t ipo da variável
at ribuindo out ro t ipo a ela:

01 Local xVariavel / / Declara a variável inicialm ent e com valor nulo


02
03 xVariavel : = " Agora a variável é caract er e..."
04 Alert ( " Valor do Text o: " + xVariavel)
05
06 xVariavel : = 22 / / Agora a variável é num ér ica
07 Alert ( cValToChar( xVariavel) )
08
09 xVariavel : = .T. / / Agora a variável é lógica
10 I f xVariavel
11 Alert ( " A variável t em valor v erdadeiro..." )
12 Else
13 Alert ( " A variável t em valor falso..." )
14 Endif
15
16 xVariavel : = Dat e( ) / / Agora a variável é dat a
17 Alert ( " Hoj e é: " + Dt oC( xVariavel) )
18
19 xVariavel : = nil / / Nulo novam ent e
20 Alert ( " Valor nulo: " + xVariavel)
21
22 Ret urn

No program a de ex em plo ant erior, a variável xVariavel é ut ilizada para arm azenar diver sos
t ipos de dados. A let ra " x" em m inúsculo no com eço do nom e é ut ilizada para indicar um a
variável que pode cont er diversos t ipos de dados, segundo a Not ação Húngara ( consult e
docum ent ação específica para det alhes) . Est e program a t r oca os valores da variável e exibe
seu cont eúdo para o usuário at rav és da função ALERT( ) . Essa função r ecebe um parâm et r o
que dev e ser do t ipo st ring de caract ere, por isso dependendo do t ipo de dado da variáv el
xVariavel é necessário fazer um a conversão ant es.

Apesar dessa flexibilidade de ut ilização de variáveis, devem - se t om ar cuidados na passagem


de parâm et r os para funções ou com andos, e na concat enação ( ou som a) de valor es. Not e a
linha 20 do program a de ex em plo. Quando est a linha é ex ecut ada, a v ariável xVariavel cont ém
o valor nulo. A t ent at iva de som a de t ipos de dados difer ent es ger a er r o de ex ecução do
program a. Nest a linha do exem plo, ocorr er á um err o com a m ensagem " t ype m ism at ch on + " .

Excet uando- se o caso do valor nulo, para os dem ais dev em ser ut ilizadas funções de
conv er são quando é necessário concat enar t ipos de dados difer ent es ( por ex em plo, nas linhas
07 e 17.

- 38 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Not e t am bém que quando um a variável é do t ipo de dado lógico, ela pode ser ut ilizada
diret am ent e para checagem ( linha 10) :

I f xVariavel
é o m esm o que
I f xVariavel = .T.

4 .5 .2 . Ope r a dor e s da lin gua ge m AD VPL

Ope r a dor e s com u n s

Na docum ent ação sobr e variáveis há um a breve dem onst ração de com o at ribuir valores a um a
variável da form a m ais sim ples. O ADVPL am plia significat ivam ent e a ut ilização de variáveis
at ravés do uso de expr essões e funções.

Um a expressão é um conj unt o de operadores e oper andos cuj o r esult ado pode ser at ribuído a
um a variável ou ent ão analisado para a t om ada de decisões. Por ex em plo:

Local nSalario : = 1000, nDescont o : = 0.10


Local nAum ent o, nSalLiquido
nAum ent o : = nSalario * 1.20
nSalLiquido : = nAum ent o * ( 1- nDescont o)

Nest e ex em plo são ut ilizadas algum as expr essões para calcular o salário líquido após um
aum ent o. Os operandos de um a expr essão podem ser um a variável, um a const ant e, um
cam po de arquivo ou um a função.

Ope r a dor e s M a t e m á t icos

Os operador es ut ilizados em ADVPL para cálculos m at em át icos são:

+ Adição
- Subt ração
* Mult iplicação
/ Divisão
* * ou ^ Exponenciação
% Módulo ( Rest o da Divisão)

Ope r a dor e s de St r in g

Os operador es ut ilizados em ADVPL para t rat am ent o de caract eres são:

+ Concat enação de st rings ( união)


- Concat enação de st rings com elim inação dos brancos finais das st rings
int erm ediárias
$ Com paração de Subst rings ( cont ido em )

- 39 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ope r a dor e s Re la cion a is

Os operador es ut ilizados em ADVPL para operações e avaliações r elacionais são:

< Com paração Menor


> Com paração Maior
= Com paração I gual
== Com paração Exat am ent e I gual ( para caract er es)
<= Com paração Menor ou I gual
>= Com paração Maior ou I gual
< > ou # Com paração Difer ent e
ou !=

Ope r a dor e s Lóg icos

Os operador es ut ilizados em ADVPL para operações e avaliações lógicas são:

.An d . E lógico
.Or . OU lógico
.N ot . ou ! NÃO lógico

Ope r a dor e s de At r ibu içã o

Os operador es ut ilizados em ADVPL para at ribuição de valores a variáveis de m em ória são:

:= At ribuição Sim ples


+= Adição e At ribuição em Linha
-= Subt ração e At ribuição em Linha
*= Mult iplicação e At ribuição em Linha
/ = Divisão e At ribuição em Linha
**= ou Exponenciação e At ribuição em Linha
^=
%= Módulo ( rest o da divisão) e At ribuição em Linha

 At r ibu içã o Sim p le s

O sinal de igualdade é ut ilizado para at ribuir valor a um a variável de m em ória.


nVariavel : = 10

 At r ibu içã o e m Lin h a

O operador de at ribuição em linha é caract erizado por dois pont os e o sinal de igualdade. Tem
a m esm a função do sinal de igualdade sozinho, por ém aplica a at ribuição às variáveis. Com ele
pode- se at ribuir m ais de um a variável ao m esm o t em po.

nVar1 : = nVar2 : = nVar 3 : = 0

- 40 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Quando diversas v ariáveis são inicializadas em um a m esm a linha, a at ribuição com eça da
direit a para a esquerda, ou sej a, nVar3 recebe o valor zer o inicialm ent e, nVar2 r ecebe o
cont eúdo de nVar3 e nVar1 r ecebe o cont eúdo de nVar2 por final.

Com o operador de at ribuição em linha, pode- se subst it uir as inicializações individuais de cada
variável por um a inicialização apenas:

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


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

O operador de at ribuição em linha t am bém pode ser ut ilizado para subst it uir valores de
cam pos em um banco de dados.

 At r ibu içã o Com post a

Os operador es de at r ibuição com post a são um a facilidade da linguagem ADVPL para


expr essões de cálculo e at ribuição. Com eles pode- se econom izar digit ação:

Ope r a dor Ex e m plo Equ iv a le n t e a


+= X += Y X= X+ Y
-= X -= Y X= X- Y
*= X *= Y X= X* Y
/= X /= Y X= X/ Y
* * = ou ^ = X **= Y X = X ** Y
%= X %= Y X= X% Y

Ope r a dor e s de I n cr e m e n t o/ D e cr e m e n t o

A linguagem ADVPL possui operador es para r ealizar increm ent o ou decrem ent o de variáveis.
Ent ende- se por increm ent o aum ent ar o valor de um a variável num érica em 1 e ent ende- se por
decrem ent o dim inuir o valor da variável em 1. Os operador es são:

++ I ncrem ent o Pós ou Pré- fixado


-- Decrem ent o Pós ou Pré- fixado

Os operador es de decr em ent o/ increm ent o podem ser colocados t ant o ant es ( pr é- fixado) com o
depois ( pós- fixado) do nom e da variável. Dent ro de um a expressão, a ordem do operador é
m uit o im port ant e, podendo alt erar o r esult ado da expr essão. Os oper ador es increm ent ais são
ex ecut ados da esquerda para a direit a dent ro de um a expressão.

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

O valor da variável nB r esult a em 21, pois a prim eira r efer ência a nA ( ant es do + + ) cont inha o
valor 10 que foi considerado e im ediat am ent e aum ent ado em 1. Na segunda refer ência a nA,
est e j á possuía o valor 11. O que foi efet uado foi a som a de 10 m ais 11, igual a 21. O
result ado final após a execução dest as duas linhas é a variável nB cont endo 21 e a variável nA
cont endo 11.

No ent ant o:

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

- 41 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Result a em 22, pois o operador increm ent al aum ent ou o valor da prim eira nA ant es que seu
valor fosse considerado.

Ope r a dor e s Esp e cia is

Além dos operador es com uns, o ADVPL possui alguns out ros operador es ou ident ificadores.
Est as são suas finalidades:

() Agrupam ent o ou Função


[] Elem ent o de Mat riz
{} Definição de Mat riz, Const ant e ou Bloco de Código
-> I dent ificador de Apelido
& Macr o subst it uição
@ Passagem de parâm et ro por r efer ência
|| Passagem de parâm et ro por valor

 Os parênt eses são ut ilizados para agrupar elem ent os em um a expr essão m udando a
ordem de precedência da avaliação da expressão ( segundo as r egras m at em át icas por
ex em plo) . Tam bém ser vem para env olver os argum ent os de um a função.

 Os colchet es são ut ilizados para especificar um elem ent o específico de um a m at riz. Por
ex em plo, A[ 3,2] , refer e- se ao elem ent o da m at riz A na linha 3, coluna 2.

 As chaves são ut ilizadas para a especificação de m at rizes lit erais ou blocos de código.
Por exem plo, A: = { 10,20,30} cria um a m at riz cham ada A com t r ês elem ent os.

 O sím bolo - > ident ifica um cam po de um arquivo difer enciando- o de um a variável. Por
ex em plo, FUNC- > nom e refere- se ao cam po nom e do arquivo FUNC. Mesm o que exist a um a
variável cham ada nom e, é o cam po nom e que será acessado.

 O sím bolo & ident ifica um a avaliação de expressão at rav és de m acro e é vist o em
det alhes na docum ent ação sobr e m a cr o sub st it u içã o .

 O sím bolo @ é ut ilizado para indicar que durant e a passagem de um a variável para um a
função ou pr ocedim ent o ela sej a t om ada com o um a refer ência e não com o valor .

 O sím bolo | | é ut ilizado para indicar que durant e a passagem de um a variável para
um a função ou pr ocedim ent o ela sej a t om ada com o um e valor não com o referência.

- 42 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Or de m de Pr e ce dê n cia d os Ope r a d or e s

Dependendo do t ipo de operador , exist e um a ordem de pr ecedência para a avaliação dos


operandos. Em princípio, t odas as operações com os operador es, são r ealizadas da esquer da
para a direit a se eles t iver em o m esm o nível de prioridade.

A ordem de precedência, ou nível de prioridade de execução, dos operador es em ADVPL é:

1. Operador es de I ncr em ent o/ Decrem ent o pr é- fixado


2. Operador es de St ring
3. Operador es Mat em át icos
4. Operador es Relacionais
5. Operador es Lógicos
6. Operador es de At ribuição
7. Operador es de I ncr em ent o/ Decrem ent o pós- fixado

Em expr essões com plexas com diferent es t ipos de operador es, a avaliação seguirá essa
seqüência. Caso exist a m ais de um operador do m esm o t ipo ( ou sej a, de m esm o nível) , a
avaliação se dá da esquerda para direit a. Para os operador es m at em át icos ent r et ant o, há um a
precedência a seguir:

1. Exponenciação
2. Mult iplicação e Divisão
3. Adição e Subt ração

Consider e o exem plo:

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

O r esult ado dest a expr essão é 30, pois prim eiram ent e é calculada a exponenciação 2^ 3( = 8) ,
ent ão são calculadas as m ult iplicações e divisões 10/ 2( = 5) e 5* 3( = 15) , e finalm ent e as
adições result ando em 2+ 5+ 15+ 8( = 30) .

 Alt e r a çã o d a Pr e ce dê n cia

A ut ilização de parênt eses dent r o de um a expressão alt era a ordem de pr ecedência dos
operadores. Operandos ent re par ênt eses são analisados ant es dos que se encont ram fora dos
parênt eses. Se exist irem m ais de um conj unt o de parênt eses não- aninhados, o grupo m ais a
esquerda será avaliado prim eiro e assim sucessivam ent e.

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

No exem plo acim a prim eiro será calculada a exponenciação 2^ 3( = 8) . Em seguida 2+ 10( = 12)
será calculado, 2+ 5( = 7) calculado, e finalm ent e a divisão e a m ult iplicação serão efet uadas, o
que r esult a em 12/ 7* 3+ 8( = 13.14) .

Se exist irem vários par ênt eses aninhados, ou sej a, colocados um dent ro do out r o, a avaliação
ocor rerá do parênt eses m ais int ero em direção ao m ais ext erno.

- 43 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 .5 .3 . Ope r a çã o de M a cr o Subst it uiçã o

O operador de m acr o subst it uição, sim bolizado pelo " e" com er cial ( &) , é ut ilizado para a
avaliação de expressões em t em po de ex ecução. Funciona com o se um a expressão
arm azenada fosse com pilada em t em po de ex ecução, ant es de ser de fat o execut ada.

Consider e o exem plo:

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

A variável X é at ribuída com o valor 10, enquant o a variável Y é at ribuída com a st ring de
caract eres cont endo " X + 1" .

A t er ceira linha ut iliza o operador de m acro. Est a linha faz com que o núm er o 11 sej a at ribuído
à variável B. Pode- se per ceber que esse é o valor r esult ant e da ex pressão em form at o de
caract ere cont ida na variável Y.

Ut ilizando- se um a t écnica m at em át ica elem ent ar, a subst it uição, t em os que na segunda linha,
Y é definido com o " X + 1" , ent ão pode- se subst it uir Y na t erceira linha:

03 B : = &" X + 1"
O operador de m acr o cancela as aspas:
03 B : = X + 1

Pode- se per ceber que o operador de m acro r em ove as aspas, o que deixa um pedaço de
código para ser ex ecut ado. Deve- se t er em m ent e que t udo isso acont ece em t em po de
ex ecução, o que t orna t udo m uit o dinâm ico. Um a ut ilização int eressant e é criar um t ipo de
calculadora, ou avaliador de fórm ulas, que det erm ina o r esult ado de algo que o usuário digit a.

O operador de m acro t em um a lim it ação: variáveis refer enciadas dent ro da st ring de


caract eres ( X nos ex em plos ant erior es) não podem ser locais.

- 44 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 .5 .4 . Funçõe s de m a n ipula çã o de va r iá ve is

Além de at ribuir, cont r olar o escopo e m acro ex ecut ar o cont eúdo das variáveis é necessário
m anipular seu cont eúdo at rav és de funções específicas da linguagem para cada sit uação.

As operações de m anipulação de cont eúdo m ais com uns em pr ogram ação são:

 Conversões ent r e t ipos de variáveis


 Manipulação de st rings
 Manipulação de variáveis num éricas
 Verificação de t ipos de variáveis
 Manipulação de ar ray s
 Ex ecução de blocos de código

Nest e t ópico serão abordadas as conversões ent re t ipos de variáveis e as funções de


m anipulação de st rings e variáveis num éricas.

Con ve r sõe s e n t r e t ip os d e v a r iá ve is

As funções m ais ut ilizadas nas operações ent r e conv er são ent r e t ipos de variáveis são:

 CTOD ( )
 CV ALTOCH AR( )
 D TOC( )
 D TOS( )
 STOD ( )
 STR( )
 STRZERO( )
 VAL( )

CTOD ( )

Sin t a x e CTOD ( cD a t a )
Realiza a conv er são de um a inform ação do t ipo caract er no form at o
D e scr içã o “ DD/ MM/ AAAA” para um a variável do t ipo dat a.

CV ALTOCH AR( )

Sin t a x e CV ALTOCH AR( n Va lor )


Realiza a conv er são de um a inform ação do t ipo num érico em um a st ring,
D e scr içã o sem a adição de espaços a inform ação.

- 45 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D TOC( )

Sin t a x e D TOC( dD a t a )
Realiza a conv er são de um a inform ação do t ipo dat a para em caract er, sendo
D e scr içã o o r esult ado no form at o “ DD/ MM/ AAAA” .

D TOS( )

Sin t a x e D TOS( dD a t a )
Realiza a conv er são de um a inform ação do t ipo dat a em um caract er, sendo
D e scr içã o o r esult ado no form at o “ AAAAMMDD” .

STOD ( )

Sin t a x e STOD ( sD a t a )
Realiza a conv er são de um a inform ação do t ipo caract er com cont eúdo no
D e scr içã o
for m at o “ AAAAMMDD” em dat a.

STR( )

Sin t a x e STR( n Va lor )


Realiza a conv er são de um a inform ação do t ipo num érico em um a st ring,
D e scr içã o
adicionando espaços à direit a.

STRZERO( )

Sin t a x e STRZERO( n V a lor , n Ta m a n h o)


Realiza a conv er são de um a inform ação do t ipo num érico em um a st ring,
D e scr içã o adicionando zer os à esquerda do núm ero convert ido, de form a que a st ring
gerada t enha o t am anho especificado no parâm et r o.

VAL( )

Sin t a x e VAL( cV a lor )

D e scr içã o Realiza a conv er são de um a inform ação do t ipo caract er em num érica.

- 46 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M a n ipu la çã o de st r in gs

As funções m ais ut ilizadas nas operações de m anipulação do cont eúdo de st rings são:

 ALLTRI M ( )
 ASC( )
 AT( )
 CH R( )
 CSTUFF( )
 LEN ( )
 RAT( )
 SUBSTR( )

ALLTRI M ( )

Sin t a x e ALLTRI M ( cSt r in g )


Ret orna um a st ring sem os espaços à direit a e à esquerda, r eferent e ao
cont eúdo inform ado com o par âm et ro.
D e scr içã o
A função ALLTRI M( ) im plem ent a as ações das funções RTRI M ( “ right t rim ” ) e
LTRI M ( “ left t rim ” ) .

ASC( )

Sin t a x e ASC( cCa r a ct e r e )


Convert e um a inform ação caract er e em seu valor de acordo com a t abela
D e scr içã o ASCI I .

AT( )

Sin t a x e AT( cCa r a ct e r e , cSt r in g )


Ret orna a prim eira posição de um caract er ou st ring dent ro de out ra st r ing
D e scr içã o especificada.

- 47 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


CH R( )

Sin t a x e CH R( n ASCI I )
Convert e um valor núm er o referent e a um a inform ação da t abela ASCI I no
D e scr içã o caract ere que est a infor m ação r epr esent a.

LEN ( )

Sin t a x e LEN ( cSt r in g)

D e scr içã o Ret orna o t am anho da st ring especificada no parâm et ro.

LOW ER( )

Sin t a x e LOW ER( cSt r in g)


Ret orna um a st ring com t odos os caract eres m inúsculos, t endo com o base a
D e scr içã o
st ring passada com o parâm et ro.

RAT( )

Sin t a x e RAT( cCa r a ct e r e , cSt r in g)


Ret orna a últ im a posição de um caract er ou st ring dent ro de out ra st ring
D e scr içã o especificada.

STUFF( )

Sin t a x e STUFF( cSt r in g, n PosI n icia l, n Ex clu ir , cAdica o)


Per m it e subst it uir um cont eúdo caract er e em um a st ring j á exist ent e,
especificando a posição inicial para est a adição e o núm ero de caract er es que
D e scr içã o
serão subst it uídos.

SUBSTR( )

Sin t a x e SUBSTR( cSt r in g, n PosI n icia l, n Ca r a ct e r e s)


Ret orna part e do cont eúdo de um a st ring especificada, de acordo com a
posição inicial dest e cont eúdo na st ring e a quant idade de caract eres que
D e scr içã o
dev erá ser r et ornada a part ir daquele pont o ( inclusive) .

- 48 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


UPPER( )

Sin t a x e UPPER( cSt r in g)


Ret orna um a st ring com t odos os caract eres m aiúsculos, t endo com o base a
D e scr içã o
st ring passada com o parâm et ro.

M a n ipu la çã o de v a r iá ve is n u m é r ica s

As funções m ais ut ilizadas nas operações de m anipulação do cont eúdo de st rings são:

 ABS( )
 I N T( )
 N OROUN D ( )
 ROUN D ( )

ABS( )

Sin t a x e ABS( n Va lor )


Ret orna um valor absolut o ( independent e do sinal) com base no v alor
D e scr içã o especificado no parâm et ro.

I N T( )

Sin t a x e I N T( n V a lor )

D e scr içã o Ret orna a part e int eira de um valor especificado no parâm et r o.

N OROUN D ( )

Sin t a x e N OROUN D ( n V a lor , n Ca sa s)


Ret orna um valor, t runcando a part e decim al do valor especificado no
D e scr içã o parâm et ro de acordo com a quant idade de casas decim ais solicit adas.

ROUN D ( )

Sin t a x e ROUN D ( n Va lor , n Ca sa s)


Ret orna um valor, ar r edondando a part e decim al do valor especificado no
parâm et ro de acordo com a quant idades de casas decim ais solicit adas,
D e scr içã o
ut ilizando o crit ério m at em át ico.

- 49 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ve r if ica çã o de t ipos d e v a r iá v e is

As funções de v erificação perm it em a consult a ao t ipo do cont eúdo da variável durant e a


ex ecução do pr ogr am a.

 TYPE( )
 VALTYPE( )

TYPE( )

Sin t a x e TYPE( “cV a r ia ve l” )


Det erm ina o t ipo do cont eúdo de um a variável, a qual não foi definida na
D e scr içã o função em ex ecução.

VALTYPE( )

Sin t a x e VALTYPE( cVa r iá ve l)


Det erm ina o t ipo do cont eúdo de um a variável, a qual foi definida na função
D e scr içã o em ex ecução.

- 50 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


5 . Est r ut ur a s bá sica s de pr ogr a m a çã o

O ADVPL suport a v árias est rut uras de cont r ole que perm it em m udar a seqüência de fluxo de
ex ecução de um pr ogr am a. Est as est rut uras perm it em a ex ecução de código baseado em
condições lógica e a repet ição da ex ecução de pedaços de código qualquer núm er o de v ezes.

Em ADVPL, t odas as est rut uras de cont r ole podem ser " aninhadas" dent ro de t odas as dem ais
est rut uras cont ant o que est ej am aninhadas propriam ent e. Est rut ur as de cont role t êm um
ident ificador de início e um de fim , e qualquer est rut ura aninhada dev e se encont r ar ent r e
est es ident ificador es.

Tam bém exist em est rut uras de cont role para det erm inar que elem ent os, com andos, et c. em
um program a serão com pilados. Est as são as diret ivas do pré- pr ocessador # ifdef...# endif e
# ifndef...# endif. Consult e a docum ent ação sobr e o pr é- pr ocessador par a m aiores det alhes.

As est rut uras de cont role em ADVPL est ão divididas em :

 Est rut uras de repet ição


 Est rut uras de decisão

5 .1 . Est r ut ur a s de r e pe t içã o

Est rut uras de r epet ição são designadas para execut ar um a seção de código m ais de um a vez.
Por ex em plo, im aginando- se a exist ência de um a função para im prim ir um relat ório, pode- se
desej ar im prim i- lo quat ro v ezes. Claro, pode- se sim plesm ent e cham ar a função de im pressão
quat ro v ezes em seqüência, m as ist o se t ornaria pouco profissional e não resolveria o
problem a se o núm er o de r elat órios fosse variável.

Em ADVPL exist em dois com andos para a r epet ição de seções de código, que são os com andos
FOR...N EXT e o com ando W H I LE...EN D D O .

O Com a n d o FOR...N EXT

A est rut ura de cont r ole FOR...NEXT, ou sim plesm ent e o loop FOR, r epet e um a seção de código
em um núm ero det erm inado de vezes.

 Sin t a x e

FOR Variav el : = nValorI nicial TO nValorFinal [ STEP nI ncr em ent o]


Com andos...
[ EXI T]
[ LOOP]
NEXT

- 51 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Pa r â m e t r os

Va r iá ve l Especifica um a variável ou um elem ent o de um a m at riz para


at uar com o um cont ador. A variável ou o elem ent o da m at riz
não pr ecisa t er sido declarado ant es da ex ecução do com ando
FOR...NEXT. Se a variável não exist ir, será criada com o um a
va r iá ve l p r iv a da .
n V a lor I n icia l nValorI nicial é o valor inicial para o cont ador; nValorFinal é o
TO n V a lor Fin a l valor final para o cont ador. Pode- se ut ilizar valores num éricos
lit erais, variáveis ou expressões, cont ant o que o result ado sej a
do t ipo de dado num érico.
STEP nI ncrem ent o é a quant idade que será increm ent ada ou
n I n cr e m e n t o decrem ent ada no cont ador após cada ex ecução da seção de
com andos. Se o valor de nI ncr em ent o for negat ivo, o cont ador
será decrem ent ado. Se a cláusula STEP for om it ida, o cont ador
será increm ent ado em 1. Pode- se ut ilizar valores num éricos
lit erais, variáveis ou expressões, cont ant o que o result ado sej a
do t ipo de dado num érico.
Com a n dos Especifica um ou m ais inst ruções de com ando ADVPL que serão
ex ecut adas.
EXI T Transfere o cont r ole de dent ro do com ando FOR...NEXT para o
com ando im ediat am ent e seguint e ao NEXT, ou sej a, finaliza a
repet ição da seção de com andos im ediat am ent e. Pode- se
colocar o com ando EXI T em qualquer lugar ent re o FOR e o
NEXT.
LOOP Ret orna o cont role diret am ent e para a cláusula FOR sem
ex ecut ar o r est ant e dos com andos ent re o LOOP e o NEXT. O
cont ador é increm ent ado ou decr em ent ado nor m alm ent e, com o
se o NEXT t ivesse sido alcançado. Pode- se colocar o com ando
LOOP em qualquer lugar ent re o FOR e o NEXT.

Um a variável ou um elem ent o de um a m at riz é ut ilizado com o um


cont ador para especificar quant as vezes os com andos ADVPL dent r o da
est rut ura FOR...NEXT são execut ados.

Os com andos ADVPL depois do FOR são execut ados at é que o NEXT
sej a alcançado. O cont ador ( Variavel) é ent ão increm ent ado ou
decrem ent ado com o v alor em nI ncr em ent o ( se a cláusula STEP for
om it ida, o cont ador é increm ent ado em 1) . Ent ão, o cont ador é
com parado com o valor em nValorFinal. Se for m enor ou igual ao valor
em nValorFinal, os com andos seguint es ao FOR são execut ados
novam ent e.

Se o valor for m aior que o cont ido em nValorFinal, a est rut ura
FOR...NEXT é t erm inada e o pr ogr am a cont inua a execução no
prim eiro com ando após o NEXT.

Os valores de nValor I nicial, nValorFinal e nI ncr em ent o são apenas


considerados inicialm ent e. Ent r et ant o, m udar o valor da variável
ut ilizada com o cont ador dent r o da est rut ura afet ará o núm er o de
vezes que a repet ição será execut ada. Se o valor de nI ncr em ent o é
negat ivo e o valor de nValorI nicial é m aior que o de nValorFinal, o
cont ador será decrem ent ado a cada r epet ição.

- 52 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

Local nCnt
Local nSom aPar : = 0
For nCnt : = 0 To 100 St ep 2
nSom aPar + = nCnt
Next
Alert ( " A som a dos 100 prim eiros núm eros par es é: " + ;
cValToChar( nSom aPar) )
Ret urn

Est e ex em plo im prim e a som a dos 100 prim eiros núm er os par es. A som a é obt ida at ravés da
repet ição do cálculo ut ilizando a própria variável de cont ador . Com o a cláusula STEP est á
sendo ut ilizada, a variável nCnt será sem pr e increm ent ada em 2. E com o o cont ador com eça
com 0, seu valor sem pr e será um núm ero par .

O Com a n d o W H I LE...EN D D O

A est rut ura de cont r ole WHI LE...ENDDO, ou sim plesm ent e o loop WHI LE, repet e um a seção de
código enquant o um a det erm inada expr essão r esult ar em verdadeiro ( .T.) .

 Sin t a x e

WHI LE lExpr essao


Com andos...
[ EXI T]
[ LOOP]
ENDDO

 Pa r â m e t r os

lEx pr e ssa o Especifica um a expressão lógica cuj o valor det erm ina quando os
com andos ent re o WHI LE e o ENDDO são ex ecut ados. Enquant o o
result ado de lExpr essao for avaliado com o verdadeiro ( .T.) , o
conj unt o de com andos são ex ecut ados.
Com a n dos Especifica um ou m ais inst ruções de com ando ADVPL que serão
ex ecut adas enquant o lExpressao for avaliado com o v erdadeiro ( .T.) .
EXI T Transfere o cont r ole de dent r o do com ando WHI LE...ENDDO par a o
com ando im ediat am ent e seguint e ao ENDDO, ou sej a, finaliza a
repet ição da seção de com andos im ediat am ent e. Pode- se colocar o
com ando EXI T em qualquer lugar ent r e o WHI LE e o ENDO.
LOOP Ret orna o cont r ole diret am ent e para a cláusula WHI LE sem ex ecut ar
o r est ant e dos com andos ent re o LOOP e o ENDDO. A expr essão em
lExpressao é r eavaliada para a decisão se os com andos cont inuarão
sendo execut ados.

Os com andos ent r e o WHI LE e o ENDDO são execut ados enquant o o


result ado da avaliação da expr essão em lExpressao perm anecer
verdadeiro ( .T.) . Cada palavra chav e WHI LE dev e t er um a palavra
chave ENDDO cor r espondent e.

- 53 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo :

Local nNum ber : = nAux : = 350


nAux : = I nt ( nAux / 2)
While nAux > 0
nSom aPar + = nCnt
Next
Alert ( " A som a dos 100 prim eiros núm eros par es é: " + ;
cValToChar( nSom aPar) )
Ret urn

5 .1 .1 . I nflue ncia ndo o flux o de r e pe t içã o

A linguagem ADVPL perm it e a ut ilização de com andos que influem diret am ent e em um
processo de r epet ição, sendo eles:

 LOOP
 EXI T

LOOP

A inst rução LOOP é ut ilizada para for çar um desvio no fluxo do program a de v olt a a análise da
condição de repet ição. Dest a form a, t odas as operações que seriam realizadas dent ro da
est rut ura de r epet ição após o LOOP serão desconsideradas.

Ex e m plo:

aI t ens: = List aProdut os( ) / / função ilust rat iva que r et orna um array com dados dos pr odut os
nQuant idade : = Len( aI t ens)
nI t ens : = 0

While nI t ens < nQuant idade

nI t ens+ +
I F BLOQUEADO( aI t ens [ nI t ens] ) / / função ilust rat iva que verifica se o produt o est á
LOOP / / bloqueado.
ENDI F

I MPRI ME( ) / / função ilust rat iva que r ealiza a im pressão de um it em liberado par a uso

End

/ / Ca so o pr odu t o e st e j a bloqu e a d o, o m e sm o n ã o se r á im pr e sso, pois a e x e cu çã o d a


/ / in st r u çã o LOOP f a r á o f lu x o do pr ogr a m a r e t or n a r a p a r t ir da a n á lise d a con d içã o.

- 54 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


EXI T

A inst rução EXI T é ut ilizada para for çar o t érm ino de um a est rut ura de repet ição. Dest a form a,
t odas as operações que seriam realizadas dent ro da est rut ura de r epet ição após o EXI T serão
desconsideradas, e o program a irá cont inuar a ex ecução a part ir da próxim a inst rução
post erior ao t érm ino da est rut ura ( END ou NEXT) .

Ex e m plo:

While .T.

I F MSGYESNO( “ Desej a j ogar o j ogo da for ca?” )


JFORCA( ) / / Função ilust rat iva que im plem ent a o algorit m o do j ogo da for ca.
ELSE
EXI T
ENDI F
End

MSGI NFO( “ Final de Jogo” )

/ / En qu a n t o n ã o for r e spon dido “ N ã o” p a r a a pe r gu n t a : “D e se j a j og a r o j ogo da


/ / for ca ”, se r á e x e cu t a da a f u n çã o do j ogo da for ca .
/ / Ca so se j a se le cion a da a op çã o “N ã o”, se r á e x e cu t a da a in st r u çã o EX I T qu e
pr ovoca r á o t é r m in o do LOOP, pe r m it in d o a e x e cu çã o d a m e n sa ge m de “Fin a l d e
Jogo”.

- 55 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


5 .2 . Est r ut ur a s de de cisã o

Est rut uras de desvio são designadas para ex ecut ar um a seção de código se det erm inada
condição lógica result ar em v erdadeiro ( .T.) .

Em ADVPL exist em dois com andos para ex ecução de seções de código de acordo com
avaliações lógicas, que são os com andos I F...ELSE...EN D I F e o com ando D O
CASE...EN D CASE .

O Com a n d o I F...ELSE...EN D I F

Ex ecut a um conj unt o de com andos baseado no valor de um a expr essão lógica.

 Sin t a x e

I F lExpressao
Com andos
[ ELSE
Com andos...]
ENDI F

 Pa r â m e t r os

LEx pr e ssa o Especifica um a expressão lógica que é avaliada. Se lExpr essao


result ar em verdadeiro ( .T.) , qualquer com ando seguint e ao I F e
ant ecedent e ao ELSE ou ENDI F ( o que ocorr er prim eiro) será
ex ecut ado.
Se lExpr essao result ar em falso ( .F.) e a cláusula ELSE for definida,
qualquer com ando após essa cláusula e ant erior ao ENDI F será
ex ecut ada. Se a cláusula ELSE não for definida, t odos os com andos
ent re o I F e o ENDI F são ignorados. Nest e caso, a execução do
program a cont inua com o prim eiro com ando seguint e ao ENDI F.
Com a n dos Conj unt o de com andos ADVPL que serão ex ecut ados dependendo da
avaliação da expr essão lógica em lExpr essao.

Pode- se aninhar um bloco de com ando I F...ELSE...ENDI F dent ro de


out ro bloco de com ando I F...ELSE...ENDI F. Por ém , para a avaliação de
m ais de um a expr essão lógica, deve- se ut ilizar o com ando DO
CASE...ENDCASE ou a versão est endida da expressão
I F...ELSE...ENDI F denom inada I F...ELSEI F...ELSE...ENDI F.

Ex e m plo:
Local dVenct o : = CTOD( " 31/ 12/ 01" )
I f Dat e( ) > dVenct o
Alert ( " Vencim ent o ult rapassado! " )
Endif
Ret urn

- 56 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


O Com a n d o I F...ELSEI F...ELSE...EN D I F

Ex ecut a o prim eiro conj unt o de com andos cuj a expr essão condicional result a em verdadeiro
( .T.) .

 Sin t a x e

I F lExpressao1
Com andos
[ ELSEI F lExpr essaoX
Com andos]
[ ELSE
Com andos...]
ENDI F

 Pa r â m e t r os

lEx pr e ssa o1 Especifica um a expressão lógica que é avaliada. Se lExpressao


result ar em v erdadeiro ( .T.) , ex ecut ar á os com andos
com preendidos ent r e o I F e a próxim a expr essão da est rut ura
( ELSEI F ou I F)
Se lExpressao r esult ar em falso ( .F.) , será avaliada a próxim a
expr essão lógica vinculada ao com ando ELSEI F, ou se o m esm o
não exist ir será ex ecut ada a ação definida no com ando ELSE.
lEx pr e ssa oX Especifica um a expressão lógica que será avaliada para cada
com ando ELSEI F. Est a expressão som ent e será avaliada se a
expr essão lógica especificada no com ando I F r esult ar em falso
( .F.) .
Caso a lExpr essaoX avaliada result e em falso ( .F.) será avaliada a
próxim a expressão lExpressaoX vinculada ao próxim o com ando
ELSEI F, ou caso o m esm o não exist a ser á execut ada a ação
definida parao com ando ELSE.
Com a n dos Conj unt o de com andos ADVPL que serão ex ecut ados dependendo
da avaliação da expressão lógica em lExpr essao.

O cam po I F...ELSE...ELSEI F...ENDI F possui a m esm a est rut uração de


decisão que pode ser obt ida com a ut ilização do com ando DO
CASE...ENDCASE.

- 57 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:
Local dVenct o : = CTOD( " 31/ 12/ 01" )
I f Dat e( ) > dVenct o
Alert ( " Vencim ent o ult rapassado! " )
ElseI f Dat e( ) = = dVenct o
Alert ( " Vencim ent o na dat a! " )
Else
Alert ( " Vencim ent o dent r o do prazo! " )
Endif
Ret urn

O Com a n d o D O CASE...EN D CASE

Ex ecut a o prim eiro conj unt o de com andos cuj a expr essão condicional result a em verdadeiro
( .T.) .

 Sin t a x e

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

 Pa r â m e t r os

CASE Quando a prim eira expressão CASE result ant e em verdadeiro ( .T.)
lEx pr e ssa o1 for encont rada, o conj unt o de com andos seguint e é ex ecut ado. A
Com a n dos... ex ecução do conj unt o de com andos cont inua at é que a próxim a
cláusula CASE, OTHERWI SE ou ENDCASE sej a encont rada. Ao
t erm inar de execut ar esse conj unt o de com andos, a ex ecução
cont inua com o prim eiro com ando seguint e ao ENDCASE.
Se um a expr essão CASE r esult ar em falso ( .F.) , o conj unt o de
com andos seguint e a est a at é a próxim a cláusula é ignorado.
Apenas um conj unt o de com andos é execut ado. Est es são os
prim eiros com andos cuj a expressão CASE é avaliada com o
verdadeiro ( .T.) . Após a ex ecução, qualquer out ra expressão CASE
post erior é ignorada ( m esm o que sua avaliação result asse em
verdadeiro) .
OTH ERW I SE Se t odas as expr essões CASE for em avaliadas com o falso ( .F.) , a
Com a n dos cláusula OTHERWI SE det erm ina se um conj unt o adicional de
com andos dev e ser ex ecut ado. Se essa cláusula for incluída, os
com andos seguint es serão execut ados e ent ão o program a
cont inuará com o prim eiro com ando seguint e ao ENDCASE. Se a
cláusula OTHERWI SE for om it ida, a ex ecução cont inuará
norm alm ent e após a cláusula ENDCASE.

- 58 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


O Com ando DO CASE...ENDCASE é ut ilizado no lugar do com ando
I F...EN D I F quando um núm ero m aior do que um a expressão dev e ser
avaliada, subst it uindo a necessidade de m ais de um com ando
I F...ENDI F aninhados.

Ex e m plo:

Local nMes : = Mont h( Dat e( ) )


Local cPeriodo : = " "

DO CASE
CASE nMes < = 3
cPeriodo : = " Prim eiro Tr im est re"
CASE nMes > = 4 .And. nMes < = 6
cPeriodo : = " Segundo Trim est r e"
CASE nMes > = 7 .And. nMes < = 9
cPeriodo : = " Ter ceiro Tr im est re"
OTHERWI SE
cPeriodo : = " Quart o Trim est re"
ENDCASE

Ret urn

- 59 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


6 . Ar r a ys e Blocos de Código

6 .1 . Ar r a ys

Array s ou m at rizes, são coleções de valores, sem elhant es a um a list a. Um a m at riz pode ser
criada at rav és de diferent es m aneiras.

Cada it em em um arr ay é r eferenciado pela indicação de sua posição num érica na list a,
iniciando pelo núm er o 1.

O ex em plo a seguir declara um a variável, at ribui um array de t rês elem ent os a ela, e ent ão
exibe um dos elem ent os e o t am anho do arr ay:

Local aLet ras / / Declaração da variável


aLet r as : = { " A" , " B" , " C" } / / At ribuição do ar ray a variável
Alert ( aLet ras[ 2] ) / / Exibe o segundo elem ent o do array
Alert ( cValToChar( Len( aLet ras) ) ) / / Exibe o t am anho do arr ay

O ADVPL perm it e a m anipulação de arrays facilm ent e. Enquant o que em out ras linguagens
com o C ou Pascal é necessário alocar m em ória para cada elem ent o de um ar ray ( o que
t ornaria a ut ilização de " pont eiros" necessária) , o ADVPL se encar rega de gerenciar a m em ória
e t orna sim ples adicionar elem ent os a um array, ut ilizando a função AADD( ) :

AADD( aLet ras," D" ) / / Adiciona o quart o elem ent o ao final do ar ray
Alert ( aLet ras[ 4] ) / / Exibe o quart o elem ent o
Alert ( aLet ras[ 5] ) / / Er r o! Não há um quint o elem ent o no ar ray

Ar r a y s com o Est r u t ur a s

Um a caract eríst ica int eressant e do ADVPL é que um array pode cont er qualquer t ipo de dado:
núm eros, dat as, lógicos, caract er es, obj et os, et c., e ao m esm o t em po. Em out r as palavras, os
elem ent os de um array não pr ecisam ser necessariam ent e do m esm o t ipo de dado, em
cont rast e com out r as linguagens com o C e Pascal.

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

Est e ar ray cont em um a st ring, um núm ero e um valor lógico. Em out r as linguagens com o C ou
Pascal, est e " pacot e" de inform ações pode ser cham ado com o um " st ruct " ( est rut ura em C, por
ex em plo) ou um " r ecor d" ( regist r o em Pascal, por ex em plo) . Com o se fosse na verdade um
regist ro de um banco de dados, um pacot e de inform ações const ruído com diversos cam pos.
Cada cam po t endo um pedaço difer ent e de dado.

Suponha que no ex em plo ant erior, o ar ray aFunct 1 cont enha infor m ações sobre o nom e de
um a pessoa, sua idade e sua sit uação m at rim onial. Os seguint es # defines podem ser criados
para indicar cada posição dos valor es dent ro de um array:

# define FUNCT_NOME 1
# define FUNCT_I DADE 2
# define FUNCT_CASADO 3

- 60 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


E consider e m ais alguns arr ays para r epr esent ar m ais pessoas:

aFunct 2 : = { " Maria" , 22, .T.}


aFunct 3 : = { " Ant ônio" , 42, .F.}

Os nom es podem ser im pressos assim :

Alert ( aFunct 1[ FUNCT_NOME] )


Alert ( aFunct 2[ FUNCT_NOME] )
Alert ( aFunct 3[ FUNCT_NOME] )

Agora, ao invés de t rabalhar com variáveis individuais, pode- se agrupá- las em um out ro array,
do m esm o m odo que m uit os r egist ros são agrupados em um a t abela de banco de dados:

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

Que é equivalent e a isso:

aFunct s : = { { " Pedr o" , 32, .T.} , ;


{ " Maria" , 22, .T.} , ;
{ " Ant ônio" , 42, .F.} }

aFunct s é um array com 3 linhas por 3 colunas. Um a vez que as variáveis separadas foram
com binadas em um ar ray, os nom es podem ser exibidos assim :

Local nCount
For nCount : = 1 To Len( aFunct s)
Alert ( aFunct s[ nCount , FUNCT_NOME] )
/ / O acesso a elem ent os de um arr ay m ult idim ensional
/ / pode ser r ealizado t am bém dest a form a:
/ / aFunct s[ nCount ] [ FUNCT_NOME]
Next nCount

A variável nCount seleciona que funcionário ( ou que linha) é de int er esse. Ent ão a const ant e
FUNCT_NOME seleciona a prim eira coluna daquela linha.

Cu id a d os com Ar r a ys

Array s são list as de elem ent os, port ant o m em ória é necessária para arm azenar est as
inform ações. Com o est es arrays podem ser m ult idim ensionais, a m em ória necessária será a
m ult iplicação do núm er o de it ens em cada dim ensão do array, considerando- se o t am anho do
cont eúdo de cada elem ent o cont ido nest a. Port ant o o t am anho de um array pode variar m uit o.

A facilidade da ut ilização de ar rays, m esm o que para arm azenar infor m ações em pacot es com o
descrit o ant eriorm ent e, não é com pensada pela ut ilização em m em ória quando o núm er o de
it ens em um array for m uit o grande. Quando o núm ero de elem ent os for m uit o grande deve- se
procurar out ras soluções, com o a ut ilização de um arquivo de banco de dados t em porário.

- 61 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


6 .1 .1 . I nicia liz a ndo a r r a ys

Algum as vezes o t am anho da m at riz é conhecido previam ent e. Out r as vezes o t am anho do
array som ent e será conhecido em t em po de ex ecução.

Se o t a m a n h o do a r r a y é con h e cido

Se o t am anho do ar ray é conhecido no m om ent o que o program a é escrit o, há diversas


m aneiras de im plem ent ar o código:

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

Est e código preenche o array com um a t abela de quadrados. Os valores serão 1, 4, 9, 16 ...
81, 100. Not e que a linha 07 se refere à variáv el aX, m as poderia t am bém t r abalhar com aY ou
aZ.

O obj et ivo dest e exem plo é dem onst rar t rês m odos de criar um array de t am anho conhecido
no m om ent o da criação do código.

1. Na linha 02 o array é criada usando aX[ 10] . I st o indica ao ADVPL para alocar espaço
para 10 elem ent os no array. Os colchet es [ e ] são ut ilizados para indicar o t am anho
necessário.

2. Na linha 03 é ut ilizada a função ar ray com o parâm et r o 10 para criar o ar ray, e o


ret orno dest a função é at ribuído à variável aY. Na linha 03 é efet uado o que se cham a
" desenhar a im agen do array" . Com o se pode not ar, exist em dez 0´ s na list a encerr ada ent re
chaves ( { } ) . Claram ent e, est e m ét odo não é o ut ilizado para criar um a m at riz de 1000
elem ent os.

3. O t erceiro m ét odo difer e dos ant erior es por que inicializa a m at riz com os valores
definit ivos. Nos dois prim eiros m ét odos, cada posição da m at riz cont ém um valor nulo ( Nil) e
dev e ser inicializado post eriorm ent e.

4. A linha 07 dem onst ra com o um v alor pode ser at ribuído para um a posição exist ent e em
um a m at riz especificando o índice ent r e colchet es.

- 62 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Se o t a m a n h o do a r r a y n ã o é con h e cid o

Se o t am anho do ar ray não é conhecido at é o m om ent o da ex ecução do pr ogram a, há algum as


m aneiras de criar um array e adicionar elem ent os a ele. O ex em plo a seguir ilust ra a idéia de
criação de um array vazio ( sem nenhum elem ent o) e adição de elem ent os dinam icam ent e.

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

1. A linha 02 ut iliza os colchet es para criar um array vazio. Apesar de não t er nenhum
elem ent o, seu t ipo de dado é ar ray .

2. Na linha 03 a cham ada da função ar ray cria um a m at riz sem nenhum elem ent o.

3. Na linha 04 est á declarada a r epr esent ação de um array vazio em ADVPL. Mais um a
vez, est ão sendo ut ilizadas as chaves para indicar que o t ipo de dados da variável é array .
Not e que { } é um array vazio ( t em o t am anho 0) , enquant o { Nil} é um array com um único
elem ent o nulo ( t em t am anho 1) .

Porque cada um a dest es arrays não cont ém elem ent os, a linha 07 ut iliza a função AADD( ) para
adicionar elem ent os sucessivam ent e at é o t am anho necessário ( especificado por exem plo na
variável nSize) .

6 .1 .2 . Funçõe s de m a n ipula çã o de a r r a ys
A linguagem ADVPL possui diversas funções que auxiliam na m anipulação de ar ray s, dent r e as
quais podem os cit ar as m ais ut ilizadas:

 ARRAY( )
 AAD D ( )
 ACLON E( )
 AD EL( )
 ASI ZE( )
 AI N S( )
 ASORT( )
 ASCAN ( )

- 63 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


ARRAY( )

Sin t a x e ARRAY( n Lin h a s, n Colu n a s)


A função Array( ) é ut ilizada na definição de v ariáveis de t ipo array, com o
D e scr içã o
um a opção a sint axe ut ilizando chaves ( “ { } ” ) .

AAD D ( )

Sin t a x e AAD D ( a Ar r a y, x I t e m )
A função AADD( ) per m it e a inserção de um it em em um array j á exist ent e,
D e scr içã o sendo que est e it em podem ser um elem ent o sim ples, um obj et o ou out ro
array.

ACLON E( )

Sin t a x e AAD D ( a Ar r a y)
A função ACLONE( ) r ealiza a cópia dos elem ent os de um array par a out r o
D e scr içã o
array int egralm ent e.

AD EL( )

Sin t a x e AD EL( a Ar r a y, n Posiçã o)


A função ADEL( ) perm it e a ex clusão de um elem ent o do array. Ao efet uar a
D e scr içã o exclusão de um elem ent o, t odos os dem ais são reorganizados de for m a que
a ult im a posição do array passará a ser nula.

ASI ZE( )

Sin t a x e ASI ZE( a Ar r a y , n Ta m a n h o)


A função ASI ZE perm it e a redefinição da est rut ura de um arr ay pr é-
D e scr içã o
exist ent e, adicionando ou rem ov endo it ens do m esm o.

ASORT( )

Sin t a x e ASORT( a Ar r a y, n I n icio, n I t e n s, bOr d e m )


A função ASORT( ) per m it e que os it ens de um array sej am ordenados a
D e scr içã o
part ir de um crit ério pr é- est abelecido.

- 64 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


ASCAN ( )

Sin t a x e ASCAN ( a Ar r a y, bSe e k )


A função ASCAN( ) per m it e que sej a ident ificada a posição do array que
D e scr içã o cont ém um a det erm inada inform ação, at ravés da análise de um a expr essão
descrit a em um bloco de código.

AI N S( )

Sin t a x e AI N S( a Ar r a y , n Posica o)
A função AI NS( ) perm it e a inserção de um elem ent o no ar ray especificado
em qualquer pont o da est rut ura do m esm o, diferindo dest a form a da função
D e scr içã o AADD( ) a qual sem pr e insere um nov o elem ent o ao final da est rut ura j á
exist ent e.

6 .1 .3 . Cópia de a r r a ys

Conform e com ent ado ant eriorm ent e, um array é um a área na m em ória, o qual possui um a
est rut ura perm it e que as inform ações sej am arm azenadas e organizadas das m ais diversas
for m as.

Com base nesse conceit o, o ar ray pode ser considerado apenas com o um “ m apa” ou um “ guia”
de com o as inform ações est ão organizadas e de com o elas podem ser arm azenadas ou
consult adas. Para se copiar um array dev e- se levar est e conceit o em consideração, pois caso
cont rário o r esult ado esperado não será o obt ido na ex ecução da “ cópia” .

Para “ copiar” o cont eúdo de um a variável, ut iliza- se o operador de at r ibuição “ : = ” , conform e


abaixo:

nPessoas : = 10
nAlunos : = nPessoas

Ao ex ecut ar a at ribuição de nAlunos com o cont eúdo de nPessoas, o cont eúdo de nPessoas é
at ribuído a variável nAlunos, causando o efeit o de cópia do cont eúdo de um a variável para
out ra.

I st o porque o com ando de at ribuição copia o cont eúdo da ár ea de m em ória represent ada pelo
nom e “ nPessoas” para a área de m em ória represent ada pelo nom e “ nAlunos” . Mas ao ut ilizar o
operador de at ribuição “ : = ” da m esm a form a que ut ilizado em variáveis sim ples para se copiar
um array o efeit o é diferent e:

aPessoas : = { “ Ricardo” , “ Crist iane” , “ Andr é” , “ Cam ila” }


aAlunos : = aPessoas

- 65 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A variável aPessoas r epresent e um a área de m em ória que cont ém a est rut ura de um ar ray
( “ m apa” ) , não as inform ações do ar ray , pois cada inform ação est á em sua própria área de
m em ória.

Dest a form a ao at ribuir o cont eúdo r epresent ado pela variável aPessoas a variável aAlunos não
est á se “ copiando” as infor m ações e sim o “ m apa” das áreas de m em ória onde as inform ações
est ão r ealm ent e arm azenadas.

Com o foi copiado o “ m apa” e não as inform ações, qualquer ação ut ilizando o rót ulo aAlunos irá
afet ar as inform ações do r ót ulo aPessoas. Com isso ao invés de se obt er dois array s dist int os,
t em - se o m esm o ar ray com duas form as de acesso ( rót ulos) difer ent es.

Por est a razão deve ser ut ilizado o com ando ACLONE( ) quando desej a- se obt er um ar ray com
a m esm a est rut ura e inform ações que com põe out ro ar ray j á exist ent e.

- 66 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


6 .2 . List a s de Ex pr e ssõe s e Blocos de Código

Blocos de código são um conceit o exist ent e há m uit o t em po em linguagens xBase. Não com o
algo que apareceu da noit e para o dia, e sim um a evolução progressiva ut ilizando a
com binação de m uit os conceit os da linguagem para a sua im plem ent ação.

6 .2 .1 . Pr e m issa s pa r a ut iliz a çã o de Blocos de Código

Pr im e ir a pr e m issa

O ADVPL é um a linguagem baseada em funções. Funções t êm um valor de ret orno. Assim


com o o operador de at ribuição : = .

Assim , a o in v é s de e scr e ve r :

x : = 10 / / At ribui o valor 10 à variável cham ada X


Alert ( " Valor de x: " + cValToChar( x) )

Pode - se e scr e ve r :

/ / At ribui e ent ão exibe o valor da variável X


Alert ( " Valor de x: " + cValt oChar( X : = 10) )

A expr essão x: = 10 é av aliada prim eiro, e ent ão seu r esult ado ( o valor de X, que agora é 10) é
passada para a função cvalt ochar para a conversão para caract er e, e em seguida para a
função alert para a exibição. Por causa dest a regra de pr ecedência é possível at ribuir um valor
a m ais de um a variável ao m esm o t em po:

Z := Y := X := 0

Por causa dessa r egra, essa expr essão é avaliada com o se fosse escrit a assim :

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

Apesar de o ADVPL avaliar expr essões da esquerda para a direit a, no caso de at ribuições isso
acont ece ao cont rário, da direit a para a esquerda. O valor é at ribuído à variável X, que r et orna

- 67 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


o valor para ser at ribuído à variável Y e assim sucessivam ent e. Pode- se dizer que o zer o foi
" propagado at rav és da expr essão" .

Se gu n d a p r e m issa

Em ADVPL pode- se j unt ar diversas linhas de código em um a única linha física de com ando. Por
ex em plo, o código:

I f lAchou
Alert ( " Client e encont rado! " )
Endif
pode ser escrit o assim :
I f lAchou ; Alert ( " Client e encont r ado! " ) ;
Endif

O pont o- e- vírgula indica ao ADVPL que a nov a linha de código est á para com eçar. Pode- se
ent ão colocar diver sas linhas lógicas de código na m esm a linha física at rav és do edit or de t ext o
ut ilizado.

Apesar da possibilidade de se escr ev er t odo o program a assim , em um a única linha física, ist o
não é r ecom endado pois dificult a a legibilidade do pr ogram a e, conseqüent em ent e, a
m anut enção.

6 .2 .2 . List a de e x pr e ssõe s

A ev olução dos blocos de código com eça com as list as de expr essões. Nos ex em plos a seguir,
o sím bolo = = > indicará o ret orno da expr essão após sua avaliação ( sej a para at ribuir em um a
variável, exibir para o usuário ou im prim ir em um r elat ório) , que será im presso em um
relat ório por ex em plo.

D u a s Lin h a s d e Códig o

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


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

Cada um a das linhas t erá a expr essão avaliada, e o valor da variável ser á ent ão im presso.

D u a s lin h a d e códig o e m u m a , u t iliz a n do p on t o- e - v ír g u la

Est e é o m esm o código que o ant erior , apenas escrit o em um a única linha:

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

Apesar desse código se encont rar em um a única linha física, exist em duas linhas lógicas
separadas pelo pont o e vírgula. Ou sej a, esse código é equivalent e a:

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

Port ant o apenas o valor 10 da variável x será passado par a as funções cvalt ochar e alert para
ser exibido. E o valor 20 apenas será at ribuído à variável y.

- 68 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Con ve r t e n do pa r a u m a list a de e x p r e ssõe s

Quando par ênt eses são colocados ao r edor do código e o sinal de pont o- e- vírgula subst it uído
por um a vírgula apenas, o código t orna- se um a list a de expressões:

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

O valor de r et orno r esult ant e de um a list a de expressões é o valor result ant e da últ im a
expr essão ou elem ent o da list a. Funciona com o se fosse um pequeno program a ou função, que
ret orna o result ado de sua últ im a avaliação ( efet uadas da esquerda par a a direit a) .

Nest e exem plo, a expr essão x : = 10 é avaliada, e ent ão a expr essão y : = 20, cuj o valor
result ant e é passado para a função alert e cv alt ochar, e ent ão exibido. Depois que essa linha
de código é ex ecut ada, o valor de X é igual a 10 e o de y igual a 20, e 20 será exibido.

Teoricam ent e, não há lim it ação para o núm ero de expressões que podem ser com binadas em
um a list a de expressões. Na prát ica, o núm er o m áxim o é por volt a de 500 sím bolos.
Debugar list as de expr essões é difícil porque as expr essões não est ão divididas em linhas de
código font e, o que t or na t odas as expressões associadas a um a m esm a linha de código. I st o
pode t ornar m uit o difícil det erm inar onde um er ro ocorr eu.

On de pode - se u t iliz a r u m a list a de e x p r e ssõe s?

O propósit o principal de um a list a de expr essões é agrupá- las em um a única unidade. Em


qualquer lugar do código ADVPL que um a expressão sim ples pode ser ut ilizada, pode- se
ut ilizar um a list a de expressões. E ainda, pode- se fazer com que várias coisas acont eçam onde
norm alm ent e apenas um a acont eceria.

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

Aqui t em os o m esm o conceit o, escrit o ut ilizando list as de expr essões na função I I F( ) :

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

D e list a s d e e x p r e ssõe s pa r a b locos d e cód igo

Consider e a seguint e list a de expressões:

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

O ADVPL per m it e criar funções, que são pequenos pedaços de código, com o se fosse um
pequeno pr ogram a, ut ilizados para dim inuir part es de t ar efas m ais com plexas e r eapr ov eit ar
código em m ais de um lugar num program a. Para m aiores det alhes consult e a docum ent ação
sobr e a criação de funções em ADVPL. Por ém , a idéia nest e m om ent o é que a list a de
expr essões ut ilizada na linha ant erior pode ser criada com o um a função:

- 69 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Funct ion List a( )
X : = 10
Y : = 20
Ret urn Y

E a linha de ex em plo com a list a de expr essões pode ser subst it uída, t endo o m esm o
result ado, por:

Alert ( cValToChar( List a( ) ) ) = = > 20

Com o m encionado ant eriorm ent e, um a list a de expr essões é com o um pequeno pr ogram a ou
função. Com poucas m udanças, um a list a de ex pressões pode se t ornar um bloco de código:

( X : = 10 , Y : = 20 ) / / List a de Expr essões


{ | | X : = 10 , Y : = 20 } / / Bloco de Código

Not e as chav es { } ut ilizadas no bloco de código. Ou sej a, um bloco de código é um a m at riz.


Por ém na verdade, não é um a list a de dados, e sim um a list a de com andos, um a list a de
código.

/ / I st o é um a m at riz de dados
A : = { 10, 20, 30}
/ / I st o é um bloco de código, por ém funciona com o
/ / se fosse um a m at riz de com andos
B : = { | | x : = 10, y : = 20}

6 .2 .3 . Blocos de Código

Diferent em ent e de um a m at riz, não se pode acessar elem ent os de um bloco de código at ravés
de um índice num érico. Por ém blocos de código são sem elhant es a um a list a de expr essões, e
a um a pequena função.

Ou sej a, podem ser execut ados. Para a ex ecução, ou avaliação, de um bloco de código, dev e-
se ut ilizar a função Eval( ) :

nRes : = Eval( B) = = > 20

Essa função recebe com o parâm et r o um bloco de código e av alias t odas as expressões
cont idas nest e bloco de código, r et ornando o r esult ado da últ im a expr essão avaliada.

Pa ssa n do Pa r â m e t r os

Já que blocos de código são com o pequenas funções, t am bém é possível a passagem de
parâm et ros para um bloco de código. Os parâm et r os devem ser infor m ados ent re as bar ras
vert icais ( | | ) separados por vírgulas, assim com o em um a função.

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

Por ém dev e- se not ar que j á que o bloco de código recebe um parâm et r o, um valor dev e ser
passado quando o bloco de código for avaliado.

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

- 70 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ut iliz a n do Blocos d e Código

Blocos de código podem ser ut ilizados em diver sas sit uações. Geralm ent e são ut ilizados par a
ex ecut ar t ar efas quando ev ent os de obj et os são acionados ou para m odificar o com port am ent o
padrão de algum as funções.

Por exem plo, considere a m at riz abaixo:

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

Est a m at riz pode ser ordenada pelo prim eiro nom e, ut ilizando- se a cham ada da função
asort ( A) , r esult ado na m at riz com os elem ent os ordenados dessa form a:

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

A ordem padrão para a função asort é ascendent e. Est e com port am ent o pode ser m odificado
at ravés da inform ação de um bloco de código que ordena a m at riz de form a descendent e:

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

O bloco de código ( de acordo com a docum ent ação da função asort ) dev e ser escrit o para
aceit ar dois parâm et r os que são os dois elem ent os da m at riz para com paração. Not e que o
bloco de código não conhece que elem ent os est á com parando - a função asort seleciona os
elem ent os ( t alvez ut ilizando o algorit m o QuickSort ) e passa- os para o bloco de código. O bloco
de código com para- os e ret orna v erdadeiro ( .T.) se encont ram na ordem corr et a, ou falso ( .F.)
se não. Se o valor de r et orno for falso, a função asort irá ent ão t rocar os valores de lugar e
seguir com parando o pr óxim o par de valores.
Ent ão, no bloco de código ant erior, a com paração X > Y é verdadeira se os elem ent os est ão
em ordem descendent e, o que significa que o pr im eiro valor é m aior que o segundo.

Para ordenar a m esm a m at riz pelo últ im o nom e, t am bém em ordem descendent e, pode- se
ut ilizar o seguint e bloco de código:

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

Not e que est e bloco de código pr ocura e com para as part es dos caract er es im ediat am ent e
seguint e a um espaço em branco. Depois de ut ilizar esse bloco de código para a função asort ,
a m at riz cont erá:

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

Finalm ent e, para ordenar um sub- elem ent o ( coluna) de um a m at riz por ex em plo, pode- se
ut ilizar o seguint e bloco de código:

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

- 71 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


6 .2 .4 . Funçõe s pa r a m a nipula çã o de blocos de código

A linguagem ADVPL possui diversas funções que auxiliam na m anipulação de blocos de código,
dent re as quais podem os cit ar as m ais ut ilizadas:

 EVAL( )
 D BEV AL( )
 AEV AL( )
EVAL( )

Sin t a x e EVAL( bBloco, x Pa r a m 1 , x Pa r a m 2 , x Pa r a m Z)


A função EVAL( ) é ut ilizada para avaliação diret a de um bloco de código,
ut ilizando as inform ações disponíveis no m esm o de sua execução. Est a
D e scr içã o
função perm it e a definição e passagem de diver sos parâm et ros que serão
considerados na int erpr et ação do bloco de código.

D BEV AL( )

Sin t a x e Ar r a y ( b Bloco, b For , b W h ile )


A função DBEval( ) perm it e que t odos os r egist ro de um a det erm inada t abela
D e scr içã o sej am analisados e para cada r egist ro será ex ecut ado o bloco de código
definido.

AEV AL( )

Sin t a x e AEV AL( a Ar r a y, b Bloco, n I n icio, n Fim )


A função AEVAL( ) per m it e que t odos os elem ent os de um det erm inada array
D e scr içã o sej am analisados e par a cada elem ent o será ex ecut ado o bloco de código
definido.

- 72 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


7 . Funçõe s

A m aior part e das rot inas que quer em os escrever em program as são com post as de um
conj unt o de com andos, rot inas est as que se r epet em ao longo de t odo o
desenvolvim ent o. Um a função nada m ais é do que um conj unt o de com andos que para ser
ut ilizada bast a cham á- la pelo seu nom e.

Para t ornar um a função m ais flexível, ao cham á- la pode- se passar parâm et r os, o quais cont ém
os dados e inform ações que definem o pr ocessam ent o da função.

Os parâm et r os das funções descrit as ut ilizando a linguagem ADVPL são posicionais, ou sej a, na
sua passagem não im port a o nom e da variável e sim a sua posição dent r o da list a de
parâm et ros, o que perm it e execut ar um a função escr ev endo:

Calcula( parA, parB, par C) / / Cham ada da função em um a rot ina

E a fu n çã o e st a r e scr it a :

User Funct ion Calcula( x, y, z)

... Com andos da Função

Ret urn ...

Nest e caso, x assum e o valor de parA, y de par B e z de parC.

A função t am bém t em a faculdade de r et ornar um a variável, podendo inclusive ser um Ar ray .


Para t al encer ra- se a função com :

Re t u r n ( ca m po)

Assim A := Calcula( parA,parB,parC) at ribui à A o cont eúdo do r et orno da função


Calcula.

No ADVPL exist em m ilhares de funções escrit as pela equipe de Tecnologia Microsiga,


pelos analist as de supor t e e pelos pr óprios usuários. 20

Exist e um dit ado que diz que:

“ Vale m ais um pr ogram ador que conhece t odas as funções disponíveis em


um a linguagem do que aquele que, m esm o sendo gênio, reinv ent a a roda a
cada nov o program a” .

No DEM ( Docum ent ação Elet r ônica Microsiga) m ais de 500 est ão docum ent adas, e est e
núm ero t ende a aum ent ar exponencialm ent e com os novos pr ocessos de docum ent ação que
est ão em im plant ação na Tecnologia e I nt eligência Prot heus.

O obj et ivo do cur so é apresent ar, dem onst r ar e fixar a ut ilização das principais funções,
sint axes e est rut uras ut ilizadas em ADVPL.

No ADVPL, at é os pr ogram as cham ados do m enu são funções, sendo que em um reposit ório
não podem hav er funções com o m esm o nom e, e para perm it ir que os usuários e analist as

- 73 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


possam desenvolver suas próprias funções sem que as m esm as conflit em com as j á
disponíveis no am bient e ERP, foi im plem ent ada pela Tecnologia Microsiga um t ipo especial de
função denom inado “ User Funct ion” .

Nos t ópicos a seguir serão det alhados os t ipos de funções disponíveis na linguagem ADVPL,
suas form as de ut ilização e r espect ivas diferenças.

7 .1 . Tipos e e scopos de funçõe s

Em ADVPL podem ser ut ilizados os seguint es t ipos de funções:

 Fu n ct ion ( )
 Use r Fu n ct ion ( )
 St a t ic Fu n ct ion ( )
 M a in Fu n ct ion ( )

Fu n ct ion ( )

Funções ADVPL convencionais, rest rit as ao desenv olvim ent o da área de I nt eligência Prot heus
da Microsiga.

O int erpr et ador ADVPL dist ingue nom es de funções do t ipo Funct ion( ) com at é dez caract eres.
A part ir do décim o car act er, apesar do com pilador não indicar quaisquer t ipos de er ros, o
int erpr et ador ignorará os dem ais caract eres.

Ex e m plo:

/ / Font e MATA100I NCL.PRW


# I NCLUDE " pr ot heus.ch"

Funct ion MATA100I NCL01( )

ALERT( " 01" )


Ret urn

Funct ion MATA100I NCL02( )

ALERT( " 02" )


Ret urn

Ao ex ecut ar a função MATA100I NCL01( ) será exibida a m ensagem “ 01” , m as ao execut ar a


função MATA100I NCL02( ) t am bém será exibida a m ensagem “ 01” , pois o int erpret ador
considera o nom e da função com o “ MATA100I NC” .

1. Funções do t ipo Funct ion( ) som ent e podem ser ex ecut adas at ravés
dos m ódulos do ERP.

2. Som ent e poder ão ser com piladas funções do t ipo Funct ion( ) se o MP-
I DE possuir um a aut orização especial fornecida pela Microsiga.

3. Funções do t ipo Funct ion( ) são acessíveis por quaisquer out r as


funções em uso pela aplicação.

- 74 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Use r Fu n ct ion ( )

As “ User Defined Funct ions” ou funções definidas pelos usuários, são t ipos especiais de funções
im plem ent ados pelo ADVPL para garant ir que desenvolvim ent os específicos não r ealizados pela
I nt eligência Prot heus da Microsiga sobr eponham as funções padrões desenvolvidas para o ERP.

O int erpr et ador ADVPL considera que o nom e de um a User Funct ion é com post o pelo nom e
definido para a função precedido dos caract er es “ U_” . Dest a form a a User Funct ion XMAT100I
será t rat ada pelo int erpret ador com o “ U_XMAT100I ” .

1. Com o ocorr e o acr éscim o dos caract er es “ U_” no nom e da função e o


int erpr et ador considera apenas os dez prim eiros caract er es da função
para sua difer enciação, é r ecom endado que os nom es das User
Funct ions t enham apenas oit o caract er es para evit ar r esult ados
indesej ados durant e a execução da aplicação.

2. Funções do t ipo User Funct ion são acessíveis por quaisquer out ras
funções em uso pela aplicação, desde que em sua cham ada sej am
ut ilizados os caract er es “ U_” em conj unt o com o nom e da função.

As User Funct ions podem ser execut adas a par t ir da t ela inicial do client do
ERP ( Microsiga Prot heus Rem ot e) , m as as aplicações que pret endem
disponibilizar est a opção devem possuir um pr eparo adicional de am bient e.

Para m aior es inform ações consult e no DEM o t ópico sobr e pr eparação de


am bient e e a docum ent ação sobr e a função RpcSet Env( ) .

St a t ic Fu n ct ion ( )

Funções ADVPL t radicionais, cuj a visibilidade est á rest rit a as funções descrit as no m esm o
arquivo de código font e no qual est ão definidas.

Ex e m plo:

/ / Font e FI NA010.PRW

Funct ion FI NA010( )

CriaSx1( “ FI N010” )
Ret urn

St at ic Funct ion CRI ASX1( )


/ / Font e FI NA020.PRW

Funct ion FI NA020( )

CriaSx1( “ FI N020” )
Ret urn

St at ic Funct ion CRI ASX1( )

- 75 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


No ex em plo acim a, exist em duas funções denom inadas CRI ASX1( ) definidas em arquivos de
código font e dist int os: FI NA010.PRW e FI NA020.PRW.

A função FI NA010( ) t erá visibilidade apenas da função CRI ASX1( ) definida no arquivo de
código font e FI NA010.PRW, sendo que o m esm o ocor re com a função FI NA020( ) .

Est e r ecur so perm it e isolar funções de uso exclusivo de um arquivo de código font e, evit ando a
sobr eposição ou duplicação de funções na aplicação.

Nest e cont ext o as St at ic Funct ions( ) são ut ilizadas para:

1. Padronizar o nom e de um a det erm inada função, que possui a m esm a finalidade, m as
que sua im plem ent ação pode variar de acordo com a necessidade de função principal /
aplicação.

2. Redefinir um a função padrão da aplicação, adequando- a as necessidades específicas de


um a função principal / aplicação.

3. Prot eger funções de uso específico de um arquivo de código font e / função principal.

O am bient e de desenv olvim ent o ut ilizado na aplicação ERP ( MP- I DE) valida
se exist em Funct ions( ) , Main Funct ions( ) ou User Funct ions( ) com o m esm o
nom e m as em arquivos de código font es dist int os, evit ando a duplicidade ou
sobr eposição de funções.

M a in Fu n ct ion ( )

Main Funct ion( ) é out ro t ipo de função especial do ADVPL incorporado para perm it ir
t rat am ent os difer enciados na aplicação ERP.

Um a Main Funct ion( ) t em a car act eríst ica de poder ser ex ecut ada at rav és da t ela inicial de
parâm et ros do client do ERP ( Micr osiga Pr ot heus Rem ot e) , da m esm a form a que um a User
Funct ion, com a diferença que as Main Funct ions som ent e podem ser desenvolvidas com o uso
da aut orização de com pilação, t ornando sua ut ilização r est rit a a I nt eligência Prot heus da
Microsiga.

Na aplicação ERP é com um o uso das Main Funct ions( ) nas seguint es sit uações:

1. Definição dos m ódulos da aplicação ERP: Main Funct ion Sigaadv( )

2. Definição de at ualizações e updat es: AP710TOMP811( )

3. At ualizações específicas de m ódulos da aplicação ERP: Updat eATF( )

- 76 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


7 .2 . Pa ssa ge m de pa r â m e t r os e nt r e fun çõe s

Com o m encionado ant eriorm ent e os parâm et r os das funções descrit as ut ilizando a linguagem
ADVPL são posicionais, ou sej a, na sua passagem não im port a o nom e da variável e sim a
sua posição dent r o da list a de parâm et ros.

Com plem ent ando est a definição, podem ser ut ilizadas duas form as dist int as de passagens de
parâm et ros para funções descrit as na linguagem ADVPL:

 Passagem de parâm et ros por cont eúdo


 Passagem de parâm et ros por referência

Pa ssa ge m de p a r â m e t r os por con t e ú do

A passagem de parâm et ros por cont eúdo é a form a convencional de definição dos parâm et ros
recebidos pela função cham ada, na qual a função recebe os cont eúdos passados pela função
cham adora, na ordem com os quais são inform ados.

User Funct ion CalcFat or ( nFat or)

Local nCnt
Local nResult ado : = 0

For nCnt : = nFat or To 1 St ep - 1


nResult ado * = nCnt
Next nCnt

Alert ( " O fat orial de " + cValToChar( nFat or) + ;


" é " + cValToChar( nResult ado) )

Ret urn

Avaliando a função CalcFat or( ) descrit a ant eriorm ent e podem os verificar que a m esm a r ecebe
com o par âm et ro para sua ex ecução a variável nFat or.

Com base nest a função podem os descr ev er duas form a de passagem de parâm et r os por
cont eúdo:

 Pa ssa ge m de con t e ú d os d ir e t os
 Pa ssa ge m de v a r iá v e is com o con t e ú dos

Ex e m plo 0 1 – Pa ssa g e m d e con t e ú dos d ir e t os

User Funct ion DirFat or( )

Local nResult ado : = 0

nResult ado : = CalcFat or ( 5 )

- 77 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A passagem de cont eúdos diret os im plica na definição explícit a do valor do parâm et ro na
ex ecução da cham ada da função. Nest e caso foi inform ado o cont eúdo 5 ( num érico) com o
cont eúdo para o prim eiro parâm et ro da função CalcFat or.

Com o a linguagem ADVPL t r at a os parâm et r os de for m a posicional, o cont eúdo 5 será at ribuído
diret am ent e a variável definida com o prim eiro parâm et ro da função cham ado, no nosso caso
nFat or.

Por ser um a at ribuição de par âm et ros por cont eúdo, o int erpret ador da linguagem basicam ent e
ex ecut a um a operação de at ribuição norm al, ou sej a, nFat or : = 5.

Duas caract eríst icas da linguagem ADVPL t or nam necessária um a at enção


especial na cham ada de funções:

1. A linguagem ADVPL não é um a linguagem t ipada, de for m a que as


variáveis não t em um t ipo previam ent e definido, aceit ando o cont eúdo
que lhes for im post o at r avés de um a at ribuição.

2. Os parâm et ros de um a função são at ribuídos de acordo com a ordem


com os quais são definidos na cham ada da m esm a. Não é realizada
nenhum t ipo de consist ência em relação aos t ipos dos cont eúdos e
obrigat oriedade de parâm et r os nest a ação.

Os par âm et ros de um a função são caract erizados com o variáveis de escopo


LOCAL para efeit o de ex ecução.

Dest a form a os m esm os não dev em ser definidos novam ent e com o LOCAL na
área de definição e inicialização de variáveis, pois caso ist o ocor ra haverá a
perda dos valor es r ecebidos pela redefinição das variáveis na função.

Caso sej a necessário garant ir um cont eúdo padrão para um det er m inado
parâm et ro dev erá ser ut ilizado o ident ificador DEFAULT conform e det alhado
no t ópico “ Trat am ent o de valor es padr ões para parâm et ros de funções” .

Ex e m plo 0 2 – Pa ssa ge m d e v a r iá ve is com o con t e ú dos

User Funct ion DirFat or( )

Local nResult ado : = 0


Local nFat orUser : = 0

nFat orUser : = Get Fat or ( ) / / Função ilust rat iva na qual o usuário inform a o fat or a ser ut ilizado.

nResult ado : = CalcFat or ( n Fa t or Use r )

A passagem de cont eúdos com o variáveis im plica na ut ilização de variáveis de apoio par a
ex ecut ar a cham ada de um a função. Nest e caso foi inform ada a variável nFat orUser, a qual
será definida pelo usuário at ravés da função ilust rat iva Get Fat or( ) . O uso de variáveis de apoio
flexibiliza a cham ada de out ras funções, pois elas serão param et rizadas de acordo com as
necessidades daquele processam ent o específico no qual se encont ra a função cham adora.

- 78 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Com o a linguagem ADVPL t rat a os parâm et r os de form a posicional, o cont eúdo da variável
nFat orUser será at ribuído diret am ent e a variável definida com o prim eiro parâm et r o da função
cham ado, no nosso caso nFat or.

Por ser um a at ribuição de par âm et ros por cont eúdo, o int erpret ador da linguagem basicam ent e
ex ecut a um a operação de at ribuição norm al, ou sej a, nFat or : = nFat or User.

A passagem de parâm et r os não necessit a que as variáveis inform adas na


função cham adora t enham os m esm os nom es das v ariáveis ut ilizadas na
definição de parâm et r os da função cham ada.

Dest a form a podem os t er:

User Funct ion DirFat or( )

Local nFat orUser : = Get Fat or( )

nResult ado : = CalcFat or ( n Fa t or Use r )

...

Funct ion CalcFat or( n Fa t or )


...

As variáveis nFat orUser e nFat or podem t er nom es difer ent es pois o


int erpr et ador fará a at ribuição de cont eúdo com base na ordem dos
parâm et ros e não pelo nom e das variáveis.

Pa ssa ge m de p a r â m e t r os por r e fe r ê n cia

A passagem de par âm et r os por referência é um a t écnica m uit o com um nas linguagens de


program ação a qual per m it e que variáveis de escopo LOCAL t enham seu cont eúdo m anipulado
por funções específicas, m ant endo o cont r ole dest as variáveis rest rit o a função que as definiu e
as funções desej adas pela aplicação.

A passagem de parâm et ros por referência ut iliza o conceit o de que um a variável é um a área
de m em ória e port ant o passar um parâm et ro por referência nada m ais é do que ao invés de
passar o cont eúdo par a a função cham ada, passar qual a área de m em ória ut ilizada pela
variável passada.

- 79 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Pa ssa gem de pa r â m e t r os t r a dicion a l – Du a s va r iá ve is x Du a s á r e a s de m e m ór ia

Pa ssa gem de pa r â m e t r os por r e fe r ê n cia – D ua s va r iá ve is x u m a ún ica á r e a de m e m ór ia

- 80 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Dest a form a a função cham ada t em acesso não apenas ao cont eúdo, m as a variável em si,
pois a área de m em ória é a variável, e qualquer alt eração nest a será visível a função
cham adora quando t iver o r et orno da função cham adora.

Tr a t a m e n t o d e con t e ú dos p a dr õe s p a r a pa r â m e t r os d e f u n çõe s

O t rat am ent o de cont eúdos padrões para parâm et r os de funções é m uit o ut ilizado nas funções
padrões da aplicação ERP, de for m a a garant ir a corr et a ex ecução dest as funções por qualquer
função cham adora, evit ando sit uações de ocor rências de err os pela falt a da definição de
parâm et ros necessários a cor ret a ut ilização da função.

A linguagem ADVPL não obriga a passagem de t odos os parâm et r os descrit os


na definição da função, sendo que os parâm et r os não inform ados serão
considerados com cont eúdo nulo.

Dest a form a o uso do ident ificador DEFAULT perm it e ao desenvolvedor garant ir que na
ut ilização da função det erm inados parâm et ros t erão o valor com um t ipo adequado a função.

Ex e m plo:

User Funct ion CalcFat or ( nFat or)

Local nCnt
Local nResult ado : = 0
Default nFat or : = 1

For nCnt : = nFat or To 1 St ep - 1


nResult ado * = nCnt
Next nCnt

Ret urn nResult ado

No ex em plo descrit o, caso o parâm et r o nFat or não sej a inform ado na função cham adora, o
m esm o t erá seu cont eúdo definido com o 1.

- 81 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Se est e t r at am ent o não fosse realizado e com isso o parâm et r o nFat or não fosse inform ado,
ocor reria o seguint e ev ent o de err o:

Ex e m plo:

User Funct ion CalcFat or ( nFat or)

Local nCnt
Local nResult ado : = 0

For nCnt : = nFat or To 1 St ep - 1 / / nFat or est á com o Nulo, port ando nCnt é nulo
nResult ado * = nCnt
Next nCnt / / Ao efet uar o Next , o int erpret ador realiza a ação nCnt + = 1.

Ret urn nResult ado

Com o o int erpret ador realizará a ação nCnt + = 1, e o cont eúdo da variável nCnt é nulo
ocor rerá o er ro de “ t y pe m ism at h on + = , expect ed N  U” pois os t ipos das variáveis
envolvidos na operação são diferent es: nCnt  nulo ( U) e 1  num érico ( N) .

Caso o parâm et r o que possui a opção DEFAULT descrit a no font e sej a


inform ado, a linha de DEFAULT não será execut ada, m ant endo dest a form a o
cont eúdo passado pela função cham adora.

- 82 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


8 . D ir e t iva s de com pila çã o

O com pilador ADVPL possui um a funcionalidade denom inada pré- pr ocessador, o qual nada
m ais é do que um program a que exam ina o program a font e escrit o em ADVPL e execut a cert as
m odificações nele, baseadas nas Dir et ivas de Com pilação.

As diret ivas de com pilação são com andos que não são com pilados, sendo dirigidos ao pr é-
processador, o qual é ex ecut ado pelo com pilador ant es da ex ecução do processo de
com pilação propriam ent e dit o.

Port ant o, o pr é- pr ocessador m odifica o program a font e, ent regando para o com pilador um
program a m odificado de acordo com as diret ivas de com pilação, as são iniciadas pelo caract er e
“# ”.

As diret ivas podem ser colocadas em qualquer part e do program a, sendo que as
im plem ent adas pela linguagem ADVPL são:

 # I N CLUD E
 # D EFI N E
 # I FD EF
 # I FN D EF
 # ELSE
 # EN D I F
 # COM M AN D

As diret ivas de com pilação t am bém são conhecidas com o UDC – User Defined
Com m ands.
Le m br e - se

D ir e t iv a : # I N CLUD E

A diret iva # I N CLUD E indica em que arquivo de ext ensão “ CH” ( padrão ADVPL) est ão os UDCs
a ser em ut ilizados pelo pré- pr ocessador.

A aplicação ERP possui diversos includes, os quais devem ser ut ilizados segundo a aplicação
que será desenv olvida, o que perm it irá a ut ilização de r ecursos adicionais definidos para a
linguagem , im plem ent ados pela área de Tecnologia da Microsiga.

Os includes m ais ut ilizados nas aplicações ADVPL desenvolvidas para o ERP são:

 PROTH EUS.CH : diret ivas de com pilação padrões par a a linguagem . Cont ém a
especificação da m aior ia das sint axes ut ilizadas nos font es, inclusive perm it indo a
com pat ibilidade da sint axe t radicional do Clipper para os nov os r ecur sos im plem ent ados
no ADVPL.

- 83 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


O include PROTHEUS.CH ainda cont ém a r eferência a out ros includes ut ilizadas pela
linguagem ADVPL que com plem ent am est a funcionalidade de com pat ibilidade com a
sint axe Clipper, t ais com o:

o D I ALOG.CH
o FON T.CH
o I N I .CH
o PTM EN U.CH
o PRI N T.CH

A ut ilização do include “ prot heus.ch” nos font es desenv olvidos para a


aplicação ERP Pr ot heus é obrigat ória e necessária ao cor ret o
Fiqu e a t e nt o
funcionam ent o das aplicações.

 AP5 M AI L.CH : Perm it e a ut ilização da sint axe t radicional na definição das seguint es
funções de envio e r ecebim ent o de e- m ail:

o CONNECT SMTP SERVER


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

 TOPCON N .CH : Perm it e a ut ilização da sint axe t radicional na definição das seguint es
funções de int egração com a ferram ent a TOPCONNECT ( MP10 – DbAcess) :

o TCQUERY

 TBI CON N .CH : Perm it e a ut ilização da sint axe t radicional na definição de conex ões com
a aplicação Serv er do am bient e ERP, at rav és da seguint es sint axes:

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

 XM LX FUN .CH : Perm it e a ut ilização da sint axe t radicional na m anipulação de arquivos e


st rings no padrão XML, at ravés das seguint es sint axes:

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

- 84 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


o ADDI TEM TAG
o ADDNODE NODE
o DELETENODE

Os recursos de t rat am ent os de e- m ails, int egração com a ferr am ent a


TOPCONNECT ( DbAcess) , pr eparação de am bient es e m anipulação de
arquivos e st rings do padrão XML serão abordados no curso de ADVPL
Avançado.

O diret ório de includes dev e ser especificado no am bient e de


desenvolvim ent o do ERP Prot heus ( MP- I DE) para cada configuração de
com pilação disponível.

Caso o diret ório de includes não est ej a inform ado, ou est ej a infor m ado
incorret am ent e será exibida um a m ensagem de err o inform ando:

“N ã o foi possív e l cr ia r o a r qu ivo < ca m in h o\ n om e > .ERX”

As funções desenvolvidas para a aplicação ERP cost um am ut ilizar includes


para definir o cont eúdo de st rings e variáveis diversas ut ilizadas pela
aplicação em diferent es idiom as. Dest a form a é norm al verificar que um
font e possui um arquivo “ .CH” com o m esm o nom e, o que caract eriza est e
t ipo de include.

D ir e t iv a : # D EFI N E

A diret iva # DEFI NE per m it e que o desenv olvedor crie novos t erm os para ser em ut ilizadas no
código font e. Est e t er m o t em o efeit o de um a variável de escopo PUBLI C, m as que afet a
som ent e o font e na qual o # DEFI NE est á definido, com a caract er íst ica de não perm it ir a
alt eração de seu cont eúdo.

Dest a form a um t er m o definido at rav és da diret iva # DEFI NE pode ser considerado com o um a
const ant e.

Os arquivos de include definidos para os font es da aplicação ERP cont ém


diret ivas # DEFI NE para as st rings de t ext os de m ensagens exibidas para os
usuários nos t r ês idiom as com os quais a aplicação é dist ribuída: Port uguês,
I nglês e Espanhol.

Por est a razão a aplicação ERP possui t rês reposit órios dist int os para cada
um a das bases de dados hom ologadas pela Microsiga, pois cada com pilação
ut iliza um a diret iva referent e ao seu idiom a.

- 85 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D ir e t iv a s: # I FD EF, I FN D EF, # ELSE e # EN D I F

As diret ivas # I FDEF, # I FNDEF, # ELSE e # ENDI F perm it em ao desenvolvedor criar font es
flexíveis e sensíveis a det erm inadas configurações da aplicação ERP.

At ravés dest as diret ivas, podem ser verificados parâm et r os do sist em a, t ais com o o idiom a
com o qual est á param et rizado e a base de dados ut ilizada para arm azenar e ger enciar as
inform ações do ERP.

Dest a form a, ao invés de escr ev er dois ou m ais códigos font es que r ealizam a m esm a função,
m as ut ilizando recursos dist int os para cada base de dados ou exibindo m ensagem para cada
um dos idiom as t rat ados pela aplicação, o desenvolvedor pode pr eparar seu código font e para
ser avaliado pelo pré- processador, o qual irá gerar um código com pilado de acordo com a
análise dos parâm et ros de am bient e.

Est as diret ivas de com pilação est ão norm alm ent e associadas as seguint es verificações de
am bient e:

 I diom a: v erifica as variáveis SPANI SH e ENGLI SH, disponibilizadas pela aplicação. O


idiom a port uguês é det erm inado pela exceção:

# I FDEF SPANI SH
# DEFI NE STR0001 “ Hola ! ! ! ”
# ELSE

# I FDEF ENGLI SH
# DEFI NE STR0001 “ Hello ! ! ! ”
# ELSE
# DEFI NE STR0001 “ Olá ! ! ! ”
# ENDI F

# ENDI F

Apesar da est rut ura sem elhant e ao I F- ELSE- ELSEI F- ENDI F, não exist e
a diret iva de com pilação # ELSEI F, o que t or na necessário o uso de
diversos # I FDEFs par a a m ont agem de um a est rut ura que seria
facilm ent e solucionada com I F- ELSE- ELSEI F- ENDI F.

A aplicação ERP disponibiliza a variável de escopo PUBLI C -


__LANGUAGE, a qual cont ém um a st ring que ident ifica o idiom a em
uso pelo sist em a, cuj o os cont eúdos possíveis são:

 “ PORTUGUESE”
 “ SPANI SH”
 “ ENGLI SH”

- 86 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Banco de Dados: verifica as v ariáveis AXS e TOP para det erm inar se o banco de dados
em uso pela aplicação est á no form ado I SAM ( DBF, ADS, CTREE, et c.) ou se est á
ut ilizando a fer ram ent a TOPCONNECT ( DbAcess) .

# I FDEF TOP

cQuery : = “ SELECT * FROM ” + RETSQLNAME( “ SA1” )


dbUseAr ea( .T., " TOPCONN" , TcGenQr y( ,,cQuer y) , “ SA1QRY” ,.T.,.T.)

# ELSE
DbSelect Ar ea( “ SA1” )
# ENDI F

Os bancos de dados padrão AS400 não perm it em a ex ecução de quer ies


no form at o SQLANSI at r avés da ferram ent a TOPCONNECT ( DbAcess) .

Dest a form a é necessário r ealizar um a v erificação adicional ao # I FDEF


TOP ant es de ex ecut ar um a query, que no caso é r ealizada at ravés do
uso da função TcSrv Type( ) , a qual ret orna a st r ing “ AS/ 400” quando est e
for o banco em uso.

Para est es bancos deve ser ut ilizada a sint axe ADVPL t radicional.

D ir e t iv a : # COM M AN D

A diret iva # COMMAND é ut ilizada principalm ent e nos includes da linguagem ADVPL para
efet uar a t radução de com andos em sint axe CLI PPER para as funções im plem ent adas pela
Tecnologia Microsiga.

Est a diret iva perm it e que o desenv olvedor defina para o com pilador com o um a expressão
dev erá ser int erpret ada.

Tr e ch o do a r qu ivo PROTH EUS.CH

# xcom m and @ < nRow > , < nCol> SAY [ < oSay> < label: PROMPT,VAR > ] < cText > ;
[ PI CTURE < cPict > ] ; [ < dlg: OF,WI NDOW,DI ALOG > < oWnd> ] ;
[ FONT < oFont > ] ; [ < lCent er: CENTERED, CENTER > ] ;
[ < lRight : RI GHT > ] ; [ < lBorder: BORDER > ] ;
[ < lPixel: PI XEL, PI XELS > ] ; [ < color: COLOR,COLORS > < nClrTex t > [ ,< nClrBack> ] ] ;
[ SI ZE < nWidt h> , < nHeight > ] ; [ < design: DESI GN > ] ;
[ < updat e: UPDATE > ] ; [ < lShaded: SHADED, SHADOW > ] ;
[ < lBox: BOX > ] ; [ < lRaised: RAI SED > ] ;
=> ;
[ < oSay> : = ] TSa y( ) :N e w ( < nRow> , < nCol> , < { cText } > ,;
[ < oWnd> ] , [ < cPict > ] , < oFont > , < .lCent er.> , < .lRight .> , < .lBorder.> ,;
< .lPixel.> , < nClrTex t > , < nClrBack> , < nWidt h> , < nHeight > ,;
< .design.> , < .updat e.> , < .lShaded.> , < .lBox.> , < .lRaised.> )

At ravés da diret iva # COMMAND, o desenv olvedor det erm inou as regras para que a sint axe
t radicional da linguagem CLI PPER para o com ando SAY fosse conver t ida na especificação de
um obj et o TSAY( ) do ADVPL.

- 87 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ÓD ULO 0 3 : De se nvolve ndo pe que na s cust om iza çõe s
9 . AD VPL e o ERP M icr osiga Pr ot he us

O ADVPL ( Advanced Pr ot heus Language) é um a linguagem de program ação desenvolvida pela


Microsiga e que cont ém t odas as inst ruções e funções necessárias ao desenv olvim ent o de
um sist em a, independent e de sua com plexidade.

O PROTHEUS, por out r o lado, é um a plat afor m a t ecnológica que engloba um Servidor de
Aplicação, um Dicionário de Dados e as I nt erfaces para conex ão com o usuário. É o Prot heus
que execut a o código ADVPL e o devido acesso à base da dados.

O Pr ot heus é com post o pelo ERP ( que engloba, além das funcionalidades descrit as nos
capít ulos ant eriores, m ais de t rint a vert icais aplicadas a áreas específicas de negócios) e
pelo Configurador ( program a que perm it e cust om izar o sist em a às necessidades do usuário
de form a fácil) .

9 .1 . O Am bie nt e Pr ot he us

O Pr ot heus é const it uído de um conj unt o de Soft war es que com põem as cam adas de
funcionalidades básicas aos serviços de aplicação, int erface, banco de dados e reposit ório,
conform e o diagram a da figura abaixo:

Figu r a : Ca m a da s b á sica s do a m bie n t e Pr ot h e u s

Para ex ecut ar um progr am a desenv olvido em ADVPL, é pr eciso ant es de m ais nada escr ev ê- lo
e com pilá- lo. Est e procedim ent o é feit o at ravés da ferram ent a TOTVS DevSt udio do
Prot heus ( Tot vs Dev elopm ent St udio) .

O obj et ivo do TOTVS DevSt udio é facilit ar a t arefa de escr ev er program as: at rav és de cor es,
indica se a palavra escrit a é um a inst rução, um a variável ou um com ent ário; organiza a
bibliot eca de program as em pr oj et os e adm inist ra o reposit ório de obj et os; apont a er ros de

- 88 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


sint axe; perm it e o debug ( ex ecução passo a passo do pr ogram a, v erificando o cont eúdo das
variáveis) e fornece assist ent es ( m odelos) de pr ogram as.

Figu r a : M a n u t e n çã o n o r e posit ór io de ob j e t os

Após com pilar o program a, o result ado é um obj et o, o qual é carregado na m em ória ficando
disponível para sua execução at rav és da aplicação PROTHEUS.

O obj et o não é um ex ecut áv el, ou sej a, não est á convert ido para a linguagem nat iva do
equipam ent o. Quem faz esse t rabalho é o Prot heus Serv er em t em po de execução. Por isso, o
Prot heus Ser ver est á sem pre pr esent e na m em ória em t em po de execução, perm it indo:

 Prot eger o pr ogram a font e, evit ando que sej a alt erado indevidam ent e, pois som ent e os
obj et os são dist ribuídos com um a ex ecução m ais rápida em função da com pilação no
DEV- St udio;

 Flexibilização à plat afor m a de t rabalho. Assim , um m esm o program a pode rodar em


am bient es Windows, Linux ou m esm o em um Hand Held, ficando a t arefa de adequação
para o Servidor Pr ot heus;

 Que o sist em a cresça de form a ilim it ada, pois os obj et os ficam fora do ex ecut áv el;

 O uso de m acr o subst it uições, ou sej a, o uso de r ot inas ext eriores ao sist em a
arm azenadas em arquivos e que podem facilm ent e alt eradas pelo usuár io, pois o Ser ver
t am bém int erpr et a o código font e em t em po de ex ecução.

- 89 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : D ia gr a m a e sq u e m á t ico de ob j e t os Pr ot h e u s

O Reposit ório de Obj et os é a bibliot eca de obj et os de t odo o am bient e Pr ot heus, incluindo
t ant o os obj et os im plem ent ados par a as funcionalidades básicas do ERP com o aqueles gerados
pelos usuários. A figura abaixo dem onst ra a est rut ura e a int erconexão ent re as várias
cam adas.

Figu r a : Est r u t u r a de in t e r con e x ã o d o Pr ot h e u s

- 90 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ela dem onst ra t am bém que os dados a ser em processados podem est ar arm azenados em
bases I SAM ou em Bancos de Dados padrão SQL. No prim eiro caso o serv er com unica- se
diret am ent e com os dados. Em Bancos SQL é a int erface TOPCONNECT / DBACCESS que
conv ert e os com andos de ent rada e saída, adequando- os ao SQL ut ilizado ( SQl Server
Microsoft , Oracle, DB2, et c.) .

Um a vez t erm inado o processam ent o do obj et o cham ado, o ele é descart ado da m em ória, ou
sej a, o Prot heus é um sist em a que pode cr escer de form a ilim it ada pois os obj et os,
arm azenados em um reposit ório prat icam ent e não ocupam espaço no HD ( Hard Disk) .

O Pr ot heus é um a plat afor m a m ult icam ada. Ent re as diversas cam adas, t em os a int erface de
apresent ação ao usuário ( Rem ot e) , o t rat am ent o dado para as r egras de negócio
im plem ent adas ( Serv er) , o acesso aos obj et os do reposit ório ( Ser ver) , o acesso aos
dados disponíveis no Banco de Dados ( Ser ver ou TOPCONNECT / DBACCESS ) e ao
ger enciam ent o de ser viços WEB ( Ser ver) . Nest e processo, o Prot heus possui, basicam ent e,
quat ro aplicat ivos ut ilizados com difer ent es finalidades:

 Pr ot h e u s Se r ve r / TOTVS App Se r ve r : Responsável pela com unicação ent re o client e,


o banco de dados e o RPO. O nom e do ex ecut áv el depende da v er são do sist em a
( TOTVSAPPSERVER.EXE) sendo que as plat aform as I SAM suport adas pelo Pr ot heus
Ser ver são DBF e CTREE.

 Pr ot he u s Re m ot e / TOTVS Sm a r t Clie n t : I nst alado no Serv er ou na est ação. O


nom e t am bém depende da v er são do sist em a ( TOTVSSMARTCLI ENT.EXE) .

 TopCon n e ct / D b Acce ss: Responsável pela conversão dos com andos de banco de
dados, adequando- os ao SQL ut ilizado.

 Pr ot h e u s M on it or / TOTVS M on it or : Progr am a de análise que verifica quem est á


usando o sist em a e possibilit a o envio de m ensagens ou m esm o derrubar conex ões
( TOTVSMONI TOR.EXE) .

Alguns nom es r efer em - se a um conj unt o de pr ogram as para facilit ar a sua ident ificação:

 RPO: É o arquivo binário do APO ( Advanced Prot heus Obj ect s) , ou sej a, os obj et os.

 Bu ild: Ex ecut áv eis, DLLs e o RPO com plet o.

 Pa t ch : At ualizações pont uais do RPO, aplicadas por m eio do I DE.

 Upd a t e : Pacot e de at ualização para o r eposit ório ( RPO) liberado periodicam ent e
cont endo t odas as adequações e m elhorias disponibilizadas para o sist em a em um
det erm inado período, sendo não cum ulat ivo, aplicadas por m eio do DEV- St udio.

A int erface de apr esent ação é r ealizada pelo Sm art Client que pr ocessa a part e da est ação,
basicam ent e, t ela e t eclado. Pode est ar gravado no Serv er e ser car regado via rede para a
m em ória da est ação. Ou, de pr eferência, deve ficar ar m azenado no HD da est ação. Pode
t am bém ser carr egado pelo I nt ernet Explorer, rodando dent r o do próprio brow ser com o
Sm art Client Act iveX e perm it indo o acesso ao Prot heus Serv er pela I nt ernet , com as m esm as
funcionalidades do Sm art Client , sendo que o brow ser precisa supor t ar o uso da t ecnologia
Act iveX.

Caso exist a algum Firewall ou Proxy ent r e o WEB Serv er e o Br owser que vai acessar o
Sm art Client Act iveX, eles deverão ser configurados para perm it ir o seu download.

- 91 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


9 .2 . Or ga niza çã o e configur a çã o inicia l do a m bie nt e Pr ot he us

O Prot heus ocupa um a past a que t em a seguint e est rut ura:

Figu r a : Est r u t u r a bá sica d a s p a st a s do Pr ot h e u s

 APO: Cont ém o arquivo RPO, r eposit ório de obj et os do Pr ot heus.


 SM ARTCLI EN T: Reúne um conj unt o de arquivos ex ecut áv eis, dll´ s e arquivos de
configuração do sist em a, para possibilit ar o acesso ao servidor.
 APPSERVER: Reúne um conj unt o de ex ecut áveis, dll´ s e arquivos de configuração do
sist em a que com põem o servidor.
 I N CLUD E: Cont ém as bibliot ecas necessárias para a com pilação de program as
Prot heus.
 D ATA: Cont ém a base de dados no caso de ver são I SAM.
 SAM PLES: Ofer ece um conj unt o de pr ogram as ex em plo e arquivos ADVPL padr ões da
Microsiga.
 SPOOL: Nest a past a são gravados os relat órios gerados em disco pelo sist em a
Prot heus.
 SYSTEM : Cont ém os arquivos de m enus, os arquivos de configurações e os arquivos
de cust om izações ( SXs) do sist em a Prot heus.

- 92 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 SYSTEM LOAD : Cont ém o dicionário de dados em form at o TXT. É nest e arquivo que
est ão t odos os padrões e form at os para a ger ação dos arquivos de configurações e de
cust om izações ( SXs) , conform e a localização de país definida pelo usuário na ent rada
do sist em a.
 M Y PROJECTS: Suger e- se a criação dest a past a para arm azenar pr oj et os e font es das
cust om izações realizadas pelo usuário.
 UPD ATES: Suger e- se est a past a para o ar m azenam ent o das at ualizações a ser em
aplicadas no sist em a Pr ot heus.

Apesar da est rut ura ilust rada ant eriorm ent e indicar que as past as est ão subordinadas à past a
PROTHEUS, é possível que algum as delas possam est ar em m áquinas diferent es ou at é m esm o
em am bient es com put acionais diferent es.

Figu r a : For m a s d e in st a la çã o e u so do Pr ot h e u s

- 93 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Para isso, é necessário configurar, ou sej a, infor m ar ao Prot heus onde est á cada um a delas.
Esse t ipo de inform ação const a nos arquivos de parâm et r os de configuração do sist em a
( TOTVSAPPSERVER.I NI e TOTVSSMARTCLI ENT.I NI ) exist ent es nas respect ivas past as
APPSERVER e SMARTCLI ENT.

Os parâm et r os do TOTVSAPPSERVER.I NI são lidos pelo program a TOTVSAPPSERVER.EXE logo


no início de sua ex ecução. O m esm o pr ocedim ent o ocorr e em r elação aos parâm et r os do
TOTVSSMARTCLI ENT.I NI pelo pr ogram a TOTVSSMARTCLI ENT.EXE. A execução desses dois
program as é feit a por m eio de ação do usuário, facilit ada pelos at alhos TOTVS APPSERVER e
TOTVS SMARTCLI ENT.

Figu r a : Lin k s dos p a r â m e t r os de con fig u r a çã o

Para que o TOTVS AppServ er e o TOTVS Sm art Client sej am execut ados, os arquivos
TOTVSAPPSERVER.I NI e TOTVSSMARTCLI ENT.I NI dev em est ar disponíveis nas respect ivas
past as APPSERVER e SMARTCLI ENT pois são eles que indicam o endereço das dem ais past as
conform e a ilust ração da figura ant erior.

O det alhe de pr eenchim ent o das pr opriedades dos r espect ivos at alhos TOTVS AppServ er e o
TOTVS Sm art Client é dem onst rado a seguir. No at alho do TOTV SAppSer ver, é necessário que
sej a inform ado o parâm et r o “ - debug” ou “ - console” .

- 94 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Pr opr ie da d e s dos a t a lh os

c: \ prot heus\ bin\ appserver\ t ot vsappserv er .exe


D e st in o:
- console

I n icia r e m : c: \ prot heus\ bin\ appserver

 - Con sole ou - D e bu g

Ex ecut ado com o um a JanelaConsole, as infor m ações r ecebidas das conexões com o TOTVS
Applicat ion Server conect ados são exibidas diret am ent e na t ela do console do TOTVS
Applicat ion Serv er, bem com o inform ações de Não Conform idades.

 - I n st a ll

Se o TOTVS Applicat ion Serv er, não for inst alado com o um Ser viço do NT, durant e a
I nst alação, ist o pode ser r ealizado, execut ando- o com a opção de Linha de Com ando.

 - Re m ove
Para r em ov ê- lo da List a de Serviços do NT, pode- se execut á- lo com a opção de Linha de
Com ando.

c: \ prot heus\ bin\ sm art client \ t ot vssm art client e.exe


D e st in o:
–M

I n icia r e m : c: \ prot heus\ bin\ sm art client

 - Q ( Qu ie t )

I ndica que o TOTVS Sm art Client , não deverá m ost r ar o Splash ( I m agem de Apresent ação) e a
t ela de ident ificação de Parâm et r os I niciais, necessit a ser acom panhada da ( Cláusula –P) .

 - P ( M a in Pr ogr a m )

I dent ifica o Program a ( APO) I nicial.

 - E ( En v ir on m e n t )

Nom e da Seção de Environm ent , no ( I ni do Ser ver) , que será ut ilizada, para definições gerais.

 - C ( Con n e ct ion )

Nom e da Seção de Conexão, que ser á ut ilizada, para a conexão ao TOTVS Applicat ion Serv er.

 - M ( Allow M u lt iSe ssion )

Per m it e m últ iplas inst âncias ( Cópias) do TOTVS Sm art Client , na m esm a m áquina, o que por
Default não é perm it ido.

- 95 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Os parâm et ros que configuram o local do RPO, o Banco de Dados ( I SAM ou SQL) , os arquivos
de m enus, configurações e cust om izações do sist em a no arquivo I NI são:

 Sou r ce Pa t h: I ndica o local de origem dos obj et os. É o ender eço do Reposit ório de
Obj et os ( Ex em plo: SourcePat h= C: \ PROTHEUS\ APO)

 Root Pa t h: Apont a para a past a raiz ( inicial) , a part ir da qual ser ão localizados os dados
( no caso de I SAM) , bem com o o próprio Dicionário de Dados ( Ex em plo:
Root Pat h= C: \ PROTHEUS\ PROTHEUS_DATA)

 St a r t Pa t h : I ndica qual é a past a dent ro da past a raiz ( inform ada no parâm et ro


Root Pat h) que cont ém os arquivos de m enus, os arquivos de configurações e os
arquivos de cust om izações ( SXs) do sist em a Prot heus ( Exem plo:
St art Pat h= \ SYSTEM\ ) .

Não há necessidade de que os parâm et r os est ej am em ordem nos ar quivos de configuração


( .ini) . Além dos parâm et r os j á det alhados, ex ist em out ros que podem indicar a versão do
sist em a, o t ipo de banco de dados, à linguagem do país em que est á sendo ut ilizado e as
m áscaras de edição e form at ação.

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

[ D RI VERS]
ACTI VE= TCP

[ TCP]
TYPE= TCPI P
PORT= 1234

Figu r a : Ex e m plo d e u m a m bie n t e e m u m a r qu ivo de pa r â m e t r os

No exem plo da figura ant erior, o r ót ulo [ environm ent ] descreve um conj unt o de parâm et r os
que serão inicializados no sist em a. Os rót ulos [ Driver s] e [ TCP] ident ificam a com unicação que
pode ser est abelecida ent re o Pr ot heus Serv er e o Pr ot heus Rem ot e. Out ros am bient es podem
ser configurados no m esm o arquivo ( TOTVSAPPSERVER.I NI ) .

Já o arquivo de parâm et ros do Prot heus Rem ot e ( TOTVSSMARTCLI ENT.I NI ) cont ém apenas as
configurações locais, basicam ent e as infor m ações necessárias para a inicialização e a
com unicação com o Pr ot heus Serv er , conform e o exem plo da figura a seguir.

- 96 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


[ CON FI G]
LASTMAI NPROG= SI GACFG
LANGUAGE= 1

[ D RI VERS]
ACTI VE= TCP

[ TCP]
SERVER= 172.16.72.41
PORT= 1234

Figu r a : Ex e m plo d e u m a r qu ivo de con fig u r a çã o do r e m ot e

 Act iv e : I ndica qual é a for m a de com unicação.

 Por t : I ndica o núm ero da port a a ser ut ilizada para a com unicação ent re o Prot heus
Ser ver e o Prot heus Rem ot e. É necessário que a port a ut ilizada na com unicação sej a a
m esm a em am bos ( no TOTVSAPPSERVER.I NI e no TOTVSSMARTCLI ENT.I NI ) . Vale
ressalt ar que a port a 80 é r eservada para a I nt ernet e pode causar conflit os caso sej a
ut ilizada na com unicação do Prot heus.

 Se r ve r : Apont a para o ender eço do servidor que pode ser a própria m áquina
( localhost ) ou o nom e da m áquina ( Server= Ser vidor_01) ou m esm o um ender eço I P
( exem plo Ser ver= 172.16.72.41) .

Ex e m plo:

O parâm et ro Serv er= 172.16.72.41 no arquivo TOTVSSMARTCLI ENT.I NI indica ao Prot heus
Rem ot e o ender eço da m áquina na qual est á funcionando o Prot heus Ser ver.

- 97 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


9 .3 . O Configur a dor do Pr ot he us

9 .3 .1 . Funciona lida de s Abor da da s

O obj et ivo dest e t ópico não é abranger t odo a est rut ura e recursos do m ódulo Configurador da
aplicação ERP, m as perm it ir a realização de t arefas de configuração sim ples que serão
necessárias no desenvolvim ent o de pequenas cust om izações.

Com foco nest e obj et ivo serão det alhadas as seguint es operações

 Configuração e criação de novas t abelas no Dicionário de Dados


 At ualização das est rut ur as do Dicionário de Dados
o Tabelas do sist em a
o Validações de cam pos
o Í ndices de t abelas
o Gat ilhos de cam pos

Para cont ext ualizar a est rut ura da aplicação ERP, no t ópico a seguir é det alhada a form a com o
as t abelas de dados do sist em a est ão divididas ent re os diversos m ódulos que com põe o
PROTHEUS.

9 .3 .2 . Est r ut ur a s bá sica s da a plica çã o ERP Pr ot he us

Ar q u iv os de con f ig u r a çã o d o sist e m a

Ar q u iv o D e scr içã o
SI GAMAT Cadast r o de em pr esas e filiais do sist em a
SI GAPSS Arquivo de usuários, gr upos e senhas do sist em a
SI X Í ndices dos arquivos
SX1 Pergunt as e r espost as
SX2 Mapeam ent o de t abelas
SX3 Dicionário de Dados
SX4 Agenda do Schedule de processos
SX5 Tabelas
SX6 Parâm et r os
SX7 Gat ilhos de I nt erface
SX8 Fora de uso
SX9 Relacionam ent os ent re t abelas
SXA Past as cadast rais apont adas no SX3
SXB Consult a por m eio da t ecla F3 ( Consult a Padrão)
SXD Cont role do Schedule de pr ocessos
SXE Seqüência de docum ent os ( + 1)
SXF Seqüência de docum ent os ( Pr óxim o)
SXG Tam anho padrão para cam pos apont ado pelo SX3
SXK Respost a de Pergunt as ( SX1) por usuários
SXO Cont role de LOGs por t abela
SXP Hist órico de Logs cadast rados no SXO
Cadast r o de filt ros int eligent es da m br ow se ( cont ém as
SXQ inform ações necessárias para a criação do filt ro) .
Cadast r o de r elacionam ent o ent r e pr ogram a x filt ro
SXR ( ut ilizada int ernam ent e pelo Pr ot heus para verificar em
quais program as os filt ros poderão ser ut ilizados) .

- 98 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cadast r o de pr ogram as ( ut ilizado na validação para
SXS m ost r ar/ inibir os filt ros na ex ecução da m br owse) .
Tabela de usuários ( cont ém as inform ações dos
SXT usuários que poderão ut ilizar os filt ros da m br owse) .
Cadast r o de r elacionam ent o ent r e as ent idades
SXOffice ( t abelas) e as consult as TOI I .

Am b ie n t e s e t a be la s

Na aplicação PROTHEUS as t abelas de dados podem t er um a est rut ura m ais sim ples e
econôm ica, com t abelas em DBF/ ADS, do fabricant e Ext ended Syst em ou CTREE do fabricant e
FAI RCOM ou um a est rut ura m ais robust a e com plexa, em bases SQL ( SQLSERVER da
Microsoft , ORACLE, DB I I da I BM, SYBASE, MYSQL, POSTGREE, et c.) .

No caso do SQL, o acesso é feit o at ravés do TOPCONNECT / DBACESS, que convert e os


com andos do ADVPL para est e am bient e.

Para perm it ir um a ut ilização adequada das t abelas de dados do sist em a por cada um dos
am bient es da aplicação ERP, as t abelas foram divididas em grupos denom inados “ fam ílias” .
Cada m ódulo pode ut ilizar um a ou m ais fam ílias de t abelas especificas para suas at ividades, e
ainda com part ilhar inform ações com out r os m ódulos at ravés de fam ílias com uns a t odas as
operações realizadas no sist em a.

A t abela a seguir dem onst ra alguns dos m ódulos que com põe a aplicação ERP PROTHEUS
at ualm ent e:

Am b ie n t e I de n t if ica çã o
SI GAATF ATI VO FI XO
SI GACOM COMPRAS
SI GACON CONTABI LI DADE
SI GAEST ESTOQUE E CUSTOS
SI GAFAT FATURAMENTO
SI GAFI N FI NANCEI RO
SI GAFI S LI VROS FI SCAI S
SI GAPCP PLANEJAMENTO E CONTROLE DA PRODUÇÃO
SI GAGPE GESTÃO DE PESSOAL
SI GAFAS FATURAMENTO DE SERVI ÇOS
SI GAVEI VEÍ CULOS
SI GALOJ CONTROLE DE LOJAS/ AUTOMAÇÃO COMERCI AL
SI GATM K CALL CENTER
SI GAOFI OFI CI NAS
SI GAPON PONTO ELETRÔNI CO
SI GAEI C EASY I MPORT CONTROL
SI GATCF TERMI NAL
SI GAM N T MANUTENÇÃO DE ATI VOS
SI GARSP RECRUTAMENTO E SELEÇÃO DE PESSOAL
SI GAQI E I NSPEÇÃO DE ENTRADA – QUALI DADE
SI GAQM T METODOLOGI A – QUALI DADE

O nom e de cada t abela no Pr ot heus é const it uído de seis dígit os, os quais são ut ilizados para
for m ar a seguint e represent ação:

F X X E E 0

- 99 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Onde:

F SF X Prim eiro dígit o represent a a fam ília, o segundo dígit o


pode ser ut ilizado para det alhar ainda m ais a fam ília
especificada no prim eiro nível ( subfam ília) , e o t er ceiro
dígit o é a num eração seqüencial das t abelas da fam ília
iniciando em “ 0” e finalizando em “ Z” .
E E 0 Os dois prim eiros dígit os ident ificam a que em presa as
t abelas est ão vinculadas, lem brando que a inform ação
de filial est á cont ida nos dados da t abela.
O últ im o dígit o é fixo em “ 0” .

A t abela a seguir dem onst ra algum as das principais fam ílias de t abelas ut ilizadas pela
aplicação ERP Prot heus:

Fa m ília D e scr içã o


S - Tabelas pert encent es ao sist em a básico, t am bém cham ado Classic
Cadast r os de ent idades com part ilhadas ent re os am bient es
S A
( Client es, Fornecedor es, Bancos ent re out r os) .
Cadast r os dos am bient es de Mat eriais ( Produt os, Saldos ent re
S B
out ros) .
Arquivos de m ovim ent ações diversas ut ilizados pelos am bient es de
Mat eriais ( Solicit ação ao Alm oxarifado, Solicit ação de Com pras,
S C
Pedido de Com pras, Pedido de Vendas, Ordens de Produção ent r e
out ros) .
Arquivos de m ovim ent ações de est oque ( I t ens de not as fiscais de
S D
ent rada e saída, m ovim ent os int ernos de est oque ent r e out r os) .
S E Cadast r os e m ovim ent ações do am bient e Financeiro.
Cadast r os e m ovim ent ações Fiscais ( Cabeçalhos das not as fiscais
S F de ent rada e saída, cadast ro de t ipos de ent rada e saída, livros
fiscais, ent re out r os) .
S G Cadast r os do am bient e de Planej am ent o e Cont role de Produção
S H Movim ent os do am bient e de Planej am ent o e Cont role de Pr odução
S I Cadast r os e m ovim ent os do am bient e Cont ábil ( descont inuado)
S N Cadast r os e m ovim ent os do am bient e At ivo Fixo
S R Cadast r os e m ovim ent os do am bient e Gest ão de Pessoal
S X Tabelas de configuração do sist em a
S Z Tabelas livres para ut ilização e proj et os específicos em client es.
A - Gest ão de Pr oj et os
C - Cont abilidade Gerencial
C T Cont abilidade Gerencial
C V Cont abilidade Gerencial
C W Cont abilidade Gerencial
D - Transport adoras e derivados
E - Com ércio ext erior e derivados
G - Gest ão Hospit alar
J - Gest ão Educacional
N - Ser viços Públicos
P - Reser vado para proj et os da fábrica de soft war e
Q - Qualidade e derivados
R - Recur sos Hum anos e derivados
T - Plano de Saúde
W - Workflow
Z - Tabelas livres para ut ilização e proj et os específicos em client es em
adição a fam ília SZ.

- 100 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Í n d ice s

Cada t abela do sist em a possui seus índices definidos no arquivo de configuração SI X, o qual
pode ser at ualizado at ravés do m ódulo Configurador.

Os arquivos de índices das t abelas de sist em a serão criados de acordo com o banco de dados
ut ilizado ( I SAM ou conexão via TOPCONNECT) .

Para bancos de dados I SAM, será gerados arquivos com a m esm a nom enclat ura da t abela de
dados, m as com um a ext ensão difer enciada ( at ualm ent e .CDX) . No caso da ut ilização de um
banco de dados, cada índice será um a num er ação seqüencial em função do nom e da t abela
original.

As especificações das chaves de índices de cada um das t abelas est á disponível no arquivo de
sist em a SI X, e a chave única da t abela ut ilizada para banco de dados est á descrit a na t abela
SX2.

Menus

Cada m ódulo da aplicação ERP possui um m enu padrão com t odas as funcionalidades
disponíveis para o am bient e, m enu est e definido at ravés de sint axe XML ( arquivos .XNU) .

Os m enus possuem um a est rut ura padrão que perm it e ao usuário localizar e ident ificar
facilm ent e cada um a das funcionalidades ofer ecidas pelo am bient e.

9 .3 .3 . Ace ssa ndo o m ódulo Configur a dor

Para ex ecut ar o m ódulo Configurador é necessário que a aplicação Pr ot heus Serv er est ej a em
ex ecução e at rav és da aplicação Prot heus Rem ot e deverá ser inform ada com o program a inicial
a opção SI GACFG.

Figu r a : Pa r â m e t r os d e in icia liz a çã o d o sist e m a

- 101 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Após a confirm ação, a v alidação do acesso é feit a conform e t ela ilust rada a seguir:

Figu r a : V a lid a çã o d e a ce sso

Figu r a : Con fir m a çã o do a ce sso a o m ódu lo Con f igu r a dor

- 102 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Logo após a sua confirm ação do usuário e senha com direit o de adm inist rador , ser á
apresent ada a t ela inicial do configurador , conform e m ost ra a figura a seguir:

Figu r a : I n t e r f a ce pr in cipa l do m ódu lo Con figu r a dor

- 103 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


9 .4 . Funciona lida de s do Configur a dor

A cust om ização de um sist em a com o o Pr ot heus consist e em adapt ar o sist em a de form a a


m elhor at ender as necessidades do client e.

A flexibilidade de um sist em a, ou sej a, sua capacidade de adapt ar- se ( polim orfism o, aquele
que assum e várias form as) é um a das m ais im port ant es caract eríst icas de um a solução ERP.

As funcionalidades t rat adas pelo Configurador definem a flexibilidade do ERP Pr ot heus.


Flexibilizar sem despadronizar, ou sej a, t udo que foi cust om izado perm anece válido, m esm o
com o desenv olvim ent o de novas versões.

Figu r a : Pr in cipa is fu n cion a lid a de s do m ódu lo Con f igu r a dor

O Configurador é o program a básico para o pr ocesso de cust om ização do Prot heus at ravés da
alt eração das t abelas da fam ília SX. Neles, o usuário ou o analist a de suport e r esponsável pela
im plant ação configura as inform ações que ser ão ut ilizadas pelos dem ais am bient es do sist em a.

Essas inform ações vão de sim ples parâm et ros at é com plexas expr essões e com andos que são
int erpr et adas em t em po de ex ecução.

Nos pr óxim os t ópicos serão abordadas as funcionalidades de cust om ização disponíveis no


am bient e Configurador, relevant es ao obj et ivo de desenvolvim ent o de pequenas
cust om izações para a aplicação ERP.

- 104 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


9 .4 .1 . D icioná r io de D a dos da a plica çã o ERP

A idéia do Dicionário de Dados é perm it ir que o usuário possa incluir ou inibir cam pos, ou
m esm o alt erar as pr opriedades dos cam pos exist ent es. Pode, ainda, criar novas t abelas. Ou
sej a, os pr ogram as ao invés de t erem os cam pos definidos em seu código original, lêem o
Dicionário em t em po de ex ecução, m ont ando ar rays com as pr opriedades de cada um . A part ir
daí, sua ut ilização é norm al, at ravés do uso de funções do ADVPL que t ornam o t rabalho do
desenvolvedor t ranspar ent e a est a arquit et ura.

O obj et ivo do Dicionário de Dados é perm it ir que o pr óprio usuário crie novas t abelas ou alt ere
os cam pos nas t abelas exist ent es quant o ao seu uso, sua ordem de apresent ação, legenda
( nos t r ês idiom as) , validação, help, obrigat oriedade de pr eenchim ent o, inicialização et c.

Figu r a : Con j u n t o de p a cot e s q u e com p õe o D icion á r io d e D a dos

9 .4 .2 . Adiçã o de t a be la s a o D icioná r io de D a dos

Pr oce d im e n t o

1. Para adicionar um a t abela ao dicionário de dados de um a em pr esa, selecione a opção


Dicionário de Dados abaixo da em presa que ser á at ualizada. ( árvor e de opções da part e
esquerda da int erface visual do Ger enciador de Bases de Dados) .

2. Após a seleção da opção Dicionário de Dados serão exibidas as t abelas j á cadast r adas
no arquivo de sist em a SX2.

- 105 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : Con j u n t o de t a be la s j á ca d a st r a da s n o SX 2

3. Após a visualização das t abelas j á cadast radas no SX2 da em presa selecionada, ut ilize o

bot ão I ncluir ( ) . Ao ut ilizar est a opção será exibida a t ela para definição dos dados
referent es à nova t abela que será criada:

- 106 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : Ca da st r o d e u m a n ov a t a be la

4. Realize o preenchim ent o das inform ações solicit adas de acordo com as orient ações a
seguir, e ao t érm ino confirm e o cadast ram ent o da nova t abela com o bot ão Confirm ar

( ).

Or ie n t a çõe s p a r a o ca da st r a m e n t o d e u m a n ova t a be la

 O dom ínio SZ1 at é SZZ ( considerando t odos os núm er o e t odas as let ras no últ im o
byt e) é r eser vado par a dados ex clusivos do usuário pois esse int er valo não será
ut ilizado pelo sist em a. Caso sej a necessário o dom ínio Z00 a ZZZ t am bém pode ser
em pr egado para desenv olvim ent os específicos do client e.

Não dev em ser criadas t abelas específicas de client es com


quaisquer out ras nom enclat uras, o que pode afet ar diret am ent e
um processo de at ualização fut uro.

 O nom e da t abela é pr eenchido aut om at icam ent e, adicionando 990. Esse dado r efer e-
se à em pr esa 99 ( Test e Mat riz) a qual est á sendo adicionado à t abela.

 O Pat h refer e- se à past a que cont erá efet ivam ent e os dados das t abelas, quando I SAM,
nas versões com banco de dados r elacional não são ut ilizadas. Essa past a será criada
dent ro da past a indicada na configuração do sist em a com o ROOTTPATH.

 O m odo de acesso com part ilhado indica que o sist em a possibilit ará o uso sim ult âneo da
t abela por duas ou m ais filiais. Se for com part ilhado o cam po Filial fica em branco. Se
for exclusivo, grava- se o código da filial at iva e som ent e ela t em acesso ao r egist ro.

 Após a confirm ação, a t abela criada passa a fazer part e do cadast r o do Dicionário de
Dados, cont endo som ent e o cam po FI LI AL, o qual é criado com o padrão pela

- 107 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


funcionalidade do m ódulo.

9 .4 .3 . Adiçã o de ca m pos a s t a be la s do D icioná r io de D a dos

Pr oce d im e n t o

1. Para adicionar um cam po a um a t abela do dicionário de dados de um a em presa,


selecione a opção Dicionário de Dados abaixo da em pr esa que será at ualizada. ( árvore
de opções da part e esquerda da int erface visual do Gerenciador de Bases de Dados) .

2. Após a seleção da opção Dicionário de Dados serão exibidas as t abelas j á cadast r adas
no arquivo de sist em a SX2.

Figu r a : Con j u n t o de t a be la s j á ca d a st r a da s n o SX 2

3. Após a visualização das t abelas j á cadast radas no SX2 da em presa selecionada, localize

e selecione a t abela que será at ualizada, e ut ilize o bot ão Edit ar ( ) . Ao ut ilizar est a
opção ser á exibida a t ela de m anut enção de cam pos da t abela selecionada:

- 108 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : Est r u t ur a de u m a t a be la j á ca da st r a da n o sist e m a

4. Selecione a opção Cam pos ( ) , para que sej am exibidos os cam pos
disponíveis para a t abela no arquivo de sist em a SX3.

Figu r a : Est r u t u r a de ca m pos de u m a t a be la j á ca da st r a da n o sist e m a

- 109 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


5. Após a visualização dos cam pos j á cadast rados no SX3 da t abela selecionada, ut ilize a

opção I ncluir ( ) . Ao ut ilizar est a opção será exibida a t ela para definição dos dados
referent es ao novo cam po que será criado:

Figu r a : D a dos p a r a p a r a m e t r iz a çã o d e u m n ovo ca m po n o sist e m a

5. Realize o preenchim ent o das inform ações solicit adas de acordo com as orient ações a
seguir, e ao t érm ino confirm e o cadast ram ent o do nov o cam po par a a t abela com o

bot ão Confirm ar ( ).

6. Confirm e as at ualizações para a t abela selecionada com o bot ão Confirm ar ( ).

7. At ualize as configurações do sist em a com o bot ão At ualizar ( ).

Figu r a : At u a liz a çã o d os d a d os do sist e m a

- 110 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Or ie n t a çõe s p a r a o ca da st r a m e n t o d e u m n ovo ca m po

1. As pr opriedades definidas no Dicionário de Dados ( SX3) são as seguint es:

 N om e d o ca m p o: Todos os cam pos t êm com o prefixo o pr óprio nom e da t abela, sendo


que para t abelas da fam ília “ S” , o pr efixo do cam po é com post o apenas pelos pr óxim os
dois dígit os. No caso das dem ais t abelas, o prefixo do cam po serão os t rês dígit os
ident ificadores da t abela.

 Tipo do ca m po: I ndica se é caract er e, num érico, lógico, dat a ou m em o. É claro que a
m udança do t ipo de cam po deve ser feit a com m uit o cuidado, pois, se t iverm os um
cam po num érico usado em cálculos e ele for alt erado para caract er e, cert am ent e
t er em os um er r o.

 Ta m a n h o do ca m po: Tam bém aqui é necessário cert o cuidado ao alt erá- lo, pois
poderem os t er t runcam ent os em relat órios e consult as em que há espaço para
cont eúdos m aior es que o original.

 For m a t o de e d içã o: Define com o o cam po aparece nas t elas e nos relat órios.

 Con t e x t o: Pode ser r eal ou virt ual. O cont ext o virt ual cria o cam po som ent e na
m em ória e não na t abela arm azenada no disco. I sso é necessário porque os
program as de cadast ram ent o e de consult a genérica apresent am som ent e um a t abela
de cada vez. Assim , se quiserm os apresent ar um cam po de um a out ra t abela, ou
m esm o o result ado de um cálculo, sem que t al inform ação ocupe espaço físico no HD,
ut ilizam os o cont ext o virt ual. Cam pos virt uais norm alm ent e são alim ent ados por
gat ilhos.

 Pr opr ie da d e : I ndica se um cam po pode ou não ser alt erado pelo usuário. Ex em plo:
saldos nor m alm ent e não podem , pois quem cuida dessa t ar efa são os program as.

2. Dem ais caract eríst icas que devem ser observadas na configuração do cam po:

Gu ia : Ca m po

 O cam po Decim al será solicit ado som ent e para os cam pos de t ipo num érico.

 O form at o “ ! ” indica que o caract ere será sem pre m aiúsculo, independent e da ação
do usuário. O form at o “ @! ” indica que essa caract eríst ica est ende- se por t odo 2
o0
cam po.

 O cont ext o r eal indica que o cam po exist irá efet ivam ent e no banco de dados e o
cont ext o virt ual significa que o cam po exist irá apenas no dicionário de dados e não
fisicam ent e.

 A propriedade alt erar indica que o cam po pode ser alt erado.

 Nest a j anela, os dados est ão classificados em seis past as com obj et ivos de
preenchim ent o bem específicos:

- 111 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Gu ia : I n for m a çõe s

 Cont ém as inform ações a r espeit o dos t ít ulos.

 Tít u lo: É a legenda que apar ece nas t elas/ relat órios. Há inclusive t r ês cam pos para
est a finalidade: em port uguês, espanhol e inglês. Est a pr opriedade pode ser alt erada à
vont ade, pois não int erfer e em nenhum processam ent o.

 D e scr içã o e H e lp : São propriedades que obj et ivam docum ent ar o cam po.

Gu ia : Opçõe s

 Cont ém os dados que facilit am a digit ação.

Gu ia : Va lida çõe s

 Repr esent am as r egras de validação do cam po.

 Va lida çõe s: Nest a propriedade, escr ev e- se um a função de validação do cam po qu e


est á sendo digit ado. Ex ist e um conj unt o de funções disponíveis no ADVPL apropriadas
para esse caso.

 Todas as validações inform adas serão ex ecut adas no m om ent o do pr eenchim ent o do
próprio cam po. Um a validação pode ser um a expressão lógica ou um a função de
usuário que r et orna um valor lógico Verdadeiro ou Falso. O sist em a só perm it irá o
avanço para o pr óxim o cam po quando o respect ivo preenchim ent o r esult ar Verdadeiro
sej a na expressão ou no r et orno da função.

Gu ia : Uso

 Descr ev e a form a de ut ilização do cam po.

Gu ia : M ódulos

 Relaciona t odos os m ódulos em que o cam po será ut ilizado.

- 112 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


9 .4 .4 . Adiçã o de índice s pa r a a s t a be la s do D icioná r io de D a dos

Conform e m encionado ant eriorm ent e, no am bient e Prot heus um a t abela pode t er vários
índices, os quais serão gerados de acordo com o banco de dados configurado para o sist em a.

Os índices do sist em a auxiliam na seleção e obt enção de inform ações da base de dados além
de det er m inar a ordem de apr esent ação dos r egist ros de um a t abela em consult as e r elat órios.

Pr oce d im e n t o

1. Para adicionar um índice a um a t abela do dicionário de dados de um a em pr esa,


selecione a opção Dicionário de Dados abaixo da em pr esa que será at ualizada. ( árvore
de opções da part e esquerda da int erface visual do Gerenciador de Bases de Dados) .

2. Após a seleção da opção Dicionário de Dados serão exibidas as t abelas j á cadast r adas
no arquivo de sist em a SX2.

Figu r a : Con j u n t o de t a be la s j á ca d a st r a da s n o SX 2

3. Após a visualização das t abelas j á cadast radas no SX2 da em presa selecionada, localize

e selecione a t abela que será at ualizada, e ut ilize o bot ão Edit ar ( ) . Ao ut ilizar est a
opção ser á exibida a t ela de m anut enção de cam pos da t abela selecionada:

- 113 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : Est r u t u r a de u m a t a be la j á ca da st r a da n o sist e m a

4. Selecione a opção índices ( ) , para que sej am exibidos os índices


disponíveis para a t abela no arquivo de sist em a SI X.

Figu r a : Í n dice s dispon íve is p a r a a t a b e la n o a r qu ivo de sist e m a SI X

5. Após a visualização dos índices j á cadast rados no SI X para a t abela selecionada, ut ilize

a opção I ncluir ( ) . Ao ut ilizar est a opção será exibida a t ela para definição dos
dados refer ent es ao nov o índice que será criado:

- 114 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : Ad içã o de u m ín d ice pa r a u m a t a be la

6. Realize o preenchim ent o das inform ações solicit adas de acordo com as orient ações a
seguir, e ao t érm ino confirm e o cadast ram ent o do novo índice para a t abela com o bot ão

Confirm ar ( ).

7. Confirm e as at ualizações para a t abela selecionada com o bot ão Confirm ar ( ).

8. At ualize as configurações do sist em a com o bot ão At ualizar ( ).

Figu r a : At u a liz a çã o d os d a d os do sist e m a

- 115 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Or ie n t a çõe s p a r a o ca da st r a m e n t o d e u m n ovo ín d ice

 O N ick n a m e é um a ident ificação com plem ent ar do índice o qual pode ser ut ilizada para
auxiliar o desenv olvedor na ut ilização dest a or dem em um a aplicação, a qual pode ser
padrão do sist em a ou específica de um client e.

 Para selecionar os cam pos j á cadast rados na t abela, pode ser ut ilizado o bot ão Cam pos

( ) . Est a facilidade preenche, aut om at icam ent e, os cam pos de descrição.

 O cam po r elat ivo à filial sem pre faz part e dos índices, com ex ceção do SM2, para que
os r egist ros nas t abelas est ej am agrupados por filiais, independent e dest a t abela ser
com part ilhada ent re as filiais.

 Um a t abela poderá t er vários índices cadast rados no Dicionário de Dados. Em


det erm inado m om ent o, por ém , apenas um deles ofer ecerá acesso ao regist ro. Essa
ordem pode ser alt erada em t em po de execução pelos pr ogram as da aplicação, at ravés
do com ando DBSet Order( ) , ou at rav és da definição de um a ordem específica na
ut ilização de queries para acesso as dados diret am ent e em bancos de dados de
am bient es TOPCONNECT ( DbAcess) .

9 .4 .5 . Adiçã o de ga t ilhos pa r a os ca m pos da s t a be la s do sist e m a

Pr oce d im e n t o

1. Para adicionar um gat ilho a um cam po de um a t abela do dicionário de dados de um a


em pr esa, selecione a opção Gat ilho abaixo da em pr esa que será at ualizada. ( árvor e de
opções da part e esquer da da int erface visual do Gerenciador de Bases de Dados) .

2. Após a seleção da opção Gat ilhos serão exibidos os it ens j á cadast radas no arquivo de
sist em a SX7.

Figu r a : Con j u n t o de g a t ilh os j á ca da st r os n o SX7

- 116 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3. Após a visualização dos gat ilhos j á cadast rados no SX7 da em presa selecionada, ut ilize

o bot ão I ncluir ( ) para r ealizar o cadast r o de um nov o gat ilho no sist em a:

Figu r a : D a dos p a r a o ca d a st r o d e u m n ovo ga t ilh o n o sist e m a

4. Realize o preenchim ent o das inform ações solicit adas de acordo com as orient ações a
seguir, e ao t érm ino confirm e o cadast ram ent o do nov o gat ilho de sit em a com o bot ão

Confirm ar ( ).

Or ie n t a çõe s p a r a o ca da st r a m e n t o d e u m n ovo g a t ilh o

 Pode hav er vários gat ilhos para o m esm o cam po. A ordem de ex ecução é det erm inada
pelo cam po Seqüência.

 Os t ipos do Gat ilho Prim ário, Est rangeiro e de Posicionam ent o definem se o Cont ra
Dom ínio é um cam po da m esm a t abela, de out ra t abela ou se o gat ilho deve realizar
um posicionam ent o, respect ivam ent e.

 A regra pode ser um a expr essão que r esult a em um v alor a ser preenchido no Cont ra
Dom ínio.

 O posicionam ent o igual a Sim indica que será execut ado um com ando de busca do
regist ro de acordo com a chav e indicada.

 O Alias, a Ordem e a Chave descr ev em a t abela envolvida no gat ilho, seu índice e a
chave para que a funcionalidade se posicione no r egist ro adequado.

- 117 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


9 .4 .6 . Cr ia çã o de Ta be la s Ge n é r ica s

Pr oce d im e n t o

1. Para adicionar um a t abela genérica, selecione os m enus Am bient e, Cadast ros, Tabelas.

2. Após a seleção da opção Tabelas serão exibidos os it ens j á cadast r adas no arquivo de
sist em a SX5.

Figu r a : Con j u n t o de Ta be la s j á ca da st r a s n o SX5

3. Após a visualização das t abelas j á cadast rados no SX5 da em presa selecionada, ut ilize o

bot ão I ncluir ( ) para r ealizar o cadast ro de um a nova t abela no sist em a:

Figu r a : D a dos p a r a o ca da st r o d e u m a n ov a t a be la n o sist e m a

- 118 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4. Realize o preenchim ent o das inform ações solicit adas de acordo com as orient ações a
seguir, e ao t érm ino confirm e o cadast ram ent o da nova t abela do sist em a com o bot ão

Confirm ar ( ).

9 .4 .7 . Cr ia çã o de Pa r â m e t r os

Pr oce d im e n t o

1. Para adicionar um Parâm et r o, selecione os m enus Am bient e, Cadast ros, Parâm et r os.

2. Após a seleção da opção Tabelas serão exibidos os it ens j á cadast r adas no arquivo de
sist em a SX6.

Figu r a : Con j u n t o de Pa r â m e t r os j á ca da st r a s n o SX6

3. Após a visualização dos Parâm et r os j á cadast rados no SX6 da em pr esa selecionada,

ut ilize o bot ão I ncluir ( ) para r ealizar o cadast ro de um a nova t abela no sist em a:

- 119 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : D a dos p a r a o ca d a st r o d e u m n ovo pa r â m e t r o n o sist e m a

4. Realize o preenchim ent o das inform ações solicit adas de acordo com as orient ações a
seguir, e ao t érm ino confirm e o cadast ram ent o do nov o Parâm et ro do sist em a com o

bot ão Confirm ar ( ).

- 120 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


10. TOTVS D e v e lopm e nt St udio

A fer ram ent a TOTVS Developm ent St udio é um program a que faz part e do Prot heus e perm it e
o t rabalho de edição, com pilação e depuração de pr ogram as escrit os em ADVPL.

Pr oj e t o

Um program a para ser com pilado deve ser vinculado a um proj et o. Norm alm ent e, pr ogr am as
que fazem part e de um det erm inado m ódulo ou am bient e est ão em um m esm o proj et o.

A vinculação dos progr am as a um pr oj et o é feit a por m eio dos arquivos do t ipo PRW. Na
verdade, um proj et o pode ser const it uído de um ou m ais arquivos dest e t ipo, que por sua vez,
podem t er um a ou m ais funções, conform e ilust ra o diagram a a seguir:

Figu r a : Re p r e se n t a çã o d a e st r u t u r a de u m pr oj e t o n o D EV- St u d io

- 121 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Com pila çã o

Um a vez adicionado a um proj et o e com pilado sem incidências de err os de código, o obj et o
result ant e será cadast rado no RPO ( Reposit ório de Obj et os) e poderá ser ut ilizado pela
aplicação ERP.

A com pilação dos it ens de um pr oj et o pode ser realizada individualm ent e, por grupo de font es
( past as) ou ainda selecionando- o int eiram ent e. Cada um a dos font es será pr ocessado e
com pilado separadam ent e, perm it indo a visualização do pr ogr esso da operação e das
m ensagens de aviso ( w arnings) ou er ros ( crit ical err or s) na guia Mensagens.

Ex e cuçã o

Para que os obj et os com pilados e disponíveis n RPO sej am ut ilizados, dev em ser obser vadas as
seguint es r egras:

 Se o pr ogram a não m anipula arquivos, pode- se cham á- lo diret am ent e do DEV- St udio
( nom e no lado direit o da barr a de fer ram ent as) ;

 Se o pr ogram a m anipula t abelas exist em duas opções:

 Adicionar o program a no m enu de um dos am bient es e execut a- lo at rav és do


Rem ot e.

 Realizar a pr eparação do am bient e na própria r ot ina, perm it indo sua ex ecução


diret am ent e pelo DEV- St udio.

 Não se pode com pilar um program a com o Rem ot e e o Monit or abert os, t enha est e
finalizado ou não por er ro.

An á lise e de pu r a çã o de e r r os

Para ident ificar as causas de err os, a ferram ent a DEV- St udio possui diversos r ecursos que
auxiliam o DEBUG.

A ação de DEBUG necessit a que o program a sej a execut ado a part ir do DEV- St udio, sendo
necessário observar as seguint es r egras:

 Definir e m ar car os pont os de parada m ais adequados a análise do font e;

 Ex ecut ar a r ot ina at ravés do DEV- St udio, selecionando seu nom e dir et am ent e, ou o
m ódulo que cont ém a opção ou a ação que irá ex ecut á- la;

 A part ir do m om ent o em que o DEV- St udio pausar o processam ent o em um dos pont os
de parada especificados previam ent e podem ser ut ilizadas as j anelas de visualização
disponíveis no DEV- St udio, que são:

 Variáveis Locais
 Variáveis Privat es
 Variáveis Public’s
 Variáveis St at ic’s
 Janela da Wat ch’s
 Janela de Tabelas e Cam pos
 Pilha de Cham adas

 At ravés da Janela de Wat ch’s é possível det erm inar quais variáveis dev em ser exibidas;

- 122 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Na pilha de cham adas, verifica- se a seqüência de cham adas das funções;
 Na past a de Com andos, pode- se, enquant o o pr ogram a est iver pausado, escr ev er
qualquer com ando e ao dar Ent er , ele é ex ecut ado, perm it indo pesquisar palavras e
expr essões no pr óprio font e ou em qualquer font e arm azenado no HD;

 Ao parar pode- se ou cont inuar o program a at é o próxim o pont o de parada, caso haj a
um out ro definido, ou execut ar linha a linha da rot ina.

I n t e r fa ce da a plica çã o

Por ser um am bient e int egrado de desenv olvim ent o, o DEV- St udio propor ciona t odas essas
facilidades, por m eio de int erface única com o ilust ra a figura a seguir:

Figu r a : I n t e r f a ce pr in cipa l do TOTVS D e ve lopm e n t St u dio

 O DEV- St udio apresent a, no t opo da t ela, um conj unt o de opções de m enu e um a série
de bot ões que facilit am a sua m anipulação.

 Na t ela cent r al, é apr esent ado o código das funções em ADVPL. Na part e inferior são
exibidas algum as past as que facilit am a ex ecução de com andos, exibição de cont eúdos
de variáveis e m ensagens, bem com o dados sobre o proj et o.

- 123 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D e se nvolvim e nt o de pe que na s cust om iz a çõe s

11. Ace sso e m a nipula çã o de ba se s de da dos e m AD VPL

Com o a linguagem ADVPL é ut ilizada no desenvolvim ent o de aplicação para o sist em a ERP
Prot heus, ela dev e possuir recursos que per m it am o acesso e a m anipulação de inform ações
independent em ent e da base de dados para o qual o sist em a foi configurado.

Dest a form a a linguagem possui dois grupos de funções dist int os para at uar com os bancos de
dados:

 Funções de m anipulação de dados genéricas


 Funções de m anipulação de dados específicas para am bient es TOPCONNECT /
DBACCESS

Fu n çõe s de m a n ipu la çã o de da dos ge n é r ica s

As funções de m anipulação de dados dit as com o genéricas per m it em que um a aplicação ADVPL
sej a escrit a da m esm a for m a, independent e se a base de dados configurada para o sist em a
ERP for do t ipo I SAM ou padrão SQL.

Muit as dest as funções foram inicialm ent e herdadas da linguagem CLI PPER, e m ediant e novas
im plem ent ações da ár ea de Tecnologia da Microsiga foram m elhoradas e adequadas às
necessidades do ERP. Por est a razão é possível encont rar em docum ent ações da linguagem
CLI PPER inform ações sobre funções de m anipulação de dados ut ilizadas na fer ram ent a ERP.

Dent r e as m elhorias im plem ent adas pela área de Tecnologia da Microsiga, podem os m encionar
o desenv olvim ent o de novas funções com o por ex em plo a função MsSeek( ) - versão da
Microsiga para a função DbSeek( ) , e a int egração ent re a sint axe ADVPL convencional e a
ferram ent a de acesso a bancos de dados no padrão SQL – TOPCONNECT ( DbAcess) .

A int egração ent r e a aplicação ERP e a ferram ent a TOPCONNECT perm it e que as funções de
acesso e m anipulação de dados escrit as em ADVPL sej am int erpret adas e conv ert idas par a
um a sint axe com pat ível com o padrão SQL ANSI e dest a form a aplicadas aos SGDBs ( Sist em as
Gerenciadores de Bancos de Dados) com sua sint axe nat iva.

Fu n çõe s de m a n ipu la çã o de da dos p a r a a m bie n t e s TOPCON N ECT / D BACCESS

Para im plem ent ar um acesso m ais ot im izado e disponibilizar no am bient e ERP funcionalidades
que ut ilizem de form a m ais adequada os recursos dos SGDBs hom ologados para o sist em a,
foram im plem ent adas funções de acesso e m anipulação de dados específicas para am bient es
TOPCONNECT/ DBACCESS.

Est as funções perm it em que o desenv olvedor ADVPL ex ecut e com andos em sint axe SQL
diret am ent e de um código font e da aplicação, disponibilizando recursos com o ex ecução de
queries de consult a, cham adas de pr ocedur es e com unicação com out ros bancos de dados
at ravés de ODBCs.

As funções específicas para am bient es TOPCONNECT serão abordas no


m at erial de ADVPL Avançado.

- 124 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 1 .1 . D ife r e nça s e com pa t ibiliz a çõe s e nt r e ba se s de da dos

Com o a aplicação ERP pode ser configurada para ut ilizar diferent es t ipos de bases de dados é
im port ant e m encionar as principais diferenças ent re est es r ecursos, o que pode det erm inar a
for m a com o o desenv olvedor irá opt ar por escr ev er sua aplicação.

Ace sso a d a dos e ín dice s

No acesso a inform ações em bases de dados do padrão I SAM são sem pre lidos os regist r os
int eiros, enquant o no SQL pode- se ler apenas os cam pos necessários naquele processam ent o.

O acesso diret o é feit o at ravés de índices que são t abelas paralelas às t abelas de dados e que
cont êm a chav e e o ender eço do r egist ro, de form a análoga ao índice de um livro. Para cada
chave, é criado um índice próprio.

Nas bases de dados padrão I SAM os índices são arm azenados em um único arquivo do t ipo
CDX, j á nos bancos de dados padrão SQL cada índice é criado com um a num eração seqüencial
t endo com o base o nom e da t abela ao qual ele est á relacionado.

A cada inclusão ou alt eração de um r egist r o t odos os índices são at ualizados, t ornando
necessário planej ar adequadam ent e quais e quant os índices serão definidos para um a t abela,
pois um a quant idade ex cessiva pode com pr om et er o desem penho dest as operações.

Dev e ser considerada a possibilidade de ut ilização de índices t em porários para pr ocessos


específicos, os quais serão criados em t em po de ex ecução da rot ina. Est e fat or deve levar em
consideração o “ esforço” do am bient e a cada execução da rot ina e a periodicidade com a qual
é ex ecut ada.

Est r u t u r a d os r e gist r os ( in f or m a çõe s)

Nas bases de dados padrão I SAM, cada r egist ro possui um ident ificador nat ivo ou I D
seqüencial e ascendent e que funciona com o o endereço base daquela inform ação.

Est e I D, m as conhecido com o RECNO ou RECNUMBER é ger ado no m om ent o de inclusão do


regist ro na t abela e som ent e será alt erado caso a est rut ura dos dados dest a t abela sofr a
algum a m anut enção. Dent re as m anut enções que um a t abela de dados I SAM pode sofr er
pode- se cit ar a ut ilização do com ando PACK, o qual irá apagar fisicam ent e os regist ros
delet ados da t abela forçando um a r enum eração dos ident ificadores de t odos os regist r os. Est a
sit uação t am bém t orna necessária a r ecriação de t odos os índices vinculados àquela t abela.

I st o ocorr e nas bases de dados I SAM devido ao conceit o de exclusão lógica de regist ros que as
m esm as possuem . Já os bancos de dados padr ão SQL nat ivam ent e ut ilizam apenas o conceit o
de exclusão física de r egist ros, o que para out ras aplicações seria t ransparent e, m as não é o
caso do ERP Prot heus.

Para m ant er a com pat ibilidade das aplicações desenv olvidas para bases de dados padrão
I SAM, a área de Tecnologia e Banco de Dados da Microsiga im plem ent ou nos bancos de dados
padrão SQL o conceit o de exclusão lógica de regist ros exist ent e nas bases de dados I SAM
at ravés da criação de cam pos de cont r ole específicos: R_E_C_N_O_, D_E_L_E_T_ e
R_E_C_D_E_L.

Est es cam pos perm it em que a aplicação ERP ger encie as inform ações do banco de dados da
m esm a form a que as inform ações em bases de dados I SAM.

- 125 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Com isso o cam po R_E_C_N_O_ ser á um ident ificador único do regist ro dent r o da t abela,
funcionando com o o I D ou RECNUMBER de um a t abela I SAM, m as ut ilizando um recurso
adicional disponível nos bancos de dados r elacionais conhecido com Ch a ve Pr im á r ia .

Para a aplicação ERP Prot heus o cam po de cont r ole R_E_C_N_O_ é definido em t odas as
t abelas com o sendo sua chave prim ária, o que t ransfere o cont r ole de sua num eração
seqüencial ao banco de dados.

O cam po D_E_L_E_T_ é t rat ado int ernam ent e pela aplicação ERP com o um “ flag” ou m arca de
exclusão. Dest a form a os r egist ros que est iver em com est e cam po m arcado serão
considerados com o ex cluídos logicam ent e. A execução do com ando PACK em um a t abela de
um banco de dados padrão SQL visa excluir fisicam ent e os regist r os com o cam po D_E_L_E_T_
m arcado, m as não causará o efeit o de r enum eração de RECNO ( no caso R_E_C_N_O_) que
ocor re nas t abela de bases de dados I SAM.

1 1 .2 . Funçõe s de a ce sso e m a nipula çã o de da dos

As funções de acesso e m anipulação de dados descrit as nest e t ópico são as classificadas


ant eriorm ent e com o funções genéricas da linguagem ADVPL, perm it indo que as m esm as sej am
ut ilizadas independent em ent e da base de dados para a qual a aplicação ERP est á configurada.

As funções de acesso e m anipulação de dados definem basicam ent e:

 Tabela que est á sendo t rat ada;


 Cam pos que dev erão ser lidos ou at ualizados;
 Mét odo de acesso diret o as inform ações ( r egist ros e cam pos) .

Dent r e as funções ADVPL disponíveis para acesso e m anipulação de inform ações, est e m at erial
irá det alhar as seguint es opções:

 SELECT( )
 D BSELECTAREA( )
 D BSETORD ER( )
 D BSEEK( ) E M SSEEK( )
 D BSKI P( )
 D BGOTO( )
 D BGOTOP( )
 D BGOBOTTON ( )
 D BSETFI LTER( )
 RECLOCK( )
 SOFTLOCK( )
 M SUN LOCK( )
 D BD ELETE( )
 D BUSEAREA( )
 D BCLOSEAREA( )

- 126 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D BRLOCK( )

Sin t a x e D BRLOCK( x I d e n t ifica dor )


Função de base de dados, que efet ua o lock ( t ravam ent o) do r egist ro
ident ificado pelo parâm et r o x I dent ificador. Est e parâm et r o pode ser o
Recno( ) para t abelas em form ado I SAM, ou a chave prim ária para bancos de
dados relacionais.
D e scr içã o
Se o parâm et ro x I dent ificador não for especificado, t odos os lock s da ár ea de
t rabalho serão liberados, e o regist r o posicionado será t ravado e adicionado
em um a list a de r egist ros bloqueados.

D BCLOSEAREA( )

Sin t a x e D bClose Ar e a ( )
Per m it e que um alias present e na conexão sej a fechado, o que viabiliza seu
reuso em out r o operação. Est e com ando t em efeit o apenas no alias at ivo na
D e scr içã o
conexão, sendo necessária sua ut ilização em conj unt o com o com ando
DbSelect Ar ea( ) .

D BCOM M I T( )

Sin t a x e D BCOM M I T( )

D e scr içã o Efet ua t odas as at ualizações pendent es na ár ea de t rabalho at iva.

D BCOM M I TALL( )

Sin t a x e D BCOM M I TALL( )


Efet ua t odas as at ualizações pendent es em t odas as ár ea de t rabalho em uso
D e scr içã o
pela t hread ( conexão) at iva.

D BD ELETE( )

Sin t a x e D bD e le t e ( )
Efet ua a exclusão lógica do regist ro posicionado na ár ea de t rabalho at iva,
D e scr içã o sendo necessária sua ut ilização em conj unt o com as funções RecLock( ) e
MsUnLock( ) .

D BGOTO( )

Sin t a x e D bGot o( n Re cn o)
Mov e o cursor da ár ea de t rabalho at iva para o record num ber ( r ecno)
D e scr içã o especificado, r ealizando um posicionam ent o diret o, sem a necessidade um a
busca ( seek) pr évio.

- 127 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D BGOTOP( )

Sin t a x e D bGoTop( )

D e scr içã o Mov e o cursor da ár ea de t rabalho at iva para o prim eiro r egist ro lógico.

D BGOBOTTON ( )

Sin t a x e D bGoBot t on ( )

D e scr içã o Mov e o cursor da ár ea de t rabalho at iva para o últ im o regist r o lógico.

D BRLOCKLI ST( )

Sin t a x e D BRLOCKLI ST( )


Ret orna um ar ray cont endo o r ecord num ber ( r ecno) de t odos os r egist ros
D e scr içã o
t ravados da ár ea de t rabalho at iva.

D BSEEK( ) E M SSEEK( )

Sin t a x e D bSe e k ( cCh a ve , lSoft Se e k , lLa st )


D bSe e k : Perm it e posicionar o cursor da área de t rabalho at ivo no r egist ro
com as inform ações especificadas na chav e de busca, fornecendo um r et orno
lógico indicando se o posicionam ent o foi efet uado com sucesso, ou sej a, se a
inform ação especificada na chav e de busca foi localizada na área de
t rabalho.
D e scr içã o
M sSe e k ( ) : Função desenvolvida pela área de Tecnologia da Microsiga, a
qual possui as m esm as funcionalidades básicas da função DbSeek( ) , com a
vant agem de não necessit ar acessar novam ent e a base de dados para
localizar um a inform ação j á ut ilizada pela t hread ( conexão) at iva.

D BSKI P( )

Sin t a x e D bSk ip ( n Re gist r os)


Mov e o cursor do r egist ro posicionado para o pr óxim o ( ou ant erior
D e scr içã o dependendo do parâm et r o) , em função da ordem at iva para a área de
t rabalho.

D BSELECTAREA( )

Sin t a x e D bSe le ct Ar e a ( n Ar e a | cAr e a )


Define a ár ea de t rabalho especificada com sendo a ár ea at iva. Todas as
D e scr içã o operações subseqüent es que fizer em r eferência a um a área de t rabalho a
ut ilização, a m enos que a ár ea desej ada sej a inform ada explicit am ent e.

- 128 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D BSETFI LTER( )

Sin t a x e D bSe t Filt e r ( b Con dica o, cCon d ica o)


Define um filt ro para a ár ea de t rabalho at iva, o qual pode ser descr it o na
D e scr içã o
for m a de um bloco de código ou at ravés de um a expressão sim ples.

D BSETORD ER( )

Sin t a x e D bSe t Or de r ( n Or d e m )
Define qual índice será ut ilizada pela área de t rabalho at iva, ou sej a, pela
área pr eviam ent e selecionada at rav és do com ando DbSelect Ar ea( ) . As
D e scr içã o
ordens disponíveis no am bient e Prot heus são aquelas definidas no SI NDEX
/ SI X, ou as ordens disponibilizadas por m eio de índices t em porários.

D BORD ERN I CKN AM E( )

Sin t a x e D bOr de r N ick N a m e ( N ick N a m e )


Define qual índice criado pelo usuário sej a ut ilizado. O usuário pode incluir os
D e scr içã o seus próprios índices e no m om ent o da inclusão dev e criar o NI CKNAME par a
o m esm o.

D BUN LOCK( )

Sin t a x e D BUN LOCK( )


Mesm a funcionalidade da função UNLOCK( ) , só que r ecom endada para
am bient es de r ede nos quais os arquivos são com part ilhados.
D e scr içã o
Libera o t ravam ent o do regist ro posicionado na área de t rabalho at iva e
confirm a as at ualizações efet uadas naquele r egist ro.

D BUN LOCKALL( )

Sin t a x e D BUN LOCKALL( )


Libera o t ravam ent o de t odos os regist ros de t odas as ár eas de t rabalho
D e scr içã o
disponíveis na t hread ( conexão) at iva.

D BUSEAREA( )

D bUse Ar e a ( lN ovo, cD r iv e r , cAr q u iv o, cAlia s, lCom p a r ilh a do,;


Sin t a x e
lSoLe it u r a )
Define um arquivo de base de dados com o um a área de t rabalho disponível
D e scr içã o
na aplicação.

M SUN LOCK( )

Sin t a x e M sUn Lock ( )


Libera o t ravam ent o ( lock) do regist r o posicionado confirm ando as
D e scr içã o
at ualizações efet uadas nest e r egist ro.

- 129 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


RECLOCK( )

Sin t a x e Re cLock ( cAlia s,lI n clu i)


Efet ua o t ravam ent o do r egist ro posicionado na ár ea de t rabalho at iva,
D e scr içã o
perm it indo a inclusão ou alt eração das inform ações do m esm o.

RLOCK( )

Sin t a x e RLOCK( )  lSu ce sso

D e scr içã o Efet ua o t ravam ent o do regist ro posicionado na área de t rabalho at iva.

SELECT( )

Sin t a x e Se le ct ( cAr e a )
Det erm ina o núm er o de referência de um det erm inado alias em um
am bient e de t r abalho. Caso o alias especificado não est ej a em uso no
D e scr içã o
am bient e, será r et ornado o valor 0 ( zero) .

SOFTLOCK( )

Sin t a x e Soft Lock ( cAlia s)


Per m it e a reserva do r egist ro posicionado na área de t rabalho at iva de for m a
que out ras operações, com exceção da at ual, não possam at ualizar est e
regist ro. Difer e da função RecLock( ) pois não gera um a obrigação de
at ualização, e pode ser sucedido por ele.
D e scr içã o
Na aplicação ERP Pr ot heus, o Soft Lock( ) é ut ilizado nos browses, ant es da
confirm ação da operação de alt eração e exclusão, pois nest e m om ent o a
m esm a ainda não foi efet ivada, m as out ras conexões não podem acessar
aquele regist ro pois o m esm o est á em m anut enção, o que im plem ent a da
int egridade da inform ação.

UN LOCK( )

Sin t a x e UN LOCK( )
Libera o t ravam ent o do regist ro posicionado na área de t rabalho at iva e
D e scr içã o
confirm a as at ualizações efet uadas naquele r egist ro.

- 130 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 1 .3 . D ife r e ncia çã o e nt r e va r iá ve is e nom e s de ca m pos

Muit as vezes um a variável pode t er o m esm o nom e que um cam po de um arquivo ou de um a


t abela abert a no m om ent o. Nest e caso, o ADVPL privilegiará o cam po, de form a que um a
referência a um nom e que ident ifique t ant o um a variável com o um cam po, r esult ará no
cont eúdo do cam po.

Para especificar qual dev e ser o elem ent o referenciado, deve- se ut ilizar o operador de
ident ificação de apelido ( - > ) e um dos dois ident ificadores de r efer ência, MEMVAR ou FI ELD.

cRes : = MEMVAR- > NOME

Est a linha de com ando ident ifica que o valor at ribuído à variável cRes dev e ser o valor da
variável de m em ória cham ada NOME.

cRes : = FI ELD- > NOME

Nest e caso, o valor at ribuído à variável cRes será o valor do cam po NOME exist ent e no arquivo
ou t abela abert o na ár ea at ual.

O ident ificador FI ELD pode ser subst it uído pelo apelido de um arquivo ou t abela abert o, par a
evit ar a necessidade de selecionar a ár ea ant es de acessar o cont eúdo de t erm inado cam po.

cRes : = CLI ENTES- > NOME

As t abelas de dados ut ilizadas pela aplicação ERP recebem aut om at icam ent e do sist em a o
apelido ou ALI AS especificado para as m esm as no arquivo de sist em a SX2. Assim se o cam po
NOME pert ence a um a t abela da aplicação PROTHEUS, o m esm o poder á ser r efer enciado com a
indicação do ALI AS pr é- definido dest a t abela.

cRes : = SA1- > NOME / / SA1 – Cadast ro de Client es

Para m aiores det alhes sobr e abert ura de arquivos com at ribuição de apelidos,
consult e a docum ent ação sobre acesso a banco de dados ou a docum ent ação
da função dbUseAr ea( ) .

Os alias das t abelas da aplicação ERP são padronizados em t r ês let ras, que
corr espondem as iniciais da t abela. As configurações de cada ALI AS ut ilizado
pelo sist em a podem ser visualizadas at ravés do m ódulo Configurador - >
Bases de Dados - > Dicionários - > Bases de Dados.

- 131 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 1 .4 . Cont r ole de num e r a çã o se qüe ncia l

Alguns cam pos de num eração do Pr ot heus são fornecidos pelo sist em a em ordem ascendent e.
É o caso, por exem plo, do núm ero do pedido de venda e out ros que serv em com o ident ificador
das inform ações das t abelas. É pr eciso t er um cont r ole do fornecim ent o desses núm er os, em
especial quando vários usuários est ão t rabalhando sim ult aneam ent e.

Os cam pos que r ecebem o t rat am ent o de num eração seqüencial pela
aplicação ERP não devem ser considerados com o chav e prim ária das t abelas
aos quais est ão vinculados.

No caso específico da aplicação ERP Pr ot heus a chave prim ária em am bient es


TOPCONNECT será o cam po R_E_C_N_O_, e para bases de dados padrão
I SAM o conceit o de chave prim ária é im plem ent ado pela regra de negócio do
sist em a, pois est e padrão de dados não possui o conceit o de unicidade de
dados.

Se m á for os

Para definir o conceit o do que é um sem áforo de num eração dev e- se avaliar a seguint e
seqüência de event os no sist em a:

 Ao ser fornecido um núm er o, ele perm anece reservado at é a conclusão da operação


que o solicit ou;

 Se est a operação for confirm ada, o núm er o é indisponibilizado, m as se a operação for


cancelada, o núm er o volt ará a ser disponível m esm o que naquele m om ent o núm eros
m aiores j á t enham sido ofer ecidos e ut ilizados.

Com isso, m esm o que t enham os vários pr ocessos solicit ando num erações seqüenciais para
um a m esm a t abela, com o por ex em plo inclusões sim ult âneas de pedidos de vendas, t er em os
para cada pedido um núm er o ex clusivos e sem o int ervalos e num erações não ut ilizadas.

Fu n çõe s de con t r ole de se m á for os e n u m e r a çã o se qü e ncia l

A linguagem ADVPL per m it e a ut ilização das seguint es funções para o cont r ole das num erações
seqüenciais ut ilizadas nas t abelas da aplicação ERP:

 GETSXEN UM ( )
 CON FI RM SXE( )
 ROLLBACKSXE( )

GETSXEN UM ( )

Sin t a x e GETSXEN UM ( cAlia s, cCa m p o, cAlia sSXE, n Or de m )


Obt ém o núm ero seqüência do alias especificado no parâm et ro, at rav és da
D e scr içã o referência aos arquivos de sist em a SXE/ SXF ou ao ser vidor de num eração,
quando est a configuração est á habilit ada no am bient e Prot heus.

- 132 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


CON FI RM SXE( )

Sin t a x e CON FI RM SXE( lVe r if ica )

D e scr içã o Confirm a o núm er o alocado at ravés do últ im o com ando GETSXENUM( ) .

ROLLBACKSXE( )

Sin t a x e ROLLBACKSXE( )
Descart a o núm er o fornecido pelo últ im o com ando GETSXENUM( ) ,
D e scr içã o
ret ornando a num eração disponível para out ras conex ões.

12. Cust om iz a çõe s pa r a a a plica çã o ERP

Nest e t ópico serão abordas as for m as pelas quais a aplicação ERP Pr ot heus pode ser
cust om izada com a ut ilização da linguagem ADVPL.

Pelos recursos de configuração da aplicação ERP disponíveis no m ódulo Configurador é possível


im plem ent ar as seguint es cust om izações:

 Validações de cam pos e pergunt as do sist em a e de usuários


 I nclusão de gat ilhos em cam pos de sist em as e de usuários
 I nclusão de regras em parâm et ros de sist em as e de usuários
 Desenv olvim ent o de pont os de ent rada para int eragir com funções padr ões do sist em a

- 133 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 2 .1 . Cust om iz a çã o de ca m pos – D icioná r io de D a dos

1 2 .1 .1 . Va lida çõe s de ca m pos e pe r gunt a s

As funções de validação t êm com o caract eríst ica fundam ent al um ret orno do t ipo lógico, ou
sej a, um cont eúdo .T. – Verdadeiro ou .F. – Falso.

Com base nest a pr em issa, a ut ilização de validações no Dicionário de Dados ( SX3) ou nas
Pergunt as de Pr ocessos e Relat órios ( SX1) deverá focar sem pre na ut ilização de funções ou
expr essões que r esult em em um r et orno lógico.

At ravés do m ódulo Configurador é possível alt erar as propriedades de um cam po ou de um a


pergunt a de form a a incluir regras de validação para as seguint es sit uações:

 SX3 – V a lid a çã o d e u su á r io ( X3 _ VLD USER)


 SX1 – V a lid a çã o d a p e r gu n t a ( X1 _ V ALI D )

Dent r e as funções que a linguagem ADVPL em conj unt o com os r ecur sos desenv olvidos pela
aplicação ERP para validação de cam pos e pergunt as serão det alhadas:

 VAZI O( )
 N AOVAZI O( )
 EXI STCPO( )
 EXI STCH AV( )
 PERTEN CE( )
 POSI TI VO( )
 N EGATI VO( )
 TEXTO( )

EXI STCH AV( )

Sin t a x e Ex ist Ch a v( cAlia s, cCon t e u d o, n I n dice )


Ret orna .T. ou .F. se o cont eúdo especificado exist e no alias especificado.
Caso exist a será exibido um help de sist em a com um aviso infor m ando da
ocor rência.
D e scr içã o
Função ut ilizada norm alm ent e para verificar se um det erm inado código de
cadast r o j á exist e na t abela na qual a inform ação será inserida, com o por
ex em plo o CNPJ no cadast ro de client es ou fornecedores.

- 134 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


EXI STCPO( )

Sin t a x e Ex ist Cpo( cAlia s, cCon t e u do, n I n d ice )


Ret orna .T. ou .F. se o cont eúdo especificado não exist e no alias
especificado. Caso não exist a será exibido um help de sist em a com um aviso
inform ando da ocor rência.
D e scr içã o
Função ut ilizada norm alm ent e para v erificar se a inform ação digit ada em um
cam po, a qual depende de out ra t abela, realm ent e exist e nest a out ra t abela,
com o por ex em plo o código de um client e em um pedido de venda.

N AOVAZI O( )

Sin t a x e N a oV a z io( )
Ret orna .T. ou .F. se o cont eúdo do cam po posicionado no m om ent o não
D e scr içã o
est á vazio.

N EGATI VO( )

Sin t a x e N e ga t iv o( )

D e scr içã o Ret orna .T. ou .F. se o cont eúdo digit ado para o cam po é negat ivo.

PERTEN CE( )

Sin t a x e Pe r t e n ce ( cSt r in g)
Ret orna .T. ou .F. se o cont eúdo digit ado para o cam po est á cont ido na
st ring definida com o parâm et ro da função. Nor m alm ent e ut ilizada em
D e scr içã o
cam pos com a opção de com bo, pois caso cont rário seria ut ilizada a função
Exist Cpo( ) .

POSI TI VO( )

Sin t a x e Posit ivo( )

D e scr içã o Ret orna .T. ou .F. se o cont eúdo digit ado para o cam po é posit ivo.

TEXTO( )

Sin t a x e Te x t o( )
Ret orna .T. ou .F. se o cont eúdo digit ado para o cam po cont ém apenas
D e scr içã o
núm eros ou alfanum éricos.

VAZI O( )

Sin t a x e Va z io( )
Ret orna .T. ou .F. se o cont eúdo do cam po posicionado no m om ent o est á
D e scr içã o
vazio.

- 135 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 2 .1 .2 . Pict ur e s de for m a çã o disponíve is

Com base na docum ent ação disponível no DEM – Docum ent ação Elet r ônica Microsiga, a
linguagem ADVPL e a aplicação ERP Prot heus adm it em as seguint es pict ures:

D icion á r io d e D a dos ( SX3 ) e GET

Fu n çõe s
Con t e ú do Fu n cion a lid a de
A Per m it e apenas caract er es alfabét icos.
C Exibe CR depois de núm er os posit ivos.
E Exibe num érico com o pont o e vírgula invert idos ( form at o Eur opeu) .
R I nser e caract eres diferent es dos caract er es de t em plat e na exibição, m as não os
insere na variável do GET.
S< n > Per m it e rolam ent o horizont al do t ext o dent ro do GET, < n> é um núm er o int eiro
que ident ifica o t am anho da região.
X Exibe DB depois de núm er os negat ivos.
Z Exibe zeros com o br ancos.
( Exibe núm eros negat ivos ent re par ênt eses com os espaços em branco iniciais.
) Exibe núm eros negat ivos ent re par ênt eses sem os espaços em branco iniciais.
! Convert e caract er es alfabét icos para m aiúsculo.

Te m pla t e s
Con t e ú do Fu n cion a lid a de
X Per m it e qualquer caract er e.
9 Per m it e apenas dígit os para qualquer t ipo de dado, incluindo o sinal para
num éricos.
# Per m it e dígit os, sinais e espaços em branco par a qualquer t ipo de dado.
! Convert e caract er es alfabét icos para m aiúsculo.
* Exibe um ast erisco no lugar dos espaços em br anco iniciais em núm er os.
. Exibe o pont o decim al.
, Exibe a posição do m ilhar.

Ex e m plo 0 1 – Pict u r e ca m po n u m é r ico

CT2_VALOR – Num érico – 17,2


Pict ure: @E 99,999,999,999,999.99

Ex e m plo 0 2 – Pict u r e ca m po t e x t o, com d igit a çã o a pe n a s e m ca ix a a lt a

A1_NOME – Caract er - 40
Pict ure: @!

- 136 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


SAY e PSAY

Fu n çõe s
Con t e ú do Fu n cion a lid a de
C Exibe CR depois de núm er os posit ivos
E Exibe num érico com o pont o e a vírgula invert idos ( form at o Eur opeu)
R I nser e caract er es diferent es dos caract eres de t em plat e
X Exibe DB depois de núm er os negat ivos
Z Exibe zeros com o br ancos
( Envolve núm er os negat ivos ent r e par ênt eses
! Convert e t odos os caract er es alfabét icos para m aiúsculo

Te m pla t e s
Con t e ú do Fu n cion a lid a de
X Exibe dígit os para qualquer t ipo de dado
9 Exibe dígit os para qualquer t ipo de dado
# Exibe dígit os para qualquer t ipo de dado
! Convert e caract er es alfabét icos para m aiúsculo
* Exibe ast erisco no lugar de espaços em branco inicias em núm er os
. Exibe a posição do pont o decim al
, Exibe a posição do m ilhar

Ex e m plo 0 1 – Pict u r e ca m po n u m é r ico

CT2_VALOR – Num érico – 17,2


Pict ure: @E 99,999,999,999,999.99

- 137 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 2 .2 . Cust om iz a çã o de ga t ilhos – Configu r a dor

A aplicação ERP ut iliza o r ecur so de gat ilhos em cam po com a finalidade de auxiliar o usuário
no pr eenchim ent o de infor m ações durant e a digit ação de inform ações. As funções que podem
ser ut ilizadas no gat ilho est ão diret am ent e r elacionadas a definição da expr essão de ret orno
que será execut ada na avaliação do gat ilho do cam po.

As regras que dev em ser obser vadas na m ont agem de um gat ilho e configuração de seu
ret orno são:

 Na definição da chave de busca do gat ilho dev e ser avaliada qual filial deverá ser
ut ilizada com o part e da chave: a filial da t abela de origem do gat ilho ou a filial da
t abela que será consult ada. O que norm alm ent e det erm ina a filial que será ut ilizada
com o part e da chav e é j ust am ent e a inform ação que será consult ada, aonde:

o Consult as de inform ações ent r e t abelas com est rut ura de cabeçalho e it ens
dev em ut ilizar a filial da t abela de origem , pois am bas as t abelas dev em possuir
o m esm o t rat am ent o de filial ( com part ilhado ou ex clusivo) .

Ex e m plos:

Pedido de vendas - > SC5 x SC6


Not a fiscal de ent rada - > SF1 x SD1
Ficha de im obilizado - > SN1 x SN3
Or çam ent o cont ábil - > CV1 x CV2

o Consult a de inform ações de t abelas de cadast r os devem ut ilizar a filial da t abela


a ser consult ada, pois o com part ilham ent o dos cadast r os norm alm ent e é
independent e em r elação às m ovim ent ações e out ros cadast ros do sist em a.

Ex e m plos:

Cadast r o de client es - > SA1 ( com part ilhado)


Cadast r o de fornecedor es - > SA2 ( com part ilhado)
Cadast r o de v endedor es - > SA3 ( exclusivo)
Cadast r o de t ransport adoras - > SA4 ( ex clusivo)

o Consult a a inform ações de t abelas de m ovim ent os devem ut ilizar a filial da


t abela a ser consult ada, pois apesar das m ovim ent ações de um m ódulo
seguirem um det erm inado padrão, a consult a pode ser realizada ent re t abelas
de m ódulos dist int os, o que poderia gerar um ret orno incor ret o baseado nas
diferent es param et rizações dest es am bient es.

Ex e m plos:

Cont as a pagar - > SE2 ( com part ilhado)


Movim ent os cont ábeis - > CT2 ( ex clusivo)
Pedidos de com pras - > SC7 ( com part ilhado)
I t ens da not a fiscal de ent rada - > SD1 ( ex clusivo)

 Na definição da regra de r et orno dev e ser considerado o t ipo do cam po que será
at ualizado, pois é est e cam po que det erm ina qual t ipo do r et orno será considerado
válido para o gat ilho.

- 138 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 2 .3 . Cust om iz a çã o de pa r â m e t r os – Configur a dor

Os parâm et r os de sist em a ut ilizados pela aplicação ERP e definidos at rav és do m ódulo


configurador possuem as seguint es caract eríst icas fundam ent ais:

 Tipo do parâm et r o: de form a sim ilar a um a variável, um parâm et ro t erá um t ipo de


cont eúdo pr é- definido em seu cadast ro.
Est a inform ação é ut ilizada pelas funções da aplicação ERP na int erpr et ação do
cont eúdo do parâm et r o e ret orno dest a inform ação a r ot ina que o consult ou.

 I nt erpr et ação do cont eúdo do parâm et r o: diver sos parâm et r os do sist em a t êm seu
cont eúdo m acr o ex ecut ado durant e a execução de um a r ot ina do ERP. Est es
parâm et ros m acr o ex ecut áveis t em com o única caract eríst ica em com um seu t ipo:
caract ere, m as não exist e nenhum ident ificador explicit o que perm it e a fácil
visualização de quais parâm et ros possuem um ret orno sim ples e de quais parâm et ros
t erão seu cont eúdo m acro ex ecut ado par a det er m inar o r et orno “ r eal” .

A única form a eficaz de avaliar com o um parâm et ro é t rat ado ( sim ples ret orno ou
m acr o ex ecução) é at r avés do código font e da rot ina, no qual deverá ser avaliado com o
é t rat ado o ret orno de um a dest as funções:

o GETM V( )
o SUPERGETM V( )
o GETN EW PAR( )

Um r et orno m acr o ex ecut ado é det erm inado at rav és do uso do operador “ &” ou de um a
das funções de execução de blocos de código em conj unt o com um a das funções cit adas
ant eriorm ent e.

1 2 .3 .1 . Funçõe s pa r a m a nipula çã o de pa r â m e t r os

A aplicação ERP disponibiliza as seguint es funções par a consult a e at ualização de parâm et ros:

 GETM V( )
 SUPERGETM V( )
 GETN EW PAR( )
 PUTM V( )

GETM V( )

Sin t a x e GETM V( cPa r a m e t r o)


Ret orna o cont eúdo do parâm et ro especificado no arquivo SX6, considerando
D e scr içã o a filial param et rizada na conexão. Caso o parâm et r o não exist a será exibido
um help do sist em a inform ando a ocorr ência.

- 139 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


GETN EW PAR( )

Sin t a x e GETN EW PAR( cPa r a m e t r o, cPa dr a o, cFilia l)


Ret orna o cont eúdo do parâm et ro especificado no arquivo SX6, considerando
a filial param et rizada na conexão. Caso o parâm et r o não exist a será exibido
um help do sist em a inform ando a ocorr ência.
D e scr içã o
Difere do Super Get MV( ) pois considera que o parâm et ro pode não exist ir na
versão at ual do sist em a, e por conseqüência não será exibida a m ensagem
de help.

PUTM V( )

Sin t a x e PUTM V( cPa r a m e t r o, cCon t e u do)


At ualiza o cont eúdo do parâm et ro especificado no arquivo SX6, de acordo
D e scr içã o
com as param et rizações inform adas.

SUPERGETM V( )

Sin t a x e SUPERGETM V( cPa r a m e t r o , lH e lp , cPa dr a o , cFilia l)


Ret orna o cont eúdo do parâm et ro especificado no arquivo SX6, considerando
a filial param et rizada na conexão. Caso o parâm et r o não exist a será exibido
um help do sist em a inform ando a ocorr ência.
D e scr içã o
Difere do Get Mv( ) pois os parâm et ros consult ados são adicionados em um a
área de m em ória, que perm it e que em um a nova consult a não sej a
necessário acessar e pesquisar o parâm et ro na base de dados.

1 2 .3 .2 . Cuida dos na ut iliz a çã o de um pa r â m e t r o

Um parâm et ro de sist em a t em a finalidade de pr opiciar um ret orno válido a um cont eúdo


previam ent e definido na configuração do m ódulo para um a rot ina, processo ou quaisquer
out ros t ipos de funcionalidades disponíveis na aplicação.

Apesar de hav er par âm et r os que perm it am a configuração de expr essões, e por conseqüência
a ut ilização de funções para definir o ret orno que será obt ido com a consult a dest e parâm et ro,
é e x pr e ssa m e n t e p r oib ido o u so de fu n çõe s e m pa r â m e t r os pa r a m a n ip u la r
in for m a çõe s d a ba se de d a dos do sist e m a .

Caso haj a a necessidade de ser im plem ent ado um t rat am ent o adicional a um processo padrão
do sist em a, o m esm o dev erá ut ilizar o r ecur so de pont o de ent r ada.

A razão dest a r est rição é sim ples:

 As r ot inas da aplicação ERP não prot egem a consult a de cont eúdos de parâm et r os
quant o a gravações r ealizadas dent ro ou fora de um a t ransação.

 Dest a form a, quaisquer alt eração na base r ealizada por um a r ot ina configurada em um
parâm et ro pode ocasionar a perda da int egridade das inform ações do sist em a.

- 140 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 2 .4 . Pont os de Ent r a da – Conce it os, Pr e m issa s e Re gr a s

Con ce it os

Um pont o de ent rada é um a User Funct ion desenvolvida com a finalidade de int eragir com um a
rot ina padrão da aplicação ERP.

A User Funct ion deverá t er um nom e pr é- est abelecido no desenv olvim ent o da rot ina padrão do
ERP, e de acordo est a pré- disposição e o m om ent o no qual o pont o de ent rada é ex ecut ado
durant e um pr ocessam ent o, ele poderá:

 Com plem ent ar um a validação r ealizada pela aplicação;

 Com plem ent ar as at ualizações realizadas pelo processam ent o em t abelas padrões do
ERP;

 I m plem ent ar a at ualização de t abelas especificas durant e o pr ocessam ent o de um a


rot ina padrão do ERP;

 Ex ecut ar um a ação sem processos de at ualizações, m as que necessit e ut ilizar as


inform ações at uais do am bient e durant e o processam ent o da rot ina padrão para
det erm inar as caract eríst icas do pr ocesso;

 Subst it uir um processam ent o padrão do sist em a por um a regra específica do client e no
qual o m esm o ser á im plem ent ado.

Pr e m issa s e Re gr a s

 Um pont o de ent rada não dev e ser ut ilizado para out ras finalidades senão para as quais
o m esm o foi pré- definido, sob pena de causar a perda da int egridade das inform ações
da base de dados ou pr ovocar event os de er r o durant e a ex ecução da r ot ina padrão.

 Um pont o de ent rada dev e ser t ranspar ent e para o pr ocesso padrão, de form a que
t odas as t abelas acessadas pelo pont o de ent rada e que sej am ut ilizadas pela rot ina
padrão, deverão t er sua sit uação im ediat am ent e ant erior à execução do pont o
rest aurada ao t érm ino do m esm o, e para ist o r ecom enda- se o uso das funções
GETAREA( ) e RESTAREA( ) .

 Com o um pont o de ent rada não é execut ado da form a t radicional, ou sej a, ele não é
cham ado com o um a função, ele não recebe parâm et ros. A aplicação ERP disponibiliza
um a variável de sist em a denom inada PARAMI XB, a qual recebe os parâm et r os da
função cham adora e os disponibiliza para serem ut ilizados pela rot ina cust om izada.

 A variável PARAMI XB não possui um padrão de definição nos códigos font es da


aplicação ERP, dest a for m a seu t ipo pode variar dest e um cont eúdo sim ples ( caract er e,
num érico, lógico e et c.) a um t ipo com plexo com o um ar ray ou um obj et o. Dest a form a
é necessário sem pr e avaliar a docum ent ação sobre o pont o bem com o prot eger a
função cust om izada de t ipos de PARAMI XB não t rat ados por ela.

- 141 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


13. I nt e r fa ce s visua is

A linguagem ADVPL possui duas for m as dist int as para definição de int erfaces visuais no
am bient e ERP: sint axe conv encional, nos padr ões da linguagem CLI PPER e a sint axe orient ada
a obj et os.

Além das diferent es sint axes disponíveis para definição das int erfaces visuais o ERP Prot heus
possui funcionalidades pré- definidas, as quais j á cont êm t odos os t rat am ent os necessários a
at ender as necessidades básicas de acesso e m anut enção das inform ações do sist em a.

Nest e t ópico serão abordadas as sint axes convencionais para definição das int erfaces visuais
da linguagem ADVPL e as int erfaces de m anut enção disponíveis no am bient e ERP Pr ot heus.

1 3 .1 . Sint a x e e com pone nt e s da s int e r fa ce s visua is

A sint axe conv encional para definição de com ponent es visuais da linguagem ADVPL depende
diret am ent e no include especificado no cabeçalho do font e. Os dois includes disponíveis para o
am bient e ADVPL Pr ot heus são:

 RWMAKE.CH: perm it e a ut ilização da sint axe CLI PPER na definição dos com ponent es
visuais.

 PROTHEUS.CH: perm it e a ut ilização da sint axe ADVPL conv encional, a qual é um


aprim oram ent o da sint axe CLI PPER, com a inclusão de novos at ribut os para os
com ponent es visuais disponibilizados no ERP Pr ot heus.

Para ilust rar a diferença na ut ilização dest es dois includes, segue abaixo as diferent es
definições para o com ponent es Dialog e MsDialog:

Ex e m plo 0 1 – I n clu d e Rw m a k e .ch

# include “ rwm ak e.ch”

@ 0,0 TO 400,600 DI ALOG oDlg TI TLE " Janela em sint axe Clipper"
ACTI VATE DI ALOG oDlg CENTERED

Ex e m plo 0 2 – I n clu d e Pr ot h e u s.ch

# include “ prot heus.ch”

DEFI NE MSDI ALOG oDlg TI TLE " Janela em sint axe ADVPL " FROM 000,000 TO 400,600 PI XEL
ACTI VATE MSDI ALOG oDlg CENTERED

Am bas as sint axes produzirão o m esm o efeit o quando com piladas e


ex ecut adas no am bient e Pr ot heus, m as dev e ser ut ilizada sem pr e a sint axe
ADVPL at rav és do uso do include PROTHEUS.CH

- 142 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Os com ponent es da int erface visual que ser ão t rat ados nest e t ópico, ut ilizando a sint axe
ADVPL são:

 M SD I ALOG( )
 M SGET( )
 SAY( )
 BUTTON ( )
 SBUTTON ( )

BUTTON ( )

@ n Lin h a ,n Colu n a BUTTON cTe x t o SI ZE n La r g u r a ,n Alt u r a UN I D AD E


Sin t a x e
OF oObj e t oRe f ACTI ON AÇÃO
Define o com ponent e visual But t on, o qual per m it e a inclusão de bot ões de
D e scr içã o operação na t ela da int erface, os quais serão visualizados som ent e com um
t ext o sim ples para sua ident ificação.

M SD I ALOG( )

D EFI N E M SD I ALOG oObj e t oD LG TI TLE cTit u lo FROM n Lin I n i,n ColI n i


Sin t a x e
TO n LiFim ,n ColFim OF oOb j e t oRe f UN I D AD E
Define o com ponent e MSDI ALOG( ) , o qual é ut ilizado com o base para os
D e scr içã o dem ais com ponent es da int erface visual, pois um com ponent e MSDI ALOG( )
é um a j anela da aplicação.

M SGET( )

@ n Lin h a , n Colu n a M SGET V ARI AVEL SI ZE n La r gu r a ,n Alt u r a


Sin t a x e UN I D AD E OF oObj e t oRe f F3 cF3 V ALI D V ALI D W H EN W H EN PI CTURE
cPict ur e
Define o com ponent e visual MSGET, o qual é ut ilizado para capt ura de
D e scr içã o
inform ações digit áveis na t ela da int erface.

SAY( )

@ n Lin h a , n Colu n a SAY cTe x t o SI ZE n La r g u r a ,n Alt u r a UN I D AD E OF


Sin t a x e
oObj e t oRe f
Define o com ponent e visual SAY, o qual é ut ilizado para exibição de t ext os
D e scr içã o
em um a t ela de int erface.

SBUTTON ( )

D EFI N E SBUTTON FROM n Lin h a , n Colu n a TYPE N ACTI ON AÇÃO


Sin t a x e
STATUS OF oObj e t oRe t
Define o com ponent e visual SBut t on, o qual per m it e a inclusão de bot ões de
operação na t ela da int erface, os quais serão visualizados dependendo da
D e scr içã o
int erface do sist em a ERP ut ilizada som ent e com um t ext o sim ples para sua
ident ificação, ou com um a im agem ( Bit Map) pré- definido.

- 143 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


I n t e r fa ce v isu a l com p le t a

Abaixo segue um código com plet o de int erface, ut ilizado t odos os elem ent os da int erface visual
descrit os ant eriorm ent e:

DEFI NE MSDI ALOG oDlg TI TLE cTit ulo FROM 000,000 TO 080,300 PI XEL

@ 001,001 TO 040, 150 OF oDlg PI XEL

@ 010,010 SAY cText o SI ZE 55, 07 OF oDlg PI XEL

@ 010,050 MSGET cCGC SI ZE 55, 11 OF oDlg PI XEL PI CTURE " @R 99.999.999/ 9999- 99" ;
VALI D ! Vazio( )

DEFI NE SBUTTON FROM 010, 120 TYPE 1 ACTI ON ( nOpca : = 1,oDlg: End( ) ) ;
ENABLE OF oDlg

DEFI NE SBUTTON FROM 020, 120 TYPE 2 ACTI ON ( nOpca : = 2,oDlg: End( ) ) ;
ENABLE OF oDlg

ACTI VATE MSDI ALOG oDlg CENTERED

O código dem onst rado ant eriorm ent e é ut ilizados nos ex er cícios de fixação
dest e m at erial e dev erá produzir a seguint e int er face:

- 144 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 3 .2 . I nt e r fa ce s pa dr õe s pa r a a t ua liz a ções de da dos

Os pr ogram as de at ualização de cadast ros e digit ação de m ovim ent os seguem um padrão que
se apóia no Dicionário de Dados.

Basicam ent e são duas as int erfaces quer perm it em a visualização das inform ações e a
m anipulação dos dados do sist em a.

 Ax Ca da st r o
 M br ow se

Am bos os m odelos ut ilizam com o pr em issa que a est rut ura da t abela a ser ut ilizada est ej a
definida no dicionário de dados do sist em a ( SX3) .

1 3 .2 .1 . Ax Ca da st r o( )

O Ax Cadast r o( ) é um a funcionalidade de cadast ro sim ples, com poucas opções de


cust om ização, a qual é com post a de:

 Brow se padrão para visualização das inform ações da base de dados, de acordo com as
configurações do SX3 – Dicionário de Dados ( cam po br ow se) .

 Funções de pesquisa, visualização, inclusão, alt eração e exclusão padr ões para
visualização de regist r os sim ples, sem a opção de cabeçalho e it ens.

 Sin t a x e : Ax Ca da st r o( cAlia s, cTit u lo, cV ldEx c, cV ld Alt )

 Pa r â m e t r os

Alias padrão do sist em a para ut ilização, o qual dev e est ar definido no


cAlia s
dicionário de dados – SX3.
cTit u lo Tít ulo da Janela

cVldEx c Validação para Exclusão

cVld Alt Validação para Alt eração

Ex e m plo:

# include " prot heus.ch"

User Funct ion XCadSA2( )

Local cAlias : = " SA2"


Local cTit ulo : = " Cadast ro de Fornecedores"
Local cVldExc : = " .T."
Local cVldAlt : = " .T."

dbSelect Area( cAlias)


dbSet Order( 1)
AxCadast r o( cAlias,cTit ulo,cVldEx c,cVldAlt )
Ret urn

- 145 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 3 .2 .2 . M Br ow se ( )

A Mbrow se( ) é um a funcionalidade de cadast ro que perm it e a ut ilização de r ecursos m ais


aprim orados na visualização e m anipulação das inform ações do sist em a, possuindo os
seguint es com ponent es:

 Brow se padrão para visualização das inform ações da base de dados, de acordo com as
configurações do SX3 – Dicionário de Dados ( cam po br ow se) .

 Param et rização para funções específicas para as ações de visualização, inclusão,


alt eração e exclusão de inform ações, o que viabiliza a m anut enção de inform ações com
est rut ura de cabeçalhos e it ens.

 Recur sos adicionais com o ident ificador es de st at us de regist ros, legendas e filt ros para
as inform ações.

 Sin t a x e sim plifica d a : M Br ow se ( n Lin 1 , n Col1 , n Lin 2 , n Col2 , cAlia s)

 Pa r â m e t r os

n Lin 1 , n Col1 , Coordenadas dos cant os aonde o browse será exibido. Para seguir o
n Lin 2 , n Col2 padrão da AXCADASTRO( ) use 6,1,22,75 .
Alias padrão do sist em a para ut ilização, o qual dev e est ar definido no
cAlia s
dicionário de dados – SX3.

- 146 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Va r iá ve is p r iv a t e a dicion a is

Array cont endo as funções que serão execut adas pela Mbr owse.
Est e array pode ser par am et rizados com as funções básicas da
AxCadast r o conform e abaixo:

AADD( aRot ina,{ " Pesquisar" ," AxPesqui" ,0,1} )


a Rot in a
AADD( aRot ina,{ " Visualizar" ," AxVisual" ,0,2} )
AADD( aRot ina,{ " I ncluir" ," Ax I nclui" ,0,3} )
AADD( aRot ina,{ " Alt erar " ," AxAlt era" ,0,4} )
AADD( aRot ina,{ " Excluir" ," AxDelet a" ,0,5} )

cCa da st r o Tít ulo do browse que será exibido.

Ex e m plo:

# include " prot heus.ch"

User Funct ion MBrwSA2( )

Local cAlias : = " SA2"


Privat e cCadast r o : = " Cadast ro de Fornecedor es"
Privat e aRot ina := { }

AADD( aRot ina,{ " Pesquisar" ," AxPesqui" ,0,1} )


AADD( aRot ina,{ " Visualizar" ," AxVisual" ,0,2} )
AADD( aRot ina,{ " I ncluir" ," Ax I nclui" ,0,3} )
AADD( aRot ina,{ " Alt erar " ," AxAlt era" ,0,4} )
AADD( aRot ina,{ " Excluir" ," AxDelet a" ,0,5} )

dbSelect Area( cAlias)


dbSet Order( 1)
m Browse( 6,1,22,75,cAlias)
Ret urn

- 147 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1. Ut ilizando a param et rização ex em plificada, o efeit o obt ido com o uso
da Mbr owse( ) ser á o m esm o obt ido com o uso da AxCadast ro( ) .

2. A posição das funções no array aRot ina define o cont eúdo de um a


variável de cont role que será r epassada para as funções cham adas a
part ir da Mbrowse, convencionada com o nOpc. Dest a form a, para
m ant er o padr ão da aplicação ERP a ordem a ser seguida na definição
do aRot ina é;

1 – Pesquisar
2 – Visualizar
3 – I ncluir
4 – Alt erar
5 – Excluir
6 – Livre

Ao definir as funções no array aRot ina, se o nom e da função não for


especificado com “ ( ) ” , a Mbrowse passará com o parâm et ros as seguint es
variáveis de cont r ole:

 cAlia s: Alias at ivo definido para a Mbrow se


 n Re cn o: Record num ber ( recno) do regist r o posicionado no alias
at ivo.
 n Opc: Posição da opção ut ilizada na Mbrowse de acordo com a ordem
da função no array a Rot ina.

- 148 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o BI n clu i( ) su bst it u in do a f u n çã o Ax I n clu i( )

# include " prot heus.ch"

User Funct ion MBrwSA2( )

Local cAlias : = " SA2"

Privat e cCadast r o : = " Cadast ro de Fornecedor es"


Privat e aRot ina := { }

AADD( aRot ina,{ " Pesquisar" ," AxPesqui" ,0,1} )


AADD( aRot ina,{ " Visualizar" ," AxVisual" ,0,2} )
AADD( aRot ina,{ " I ncluir" ," U_BI nclui" ,0,3} )
AADD( aRot ina,{ " Alt erar " ," AxAlt era" ,0,4} )
AADD( aRot ina,{ " Excluir" ," AxDelet a" ,0,5} )

dbSelect Area( cAlias)


dbSet Order( 1)
m Browse( 6,1,22,75,cAlias)
Ret urn

USER FUNCTI ON BI nclui( cAlias, nReg, nOpc)

Local cTudoOk : = " ( Aler t ( 'OK') ,.T.) "


AxI nclui( cAlias,nReg,nOpc,,,,cTudoOk)

RETURN

- 149 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 3 .2 .3 . Ax Funct ions( )

Conform e m encionado nos t ópicos sobre as int erfaces padrões AxCadast ro( ) e Mbr ow se( ) ,
exist em funções padr ões da aplicação ERP que perm it em a visualização, inclusão, alt eração e
exclusão de dados em form at o sim ples.

Est as funções são padrões na definição da int erface AxCadast ro( ) e podem ser ut ilizadas
t am bém da const rução no array aRot ina ut ilizado pela Mbr ow se( ) , as quais est ão list adas a
seguir:

 AXPESQUI ( )
 AX VI SUAL( )
 AX I N CLUI ( )
 AX ALTERA( )
 AX D ELETA( )

AX ALTERA( )

Ax Alt e r a ( cAlia s, n Re g , n Opc, a Ach o, cFu n c, a Cpos, cTu d oOk , lF3 ,;


Sin t a x e
cTr a n sa ct , a Bu t t on s, a Pa r a m , a Au t o, lVir t u a l, lM a x im iz e d)
Função de alt eração padrão das inform ações de um regist ro, no form at o
D e scr içã o
Enchoice, conform e dem onst rado no t ópico sobre a int erface Ax Cadast ro( ) .

AX D ELETA( )

AX D ELETA( cAlia s, n Re g, n Opc, cTr a n sa ct , a Cpos, a Bu t t on s, a Pa r a m ,;


Sin t a x e
a Au t o, lM a x im iz e d)
Função de exclusão padrão das inform ações de um regist r o, no form at o
D e scr içã o
Enchoice, conform e dem onst rado no t ópico sobre a int erface Ax Cadast ro( ) .

AX I N CLUI ( )

Ax I n clu i( cAlia s, n Re g , n Opc, a Ach o, cFu n c, a Cpos, cTu d oOk , lF3 ,;


Sin t a x e
cTr a n sa ct , a Bu t t on s, a Pa r a m , a Au t o, lVir t u a l, lM a x im iz e d)
Função de inclusão padr ão das inform ações de um regist r o, no form at o
D e scr içã o
Enchoice, conform e dem onst rado no t ópico sobre a int erface Ax Cadast ro( ) .

AXPESQUI ( )

Sin t a x e AXPESQUI ( )
Função de pesquisa padrão em r egist ros exibidos pelos br owses do sist em a,
a qual posiciona o br ow se no regist ro pesquisado. Exibe um a t ela que
D e scr içã o
perm it e a seleção do índice a ser ut ilizado na pesquisa e a digit ação das
inform ações que com põe a chave de busca.

- 150 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


AX VI SUAL( )

AX VI SUAL( cAlia s, n Re g, n Opc, a Ach o, n ColM e n s, cM e n sa g e m , cFu n c,;


Sin t a x e
a Bu t t on s, lM a x im iz e d )
Função de visualização padrão das inform ações de um regist r o, no for m at o
D e scr içã o
Enchoice, conform e dem onst rado no t ópico sobre a int erface Ax Cadast ro( ) .

- 151 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


APÊN D I CES

BOAS PRÁTI CAS D E PROGRAM AÇÃO


14. Ut iliz a çã o de I de nt a çã o

É obrigat ória a ut ilização da ident ação, pois t orna o código m uit o m ais legível. Vej a os
ex em plos abaixo:

A ut ilização da ident ação seguindo as est rut uras de cont role de fluxo ( while, if, caso et c) t orna
a com pr eensão do código m uit o m ais fácil:

Para ident ar o código ut ilize a t ecla < TAB> e na ferram ent a DEV- St udio, a qual pode ser
configurada at rav és da opção “ Pr efer ências” :

- 152 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


15. Ca pit ula çã o de Pa la vr a s- Cha ve

Um a conv enção am plam ent e ut ilizada é a de capit ular as palavras chaves, funções, variáveis e
cam pos ut ilizando um a com binação de caract er es em m aiúsculo e m inúsculo, visando facilit ar
a leit ura do código font e. O código a seguir:

loca l n cn t w h ile ( n cn t + + < 1 0 ) n t ot a l + = n cn t * 2 e n ddo

Ficaria m elhor com as palavras chav es e variáv eis capit uladas:

Loca l n Cn t W h ile ( n Cn t + + < 1 0 ) n Tot a l + = n Cn t * 2 En dD o

Para funções de m anipulação de dados que com ecem por “ db” , a capit ulação
só será efet uada após o “ db” :

 dbSe e k ( )
 dbSe le ct Ar e a ( )

- 153 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 5 .1 . Pa la vr a s e m m a iú sculo

A regra é ut ilizar caract er es em m aiúsculo para:

 Con st a nt e s:
# define NUMLI NES 60 # define NUMPAGES 1000

 Va r iá ve is de m e m ór ia :
M- > CT2_CRCONV M- > CT2_MCONVER : = CriaVar( " CT2_CONVER" )

 Ca m p os:
SC6- > C6_NUMPED

 Qu e r y s:
SELECT * FROM...

16. Ut iliz a çã o da N ot a çã o H únga r a

A not ação húngara consist e em adicionar os prefixos aos nom es de variáveis, de m odo a
facilm ent e se ident ificar seu t ipo. I st o facilit a na criação de códigos- font e ext ensos, pois
usando a Not ação Húngara, v ocê não pr ecisa ficar o t em po t odo volt ando à definição de um a
variável para se lem brar qual é o t ipo de dados que dev e ser colocado nela. Variáveis devem
t er um pr efixo de Not ação Húngara em m inúsculas, seguido de um nom e que ident ifique a
função da variável, sendo que a inicial de cada palavra dev e ser m aiúscula.

É obrigat ória a ut ilização dest a not ação para nom ear variáveis.

N ot a çã o Tipo de da do Ex e m plo
a Array aValores
b Bloco de código bSeek
c Caract er cNom e
d Dat a dDat aBase
l Lógico lCont inua
n Num érico nValor
o Obj et o oMainWindow
x I ndefinido xCont eudo

- 154 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


17. Pa la vr a s r e se r va da s

AADD DTOS I NKEY REPLI CATE VAL


ABS ELSE I NT RLOCK VALTYPE
ASC ELSEI F LASTREC ROUND WHI LE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRI M YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDI F LOWER SELECT CHR EOF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL FCOUNT MI N SQRT
CTOD FI ELDNAME MONTH STR DATE
FI LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED FOUND PROCEDURE
TRANSFORM DEVPOS FUNCTI ON PROW TRI M
DOW IF RECCOUNT TYPE DTOC
IIF RECNO UPPER TRY AS
CATCH THROW

 Palavras reservadas não podem ser ut ilizadas para variáveis,


procedim ent os ou funções;

 Funções r eserv adas são pert encent es ao com pilador e não podem ser
redefinidas por um a aplicação;

 Todos os ident ificadores que com eçarem com dois ou m ais caract eres
“ _” são ut ilizados com o ident ificadores int ernos e são r eserv ados.

 I dent ificadores de escopo PRI VATE ou PUBLI C ut ilizados em aplicações


específicas desenvolvida por ou para client es dev em t er sua
ident ificação iniciada por um caract ere “ _” .

- 155 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


LI STAS DE EXERCÍ CI OS
M ódulo 0 1 : I nt r oduçã o à pr ogr a m a çã o

Aprim orar os seguint es algorit m os descrit os na apost ila:

 Usar t elefone público – cart ão


 Frit ar um ov o
 Mascar um chiclet e
01
 Tr ocar lâm padas
 Descascar bat at as
 Jogar o “ Jogo da Forca”

Mont ar os diagram as de blocos para os algorit m os desenv olvidos no ex ercício


ant erior:

 Usar t elefone público – cart ão


 Frit ar um ov o
02  Mascar um chiclet e
 Tr ocar lâm padas
 Descascar bat at as
 Jogar o “ Jogo da Forca”

- 156 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ódulo 0 2 : A lingua ge m AD VPL

Desenv olver um pr ogram a que im plem ent e o algorit m o de descascar bat at as,
01
ut ilizando a est rut ura de r epet ição While, dem onst rando quant as bat at as
foram descascadas:

Desenv olver um pr ogram a que im plem ent e o algorit m o de descascar bat at as,
02
ut ilizando a est rut ura de repet ição FOR, dem onst rando quant as bat at as foram
descascadas:

Desenv olver um pr ogram a que im plem ent e o algorit m o de descascar bat at as,
03
ut ilizando a est rut ura de r epet ição FOR, dem onst rando quant as bat at as falt am
para serem descascadas:

- 157 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


04 Desenv olver um program a que im plem ent e o algorit m o do Jogo da For ca:

05 Desenv olver um program a que im plem ent e o algorit m o do Jogo da Velha:

Desenv olver um pr ogr am a que perm it a ao usuário pesquisar um client e


06 inform ando seu CNPJ e caso o m esm o exist a na base, exibir suas pr incipais
inform ações.

Ut ilizando a int erface visual desenv olvida para o ex er cício ant erior,
07 desenvolver a função genérica Get Text o( ) , par a ser ut ilizada nas aplicações do
Jogo da Velha e Jogo da For ca.

- 158 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ut ilizando a função AVI SO( ) desenvolver um pr ogram a que perm it a ao usuário
08 selecionar a opção de busca de CNPJ por client e ou fornecedor, e caso
encont re exiba seus dados principais.

Desenv olver um a r ot ina que capt ure vários CNPJs de client es inform ados pelo
usuário, e verifique para cada um deles se o m esm o exist e ou não na base de
09
dados. Ao final inform ar quais CNPJs for am infor m ados, e de acordo com a
seleção do usuário, exibir os dados principais de um dest es client es.

Ut ilizando a função FORMBATCH( ) desenv olver um a rot ina que v erifique se


para cada it em de um not a fiscal de ent rada exist e o r espect ivo cabeçalho, e
10
caso sej a encont rado algum it em inconsist ent e, com unique est a ocor rência ao
usuário que est á realizando o processam ent o.

Desenv olver um a rot ina que, at ravés do uso de um bloco de código, convert a
11 a est rut ura da t abela SA1 obt ida com a função DBSTRUCT( ) em um a st ring
denom inada cCam po.

- 159 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ódulo 0 3 : D e se n volve ndo pe que n a s cust om iz a çõe s

Desenv olver um a validação para um cam po específico do t ipo caract ere, cuj o
01 cont eúdo est ej a relacionado a out ra t abela, e que exiba um a m ensagem de
aviso caso o código inform ado não exist a nest a t abela relacionada.

Desenv olver um a validação para um cam po car act ere exist ent e na base, para
02 que sej a avaliado se aquele código j á exist e cadast rado, e caso posit ivo exiba
um a m ensagem de aviso alert ando dest a ocorr ência.

Desenv olver um gat ilho que r et orne um a descrição com plem ent ar para um
03 cam po vinculado ao cam po código ut ilizado nos exercícios ant eriores.

- 160 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cust om izar o parâm et r o que define o pr efixo do t ít ulo de cont as a pagar
gerado pela int egração COMPRAS - > FI NANCEI RO at rav és da inclusão de um a
04
not a fiscal de ent rada, de form a que o pr efix o do t ít ulo sej a gerado com o
código da filial corr ent e.

Prot eger a r ot ina desenvolvida no exer cício ant erior , de form a a garant ir que
na ut ilização da filial com o pr efixo do t ít ulo não irá ocorr er duplicidade de
05
dados no cont as a pagar do financeiro.

I m plem ent ar um a validação adicional no cadast ro de client es, at r avés do


pont o de ent rada adequado, de form a que o cam po CNPJ ( A1_CGC) sej a
06
obrigat ório para t odos os t ipos de client e, ex cet o os definidos com o Ext erior .

- 161 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ÓD ULO 0 4 : De se nvolve ndo a plica çõe s e m AD VPL
18. A lingua ge m AD V PL

A Linguagem ADVPL t ev e seu início em 1994, sendo na v erdade um a evolução na ut ilização de


linguagens no padrão xBase pela Microsiga Soft ware S.A. ( Clipper, Visual Obj ect s e depois
FiveWin) . Com a criação da t ecnologia Prot heus, era necessário criar um a linguagem que
suport asse o padrão x Base para a m anut enção de t odo o código exist ent e do sist em a de ERP
Siga Advanced. Foi ent ão criada a linguagem cham ada Advanced Pr ot heus Language.

O ADVPL é um a ext ensão do padrão x Base de com andos e funções, operador es, est rut uras de
cont r ole de fluxo e palavras reservadas, cont ando t am bém com funções e com andos
disponibilizados pela Microsiga que a t orna um a linguagem com plet a para a criação de
aplicações ERP pront as para a I nt ernet . Tam bém é um a linguagem orient ada a obj et os e
ev ent os, perm it indo ao program ador desenv olver aplicações visuais e criar suas próprias
classes de obj et os.

Quando com pilados, t odos os arquivos de código t ornam - se unidades de int eligência básicas,
cham ados APO´ s ( de Advanced Prot heus Obj ect s) . Tais APO´ s são m ant idos em um
reposit ório e car regados dinam icam ent e pelo PROTHEUS Ser ver para a execução. Com o não
exist e a linkedição, ou união física do código com pilado a um det erm inado m ódulo ou
aplicação, funções criadas em ADVPL podem ser ex ecut adas em qualquer pont o do am bient e
Advanced Pr ot heus.

O com pilador e o int erpret ador da linguagem ADVPL é o própr io ser vidor PROTHEUS
( PROTHEUS Ser ver) , e exist e um am bient e visual para desenvolvim ent o int egrado
( PROTHEUSI DE) onde o código pode ser criado, com pilado e depurado.

Os program as em ADVPL podem cont er com andos ou funções de int er face com o usuário. De
acordo com t al caract eríst ica, t ais program as são subdivididos nas seguint es cat egorias:

Pr ogr a m a çã o Com I n t e r f a ce Pr óp r ia com o Usu á r io

Nest a cat egoria ent ram os pr ogram as desenvolvidos para serem ex ecut ados at rav és do
t erm inal rem ot o do Prot heus, o Pr ot heus Rem ot e. O Pr ot heus Rem ot e é a aplicação
encar r egada da int erface e da int eração com o usuário, sendo que t odo o pr ocessam ent o do
código em ADVPL, o acesso ao banco de dados e o gerenciam ent o de conexões é efet uado no
Prot heus Ser ver. O Pr ot heus Rem ot e é o principal m eio de acesso a execução de r ot inas
escrit as em ADVPL no Prot heus Serv er, e por isso perm it e ex ecut ar qualquer t ipo de código,
t enha ele int erface com o usuário ou não. Por ém nest a cat egoria são considerados apenas os
program as que realizem algum t ipo de int erface r em ot a ut ilizando o prot ocolo de com unicação
do Prot heus.

Podem - se criar r ot inas para a cust om ização do sist em a ERP Micr osiga Prot heus, desde
processos adicionais at é m esm o relat órios. A grande v ant agem é apr ov eit ar t odo o am bient e
m ont ado pelos m ódulos do ERP Microsiga Prot heus. Por ém , com o ADVPL é possível at é
m esm o criar t oda um a aplicação, ou m ódulo, do com eço.

Todo o código do sist em a ERP Microsiga Prot heus é escrit o em ADVPL.

- 162 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Pr ogr a m a çã o Se m I n t e r f a ce Pr óp r ia com o Usu á r io

As rot inas criadas sem int erface são consideradas nest a cat egoria porque geralm ent e t êm um a
ut ilização m ais específica do que um processo adicional ou um relat ório nov o. Tais rot inas não
t êm int erface com o usuário at rav és do Pr ot heus Rem ot e, e qualquer t ent at iva nesse sent ido
( com o a criação de um a j anela padrão) ocasionará um a exceção em t em po de execução. Est as
rot inas são apenas processos, ou Jobs, execut ados no Pr ot heus Ser ver. Algum as vezes, a
int erface dest as rot inas fica a cargo de aplicações ext ernas, desenvolvidas em out ras
linguagens, que são responsáv eis por iniciar os pr ocessos no ser vidor Pr ot heus at ravés dos
m eios disponíveis de int egração e conect ividade no Prot heus.

De acordo com a ut ilização e com o m eio de conect ividade ut ilizado, est as rot inas são
subcat egorizadas assim :

 Pr ogr a m a çã o por Pr oce ssos

Rot inas escrit as em ADVPL podem ser iniciadas com o pr ocessos individuais ( sem int erface) no
Prot heus Serv er at rav és de duas m aneiras: I niciadas por out ra r ot ina ADVPL at rav és da
cham ada de funções com o St art Job( ) ou CallProc( ) ou iniciadas aut om at icam ent e na
inicialização do Pr ot heus Serv er ( quando pr opriam ent e configurado) .

 Pr ogr a m a çã o de RPC

At ravés de um a bibliot eca de funções disponível no Prot heus ( um a API de com unicação) ,
podem - se execut ar r ot inas escrit as em ADVPL diret am ent e no Prot heus Serv er, at r avés de
aplicações ext ernas escrit as em out ras linguagens. I st o é o que se cham a de RPC ( de Rem ot e
Procedure Call, ou Cham ada de Pr ocedim ent os Rem ot a) .

O servidor Prot heus t am bém pode ex ecut ar r ot inas em ADVPL em out ros servidores Pr ot heus
at ravés de conexão TCP/ I P dir et a ut ilizando o conceit o de RPC. Do m esm o m odo, aplicações
ext ernas podem r equisit ar a execução de r ot inas escrit as em ADVPL at rav és de conexão
TCP/ I P diret a.
Program ação Web

O Pr ot heus Ser ver pode t am bém ser ex ecut ado com o um servidor Web, r espondendo a
requisições HTTP. No m om ent o dest as r equisições, pode ex ecut ar r ot inas escrit as em ADVPL
com o pr ocessos individuais, enviando o result ado das funções com o ret orno das requisições
para o client e HTTP ( com o por exem plo, um Br owser de I nt ernet ) . Qualquer rot ina escrit a em
ADVPL que não cont enha com andos de int erface pode ser ex ecut ada at rav és de r equisições
HTTP. O Pr ot heus perm it e a com pilação de arquivos HTML cont endo código ADVPL em but ido.
São os cham ados arquivos ADVPL ASP, para a criação de páginas dinâm icas.

 Pr ogr a m a çã o Te lN e t

TelNet é part e da gam a de pr ot ocolos TCP/ I P que perm it e a conexão a um com put ador rem ot o
at ravés de um a aplicação client e dest e pr ot ocolo. O PROTHEUS Ser ver pode em ular um
t erm inal TelNet , at ravés da execução de r ot inas escrit as em ADVPL. Ou sej a, pode- se escrever
rot inas ADVPL cuj a int erface final será um t erm inal TelNet ou um colet or de dados m óv el.

- 163 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


19. Est r ut ur a de um Pr ogr a m a AD VPL

Um program a de com put ador nada m ais é do que um grupo de com andos logicam ent e
dispost os com o obj et ivo de ex ecut ar det erm inada t arefa. Esses com andos são gravados em
um arquivo t ext o que é t ransform ado em um a linguagem ex ecut ável por um com put ador
at ravés de um pr ocesso cham ado com pilação. A com pilação subst it ui os com andos de alt o
nível ( que os hum anos com pr eendem ) por inst ruções de baixo nível ( com preendida pelo
sist em a operacional em execução no com put ador) . No caso do ADVPL, não é o sist em a
operacional de um com put ador que irá execut ar o código com pilado, m as sim o Prot heus
Ser ver.

Dent r o de um program a, os com andos e funções ut ilizados devem seguir regras de sint axe da
linguagem ut ilizada, pois caso cont rário o pr ogram a será int errom pido por er ros. Os er ros
podem ser de com pilação ou de ex ecução.

Er ros de com pilação são aqueles encont rados na sint axe que não per m it em que o arquivo de
código do program a sej a com pilado. Podem ser com andos especificados de form a err ônea,
ut ilização inválida de operador es, et c.

Er ros de execução são aqueles que acont ecem depois da com pilação, quando o program a est á
sendo ex ecut ado. Podem ocor rer por inúm eras razões, m as geralm ent e se refer em as funções
não exist ent es, ou variáveis não criadas ou inicializadas, et c.

Lin h a s d e Pr ogr a m a

As linhas exist ent es dent ro de um arquivo t ex t o de código de program a podem ser linhas de
com ando, linhas de com ent ário ou linhas m ist as.

 Lin h a s d e Com a n do

Linhas de com ando possuem os com andos ou inst ruções que serão ex ecut adas. Por ex em plo:

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

 Lin h a s d e Com e n t á r io

Linhas de com ent ário possuem um t ext o qualquer, m as não são ex ecut adas. Serv em apenas
para docum ent ação e para t ornar m ais fácil o ent endim ent o do pr ogram a. Exist em t r ês form as
de se com ent ar linhas de t ext o. A prim eira delas é ut ilizar o sinal de * ( ast erisco) no com eço
da linha:

* Programa para cálculo do total


* Autor: Microsiga Software S.A.
* Data: 2 de outubro de 2001

- 164 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Todas as linhas iniciadas com um sinal de ast erisco são consideradas com o com ent ário. Pode-
se ut ilizar a palavra NOTE ou dois sím bolos da let ra " e" com er cial ( &&) para r ealizar a função
do sinal de ast erisco. Por ém t odas est as for m as de com ent ário de linhas são obsolet as e
exist em apenas para com pat ibilização com o padrão xBase. A m elhor m aneira de com ent ar
linhas em ADVPL é ut ilizar duas barr as t ransv er sais:

// Programa para cálculo do total


// Autor: Microsiga Software S.A.
// Data: 2 de outubro de 2001

Out ra form a de docum ent ar t ext os é ut ilizar as barras t ransversais j unt am ent e com o
ast erisco, podendo- se com ent ar t odo um bloco de t ext o sem pr ecisar com ent ar linha a linha:

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

Todo o t ext o encont rado ent r e a abert ura ( indicada pelos caract er es / * ) e o fecham ent o
( indicada pelos caract er es * / ) é considerado com o com ent ário.

 Lin h a s M ist a s

O ADVPL t am bém per m it e que exist am linhas de com ando com com ent ário. I st o é possív el
adicionando- se as duas barras t ransv er sais ( / / ) ao final da linha de com ando e adicionando- se
o t ext o do com ent ário:

Local nCnt
Local nSoma := 0 // Inicializa a variável com zero para a soma
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

 Ta m a n h o d a Lin h a

Assim com o a linha física, delim it ada pela quant idade de caract er es que pode ser digit ado no
edit or de t ext os ut ilizado, exist e um a linha considerada linha lógica. A linha lógica, é aquela
considerada para a com pilação com o um a única linha de com ando.

A princípio, cada linha digit ada no arquivo t ext o é diferenciada após o pressionam ent o da t ecla
< Ent er> . Ou sej a, a linha lógica, é a linha física no arquivo. Por ém algum as vezes, por
lim it ação física do edit or de t ext o ou por est ét ica, pode- se " quebrar" a linha lógica em m ais de
um a linha física no arquivo t ext o. I st o é efet uado ut ilizando- se o sinal de pont o- e- vírgula ( ; ) .

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


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

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

Endif

Nest e exem plo exist e um a linha de com ando para a checagem das v ar iáveis ut ilizadas. Com o a
linha t orna- se m uit o grande, pode- se dividi- la em m ais de um a linha física ut ilizando o sinal de

- 165 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


pont o- e- vírgula. Se um sinal de pont o- e- vír gula for esquecido nas duas prim eiras linhas,
durant e a ex ecução do program a ocor rerá um err o, pois a segunda linha física será
considerada com o um a segunda linha de com ando na com pilação. E durant e a ex ecução est a
linha não t erá sent ido.

1 9 .1 . Ár e a s de um Pr ogr a m a AD VPL

Apesar de não ser um a linguagem de padr ões rígidos com relação à est rut ura do program a, é
im port ant e ident ificar algum as de suas part es. Consider e o pr ogram a de ex em plo abaixo:

#include protheus.ch

/*
+===========================================+
| Programa: Cálculo 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 // Número para o cálculo

// Cálculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

// Exibe o resultado na tela, através da função alert


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

// Termina o programa
Return

A est rut ura de um pr ogr am a ADVPL é com post a pelas seguint es áreas:

 Área de I dent ificação


 Declaração dos includes
 Declaração da função
 I dent ificação do pr ogr am a

 Área de Aj ust es I niciais


 Declaração das variáveis

 Corpo do Program a
 Preparação para o processam ent o
 Processam ent o

 Área de Encer ram ent o

- 166 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ár e a de I d e n t ifica çã o

Est a é um a área que não é obrigat ória e é dedicada a docum ent ação do program a. Quando
exist ent e, cont ém apenas com ent ários explicando a sua finalidade, dat a de criação, aut or , et c.,
e aparece no com eço do program a, ant es de qualquer linha de com ando.

O form at o para est a área não é definido. Pode- se colocar qualquer t ipo de inform ação
desej ada e escolher a form at ação apr opriada.

#include “protheus.ch”

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

User Function CalcFator()

Opcionalm ent e podem - se incluir definições de const ant es ut ilizadas no program a ou inclusão
de arquivos de cabeçalho nest a ár ea.

Ár e a de Aj u st e s I n icia is

Nest a área geralm ent e se fazem os aj ust es iniciais, im port ant es para o cor ret o funcionam ent o
do program a. Ent re os aj ust es se encont ram declarações de variáveis, inicializações, abert ura
de arquivos, et c. Apesar do ADVPL não ser um a linguagem rígida e as variáveis poderem ser
declaradas em qualquer lugar do program a, é aconselhável fazê- lo nest a área visando t ornar o
código m ais legível e facilit ar a ident ificação de variáveis não ut ilizadas.

Local nCnt
Local nResultado := 0 // Resultado do fatorial
Local nFator := 10 // Número para o cálculo

Cor po do Pr ogr a m a

É nest a ár ea que se encont ram as linhas de código do pr ogram a. É onde se realiza a t arefa
necessária at rav és da organização lógica dest as linhas de com ando. Espera- se que as linhas de
com ando est ej am organizadas de t al m odo que no final dest a área o result ado esperado sej a
obt ido, sej a ele arm azenado em um arquivo ou em variáveis de m em ória, pront o par a ser
exibido ao usuário at rav és de um r elat ório ou na t ela.

// Cálculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

- 167 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A preparação para o pr ocessam ent o é form ada pelo conj unt o de validações e processam ent os
necessários ant es da r ealização do pr ocessam ent o em si.

Avaliando o processam ent o do cálculo do fat orial descrit o ant eriorm ent e, pode- se definir que a
validação inicial a ser r ealizada é o cont eúdo da variável nFat or, pois a m esm a det erm inará a
corr et a ex ecução do código.

// Cálculo do fatorial
nFator := GetFator()
// GetFator – função ilustrativa na qual a variável recebe a informação do
usuário.

If nFator <= 0
Alert(“Informação inválida”)
Return
Endif

For nCnt := nFator To 1 Step -1


nResultado *= nCnt
Next nCnt

Ár e a de En ce r r a m e n t o

É nest a área onde as finalizações são efet uadas. É onde os arquivos abert os são fechados, e o
result ado da ex ecução do pr ogr am a é ut ilizado. Pode- se exibir o r esult ado arm azenado em
um a variável ou em um arquivo ou sim plesm ent e finalizar, caso a t arefa j á t enha sido t oda
com plet ada no corpo do program a. É nest a área que se encont r a o encerram ent o do
program a. Todo program a em ADVPL dev e sem pre t erm inar com a palavra chave r et urn.

// Exibe o resultado na tela, através da função alert


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

// Termina o programa
Return

- 168 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


20. D e cla r a çã o e At r ibuiçã o de Va r iá ve is

2 0 .1 . Tipo de D a dos

O ADVPL não é um a linguagem de t ipos rígidos ( st rongly t yped) , o que significa que variáveis
de m em ória podem r eceber difer ent es t ipos de dados durant e a execução do program a.

As variáveis podem t am bém cont er obj et os, m as os t ipos prim ários da linguagem são:

N u m é r ico

O ADVPL não difer encia valores int eiros de v alores com pont o flut uant e, port ant o podem - se
criar variáveis num éricas com qualquer valor dent ro do int ervalo perm it ido. Os seguint es
elem ent os são do t ipo de dado num érico:

2
43.53
0.5
0.00001
1000000

Um a variável do t ipo de dado num érico pode cont er um núm er o de dezoit o dígit os incluindo o
pont o flut uant e, no int ervalo de 2.2250738585072014 E–308 at é 1.7976931348623158
E+ 308.

Lógico

Valores lógicos em ADVPL são ident ificados at r avés de .T. ou .Y. para verdadeiro e .F. ou .N.
para falso ( independent em ent e se os caract er es est iver em em m aiúsculo ou m inúsculo) .

Ca r a ct e r e

St rings ou cadeias de caract er es são ident ificadas em ADVPL por blocos de t ext o ent r e aspas
duplas ( " ) ou aspas sim ples ( ') :

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

Um a variável do t ipo caract er e pode cont er st rings com no m áxim o 1 MB, ou sej a, 1048576
caract eres.

Data

O ADVPL t em um t ipo de dados específico para dat as. I nt ernam ent e as variáveis dest e t ipo de
dado são arm azenadas com o um núm ero cor respondent e a d a t a Ju lia n a .

Variáveis do t ipo de dados Dat a não podem ser declaradas diret am ent e, e sim at rav és da
ut ilização de funções específicas com o por ex em plo CTOD( ) que convert e um a st ring para
dat a.

- 169 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ar r a y

O Ar ray é um t ipo de dado especial. É a disposição de out r os elem ent os em colunas e linhas. O
ADVPL suport a ar ray s unidim ensionais ( vet or es) ou m ult idim ensionais ( m at rizes) . Os
elem ent os de um arr ay são acessados at r avés de índices num éricos iniciados em 1,
ident ificando a linha e coluna para quant as dim ensões exist irem .

Array s dev em ser ut ilizadas com caut ela, pois se forem m uit o grandes podem exaurir a
m em ória do servidor.

Bloco d e Código

O bloco de código é um t ipo de dado especial. É ut ilizado para arm azenar inst ruções escrit as
em ADVPL que poderão ser ex ecut adas post eriorm ent e.

2 0 .2 . D e cla r a çã o de va r iá ve is

Variáveis de m em ória são um dos r ecursos m ais im port ant es de um a linguagem . São ár eas de
m em ória criadas para arm azenar inform ações ut ilizadas por um progr am a para a execução de
t arefas. Por ex em plo, quando o usuário digit a um a inform ação qualquer , com o o nom e de um
produt o, em um a t ela de um program a est a inform ação é arm azenada em um a variável de
m em ória para post erior m ent e ser gravada ou im pressa.

A part ir do m om ent o que um a variável é criada, não é necessário m ais se r efer enciar ao seu
cont eúdo, e sim ao seu nom e.

O nom e de um a variáv el é um ident ificador único o qual deve r espeit ar um m á x im o de 1 0


ca r a ct e r e s. O ADVPL não im pede a criação de um a variável de m em ór ia cuj o nom e cont enha
m ais de 10 caract er es, por é m a p e n a s os 1 0 pr im e ir os se r ã o con side r a d os para a
localização do cont eúdo arm azenado.

Port ant o se forem criadas duas v ariáveis cuj os 10 prim eiros car act er es for em iguais, com o
nTot alGeralAnual e nTot alGeralMensal, as refer ências a qualquer um a delas no pr ogram a
result arão o m esm o, ou sej a, serão a m esm a v ariável:

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

Quando o cont eúdo da variável nTot alGeralMensal é exibido, o seu v alor será de 300. I sso
acont ece porque no m om ent o que esse valor foi at ribuído à variável nTot alGeralAnual, o
ADVPL consider ou apenas os 10 prim eiros caract er es ( assim com o o faz quando dev e exibir o
valor da variável nTot alGeralMensal) , ou sej a, consider ou- as com o a m esm a v ariável. Assim o
valor original de 100 foi subst it uído pelo de 300.

- 170 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 0 .3 . Escopo de va r iá ve is

O ADVPL não é um a linguagem de t ipos rígidos para variáveis, ou sej a, não é necessário
inform ar o t ipo de dados que det erm inada variável irá cont er no m om ent o de sua declaração,
e o seu valor pode m udar durant e a ex ecução do pr ogram a.

Tam bém não há necessidade de declarar variáveis em um a seção específica do seu código
font e, em bora sej a aconselhável declarar t odas as variáveis necessárias no com eço, t ornando
a m anut enção m ais fácil e evit ando a declaração de variáveis desnecessárias.

Para declarar um a variável dev e- se ut ilizar um ident ificador de escopo. Um ident ificador de
escopo é um a palavra chave que indica a que cont ext o do pr ogram a a variável declarada
pert ence. O cont ext o de variáveis pode ser local ( visualizadas apenas dent r o do pr ogram a
at ual) , público ( visualizadas por qualquer out ro program a) , ent r e out r os.

O Con t e x t o d e Va r iá v e is de n t r o de u m Pr ogr a m a

As variáveis declaradas em um program a ou função, são visíveis de acordo com o escopo onde
são definidas. Com o t am bém do escopo depende o t em po de exist ência das variáveis. A
definição do escopo de um a variável é efet uada no m om ent o de sua declaração.

Local nNum ero : = 10

Est a linha de código declara um a variável cham ada nNum ero indicando que pert ence seu
escopo é local.

Os ident ificador es de escopo são:

 Local
 St at ic
 Privat e
 Public

O ADVPL não é rígido em relação à declaração de variáveis no com eço do program a. A inclusão
de um ident ificador de escopo não é necessário para a declaração de um a variável, cont ant o
que um valor lhe sej a at ribuído.

nNumero2 := 15

Quando um valor é at r ibuído à um a variável em um program a ou função, o ADVPL criará a


variável caso ela não t enha sido declarada ant eriorm ent e. A variável ent ão é criada com o se
t ivesse sido declarada com o Privat e.

Devido a essa caract eríst ica, quando se pret ende fazer um a at ribuição a um a variável
declarada pr eviam ent e m as escr ev e- se o nom e da variável de form a incorr et a, o ADVPL não
gerará nenhum err o de com pilação ou de ex ecução. Pois com pr eenderá o nom e da variável
escrit o de form a incorr et a com o se fosse a criação de um a nova variável. I st o alt erará a lógica
do pr ogram a, e é um er ro m uit as vezes difícil de ident ificar.

- 171 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Va r iá ve is de e scopo loca l

Variáveis de escopo local são pert encent es apenas ao escopo da função onde foram declaradas
e devem ser explicit am ent e declaradas com o ident ificador LOCAL, com o no exem plo:

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

Nest e ex em plo, a variável nVar foi declarada com o local e at ribuída com o valor 10. Quando a
função Filha é execut ada, nVar ainda exist e m as não pode ser acessada. Quando a execução
da função Pai t erm inar, a variável nVar é dest r uída. Qualquer variável com o m esm o nom e no
program a que cham ou a função Pai não é afet ada.

Variáveis de escopo local são criadas aut om at icam ent e cada vez que a função onde for em
declaradas for at ivada. Elas cont inuam a exist ir e m ant êm seu valor at é o fim da at ivação da
função ( ou sej a, at é que a função r et orne o cont role para o código que a execut ou) . Se um a
função é cham ada r ecursivam ent e ( por ex em plo, cham a a si m esm a) , cada cham ada em
recursão cria um nov o conj unt o de variáveis locais.

A visibilidade de variáv eis de escopo locais é idênt ica ao escopo de sua declaração, ou sej a, a
variável é visível em qualquer lugar do código font e em que foi declarada. Se um a função é
cham ada r ecursivam ent e, apenas as variáveis de escopo local criadas na m ais r ecent e at ivação
são visíveis.

Va r iá ve is de e scopo st a t ic

Variáveis de escopo st at ic funcionam basicam ent e com o as variáveis de escopo local, m as


m ant êm seu valor at rav és da ex ecução e dev em ser declaradas explicit am ent e no código com
o ident ificador STATI C.

O escopo das variáveis st at ic depende de onde são declaradas. Se for em declaradas dent r o do
corpo de um a função ou procedim ent o, seu escopo será lim it ado àquela rot ina. Se forem
declaradas for a do corpo de qualquer rot ina, seu escopo afet a a t odas as funções declaradas
no font e. Nest e ex em plo, a variável nVar é declarada com o st at ic e inicializada com o v alor 10:

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

- 172 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Quando a função Filha é ex ecut ada, nVar ainda exist e m as não pode ser acessada. Difer ent e
de variáveis declaradas com o LOCAL ou PRI VATE, nVar cont inua a exist ir e m ant êm seu valor
at ual quando a execução da função Pai t erm ina. Ent ret ant o, som ent e pode ser acessada por
ex ecuções subseqüent es da função Pai.

Va r iá ve is de e scopo p r iv a t e

A declaração é opcional para variáveis privadas. Mas podem ser declaradas explicit am ent e com
o ident ificador PRI VATE.

Adicionalm ent e, a at ribuição de valor a um a variável não criada ant eriorm ent e
aut om at icam ent e cria a variável com o privada. Um a vez criada, um a variável privada cont inua
a exist ir e m ant ém seu valor at é que o program a ou função onde foi criada t erm ine ( ou sej a,
at é que a função onde foi criada ret orne para o código que a execut ou) . Nest e m om ent o, é
aut om at icam ent e dest r uída.

É possível criar um a nova variável privada com o m esm o nom e de um a variável j á exist ent e.
Ent ret ant o, a nova ( duplicada) variável pode apenas ser criada em um nível de at ivação
inferior ao nível onde a variável foi declarada pela prim eira vez ( ou sej a, apenas em um a
função cham ada pela função onde a variável j á havia sido criada) . A nova variável privada irá
esconder qualquer out r a variável privada ou pública ( vej a a docum ent ação sobr e variáveis
públicas) com o m esm o nom e enquant o exist ir.

Um a vez criada, um a variável privada é visível em t odo o pr ogr am a enquant o não for
dest ruída aut om at icam ent e quando a rot ina que a criou t erm inar ou um a out ra variável
privada com o m esm o nom e for criada em um a subfunção cham ada ( nest e caso, a variável
exist ent e t orna- se inacessível at é que a nova variável privada sej a dest r uída) .
Em t erm os m ais sim ples, um a variável privada é visível dent ro da função de criação e t odas as
funções cham adas por est a, a m enos que um a função cham ada crie sua pr ópria variável
privada com o m esm o nom e.

Por e x e m p lo:

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

Nest e ex em plo, a variável nVar é criada com escopo privat e e inicializada com o valor 10.
Quando a função Filha é execut ada, nVar ainda exist e e, diferent e de um a variável de escopo
local, pode ser acessada pela função Filha. Quando a função Pai t erm inar, nVar será dest ruída
e qualquer declaração de nVar ant erior se t ornará acessível novam ent e.

No am bient e ERP Pr ot heus, exist e um a convenção adicional a qual deve ser


respeit ada que variáveis em uso pela aplicação não sej am incorr et am ent e
m anipuladas. Por est a conv enção deve ser adicionado o caract er “ _” ant es
do nom e de variáveis PRI VATE e PUBLI C. Maiores inform ações avaliar o
t ópico: Boas Prát icas de Pr ogram ação.

Ex e m plo: Privat e _dDat a

- 173 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Va r iá ve is de e scopo p u blic

Podem - se criar variáv eis de escopo public dinam icam ent e no código com o ident ificador
PUBLI C. As variáveis dest e escopo cont inuam a exist ir e m ant êm seu valor at é o fim da
ex ecução da t hread ( conexão) .

É possível criar um a variável de escopo privat e com o m esm o nom e de um a variável de escopo
public exist ent e, ent r et ant o, não é perm it ido criar um a variável de escopo public com o m esm o
nom e de um a variável de escopo privat e exist ent e.

Um a vez criada, um a variável de escopo public é visível em t odo o program a onde foi
declarada at é que sej a escondida por um a variável de escopo privat e criada com o m esm o
nom e. A nova variável de escopo privat e criada esconde a variável de escopo public exist ent e,
e est a se t ornará inacessível at é que a nova var iável privat e sej a dest ruída. Por ex em plo:

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

Nest e ex em plo, nVar é criada com o public e inicializada com o valor 10. Quando a função Filha
é execut ada, nVar ainda exist e e pode ser acessada. Difer ent e de variáveis locais ou privat es,
nVar ainda exist e após o t érm ino da a ex ecução da função Pai.

Diferent em ent e dos out ros ident ificadores de escopo, quando um a var iável é declarada com o
pública sem ser inicializada, o valor assum ido é falso ( .F.) e não nulo ( nil) .

No am bient e ERP Pr ot heus, exist e um a convenção adicional a qual deve ser


respeit ada que variáveis em uso pela aplicação não sej am incorr et am ent e
m anipuladas. Por est a conv enção deve ser adicionado o caract er “ _” ant es
do nom e de variáveis PRI VATE e PUBLI C. Maiores inform ações avaliar o
t ópico: Boas Prát icas de Pr ogram ação.

Ex e m plo: Public _cRot ina

- 174 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 0 .4 . Ent e nde ndo a influê ncia do e scopo da s va r iá ve is

Consider e as linhas de código de ex em plo:

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

Se est a linha for ex ecut ada em um program a ADVPL, ocorr erá um err o de execução com a
m ensagem " variable does not exist : nPercent ual" , pois est a variável est á sendo ut ilizada em
um a expr essão de cálculo sem t er sido declarada. Para solucionar est e er ro, dev e- se declarar a
variável previam ent e:

Local nPercentual, nResultado


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

Nest e exem plo, as variáveis são declaradas pr eviam ent e ut ilizando o ident ificador de escopo
local. Quando a linha de cálculo for execut ada, o er ro de variável não exist ent e, não m ais
ocor rerá. Por ém variáveis não inicializadas t êm sem pr e o valor default nulo ( Nil) e est e valor
não pode ser ut ilizado em um cálculo pois t am bém gerará err os de ex ecução ( nulo não pode
ser dividido por 100) . A resolução dest e pr oblem a é efet uada inicializando- se a variável
at ravés de um a das for m as:

Local nPercentual, nResultado


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

ou

Local nPercentual := 10, nResultado


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

A diferença ent re o últ im o exem plo e os dois ant erior es é que a variável é inicializada no
m om ent o da declaração. Em am bos os ex em plos, a variável é prim eiro declarada e ent ão
inicializada em um a out ra linha de código.

É aconselhável opt ar pelo operador de at ribuição com post o de dois pont os e sinal de igual, pois
o operador de at ribuição ut ilizando som ent e o sinal de igual pode ser facilm ent e confundido
com o operador r elacional ( para com paração) durant e a criação do program a.

- 175 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


21. Re gr a s a diciona is da lingua ge m AD VPL

2 1 .1 . Pa la vr a s r e se r va da s

AADD DTOS I NKEY REPLI CATE VAL


ABS ELSE I NT RLOCK VALTYPE
ASC ELSEI F LASTREC ROUND WHI LE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRI M YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDI F LOWER SELECT CHR EOF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL FCOUNT MI N SQRT
CTOD FI ELDNAME MONTH STR DATE
FI LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED FOUND PROCEDURE
TRANSFORM DEVPOS FUNCTI ON PROW TRI M
DOW IF RECCOUNT TYPE DTOC
IIF RECNO UPPER TRY AS
CATCH THROW

 Palavras reservadas não podem ser ut ilizadas para variáveis,


procedim ent os ou funções;

 Funções r eserv adas são pert encent es ao com pilador e não podem ser
redefinidas por um a aplicação;

 Todos os ident ificadores que com eçarem com dois ou m ais caract eres
“ _” são ut ilizados com o ident ificadores int ernos e são r eserv ados.

 I dent ificadores de escopo PRI VATE ou PUBLI C ut ilizados em aplicações


específicas desenvolvida por ou para client es dev em t er sua
ident ificação iniciada por um caract ere “ _” .

- 176 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 1 .2 . Pict ur e s de for m a t a çã o disponíve is

Com base na docum ent ação disponível no DEM – Docum ent ação Elet r ônica Microsiga, a
linguagem ADVPL e a aplicação ERP Prot heus adm it em as seguint es pict ures:

D icion á r io d e D a dos ( SX3 ) e GET

Fu n çõe s
Con t e ú do Fu n cion a lid a de
A Per m it e apenas caract er es alfabét icos.
C Exibe CR depois de núm er os posit ivos.
E Exibe num érico com o pont o e vírgula invert idos ( form at o Eur opeu) .
R I nser e caract eres diferent es dos caract er es de t em plat e na exibição, m as não os
insere na variável do GET.
S< n > Per m it e rolam ent o horizont al do t ext o dent ro do GET, < n> é um núm er o int eiro
que ident ifica o t am anho da região.
X Exibe DB depois de núm er os negat ivos.
Z Exibe zeros com o br ancos.
( Exibe núm eros negat ivos ent re par ênt eses com os espaços em branco iniciais.
) Exibe núm eros negat ivos ent re par ênt eses sem os espaços em branco iniciais.
! Convert e caract er es alfabét icos para m aiúsculo.

Te m pla t e s
Con t e ú do Fu n cion a lid a de
X Per m it e qualquer caract er e.
9 Per m it e apenas dígit os para qualquer t ipo de dado, incluindo o sinal para
num éricos.
# Per m it e dígit os, sinais e espaços em branco par a qualquer t ipo de dado.
! Convert e caract er es alfabét icos para m aiúsculo.
* Exibe um ast erisco no lugar dos espaços em br anco iniciais em núm er os.
. Exibe o pont o decim al.
, Exibe a posição do m ilhar.

Exemplo 01 – Picture campo numérico

CT2_VALOR – Numérico – 17,2


Picture: @E 99,999,999,999,999.99

Exemplo 02 – Picture campo texto, com digitação apenas em caixa alta

A1_NOME – Caracter - 40
Picture: @!

- 177 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


22. Pr ogr a m a s de At ua liz a çã o

Os pr ogram as de at ualização de cadast ros e digit ação de m ovim ent os seguem um padrão que
se apóia no Dicionário de Dados.

Basicam ent e são t r ês os m odelos m ais ut ilizados:

 M ode lo 1 ou Ax Ca da st r o: Para cadast ram ent os em t ela cheia.


Ex em plo: Cadast r o de Client e.

 M ode lo 2 : Cadast ram ent os env olvendo apenas um a


t abela, m as com um cabeçalho e,
opcionalm ent e, um r odapé e um corpo com
quant idade ilim it ada de linhas. I deal para
casos em que há dados que se r epet em
por vários it ens e que, por isso, são
colocados no cabeçalho. Ex em plo: Pedido de
Com pra.

 M ode lo 3 : Cadast ram ent os env olvendo duas t abelas,


um com dados de cabeçalho e out ro digit ado
em linhas com os it ens. Exem plo: Pedido de
Vendas, Orçam ent o et c.

Todos os m odelos são genéricos, ou sej a, o program a independe da t abela a ser t rat ada,
bast ando prat icam ent e que se inform e apenas o seu Alias. O rest o é obt ido do
Dicionário de Dados ( SX3) .

- 178 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .1 . M ode lo1 ( ) ou Ax Ca da st r o( )

O Ax Cadast r o( ) é um a funcionalidade de cadast ro sim ples, com poucas opções de


cust om ização, a qual é com post a de:

 Brow se padrão para visualização das inform ações da base de dados, de acordo com as
configurações do SX3 – Dicionário de Dados ( cam po br ow se) .

 Funções de pesquisa, visualização, inclusão, alt eração e exclusão padr ões para
visualização de regist r os sim ples, sem a opção de cabeçalho e it ens.

 Sin t a x e : Ax Ca da st r o( cAlia s, cTit u lo, cV ldEx c, cV ld Alt )

 Pa r â m e t r os:

Alias padrão do sist em a para ut ilização, o qual dev e est ar definido no


cAlia s
dicionário de dados – SX3.
cTit u lo Tít ulo da Janela

cVldEx c Validação para Exclusão

cVld Alt Validação para Alt eração

Ex e m plo: Fu n çã o Ax Ca da st r o( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | XCADSA2 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Exemplo de utilização da função AXCADASTRO() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/

User Function XCadSA2()

Local cAlias := "SA2"


Local cTitulo := "Cadastro de Fornecedores"
Local cVldExc := ".T."
Local cVldAlt := ".T."

dbSelectArea(cAlias)
dbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)

Return Nil

- 179 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o de v a lid a çã o d a a lt e r a çã o

/*/
+------------------------------------------------------------------------------
| Função | VLDALT | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrição | Função de validação de alteração para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/

User Function VldAlt(cAlias,nReg,nOpc)

Local lRet := .T.


Local aArea := GetArea()
Local nOpcao := 0

nOpcao := AxAltera(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo(“Ateração concluída com sucesso!”)
Endif

RestArea(aArea)

Return lRet

Ex e m plo: Fu n çã o de v a lid a çã o d a e x clu sã o

/*/
+------------------------------------------------------------------------------
| Função | VLDEXC | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrição | Função de validação de exclusão para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/

User Function VldExc(cAlias,nReg,nOpc)

Local lRet := .T.


Local aArea := GetArea()
Local nOpcao := 0

nOpcao := AxExclui(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo(“Exclusão concluída com sucesso!”)
Endif

RestArea(aArea)
Return lRet

- 180 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .2 . M ode lo2 ( )

O nom e Modelo 2 foi conceit uado pela Microsiga por se t r at ar de um prot ót ipo de t ela para
ent rada de dados. I nicialm ent e vam os desm ist ificar dois pont os:

 Fu n çã o M od e lo2 ( ) – Trat a- se de um a função pront a que cont em pla o prot ót ipo


Modelo 2, porém , est e é um assunt o que não irem os t rat ar aqui, vist o que é
um a funcionalidade sim ples que quando necessário int ervir em algo na rot ina
não há m uit o recur so para t al.

 Pr ot ót ipo M od e lo 2 – Trat a- se de um a t ela, com o a figura abaixo, onde seu


obj et ivo é efet uar a m anut enção em vários regist ros de um a só vez. Por
ex em plo: efet uar o m ovim ent o int erno de vár ios produt os do est oque em um
único lot e.

2 2 .2 .1 . Com pone nt e s de um a t e la no for m a t o M ode lo 2

Obj e t o M sD ia log ( )

Dev e ser ut ilizada com o j anela padrão para ent rada de dados, é um t ipo de obj et o m odal, ou
sej a, não perm it e que out ra j anela at iva receba dados enquant o est a est iver at iva.

- 181 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Toda v ez que ut ilizar est e com ando o ADVPL exige que sej a declarado a diret iva I nclude no
cabeçalho do program a o arquivo “ Pr ot heus.ch” , ist o porque o com pilador precisará porque
est e com ando t rat a- se de um pseudo código e sua t radução será feit a na com pilação. Vale
lem brar t am bém que est e só será acionado depois que inst anciado e at ivado por out r o
com ando.

DEFINE MSDIALOG oDlg TITLE "Protótipo Modelo 2" FROM 0,0 TO 280,552 OF;
oMainWnd PIXEL

ACTIVATE MSDIALOG oDlg CENTER

Repar em que o com ando DEFI NE MSDI ALOG inst anciou e o com ando ACTI VATE MSDI ALOG
at iva t odos os obj et os, ou sej a, t odo ou qualquer out ro obj et o que precisar colocar nest a
j anela será preciso infor m ar em qual obj et o, para est e caso sem pr e ser á ut ilizada a variável de
obj et o export ável oD lg.

Fu n çã o En ch oice Ba r ( )

Função que cria um a barra de bot ões padrão de Ok e Cancelar, per m it indo a im plem ent ação
de bot ões adicionais.

 Sin t a x e : EN CH OI CEBAR( oD lg, bOk , b Ca n ce la r , [ lM e n sAp a g ] , [ a Bot oe s ] )

 Pa r â m e t r os:

oD lg Obj et o Janela onde a barra ser á criada.


bOk Obj et o Bloco de código ex ecut ado quando clicado bot ão Ok .
bCa n ce la r Obj et o Bloco de código ex ecut ado quando clicado.
I ndica se ao clicar no bot ão Ok aparecerá um a t ela de
lM e n sApa g Lógico
confirm ação de exclusão. Valor padrão falso.
Vet or com inform ações para criação de bot ões
a Bot õe s Vet or adicionais na barra. Seu form at o é { bit m ap, bloco de
código, m ensagem } .

- 182 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : Pr ot ót ipo M od e lo2 – En ch oice

Obj e t o TPa n e l( )

Repar e que para facilit ar o desenv olvim ent o foi ut ilizado o obj et o TPanel para aj udar o
alinham ent o dos obj et os TSay e TGet , ou sej a, a ut ilização dest e recur so per m it e que o
program ador não se pr eocupe com coordenadas com plexas para deixar a união dos obj et os
sim ét ricos.

Ut ilize o obj et o TPanel quando desej ar criar um painel est át ico, onde podem ser criados out r os
cont r oles com o obj et ivo de organizar ou agrupar com ponent es visuais.

 Sin t a x e : TPa n e l( ) :N e w ( [ a n Row ] , [ a n Col] , [ a cTe x t ] , [ a oW n d] , [ a oFon t ] ,


[ a lCe n t e r e d] , [ lPa r 6 ] , [ a n Clr Te x t ] , [ a n Clr Ba ck ] , [ a n W idt h ] ,
[ a n H e ig h t ] , [ a lLow e r e d] , [ a lRa ise d] )

 Pa r â m e t r os:

n Row Num érico vert ical em pixel.


n Col Num érico horizont al em pixel.
cTe x t Text o a ser exibido ao fundo.
oW n d Obj et o da j anela ou cont role onde será criado o obj et o.
oFon t Caract eríst icas da font e do t ext o que aparecerá ao fundo.
lCe n t e r e d Exibe o t ext o do t ít ulo cent ralizado.
lPa r 6 Reser vado.
n Clr Te x t Cor do t ext o de cont r ole.
n Clr Ba ck Cor do fundo de cont r ole.
n W idt h Largura do cont role em pixel.
n H e ig h t Alt ura do cont r ole em pixel.
lLow e r e d Exibe o painel rebaixado em r elação ao cont r ole de fundo.
Exibe a borda do cont r ole rebaixado em relação ao cont r ole de
lRa ise d
fundo.

- 183 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Com a n do SAY - Ob j e t o: TSa y( )

O com ando SAY ou obj et o TSay exibe o cont eúdo de t ext o est át ico sobr e um a j anela.

 Sin t a x e SAY:

@ 4 ,6 SAY " Cód igo:" SI ZE 7 0 ,7 PI XEL OF oTPa n e l1

 Sin t a x e TSa y( ) : TSa y( ) :N e w ( [ a n Row ] , [ a n Col] , [ a bTe x t ] , [ a oW n d] ,


[ a cPict u r e ] , [ a oFon t ] , [ lPa r 7 ] , [ lPa r 8 ] , [ lPa r 9 ] , [ a lPix e ls] ,
[ a n Clr Te x t ] , [ a n Clr Ba ck ] , [ a n W idt h ] , [ a n H e igh t ] , [ lPa r 1 5 ] , [ lPa r 1 6 ] ,
[ lPa r 1 7 ] , [ lPa r 1 8 ] , [ lPa r 1 9 ] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


a nRow
caract eres.
Num érico, opcional. Coordenada horizont al em pixels ou
a nCol
caract eres.
Code- Block, opcional. Quando ex ecut ado deve r et ornar um a
a bTe x t
cadeia de caract eres a ser exibida.
a oW n d Obj et o, opcional. Janela ou diálogo onde o cont r ole será criado.
Caract er e, opcional. Pict ure de form at ação do cont eúdo a ser
a cPict u r e
exibido.
Obj et o, opcional. Obj et o t ipo t Font para configuração do t ipo de
a oFon t
font e que será ut ilizado para exibir o cont eúdo.
lPa r 7 Reser vado.
lPa r 8 Reser vado.
lPa r 9 Reser vado.
Lógico, opcional. Se .T. considera coordenadas passadas em
a lPix e ls pixels se .F., padrão, considera as coordenadas passadas em
caract eres.
a nClr Te x t Num érico, opcional. Cor do cont eúdo do cont role.
a nClr Ba ck Num érico, opcional. Cor do fundo do cont role.
a nW idt h Num érico, opcional. Lar gura do cont role em pixels.
a n H e igh t Num érico, opcional. Alt ura do cont role em pixels.
lPa r 1 5 Reser vado.
lPa r 1 6 Reser vado.
lPa r 1 7 Reser vado.
lPa r 1 8 Reser vado.
lPa r 1 9 Reser vado.

- 184 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Com a n do M SGET - Ob j e t o: TGe t ( )

O com ando MsGet ou o obj et o TGet é ut ilizado para criar um cont role que arm azene ou alt ere
o cont eúdo de um a variável at ravés de digit ação. O cont eúdo da variável só é m odificado
quando o cont r ole perde o foco de edição para out ro cont role.

 Sin t a x e M SGET:

@ 3 ,1 9 2 M SGET dD a t a PI CTURE " 9 9 / 9 9 / 9 9 " SI ZE 4 0 ,7 PI XEL OF oTPa n e l1

 Sin t a x e TGe t ( ) :N e w ( [ a n Row ] , [ a n Col] , [ a bSe t Ge t ] , [ a oW n d] , [ a n W idt h ] ,


[ a n H e ig h t ] , [ a cPict ] , [ a b Va lid] , [ a n Clr For e ] , [ a n Clr Ba ck ] , [ a oFon t ] ,
[ lPa r 1 2 ] , [ oPa r 1 3 ] , [ a lPix e l] , [ cPa r 1 5 ] , [ lPa r 1 6 ] , [ a bW h e n ] , [ lPa r 1 8 ] ,
[ lPa r 1 9 ] , [ a bCh a n g e ] , [ a lRe a dOn ly ] , [ a lPa ssw or d ] , [ cPa r 2 3 ] ,
[ a cRe a dV a r ] , [ cPa r 2 5 ] , [ lPa r 2 6 ] , [ n Pa r 2 7 ] , [ lPa r 2 8 ] )

 Pa r â m e t r os:

a nRow Num érico, opcional. Coordenada vert ical em pixels ou


caract eres.
a nCol Num érico, opcional. Coordenada horizont al em pixels ou
caract eres.
a bSe t Ge t Bloco de código, opcional. Bloco de código no form at o { | u| I F(
Pcount ( ) > 0, < var> : = u, < var > ) } que o cont role ut iliza para
at ualizar a variável < var> . < var> dev e ser t ipo caract er,
num érico ou dat a.
a oW n d Obj et o, opcional. Janela ou cont r ole onde o cont role será
criado.
a nW idt h Num érico, opcional. Lar gura do cont role em pixels.
a n H e igh t Num érico, opcional. Alt ura do cont role em pixels.
a cPict Caract er e, opcional. Máscar a de form at ação do cont eúdo a ser
exibido.
a bVa lid Bloco de código, opcional. Execut ado quando o cont eúdo do
cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo for
válido e .F. quando o cont eúdo for inválido.
a n Clr For e Num érico, opcional. Cor de fundo do cont role.
a nClr Ba ck Num érico, opcional. Cor do t ext o do cont role.
a oFon t Obj et o, opcional. Obj et o t ipo t Font ut ilizado para definir as
caract eríst icas da font e ut ilizada para exibir o cont eúdo do
cont r ole.
lPa r 1 2 Reser vado.
oPa r 1 3 Reser vado.
a lPix e l Lógico, opcional. Se .T. as coordenadas inform adas são em
pixels, se .F. são em car act eres.
cPa r 1 5 Reser vado.
lPa r 1 6 Reser vado.
a bW h e n Bloco de código, opcional. Execut ado quando m udança de foco
de ent rada de dados est á sendo efet uada na j anela onde o
cont r ole foi criado. O bloco deve r et ornar .T. se o cont r ole deve
perm anecer habilit ado ou .F. se não.
lPa r 1 8 Reser vado.

- 185 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


lPa r 1 9 Reser vado.
a bCh a n ge Bloco de código, opcional. Execut ado quando o cont r ole
m odifica o valor da variável associada.
a lRe a dOn ly Lógico, opcional. Se .T. o cont r ole não poderá ser edit ado.
a lPa ssw or d Lógico, opcional. Se .T. o cont r ole exibirá ast eriscos “ * ” no
lugar dos caract er es exibidos pelo cont r ole para sim ular
ent rada de senha.
cPa r 2 3 Reser vado.
a cRe a dVa r Caract er e, opcional. Nom e da variável que o cont role dev erá
m anipular, dev erá ser a m esm a variável inform ada no
parâm et ro abSet Get , e será o r et orno da função ReadVar( ) .
cPa r 2 5 Reser vado.
lPa r 2 6 Reser vado.
n Pa r 2 7 Reser vado.
lPa r 1 8 Reser vado.

Obj e t o M sGe t D a dos( )

Obj et o t ipo list a com um a ou m ais colunas para cadast ram ent o de dados baseado em um
vet or. Sua ut ilização ex ige que sej a ut ilizado t rês variáveis com seu escopo Privat e, são elas:
aRot ina, aHeader e aCOLS.

 Obse r v a çõe s im por t a n t e s:

 O v et or aHeader deve ser const ruído com base no dicionário de dados.


 O vet or aCOLS dev e ser const ruído com base no vet or aHeader, por ém deve-
se criar um a coluna adicional para o cont r ole de exclusão do r egist ro, ou
sej a, quando o usuário t eclar a t ecla < DELETE> a linha ficará na cor cinza e
est a coluna est ar á com o seu valor igual a verdadeiro ( .T.) .
 Quando inst anciado est e obj et o é possível saber em que linha o usuário est á
porque o obj et o t r abalha com um a variável de escopo Public denom inada “ n” ,
seu valor é num érico e t erá sem pr e no cont eúdo a linha em que o usuário
encont ra- se com o cursor.

- 186 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Sin t a x e : M SGETD AD OS( ) :N EW ( n Su pe r ior , n Esqu e r da , n I n fe r ior , n D ir e it a ,
n Opc, [ cLin h a Ok ] , [ cTu doOk ] , [ cI n iCp os ] , [ lAp a ga r ] , [ a Alt e r ] , ,
[ u Pa r 1 ] , [ lVa z io ] , [ n M a x ] , [ cCa m poOk ] , [ cSu pe r Ap a ga r ] ,
[ u Pa r 2 ] , [ cAp a ga Ok ] , [ oW n d ] )

 Pa r â m e t r os:

Dist ancia ent re a MsGet Dados e o ext rem idade superior do


n Su p e r ior
obj et o que a cont ém .
Dist ancia ent re a MsGet Dados e o ext rem idade esquerda do
n Esqu e r d a
obj et o que a cont ém .
Dist ancia ent re a MsGet Dados e o ext rem idade inferior do
n I n f e r ior
obj et o que a cont ém .
Dist ancia ent re a MsGet Dados e o ext rem idade direit a do
n D ir e it a
obj et o que a cont ém .
Posição do elem ent o do vet or aRot ina que a MsGet Dados
n Opc
usará com o referencia.
Função execut ada para validar o cont ext o da linha at ual do
cLin h a Ok
aCols.
Função execut ada para validar o cont ext o geral da
cTu doOk
MsGet Dados ( t odo aCols) .
Nom e dos cam pos do t ipo caract er que ut ilizarão increm ent o
cI n iCpos aut om át ico. Est e parâm et r o deve ser no form at o “ + < nom e
do prim eiro cam po> + < nom e do segundo cam po> + ...” .
lAp a ga r Habilit a delet ar linhas do aCols. Valor padrão falso.
a Alt e r Vet or com os cam pos que poderão ser alt erados.
u Pa r 1 Parâm et r o r eservado.
Habilit a validação da prim eira coluna do aCols para est a não
lV a z io
poder est ar vazia. Valor padrão falso.
nMax Núm er o m áxim o de linhas perm it idas. Valor padrão 99.
cCa m p oOk Função execut ada na validação do cam po.
Função execut ada quando pr essionada as t eclas
cSu pe r Apa ga r
< Ct rl> + < Delet e> .
u Pa r 2 Parâm et r o r eservado.
Função execut ada para validar a ex clusão de um a linha do
cAp a ga Ok
aCols.
oW n d Obj et o no qual a MsGet Dados será criada.

Va r iá ve l Pr iva t e a Rot in a

Array com as rot inas que serão execut adas na MBr owse e que definirá o t ipo de operação que
est á sendo execut ada, por ex em plo: Pesquisar, Visualizar, I ncluir, Alt erar, Ex cluir e out ros.

Est e v et or precisa ser const ruído no form at o:

Ele m e n t o Con t e ú do
1 Tít ulo da opção.
2 Nom e da rot ina ( Funct ion) .
3 Reser vado.
4 Operação ( 1- Pesquisar; 2- Visualizar; 3- I ncluir; 4- Alt erar; 5- Ex clusão) .
Acesso r elacionado a r ot ina, se est á opção não for inform ada nenhum
5
acesso ser á validado.

- 187 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Va r iá ve l Pr iva t e a H e a de r

Array com inform ações das colunas, ou sej a, com as caract eríst icas dos cam pos que est ão
cont idas no dicionário de dados ( SX3) , est e vet or pr ecisa est ar no form at o abaixo:

Ele m e n t o Con t e ú do
1 Tít ulo do cam po
2 Nom e do cam po
3 Máscara do cam po
4 Tam anho do cam po
5 Decim al do cam po
6 Validação de usuário do cam po
7 Uso do cam po
8 Tipo do cam po ( caract er e, num érico, dat a e et c.)
9 Prefixo da t abela
10 Cont ext o do cam po ( real ou virt ual)

Va r iá ve l Pr iva t e a Cols

Vet or com as linhas a serem edit adas. As colunas dev em ser const r uídas com base no vet or
aHeader e m ais um a últ im a coluna com o valor lógico que det erm ina se a linha foi excluída,
inicialm ent e est a dev er á t er o seu cont eúdo igual a falso ( .F.) .

- 188 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .2 .2 . Est r ut ur a de um pr ogr a m a ut iliz a ndo a M ode lo2 ( )

O ex em plo abaixo dem onst ra a m ont agem de um program a para a ut ilização do prot ót ipo
Modelo 2. Ant es de iniciarm os o exem plo vam os est rut urar o pr ogram a.

Est r u t u r a d o p r og r a m a

Linh a s Pr ogr a m a
1 Fun çã o pr in cipa l;
2 Declar ação e at ribuição de variáveis;
3 Acesso a t abela pr incipal e sua or dem ;
4 Cham ada da função MBrowse;
5 Fim da fu n çã o prin cipa l.
6
7 Fun çã o de visua liza çã o, a lt e r a çã o e e x clusã o;
8 Declar ação e at ribuição de variáveis;
9 Acesso ao pr im eiro r egistr o da chave em que est á posicionado na MBrowse;
10 Mont agem das var iáveis est át icas em t ela;
11 Mont agem do vet or aHeader por m eio do dicionár io de dados;
Mont agem do vetor aCOLS de t odos os regist ros r efer ent e a chave pr incipal em que est á
12
posicionado na MBr owse;
13 I nst ância da MsDialog;
14 I nst ância dos obj et os TSay e TGet ;
15 I nst ância do obj et o MsGetDados;
16 At ivar o obj et o pr incipal que é o obj et o da j anela;
17 Se for oper ação difer ent e de visualização e clicou no bot ão OK;
18 A oper ação e de Alt er ação?
19 Cham ar a função par a alt er ar os dados;
20 Caso cont rár io
21 Cham ar a função par a excluir os dados;
22 Fim da fu n çã o de v isua liza çã o, a lt e r a çã o e e x clusã o.
23
24 Fun çã o de in clu sã o;
25 Declar ação e at ribuição de variáveis;
26 Mont agem das var iáveis est át icas em t ela;
27 Mont agem do vet or aHeader por m eio do dicionár io de dados;
Mont agem do vet or aCOLS com o seu cont eúdo confor m e o inicializador padr ão do cam po ou
28
vazio, pois t rat a- se de um a inclusão;
29 I nst ância da MsDialog;
30 I nst ância dos obj et os TSay e TGet ;
31 I nst ância do obj et o MsGetDados;
32 At ivar o obj et o pr incipal que é o obj et o da j anela;
33 Se clicou no bot ão OK;
34 Cham ar a função par a incluir os dados;
35 Fim da fu n çã o de in clu sã o.

- 189 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Rot in a pr in cipa l

#include "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | xModelo2 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Função exemplo do protótipo Modelo2. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function xModelo2()
Private cCadastro := "Protótipo Modelo 2"
Private aRotina := {}

AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})


AADD( aRotina, {"Visualizar" ,'U_Mod2Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod2Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod2Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod2Mnt',0,5})

dbSelectArea("ZA3")
dbSetOrder(1)
dbGoTop()

MBrowse(,,,,"ZA3")
Return

Rot in a de in clu sã o

//+--------------------------------------------------------------------+
//| Rotina | Mod2Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para incluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

User Function Mod2Inc( cAlias, nReg, nOpc )


Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2

Local cCodigo := ZA3->ZA3_CODIGO


Local cNome := ZA3->ZA3_NOME
Local dData := dDataBase

Private aHeader := {}
Private aCOLS := {}
Private aREG := {}

dbSelectArea( cAlias )
dbSetOrder(1)

- 190 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd

oTPanel1 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)

oTPanel1:Align := CONTROL_ALIGN_TOP

@ 4, 006 SAY "Código:" SIZE 70,7 PIXEL OF oTPanel1


@ 4, 062 SAY "Nome:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 166 SAY "Emissao:" SIZE 70,7 PIXEL OF oTPanel1

@ 3, 026 MSGET cCodigo F3 "SA3" PICTURE "@!" VALID;


Mod2Vend(cCodigo, @cNome);
SIZE 030,7 PIXEL OF oTPanel1

@ 3, 080 MSGET cNome When .F. SIZE 78,7 PIXEL OF oTPanel1


@ 3, 192 MSGET dData PICTURE "99/99/99" SIZE 40,7 PIXEL OF
oTPanel1

oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",;
".T.","+ZA3_ITEM",.T.)
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

ACTIVATE MSDIALOG oDlg CENTER ON INIT ;


EnchoiceBar(oDlg,{|| IIF(U_Mod2TOk(), Mod2GrvI(),;
( oDlg:End(), NIL ) )},{|| oDlg:End() })

Return

Rot in a de V isu a liz a çã o, Alt e r a çã o e Ex clu sã o

//+--------------------------------------------------------------------+
//| Rotina | Mod2Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para Visualizar, Alterar e Excluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

User Function Mod2Mnt( cAlias, nReg, nOpc )

Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2

Local cCodigo := Space(Len(Space(ZA3->ZA3_CODIGO)))


Local cNome := Space(Len(Space(ZA3->ZA3_NOME)))
Local dData := Ctod(Space(8))

Private aHeader := {}

- 191 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Private aCOLS := {}
Private aREG := {}

dbSelectArea( cAlias )
dbGoTo( nReg )

cCodigo := ZA3->ZA3_CODIGO
cNome := ZA3->ZA3_NOME
cData := ZA3->ZA3_DATA

Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd

oTPane1 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPane1:Align := CONTROL_ALIGN_TOP

@ 4, 006 SAY "Código:" SIZE 70,7 PIXEL OF oTPanel1


@ 4, 062 SAY "Nome:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 166 SAY "Emissao:" SIZE 70,7 PIXEL OF oTPanel1

@ 3, 026 MSGET cCodigo When .F. SIZE 30,7 PIXEL OF oTPanel1


@ 3, 080 MSGET cNome When .F. SIZE 78,7 PIXEL OF oTPanel1
@ 3, 192 MSGET dData When .F. SIZE 40,7 PIXEL OF oTPanel1

oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

If nOpc == 4
oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",;
".T.","+ZA3_ITEM",.T.)
Else
oGet := MSGetDados():New(0,0,0,0,nOpc)
Endif
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

ACTIVATE MSDIALOG oDlg CENTER ON INIT ;


EnchoiceBar(oDlg,{|| ( IIF( nOpc==4, Mod2GrvA(), ;
IIF( nOpc==5, Mod2GrvE(), oDlg:End() ) ), oDlg:End() ) },;
{|| oDlg:End() })
Return

- 192 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M on t a g e m do a r r a y a H e a de r

//+--------------------------------------------------------------------+
//| Rotina | Mod2aHeader | Autor | Robson Luiz (rleg) |Data|01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aHeader. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

Static Function Mod2aHeader( cAlias )


Local aArea := GetArea()

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek( cAlias )
While !EOF() .And. X3_ARQUIVO == cAlias
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL
AADD( aHeader, { Trim( X3Titulo() ),;
X3_CAMPO,;
X3_PICTURE,;
X3_TAMANHO,;
X3_DECIMAL,;
X3_VALID,;
X3_USADO,;
X3_TIPO,;
X3_ARQUIVO,;
X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return

M on t a g e m do a r r a y a Cols

//+--------------------------------------------------------------------+
//| Rotina | Mod2aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aCOLS. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2aCOLS( cAlias, nReg, nOpc )
Local aArea := GetArea()
Local cChave := ZA3->ZA3_CODIGO
Local nI := 0

If nOpc <> 3
dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )
While !EOF() .And. ;
ZA3->( ZA3_FILIAL + ZA3_CODIGO ) == xFilial( cAlias ) + cChave
AADD( aREG, ZA3->( RecNo() ) )

- 193 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZA3_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return

Efe t iv a çã o d a in clu sã o

//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvI | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para gravar os dados na inclusão. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvI()
Local aArea := GetArea()
Local nI := 0
Local nX := 0

dbSelectArea("ZA3")
dbSetOrder(1)
For nI := 1 To Len( aCOLS )
If ! aCOLS[nI,Len(aHeader)+1]
RecLock("ZA3",.T.)
ZA3->ZA3_FILIAL := xFilial("ZA3")
ZA3->ZA3_CODIGO := cCodigo
ZA3->ZA3_DATA := dData
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
MsUnLock()
Endif
Next nI

RestArea(aArea)
Return

- 194 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Efe t iv a çã o d a a lt e r a çã o

//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvA | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para gravar os dados na alteração. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvA()
Local aArea := GetArea()
Local nI := 0
Local nX := 0

dbSelectArea("ZA3")
For nI := 1 To Len( aREG )
If nI <= Len( aREG )
dbGoTo( aREG[nI] )
RecLock("ZA3",.F.)
If aCOLS[nI, Len(aHeader)+1]
dbDelete()
Endif
Else
RecLock("ZA3",.T.)
Endif

If !aCOLS[nI, Len(aHeader)+1]
ZA3->ZA3_FILIAL := xFilial("ZA3")
ZA3->ZA3_CODIGO := cCodigo
ZA3->ZA3_DATA := dData
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
Endif
MsUnLock()
Next nI
RestArea( aArea )
Return

- 195 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Efe t iv a çã o d a e x clu sã o

//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvE | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para excluir os registros. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvE()
Local nI := 0

dbSelectArea("ZA3")
For nI := 1 To Len( aCOLS )
dbGoTo(aREG[nI])
RecLock("ZA3",.F.)
dbDelete()
MsUnLock()
Next nI
Return

Fu n çã o a u x ilia r : V a lid a çã o d o códig o d o v e n de dor

//+--------------------------------------------------------------------+
//| Rotina | Mod2Vend | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar o código do vendedor. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2Vend( cCodigo, cNome )
If ExistCpo("SA3",cCodigo) .And. ExistChav("ZA3",cCodigo)
cNome := Posicione("SA3",1,xFilial("SA3")+cCodigo,"A3_NOME")
Endif
Return(!Empty(cNome))

Fu n çã o a u x ilia r : V a lid a çã o d o códig o d o ce n t r o de cu st o n a m u d a n ça de lin h a

//+--------------------------------------------------------------------+
//| Rotina | Mod2LOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar a linha de dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function Mod2LOk()
Local lRet := .T.
Local cMensagem := "Não será permitido linhas sem o centro de custo."
If !aCOLS[n, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Endif
Endif
Return( lRet )

- 196 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o a u x ilia r : V a lid a çã o d o códig o d o ce n t r o de cu st o p a r a t oda s a s lin h a s

//+--------------------------------------------------------------------+
//| Rotina | Mod2TOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar toda as linhas de dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

User Function Mod2TOk()


Local lRet := .T.
Local nI := 0
Local cMensagem := "Não será permitido linhas sem o centro de custo."

For nI := 1 To Len( aCOLS )


If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If !aCOLS[nI, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Exit
Endif
Endif
Next nI
Return( lRet )

2 2 .2 .3 . Funçã o M ode lo2 ( )

A função Modelo2( ) é um a int erface pr é- definida pela Microsiga que im plem ent a de form a
padronizada os com pont es necessários a m anipulação de est rut uras de dados nas quais o
cabeçalho e os it ens da inform ação com part ilham o m esm o r egist ro físico.

Seu obj et ivo é at uar com o um facilit ador de codificação, per m it indo a ut ilização dos r ecursos
básicos dos seguint es com ponent es visuais:

 M sD ia log( )
 TGe t ( )
 TSa y( )
 M sN e w Ge t D a dos( )
 En ch oice Ba r ( )

 A função Modelo2( ) não im plem ent a as regras de visualização,


inclusão, alt eração e ex clusão, com o um a AxCadast ro( ) ou
AxFunct ion( ) .

 A inicialização das variáveis Privat e ut ilizada nos cabeçalhos e rodapés,


bem com o a inicialização e gravação do aCols dev em ser r ealizadas
pela rot ina que “ suport a” a ex ecução da Modelo2( ) .

 Da m esm a form a, o Browse dev e ser t rat ado por est a rot ina, sendo
com um a Modelo2( ) est ar vinculada ao uso de um a MBr owse( ) .

- 197 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Sin t a x e : M od e lo2 ( [ cTit u lo] , [ a Ca b] , [ a Roda ] , [ a Gr id] , [ n Op c] , [ cLin h a Ok ] ,
[ cTu doOk ] )

 Pa r â m e t r os:

cTit u lo Tít ulo da j anela


a Ca b Array cont endo as inform ações que serão exibidas no cabeçalho na for m a de
Enchoice( )
aCab[ n] [ 1] ( Caract er e) : = Nom e da variável privat e que será vinculada ao
cam po da Enchoice( ) .
aCab[ n] [ 2] ( Array) : = Array com as coordenadas do cam po na t ela { Linha,
Coluna}
aCab[ n] [ 3] ( Caract ere) : = Tít ulo do cam po na t ela
aCab[ n] [ 4] ( Caract ere) : = Pict ure de form at ação do get ( ) do cam po.
aCab[ n] [ 5] ( Caract ere) : = Função de validação do get ( ) do cam po.
aCab[ n] [ 6] ( Caract ere) : = Nom e da consult a padrão que será ex ecut ada
para o cam po via t ecla F3
aCab[ n] [ 7] ( Lógico) : = Se o cam po est ará livre para digit ação.

a Rod a Array cont endo as inform ações que serão exibidas no cabeçalho na for m a de
Enchoice( ) , no m esm o form at o que o aCab.
a Gr id Array cont endo as coordenadas da Get Dados( ) na t ela. Padrão : =
{ 44,5,118,315}
n Opc Opção selecionada na MBr owse, ou que desej e ser passada para cont role da
Modelo2, aonde:
2 – Visualizar
3 - I ncluir
4 - Alt erar
5 - Excluir
cLin h a Ok Função para validação da linha na Get Dados( )
cTu doOk Função para validação na confirm ação da t ela de int erface da Modelo2( ) .

 Re t or n o:

Lógico I ndica se a t ela da int er face Modelo2( ) foi confirm ada ou cancelada pelo
usuário.

- 198 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Ut iliz a çã o d a M ode lo2 ( ) p a r a visu a liz a çã o do Ca da st r o de Ta be la s ( SX5 )

#include "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | MBRW2SX5| Autor | ARNALDO RAYMUNDO JR. | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | UTILIZACAO DA MODELO2() PARA VISUALIZAÇÃO DO SX5. |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+

USER FUNCTION MBrw2Sx5()

Local cAlias := "SX5"

Private cCadastro := "Arquivo de Tabelas"


Private aRotina := {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})


AADD(aRotina,{"Visualizar" ,"U_SX52Vis" ,0,2})
AADD(aRotina,{"Incluir" ,"U_SX52Inc" ,0,3})
AADD(aRotina,{"Alterar" ,"U_SX52Alt" ,0,4})
AADD(aRotina,{"Excluir" ,"U_SX52Exc" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)

Return

USER FUNCTION SX52INC(cAlias,nReg,nOpc)

//Local nUsado := 0
Local cTitulo := "Inclusao de itens - Arquivo de Tabelas"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo
2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no
modelo2 - Padrao: {44,5,118,315}
// Linha Inicial - Coluna Inicial - +Qts Linhas - +Qts
Colunas : {080,005,050,300}
Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da
Modelo 2
Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2
Local lRetMod2 := .F. // Retorno da função Modelo2 - .T. Confirmou / .F.
Cancelou
Local nColuna := 0

// Variaveis para GetDados()


Private aCols := {}
Private aHeader := {}

- 199 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

// Variaveis para campos da Enchoice()


Private cX5Filial := xFilial("SX5")
Private cX5Tabela := SPACE(5)

// Montagem do array de cabeçalho


// AADD(aCab,{"Variável" ,{L,C} ,"Título","Picture","Valid","F3",lEnable})
AADD(aCab,{"cX5Filial" ,{015,010} ,"Filial","@!",,,.F.})
AADD(aCab,{"cX5Tabela" ,{015,080} ,"Tabela","@!",,,.T.})

// Montagem do aHeader
AADD(aHeader,{"Chave" ,"X5_CHAVE","@!",5,0,"AllwaysTrue()",;
"","C","","R"})
AADD(aHeader,{"Descricao" ,"X5_DESCRI","@!",40,0,"AllwaysTrue()",;
"","C","","R"})

// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)

// Inicialização do aCols
For nColuna := 1 to Len(aHeader)

If aHeader[nColuna][8] == "C"
aCols[1][nColuna] := SPACE(aHeader[nColuna][4])
ElseIf aHeader[nColuna][8] == "N"
aCols[1][nColuna] := 0
ElseIf aHeader[nColuna][8] == "D"
aCols[1][nColuna] := CTOD("")
ElseIf aHeader[nColuna][8] == "L"
aCols[1][nColuna] := .F.
ElseIf aHeader[nColuna][8] == "M"
aCols[1][nColuna] := ""
Endif

Next nColuna

aCols[1][Len(aHeader)+1] := .F. // Linha não deletada


lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)

IF lRetMod2
//MsgInfo("Você confirmou a operação","MBRW2SX5")
For nLinha := 1 to len(aCols)
// Campos de Cabeçalho
Reclock("SX5",.T.)
SX5->X5_FILIAL := cX5Filial
SX5->X5_TABELA := cX5Tabela
// Campos do aCols
//SX5->X5_CHAVE := aCols[nLinha][1]
//SX5->X5_DESCRI := aCols[nLinha][2]
For nColuna := 1 to Len(aHeader)
SX5->&(aHeader[nColuna][2]) := aCols[nLinha][nColuna]
Next nColuna
MsUnLock()
Next nLinha
ELSE
MsgAlert("Você cancelou a operação","MBRW2SX5")
ENDIF
Return

- 200 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .3 . M ode lo3 ( )

O nom e Modelo 3, assim com o a Modelo 2 foi conceit uado pela Microsiga por se t rat ar de um
prot ót ipo de t ela para ent rada de dados. I nicialm ent e vam os desm ist ifica dois pont os:

 Fu n çã o M od e lo3 ( ) – Trat a- se de um a função pront a que cont em pla o prot ót ipo


Modelo 3, porém , est e é um assunt o que não irem os t rat ar aqui, vist o que é
um a funcionalidade sim ples que quando necessário int ervir em algo na rot ina
não há m uit o recur so para t al.

 Pr ot ót ipo M ode lo 3 – Trat a- se de um a t ela, com o a figura abaixo, onde seu


obj et ivo é efet uar a m anut enção em vários regist ros de um a só v ez r elacionada
a out r o regist r o de out ra t abela, ou sej a, aqui t erem os o relacionam ent o de
regist ros “ pai e filho” , ent ão é pr eciso se pr eocupar com est e r elacionam ent o.
Por ex em plo: efet uar a m anut enção em um pedido de vendas, onde t erá um
regist ro em um a t abela referent e à cabeça do pedido e out ra t abela com os
regist ros refer ent es aos it ens dest e pedido de v endas.

Para ganharm os t em po não ser á apr esent ado aqui t oda a explicação e m ont agens para a
função En ch oice Ba r , com ando M sD ia log, Sa y e M sGe t e para os v et ores a H e a de r e
a COLS, ent r et ant o t odos est es est arão na codificação do código font e. A figura abaixo m ost ra
exat am ent e o que é a t ela prot ót ipo Modelo 3:

Figu r a : Pr ot ót ipo M od e lo 3

- 201 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Est e pr ot ót ipo é const it uído de MsDialog, EnchoiceBar , Enchoice, MsGet Dados, Say e Get .

Diant e dos expost os at é o m om ent o houve um novo nom e para nós, é ele a função Enchoice, o
que é?

Fu n çã o En ch oice ( ) – Obj e t o M sM Ge t ( )

A função Enchoice ou o obj et o MsMGet são r ecur sos baseados no dicionário de dados para
verificar cam pos obrigatórios, validações, gat ilhos, consult a padrão e et c. Assim t am bém par a
criar past as de cadast r os. Est es podem ser usados t ant o com variáv eis de m em órias com o
escopo Privat e com o diret am ent e os cam pos da t abela que se r efer e. A diferença entre a função
Enchoice e o obj et o MsMGet é que a função não ret orna o nom e da variável de obj et o
export áv el criado.

A est rut ura par a m ont ar um pr ogram a com o prot ót ipo m odelo 3 é sem elhant e ao pr ot ót ipo
m odelo 2, porém a diferença real é a ut ilização da função Enchoice ou o obj et o MsMGet , para
est e docum ent o irem os t rabalhar com a função.

 Sin t a x e : En ch oice ( cAlia s, n Re g , n Opc, a Ac, cOpc, cTe x t Ex clu i, a Ach o, a Pos,
a Cpos, n N u m , n ColM e n s, cM e n sa ge m , cTu d Ok , oObj , lVir t u a l)

 Pa r â m e t r os:

cAlia s Alias do dados a ser em cadast rados.


n Re g Núm er o do regist ro da t abela a ser edit ado.
u Pa r 1 Parâm et r o r eservado.
u Pa r 2 Parâm et r o r eservado.
u Pa r 3 Parâm et r o r eservado.
a Ach o Vet or com os cam pos que serão apresent ados pela MsMGet .
a Pos Vet or com as coordenadas onde a MsMGet será criada no
for m at o { coord. superior, coord. esquerda, coor d. direit a,
coord. inferior} .Função ex ecut ada par a validar o cont ext o da
linha at ual do aCols.
a Cpos Vet or com os cam pos que poderão ser alt erados.
u Pa r 4 Parâm et r o r eservado. Nom e dos cam pos do t ipo caract er que
ut ilizarão increm ent o aut om át ico. Est e parâm et r o deve ser no
for m at o “ + < nom e do pr im eiro cam po> + < nom e do segundo
cam po> + ...” .
u Pa r 5 Parâm et r o r eservado.
u Pa r 6 Parâm et r o r eservado.
u Pa r 7 Parâm et r o r eservado.
oW n d Obj et o no qual a MsMGet será criada.
u Pa r 8 Parâm et r o r eservado.
lM e m or ia I ndica se será usado variáveis de m em ória ou os cam pos da
t abela para cadast ram ent o dos dados. Valor padrão falso.
lColu n a I ndica se a MsMGet ser á apr esent ada com um obj et o por linha
( um a coluna) . Valor padrão falso. Parâm et r o reser vado.
u Pa r 9 Parâm et r o r eservado.
lSe m Pa st a s I ndica se não será usado as Past as de Cadast ro na MsMGet .
Função execut ada para validar a ex clusão de um a linha do
aCols.

- 202 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Vale lem brar que nós program ador es reapr ov eit am os m uit o o que j á exist e, ist o é para
sim plesm ent e ganharm os t em po, e no caso da ut ilização da função Enchoice é preciso criar as
variáveis de m em órias que levam o m esm o nom e dos cam pos da t abela em quest ão. Por
ex em plo o cam po A2_NOME da t abela SA2 ( cadast r o de fornecedores) quando quer em os
referenciar o cam po usa- se o prefixo da t abela e o cam po em quest ão, dest a form a:

SA2->A2_NOME

Agora quando querem os r efer enciar a um a variável que est á com o cont eúdo do m esm o
cam po criam os out r o recurso, dest a form a:

M->A2_NOME

E para criar variáveis com o nom e do cam po ut ilizam os um código de bloco ( code- block) e
m ais um laço de leit ura para at ribuir valores iniciais a cada um a dela. Ent ão fica assim o
procedim ent o:

Private bCampo := { |nField| Field(nField) }

E em out ro m om ent o aprov eit am os est á variável bCam po para facilit ar a at ribuição, v ej a o
ex em plo abaixo :

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := Atribuição inicial ou atribuição de valor
Next nX

Ou sej a, fazer para t odos os cam pos, e a cada cam po criar a variável com a at ribuição inicial
ou at ribuição de valor.

- 203 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .3 .1 . Est r ut ur a de um pr ogr a m a ut iliz a ndo a M ode lo3 ( )

O ex em plo abaixo dem onst ra a m ont agem de um program a para a ut ilização do prot ót ipo
Modelo 3. Ant es de iniciarm os o exem plo vam os est rut urar o pr ogram a.

Est r u t u r a d o p r og r a m a

Linh a s Pr ogr a m a
1 Fun çã o pr in cipa l;
2 Declar ação e at ribuição de variáveis;
3 Acesso a t abela pr incipal e sua or dem ;
4 Cham ada da função MBrowse;
5 Fim da fu n çã o prin cipa l.
6
7 Fun çã o de visua liza çã o, a lt e r a çã o e e x clusã o;
8 Declar ação e at ribuição de variáveis;
9 Acesso ao pr im eiro r egistr o da chave em que est á posicionado na MBrowse;
10 Const rução das var iáveis de m em ór ia M- > ???;
11 Mont agem do vet or aHeader por m eio do dicionár io de dados;
Mont agem do vet or aCOLS de t odos os r egist r os refer ente a chave pr incipal em que est á
12
posicionado na MBr owse;
13 I nst ância da MsDialog;
14 Execução da função Enchoice;
15 I nst ância do obj et o MsGetDados;
16 At ivar o obj et o pr incipal que é o obj et o da j anela;
17 Se for oper ação difer ent e de visualização e clicou no bot ão OK;
18 A oper ação e de Alt er ação?
19 Cham ar a função par a alt er ar os dados;
20 Caso cont rár io
21 Cham ar a função par a excluir os dados;
22 Fim da fu n çã o de v isua liza çã o, a lt e r a çã o e e x clusã o.
23
24 Fun çã o de in clu sã o;
25 Declar ação e at ribuição de variáveis;
26 Const rução das var iáveis de m em ór ia M- > ???;
27 Mont agem do vet or aHeader por m eio do dicionár io de dados;
Mont agem do vetor aCOLS com o seu cont eúdo confor m e o inicializador padr ão do cam po ou
28
vazio, pois t rat a- se de um a inclusão;
29 I nst ância da MsDialog;
30 I nst ância dos obj et os TSay e TGet ;
31 I nst ância do obj et o MsGetDados;
32 At ivar o obj et o pr incipal que é o obj et o da j anela;
33 Se clicou no bot ão OK;
34 Cham ar a função par a incluir os dados;
35 Fim da fu n çã o de in clu sã o.

- 204 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Rot in a pr in cipa l

//+--------------------------------------------------------------------+
//| Rotina | xModelo3 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Função exemplo do protótipo Modelo3. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
#Include "Protheus.ch"

User Function xModelo3()


Private cCadastro := "Protótipo Modelo 3"
Private aRotina := {}
Private oCliente
Private oTotal
Private cCliente := ""
Private nTotal := 0

Private bCampo := {|nField| FieldName(nField) }

Private aSize := {}
Private aInfo := {}
Private aObj := {}
Private aPObj := {}
Private aPGet := {}

// Retorna a área útil das janelas Protheus


aSize := MsAdvSize()

// Será utilizado três áreas na janela


// 1ª - Enchoice, sendo 80 pontos pixel
// 2ª - MsGetDados, o que sobrar em pontos pixel é para este objeto
// 3ª - Rodapé que é a própria janela, sendo 15 pontos pixel
AADD( aObj, { 100, 080, .T., .F. })
AADD( aObj, { 100, 100, .T., .T. })
AADD( aObj, { 100, 015, .T., .F. })

// Cálculo automático da dimensões dos objetos (altura/largura) em pixel


aInfo := { aSize[1], aSize[2], aSize[3], aSize[4], 3, 3 }
aPObj := MsObjSize( aInfo, aObj )

// Cálculo automático de dimensões dos objetos MSGET


aPGet := MsObjGetPos( (aSize[3] - aSize[1]), 315, { {004, 024, 240, 270} } )

AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})


AADD( aRotina, {"Visualizar" ,'U_Mod3Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod3Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod3Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod3Mnt',0,5})

dbSelectArea("ZA1")
dbSetOrder(1)
dbGoTop()
MBrowse(,,,,"ZA1")
Return

- 205 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o de I n clu sã o

//+--------------------------------------------------------------------+
//| Rotina | Mod3Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para incluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function Mod3Inc( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0

Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}

dbSelectArea( cAlias )
dbSetOrder(1)

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := CriaVar( FieldName( nX ), .T. )
Next nX

Mod3aHeader()
Mod3aCOLS( nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro FROM ;


aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])

// Atualização do nome do cliente


@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL

// Atualização do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal ;
PICT "@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL

oGet := MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],;
nOpc,"U_Mod3LOk()",".T.","+ZA2_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;


{|| IIF( Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),
NIL) },;
{|| oDlg:End() })

If nOpcA == 1 .And. nOpc == 3


Mod3Grv( nOpc )
ConfirmSXE()
Endif
Return

- 206 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o de V isu a liz a çã o, Alt e r a çã o e Ex clu sã o

//+--------------------------------------------------------------------+
//| Rotina | Mod3Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para Visualizar, Alterar e Excluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function Mod3Mnt( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0
Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}
Private aREG := {}

dbSelectArea( cAlias )
dbSetOrder(1)

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := FieldGet( nX )
Next nX

Mod3aHeader()
Mod3aCOLS( nOpc )
DEFINE MSDIALOG oDlg TITLE cCadastro FROM ;
aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])

// Atualização do nome do cliente


@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL

// Atualização do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal PICTURE ;
"@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL

U_Mod3Cli()

oGet := MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],;
nOpc,"U_Mod3LOk()",".T.","+ZA2_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;


{|| IIF( Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),
NIL ) },;
{|| oDlg:End() })

If nOpcA == 1 .And. ( nOpc == 4 .Or. nOpc == 5 )


Mod3Grv( nOpc, aREG )
Endif
Return

- 207 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o pa r a m on t a r o ve t or a H e a de r

//+--------------------------------------------------------------------+
//| Rotina | Mod3aHeader | Autor | Robson Luiz (rleg) |Data|01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aHeader. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod3aHeader()
Local aArea := GetArea()

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("ZA2")
While !EOF() .And. X3_ARQUIVO == "ZA2"
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL
AADD( aHeader, { Trim( X3Titulo() ),;
X3_CAMPO,;
X3_PICTURE,;
X3_TAMANHO,;
X3_DECIMAL,;
X3_VALID,;
X3_USADO,;
X3_TIPO,;
X3_ARQUIVO,;
X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return

Fu n çã o pa r a m on t a r o ve t or a Cols

//+--------------------------------------------------------------------+
//| Rotina | Mod3aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aCOLS. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod3aCOLS( nOpc )
Local aArea := GetArea()
Local cChave := ""
Local cAlias := "ZA2"
Local nI := 0

If nOpc <> 3
cChave := ZA1->ZA1_NUM

dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )

- 208 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

While !EOF() .And. ZA2->( ZA2_FILIAL + ZA2_NUM ) == xFilial( cAlias ) +


cChave
AADD( aREG, ZA2->( RecNo() ) )
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZA2_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return

Fu n çã o pa r a a t r ibu ir o n om e do clie n t e a v a r iá v e l

//+--------------------------------------------------------------------+
//| Rotina | Mod3Cli | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para atualizar a variável com o nome do cliente. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

User Function Mod3Cli()


cCliente := Posicione( "SA1", 1, xFilial("SA1") + M->(ZA1_CLIENT + ZA1_LOJA),
"A1_NREDUZ" )
oCliente:Refresh()
Return(.T.)

- 209 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o pa r a v a lid a r a m u d a n ça de lin h a n a M sGe t D a dos( )

//+--------------------------------------------------------------------+
//| Rotina | Mod3LOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para atualizar a variável com o total dos itens. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function Mod3LOk()
Local nI := 0
nTotal := 0
For nI := 1 To Len( aCOLS )
If aCOLS[nI,Len(aHeader)+1]
Loop
Endif
nTotal+=Round(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]*;
aCOLS[nI,GdFieldPos("ZA2_PRCVEN")],2)
Next nI
oTotal:Refresh()
Return(.T.)

Fu n çã o pa r a v a lid a r se t od a s a s lin h a s e st ã o pr e e n ch ida s

//+--------------------------------------------------------------------+
//| Rotina | Mod3TOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar os itens se foram preenchidos. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod3TOk()
Local nI := 0
Local lRet := .T.

For nI := 1 To Len(aCOLS)
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_PRODUT")]) .And. lRet
MsgAlert("Campo PRODUTO preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]) .And. lRet
MsgAlert("Campo QUANTIDADE preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_PRCVEN")]) .And. lRet
MsgAlert("Campo PRECO UNITARIO preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif

If !lRet
Exit
Endif
Next i
Return( lRet )

- 210 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o pa r a e f e t u a r a g r a va çã o dos da dos e m ZA1 e ZA2 n a in clu sã o, a lt e r a çã o e
e x clu sã o.

//+--------------------------------------------------------------------+
//| Rotina | Mod3Grv | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para efetuar a gravação nas tabelas. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod3Grv( nOpc, aAltera )
Local nX := 0
Local nI := 0

// Se for inclusão
If nOpc == 3
// Grava os itens
dbSelectArea("ZA2")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If !aCOLS[ nX, Len( aCOLS ) + 1 ]
RecLock( "ZA2", .T. )
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[nI, 2] ) ),
aCOLS[nX,nI] )
Next nI
ZA2->ZA2_FILIAL := xFilial("ZA2")
ZA2->ZA2_NUM := M->ZA1_NUM
MsUnLock()
Endif
Next nX

// Grava o Cabeçalho
dbSelectArea( "ZA1" )
RecLock( "ZA1", .T. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial( "ZA1" ) )
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next nX
MsUnLock()
Endif

// Se for alteração
If nOpc == 4
// Grava os itens conforme as alterações
dbSelectArea("ZA2")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If nX <= Len( aREG )
dbGoto( aREG[nX] )
RecLock("ZA2",.F.)
If aCOLS[ nX, Len( aHeader ) + 1 ]
dbDelete()
Endif
Else

- 211 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

If !aCOLS[ nX, Len( aHeader ) + 1 ]


RecLock( "ZA2", .T. )
Endif
Endif

If !aCOLS[ nX, Len(aHeader)+1 ]


For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[ nI, 2] ) ),;
aCOLS[ nX, nI ] )
Next nI
ZA2->ZA2_FILIAL := xFilial("ZA2")
ZA2->ZA2_NUM := M->ZA1_NUM
Endif
MsUnLock()
Next nX

// Grava o Cabeçalho
dbSelectArea("ZA1")
RecLock( "ZA1", .F. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial("ZA1"))
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next
MsUnLock()
Endif

// Se for exclusão
If nOpc == 5
// Deleta os Itens
dbSelectArea("ZA2")
dbSetOrder(1)
dbSeek(xFilial("ZA2") + M->ZA1_NUM)
While !EOF() .And. ZA2->(ZA2_FILIAL + ZA2_NUM) == xFilial("ZA2") +;
M->ZA1_NUM
RecLock("ZA2")
dbDelete()
MsUnLock()
dbSkip()
End

// Deleta o Cabeçalho
dbSelectArea("ZA1")
RecLock("ZA1",.F.)
dbDelete()
MsUnLock()
Endif
Return

- 212 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .3 .2 . Funçã o M ode lo3 ( )

A função Modelo3) é um a int erface pré- definida pela Microsiga que im plem ent a de form a
padronizada os com pont es necessários a m anipulação de est rut uras de dados nas quais o
cabeçalho e os it ens da inform ação est ão em t abelas separadas.

Seu obj et ivo é at uar com o um facilit ador de codificação, per m it indo a ut ilização dos r ecursos
básicos dos seguint es com ponent es visuais:

 M sD ia log( )
 En ch oice ( )
 En ch oice Ba r ( )
 M sN e w Ge t D a dos( )

 A função Modelo3( ) não im plem ent a as regras de visualização,


inclusão, alt eração e ex clusão, com o um a AxCadast ro( ) ou
AxFunct ion( ) .

 A inicialização dos cam pos ut ilizados na Enchoice( ) deve ser r ealizadas


pela rot ina que “ suport a” a ex ecução da Modelo3( ) , norm alm ent e
at ravés do uso da função RegToMem or y( ) .

 Da m esm a form a, o Browse dev e ser t rat ado por est a rot ina, sendo
com um a Modelo3( ) est ar vinculada ao uso de um a MBr owse( ) .

 Sin t a x e : M ode lo3 ( [ cTit u lo] , [ cAlia sE] , [ cAlia sGe t D ] , [ a Cp osE] , [ cLin Ok ] ,
[ cTu dOk ] , [ n OpcE] , [ n OpcG] , [ cFie ldOk ] )

 Pa r â m e t r os:

cTit u lo Tít ulo da j anela


cAlia sE Alias da t abela que será ut ilizada na Enchoice
cAlia sGe t D Alias da t abela que será ut ilizada na Get Dados
Nom e dos cam pos, pert encent es ao Alias especificado o parâm et r o cAliasE,
a CposE que dev erão ser exibidos na Enchoice:
AADD( aCposE,{ “ nom e_cam po” } )
cLin h a Ok Função para validação da linha na Get Dados( )
cTu doOk Função para validação na confirm ação da t ela de int erface da Modelo2( ) .
Opção selecionada na MBrow se, ou que desej e ser passada para cont r ole da
Enchoice da Modelo3, aonde:
2 – Visualizar
n OpcE
3 - I ncluir
4 - Alt erar
5 - Excluir
Opção selecionada na MBrow se, ou que desej e ser passada para cont r ole da
Get Dados da Modelo3, aonde:
2 – Visualizar
n OpcG
3 - I ncluir
4 - Alt erar
5 - Excluir
cFie ldOk Validação dos cam pos da Enchoice( )

- 213 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Re t or n o:

Lógico I ndica se a t ela da int er face Modelo2( ) foi confirm ada ou cancelada pelo
usuário.

Ex e m plo: Ut iliz a çã o d a M ode lo3 ( ) p a r a Pe d idos d e Ve n da s ( SC5 ,SC6 )

#INCLUDE "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | MBRWMOD3| Autor | ARNALDO RAYMUNDO JR. |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | EXEMPLO DE UTILIZACAO DA MODELO3(). |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+

User Function MbrwMod3()

Private cCadastro := "Pedidos de Venda"


Private aRotina := {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock
Private cAlias := "SC5"

AADD(aRotina,{ "Pesquisa","AxPesqui" ,0,1})


AADD(aRotina,{ "Visual" ,"U_Mod3All" ,0,2})
AADD(aRotina,{ "Inclui" ,"U_Mod3All" ,0,3})
AADD(aRotina,{ "Altera" ,"U_Mod3All" ,0,4})
AADD(aRotina,{ "Exclui" ,"U_Mod3All" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)

Return

User Function Mod3All(cAlias,nReg,nOpcx)

Local cTitulo := "Cadastro de Pedidos de Venda"


Local cAliasE := "SC5"
Local cAliasG := "SC6"
Local cLinOk := "AllwaysTrue()"
Local cTudOk := "AllwaysTrue()"
Local cFieldOk:= "AllwaysTrue()"
Local aCposE := {}
Local nUsado, nX := 0

- 214 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Opcoes de acesso para a Modelo 3 ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Do Case
Case nOpcx==3; nOpcE:=3 ; nOpcG:=3 // 3 - "INCLUIR"
Case nOpcx==4; nOpcE:=3 ; nOpcG:=3 // 4 - "ALTERAR"
Case nOpcx==2; nOpcE:=2 ; nOpcG:=2 // 2 - "VISUALIZAR"
Case nOpcx==5; nOpcE:=2 ; nOpcG:=2 // 5 - "EXCLUIR"
EndCase

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Cria variaveis M->????? da Enchoice ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
RegToMemory("SC5",(nOpcx==3 .or. nOpcx==4 )) // Se for inclusao ou alteracao
permite alterar o conteudo das variaveis de memoria

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Cria aHeader e aCols da GetDados ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If Alltrim(x3_campo)=="C6_ITEM"
dbSkip()
Loop
Endif
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
Aadd(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpcx==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
aCols[1,nX]:=CriaVar(aHeader[nX,2])
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

- 215 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

If Len(aCols)>0
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Executa a Modelo 3 ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aCposE := {"C5_CLIENTE"}

lRetMod3 := Modelo3(cTitulo, cAliasE, cAliasG, aCposE, cLinOk, cTudOk,;


nOpcE, nOpcG,cFieldOk)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Executar processamento ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If lRetMod3
Aviso("Modelo3()","Confirmada operacao!",{"Ok"})
Endif
Endif

Return

- 216 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .4 . M br ow se ( )

A Mbrow se( ) é um a funcionalidade de cadast ro que perm it e a ut ilização de r ecursos m ais


aprim orados na visualização e m anipulação das inform ações do sist em a, possuindo os
seguint es com ponent es:

 Brow se padrão para visualização das inform ações da base de dados, de acordo com as
configurações do SX3 – Dicionário de Dados ( cam po br ow se) .

 Param et rização para funções específicas para as ações de visualização, inclusão,


alt eração e exclusão de inform ações, o que viabiliza a m anut enção de inform ações com
est rut ura de cabeçalhos e it ens.

 Recur sos adicionais com o ident ificador es de st at us de regist ros, legendas e filt ros para
as inform ações.

 Sin t a x e : M Br ow se ( n Lin 1 , n Col1 , n Lin 2 , n Col2 , cAlia s, a Fix e , cCpo, n Pa r 0 8 ,


cFu n , n Click D e f , a Color s, cTopFu n , cBot Fun , n Pa r 1 4 , bI n it Bloc,
lN oM n u Filt e r , lSe e All, lCh g All)

 Pa r â m e t r os:

n Lin 1 Núm er o da Linha I nicial

n Col1 Núm er o da Coluna I nicial

n Lin 2 Núm er o da Linha Final

n Col2 Núm er o da Coluna Final


Alias do arquivo que ser á visualizado no br owse.
Para ut ilizar a função MBrow se com arquivos de t rabalho, o alias do
cAlia s
arquivo de t rabalho dev e ser obrigat oriam ent e 'TRB' e o par âm et ro
aFixe t orna- se obrigat ór io.
Array bi- dim ensional cont endo os nom es dos cam pos fixos pré-
definidos, obrigando a exibição de um a ou m ais colunas ou a definição
das colunas quando a função é ut ilizada com ar quivos de t rabalho.
A est rut ura do ar ray é diferent e para arquivos que fazem part e do
dicionário de dados e para arquivos de t rabalho.

Arquivos que fazem par t e do dicionários de dados

[ n] [ 1] = > Descrição do cam po


a Fix e [ n] [ 2] = > Nom e do cam po

Arquivos de t rabalho

[ n] [ 1] = > Descrição do cam po


[ n] [ 2] = > Nom e do cam po
[ n] [ 3] = > Tipo
[ n] [ 4] = > Tam anho
[ n] [ 5] = > Decim al
[ n] [ 6] = > Pict ure

- 217 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Pa r â m e t r os:

Cam po a ser validado se est á vazio ou não par a exibição do bit m ap de


st at us. Quando esse par âm et r o é ut ilizado, a prim eira coluna do br ow se
cCpo
será um bit m ap indicando o st at us do regist r o, conform e as condições
configuradas nos par âm et r os cCpo, cFu n e a Color s.
n Pa r 0 8 Parâm et r o r eservado.
Função que r et ornará um valor lógico para exibição do bit m ap de
st at us.
cFu n
Quando esse parâm et r o é ut ilizado, o parâm et r o cCp o é
aut om at icam ent e desconsiderado.
Núm er o da opção do aRot ina que será ex ecut ada quando for efet uado
n Click D e f um duplo clique em um regist ro do br owse. O default é execut ar a
rot ina de visualização.
Array bi- dim ensional para possibilit ar o uso de diferent es bit m aps de
st at us.
[ n] [ 1] = > Função que r et ornará um valor lógico para a exibição do
bit m ap
a Color s [ n] [ 2] = > Nom e do bit m ap que será exibido quando a função ret ornar
.T. ( True) .
O nom e do bit m ap dev e ser um r esource do reposit ório e quando esse
parâm et ro é ut ilizado os parâm et r os cCpo e cFu n são
aut om at icam ent e desconsiderados.
Função que r et orna o lim it e superior do filt ro baseado na chave de
índice selecionada.
cTopFu n
Esse parâm et r o dev e ser ut ilizado em conj unt o com o parâm et r o
cBot Fu n.
Função que r et orna o lim it e inferior do filt ro baseado na chave de índice
selecionada.
cBot Fu n
Esse parâm et r o dev e ser ut ilizado em conj unt o com o parâm et r o
cTopFu n .
n Pa r 1 4 Parâm et r o r eservado.
Bloco de código que ser á ex ecut ado no ON I NI T da j anela do br owse. O
bI n it Bloc bloco de código receber á com o parâm et r o o obj et o da j anela do
brow se.
Valor lógico que define se a opção de filt ro será exibida no m enu da
MBr owse.
lN oM n u Filt e r .T. = > Não exibe a opção no m enu
.F. = > ( default ) Exibe a opção no m enu.
A opção de filt ro na MBr owse est á disponível apenas para TopConnect .
I dent ifica se o Br owse dev erá m ost rar t odas as filiais.
O valor default é .F. ( False ) , não m ost ra t odas as filiais. Caso os
parâm et ros cTop Fu n ou cBot Fu n sej am infor m ados esse parâm et r o
lSe e All
será configurado aut om at icam ent e para .F. ( False )
Parâm et r o válido à part ir da v e r sã o 8 .1 1 .
A função Se t Br w Se e All m uda o valor default desse parâm et r o.
I dent ifica se o regist r o de out ra filial est á aut or izado para alt erações.
O valor default é .F. ( False ) , não perm it e alt erar r egist ros de out ras
filiais. Quando esse par âm et r o est á configurado para .T. ( True ) , o
parâm et ro lSe e All é configurado aut om at icam ent e para .T. ( True ) .
lCh g All
Caso os parâm et ros cTopFu n ou cBot Fu n sej am inform ados esse
parâm et ro será configurado aut om at icam ent e para .F. ( False ) .
Parâm et r o válido à part ir da v e r sã o 8 .1 1 .
A função Se t Br w Ch g All m uda o valor default desse parâm et r o.

- 218 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Va r iá ve is p r iv a t e a dicion a is

Array cont endo as funções que serão execut adas pela Mbrowse, nele
será definido o t ipo de operação a ser execut ada ( inclusão, alt eração,
exclusão, visualização, pesquisa, et c. ) , e sua est rut ura é com post a de
5 ( cinco) dim ensões:

[ n] [ 1] - Tít ulo;
[ n] [ 2] – Rot ina;
[ n] [ 3] – Reservado;
[ n] [ 4] – Operação ( 1 - pesquisa; 2 - visualização; 3 - inclusão; 4 -
a Rot in a alt eração; 5 - exclusão) ;

Ele ainda pode ser param et rizado com as funções básicas da


AxCadast r o conform e abaixo:

AADD( aRot ina,{ " Pesquisar" ," AxPesqui" ,0,1} )


AADD( aRot ina,{ " Visualizar" ," AxVisual" ,0,2} )
AADD( aRot ina,{ " I ncluir" ," Ax I nclui" ,0,3} )
AADD( aRot ina,{ " Alt erar " ," AxAlt era" ,0,4} )
AADD( aRot ina,{ " Excluir" ," AxDelet a" ,0,5} )
cCa da st r o Tít ulo do browse que será exibido.

 I n for m a çõe s p a ssa da s p a r a fu n çõe s do a Rot in a :

Ao definir as funções no ar ray aRot ina, se o nom e da função não for especificado com “ ( ) ” , a
Mbrowse passará com o parâm et ros as seguint es variáveis de cont r ole:

cAlia s Nom e da área de t rabalho definida para a Mbr owse

n Re g Recno do r egist ro posicionado no Br ow se


Posição da opção ut ilizada na Mbr owse de acor do com a ordem da
n Opc
função no ar ray a Rot ina.

A posição das funções no array aRot ina define o cont eúdo de um a variável de
cont r ole que será repassada para as funções cham adas a part ir da Mbrow se,
conv encionada com o nOpc. Dest a form a, para m ant er o padrão da aplicação
ERP a ordem a ser seguida na definição do aRot ina é:

1. Pesquisar
2. Visualizar
3. I ncluir
4. Alt erar
5. Excluir
6. Livre

- 219 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o M br ow se ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Exemplo de utilização da função MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA1()

Local cAlias := "SA1"


Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual",0,2})
AADD(aRotina,{"Incluir" ,"AxInclui",0,3})
AADD(aRotina,{"Alterar" ,"AxAltera",0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta",0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)

Return Nil

Ex e m plo: Fu n çã o I n clu i( ) su bst it u in d o a f u n çã o Ax I n clu i( ) – Ch a m a d a da M br ow se ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Exemplo de utilização da função MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA1()

Local cAlias := "SA1"


Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})


AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_Inclui" ,0,3})

- 220 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})


AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)

Return Nil

Ex e m plo: Fu n çã o I n clu i( ) su bst it u in d o a f u n çã o Ax I n clu i( ) – Fu n çã o I n clu i( )

/*/
+-----------------------------------------------------------------------------
| Função | INCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de inclusão específica chamando a AXINCLUI() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function Inclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"


Local nOpcao := 0

nOpcao := AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)

If nOpcao == 1
MsgInfo(“Inclusão concluída com sucesso!”)
ElseIf == 2
MsgInfo(“Inclusão cancelada!”)
Endif

Return Nil

- 221 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: D e t e r m in a n do a opçã o d o a Rot in a p e la in f or m a çã o r e ce bid a e m n Opc

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | EXCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de exclusão especifica chamando a AxDeleta |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function Exclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"


Local nOpcao := 0

nOpcao := AxDeleta(cAlias,nReg,aRotina[nOpc,4])
// Identifica corretamente a opção definida para o função em aRotinas com mais
// do que os 5 elementos padrões.

If nOpcao == 1
MsgInfo(“Exclusão realizada com sucesso!”)
ElseIf == 2
MsgInfo(“Exclusão cancelada!”)
Endif

Return Nil

2 2 .4 .1 . Ax Funct ions( )

Conform e m encionado nos t ópicos sobre as int erfaces padrões AxCadast ro( ) e Mbr ow se( ) ,
exist em funções padr ões da aplicação ERP que perm it em a visualização, inclusão, alt eração e
exclusão de dados em form at o sim ples.

Est as funções são padrões na definição da int erface AxCadast ro( ) e podem ser ut ilizadas
t am bém da const rução no array aRot ina ut ilizado pela Mbr ow se( ) , as quais est ão list adas a
seguir:

 AXPESQUI ( )
 AX VI SUAL( )
 AX I N CLUI ( )
 AX ALTERA( )
 AX D ELETA( )

- 222 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


AXPESQUI ( )

Sin t a x e AXPESQUI ( )
Função de pesquisa padrão em r egist ros exibidos pelos br owses do sist em a,
a qual posiciona o br ow se no regist ro pesquisado. Exibe um a t ela que
D e scr içã o
perm it e a seleção do índice a ser ut ilizado na pesquisa e a digit ação das
inform ações que com põe a chave de busca.

AX VI SUAL( )

AX VI SUAL( cAlia s, n Re g, n Opc, a Ach o, n ColM e n s, cM e n sa g e m , cFu n c,;


Sin t a x e
a Bu t t on s, lM a x im iz e d )
Função de visualização padrão das inform ações de um regist r o, no for m at o
D e scr içã o
Enchoice, conform e dem onst rado no t ópico sobre a int erface Ax Cadast ro( ) .

AX I N CLUI ( )

Ax I n clu i( cAlia s, n Re g , n Opc, a Ach o, cFu n c, a Cpos, cTu d oOk , lF3 ,;


Sin t a x e
cTr a n sa ct , a Bu t t on s, a Pa r a m , a Au t o, lVir t u a l, lM a x im iz e d)
Função de inclusão padr ão das inform ações de um regist r o, no form at o
D e scr içã o
Enchoice, conform e dem onst rado no t ópico sobre a int erface Ax Cadast ro( ) .

AX ALTERA( )

Ax Alt e r a ( cAlia s, n Re g , n Opc, a Ach o, cFu n c, a Cpos, cTu d oOk , lF3 ,;


Sin t a x e
cTr a n sa ct , a Bu t t on s, a Pa r a m , a Au t o, lVir t u a l, lM a x im iz e d)
Função de alt eração padrão das inform ações de um regist ro, no form at o
D e scr içã o
Enchoice, conform e dem onst rado no t ópico sobre a int erface Ax Cadast ro( ) .

AX D ELETA( )

AX D ELETA( cAlia s, n Re g, n Opc, cTr a n sa ct , a Cpos, a Bu t t on s, a Pa r a m ,;


Sin t a x e
a Au t o, lM a x im iz e d)
Função de exclusão padrão das inform ações de um regist r o, no form at o
D e scr içã o
Enchoice, conform e dem onst rado no t ópico sobre a int erface Ax Cadast ro( ) .

- 223 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .4 .2 . FilBr ow se ( )

A FilBrowse( ) é um a funcionalidade que perm it e a ut ilização de filt ros na MBr owse( ) .

 Sin t a x e : FilBr ow se ( cAlia s, a Qu e r y, cFilt r o, lSh ow Pr oc)

 Pa r â m e t r os:

cAlia s Alias at ivo definido para a Mbr ow se( )


Est e parâm et ro dev erá ser inicializado sem pre vazio e sua passagem
obrigat oriam ent e por r eferência, pois, seu r et or no será enviado para a
função EndFilBrw( ) .
a Qu e r y
[ 1] = > Nom e do Arquivo Físico
[ 2] = > Ordem corr espondent e ao Sindex
cFilt r o Condição de filt ro para a MBr owse( )

Habilit a ( .T.) ou desabilit a ( .F.) a apresent ação da m ensagem


lSh ow Pr oc
“ Selecionando r egist ros ...” , no pr ocessam ent o.

2 2 .4 .3 . EndFilBr w ( )

A EndFilBrw( ) é um a funcionalidade que per m it e elim inar o filt ro e o arquivo t em porário


criados pela FilBrowse( ) .

 Sin t a x e : En d FilBr w ( cAlia s, a Qu e r y )

 Pa r â m e t r os:

cAlia s Alias at ivo definido para a Mbr ow se( )


Array de r et orno passado por refer ência para a FilBrowse( ) .

a Qu e r y [ 1] = > Nom e do Arquivo Físico


[ 2] = > Ordem corr espondent e ao Sindex

- 224 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .4 .4 . Pe sqBr w ( )

A PesqBrw( ) é um a funcionalidade que perm it e a pesquisa dent r o da MBr owse( ) . Est a função
dev erá obrigat oriam ent e subst it uir a função AxPesqui, no array do aRot ina, sem pr e que for
ut ilizada a função FilBrowse( ) .

 Sin t a x e : Pe sqBr w ( cAlia s , n Re g, bBr w Filt e r )

 Pa r â m e t r os:

cAlia s Alias at ivo definido para a Mbr ow se( )

n Re g Núm er o do regist ro
Bloco de Código que cont ém a FilBrowse( )
bBr w Filt e r
Ex: bBrwFilt er : = { | | FilBrowse( cAlias, aQuery , cFilt ro, lShowPr oc) }

2 2 .4 .5 . Br w Le ge nda ( )

A Brw Legenda( ) é um a funcionalidade que per m it e a inclusão de legendas na MBrowse( ) .

 Sin t a x e : Br w Le ge n d a ( cCa da st r o , cTit u lo, a Le g e n d a )

 Pa r â m e t r os:

Mesm a variável ut ilizada para a MBrow se, que ident ifica o cadast r o que
cCa da st r o
est á em uso no m om ent o
cTit u lo Tít ulo ( ident ificação) da Legenda

Array cont endo de definição da cor e do t ext o, explicat ivo sobr e o que
ela represent a na MBr owse
a Le ge n d a
Ex: { { “ Cor” ,” Text o” } }

List a d e cor e s d ispon íve is n o Pr ot h e u s

 BR_AMARELO
 BR_AZUL
 BR_BRANCO
 BR_CI NZA
 BR_LARANJA
 BR_MARRON
 BR_VERDE
 BR_VERMELHO
 BR_PI NK
 BR_PRETO

- 225 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: M b r ow se ( ) u t iliz a n do a s f u n çõe s a ce ssór ia s

#Include "Protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | MBrwSA2 | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Exemplo da MBrowse utilizando a tabela de Cadastro de |
| | Fornecedores |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA2()

Local cAlias := "SA2"


Local aCores := {}
Local cFiltra := "A2_FILIAL == '"+xFilial('SA2')+"' .And. A2_EST == 'SP'"

Private cCadastro := "Cadastro de Fornecedores"


Private aRotina := {}
Private aIndexSA2 := {}
Private bFiltraBrw:= { || FilBrowse(cAlias,@aIndexSA2,@cFiltra) }

AADD(aRotina,{"Pesquisar" ,"PesqBrw" ,0,1})


AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_BInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"U_BAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"U_BDeleta" ,0,5})
AADD(aRotina,{"Legenda" ,"U_BLegenda" ,0,3})

/*
-- CORES DISPONIVEIS PARA LEGENDA --
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARRON
BR_VERDE
BR_VERMELHO
BR_PINK
BR_PRETO
*/

AADD(aCores,{"A2_TIPO == 'F'" ,"BR_VERDE" })


AADD(aCores,{"A2_TIPO == 'J'" ,"BR_AMARELO" })
AADD(aCores,{"A2_TIPO == 'X'" ,"BR_LARANJA" })
AADD(aCores,{"A2_TIPO == 'R'" ,"BR_MARRON" })
AADD(aCores,{"Empty(A2_TIPO)" ,"BR_PRETO" })

dbSelectArea(cAlias)
dbSetOrder(1)

- 226 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

//+------------------------------------------------------------
//| Cria o filtro na MBrowse utilizando a função FilBrowse
//+------------------------------------------------------------
Eval(bFiltraBrw)

dbSelectArea(cAlias)
dbGoTop()
mBrowse(6,1,22,75,cAlias,,,,,,aCores)

//+------------------------------------------------
//| Deleta o filtro utilizado na função FilBrowse
//+------------------------------------------------
EndFilBrw(cAlias,aIndexSA2)

Return Nil

//+---------------------------------------
//|Função: BInclui - Rotina de Inclusão
//+---------------------------------------
User Function BInclui(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxInclui(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Inclusão efetuada com sucesso!")
Else
MsgInfo("Inclusão cancelada!")
Endif

Return Nil

//+-----------------------------------------
//|Função: BAltera - Rotina de Alteração
//+-----------------------------------------
User Function BAltera(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxAltera(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Alteração efetuada com sucesso!")
Else
MsgInfo("Alteração cancelada!")
Endif

Return Nil

- 227 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

//+-----------------------------------------
//|Função: BDeleta - Rotina de Exclusão
//+-----------------------------------------
User Function BDeleta(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxDeleta(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Exclusão efetuada com sucesso!")
Else
MsgInfo("Exclusão cancelada!")
Endif

Return Nil

//+-------------------------------------------
//|Função: BLegenda - Rotina de Legenda
//+-------------------------------------------
User Function BLegenda()

Local aLegenda := {}

AADD(aLegenda,{"BR_VERDE" ,"Pessoa Física" })


AADD(aLegenda,{"BR_AMARELO" ,"Pessoa Jurídica" })
AADD(aLegenda,{"BR_LARANJA" ,"Exportação" })
AADD(aLegenda,{"BR_MARRON" ,"Fornecedor Rural" })
AADD(aLegenda,{"BR_PRETO" ,"Não Classificado" })

BrwLegenda(cCadastro, "Legenda", aLegenda)

Return Nil

- 228 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 2 .5 . M a r k Br ow se ( )

A função MarkBrow( ) perm it e que os elem ent os de um br ow se, sej am m ar cados ou


desm arcados. Para ut ilização da MarkBrow( ) é necessário declarar as variáveis cCadast ro e
aRot ina com o Privat e, ant es da cham ada da função.

 Sin t a x e : M a r k Br ow ( cAlia s, cCa m po, cCpo, a Ca m pos, lI n ve r t , cM a r ca , cCt r lM ,


u Pa r 8 , cEx p I n i, cEx p Fim , cAv a l, bPa r Bloco)

 Pa r â m e t r os:

cAlia s Alias at ivo definido para a Mbr ow se( )

cCa m p o Cam po do arquivo onde será feit o o cont role ( gravação) da m ar ca.
Cam po onde será feit a a validação para m ar cação e exibição do bit m ap
cCpo
de st at us.
Vet or de colunas a ser em exibidas no browse, dev e cont er as seguint es
dim ensões:

a Ca m pos [ n] [ 1] – nom e do cam po;


[ n] [ 2] - Nulo ( Nil) ;
[ n] [ 3] - Tít ulo do cam po;
[ n] [ 4] - Máscara ( pict ure) .
lI n ve r t I nv ert e a m ar cação.

cM a r ca St ring a ser gravada no cam po especificado par a m arcação.

cCt r lM Função a ser ex ecut ada caso desej e m arcar t odos elem ent os.

u Pa r 8 Parâm et r o r eservado.
Função que r et orna o cont eúdo inicial do filt ro baseada na chav e de
cEx pI n i
índice selecionada.
Função que r et orna o cont eúdo final do filt ro baseada na chav e de
cEx pFim
índice selecionada.
cAv a l Função a ser ex ecut ada no duplo clique em um elem ent o no br ow se.

bPa r Bloco Bloco de código a ser ex ecut ado na inicialização da j anela

 I n for m a çõe s p a ssa da s p a r a fu n çõe s do a Rot in a :

Ao definir as funções no ar ray aRot ina, se o nom e da função não for especificado com “ ( ) ” , a
MarkBrowse passar á com o par âm et ros as seguint es variáveis de cont r ole:

cAlia s Nom e da área de t rabalho definida para a Mbr owse

n Re g Recno do r egist ro posicionado no Br ow se


Posição da opção ut ilizada na Mbr owse de acor do com a ordem da
n Opc
função no ar ray a Rot ina.
cM a r ca Marca em uso pela Mar kBrw( )

lI n ve r t e I ndica se foi ut ilizada a inver são da seleção dos it ens no br owse.

- 229 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o M a r k Br ow ( ) e a ce ssór ia s

#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Programa | MkBrwSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | MarkBrowse Genérico |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION MkBrwSA1()

Local aCpos := {}
Local aCampos := {}
Local nI := 0
Local cAlias := "SA1"

Private aRotina := {}
Private cCadastro := "Cadastro de Clientes"
Private aRecSel := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})


AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"AxInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})
AADD(aRotina,{"Visualizar Lote" ,"U_VisLote" ,0,5})

AADD(aCpos, "A1_OK" )
AADD(aCpos, "A1_FILIAL" )
AADD(aCpos, "A1_COD" )
AADD(aCpos, "A1_LOJA" )
AADD(aCpos, "A1_NOME" )
AADD(aCpos, "A1_TIPO" )

dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len(aCpos)
IF dbSeek(aCpos[nI])
AADD(aCampos,{X3_CAMPO,"",IIF(nI==1,"",Trim(X3_TITULO)),;
Trim(X3_PICTURE)})
ENDIF
Next

DbSelectArea(cAlias)
DbSetOrder(1)

MarkBrow(cAlias,aCpos[1],"A1_TIPO == ' '",aCampos,.F.,GetMark(,"SA1","A1_OK"))

Return Nil

- 230 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o V isLot e ( ) – u t iliz a çã o d a s fu n çõe s a ce ssór ia s d a M a r k Br ow ( )

/*/
+-----------------------------------------------------------------------------
| Programa | VisLote() | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Função utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
USER FUNCTION VisLote()
Local cMarca := ThisMark()
Local nX := 0
Local lInvert := ThisInv()
Local cTexto := ""
Local cEOL := CHR(10)+CHR(13)
Local oDlg
Local oMemo

DbSelectArea("SA1")
DbGoTop()
While SA1->(!EOF())

// IsMark("A1_OK", cMarca, lInverte)


IF SA1->A1_OK == cMarca .AND. !lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD, SA1->A1_LOJA, SA1->A1_NREDUZ})
ELSEIF SA1->A1_OK != cMarca .AND. lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD,SA1->A1_LOJA, SA1->A1_NREDUZ})
ENDIF

SA1->(dbSkip())
Enddo

IF Len(aRecSel) > 0
cTexto := "Código | Loja | Nome Reduzido "+cEol
// "1234567890123456789012345678901234567890
// "CCCCCC | LL | NNNNNNNNNNNNNNNNNNNN +cEol

For nX := 1 to Len(aRecSel)

cTexto += aRecSel[nX][2]+Space(1)+ "|"+Space(2) +


aRecSel[nX][3]+Space(3)+"|"
cTexto += Space(1)+SUBSTRING(aRecSel[nX][4],1,20)+Space(1)
cTexto += cEOL

Next nX

DEFINE MSDIALOG oDlg TITLE "Clientes Selecionados" From 000,000 TO 350,400


PIXEL
@ 005,005 GET oMemo VAR cTexto MEMO SIZE 150,150 OF oDlg PIXEL
oMemo:bRClicked := {||AllwaysTrue()}
DEFINE SBUTTON FROM 005,165 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg PIXEL
ACTIVATE MSDIALOG oDlg CENTER
LimpaMarca()
ENDIF

RETURN

- 231 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o Lim pa M a r ca ( ) – u t iliz a çã o d a s fu n çõe s a ce ssór ia s da M a r k Br ow ( )

/*/
+-----------------------------------------------------------------------------
| Programa | LimpaMarca | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Função utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION LimpaMarca()

Local nX := 0

For nX := 1 to Len(aRecSel)
SA1->(DbGoto(aRecSel[nX][1]))
RecLock("SA1",.F.)
SA1->A1_OK := SPACE(2)
MsUnLock()
Next nX

RETURN

- 232 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


23. Ar quivos e Í ndice s Te m por á r ios

2 3 .1 . Ut iliz a çã o de a r quivos e índice s t e m por á r ios

Os arquivos e índices t em porários ou de t rabalho, são geralm ent e ut ilizados em am bient e


CodeBase, pois, nest e am bient e não há os recursos de “ Join” e “ Order By” , com o exist e nos
bancos de dados relacionais. Por est e m ot ivo quando necessit ar gerar um a inform ação
ordenada e consolidada, ou sej a, de várias t abelas, dever em os recorr er ao uso dos arquivos e
dos índices t em porários.

2 3 .2 . Funçõe s pa r a m a nipula çã o de a r quivos e índice s t e m por á r ios

2 3 .2 .1 . Cr ia Tr a b( )

A CriaTrab( ) é um a funcionalidade que perm it e criar um arquivo físico ou ger ar um nom e


aleat ório.

 Sin t a x e : Cr ia Tr a b( a Ca m po, lCr ia r , cEx t )

 Pa r â m e t r os

Array com o nom e, t ipo, t am anho e decim al do cam po a ser criado no


a Ca m po
arquivo
Se v erdadeiro ( .T.) criar o arquivo, ou falso ( .F.) som ent e r et orna um
lCr ia r
nom e aleat ório
cEx t Qual ext ensão dev erá ser criado o arquivo de t r abalho

Os arquivos criados com a função CRI ATRAB( ) serão gerados no diret ório
especificado com o “ St ar t Pat h” , de acordo com o “ Root Pat h” configurado no .ini
da aplicação.

- 233 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 3 .2 .2 . dbUse Ar e a ( )

A dbUseAr ea( ) é um a funcionalidade que perm it e definir um arquivo de base de dados, com
um a área de t rabalho disponível na aplicação.

 Sin t a x e : db Use Ar e a ( lN e w Ar e a , cD r ive r , cN a m e , cAlia s, lSh a r e d, lRe a dOn ly)

 Pa r â m e t r os

lN e w Ar e a I ndica se e um nov o alias no conj unt o de alias abert o

cD r iv e r Drive ( RddNam e( ) ) do arquivo - > DBFCDX / TOPCONN / DBFNTX

cN a m e Nom e físico da t abela que será usado

cAlia s Alias que será usado enquant o est ive abert o

lSh a r e d A t abela t erá acesso ex clusivo ou com part ilhado

lRe a dOn ly Se v erdadeiro a t abela será som ent e leit ura

2 3 .2 .3 . I ndRe gua ( )

A I ndRegua( ) é um a funcionalidade que per m it e criar índices t em porários para o alias


especificado, podendo ou não t er um filt ro.

 Sin t a x e : I n d Re g u a ( cAlia s, cN I n de x , cEx pr e ss, x Or de m , cFor , cM e n s, lSh ow )

 Pa r â m e t r os

cAlia s Alias da t abela onde ser á efet uada o índice/ filt ro t em por ário

cN I n de x Nom e do arquivo de t rabalho ret ornado pela função CriaTrab( )

cEx pr e ss Expressão utilizada na chave do novo índice

x Or de m Parâm et r o nulo

cFor Expressão utilizada para filtro

cM e n s Parâm et r o nulo

lSh ow Apresent ar a t ela de pr ogresso do índice/ filt ro t em porário

- 234 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo 0 1 : Ge r a çã o de a r q u iv o e ín d ice t e m por á r ios

#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Programa | GeraTrab | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Desc. | Utilização de arquivos e índices temporários |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GeraTrab()

Local aStru := {}
Local aArqTRB := {}
Local nI := 0
Local cIndTRB := ""
Local cNomArq := ""

AADD( aStru, { "PRODUTO" ,"B1_COD" } )


AADD( aStru, { "DESCRICAO" ,"B1_DESC" } )
AADD( aStru, { "GRUPO" ,"BM_GRUPO" } )
AADD( aStru, { "DESCGRUPO" ,"BM_DESC" } )
AADD( aStru, { "TIPO" ,"B1_TIPO" } )
AADD( aStru, { "DESCTIPO" ,"B1_DESC" } )
AADD( aStru, { "CC" ,"CTT_CC" } )
AADD( aStru, { "DESC_CC" ,"CTT_DESC" } )
AADD( aStru, { "SERIE" ,"D2_SERIE" } )
AADD( aStru, { "DOCTO" ,"D2_COD" } )
AADD( aStru, { "TIPONOTA" ,"D2_TP" } )
AADD( aStru, { "EMISSAO" ,"D2_EMISSAO" } )
AADD( aStru, { "CLIENTE" ,"D2_CLIENTE" } )
AADD( aStru, { "LOJA" ,"D2_LOJA" } )
AADD( aStru, { "NOME" ,"A1_NOME" } )
AADD( aStru, { "QTDE" ,"D2_QUANT" } )
AADD( aStru, { "UNIT" ,"D2_PRCVEN" } )
AADD( aStru, { "TOTAL" ,"D2_TOTAL" } )
AADD( aStru, { "ALIQICMS" ,"D2_PICM" } )
AADD( aStru, { "VALICMS" ,"D2_VALICM" } )
AADD( aStru, { "ALIQIPI" ,"D2_IPI" } )
AADD( aStru, { "VALIPI" ,"D2_VALIPI" } )
AADD( aStru, { "VALMERC" ,"D2_TOTAL" } )
AADD( aStru, { "TOTSEMICMS" ,"D2_TOTAL" } )
AADD( aStru, { "VALPIS" ,"D2_TOTAL" } )
AADD( aStru, { "LIQUIDO" ,"D2_TOTAL" } )
AADD( aStru, { "CUSTO" ,"D2_TOTAL" } )

dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len( aStru )
dbSeek( aStru[nI,2] )
AADD( aArqTRB, { aStru[nI,1], X3_TIPO, X3_TAMANHO, X3_DECIMAL } )
Next nI

- 235 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

// Índice que será criado


cIndTRB := "PRODUTO+DTOS(EMISSAO)"

cNomArq := CriaTrab( aArqTRB, .T. )

dbUseArea( .T., "DBFCDX", cNomArq, "TRB", .T. ,.T. )

IndRegua( "TRB", cNomArq, cIndTRB )


dbSetOrder(1)

// ( ... ) fazer o processamento necessário

dbSelectArea("TRB")
dbCloseArea()

If MsgYesNo("Apagar o arquivo gerado \system\"+cNomArq+".dbf ?",FunName())


Ferase(cNomArq+".dbf")
Ferase(cNomArq+OrdBagExt())
Endif

Return Nil

• Quando criam os um arquivo ou um índice t em por ário ( t rabalho) ,


ut ilizando a função I ndr egua, é obrigat ório apagá- los no final do r ot ina.

• A ut ilização de arquivo ou índice t em porário, dev erá ser bem analisada


a fim de evit ar lent idão no pr ocessam ent os da r ot ina.

• O arr ay a St r u foi criado com base nos cam pos exist ent es no sist em a,
ao invés de criarm os novas est rut uras dos cam pos, ut ilizam os as j á
exist ent es no dicionários de dados ( SX3) .

- 236 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo 0 2 : Ut iliz a n d o dois ín dice s t e m p or á r ios com RD D D BFCD X

/*/
+-----------------------------------------------------------------------------
| Programa | IndTwoReg | Autor | MICHEL DANTAS | Data | |
+-----------------------------------------------------------------------------
| Desc. | Utilização de dois índices temporários com DBFCDX |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function IndTwoReg()

LOCAL nOrder := 0
LOCAL cArq1 := CriaTrab(NIL,.F.)
LOCAL cChave1 := "A1_FILIAL+A1_EST"
LOCAL cArq2 := CriaTrab(NIL,.F.)
LOCAL cChave2 := "A1_FILIAL+A1_NOME"

dbSelectArea("SA1")
IndRegua("SA1",cArq1,cChave1,,,"Selecionando Regs...")
IndRegua("SA1",cArq2,cChave2,,,"Selecionando Regs...")

nOrder := RetIndex("SA1")

dbSetIndex(cArq1+OrdBagExt())
dbSetIndex(cArq2+OrdBagExt())

Alert("Agora vai por estado")

dbsetOrder(nOrder+1)
dbGoTop()
While !Eof()
Alert("Estado : " + SA1->A1_EST +" "+" Nome : " + SA1->A1_NOME)
dbSkip()
End

Alert("Agora vai por nome")

dbSetOrder(nOrder+2)
dbGoTop()
While !Eof()
Alert("Estado : " + SA1->A1_EST +" "+" Nome : " + SA1->A1_NOME)
dbSkip()
End

RetIndex("SA1")
Ferase(cArq1+OrdBagext())
Ferase(cArq2+OrdBagext())

Return

- 237 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


24. Re la t ór ios nã o gr á ficos

Os relat órios desenvolvidos em ADVPL possuem um padrão de desenvolvim ent o que m ais
depende de layout e t ipos de parâm et r os do que qualquer out ro t ipo de inform ação, vist o que
at é o m om ent o percebem os que a linguagem padrão da Microsiga é m uit o m ais com post a de
funções genéricas do que de com andos.

Est e t ipo de r elat ório é caract erizado por um form at o de im pressão t ipo Post Script ® , e perm it e
a geração de um arquivo em form at o t ext o ( .t x t ) , com um a ext ensão própria da aplicação ERP
( .# # R) .

A est rut ura de um r elat ório não gráfico é baseada no uso da função Set Print ( ) , com plem ent ada
pelo uso de out r as funções acessórias, as quais est ão det alhadas no Guia de Refer ência Rápida
que acom panha est e m at erial.

2 4 .1 .1 . Est r ut ur a de r e la t ór ios ba se a dos na Se t Pr int ( )

Nest e t ópico ser á dem onst rada a const rução de r elat ório não gráfico baseado no uso da função
Set Print ( ) o qual at ende os form at os de base de dados I SAM e Topconnect , por ém não
cont em plando a t ecnologia Prot heus Em bedded SQL.

Est r u t u r a d o p r og r a m a

Linh a s Pr ogr a m a
1 Fun çã o pr in cipa l;
2 Declar ação e at ribuição de variáveis;
3 At ualização do ar quivo de pergunt as at ravés da função específica Cr iaSX1( ) ;
4 Definição as pergunt as at ravés da função Per gunt e( ) ;
5 Definição das ordens disponíveis par a im pr essão do r elat ór io;
6 Cham ada da função Set Pr int ;
7 At ualização das configur ações de im pr essão com a função Set Default ( ) ;
8 Execução da r ot ina de im pr essão atr avés da função Rpt St at us( )
9 Fim da fu n çã o prin cipa l.

10 Fun çã o de pr oce ssa m en t o e im pr e ssã o do r e la t ór io


11 Declar ação e at ribuição de variáveis;
12 Definição dos filt ros de im pr essão, avaliando o bando de dados em uso pela aplicação;
13 At ualização da r égua de processam ent o com a quant idade de regist ros que ser á processada;
14 Est rut ur a pr incipal de r epet ição par a im pressão dos dados do r elat ór io;
15 Cont role da im pr essão do cabeçalho ut ilizando a função Cabec( ) ;
16 I m pr essão dos t ot ais do relat ór io;
17 I m pr essão do rodapé da últ im a página do r elat ór io ut ilizando a função Roda( ) ;
18 Lim peza dos arquivos e índices t em por ár ios cr iados par a o processam ent o( ) ;
19 Tr at am ent o da visualização do r elat ór io ( im pr essão em disco) at ravés da função Our Spool( )
20 Tr at am ent os adicionais ao r elat ór io, de acor do com necessidades específicas;
21 Liber ação do buffer de im pr essão, sej a par a im pr essor a, sej a par a lim peza do cont eúdo
visualizado em t ela, ut ilizando a função MS_FLUSH( )

22 Fim da fu n çã o de pr oce ssa m e n t o e im pr e ssã o do r e la t ór io

23 Fun çã o de a t ua liza çã o do a r qu iv o de pe r gun t a s


24 Declar ação e at ribuição de variáveis;
25 Opção 01: Adição individual de cada pergunt a no SX1 ut ilizando a função PUTSX1( )
Cr iação de um ar r ay individual no for m at o ut ilizado pela PUTSX1( ) cont endo apenas
as infor m ações da pergunt a que ser á adicionada no SX1.
25 Opção 02: Adição de um gr upo de per gunt as no SX1 ut ilizando a função AJUSTASX1( )
Cr iação de um arr ay no form at o ut ilizado pela AJUSTASX1( ) cont endo t odas as
pergunt as que ser ão at ualizadas.

26 Fim da fu n çã o de a t u a liza çã o do a r qu iv o de pe r gunt a s

- 238 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o Pr in cipa l

//+-----------------------------------------------------------------+
//| Rotina | Inform | Autor | Robson Luiz (rleg) | Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina para gerar relatório utilizando as funções |
//| | SetPrint() e SetDefault(). |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+-----------------------------------------------------------------+

User Function INFORM()


//+-------------------------
//| Declarações de variáveis
//+-------------------------

Local cDesc1 := "Este relatório irá imprimir informações do contas a pagar


conforme"
Local cDesc2 := "parâmetros informado. Será gerado um arquivo no diretório "
Local cDesc3 := "Spool - INFORM_????.XLS, onde ???? e o nome do usuário."

Private cString := "SE2"


Private Tamanho := "M"
Private aReturn := { "Zebrado",2,"Administração",2,2,1,"",1 }
Private wnrel := "INFORM"
Private NomeProg := "INFORM"
Private nLastKey := 0
Private Limite := 132
Private Titulo := "Título a Pagar - Ordem de "
Private cPerg := "INFORM"
Private nTipo := 0
Private cbCont := 0
Private cbTxt := "registro(s) lido(s)"
Private Li := 80
Private m_pag := 1
Private aOrd := {}
Private Cabec1 := "PREFIXO TITULO PARCELA TIP EMISSAO VENCTO VENCTO"
Private Cabec1 += "REAL VLR. ORIGINAL PAGO SALDO "
Private Cabec2 := ""
/*
+----------------------
| Parâmetros do aReturn
+----------------------
aReturn - Preenchido pelo SetPrint()
aReturn[1] - Reservado para formulário
aReturn[2] - Reservado para numero de vias
aReturn[3] - Destinatário
aReturn[4] - Formato 1=Paisagem 2=Retrato
aReturn[5] - Mídia 1-Disco 2=Impressora
aReturn[6] – Porta ou arquivo 1-Lpt1... 4-Com1...
aReturn[7] - Expressão do filtro
aReturn[8] - Ordem a ser selecionada
aReturn[9] [10] [n] - Campos a processar se houver
*/

Continuação:

- 239 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


AADD( aOrd, "Fornecedor" )
AADD( aOrd, "Titulo" )
AADD( aOrd, "Emissão" )
AADD( aOrd, "Vencimento" )
AADD( aOrd, "Vencto. Real" )

//Parâmetros de perguntas para o relatório


//+-------------------------------------------------------------+
//| mv_par01 - Fornecedor de ? 999999 |
//| mv_par02 - Fornecedor ate ? 999999 |
//| mv_par03 - Tipo de ? XXX |
//| mv_par04 - Tipo ate ? XXX |
//| mv_par05 - Vencimento de ? 99/99/99 |
//| mv_par06 - Vencimento ate ? 99/99/99 |
//| mv_par07 - Aglut.Fornecedor ? Sim/Não |
//+-------------------------------------------------------------+
CriaSx1()

//+-------------------------------------------------
//| Disponibiliza para usuário digitar os parâmetros
//+-------------------------------------------------
Pergunte(cPerg,.F.)
//cPerg -> Nome do grupo de perguntas, .T. mostra a tela,;
// .F. somente carrega as variáveis

//+---------------------------------------------------
//| Solicita ao usuário a parametrização do relatório.
//+---------------------------------------------------
wnrel :=
SetPrint(cString,wnrel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F., ;
Tamanho,.F.,.F.)
//SetPrint(cAlias,cNome,cPerg,cDesc,cCnt1,cCnt2,cCnt3,lDic,aOrd,lCompres,;
//cSize,aFilter,lFiltro,lCrystal,cNameDrv,lNoAsk,lServer,cPortToPrint)

//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif

//+------------------------------------------------------------------
//| Estabelece os padrões para impressão, conforme escolha do usuário
//+------------------------------------------------------------------
SetDefault(aReturn,cString)

//+-------------------------------------
//| Verificar se será reduzido ou normal
//+-------------------------------------
nTipo := IIF(aReturn[4] == 1, 15, 18)

//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif

Continuação:

- 240 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


//+-----------------------------------
//| Chama função que processa os dados
//+-----------------------------------
RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo dados,;
aguarde...", .T. )

Return

Fu n çã o de pr oce ssa m e n t o e im p r e ssã o

//+-----------------------------------------------------------------+
//| Rotina | ImpRel | Autor | Robson Luiz (rleg) | Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina de processamento e impressão. |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+-----------------------------------------------------------------+

Static Function ImpRel(lEnd)

Local nIndice := 0
Local cArq := ""
Local cIndice := ""
Local cFiltro := ""
Local aCol := {}
Local cFornec := ""
Local nValor := 0
Local nPago := 0
Local nSaldo := 0
Local nT_Valor := 0
Local nT_Pago := 0
Local nT_Saldo := 0
Local cArqExcel := ""
Local cAliasImp
Local oExcelApp

Titulo += aOrd[aReturn[8]]

#IFNDEF TOP
cAliasImp := "SE2"

cFiltro := "E2_FILIAL == '"+xFilial("SE2")+"' "


cFiltro += ".And. E2_FORNECE >= '"+mv_par01+"' "
cFiltro += ".And. E2_FORNECE <= '"+mv_par02+"' "
cFiltro += ".And. E2_TIPO >= '"+mv_par03+"' "
cFiltro += ".And. E2_TIPO <= '"+mv_par04+"' "
cFiltro += ".And. Dtos(E2_VENCTO) >= '"+Dtos(mv_par05)+"' "
cFiltro += ".And. Dtos(E2_VENCTO) <= '"+Dtos(mv_par06)+"' "

If aReturn[8] == 1 //Fornecedor
cIndice := "E2_FORNECE+E2_LOJA+E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cIndice := "E2_NUM+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 3 //Emissao

Continuação:

- 241 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


cIndice := "Dtos(E2_EMISSAO)+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cIndice := "Dtos(E2_VENCTO)+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 5 //Vencimento Real
cIndice := "Dtos(E2_VENCREA)+E2_FORNECE+E2_LOJA"
Endif

cArq := CriaTrab(NIL,.F.)
dbSelectArea(cAliasImp)
IndRegua(cAliasImp,cArq,cIndice,,cFiltro)
nIndice := RetIndex()
nIndice := nIndice + 1
dbSetIndex(cArq+OrdBagExt())
dbSetOrder(nIndice)
#ELSE
cAliasImp := GetNextAlias()

cQuery := "SELECT "


cQuery += "E2_PREFIXO, E2_NUM, E2_PARCELA, E2_TIPO, E2_FORNECE, E2_LOJA,
E2_NOMFOR, "
cQuery += "E2_EMISSAO, E2_VENCTO, E2_VENCREA, E2_VALOR, E2_SALDO "
cQuery += "FROM "+RetSqlName("SE2")+" "
cQuery += "WHERE E2_FILIAL = '"+xFilial("SE2")+"' "
cQuery += "AND E2_FORNECE >= '"+mv_par01+"' "
cQuery += "AND E2_FORNECE <= '"+mv_par02+"' "
cQuery += "AND E2_TIPO >= '"+mv_par03+"' "
cQuery += "AND E2_TIPO <= '"+mv_par04+"' "
cQuery += "AND E2_VENCTO >= '"+Dtos(mv_par05)+"' "
cQuery += "AND E2_VENCTO <= '"+Dtos(mv_par06)+"' "
cQuery += "AND D_E_L_E_T_ <> '*' "
cQuery += "ORDER BY "

If aReturn[8] == 1 //Fornecedor
cQuery += "E2_FORNECE,E2_LOJA,E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cQuery += "E2_NUM,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 3 //Emissao
cQuery += "E2_EMISSAO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cQuery += "E2_VENCTO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 5 //Vencimento Real
cQuery += "E2_VENCREA,E2_FORNECE,E2_LOJA"
Endif

dbUseArea( .T., "TOPCONN", TcGenQry(,,cQuery), cAliasImp, .T., .F. )


dbSelectArea(cAliasImp)

/* Instrução SQL Embedded


----------------------
If aReturn[8] == 1 //Fornecedor
cOrder := "E2_FORNECE,E2_LOJA,E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cOrder := "E2_NUM,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 3 //Emissao
cOrder := "E2_EMISSAO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cOrder := "E2_VENCTO,E2_FORNECE,E2_LOJA"

Continuação:

- 242 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Elseif aReturn[8] == 5 //Vencimento Real
cOrder := "E2_VENCREA,E2_FORNECE,E2_LOJA"
Endif

BeginSQL Alias cAliasImp


Column E2_EMISSAO As Date
Column E2_VENCTO As Date
Column E2_VENCREA As Date
Column E2_VALOR As Numeric(12)
Column E2_SALDO As Numeric(12)
%NoParser%

SELECT E2_PREFIXO, E2_NUM, E2_PARCELA, E2_TIPO, E2_FORNECE,


E2_LOJA, E2_NOMFOR, E2_EMISSAO, E2_VENCTO, E2_VENCREA, E2_VALOR,
E2_SALDO
FROM %Table:SE2
WHERE
E2_FILIAL = %xFilial% AND
E2_FORNECE BETWEEN %Exp:mv_par01% AND %Exp:mv_par02% AND
E2_TIPO BETWEEN%Exp:mv_par03% AND %Exp:mv_par04% AND
E2_VENCTO BETWEEN %Exp:mv_par05% AND %Exp:mv_par06% AND
%NotDel%
ORDER BY %Order:cOrder%
EndSQL
*/
#ENDIF

dbGoTop()
SetRegua(0)

//+--------------------
//| Coluna de impressão
//+--------------------
AADD( aCol, 004 ) //Prefixo
AADD( aCol, 012 ) //Titulo
AADD( aCol, 024 ) //Parcela
AADD( aCol, 031 ) //Tipo
AADD( aCol, 036 ) //Emissao
AADD( aCol, 046 ) //Vencimento
AADD( aCol, 058 ) //Vencimento Real
AADD( aCol, 070 ) //Valor Original
AADD( aCol, 090 ) //Pago
AADD( aCol, 110 ) //Saldo

cFornec := (cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA

While !Eof() .And. !lEnd

If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif

Continuação:

- 243 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


@ Li, aCol[1] PSay "Cod/Loj/Nome: "+(cAliasImp)->E2_FORNECE+;
"-"+(cAliasImp)->E2_LOJA+" "+(cAliasImp)->E2_NOMFOR
Li ++

While !Eof() .And. !lEnd .And.;


(cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA == cFornec

IncRegua()

If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif

If mv_par07 == 2
@ Li, aCol[1] PSay (cAliasImp)->E2_PREFIXO
@ Li, aCol[2] PSay (cAliasImp)->E2_NUM
@ Li, aCol[3] PSay (cAliasImp)->E2_PARCELA
@ Li, aCol[4] PSay (cAliasImp)->E2_TIPO
@ Li, aCol[5] PSay (cAliasImp)->E2_EMISSAO
@ Li, aCol[6] PSay (cAliasImp)->E2_VENCTO
@ Li, aCol[7] PSay (cAliasImp)->E2_VENCREA
@ Li, aCol[8] PSay (cAliasImp)->E2_VALOR ;
PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay (cAliasImp)->E2_VALOR -;
(cAliasImp)->E2_SALDO ;
PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay (cAliasImp)->E2_SALDO ;
PICTURE "@E 99,999,999,999.99"
Li ++
Endif

nValor += (cAliasImp)->E2_VALOR
nPago += ((cAliasImp)->E2_VALOR-(cAliasImp)->E2_SALDO)
nSaldo += (cAliasImp)->E2_SALDO

nT_Valor += (cAliasImp)->E2_VALOR
nT_Pago += ((cAliasImp)->E2_VALOR-(cAliasImp)->E2_SALDO)
nT_Saldo += (cAliasImp)->E2_SALDO

dbSkip()
End

@ Li, 000 PSay Replicate("-",Limite)


Li ++
@ Li, aCol[1] PSay "TOTAL....."
@ Li, aCol[8] PSay nValor PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay nPago PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay nSaldo PICTURE "@E 99,999,999,999.99"
Li +=2

cFornec := (cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA
nValor := 0
nPago := 0
nSaldo := 0

End

Continuação:

- 244 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


If lEnd
@ Li, aCol[1] PSay cCancel
Return
Endif

@ Li, 000 PSay Replicate("=",Limite)


Li ++
@ Li, aCol[1] PSay "TOTAL GERAL....."
@ Li, aCol[8] PSay nT_Valor PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay nT_Pago PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay nT_Saldo PICTURE "@E 99,999,999,999.99"

If Li <> 80
Roda(cbCont,cbTxt,Tamanho)
Endif

//+----------------------------------------------------------------------
//| Gera arquivo do tipo .DBF com extensão .XLS p/ usuário abrir no Excel
//+----------------------------------------------------------------------
cArqExcel := __RELDIR+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS"
Copy To &cArqExcel

#IFNDEF TOP
dbSelectArea(cAliasImp)
RetIndex(cAliasImp)
Set Filter To
#ELSE
dbSelectArea(cAliasImp)
dbCloseArea()
#ENDIF
dbSetOrder(1)
dbGoTop()

If aReturn[5] == 1
Set Printer TO
dbCommitAll()
OurSpool(wnrel)
EndIf

//+------------------------
//| Abrir planilha MS-Excel
//+------------------------
If mv_par08 == 1
__CopyFile(cArqExcel,"c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS")
If ! ApOleClient("MsExcel")
MsgAlert("MsExcel não instalado")
Return
Endif
oExcelApp := MsExcel():New()
oExcelApp:WorkBooks:Open( "c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS" )
oExcelApp:SetVisible(.T.)
Endif

Ms_Flush()

Return

- 245 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o pa r a ge r a r o gr u p o d e p a r â m e t r os n o SX1

//+-----------------------------------------------------------------+
//| Rotina | CriaSX1 | Autor | Robson Luiz (rleg)| Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina para criar o grupo de parâmetros. |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+-----------------------------------------------------------------+
Static Function CriaSx1()
Local aP := {}
Local i := 0
Local cSeq
Local cMvCh
Local cMvPar
Local aHelp := {}

/******
Parâmetros da função padrão
---------------------------
PutSX1(cGrupo,;cOrdem,;
cPergunt,cPerSpa,cPerEng,;
cVar,;
cTipo,;
nTamanho,;
nDecimal,;
nPresel,;
cGSC,;
cValid,;
cF3,;
cGrpSxg,;
cPyme,;
cVar01,;
cDef01,cDefSpa1,cDefEng1,;
cCnt01,;
cDef02,cDefSpa2,cDefEng2,;
cDef03,cDefSpa3,cDefEng3,;
cDef04,cDefSpa4,cDefEng4,;
cDef05,cDefSpa5,cDefEng5,;
aHelpPor,aHelpEng,aHelpSpa,;
cHelp)

Característica do vetor p/ utilização da função SX1


---------------------------------------------------
[n,1] --> texto da pergunta
[n,2] --> tipo do dado
[n,3] --> tamanho
[n,4] --> decimal
[n,5] --> objeto G=get ou C=choice
[n,6] --> validação
[n,7] --> F3
[n,8] --> definição 1
[n,9] --> definição 2
[n,10] -> definição 3
[n,11] -> definição 4
[n,12] -> definição 5
***/

- 246 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

AADD(aP,{"Fornecedor de","C",6,0,"G","","SA2","" ,"" ,"","",""})


AADD(aP,{"Fornecedor ate","C",6,0,"G","(mv_par02>=mv_par01)","SA2",;
"" ,"" ,"","",""})
AADD(aP,{"Tipo de","C",3,0,"G","","05" ,"" ,"" ,"","",""})
AADD(aP,{"Tipo ate","C",3,0,"G","(mv_par04>=mv_par03)","05" ,"" ,;
"" ,"","",""})
AADD(aP,{"Vencimento de","D",8,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Vencimento ate","D",8,0,"G","(mv_par06>=mv_par05)","" ,;
"" ,"" ,"","",""})
AADD(aP,{"Aglutinar pagto.de fornec.","N",1,0,"C","","",;
"Sim","Não","","",""})
AADD(aP,{"Abrir planilha MS-Excel" ,"N",1,0,"C","","",;
"Sim","Não","","",""})

AADD(aHelp,{"Informe o código do fornecedor.","inicial."})


AADD(aHelp,{"Informe o código do fornecedor.","final."})
AADD(aHelp,{"Tipo de título inicial."})
AADD(aHelp,{"Tipo de título final."})
AADD(aHelp,{"Digite a data do vencimento inicial."})
AADD(aHelp,{"Digite a data do vencimento final."})
AADD(aHelp,{"Aglutinar os títulos do mesmo forne-",;
"cedor totalizando seus valores."})
AADD(aHelp,{"Será gerada uma planilha para ",;
"MS-Excel, abrir esta planilha?"})

For i:=1 To Len(aP)


cSeq := StrZero(i,2,0)
cMvPar := "mv_par"+cSeq
cMvCh := "mv_ch"+IIF(i<=9,Chr(i+48),Chr(i+87))

PutSx1(cPerg,;
cSeq,;
aP[i,1],aP[i,1],aP[i,1],;
cMvCh,;
aP[i,2],;
aP[i,3],;
aP[i,4],;
0,;
aP[i,5],;
aP[i,6],;
aP[i,7],;
"",;
"",;
cMvPar,;
aP[i,8],aP[i,8],aP[i,8],;
"",;
aP[i,9],aP[i,9],aP[i,9],;
aP[i,10],aP[i,10],aP[i,10],;
aP[i,11],aP[i,11],aP[i,11],;
aP[i,12],aP[i,12],aP[i,12],;
aHelp[i],;
{},;
{},;
"")
Next i

Return

- 247 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


25. M a nipula çã o de a r quivos I

2 5 .1 . Ge r a çã o e le it ur a de a r quivos e m for m a t o t e x t o

Arquivos do t ipo t ext o ( t am bém conhecidos com o padrão TXT) são ar quivos com regist ros de
t am anho variável. A indicação do final de cada regist ro é repr esent ada por dois byt es, “ 0D
0A” em hexadecim al ou “ 13 10” em decim al ou, ainda, “ CR LF” para padrão ASCI I .

Apesar do t am anho dos regist ros ser variável, a m aioria dos sist em as gera est e t ipo de arquivo
com r egist ros de t am anho fixo, de acordo com um layout específico que indica quais
são os dados gravados.

Para ilust rar est es procedim ent os, serão ger ados arquivos t ext os, com duas fam ílias de
funções:

1 ª ) Fa m ília : nest a fam ília serão ut ilizadas as funções: FCr eat e( ) , FWrit e( ) , FClose( ) ,
FSeek( ) , FOpen( ) e FRead( ) .

2 ª ) Fa m ília : nest a fam ília serão ut ilizadas as funções: FT_FUse( ) , FT_FGoTop( ) ,


FT_FLast Rec( ) , FT_FEof( ) , FT_FReadLn( ) , FT_FSkip( ) , FT_FGot o( ) , FT_FRecno( ) .

A diferença ent re as duas fam ílias, est á na leit ura do arquivo t ext o.
Quando se t rat ar de arquivo t ext o com t am anho fixo das linhas, poder ão
ser ut ilizadas as duas fam ílias para leit ura do arquivo, por ém , quando se
t rat ar de arquivo t ext o com t am anho variável das linhas, som ent e
poderá ser ut iliza a segunda fam ília, repr esent ada pelas funções:
FT_FUse( ) , FT_FGoTo( ) , FT_FRecno( ) , FT_FGoTop( ) , FT_FLast Rec( ) ,
FT_FEof( ) , FT_FReadLn( ) e FT_FSkip( ) .

- 248 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


1 ª . Fa m ília de fu n çõe s d e g r a va çã o e le it u r a d e a r qu ivos t e x t o

Ex e m plo: Ge r a çã o de a r q u iv o TXT, u t iliz a n do a p r im e ir a f a m ília de f u n çõe s

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | GeraTXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Gera o arquivo TXT, a partir do Cadastro de Clientes |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GeraTXT()

//+--------------------------------+
//| Declaração de Variáveis |
//+--------------------------------+
Local oGeraTxt
Private cPerg := "EXPSA1"
Private cAlias := "SA1"

//CriaSx1(cPerg)
//Pergunte(cPerg,.F.)
dbSelectArea(cAlias)
dbSetOrder(1)

//+-----------------------------------+
//| Montagem da tela de processamento.|
//+-----------------------------------+

DEFINE MSDIALOG oGeraTxt TITLE OemToAnsi("Geração de Arquivo Texto") ;


FROM 000,000 TO 200,400 PIXEL

@ 005,005 TO 095,195 OF oGeraTxt PIXEL


@ 010,020 Say " Este programa ira gerar um arquivo texto, conforme os parame- ";
OF oGeraTxt PIXEL
@ 018,020 Say " tros definidos pelo usuário, com os registros do arquivo de ";
OF oGeraTxt PIXEL
@ 026,020 Say " SA1 " OF oGeraTxt PIXEL

DEFINE SBUTTON FROM 070, 030 TYPE 1 ;


ACTION (OkGeraTxt(),oGeraTxt:End()) ENABLE OF oGeraTxt

DEFINE SBUTTON FROM 070, 070 TYPE 2 ;


ACTION (oGeraTxt:End()) ENABLE OF oGeraTxt

DEFINE SBUTTON FROM 070, 110 TYPE 5 ;


ACTION (Pergunte(cPerg,.T.)) ENABLE OF oGeraTxt

ACTIVATE DIALOG oGeraTxt CENTERED

Return Nil

- 249 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

/*/
+-----------------------------------------------------------------------------
| Função | OKGERATXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função chamada pelo botão OK na tela inicial de processamento. |
| | Executa a geração do arquivo texto. |
+-----------------------------------------------------------------------------
/*/

Static Function OkGeraTxt

//+-----------------------------------------------------------------------------
//| Cria o arquivo texto
//+-----------------------------------------------------------------------------
Private cArqTxt := "\SYSTEM\EXPSA1.TXT"
Private nHdl := fCreate(cArqTxt)

If nHdl == -1
MsgAlert("O arquivo de nome "+cArqTxt+" não pode ser executado! Verifique os
parâmetros.","Atenção!")
Return
Endif

// Inicializa a régua de processamento


Processa({|| RunCont() },"Processando...")

Return Nil

/*/
+-----------------------------------------------------------------------------
| Função | RUNCONT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função auxiliar chamada pela PROCESSA. A função PROCESSA |
| | monta a janela com a régua de processamento. |
+-----------------------------------------------------------------------------
/*/

Static Function RunCont

Local cLin

dbSelectArea(cAlias)
dbGoTop()
ProcRegua(RecCount()) // Numero de registros a processar

While (cAlias)->(!EOF())
//Incrementa a régua
IncProc()

cLin := (cAlias)->A1_FILIAL
cLin += (cAlias)->A1_COD
cLin += (cAlias)->A1_LOJA
cLin += (cAlias)->A1_NREDUZ
cLin += STRZERO((cAlias)->A1_MCOMPRA*100,16) // 14,2
cLin += DTOS((cAlias)->A1_ULTCOM)//AAAAMMDD
cLin += CRLF

- 250 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

//+-------------------------------------------------------------------+
//| Gravação no arquivo texto. Testa por erros durante a gravação da |
//| linha montada. |
//+-------------------------------------------------------------------+

If fWrite(nHdl,cLin,Len(cLin)) != Len(cLin)
If !MsgAlert("Ocorreu um erro na gravação do arquivo."+;
"Continua?","Atenção!")
Exit
Endif
Endif

(cAlias)->(dbSkip())
EndDo

// O arquivo texto deve ser fechado, bem como o dialogo criado na função
anterior
fClose(nHdl)

Return Nil

Not e que para a geração do arquivo TXT foram ut ilizadas, basicam ent e, as funções
FCreat e, FWrit e e FClose que, respect ivam ent e, gera o arquivo, adiciona dados e fecha
o arquivo. No ex em plo, o form at o é est abelecido pela concat enação dos dados na
variável cLin a qual é ut ilizada na gravação dos dados. Para a leit ura de dados TXT serão
ut ilizada as funções FOpen e FRead.

Ex e m plo: Le it u r a d e a r qu ivo TXT, u t iliz a n d o a p r im e ir a fa m ília d e fu n çõe s

#Include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Programa | LeTXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------
| Descrição | Leitura de arquivo TXT |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
User Function LeTXT()

//+-------------------------------------------------------------------+
//| Declaração de Variáveis |
//+-------------------------------------------------------------------+

Local cPerg := "IMPSA1"


Local oLeTxt

Private cAlias := "SA1"

//CriaSx1(cPerg)
//Pergunte(cPerg,.F.)

- 251 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

dbSelectArea(cAlias)
dbSetOrder(1)

//+-------------------------------------------------------------------+
// Montagem da tela de processamento |
//+-------------------------------------------------------------------+

DEFINE MSDIALOG oLeTxt TITLE OemToAnsi("Leitura de Arquivo Texto");


FROM 000,000 TO 200,400 PIXEL
@ 005,005 TO 095,195 OF oLeTxt PIXEL
@ 10,020 Say " Este programa ira ler o conteúdo de um arquivo texto, conforme";
OF oLeTxt PIXEL
@ 18,020 Say " os parâmetros definidos pelo usuário, com os registros do
arquivo";
OF oLeTxt PIXEL
@ 26,020 Say " SA1" OF oLeTxt PIXEL

DEFINE SBUTTON FROM 070, 030 TYPE 1 ;


ACTION (OkLeTxt(),oLeTxt:End()) ENABLE OF oLeTxt

DEFINE SBUTTON FROM 070, 070 TYPE 2 ;


ACTION (oLeTxt:End()) ENABLE OF oLeTxt

DEFINE SBUTTON FROM 070, 110 TYPE 5 ;


ACTION (Pergunte(cPerg,.T.)) ENABLE OF oLeTxt
ACTIVATE DIALOG oLeTxt CENTERED

Return Nil

/*/
+-----------------------------------------------------------------------------
| Função | OKLETXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função chamada pelo botão OK na tela inicial de processamento |
| | Executa a leitura do arquivo texto |
+-----------------------------------------------------------------------------
/*/

Static Function OkLeTxt()

//+-------------------------------------------------------------------+
//| Abertura do arquivo texto |
//+-------------------------------------------------------------------+

Private cArqTxt := "\SYSTEM\EXPSA1.TXT"


Private nHdl := fOpen(cArqTxt,68)

If nHdl == -1
MsgAlert("O arquivo de nome "+cArqTxt+" não pode ser aberto! Verifique os
parâmetros.","Atenção!")
Return
Endif

// Inicializa a régua de processamento


Processa({|| RunCont() },"Processando...")
Return Nil

- 252 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

/*/
+-----------------------------------------------------------------------------
| Função | RUNCONT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função auxiliar chamada pela PROCESSA. A função PROCESSA |
| | monta a janela com a régua de processamento. |
+-----------------------------------------------------------------------------
/*/

Static Function RunCont

Local nTamFile := 0
Local nTamLin := 56
Local cBuffer := ""
Local nBtLidos := 0
Local cFilSA1 := ""
Local cCodSA1 := ""
Local cLojaSA1 := ""

//1234567890123456789012345678901234567890123456789012345678901234567890
//00000000010000000002000000000300000000040000000005000000000600000000070
//FFCCCCCCLLNNNNNNNNNNNNNNNNNNNNVVVVVVVVVVVVVVVVDDDDDDDD
//A1_FILIAL - 01, 02 - TAM: 02
//A1_COD - 03, 08 - TAM: 06
//A1_LOJA - 09, 10 - TAM: 02
//A1_NREDUZ - 11, 30 - TAM: 20
//A1_MCOMPRA - 31, 46 - TAM: 14,2
//A1_ULTCOM - 47, 54 - TAM: 08

nTamFile := fSeek(nHdl,0,2)
fSeek(nHdl,0,0)
cBuffer := Space(nTamLin) // Variável para criação da linha do registro para
leitura

ProcRegua(nTamFile) // Numero de registros a processar


While nBtLidos < nTamFile

//Incrementa a régua
IncProc()

// Leitura da primeira linha do arquivo texto


nBtLidos += fRead(nHdl,@cBuffer,nTamLin)

cFilSA1 := Substr(cBuffer,01,02) //- 01, 02 - TAM: 02


cCodSA1 := Substr(cBuffer,03,06) //- 03, 08 - TAM: 06
cLojaSA1 := Substr(cBuffer,09,02) //- 09, 10 - TAM: 02

While .T.
IF dbSeek(cFilSA1+cCodSA1+cLojaSA1)
cCodSA1 := SOMA1(cCodSA1)
Loop
Else
Exit
Endif
Enddo

- 253 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

dbSelectArea(cAlias)
RecLock(cAlias,.T.)
(cAlias)->A1_FILIAL := cFilSA1 //- 01, 02 - TAM: 02
(cAlias)->A1_COD := cCodSA1 //- 03, 08 - TAM: 06
(cAlias)->A1_LOJA := cLojaSA1 //- 09, 10 - TAM: 02
(cAlias)->A1_NREDUZ := Substr(cBuffer,11,20)
//- 11, 30 - TAM: 20
(cAlias)->A1_MCOMPRA := Val(Substr(cBuffer,31,16))/100
//- 31, 46 - TAM: 14,2
(cAlias)->A1_ULTCOM := STOD(Substr(cBuffer,47,08))
//- 47, 54 - TAM: 08
MSUnLock()

EndDo

// O arquivo texto deve ser fechado, bem como o dialogo criado na função
anterior.
fClose(nHdl)

Return Nil

2 ª . Fa m ília de fu n çõe s d e g r a va çã o e le it u r a d e a r qu ivos t e x t o

Ex e m plo: Le it u r a d e a r qu ivo TXT, u t iliz a n d o a se gu nd a f a m ília d e fu n çõe s

#Include "Protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | LeArqTXT | Autor | Robson Luiz | Data | |
+-----------------------------------------------------------------------------
| Descrição | Leitura de arquivo TXT |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
User Function LeArqTxt()

Private nOpc := 0
Private cCadastro := "Ler arquivo texto"
Private aSay := {}
Private aButton := {}

AADD( aSay, "O objetivo desta rotina e efetuar a leitura em um arquivo texto" )

AADD( aButton, { 1,.T.,{|| nOpc := 1,FechaBatch()}})


AADD( aButton, { 2,.T.,{|| FechaBatch() }} )

FormBatch( cCadastro, aSay, aButton )

If nOpc == 1
Processa( {|| Import() }, "Processando..." )
Endif
Return Nil

- 254 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

//+-------------------------------------------
//| Função - Import()
//+-------------------------------------------
Static Function Import()

Local cBuffer := ""


Local cFileOpen := ""
Local cTitulo1 := "Selecione o arquivo"
Local cExtens := "Arquivo TXT | *.txt"

/***
* _________________________________________________________
* cGetFile(<ExpC1>,<ExpC2>,<ExpN1>,<ExpC3>,<ExpL1>,<ExpN2>)
* ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
* <ExpC1> - Expressão de filtro
* <ExpC2> - Titulo da janela
* <ExpN1> - Numero de mascara default 1 para *.Exe
* <ExpC3> - Diretório inicial se necessário
* <ExpL1> - .F. botão salvar - .T. botão abrir
* <ExpN2> - Mascara de bits para escolher as opções de visualização do objeto
* (prconst.ch)
*/
cFileOpen := cGetFile(cExtens,cTitulo1,,cMainPath,.T.)

If !File(cFileOpen)
MsgAlert("Arquivo texto: "+cFileOpen+" não localizado",cCadastro)
Return
Endif

FT_FUSE(cFileOpen) //ABRIR
FT_FGOTOP() //PONTO NO TOPO
ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER

While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO


IncProc()

// Capturar dados
cBuffer := FT_FREADLN() //LENDO LINHA

cMsg := "Filial: " +SubStr(cBuffer,01,02) + Chr(13)+Chr(10)


cMsg += "Código: " +SubStr(cBuffer,03,06) + Chr(13)+Chr(10)
cMsg += "Loja: " +SubStr(cBuffer,09,02) + Chr(13)+Chr(10)
cMsg += "Nome fantasia: " +SubStr(cBuffer,11,15) + Chr(13)+Chr(10)
cMsg += "Valor: " +SubStr(cBuffer,26,14) + Chr(13)+Chr(10)
cMsg += "Data: " +SubStr(cBuffer,40,08) + Chr(13)+Chr(10)

MsgInfo(cMsg)

FT_FSKIP() //próximo registro no arquivo txt


EndDo

FT_FUSE() //fecha o arquivo txt


MsgInfo("Processo finalizada")
Return Nil

- 255 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


26. Oficina de pr ogr a m a çã o I

2 6 .1 . I nt e r fa ce s com sint a x e clá ssica

A sint axe conv encional para definição de com ponent es visuais da linguagem ADVPL depende
diret am ent e no include especificado no cabeçalho do font e. Os dois includes disponíveis para o
am bient e ADVPL Pr ot heus são:

 RWMAKE.CH: perm it e a ut ilização da sint axe CLI PPER na definição dos com ponent es
visuais.

 PROTHEUS.CH: perm it e a ut ilização da sint axe ADVPL conv encional, a qual é um


aprim oram ent o da sint axe CLI PPER, com a inclusão de novos at ribut os para os
com ponent es visuais disponibilizados no ERP Pr ot heus.

Para ilust rar a diferença na ut ilização dest es dois includes, segue abaixo as diferent es
definições para o com ponent es 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

Am bas as sint axes produzirão o m esm o efeit o quando com piladas e


ex ecut adas no am bient e Pr ot heus, m as dev e ser ut ilizada sem pr e a sint axe
ADVPL at rav és do uso do include PROTHEUS.CH

Os com ponent es da int erface visual que ser ão t rat ados nest e t ópico, ut ilizando a sint axe
clássica da linguagem ADVPL são:

 BUTTON ( )
 CH ECKBOX( )
 COM BOBOX ( )
 FOLD ER( )
 M SD I ALOG( )
 M SGET( )

- 256 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 RAD I O( )
 SAY( )
 SBUTTON ( )

BUTTON ( )

@ n Lin h a ,n Colu n a BUTTON cTe x t o SI ZE n La r g u r a ,n Alt u r a UN I D AD E


Sin t a x e
OF oObj e t oRe f ACTI ON AÇÃO
Define o com ponent e visual But t on, o qual perm it e a inclusão de bot ões de
D e scr içã o operação na t ela da int er face, os quais ser ão visualizados som ent e com um
t ext o sim ples para sua ident ificação.

CH ECKBOX( )

@ n Lin h a ,n Colu n a CH ECKBOX oCh e ck Box V AR V ARI AVEL PROM PT


Sin t a x e cTe x t o W H EN W H EN UN I D AD E OF oOb j e t oRe f SI ZE n La r gu r a ,n Alt u r a
M ESSAGE cM e n sa g e m
Define o com ponent e v isual CheckBox, o qual perm it e a ut ilização da um a
m arca para habilit ar ou não um a opção escolhida, sendo est a m arca
D e scr içã o acom panhada de um t ext o explicat ivo. Difere do RadioMenu pois cada
elem ent o do check é único, m as o Radio per m it e a ut ilização de um a list a
j unt o com um cont r ole de seleção.

COM BOBOX ( )

@ n Lin h a ,n Colu n a COM BOBOX V ARI AVEL I TEM S AI TEN S SI ZE


Sin t a x e
n La r gu r a ,n Alt u r a UN I D AD E OF oOb j e t oRe f
Define o com ponent e visual Com boBox, o qual perm it e seleção de um it em
D e scr içã o
dent ro de um a list a de opções de t ext os sim ples no form at o de um v et or.

FOLD ER( )

@ n Lin h a ,n Colu n a FOLD ER oFold e r OF oOb j e t oRe f PROM PT


Sin t a x e
& cTe x t o1 ,…,& cTe x t oX PI XEL SI ZE n La r g u r a ,n Alt u r a
Define o com ponent e v isual Folder, o qual perm it e a inclusão de diver sos
Dialogs dent ro de um a m esm a int erface visual. Um Folder pode ser
D e scr içã o
ent endido com o um array de Dialogs, aonde cada painel recebe seus
com ponent es e t em seus at ribut os definidos independent em ent e dos dem ais.

M SD I ALOG( )

D EFI N E M SD I ALOG oObj e t oD LG TI TLE cTit u lo FROM n Lin I n i,n ColI n i


Sin t a x e
TO n LiFim ,n ColFim OF oOb j e t oRe f UN I D AD E
Define o com ponent e MSDI ALOG( ) , o qual é ut ilizado com o base para os
D e scr içã o dem ais com ponent es da int erface visual, pois um com ponent e MSDI ALOG( )
é um a j anela da aplicação.

- 257 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M SGET( )

@ n Lin h a , n Colu n a M SGET V ARI AVEL SI ZE n La r gu r a ,n Alt u r a


Sin t a x e UN I D AD E OF oObj e t oRe f F3 cF3 V ALI D V ALI D W H EN W H EN PI CTURE
cPict ur e
Define o com ponent e visual MSGET, o qual é ut ilizado para capt ura de
D e scr içã o
inform ações digit áveis na t ela da int erface.

RAD I O( )

@ n Lin h a ,n Colu n a RAD I O oRa d io V AR n Ra dio 3 D SI ZE


Sin t a x e nLa r gu r a ,n Alt u r a < I TEM S PROM PT> cI t e m 1 ,cI t e m 2 ,...,cI t e m X OF
oObj e t oRe f UN I D AD E ON CH AN GE CH AN GE ON CLI CK CLI CK
Define o com ponent e visual Radio, t am bém conhecido com o RadioMenu, o
qual é seleção de um a opção ou de m últ iplas opções at rav és de um a m ar ca
D e scr içã o para os it ens exibidos de um a list a. Difere do com ponent e CheckBox , pois
cada elem ent o de check é sem pr e único, e o Radio pode cont er um ou m ais
elem ent os.

SAY( )

@ n Lin h a , n Colu n a SAY cTe x t o SI ZE n La r g u r a ,n Alt u r a UN I D AD E OF


Sin t a x e
oObj e t oRe f
Define o com ponent e v isual SAY, o qual é ut ilizado para exibição de t ext os
D e scr içã o
em um a t ela de int erface.

SBUTTON ( )

D EFI N E SBUTTON FROM n Lin h a , n Colu n a TYPE N ACTI ON AÇÃO


Sin t a x e
STATUS OF oObj e t oRe f
Define o com ponent e visual SBut t on, o qual perm it e a inclusão de bot ões de
operação na t ela da int erface, os quais serão visualizados dependendo da
D e scr içã o
int erface do sist em a ERP ut ilizada som ent e com um t ext o sim ples para sua
ident ificação, ou com um a im agem ( Bit Map) pré- definido.

- 258 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 6 .2 . Ré gua s de pr oce ssa m e nt o

Os indicadores de progr esso ou r éguas de processam ent o disponíveis na linguagem ADVPL que
serão abordados nest e m at erial são:

 RPTSTATUS( )
 PROCESSA( )
 M SN EW PROCESS( )
 M SAGUARD E( )
 M SGRUN ( )

2 6 .2 .1 . Rpt St a t us( )

Régua de pr ocessam ent o sim ples, com apenas um indicador de progresso, ut ilizada no
processam ent o de relat órios do padrão Set Print ( ) .

 Sin t a x e : Rpt St a t u s( b Aca o, cM e n sa g e m )

 Re t or n o: N il

 Pa r â m e t r os:

Bloco de código que especifica a ação que será ex ecut ada com
bAca o
o acom panham ent o da régua de processam ent o.
Mensagem que será exibida na régua de processam ent o
cM e n sa ge m
durant e a ex ecução.

Ap a r ê n cia

- 259 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o RPTSt a t u s( ) e a ce ssór ia s

/*/
+---------------------------------------------------------------------------
| Função | GRPTSTATUS | Autor | ROBSON LUIZ | Data | |
+---------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização das funções RPTSTATUS() |
| | SETREGUA() E INCREGUA() |
+---------------------------------------------------------------------------
| Uso | Curso ADVPL |
+---------------------------------------------------------------------------
/*/

User Function GRptStatus()


Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de Funções"
Local cDesc1 := "Este programa exemplifica a utilização da função Processa() em
conjunto"
Local cDesc2 := "com as funções de incremento ProcRegua() e IncProc()"

Private cPerg := "RPTSTA"

CriaSX1()
Pergunte(cPerg,.F.)

AADD( aSay, cDesc1 )


AADD( aSay, cDesc2 )

AADD( aButton, { 5, .T., {|| Pergunte(cPerg,.T. ) }} )


AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc <> 1
Return Nil
Endif

RptStatus( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )

Return Nil

- 260 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çõe s a ce ssór ia s d a RPTSt a t u s( )

/*/
+-----------------------------------------------------------------------------
| Função | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de processamento executada através da RPTSTATUS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd)


Local nCnt := 0

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5")+mv_par01,.T.)

While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02


nCnt++
dbSkip()
End

dbSeek(xFilial("SX5")+mv_par01,.T.)

SetRegua(nCnt)
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
IncRegua()
If lEnd
MsgInfo(cCancel,"Fim")
Exit
Endif
dbSkip()
End
Return .T.

SETREGUA( )

A função Set Regua( ) é ut ilizada para definir o valor m áxim o da régua de progr essão criada
at ravés da função Rpt St at us( ) .

 Sin t a x e : Se t Re g u a ( n M a x Pr oc)

 Pa r â m e t r os:

n M a x Pr oc Variável que indica o v alor m áxim o de pr ocessam ent o ( passos) que serão
indicados pela régua.

 Re t or n o:

Nenhum .

- 261 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

...

dbSelect Area( " SA1" )


dbGoTop( )
Set Regua( Last Rec( ) )
While ! Eof( )
I ncRegua( )
I f Li > 60
...

I N CREGUA( )

A função I ncRegua( ) é ut ilizada para increm ent ar valor na régua de progressão criada at rav és
da função Rpt St at us( )

 Sin t a x e : I n cRe gu a ( cM e n sa ge m )

 Pa r â m e t r os:

cM e n sa ge m Mensagem que será exibida e at ualizada na régua de processam ent o a cada


ex ecução da função I ncRegua( ) , sendo que a t axa de at ualização da
int erface é cont r olada pelo Binário.

 Re t or n o:

Nenhum .

Ex e m plo:

...

dbSelect Area( " SA1" )


dbGoTop( )
Set Regua( Last Rec( ) )
While ! Eof( )
I ncRegua( “ Avaliando client e: ” + SA1- > A1_COD)
I f Li > 60
...

- 262 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 6 .2 .2 . Pr oce ssa ( )

Régua de pr ocessam ent o sim ples, com apenas um indicador de progresso, ut ilizada no
processam ent o de rot inas.

 Sin t a x e : Pr oce ssa ( b Aca o, cM e n sa ge m )

 Re t or n o: N il

 Pa r â m e t r os:

Bloco de código que especifica a ação que será ex ecut ada com
bAca o
o acom panham ent o da régua de processam ent o.
Mensagem que será exibida na régua de processam ent o
cM e n sa ge m
durant e a ex ecução.

Ap a r ê n cia

Ex e m plo: Fu n çã o PROCESSA( ) e a ce ssór ia s

/*/
+-----------------------------------------------------------------------------
| Função | GPROCES1 | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização das funções PROCESSA() |
| | PROCREGUA() E INCPROC() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GProces1()


Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de Funções"
Local cDesc1 := "Este programa exemplifica a utilização da função Processa()"
Local cDesc2 := " em conjunto com as funções de incremento ProcRegua() e"
Local cDesc3 := " IncProc()"

- 263 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

Private cPerg := "PROCES"

CriaSX1()
Pergunte(cPerg,.F.)

AADD( aSay, cDesc1 )


AADD( aSay, cDesc2 )

AADD( aButton, { 5, .T., {|| Pergunte(cPerg,.T. ) }} )


AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc <> 1
Return Nil
Endif

Processa( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )

Return Nil

/*/
+-----------------------------------------------------------------------------
| Função | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de processamento executada através da PROCRSSA() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd)


Local nCnt := 0

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5")+mv_par01,.T.)

dbEval( {|x| nCnt++ },,{||X5_FILIAL==xFilial("SX5").And.X5_TABELA<=mv_par02})

dbSeek(xFilial("SX5")+mv_par01,.T.)

ProcRegua(nCnt)
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
IncProc("Processando tabela: "+SX5->X5_CHAVE)
If lEnd
MsgInfo(cCancela,"Fim")
Exit
Endif
dbSkip()
End
Return .T.

- 264 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


SETPROC( )

A função Set Pr oc( ) é ut ilizada para definir o valor m áxim o da régua de progr essão criada
at ravés da função Pr ocessa( ) .

 Sin t a x e : Pr oce ssa ( n M a x Pr oc)

 Pa r â m e t r os:

n M a x Pr oc Variável que indica o v alor m áxim o de pr ocessam ent o ( passos) que serão
indicados pela régua.

 Re t or n o:

Nenhum .

Ex e m plo:
...
dbSelect Area( " SA1" )
dbGoTop( )
Set Pr oc( Last Rec( ) )
While ! Eof( )
I ncPr oc( )
I f Li > 60
...

I N CPROC( )

A função I ncProc( ) é ut ilizada para increm ent ar valor na régua de progr essão criada at ravés da
função Pr ocessa( )

 Sin t a x e : I n cPr oc( cM e n sa ge m )

 Pa r â m e t r os:

cM e n sa ge m Mensagem que será exibida e at ualizada na régua de processam ent o a cada


ex ecução da função I ncProc( ) , sendo que a t ax a de at ualização da int erface é
cont r olada pelo Binário.

 Re t or n o:

Nenhum .

Ex e m plo:
...
dbSelect Area( " SA1" )
dbGoTop( )
Set Pr oc( Last Rec( ) )
While ! Eof( )
I ncPr oc( “ Avaliando client e: ” + SA1- > A1_COD)
I f Li > 60
...

- 265 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 6 .2 .3 . M sN e w Pr oce ss( ) .

Régua de pr ocessam ent o dupla, possuindo dois indicadores de pr ogr esso independent es,
ut ilizada no processam ent o de rot inas.

 Sint a x e : M sN e w Pr oce ss( ) :N e w ( b Aca o, cM e n sa ge m )

 Re t or n o: oPr oce ss  obj e t o d o t ipo M sN e w Pr oce ss( )

 Pa r â m e t r os:

Bloco de código que especifica a ação que será ex ecut ada com
bAca o
o acom panham ent o da régua de processam ent o.
Mensagem que será exibida na régua de processam ent o
cM e n sa ge m
durant e a ex ecução.

Ap a r ê n cia

 M é t odos:

Act iv a t e ( ) I nicia a execução do obj et o MsNewPr ocess inst anciado.


Se t Re gu a 1 ( ) Define a quant idade de inform ações que serão dem onst radas
pelo indicador de pr ogr esso superior.
Pa r â m e t r o: nMax Pr oc
I n cRe gu a 1 ( ) I ncrem ent a em um a unidade o indicador de pr ogresso
superior , o qual irá dem onst rar a ev olução do processam ent o
de acordo com a quant idade definida pelo m ét odo
Set Regua1( ) .
Pa r â m e t r o: cMensagem
Se t Re gu a 2 ( ) Define a quant idade de inform ações que serão dem onst radas
pelo indicador de pr ogr esso inferior.
Pa r â m e t r o: nMax Pr oc
I n cRe gu a 2 ( ) I ncrem ent a em um a unidade o indicador de pr ogresso inferior,
o qual irá dem onst rar a ev olução do processam ent o de acordo
com a quant idade definida pelo m ét odo Set Regua2( ) .
Pa r â m e t r o: cMensagem

- 266 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Ob j e t o M sN e w Pr oce ss( ) e m é t od os a ce ssór ios

/*/
+-----------------------------------------------------------------------------
| Função | GPROCES2 | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MsNewProcess() |
| | e seus métodos IncReguaX() e SetReguaX() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GProces2()


Private oProcess := NIL

oProcess := MsNewProcess():New({|lEnd| RunProc(lEnd,oProcess)};


"Processando","Lendo...",.T.)
oProcess:Activate()

Return Nil

/*/
+-----------------------------------------------------------------------------
| Função | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de processamento executada através da MsNewProcess() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd,oObj)


Local i := 0
Local aTabela := {}
Local nCnt := 0

aTabela := {{"00",0},{"13",0},{"35",0},{"T3",0}}

dbSelectArea("SX5")
cFilialSX5 := xFilial("SX5")
dbSetOrder(1)
For i:=1 To Len(aTabela)
dbSeek(cFilialSX5+aTabela[i,1])
While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1]
If lEnd
Exit
Endif
nCnt++
dbSkip()
End
aTabela[i,2] := nCnt
nCnt := 0
Next i

- 267 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

oObj:SetRegua1(Len(aTabela))
For i:=1 To Len(aTabela)
If lEnd
Exit
Endif
oObj:IncRegua1("Lendo Tabela: "+aTabela[i,1])
dbSelectArea("SX5")
dbSeek(cFilialSX5+aTabela[i,1])
oObj:SetRegua2(aTabela[i,2])
While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1]
oObj:IncRegua2("Lendo chave: "+X5_CHAVE)
If lEnd
Exit
Endif
dbSkip()
End
Next i
Return

2 6 .2 .4 . M sAgua r de ( ) .

I ndicador de processam ent o sem increm ent o.

 Sin t a x e : Pr oce ssa ( b Aca o, cM e n sa ge m , cTit u lo)

 Re t or n o: N il

 Pa r â m e t r os:

Bloco de código que especifica a ação que será ex ecut ada com
bAca o
o acom panham ent o da régua de processam ent o.
Mensagem que será exibida na régua de processam ent o
cM e n sa ge m
durant e a ex ecução.
cTit u lo Tít ulo da j anela da régua de processam ent o.

Ap a r ê n cia

- 268 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: M SAg ua r de ( )

/*/
+-----------------------------------------------------------------------------
| Função | GMSAGUARDE | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização das funções MSAGUARDE() |
| | e MSPROCTXT() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION GMsAguarde()


PRIVATE lEnd := .F.

MsAguarde({|lEnd| RunProc(@lEnd)},"Aguarde...","Processando Clientes",.T.)

RETURN

/*/
+-----------------------------------------------------------------------------
| Função | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de processamento |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION RunProc(lEnd)

dbSelectArea("SX5")
dbSetOrder(1)
dbGoTop()

While !Eof()
If lEnd
MsgInfo(cCancel,"Fim")
Exit
Endif
MsProcTxt("Tabela: "+SX5->X5_TABELA+" Chave: "+SX5->X5_CHAVE)
dbSkip()
End

RETURN

- 269 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 6 .2 .5 . M sgRun( ) .

I ndicador de processam ent o sem increm ent o.

 Sin t a x e : Pr oce ssa ( cM e n sa ge m , cTit u lo, b Aca o)

 Re t or n o: N il

 Pa r â m e t r os:

Mensagem que será exibida na régua de processam ent o


cM e n sa ge m
durant e a ex ecução.
cTit u lo Tít ulo da j anela da régua de processam ent o.
Bloco de código que especifica a ação que será ex ecut ada com
bAca o
o acom panham ent o da régua de processam ent o.

Ap a r ê n cia

Ex e m plo: M SGRu n ( )

/*/
+-----------------------------------------------------------------------------
| Função | GMSGRUN | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização das funções MSGRUN() |
| | e DBEVAL() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION GMsgRun()


LOCAL nCnt := 0

dbSelectArea("SX1")
dbGoTop()

MsgRun("Lendo arquivo, aguarde...","Título opcional",{|| dbEval({|x| nCnt++}) })

MsgInfo("Ufa!!!, li "+AllTrim(Str(nCnt))+" registros",FunName())

RETURN

- 270 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 6 .3 . List Box ( )

A sint axe clássica da linguagem ADVPL perm it e que o com ponent e visual List Box im plem ent e
dois t ipos dist int os de obj et os:

 List a sim ple s: list a de apenas um a coluna no form at o de um v et or, a qual não
necessit a da especificação de um cabeçalho.

 List a com colu n a s: list a com diver sas colunas que necessit a de um cabeçalho no
for m at o de um aHeader ( array de cabeçalho) .

2 6 .3 .1 . List Box sim ple s

 Sin t a x e :

@ n Lin h a ,n Colu n a LI STBOX oList box V AR n List a I TEM S a List a SI ZE n La r g u r a ,n Alt u r a


OF oObj e t oRe f UN I D AD E ON CH AN GE CH AN GE

 Pa r â m e t r os:

n Lin h a ,n Colu n a Posição do obj et o List Box em função da j anela em que ele
será definido.
oList Box Obj et o List Box que será criado.
n List a Variável num érica que cont ém o núm ero do it em
selecionado no List Box .
a List a Vet or sim ples cont endo as st rings que serão exibidas no
List Box.
n La r gu r a ,n Alt u r a Dim ensões do obj et o List Box .
oObj e t oRe f Obj et o dialog no qual o com ponent e será definido.
UN I D AD E Unidade de m edida das dim ensões: PI XEL.
CH AN GE Função ou list a de expr essões que será ex ecut ada na
seleção de um it em do List Box.

 Ap a r ê n cia :

- 271 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: LI STBOX com o list a sim ple s

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | LISTBOXITE | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do LISTBOX() como lista |
| | simples. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
User Function ListBoxIte()

Local aVetor := {}
Local oDlg := Nil
Local oLbx := Nil
Local cTitulo := "Consulta Tabela"
Local nChave := 0
Local cChave := ""

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5"))

CursorWait()

//+-----------------------------------------+
//| Carrega o vetor conforme a condição |
//+-----------------------------------------+
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA=="00"
AADD( aVetor, Trim(X5_CHAVE)+" - "+Capital(Trim(X5_DESCRI)) )
dbSkip()
End

CursorArrow()

If Len( aVetor ) == 0
Aviso( cTitulo, "Não existe dados a consultar", {"Ok"} )
Return
Endif

//+-----------------------------------------------+
//| Monta a tela para usuário visualizar consulta |
//+-----------------------------------------------+
DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL
@ 10,10 LISTBOX oLbx VAR nChave ITEMS aVetor SIZE 230,95 OF oDlg PIXEL
oLbx:bChange := {|| cChave := SubStr(aVetor[nChave],1,2) }
DEFINE SBUTTON FROM 107,183 TYPE 14 ACTION LoadTable(cChave) ENABLE OF oDlg
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg

ACTIVATE MSDIALOG oDlg CENTER

Return

- 272 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: LI STBOX com o list a sim ple s – f u n çõe s a ce ssór ia s

/*/
+-----------------------------------------------------------------------------
| Função | LISTBOXITE | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrição | Função que carrega os dados da tabela selecionada em um |
| | listbox. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION LoadTable(cTabela)

LOCAL aTabela := {}
LOCAL oDlg := NIL
LOCAL oLbx := NIL

dbSelectArea("SX5")
dbSeek(xFilial("SX5")+cTabela)

//+-------------------------------------------------------------
//| O vetor pode receber carga de duas maneiras, acompanhe... |
//+-------------------------------------------------------------
//| Utilizando While/End |
//+-------------------------------------------------------------

dbEval({|| AADD(aTabela,{X5_CHAVE,Capital(X5_DESCRI)})},,{||
X5_TABELA==cTabela})

If Len(aTabela)==0
Aviso( "FIM", "Necessário selecionar um item", {"Ok"} )
Return
Endif

DEFINE MSDIALOG oDlg TITLE "Dados da tabela selecionada" FROM 300,400 TO 540,900
PIXEL
@ 10,10 LISTBOX oLbx FIELDS HEADER "Tabela", "Descrição" SIZE 230,095 OF oDlg
PIXEL
oLbx:SetArray( aTabela )
oLbx:bLine := {|| {aTabela[oLbx:nAt,1],aTabela[oLbx:nAt,2]} }
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg

RETURN

- 273 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 6 .3 .2 . List Box m últ ipla s coluna s

 Sin t a x e :

@ nLin h a ,n Colu n a LI STBOX oList b ox FI ELD S H EAD ER “H e a de r 1 ”, …, “H e a de r X” SI ZE


n La r gu r a ,n Alt u r a OF oObj e t oRe f UN I D AD E

 Pa r â m e t r os:

n Lin h a ,n Colu n a Posição do obj et o List Box em função da


j anela em que ele será definido.
oList Box Obj et o List Box que será criado.
n List a Variável num érica que cont ém o núm ero do
it em selecionado no List Box.
“H e a de r 1 ”,...,“H e a de r X” St rings ident ificando os t ít ulos das colunas do
Grid.
n La r gu r a ,n Alt u r a Dim ensões do obj et o List Box .
oObj e t oRe f Obj et o dialog no qual o com ponent e será
definido.
UN I D AD E Unidade de m edida das dim ensões: PI XEL.
CH AN GE Função ou list a de expr essões que será
ex ecut ada na seleção de um it em do List Box.

 M é t odos:

Se t Ar r a y( ) Mét odo o obj et o List Box que define qual o


array cont ém os dados que serão exibidos no
grid.

 At r ibu t os:

bLin e At ribut o do obj et o List Box que vincula cada


linha,coluna do array, com cada cabeçalho do
grid.

 Ap a r ê n cia :

- 274 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: LI STBOX com gr id

#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Função | LIST_BOX | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização de um LISTBOX() com |
| | grid. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function List_Box()

Local aVetor := {}
Local oDlg
Local oLbx
Local cTitulo := "Cadastro de Bancos"
Local cFilSA6

dbSelectArea("SA6")
dbSetOrder(1)
cFilSA6 := xFilial("SA6")
dbSeek(cFilSA6)

// Carrega o vetor conforme a condição.


While !Eof() .And. A6_FILIAL == cFilSA6
AADD( aVetor, { A6_COD, A6_AGENCIA, A6_NUMCON, A6_NOME, A6_NREDUZ, A6_BAIRRO,
A6_MUN } )
dbSkip()
End

// Se não houver dados no vetor, avisar usuário e abandonar rotina.


If Len( aVetor ) == 0
Aviso( cTitulo, "Não existe dados a consultar", {"Ok"} )
Return
Endif

// Monta a tela para usuário visualizar consulta.


DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL

// Primeira opção para montar o listbox.


@ 10,10 LISTBOX oLbx FIELDS HEADER ;
"Banco", "Agencia", "C/C", "Nome Banco", "Fantasia", "Bairro", "Município" ;
SIZE 230,95 OF oDlg PIXEL

oLbx:SetArray( aVetor )
oLbx:bLine := {|| {aVetor[oLbx:nAt,1],;
aVetor[oLbx:nAt,2],;
aVetor[oLbx:nAt,3],;
aVetor[oLbx:nAt,4],;
aVetor[oLbx:nAt,5],;
aVetor[oLbx:nAt,6],;
aVetor[oLbx:nAt,7]}}

- 275 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

// Segunda opção para monta o listbox


/*
oLbx :=
TWBrowse():New(10,10,230,95,,aCabecalho,,oDlg,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
oLbx:SetArray( aVetor )
oLbx:bLine := {|| aEval(aVetor[oLbx:nAt],{|z,w| aVetor[oLbx:nAt,w] } ) }
*/

DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg


ACTIVATE MSDIALOG oDlg CENTER

Return

2 6 .4 . Scr ollBox ( )

O Scr ollBox é o obj et o ut ilizado para perm it ir a um Dialog exibir barras de r olagem vert icais e
Horizont ais. Algum as aplicações com obj et os definem aut om at icam ent e o Scr ollBox, t ais com o:

 Enchoice( ) ou MsMGet ( )
 New Get Dados( )
 List Box( )

Quando é definido um obj et o ScrollBox, os dem ais com ponent es da j anela deverão refer enciar
est e obj et o e não m ais o obj et o Dialog.

Dest a form a o Scr ollBox é at ribuído a um obj et o Dialog, e os com ponent es ao Scr ollBox.

 MsDialog( )  Scr ollBox( )


 Scr ollBox( )  Com ponent es Visuais

 Sin t a x e :

@ nLin h a ,n Colu n a SCROLLBOX oScr ollBox H ORI ZON TAL VERTI CAL SI ZE
n La r gu r a ,n Alt u r a OF oObj e t oRe f BORD ER

 Pa r â m e t r os:

n Lin h a ,n Colu n a Posição do obj et o ScrollBox em função da


j anela em que ele será definido.
oScr ollBox Obj et o ScrollBox que será criado.
H ORI ZON TAL Parâm et r o que quando definido habilit a a
régua de rolagem horizont al.
VERTI CAL Parâm et r o que quando definido habilit a a
régua de rolagem v ert ical.
n La r gu r a ,n Alt u r a Dim ensões do obj et o ScrollBox.
oObj e t oRe f Obj et o dialog no qual o com ponent e será
definido.
BORD ER Parâm et r o que quando definido habilit a a
exibição de um a borda de delim it ação do
Scr ollBox em r elação a out ros obj et os.

- 276 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo: Ut iliz a çã o d e m ú lt iplos Scr ollBox e s

#INCLUDE "PROTHEUS.CH"

/*/
+------------------------------------------------------------------------
| Função | SCROLL() | Autor | ROBSON LUIZ |Data | |
+------------------------------------------------------------------------
| Descrição | Programa que demonstra como montar uma enchoice apenas |
| | com variáveis, incluindo o recurso de rolagem. |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/

USER FUNCTION Scroll()

LOCAL oDlg := NIL


LOCAL oScroll := NIL
LOCAL oLbx1 := NIL
LOCAL oLbx2 := NIL
LOCAL bGet := NIL
LOCAL oGet := NIL
LOCAL aAIIPM := {}
LOCAL aTitulo := {}
LOCAL nTop := 5
LOCAL nWidth := 0
LOCAL cGet := ""
LOCAL cPict := ""
LOCAL cVar := ""
LOCAL n := 0

- 277 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

PRIVATE cTitulo := "Consulta Parcelamento"


PRIVATE aSay := {}
PRIVATE cProcesso,cPrefixo,cTipo,cCliente,cLoja,cNome,cCGC
PRIVATE dData,nTotal,nUFESP,cStatus,cCond

cProcesso := "P00001"
cPrefixo := "UNI"
cTipo := "MAN"
cCliente := "000001"
cLoja := "01"
cNome := "JOSE DA SILVA SANTOS SOARES"
cCGC := "00.000.000/0001-91"
dData := "26/03/03"
nTotal := 5922.00
nUFESP := 1000.00
cStatus := "Z"
cCond := "001"

// Vetor para os campos no Scrooll Box


//+-------------------------------------+
//| aSay[n][1] - Titulo |
//| aSay[n][2] - Tipo |
//| aSay[n][3] - Tamanho |
//| aSay[n][4] - Decimal |
//| aSay[n][5] - Conteúdo/Variável |
//| aSay[n][6] - Formato |
//+-------------------------------------+
AADD(aSay,{"Processo" ,"C",06,0,"cProcesso" ,"@!"})
AADD(aSay,{"Prefixo" ,"C",03,0,"cPrefixo" ,"@!"})
AADD(aSay,{"Tipo" ,"C",03,0,"cTipo" ,"@!"})
AADD(aSay,{"Cliente" ,"C",06,0,"cCliente" ,"@!"})
AADD(aSay,{"Loja" ,"C",02,0,"cLoja" ,"@!"})
AADD(aSay,{"Nome" ,"C",30,0,"cNome" ,"@!"})
AADD(aSay,{"CNPJ/CPF" ,"C",14,0,"cCGC" ,"@!"})
AADD(aSay,{"Dt.Processo" ,"D",08,0,"dData" ,"@!"})
AADD(aSay,{"Total R$" ,"N",17,2,"nTotal" ,"@!"})
AADD(aSay,{"Total UFESP" ,"N",17,2,"nUFESP" ,"@!"})
AADD(aSay,{"Status" ,"C",01,0,"cStatus" ,"@!"})
AADD(aSay,{"Cond.Pagto" ,"C",03,0,"cCond" ,"@!"})

// Vetor para List Box


AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})

// Vetor para List Box


AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})

DEFINE MSDIALOG oDlg TITLE cTitulo FROM 122,0 TO 432,600 OF oDlg PIXEL
@ 013,002 TO 154,192 LABEL "Parcelamento" OF oDlg PIXEL
@ 013,195 TO 082,298 LABEL "Títulos" OF oDlg PIXEL
@ 083,195 TO 154,298 LABEL "AIIPM" OF oDlg PIXEL

//scrollbox
@ 019,006 SCROLLBOX oScroll HORIZONTAL VERTICAL SIZE 131,182 OF oDlg BORDER
For n:=1 TO Len(aSay)

- 278 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

bGet := &("{|| '"+aSay[n][1]+"'}")


cVar := aSay[n][5]
cGet := "{|u| IIF(PCount()>0,"+cVar+":=u,"+cVar+")}"
cPict := aSay[n][6]

TSay():New(nTop,5,bGet,oScroll,,,.F.,.F.,.F.,.T.,,,;
GetTextWidth(0,Trim(aSay[n][1])),15,;
.F.,.F.,.F.,.F.,.F.)
oGet:=TGet():New(nTop-2,40,&cGet,oScroll,,7,cPict,,,,,.F.,,.T.,;
,.F.,,.F.,.F.,,.T.,.F.,,(cVar),,,,.T.)
nTop+=11
Next n

//listbox títulos
@ 019,199 LISTBOX oLbx1 FIELDS HEADER ;
"Parcela","Vencto","Vencto.Real","Valor R$","Qtd.UFESP";
COLSIZES 21,24,33,63,100;
SIZE 095,059 OF oDlg PIXEL
oLbx1:SetArray( aTitulo )
oLbx1:bLine := {||{aTitulo[oLbx1:nAt,1],aTitulo[oLbx1:nAt,2],;
aTitulo[oLbx1:nAt,3],aTitulo[oLbx1:nAt,4],aTitulo[oLbx1:nAt,5]}}

//listbox aiipm
@ 089,199 LISTBOX oLbx2 FIELDS HEADER "AIIPM","Placa","Data Multa" ;
COLSIZES 24,21,30 SIZE 095,061 OF oDlg PIXEL
oLbx2:SetArray( aAIIPM )
oLbx2:bLine :=
{||{aAIIPM[oLbx2:nAt,1],aAIIPM[oLbx2:nAt,2],aAIIPM[oLbx2:nAt,3]}}

ACTIVATE MSDIALOG oDlg CENTER ON INIT


EnchoiceBar(oDlg,{||oDlg:End()},{||oDlg:End()})

RETURN

- 279 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 6 .5 . Pa r a m Box ( )

I m plem ent a um a t ela de parâm et r os, que não necessit a da criação de um grupo de pergunt as
no SX1, e com funcionalidades que a Pergunt e( ) não disponibiliza, t ais com o Check Box e
RadioBut t ons.

Cada com ponent e da Param Box será associado a um parâm et r o Privat e denom inado
MV_PARxx, de acordo com a ordem do com ponent e na t ela. Os par âm et r os da Param Box
podem ser ut ilizados de form a independent e em um a r ot ina específica, ou com plem ent ando
opções de um a r ot ina padrão.

Cu id a d os

 A PARAMBOX define os parâm et ros seguindo o princípio das variáveis MV_PARxx. Caso
ela sej a ut ilizada em um a rot ina em conj unt o com parâm et ros padrões ( SX1 +
Pergunt e( ) ) é necessário salvar os parâm et r os padrões, cham ar a Param box( ) , salvar o
ret orno da Param box( ) em variáveis Privat e específicas ( MVPARBOXxx) e depois
rest aurar os parâm et ros padrões, conform e o ex em plo dest a docum ent ação.

 O obj et o COMBO( ) da PARAMBOX( ) possui um problem a em seu r et orno: Caso o com bo


não sej a selecionado, ele m ant erá seu cont eúdo com o num érico, caso sej a ele receberá
o t ext o da opção e não o núm ero da opção. O exem plo dest a docum ent ação ilust ra o
t rat am ent o de código necessário par a pr ot eger a aplicação.

 Ao ut ilizar a Param Box em um a função que t am bém ut ilize parâm et ros definidos pela
função Pergunt e( ) dev e- se:

 Salvar e rest aurar os MV_PARs da Pergunt e( )


 Definir variáveis Privat e próprias para a Par am Box, as quais irão arm azenar o
cont eúdo das MV_PARs que est a r et orna.

 Sin t a x e : Pa r a m Box ( a Pa r a m Box , cTit u lo, a Re t , bOk , a Bu t t on s, lCe n t e r e d,;


n Posx , n Posy, oM a in D lg, cLoa d, lCa n Sa v e , lUse r Sa ve )

 Re t or n o: lOK  in d ica se a t e la de p a r â m e t r os foi ca nce la da ou con fir m a da

 Pa r â m e t r os:

a Pa r a m Box Array de parâm et r os de acordo com a r egra da Param Box


cTit u lo Tit ulo da j anela de parâm et r os
Array que será passado por r efer encia e ret ornado com o
a Re t
cont eúdo de cada parâm et r o
bOk Bloco de código para validação do OK da t ela de parâm et r os
Array cont endo a r egra para adição de novos bot ões ( além do
a Bu t t on s
OK e Cancelar) / / AADD( aBut t ons,{ nType,bAct ion,cText o} )
Se a t ela será exibida cent ralizada, quando a m esm a não
lCe n t e r e d
est iver vinculada a out ra j anela
n Posx Posição inicial - > linha ( Linha final: nPosX+ 274)
n Posy Posição inicial - > coluna ( Coluna final: nPosY+ 445)
oM a in D lg Caso o Param Box deva ser vinculado a um a out ra t ela
Nom e do arquivo aonde as respost as do usuário serão salvas /
cLoa d
lidas
lCa n Sa ve Se as r espost as para as pergunt as podem ser salvas
lUse r Sa v e Se o usuário pode salvar sua própria configuração.

- 280 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

 Re gr a s do a r r a y a Pa r a m Box :

[ 1 ] Tipo do pa r â m e t r o: Para cada t ipo de parâm et r o as dem ais posições do array variam de
cont eúdo conform e abaixo:

1 - M sGe t
[ 2] : Descrição
[ 3] : St ring cont endo o inicializador do cam po
[ 4] : St ring cont endo a Pict ure do cam po
[ 5] : St ring cont endo a validação
[ 6] : Consult a F3
[ 7] : St ring cont endo a validação When
[ 8] : Tam anho do MsGet
[ 9] : Flag .T./ .F. Parâm et r o Obrigat ório ?

2 - Com bo
[ 2] : Descrição
[ 3] : Num érico cont endo a opção inicial do com bo
[ 4] : Array cont endo as opções do Com bo
[ 5] : Tam anho do Com bo
[ 6] : Validação
[ 7] : Flag .T./ .F. Parâm et r o Obrigat ório ?

- 281 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 - Ra d io
[ 2] : Descrição
[ 3] : Num érico cont endo a opção inicial do Radio
[ 4] : Array cont endo as opções do Radio
[ 5] : Tam anho do Radio
[ 6] : Validação
[ 7] : Flag .T./ .F. Parâm et r o Obrigat ório ?

4 - Ch e ck Box ( Com Sa y )
[ 2] : Descrição
[ 3] : I ndicador Lógico cont endo o inicial do Check
[ 4] : Text o do CheckBox
[ 5] : Tam anho do Radio
[ 6] : Validação
[ 7] : Flag .T./ .F. Parâm et r o Obrigat ório ?

5 - Ch e ck Box ( lin h a in t e ir a )
[ 2] : Descrição
[ 3] : I ndicador Lógico cont endo o inicial do Check
[ 4] : Tam anho do Radio
[ 5] : Validação
[ 6] : Flag .T./ .F. Parâm et r o Obrigat ório ?

6 - File
[ 2] : Descrição
[ 3] : St ring cont endo o inicializador do cam po
[ 4] : St ring cont endo a Pict ure do cam po
[ 5] : St ring cont endo a validação
[ 6] : St ring cont endo a validação When
[ 7] : Tam anho do MsGet
[ 8] : Flag .T./ .F. Parâm et r o Obrigat ório ?
[ 9] : Text o cont endo os t ipos de arquivo
Ex.: " Arquivos .CSV | * .CSV"
[ 10] : Diret ório inicial do CGETFI LE( )
[ 11] : Parâm et ros do CGETFI LE( )

7 - M on t a ge m de e x p r e ssã o d e f ilt r o
[ 2] : Descrição
[ 3] : Alias da t abela
[ 4] : Filt ro inicial
[ 5] : Opcional - Clausula When Bot ão Edit ar Filt ro

8 - M sGe t Pa ssw or d
[ 2] : Descrição
[ 3] : St ring cont endo o inicializador do cam po
[ 4] : St ring cont endo a Pict ure do cam po
[ 5] : St ring cont endo a validação
[ 6] : Consult a F3
[ 7] : St ring cont endo a validação When
[ 8] : Tam anho do MsGet
[ 9] : Flag .T./ .F. Parâm et r o Obrigat ório ?

- 282 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


9 - M sGe t Sa y
[ 2] : St ring Cont endo o Text o a ser apr esent ado
[ 3] : Tam anho da St ring
[ 4] : Alt ura da St ring
[ 5] : Negrit o ( lógico)

Ex e m plo: Ut iliz a çã o d a Pa r a m Box ( )

#include “protheus.ch”

/*/
+-----------------------------------------------------------------------
| Função | xParamBox | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização da PARAMBOX como |
| | forma alternativa de disponibilizar parâmetros em um |
| | processamento. |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function xParamBox()

Local aRet := {}
Local aParamBox := {}
Local aCombo :=
{"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro
","Outubro","Novembro","Dezembro"}
Local i := 0
Private cCadastro := "xParambox"

AADD(aParamBox,{1,"Produto",Space(15),"","","SB1","",0,.F.})
AADD(aParamBox,{2,"Tipo de cliente",1,aCombo,50,"",.F.})

AADD(aParamBox,{3,"Mostra
deletados",IIF(Set(_SET_DELETED),1,2),{"Sim","Não"},50,"",.F.})

AADD(aParamBox,{4,"Marca todos ?",.F.,"Marque todos se necessário


for.",50,"",.F.})

AADD(aParamBox,{5,"Marca todos ?",.F.,50,"",.F.})

AADD(aParamBox,{6,"Qual arquivo",Space(50),"","","",50,.F.,;
"Arquivo .DBF |*.DBF"})

AADD(aParamBox,{7,"Monte o filtro","SX5","X5_FILIAL==xFilial('SX5')"})
AADD(aParamBox,{8,"Digite a senha",Space(15),"","","","",80,.F.})

If ParamBox(aParamBox,"Teste Parâmetros...",@aRet)
For i:=1 To Len(aRet)
MsgInfo(aRet[i],"Opção escolhida")
Next
Endif

Return

- 283 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Pr ot e g e n d o os p a r â m e t r os M V _ PARs d a Pe r g u n t e ( ) e m u so.

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | XPARBOX() | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrição | Função utilizando a PARAMBOX() e protegendo os MV_PARs |
| | ativos do programa principal. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
Static Function XPARBOX(cPerg)

Local aParamBox := {}
Local cTitulo := "Transferência para Operação"
Local bOk := {|| .T.}
Local aButtons := {}; Local aRet := {}
Local nPosx; Local nPosy; Local nX := 0
Local cLoad := ""
Local lCentered := .T.; Local lCanSave := .F.; Local lUserSave := .F.
Local aParamAtu := Array(4)

// Salva as perguntas padrões antes da chamada da ParamBox


For nX := 1 to Len(aParamAtu)
aParamAtu [nX] := &("Mv_Par"+StrZero(nX,2))
Next nX

AADD(aParamBox,{2,"Atualiza taxa de depreciação?", 2, {"Sim","Não"}, 100,;


"AllwaysTrue()",.T.})

ParamBox(aParamBox, cTitulo, aRet, bOk, aButtons, lCentered, nPosx, nPosy,


/*oMainDlg*/ ,;
cLoad, lCanSave, lUserSave)

IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox)


For nX := 1 to Len(aParamBox)
If aParamBox[nX][1] == 1
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C"
&("MvParBox"+StrZero(nX,2)) := aScan(aParamBox[nX][4],;
{|x| Alltrim(x) == aRet[nX]})
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N"
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
Endif
Next nX
ENDIF

// Restaura as perguntas padrões apos a chamada da ParamBox


For nX := 1 to Len(aParamAtu)
&("Mv_Par"+StrZero(nX,2)) := aParamAtu[nX]
Next nX

Return

- 284 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ÓD ULO 0 5 : I nt r oduçã o a or ie nt a çã o à obj e t os

27. Conce it os de or ie nt a çã o à obj e t os

O t erm o orient ação a obj et os pressupõe um a organização de soft war e em t erm os de coleção
de obj et os discret os incorporando est rut ura e com port am ent o próprios. Est a abordagem de
organização é essencialm ent e diferent e do desenvolvim ent o t radicional de soft war e, onde
est rut uras de dados e r ot inas são desenvolvidas de form a apenas fracam ent e acopladas.

Nest e t ópico serão os conceit os de program ação orient ada a obj et os list ados abaixo. Est a
brev e visão geral do paradigm a perm it irá ent ender m elhor os conceit os associados à
program ação orient ada a obj et os e, em part icular, às const ruções im plem ent adas at rav és da
linguagem ADVPL.

 Obj e t os
 H e r a n ça
 At r ibu t os
 M é t odos
 Cla sse s
 Abst r a çã o
 Ge n e r a liz a çã o
 En ca psu la m e n t o
 Polim or f ism o

2 7 .1 . D e finiçõe s

Obj e t o

Um obj et o é um a ent idade do m undo real que t em um a ident idade. Obj et os podem
represent ar ent idades concr et as ( um arquivo no m eu com put ador, um a biciclet a) ou ent idades
conceit uais ( um a est r at égia de j ogo, um a polít ica de escalonam ent o em um sist em a
operacional) . Cada obj et o t er sua ident idade significa que dois obj et os são dist int os m esm o
que eles apr esent em ex at am ent e as m esm as caract eríst icas.

Em bora obj et os t enham exist ência própria no m undo r eal, em t erm os de linguagem de
program ação um obj et o necessit a um m ecanism o de ident ificação. Est a ident ificação de obj et o
dev e ser única, uniform e e independent e do cont eúdo do obj et o. Est e é um dos m ecanism os
que perm it e a criação de coleções de obj et os, as quais são t am bém obj et os em si.

A est rut ura de um obj et o é r epr esent ada em t er m os de at ribut os. O com port am ent o de um
obj et o é r epr esent ado pelo conj unt o de operações que podem ser ex ecut adas sobr e o obj et o.

- 285 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse

Obj et os com a m esm a est rut ura e o m esm o com port am ent o são agr upados em classes. Um a
classe é um a abst ração que descreve pr opriedades im port ant es para um a aplicação e
sim plesm ent e ignora o r est o.

Cada classe descr ev e um conj unt o ( possivelm ent e infinit o) de obj et os individuais. Cada obj et o
é dit o ser um a inst ância de um a classe. Assim , cada inst ância de um a classe t em seus próprios
valores para cada at ribut o, m as dividem os nom es dos at ribut os e m ét odos com as out ras
inst âncias da classe. I m plicit am ent e, cada obj et o cont ém um a r efer ência para sua pr ópria
classe, em out ras palavras, ele sabe o que ele é.

Figu r a : Represent ação de um a classe de obj et os

Figu r a : Represent ação de um obj et o inst anciado de um a classe

- 286 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Polim or f ism o

Polim orfism o significa que a m esm a operação pode se com port ar de form a difer ent e em
classes difer ent es. Por exem plo, a oper ação m ove quando aplicada a um a j anela de um
sist em a de int erfaces t em um com port am ent o dist int o do que quando aplicada a um a peça de
um j ogo de xadr ez. Um m ét odo é um a im plem ent ação específica de um a oper ação para um a
cert a classe.

Polim orfism o t am bém im plica que um a operação de um a m esm a classe pode ser
im plem ent ada por m ais de um m ét odo. O usuário não pr ecisa saber quant as im plem ent ações
exist em para um a operação, ou explicit ar qual m ét odo dev e ser ut ilizado: a linguagem de
program ação dev e ser capaz de selecionar o m ét odo corr et o a part ir do nom e da operação,
classe do obj et o e ar gum ent os para a oper ação. Dest a for m a, novas classes podem ser
adicionadas sem necessidade de m odificação de código j á exist ent e, pois cada classe apenas
define os seus m ét odos e at ribut os.

No m undo r eal, alguns obj et os e classes podem ser descrit os com o casos especiais, ou
especializações, de out r os obj et os e classes. Por exem plo, a classe de com put adores pessoais
com pr ocessador da linha 80x86 é um a especialização de com put ador es pessoais, que por sua
vez é um a especialização de com put adores. Não é desej áv el que t udo que j á foi descrit o para
com put adores t enha de ser repet ido para com put ador es pessoais ou para com put ador es
pessoais com pr ocessador da linha 80x86.

H e r a n ça

Herança é o m ecanism o do paradigm a de orient ação a obj et os que perm it e com part ilhar
at ribut os e operações ent re classes baseada em um r elacionam ent o hierárquico. Um a classe
pode ser definida de form a genérica e depois refinada sucessivam ent e em t erm os de
subclasses ou classes derivadas. Cada subclasse incorpora, or herda, t odas as pr opriedades de
sua super classe ( ou classe base) e adiciona suas propriedades únicas e part iculares. As
propriedades da classe base não pr ecisam ser r epet idas em cada classe derivada. Est a
capacidade de fat orar as propriedades com uns de diversas classes em um a superclasse pode
reduzir dram at icam ent e a r epet ição de código em um proj et o ou pr ogram a, sendo um a das
principais vant agens da abordagem de orient ação a obj et os.

- 287 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 7 .2 . Conce it os Bá sicos

A abordagem de orient ação a obj et os favor ece a aplicação de diversos conceit os consider ados
fundam ent ais para o desenv olvim ent o de bons program as, t ais com o abst ração e
encapsulam ent o.

Tais conceit os não são exclusivos dest a abordagem , m as são suport ados de form a m elhor no
desenvolvim ent o orient ado a obj et os do que em out ras m et odologias.

Abst r a çã o

Abst ração consist e de focalizar nos aspect os essenciais inerent es a um a ent idade e ignorar
propriedades “ acident ais” . Em t erm os de desenvolvim ent o de sist em as, ist o significa
concent rar- se no que um obj et o é e faz ant es de se decidir com o ele será im plem ent ado. O
uso de abst ração pr eserva a liberdade par a t om ar decisões de desenvolvim ent o ou de
im plem ent ação apenas quando há um m elhor ent endim ent o do pr oblem a a ser r esolvido.

Muit as linguagens de program ação m odernas suport am o conceit o de abst ração de dados;
por ém , o uso de abst r ação j unt am ent e com polim orfism o e herança, com o suport ado em
orient ação a obj et os, é um m ecanism o m uit o m ais poder oso.

O uso apr opriado de abst ração perm it e que um m esm o m odelo conceit ual ( orient ação a
obj et os) sej a ut ilizado para t odas as fases de desenv olvim ent o de um sist em a, desde sua
análise at é sua docum ent ação.

En ca psu la m e n t o

Encapsulam ent o, t am bém r eferido com o esconder inform ação, consist e em separar os
aspect os ext ernos de um obj et o, os quais são acessíveis a out ros obj et os, dos det alhes
int ernos de im plem ent ação do obj et o, os quais perm anecem escondidos dos out r os obj et os. O
uso de encapsulam ent o evit a que um pr ogr am a t orne- se t ão int erdependent e que um a
pequena m udança t enha grandes efeit os colat erais.

O uso de encapsulam ent o perm it e que a im plem ent ação de um obj et o possa ser m odificada
sem afet ar as aplicações que usam est e obj et o. Mot ivos para m odificar a im plem ent ação de
um obj et o podem ser , por exem plo, m elhoria de desem penho, corr eção de er ros e m udança de
plat aform a de ex ecução.

Assim com o abst ração, o conceit o de Encapsulam ent o não é exclusivo da abordagem de
orient ação a obj et os. Ent ret ant o, a habilidade de se com binar est rut ura de dados e
com port am ent o em um a única ent idade t or na a Encapsulam ent o m ais elegant e e m ais
poderosa do que em linguagens convencionais que separam est rut uras de dados e
com port am ent o.

Com p a r t ilh a m e n t o

Técnicas de orient ação a obj et os pr om ovem com part ilham ent o em diversos níveis dist int os.
Herança de est rut ura de dados e com port am ent o perm it e que est rut uras com uns sej am
com part ilhadas ent re diversas classes derivadas sim ilares sem r edundância. O
com part ilham ent o de código usando herança é um a das grandes vant agens da orient ação a
obj et os. Ainda m ais im port ant e que a econom ia de código é a clareza conceit ual de reconhecer
que operações difer ent es são na v erdade a m esm a coisa, o que reduz o núm ero de casos
dist int os que dev em ser ent endidos e analisados.

- 288 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


O desenv olvim ent o orient ado a obj et os não apenas perm it e que a inform ação dent r o de um
proj et o sej a com part ilhada com o t am bém ofer ece a possibilidade de reaproveit ar pr oj et os e
código em proj et os fut uros. As ferram ent as para alcançar est e com part ilham ent o, t ais com o
abst ração, Encapsulam ent o e herança, est ão present es na m et odologia; um a est rat égia de
reuso ent re pr oj et os é a definição de bibliot ecas de elem ent os reusáveis. Ent r et ant o,
orient ação a obj et os não é um a fórm ula m ágica para alcançar reusabilidade; para t ant o, é
preciso planej am ent o e disciplina para pensar em t erm os genéricos, não v olt ados
sim plesm ent e para a aplicação cor rent e.

2 7 .3 . O M ode lo de Obj e t os ( OM T)

Um m odelo de obj et os busca capt urar a est r ut ura est át ica de um sist em a m ost rando os
obj et os exist ent es, seus r elacionam ent os, e at ribut os e operações que caract erizam cada
classe de obj et os. É at ravés do uso dest e m odelo que se enfat iza o desenvolvim ent o em
t erm os de obj et os ao invés de m ecanism os t radicionais de desenvolvim ent o baseado em
funcionalidades, perm it indo um a r epr esent ação m ais próxim a do m undo r eal.

Um a v ez que as principais definições e conceit os da abordagem de orient ação a obj et os est ão


definidos, é possível int roduzir o m odelo de obj et os que será adot ado ao longo dest e t ext o. O
m odelo apr esent ado é um subconj unt o do m odelo OMT ( Obj ect Modeling Technique) , propost o
por Rum baugh ent r e out ros. Est e m odelo t am bém int roduz um a repr esent ação diagram át ica
para est e m odelo, a qual será t am bém apresent ada aqui.

2 7 .3 .1 . Obj e t os e Cla sse s

Obj et o é definido nest e m odelo com o um conceit o, abst ração ou coisa com lim it es e
significados bem definidos para a aplicação em quest ão. Obj et os t êm dois propósit os:
prom ov er o ent endim ent o do m undo r eal e suport ar um a base prát ica para um a
im plem ent ação com put acional. Não exist e um a m aneira “ corr et a” de decom por um problem a
em obj et os; est a decom posição depende do j ulgam ent o do proj et ist a e da nat ureza do
problem a. Todos os obj et os t êm ident idade própria e são dist inguíveis.

Um a classe de obj et os descr ev e um grupo de obj et os com propriedades ( at ribut os) sim ilares,
com port am ent os ( oper ações) sim ilares, relacionam ent os com uns com out ros obj et os e um a
sem ânt ica com um . Por ex em plo, Pessoa e Com panhia são classes de obj et os. Cada pessoa
t em um nom e e um a idade; est es seriam os at ribut os com uns da classe. Com panhias t am bém
podem t er os m esm os at ribut os nom e e idade definidos. Ent ret ant o, devido à dist inção
sem ânt ica elas prov avelm ent e est ariam agrupados em out ra classe que não Pessoa. Com o se
pode obser var , o agrupam ent o em classes não leva em cont a apenas o com part ilham ent o de
propriedades.

Todo obj et o sabe a que classe ele pert ence, ou sej a, a classe de um obj et o é um at ribut o
im plícit o do obj et o. Est e conceit o é suport ado na m aior part e das linguagens de program ação
orient ada a obj et os, inclusive em ADVPL.

OMT define dois t ipos de diagram as de obj et os, diagram as de classes e diagram as de
inst âncias. Um diagram a de classe é um esquem a, ou sej a, um padrão ou gabarit o que
descr ev e as m uit as possíveis inst âncias de dados. Um diagram a de inst âncias descr ev e com o
um conj unt o part icular de obj et os est á r elacionado. Diagram as de inst âncias são út eis para
apresent ar exem plos e docum ent ar casos de t est es; diagram as de classes t êm uso m ais
am plos. A Figura abaixo apresent a a not ação adot ada para est es diagram as.

- 289 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Figu r a : Represent ação diagram át ica de OMT para classes e obj et os

O agrupam ent o de obj et os em classes é um poder oso m ecanism o de abst ração. Dest a form a,
é possível generalizar definições com uns para um a classe de obj et os, ao invés de repet í- las
para cada obj et o em part icular. Est a é um a das form as de r eut ilização e econom ia que a
abordagem de orient ação a obj et os suport a.

2 7 .3 .2 . At r ibut os

Um at ribut o é um valor de dado assum ido pelos obj et os de um a classe. Nom e, idade e peso
são ex em plos de at ribut os de obj et os Pessoa. Cor , peso e m odelo são possíveis at ribut os de
obj et os Car ro. Cada at ribut o t em um valor para cada inst ância de obj et o. Por ex em plo, o
at ribut o idade t em valor ` ` 29'' no obj et o Pedro Y. Em out ras palavras, Pedr o Y t em 29 anos de
idade. Diferent es inst âncias de obj et os podem t er o m esm o valor para um dado at ribut o.
Cada nom e de at ribut o é único para um a dada classe, m as não necessariam ent e único ent r e
t odas as classes. Por exem plo, am bos Pessoa e Com panhia podem t er um at ribut o cham ado
endereço.

No diagram a de classes, at ribut os são list ados no segundo segm ent o da caixa que r epr esent a
a classe. O nom e do at ribut o pode ser seguido por det alhes opcionais, t ais com o o t ipo de
dado assum ido e valor default . A Figura abaixo m ost ra est a r epr esent ação.

Figu r a : Represent ação diagram át ica de OMT para classes e obj et os com at ribut os

Não se dev e confundir ident ificadores int ernos de obj et os com at ribut os do m undo r eal.
I dent ificadores de obj et os são um a conv eniência de im plem ent ação, e não t êm nenhum
significado para o dom ínio da aplicação. Por exem plo, CI C e RG não são ident ificador es de
obj et os, m as sim verdadeiros at ribut os do m undo r eal.

- 290 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 7 .3 .3 . Ope r a çõe s e M é t odos

Um a operação é um a função ou t ransform ação que pode ser aplicada a ou por obj et os em um a
classe. Por exem plo, abrir, salvar e im prim ir são operações que podem ser aplicadas a obj et os
da classe Arquivo. Todos os obj et os em um a classe com part ilham as m esm as operações.

Toda operação t em um obj et o- alvo com o um argum ent o im plícit o. O com port am ent o de um a
operação depende da classe de seu alvo. Com o um obj et o “ sabe” qual sua classe, é possível
escolher a im plem ent ação corr et a da operação. Além dist o, out ros ar gum ent os ( parâm et ros)
podem ser necessários para um a operação.

Um a m esm a operação pode se aplicar a diver sas classes difer ent es. Um a operação com o est a
é dit a ser polim órfica, ou sej a, ela pode assum ir dist int as form as em classes diferent es.

Um m ét odo é a im plem ent ação de um a operação para um a classe. Por ex em plo, a operação
im prim ir pode ser im plem ent ada de form a dist int a, dependendo se o arquivo a ser im presso
cont ém apenas t ext o ASCI I , é um arquivo de um processador de t ext o ou binário. Todos est es
m ét odos ex ecut am a m esm a operação: im prim ir o arquivo; por ém , cada m ét odo será
im plem ent ado por um diferent e código.

A assinat ura de um m ét odo é dada pelo núm er o e t ipos de argum ent os do m ét odo, assim
com o por seu valor de ret orno. Um a est rat égia de desenvolvim ent o recom endáv el é m ant er
assinat uras coerent es para m ét odos im plem ent ando um a dada operação, assim com o um
com port am ent o consist ent e ent r e as im plem ent ações.

Em t erm os de diagram as OMT, operações são list adas na t er ceira part e da caixa de um a
classe. Cada nom e de operação pode ser seguida por det alhes opcionais, t ais com o list a de
argum ent os e t ipo de r et orno. A list a de argum ent os é apr esent ada ent re par ênt eses após o
nom e da operação. Um a list a de argum ent os vazia indica que a operação não t em
argum ent os; da ausência da list a de argum ent os não se pode concluir nada. O t ipo de
result ado vem após a list a de argum ent os, sendo precedido por dois pont os ( : ) . Caso a
operação r et orne r esult ado, est e não dev e ser om it ido, pois est a é a for m a de dist ingui- la de
operações que não ret ornam r esult ado. Ex em plos de r epr esent ação de operações em OMT são
apresent ados na Figura abaixo:

Figu r a : Represent ação diagram át ica de OMT para classes com at ribut os e operações

- 291 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 7 .3 .4 . Suge st õe s de de se nvolvim e nt o

Na const rução de um m odelo para um a aplicação, as seguint es sugest ões dev em ser
observ adas a fim de se obt er r esult ados claros e consist ent es:

 Não com ece a const r uir um m odelo de obj et os sim plesm ent e definindo classes,
associações e heranças. A prim eira coisa a se fazer é ent ender o problem a a ser
resolvido.
 Tent e m ant er seu m odelo sim ples. Evit e com plicações desnecessárias.
 Escolha nom es cuidadosam ent e. Nom es são im port ant es e carr egam conot ações
poderosas. Nom es dev em ser descrit ivos, claros e não deixar am bigüidades. A escolha
de bons nom es é um dos aspect os m ais difíceis da m odelagem .
 Não “ ent er re” apont ador es ou out ras r efer ências a obj et os dent ro de obj et os com o
at ribut os. Ao invés dist o, m odele est as refer ências com o associações. I st o t orna o
m odelo m ais claro e independent e da im plem ent ação.
 Tent e evit ar associações que env olvam t rês ou m ais classes de obj et os. Muit as vezes,
est es t ipos de associações podem ser decom post os em t erm os de associações binárias,
t ornando o m odelo m ais claro.
 Não t ransfira os at ribut os de ligação para dent r o de um a das classes.
 Tent e evit ar hierarquias de generalização m uit o profundas.
 Não se surpr eenda se o seu m odelo necessit ar v árias revisões; ist o é o norm al.
 Sem pr e docum ent e seus m odelos de obj et os. O diagram a pode especificar a est rut ur a
do m odelo, m as nem sem pre é suficient e para descr ev er as razões por t rás da definição
do m odelo. Um a explicação escrit a pode clarificar pont os t ais com o significado de
nom es e explicar a razão para cada classe e r elacionam ent o.
 Nem sem pr e t odas as const ruções OMT são necessárias para descrever um a aplicação.
Use apenas aquelas que forem adequadas para o pr oblem a analisado.

- 292 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


28. Or ie nt a çã o a obj e t os e m AD VPL

Nest e t ópico será det alhada a form a com a qual a linguagem ADVPL im plem ent a os conceit os
de orient ação a obj et os e a sint axe ut ilizada no desenvolvim ent o de aplicações.

2 8 .1 . Sint a x e e ope r a dor e s pa r a or ie nt a çã o a obj e t os

Pa la vr a s r e se r v a da s

 CLASS
 CON STRUCTOR
 D ATA
 EN D CLASS
 FROM
 M ETH OD
 SELF

CLASS

Ut ilizada na declaração de um a classe de obj et os, e para ident ificar a qual


D e scr içã o
classe um det erm inado m ét odo est á relacionado.
Sin t a x e 1 CLASS < nom e_da_classe>

Sin t a x e 2 METHOD < nom e_do_m ét odo> CLASS < nom e_da_classe>

CON STRUCTOR

Ut ilizada na especificação de um m ét odo especial, definido com o const r ut or,


D e scr içã o o qual t em a função de ret ornar um novo obj et o com os at ribut os e m ét odos
definidos na classe.
Sin t a x e METHOD < nom e_do_m ét odo( ) > CONSTRUCTOR

D ATA

D e scr içã o Ut ilizada na declaração de um at ribut o da classe de obj et os.

Sin t a x e DATA < nom e_do_at ribut o>

EN D CLASS

D e scr içã o Ut ilizada na finalização da declaração da classe.

Sin t a x e ENDCLASS

- 293 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


FROM

Ut ilizada na declaração de um a classe, a qual será um a inst ância de um a


D e scr içã o super classe, r ecebendo os at ribut os e m ét odos nela definidos,
im plem ent ando a herança ent re classes.
Sin t a x e CLASS < nom e_da_classe> FROM < nom e_da_superclasse>

M ETH OD

Ut ilizada na declaração do pr ot ót ipo do m ét odo de um a classe de obj et os, e


D e scr içã o
na declaração do m ét odo efet ivam ent e desenv olvido.
Sin t a x e 1 METHOD < nom e_do_m ét odo( ) >

Sin t a x e 2 METHOD < nom e_do_m ét odo( < parâm et r os> ) > CLASS < nom e_da_classe>

SELF

Ut ilizada principalm ent e pelo m ét odo const rut or para ret ornar o obj et o
D e scr içã o
criado para a aplicação.
Sin t a x e Ret urn SELF

Ope r a dor e s e spe cíficos

Ut ilizado para referenciar um m ét odo ou um at ribut o de um obj et o j á


:
inst anciado.
Ex e m plo 1 cNom e : = oAluno:sN om e

Ex e m plo 2 cNot a : = oAluno:Ge t N ot a ( cCu r so)

Ut ilizado pelos m ét odos de um a classe para r efer enciar os at ribut os


::
disponíveis para o obj et o.

METHOD Get Not a( cCurso) CLASS ALUNO

Local nPosCur so : = 0
Local nNot a : = 0

nPosCur so : = aScan( ::a Cu r sos,{ | aCurso| aCur so[ 1] = = cCurso} )


Ex e m plo
I F nPosCurso > 0

nNot a : = ::a Cu r sos[ nPosCur so] [ 2]

ENDI F

Ret urn nNot a

- 294 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 8 .2 . Est r ut ur a de um a cla sse de obj e t os e m AD VPL

D e cla r a çã o d a cla sse

A declaração de um a classe da linguagem ADVPL é realizada de form a sim ilar a declaração de


um a função, com a diferença de que um a classe não possui difer enciação quant o a sua
procedência, com o um a Funct ion( ) e um a User Funct ion( ) , e não possui visibilidade lim it ada
com o um a St at ic Funct ion( ) .

Exemplo:

#include “protheus.ch”
CLASS Pessoa()

D e fin içã o dos a t r ibu t os

Seguindo o m esm o princípio de variáveis não t ipadas, os at ribut os das classes em ADVPL não
precisam t er seu t ipo especificado, sendo necessário apenas det erm inar seus nom es.

Dest a form a é recom endado o uso da not ação Húngara t am bém para a definição dos at ribut os
de form a a facilit ar a análise, int erpret ação e ut ilização da classe e seus obj et os inst anciados.

Exemplo:

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade

Pr ot ot ipa çã o dos m é t odos

A prot ot ipação dos m ét odos é um a r egra ut ilizada pelas linguagens orient adas a obj et os,
at ravés da qual são especificadas as operações que podem ser realizadas pelo obj et o,
diferenciando os m ét odos de out ras funções int ernas de uso da classe, e para especificar quais
são os m ét odos const rut or es.

Em linguagens t ipadas, na prot ot ipação dos m ét odos é necessário definir quais são os
parâm et ros r ecebidos e seus r espect ivos t ipos, além de definir o t ipo do ret orno que ser á
fornecido. Em ADVPL é necessário apenas descrever a cham ada do m ét odo e caso necessário
se o m esm o é um const rut or .

- 295 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo:

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR


METHOD SetNome()
METHOD SetIdade()

ENDCLASS

2 8 .3 . I m ple m e nt a çã o dos m é t odos de um a cla sse e m AD VPL

M é t odo Con st r u t or

O m ét odo const rut or possui a caract eríst ica de ret ornar um obj et o com o t ipo da classe da qual
o m esm o foi inst anciado. Por est a razão diz- se que o t ipo do obj et o inst anciado é a classe
daquele obj et o.

Para produzir est e efeit o, o m ét odo const rut or ut iliza a palavra r eservada “ SELF” , a qual é
ut ilizada pela linguagem ADVPL para r efer ência a própria classe daquele obj et o.

Exemplo:

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR


METHOD SetNome()
METHOD SetIdade()

ENDCLASS

METHOD Create(cNome, nIdade) CLASS Pessoa

::cNome := cNome
::nIdade := nIdade

Return SELF

- 296 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M a n ipu la çã o de a t r ib u t os

Os at ribut os definidos para um a classe com a ut ilização da palavra r eservada “ DATA” em sua
declaração podem ser m anipulados por seus m ét odos ut ilizando o operador “ : : ” .

A ut ilização dest e operador perm it e ao int erpret ador ADVPL diferenciar variáveis com uns
criadas pelas funções e m ét odos que ut ilizam est e obj et o dos at ribut os propriam ent e dit os.

Exemplo:

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR


METHOD SetNome()
METHOD SetIdade()
ENDCLASS

METHOD Create(cNome, nIdade) CLASS Pessoa

::cNome := cNome
::nIdade := nIdade

Return SELF

Ut iliz a çã o d e f u n çõe s e m u m a cla sse de ob j e t os

Conform e m encionado ant eriorm ent e, a ut ilização da palavra reservada “ METHOD” perm it e ao
int erpr et ador ADVPL difer enciar os m ét odos que podem ser ut ilizados at ravés da referência do
obj et o de funções int ernas descrit as int ernam ent e na classe.

I st o perm it e a ut ilização de funções t radicionais da linguagem ADVPL, com o as St at ic


Funct ions( ) as quais serão visíveis apenas a classe, e não poderão ser r efer enciadas
diret am ent e pelo obj et o.

Exemplo – parte 01: Função CadPessoa (usuária da classe Pessoa)

#include “protheus.ch”

USER FUNCTION CadPessoa()

Local oPessoa
Local cNome := “”
Local dNascimento:= CTOD(“”)
Local aDados := {}

aDados := GetDados()
oPessoa := Pessoa():Create(cNome,dNascimento)

Return

- 297 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo – parte 02: Classe Pessoa

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade
DATA dNascimento

METHOD Create() CONSTRUCTOR


METHOD SetNome()
METHOD SetIdade()

ENDCLASS

METHOD Create(cNome, dNascimento) CLASS Pessoa


::cNome := cNome
::dNascimento := dNascimento
::nIdade := CalcIdade(dNascimento)
Return SELF

STATIC FUNCTION CalcIdade(dNascimento)


Local nIdade
nIdade := dDataBase - dNascimento
RETURN nIdade

H e r a n ça e n t r e cla sse s

Seguindo o principio da orient ação a obj et os, a linguagem ADVPL perm it e que um a classe
receba por herança os m ét odos e at ribut os definidos em um a out ra classe, a qual t ornasse a
super classe dest a inst ância.

Para ut ilizar est e r ecur so deve ser ut ilizada a palavra reservada “ FROM” na declaração da
classe, especificando a super classe que será refer enciada.

Em ADVPL o exem plo prát ico dest a sit uação é a superclasse TSr vObj ect , a qual é ut ilizada pela
m aioria das classes e com ponent es da int erface visual, com o dem onst rado no m ódulo 06.

Exemplo – parte 01: Declaração da classe Pessoa

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade
DATA dNascimento

METHOD Create() CONSTRUCTOR


METHOD SetNome()
METHOD SetIdade()

ENDCLASS

- 298 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo – parte 02: Declaração da classe Aluno

#include “protheus.ch”
CLASS Aluno() FROM Pessoa

DATA nID
DATA aCursos

METHOD Create() CONSTRUCTOR


METHOD Inscrever()
METHOD Avaliar()
METHOD GetNota()
METHOD GetStatus()

ENDCLASS

// Os objetos da classe Aluno, possuem todos os métodos e atributos da classe


Pessoa, além
// dos métodos e atributos declarados na própria classe.

Con st r u t or p a r a cla sse s com h e r a n ça

Quant o é ut ilizado o r ecurso de herança ent re classes, o const rut or da classe inst anciada deve
receber um t rat am ent o adicional, para que o obj et o inst anciado sej a criado com os at ribut os e
m ét odos definidos na super classe.

Nest es casos, logo após a definição do m ét odo const rut or da classe, deverá ser execut ado o
m ét odo const rut or da superclasse.

Exemplo – parte 03: Método Construtor da classe Aluno

METHOD Create(cNome,dNascimento,nID)
:Create(cNome,dNascimento) // Chamada do método construtor da classe Pessoa.

::nID := ID

Return SELF

- 299 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ÓD ULO 0 6 : AD VPL Or ie nt a do à obj e t os I
Nest e m ódulo serão t r at ados os com ponent es e obj et os da int erface visual da linguagem
ADVPL, perm it indo o desenvolvim ent o de aplicações com int erfaces gráficas com sint axe
orient ada a obj et os.

29. Com pone nt e s da int e r fa ce visua l do AD VPL

A linguagem ADVPL possui diversos com ponent es visuais e auxiliares, os quais podem ser
represent ados ut ilizando a est rut ura abaixo:

 Cla sse s da I n t e r fa ce Visua l


Tsr vobj ect
 Cla sse s Aux ilia r e s
Tfont

 Cla sse s de Ja n e la s
Msdialog
Tdialog
Twindow

 Cla sse s de Com pon e n t es


Tcont rol
Cla sse s de Com pon e n t es
 Visua is
Br get ddb
Mscalend
Mscalendgr id
Msselbr
Msworkt im e
Sbut t on
Tbar
Tbit m ap
Tbr owsebut t on
Tbt nbm p
Tbt nbm p2
Tbut t on
Tcbr owse
Tcheckbox
Tcolor t riangle
Tcom bobox
Tfolder
Tfont
Tget
Tgroup
Thbut t on
Tibrowser
Tlist box
Tm enu
Tm enubar
Tm et er
Tm sgr aphic
Tm sgbar
Tm ult ibt n
Tm ult iget
Tolecont ainer
Tpageview
Tpanel
Tr adm enu
Tsbr owse
Tsay
Tscr ollbox
Tsim pleedit or
Tslider

- 300 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse s de Com pon e n t es
 Visua is
Tsplit t er
Tt abs
Tt oolbox
Twbrowse
Vcbrowse

Cla sse s d a in t e r f a ce v isu a l

TSRVOBJECT( )

Classe abst rat a inicial de t odas as classes de int erface do ADVPL. Não dev e
D e scr içã o
ser inst anciada diret am ent e.

Cla sse s a u x ilia r e s

TFON T( )

Classe de obj et os que define a font e do t ext o ut ilizado nos cont r oles
D e scr içã o
visuais.

Cla sse s de j a n e la s

M SD I ALOG( )

Classe de obj et os que dev e ser ut ilizada com o padrão de j anela para
ent rada de dados. MSDialog é um t ipo de j anela diálogo m odal, ist o é,
D e scr içã o
não perm it e que out ra j anela at iva receba dados enquant o est a est iver
at iva.

TD I ALOG( )

Classe de obj et os do t ipo diálogo de ent rada de dados, sendo seu uso
D e scr içã o reservado. Recom enda- se ut ilizar a classe MSDialog que é herdada dest a
classe.

TW I N D OW ( )

Classe de obj et os do t ipo diálogo principal de pr ogram a. Dev erá exist ir


D e scr içã o
apenas um a inst ância dest e obj et o na ex ecução do program a.

Cla sse s de com p on e n t e s

TCON TROL( )

Classe abst rat a com um ent re t odos os com ponent es visuais edit áveis.
D e scr içã o
Não dev e ser inst anciada diret am ent e.

- 301 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse s de com p on e n t e s v isu a is

BRGETD D B( )

D e scr içã o Classe de obj et os visuais do t ipo Grid.

M SCALEN D ( )

D e scr içã o Classe de obj et os visuais do t ipo Calendário.

M SCALEN D GRI D ( )

D e scr içã o Classe de obj et os visuais do t ipo Grade de Períodos.

M SSELBR( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - Grid

M SW ORKTI M E( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - Bar r a de Período.

SBUTTON ( )

Classe de obj et os visuais do t ipo bot ão, o qual pode possuir im agens
D e scr içã o
padrões associadas ao seu t ipo.

TBAR( )

D e scr içã o Classe de obj et os visuais do t ipo Barra Superior .

TBI TM AP( )

D e scr içã o Classe de obj et os visuais que per m it e a exibição de um a im agem .

TBROW SEBUTTON ( )

Classe de obj et os visuais do t ipo bot ão no form at o padrão ut ilizado


D e scr içã o
em br ow ses da aplicação.

TBTN BM P( )

Classe de obj et os visuais do t ipo bot ão, o qual perm it e que sej a
D e scr içã o
vinculada um a im agem ao cont r ole.

- 302 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TBTN BM P2 ( )

Classe de obj et os visuais do t ipo bot ão, o qual perm it e a exibição de


D e scr içã o
um a im agem ou de um popup.

TBUTTON ( )

Classe de obj et os visuais do t ipo bot ão, o qual perm it e a ut ilização de


D e scr içã o
t ext o para sua ident ificação.

TCBROW SE( )

D e scr içã o Classe de obj et os visuais do t ipo Grid.

TCH ECKBOX ( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - CheckBox.

TCOLORTRI AN GLE( )

D e scr içã o Classe de obj et os visuais do t ipo Palet a de Cor es.

TCOM BOBOX ( )

Classe de obj et os visuais do t ipo t Com boBox, a qual cria um a ent rada
de dados com m últ ipla escolha com it em definido em um a list a
vert ical, acionada por F4 ou pelo bot ão esquer do localizado na part e
D e scr içã o
direit a do cont role. A v ariável associada ao cont role t erá o valor de
um dos it ens selecionados ou no caso de um a list a indexada, o valor
de seu índice.

TFOLD ER( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - Folder .

TGET( )

Classe de obj et os visuais do t ipo cont r ole – t Get , a qual cria um


cont r ole que arm azena ou alt era o cont eúdo de um a variável at rav és
D e scr içã o
de digit ação. O cont eúdo da v ariável só é m odificado quando o
cont r ole perde o foco de edição para out ro cont r ole.

TGROUP( )

Classe de obj et os visuais do t ipo painel – t Group, a qual cria um


painel onde cont roles visuais podem ser agrupados ou classificados.
D e scr içã o
Nest e painel é criada um a borda com t ít ulo em volt a dos cont roles
agrupados.

- 303 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TH BUTTON ( )

D e scr içã o Classe de obj et os visuais do t ipo bot ão com hiperlink.

TI BROW SER( )

Classe de obj et os visuais do t ipo Página de I nt ernet , sendo necessário


D e scr içã o
incluir a clausula Browser Enabled= 1 no Config do Rem ot e.I NI

TLI STBOX ( )

Classe de obj et os visuais do t ipo cont r ole – t List box, a qual cria um a
D e scr içã o j anela com it ens selecionáveis e barra de r olagem . Ao selecionar um
it em , um a variável é at ualizada com o cont eúdo do it em selecionado.

TM EN U( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - Menu.

TM EN UBAR( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - Bar r a de Menu.

TM ETER( )

Classe de obj et os visuais do t ipo cont r ole – t Met er, a qual exibe um a
D e scr içã o régua ( gauge) de processam ent o, descr ev endo o andam ent o de um
processo at ravés da exibição de um a barra horizont al.

TM SGRAPH I C( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - Gráfico.

TM SGBAR( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - Rodapé.

TM ULTI BTN ( )

D e scr içã o Classe de obj et os visuais do t ipo cont r ole - Múlt iplos bot ões.

TM ULTI GET( )

Classe de obj et os visuais do t ipo cont r ole - edição de t ext o de


D e scr içã o
m últ iplas linhas.

- 304 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TOLECON TAI N ER( )

Classe de obj et os visuais do t ipo cont r ole, a qual perm it e a criação de


D e scr içã o
um bot ão vinculado a um obj et o OLE.

TPAGEVI EW ( )

Classe de obj et os visuais do t ipo cont r ole, que perm it e a visualização


D e scr içã o
de arquivos no form at o gerado pelo spool de im pressão do Prot heus.

TPAN EL( )

Classe de obj et os visuais do t ipo cont r ole – t Panel, a qual perm it e


D e scr içã o criar um painel est át ico, onde podem ser criados out r os cont roles com
o obj et ivo de organizar ou agrupar com ponent es visuais.

TRAD M EN U( )

Classe de obj et os visuais do t ipo cont r ole – TRadMenu, a qual perm it e


D e scr içã o
criar um cont r ole visual no form at o Radio But t on.

TSBROW SE( )

Classe de obj et os visuais do t ipo cont r ole – TSBrow se, a qual perm it e
D e scr içã o
criar um cont r ole visual do t ipo Grid.

TSAY( )

Classe de obj et os visuais do t ipo cont r ole – t Say, a qual exibe o


D e scr içã o cont eúdo de t ext o est át ico sobre um a j anela ou cont r ole pr eviam ent e
definidos.

TSCROLLBOX( )

Classe de obj et os visuais do t ipo cont r ole – t Scr ollbox, a qual perm it e
D e scr içã o criar um painel com scr oll deslizant es nas lat er ais ( horizont ais e
vert icais) do cont r ole.

TSI M PLEED I TOR( )

Classe de obj et os visuais do t ipo cont r ole – t Sim pleEdit or, a qual
D e scr içã o perm it e criar um cont role visual para edição de t ext os com r ecur sos
sim ples, com o o Not ePad®

TSLI D ER( )

Classe de obj et os visuais do t ipo cont r ole – t Slider, a qual perm it e


D e scr içã o
criar um cont r ole visual do t ipo bot ão deslizant e.

TSPLI TTER( )

Classe de obj et os visuais do t ipo cont r ole – t Split t er, a qual perm it e
D e scr içã o
criar um cont r ole visual do t ipo divisor.

- 305 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TTABS( )

Classe de obj et os visuais do t ipo cont r ole – TTabs, a qual perm it e


D e scr içã o
criar um cont r ole visual do t ipo past a.

TTOOLBOX( )

Classe de obj et os visuais do t ipo cont r ole – t Toolbox, a qual perm it e


D e scr içã o
criar um cont r ole visual para agrupar difer ent es obj et os.

TW BROW SE( )

Classe de obj et os visuais do t ipo cont r ole – TWBrow se, a qual perm it e
D e scr içã o
criar um cont r ole visual do t ipo Grid.

VCBROW SE( )
Classe de obj et os visuais do t ipo cont r ole – VCBrow se, a qual perm it e
D e scr içã o
criar um cont r ole visual do t ipo Grid.

D ocum e n t a çã o dos com pon e n t e s d a in t e r f a ce v isu a l

Os com ponent es da int er face visual da linguagem ADVPL ut ilizados nest e t r einam ent o est ão
docum ent ados na seção Guia de Referência, ao final dest e m at erial.

Para visualizar a docum ent ação com plet a de t odos os com ponent es m encionados nest e
capít ulo deve ser acesso o sit e DEM – Docum ent ação Elet r ônica Microsiga
( dem .m icrosiga.com .br) confor m e abaixo:

- 306 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


2 9 .1 . Pa r t icula r ida de s dos com pone nt e s visua is

2 9 .1 .1 . Configur a ndo a s cor e s pa r a os com pone nt e s

Os com ponent es visuais da linguagem ADVPL ut ilizam o padrão de cores RGB.

As cor es dest e padrão são definidas pela seguint e fór m ula, a qual dev e ser avaliada t endo
com o base a palet a de cor es no form at o RGB:

n Cor := n Ve r m e lh o + ( n V e r d e * 2 5 6 ) + ( n Az u l * 6 5 5 3 6 )

Figu r a : Pa le t a d e cor e s n o for m a t o RGB

Com base nest a palet a, podem os definir os valores das seguint es cores básicas:

Cor R G B Va lor
Pret o 0 0 0 0
Azul 0 0 255 16711680
Verde 0 255 0 65280
Ciano 0 255 255 16776960
Verm elho 255 0 0 255
Rosa 255 0 255 16711935
Am arelo 255 255 0 65535
Branco 255 255 255 16777215

- 307 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Para at ribuir as cor es aos obj et os visuais devem ser obser vados os at r ibut os ut ilizados para
est es fins em cada obj et o, com o por ex em plo:

M SD I ALOG( )

n Clr Pa n e Cor de fundo do painel

n Clr Te x t Cor da font e das let ras do painel

TSAY( )

n Clr Pa n e Cor de fundo do painel

n Clr Te x t Cor da font e das let ras do painel

Fu n çã o RGB( )

A linguagem ADVPL possui a função RGB( ) a qual ret orna o valor da cor a ser definido, de
acordo com a param et rização de cada um dos elem ent os da palet a RGB.

RGB( n Re d, n Gr e e n , n Blu e )

n Re d Valor de 0- 255 para o elem ent o v erm elho da palet a RGB

n Gr e e n Valor de 0- 255 para o elem ent o v erde da palet a RGB

n Blu e Valor de 0- 255 para o elem ent o azul da palet a RGB

Re t or n o Valor a ser definido para o at ribut o cor do com ponent e

- 308 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


30. Aplica çõe s com a int e r fa ce visua l do AD VPL

A linguagem ADVPL possui int erfaces visuais pré- definidas que auxiliam no desenv olvim ent o
de aplicações m ais com plet as, com binando est as int erfaces com os com ponent es visuais
dem onst rados ant erior m ent e.

Didat icam ent e as int erfaces visuais pré- definidas da linguagem ADVPL podem ser divididas em
t rês grupos:

 Ca pt u r a d e in f or m a çõe s sim ple s ou M u lt i- Ge t s;


 Ca pt u r a d e m ú lt ip la s in for m a çõe s ou M u lt i- Lin e s;
 Ba r r a s de bot õe s

3 0 .1 . Ca pt ur a de infor m a çõe s sim ple s ( M ult i- Ge t s)

Em ADVPL, as t elas de capt ura de inform ações com post as por m últ iplos cam pos digit áv eis
acom panhados de seus r espect ivos t ext os explicat ivos são com um ent e cham ados de
Enchoices.

Um Enchoice pode ser facilm ent e ent endida com o diversos conj unt os de obj et os TSay e TGet
alinhados de form a a visualizar ou capt urar inform ações, nor m alm ent e vinculadas a arquivos
de cadast r os ou m ovim ent ações sim ples.

Abaixo t em os a visualização de um a Enchoice para o arquivo padr ão do ERP Pr ot heus de


Cadast r o de Client es ( “ SA1” ) :

Figu r a : En ch oice do Ca d a st r o d e Clie n t e s d o ERP Pr ot h e u s

- 309 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A linguagem ADVPL per m it e a im plem ent ação da Enchoice de duas for m as sim ilares:

 Fu n çã o En ch oice : Sint axe t radicionalm ent e ut ilizada em ADVPL, a qual não ret orna
um obj et o para a aplicação cham adora;

 Cla sse M sM Ge t : Classe do obj et o Enchoice, a qual perm it e a inst anciação diret a de um
obj et o, t ornando- o disponível na aplicação cham adora.

A ut ilização de um ou out ro obj et o depende unicam ent e da escolha do desenvolvedor j á que os


parâm et ros para a função Enchoice e para o m ét odo New( ) da classe MsMGet são os m esm os,
lem brando que para m ant er a coerência com um a aplicação escrit a em orient ação a obj et os
dev erá ser ut ilizada a classe MsMGet ( ) .

3 0 .1 .1 . Enchoice ( )

 Sin t a x e : En choice ( cAlia s, n Re g, n Opc, a CRA, cLe t r a , cTe x t o, a Acho, a Pos,


a Cpos, n M od e lo, n ColM e n s, cM e n sa ge m , cTu doOk , oW n d, lF3 ,
lM e m or ia , lColu m n , ca Te la , lN oFolde r , lPr ope r t y )

 Re t or n o: N il
 Pa r â m e t r os:

cAlia s Tabela cadast r ada no Dicionário de Tabelas ( SX2) que será


edit ada
n Re g Parâm et r o não ut ilizado
n Opc Núm er o da linha do aRot ina que definirá o t ipo de edição
( I nclusão, Alt eração, Ex clusão, Visualização)
a CRA Parâm et r o não ut ilizado
cLe t r a Parâm et r o não ut ilizado
cTe x t o Parâm et r o não ut ilizado
a Ach o Vet or com nom e dos cam pos que serão exibidos. Os cam pos
de usuário sem pre serão exibidos se não exist ir no par âm et ro
um elem ent o com a expressão " NOUSER"
a Pos Vet or com coordenadas para criação da enchoice no form at o
{ < t op> , < left > , < bot t om > , < right > }
a Cpos Vet or com nom e dos cam pos que poderão ser edit ados
n M ode lo Se for difer ent e de 1 desabilit a execução de gat ilhos
est r angeiros
n ColM e n s Parâm et r o não ut ilizado
cM e n sa ge m Parâm et r o não ut ilizado
cTu doOk Expressão par a validação da Enchoice
oW n d Obj et o ( j anela, painel, et c.) onde a enchoice ser á criada.
lF3 I ndica se a enchoice est a sendo criada em um a consult a F3
para ut ilizar variáveis de m em ória
lM e m or ia I ndica se a enchoice ut ilizará variáveis de m em ória ou os
cam pos da t abela na edição
lColu m n I ndica se a apresent ação dos cam pos ser á em form a de
coluna
ca Te la Nom e da variável t ipo " privat e" que a enchoice ut ilizará no
lugar da propriedade aTela
lN oFold e r I ndica se a enchoice não irá ut ilizar as Past as de Cadast r o
( SXA)
lPr op e r t y I ndica se a enchoice não ut ilizará as variáveis aTela e aGet s,
som ent e suas propriedades com os m esm os nom es

- 310 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Ut iliz a çã o d a f u n çã o En ch oice ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização da função Enchoice() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwEnch()

Private cCadastro := " Cadastro de Clientes"


Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)

Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias


Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

- 311 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE


If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL


RegToMemory("SA1", If(nOpc==3,.T.,.F.))

Enchoice(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/, /*cTexto*/, ;


aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/,/*cTudoOk*/, oDlg, lF3, lMemoria, lColumn,;
caTela, lNoFolder, lProperty)

ACTIVATE MSDIALOG oDlg CENTERED

Return

3 0 .1 .2 . M sM Ge t ( )

 Sin t a x e : M sM Ge t ( ) :N e w ( cAlia s, n Re g, n Opc, a CRA, cLe t r a , cTe x t o, a Ach o,


a Pos, a Cpos, n M ode lo, n ColM e n s, cM e n sa ge m , cTu doOk , oW n d, lF3 ,
lM e m or ia , lColu m n , ca Te la , lN oFolde r , lPr ope r t y )

 Re t or n o: oM sM Ge t  obj e t o d o t ipo M sM Ge t ( )
 Pa r â m e t r os:

cAlia s Tabela cadast r ada no Dicionário de Tabelas ( SX2) que será


edit ada
n Re g Parâm et r o não ut ilizado
n Opc Núm er o da linha do aRot ina que definirá o t ipo de edição
( I nclusão, Alt eração, Ex clusão, Visualização)
a CRA Parâm et r o não ut ilizado
cLe t r a Parâm et r o não ut ilizado
cTe x t o Parâm et r o não ut ilizado
a Ach o Vet or com nom e dos cam pos que serão exibidos. Os cam pos
de usuário sem pre serão exibidos se não exist ir no par âm et ro
um elem ent o com a expressão " NOUSER"
a Pos Vet or com coordenadas para criação da enchoice no form at o
{ < t op> , < left > , < bot t om > , < right > }
a Cpos Vet or com nom e dos cam pos que poderão ser edit ados
n M ode lo Se for difer ent e de 1 desabilit a execução de gat ilhos
est r angeiros
n ColM e n s Parâm et r o não ut ilizado
cM e n sa ge m Parâm et r o não ut ilizado
cTu doOk Expressão par a validação da Enchoice
oW n d Obj et o ( j anela, painel, et c.) onde a enchoice ser á criada.
lF3 I ndica se a enchoice est a sendo criada em um a consult a F3
para ut ilizar variáveis de m em ória

- 312 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


lM e m or ia I ndica se a enchoice ut ilizará variáveis de m em ória ou os
cam pos da t abela na edição
lColu m n I ndica se a apresent ação dos cam pos ser á em form a de
coluna
ca Te la Nom e da variável t ipo " privat e" que a enchoice ut ilizará no
lugar da propriedade aTela
lN oFold e r I ndica se a enchoice não irá ut ilizar as Past as de Cadast r o
( SXA)
lPr op e r t y I ndica se a enchoice não ut ilizará as variáveis aTela e aGet s,
som ent e suas propriedades com os m esm os nom es

Ex e m plo: Ut iliz a çã o d o ob j e t o M sM Ge t ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MsMget() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwMsGet()

Private cCadastro := " Cadastro de Clientes"


Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)


Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias


Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

- 313 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE


If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

oDlg := MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)

RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/,;


/*cTexto*/, aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/, /*cTudoOk*/,oDlg,lF3,lMemoria,lColumn, caTela,;
lNoFolder, lProperty)

oDlg:lCentered := .T.
oDlg:Activate()

Return

3 0 .2 . Ca pt ur a de m últ ipla s infor m a çõe s ( M ult i- Line s)

A linguagem ADVPL perm it e a ut ilização de basicam ent e dois t ipos de obj et os do t ipo grid, ou
com o t am bém são conhecidos: m ult i- line:

 Gr ids d igit á v e is: per m it em a visualização e capt ura de inform ações, com um ent e
ut ilizados em int erfaces de cadast r o e m anut enção, t ais com o:

 M SGETD B( )
 M SGETD AD OS( )
 M SN EW GETD AD OS( )

 Gr ids n ã o dig it á v e is: perm it em som ent e a visualização de inform ações, com um ent e
ut ilizados com o brow ses do ERP Pr ot heus, t ais com o:

 TW BROW SE( )
 M AW N D BROW SE( )
 M BROW SE( )

Nest e t ópico serão t rat adas as grids digit áveis disponíveis na linguagem ADVPL para o
desenvolvim ent o de int er faces de cadast r os e m anut enção de inform ações.

- 314 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 0 .2 .1 . M sGe t D B( )

A classe de obj et os visuais MsGet DB( ) perm it e a criação de um grid digit ável com um a ou m ais
colunas, baseado em um a t abela t em porária.

 Sin t a x e : M sGe t D B( ) :N e w ( n Top , n Le ft , n Bot t om , n Righ t , n Opc, cLin h a Ok ,


cTu doOk , cI n iCp os, lD e le t e , a Alt e r , n Fr e e z e , lEm pt y, u Pa r 1 , cTRB,
cFie ldOk , lCon d icion a l, lAppe n d, oW n d, lD isp a r os, u Pa r 2 , cD e lOk ,
cSu pe r D e l)

 Re t or n o: oM sGe t D B ob j e t o do t ipo M sGe t D B( )

 Pa r â m e t r os:

n Top Dist ancia ent re a MsGet DB e o ext r em idade superior do


obj et o que a cont ém .
n Le ft Dist ancia ent re a MsGet DB e o ext r em idade esquerda do
obj et o que a cont ém .
n Bot t om Dist ancia ent re a MsGet DB e o ext r em idade inferior do obj et o
que a cont ém .
n Rig h t Dist ancia ent re a MsGet DB e o ext r em idade direit a do obj et o
que a cont ém .
n Opc Posição do elem ent o do vet or aRot ina que a MsGet DB usará
com o referência.
cLin h a Ok Função ex ecut ada para validar o cont ext o da linha at ual do
aCols.
cTu doOk Função execut ada para validar o cont ext o ger al da MsGet DB
( t odo aCols) .
cI n iCpos Nom e dos cam pos do t ipo caract er que ut ilizarão increm ent o
aut om át ico. Est e parâm et r o dev e ser no for m at o “ + < nom e
do prim eiro cam po> + < nom e do segundo cam po> + ...” .
lD e le t e Habilit a a opção de excluir linhas do aCols. Valor padrão
falso.
a Alt e r Vet or com os cam pos que poderão ser alt erados.
n Fr e e z e I ndica qual coluna não ficara congelada na exibição.
lEm pt y Habilit a validação da pr im eira coluna do aCols para est a não
poder est ar vazia. Valor padrão falso.
u Pa r 1 Parâm et r o r eservado.
cFie ldOk Função execut ada na validação do cam po.
cTRB Alias da t abela t em porária.
lCon dicion a l Reser vado
lAp pe n d I ndica se a MsGet DB ira criar um a linha em branco
aut om at icam ent e quando for inclusão.
cD e lOk Função ex ecut ada para validar a exclusão de um a linha do
aCols.
lD ispa r os I ndica se será ut ilizado o Dicionário de Dados para consult a
padrão, inicialização padrão e gat ilhos.
u Pa r 2 Parâm et r o r eservado.
cSu pe r D e l - Função ex ecut ada quando pressionada as t eclas
< Ct rl> + < Delet e> .
oW n d Obj et o no qual a MsGet DB será criada.

- 315 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

 Va r iá ve is p r iv a t e :

a Rot in a Vet or com as r ot inas que ser ão execut adas na MBrowse e


que definira o t ipo de operação que est a sendo ex ecut ada
( inclusão, alt eração, ex clusão, visualização, pesquisa, ...) no
for m at o:

{ cTit ulo, cRot ina, nOpção, nAcesso} , aonde:

nOpção segue o padrão do ERP Prot heus para:

1- Pesquisar
2- Visualizar
3- I ncluir
4- Alt erar
5- Excluir

a H e a de r Vet or com inform ações das colunas no form at o:

{ cTit ulo, cCam po, cPict ure, nTam anho, nDecim ais,;
cValidação, cReservado, cTipo, xReservado1, x Reser vado2}

A t abela t em porária ut ilizada pela MsGet DB deverá ser criada


com base no aHeader m ais um últ im o cam po t ipo lógico que
det erm ina se a linha foi excluída.

lRe f r e sh Variável t ipo lógica para uso r eser vado.

- 316 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Va r iá ve is pú blica s:

n Br Lin I ndica qual a linha posicionada do aCols.

 Fu n çõe s de va lida çã o:

cLin h a Ok Função de validação na m udança das linhas da grid. Não


pode ser definida com o St at ic Funct ion.
cTu doOk Função de validação da confirm ação da operação com o grid.
Não pode ser definida com o St at ic Funct ion.

 M é t odos a dicion a is:

For ce Re fr e sh ( ) At ualiza a MsGet DB com a t abela e posiciona na prim eira


linha.

Ex e m plo: Ut iliz a çã o d o ob j e t o M sGe t D B( )

#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Função | GETDBSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MsGetDB() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDbSA1()

Local nI
Local oDlg
Local oGetDB
Local nUsado := 0
Local aStruct := {}

Private lRefresh := .T.


Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")

- 317 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"


If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
AADD(aStruct,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3->X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
DbSkip()
End

AADD(aStruct,{"FLAG","L",1,0})

cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)

oDlg := MSDIALOG():New(000,000,300,400, “MsGetDB – SA1”,,,,,,,,,.T.)

oGetDB := MsGetDB():New(05,05,145,195,3,"U_LINHAOK", "U_TUDOOK", "+A1_COD", ;


.T.,{"A1_NOME"},1,.F.,,cCriaTrab,"U_FIELDOK",,.T.,oDlg, .T., ,"U_DELOK",;
"U_SUPERDEL")

oDlg:lCentered := .T.
oDlg:Activate()
DbSelectArea(cCriaTrab)
DbCloseArea()

Return

User Function LINHAOK()


ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()


ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()


ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()


ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()


ApMsgStop("FIELDOK")
Return .T.

- 318 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 0 .2 .2 . M sGe t D a dos( )

A classe de obj et os visuais MsGet Dados( ) per m it e a criação de um grid digit ável com um a ou
m ais colunas, baseado em um array.

 Sin t a x e : M sGe t D a d os( ) :N e w ( n Top, n Le ft , n Bot t om , n Righ t , n Opc, cLin h a Ok ,


cTu doOk , cI n iCpos, lD e le t e , a Alt e r , u Pa r 1 , lEm pt y, n M a x , cFie ldOk ,
cSu pe r D e l, u Pa r 2 , cD e lOk , oW n d)

 Re t or n o: oM sGe t D a d os  obj e t o d o t ipo M sGe t D a dos( )

 Pa r â m e t r os:

n Top Dist ancia ent re a MsGet Dados e o ext r em idade superior do


obj et o que a cont ém .
n Le ft Dist ancia ent re a MsGet Dados e o ext r em idade esquerda do
obj et o que a cont ém .
n Bot t om Dist ancia ent re a MsGet Dados e o ext r em idade inferior do
obj et o que a cont ém .
n Rig h t Dist ancia ent re a MsGet Dados e o ext rem idade direit a do
obj et o que a cont ém .
n Opc Posição do elem ent o do vet or aRot ina que a MsGet Dados
usará com o referencia.
cLin h a Ok Função ex ecut ada par a validar o cont ext o da linha at ual do
aCols.
cTu doOk Função execut ada para validar o cont ext o geral da
MsGet Dados ( t odo aCols) .
cI n iCpos Nom e dos cam pos do t ipo caract er que ut ilizarão increm ent o
aut om át ico. Est e parâm et r o dev e ser no for m at o “ + < nom e
do prim eiro cam po> + < nom e do segundo cam po> + ...” .
lD e le t e Habilit a excluir linhas do aCols. Valor padrão falso.
a Alt e r Vet or com os cam pos que poderão ser alt erados.
u Pa r 1 Parâm et r o r eservado.
lEm pt y Habilit a validação da pr im eira coluna do aCols para est a não
poder est ar vazia. Valor padrão falso.
nMax Núm er o m áxim o de linhas perm it idas. Valor padrão 99.
cFie ldOk Função execut ada na validação do cam po.
cSu pe r D e l Função execut ada quando pressionada as t eclas
< Ct rl> + < Delet e> .
u Pa r 2 Parâm et r o r eservado.
cD e lOk Função ex ecut ada para validar a exclusão de um a linha do
aCols.
oW n d Obj et o no qual a MsGet Dados será criada.

- 319 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

 Va r iá ve is p r iv a t e :

a Rot in a Vet or com as r ot inas que ser ão execut adas na MBrowse e


que definira o t ipo de operação que est a sendo ex ecut ada
( inclusão, alt eração, ex clusão, visualização, pesquisa, ...) no
for m at o:

{ cTit ulo, cRot ina, nOpção, nAcesso} , aonde:

nOpção segue o padrão do ERP Prot heus para:

6- Pesquisar
7- Visualizar
8- I ncluir
9- Alt erar
10- Excluir

a H e a de r Vet or com inform ações das colunas no form at o:

{ cTit ulo, cCam po, cPict ure, nTam anho, nDecim ais,;
cValidação, cReservado, cTipo, xReservado1, x Reser vado2}

A t abela t em porária ut ilizada pela MsGet DB deverá ser criada


com base no aHeader m ais um últ im o cam po t ipo lógico que
det erm ina se a linha foi excluída.

lRe f r e sh Variável t ipo lógica para uso r eser vado.

- 320 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Va r iá ve is pú blica s:

N I ndica qual a linha posicionada do aCols.

 Fu n çõe s de va lida çã o:

cLin h a Ok Função de validação na m udança das linhas da grid. Não


pode ser definida com o St at ic Funct ion.
cTu doOk Função de validação da confirm ação da operação com o grid.
Não pode ser definida com o St at ic Funct ion.

 M é t odos a dicion a is:

For ce Re fr e sh ( ) At ualiza a MsGet Dados com a t abela e posiciona na prim eira


linha.
H ide ( ) Ocult a a MsGet Dados.
Sh ow ( ) Most ra a MsGet Dados.

Ex e m plo: Ut iliz a çã o d o ob j e t o M sGe t D a dos( )

#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Função | GETDADOSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MSGETADOS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDadoSA1()

Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}

Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;


{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")

- 321 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"


If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
EndIf
DbSkip()
End

AADD(aCols,Array(nUsado+1))

For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next

aCols[1][nUsado+1] := .F.

oDlg := MSDIALOG():New(000,000,300,400, “MsGetDados – SA1”,,,,,,,,,.T.)

oGetDados := MsGetDados():New(05, 05, 145, 195, 4, "U_LINHAOK", "U_TUDOOK",;


"+A1_COD", .T., {"A1_NOME"}, , .F., 200, "U_FIELDOK", "U_SUPERDEL",,;
"U_DELOK", oDlg)

oDlg:lCentered := .T.
oDlg:Activate()

Return

User Function LINHAOK()


ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()


ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()


ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()


ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()


ApMsgStop("FIELDOK")
Return .T.

- 322 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 0 .2 .3 . M sN e w Ge t D a dos( )

A classe de obj et os visuais MsNewGet Dados( ) perm it e a criação de um grid digit ável com um a
ou m ais colunas, baseado em um array .

 Sin t a x e : M sN e w Ge t D a dos( ) :N e w ( n Su pe r ior , n Esqu e r d a ,n I n fe r ior , n D ir e it a ,


n Opc, cLin Ok , cTu doOk , cI n iCpos, a Alt e r GD a , n Fr e e z e , n M a x ,
cFie ldOk , cSu pe r D e l, cD e lOk , oD LG, a H e a d e r , a Cols)

 Re t or n o: oM sGe t D a d os  obj e t o d o t ipo M sN e w Ge t D a dos( )

 Pa r â m e t r os:

n Su p e r ior Dist ancia ent re a MsNewGet Dados e o ext r em idade superior


do obj et o que a cont em
n Esqu e r d a Dist ancia ent re a MsNewGet Dados e o ext r em idade esquerda
do obj et o que a cont em
n I n f e r ior Dist ancia ent re a MsNewGet Dados e o ext r em idade inferior do
obj et o que a cont em
n D ir e it a Dist ancia ent re a MsNewGet Dados e o ext r em idade direit a do
obj et o que a cont em
n Opc Operação em ex ecução: 2- Visualizar, 3- I ncluir, 4- Alt erar , 5-
Excluir
cLin Ok Função execut ada para validar o cont ext o da linha at ual do
aCols
cTu doOk Função execut ada para validar o cont ext o geral da
MsNewGet Dados ( t odo aCols)
cI n iCpos Nom e dos cam pos do t ipo caract er que ut ilizarão increm ent o
aut om át ico.
a Alt e r GD a Cam pos alt eráv eis da Get Dados
n Fr e e z e Cam pos est át icos na Get Dados, part indo sem pr e da posição
inicial da get dados aonde:

1- Prim eiro cam po congelado


2- Prim eiro e segundo cam pos congelados...

nMax Núm er o m áxim o de linhas perm it idas. Valor padrão 99


cFie ldOk Função execut ada na validação do cam po
cSu pe r D e l Função execut ada quando pr essionada as t eclas
< Ct rl> + < Delet e>
cD e lOk Função execut ada para validar a ex clusão de um a linha do
aCols
oD LG Obj et o no qual a MsNew Get Dados será criada
a H e a de r Array a ser t r at ado int er nam ent e na MsNew Get Dados com o
aHeader
a Cols Array a ser t r at ado int er nam ent e na MsNew Get Dados com o
aCols

- 323 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

 Va r iá ve is p r iv a t e :

a Rot in a Vet or com as r ot inas que ser ão execut adas na MBrowse e


que definira o t ipo de operação que est a sendo ex ecut ada
( inclusão, alt eração, ex clusão, visualização, pesquisa, ...) no
for m at o:
{ cTit ulo, cRot ina, nOpção, nAcesso} , aonde:

nOpção segue o padrão do ERP Prot heus para:

1- Pesquisar
2- Visualizar
3- I ncluir
4- Alt erar
5- Excluir

a H e a de r Vet or com inform ações das colunas no form at o:

{ cTit ulo, cCam po, cPict ure, nTam anho, nDecim ais,;
cValidação, cReservado, cTipo, xReservado1, x Reser vado2}

A t abela t em porária ut ilizada pela MsGet DB deverá ser criada


com base no aHeader m ais um últ im o cam po t ipo lógico que
det erm ina se a linha foi excluída.

lRe f r e sh Variável t ipo lógica para uso r eser vado.

- 324 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Va r iá ve is pú blica s:

N I ndica qual a linha posicionada do aCols.

 Fu n çõe s de va lida çã o:

cLin h a Ok Função de validação na m udança das linhas da grid. Não


pode ser definida com o St at ic Funct ion.
cTu doOk Função de validação da confirm ação da operação com o grid.
Não pode ser definida com o St at ic Funct ion.

 M é t odos a dicion a is:

For ce Re fr e sh ( ) At ualiza a MsNewGet Dados com a t abela e posiciona na


prim eira linha.
H ide ( ) Ocult a a MsNew Get Dados.
Sh ow ( ) Most ra a MsNew Get Dados.

Ex e m plo: Ut iliz a çã o d os obj e t os M sN e w Ge t D a dos( ) e M sM Ge t ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização dos objetos |
| | MsNewGetDados() e MsMGet() combinados |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGetD()

Private cCadastro := "Pedidos de Venda"


Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}

- 325 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

Local aPos := {000,000,080,400}


Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE


If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD


If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.;
cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

- 326 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,;
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)


RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
/*cTudoOk*/, oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,;
lProperty)

oGetD:= MsNewGetDados():New(nSuperior, nEsquerda, nInferior, nDireita,;


nOpc,cLinOk,cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk,;
cSuperDel,cDelOk, oDLG, aHeader, aCols)

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()},{||oDlg:End()},,aButtons)}


oDlg:lCentered := .T.
oDlg:Activate()
Return

- 327 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 0 .2 .3 .1 . D e fin in do cor e s pe r son a liz a da s pa r a o ob j e t o M sN e w Ge t D a dos( )

Conform e vist o no t ópico sobr e definição das propriedades de cor es para os com ponent es
visuais, cada obj et o possui caract eríst icas que dev em ser respeit adas para corr et a ut ilização
dest e r ecurso.

 At r ibu t os a d icion a is:

lUse D e fa u lt Color s At ribut o que dev erá ser definido com o .F. par a que as
alt erações nas cor es sej am perm it idas.

 M é t odos a dicion a is:

Se t Blk Ba ck Color Mét odo que define a cor que será ut ilizada para cada linha do
grid. Não é necessário ut ilizar o m ét odo Refr esh( ) após a
definição da cor por est e m ét odo.

 Ap a r ê n cia :

- 328 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: D e fin in do cor e s p e r son a liz a da s p a r a o ob j e t o M sN e w Ge t D a dos( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização dos objetos |
| | MsNewGetDados() e MsMGet() combinados e tratamento de cores |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGtCl()

Private cCadastro := "Pedidos de Venda"


Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0

Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999

- 329 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

Local cFieldOk := "AllwaysTrue"


Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE


If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD


If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3-
>X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

- 330 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado

IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF

Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)

RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,;


aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)

oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,;


cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,;
cDelOk, oDLG, aHeader, aCols)

// Tratamento para definição de cores específicas,


// logo após a declaração da MsNewGetDados

oGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}


oDlg:lCentered := .T.
oDlg:Activate()

Return

- 331 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

// Função para tratamento das regras de cores para a grid da MsNewGetDados

Static Function GETDCLR(aLinha,nLinha,aHeader)

Local nCor2 := 16776960 // Ciano - RGB(0,255,255)


Local nCor3 := 16777215 // Branco - RGB(255,255,255)
Local nPosProd := aScan(aHeader,{|x| Alltrim(x[2]) == "C6_PRODUTO"})
Local nUsado := Len(aHeader)+1
Local nRet := nCor3

If !Empty(aLinha[nLinha][nPosProd]) .AND. aLinha[nLinha][nUsado]


nRet := nCor2
ElseIf !Empty(aLinha[nLinha][nPosProd]) .AND. !aLinha[nLinha][nUsado]
nRet := nCor3
Endif

Return nRet

- 332 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 0 .3 . Ba r r a s de bot õe s

A linguagem ADVPL perm it e a im plem ent ação de bar ras de bot ões ut ilizando funções pré-
definidas desenvolvidas com o obj et ivo de facilit ar sua ut ilização, ou at rav és da ut ilização
diret a dos com ponent es visuais disponíveis. Dent re os r ecur sos da linguagem que podem ser
ut ilizados com est a finalidade serão abordados:

 Fu n çã o En ch oice Ba r : Sint axe t radicionalm ent e ut ilizada em ADVPL, a qual não


ret orna um obj et o par a a aplicação cham adora;

 Cla sse TBa r : Classe do obj et o TBar( ) , a qual perm it e a inst anciação diret a de um
obj et o do t ipo bar ra de bot ões superior, t ornando- o disponível na aplicação cham adora.

 Cla sse Bu t t on Ba r : Classe do obj et o But t onBar( ) , a qual perm it e a inst anciação diret a
de um obj et o bar ra de bot ões genérico, o qual pode ser ut ilizado em qualquer posição
da t ela, t ornando- o disponível na aplicação cham adora.

3 0 .3 .1 . Enchoice Ba r ( )

Função que cria um a barra de bot ões no form at o padrão ut ilizado pelas int erfaces de cadast r o
da aplicação Prot heus.

Est a bar ra possui os bot ões padrões para confirm ar ou cancelar a int erface e ainda perm it e a
adição de bot ões adicionais com a ut ilização do parâm et r o a Bu t t on s.

 Sin t a x e :

En ch oice Ba r ( oD lg, b Ok , bCa n ce l, lM sgD e l, a Bu t t on s, n Re cn o, cAlia s)

 Pa r â m e t r os:

oD lg Dialog onde irá criar a barra de bot ões


bOk Bloco de código a ser ex ecut ado no bot ão Ok
bCa n ce l Bloco de código a ser ex ecut ado no bot ão Cancelar
lM sgD e l Exibe dialog para confir m ar a ex clusão
Array cont endo bot ões adicionais.
aArray[ n] [ 1] - > I m agem do bot ão
a Bu t t on s
aArray[ n] [ 2] - > bloco de código cont endo a ação do bot ão
aArray[ n] [ 3] - > t ít ulo do bot ão
n Re cn o Regist ro a ser posicionado após a ex ecução do bot ão Ok .
Alias do regist r o a ser posicionado após a ex ecução do bot ão
cAlia s Ok. Se o parâm et r o nRecno for inform ado, o cAlias passa ser
obrigat ório.

 Ap a r ê n cia :

- 333 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Ut iliz a çã o d a f u n çã o En ch oice Ba r ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização da função |
| | EnchoiceBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function DEnchBar()


Local oDlg, oBtn
Local aButtons := {}

DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF;
oMainWnd

AADD( aButtons, {"HISTORIC", {|| TestHist()}, "Histórico...",;


"Histórico",{|| .T.}} )

@ -15,-15 BUTTON oBtn PROMPT "..." SIZE 1,1 PIXEL OF oDlg

ACTIVATE MSDIALOG oDlg ;


ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))

Return

- 334 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 0 .3 .2 . TBa r ( )

Classe de obj et os visuais que perm it e a im plem ent ação de um com ponent e do t ipo barr a de
bot ões para a part e superior de um a j anela previam ent e definida.

 Sin t a x e : N e w ( oW n d, n Bt n W idt h , n Bt n H e ig h t , l3 D , cM ode , oCu r sor , cRe sou r ce ,


lN oAu t oAd j u st )

 Re t or n o: oTBa r  ob j e t o do t ipo TBa r ( )

 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser


oW n d
criado.
n Bt n W idt h Num érico, opcional. Lar gura do bot ão cont ido na barr a
n Bt n H e igh t Num érico, opcional. Alt ura do bot ão cont ido na barra
l3 D Lógico, opcional. Define t ipo da barra
cM ode Não ut ilizado.
Obj et o, opcional. Define Cursor ao posicionar o m ouse sobr e a
oCu r sor
barra.
Caract er , opcional. I m agem do r ecurso a ser inserido com o
cRe sou r ce
fundo da bar ra.
lN oAu t oAd j u st Lógico.

 Ap a r ê n cia :

Ex e m plo: Ut iliz a çã o d a f u n çã o En ch oice Ba r ( )

#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------------
| Função | TSTBAR | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto TBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function TstTBar()


Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

- 335 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;


{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;


{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;


{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;


{||},oTBar,'Preço' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return

3 0 .3 .3 . But t onBa r

A sint axe Bu t t on Ba r é a form a clássica ut ilizada na linguagem ADVPL para im plem ent ar um
obj et o da classe TBar( ) , o qual possui as caract eríst icas m encionadas no t ópico ant erior .

 Sin t a x e :

D EFI N E BUTTON BAR oBa r SI ZE n W idt h , nH e igh t 3 D M OD E OF oD lg


CURSOR

 Re t or n o: ( ) .

 Pa r â m e t r os:

oBa r Obj et o do t ipo TBar( ) que será criado com a ut ilização da


sint axe But t onBar( ) .
n W idt h Num érico, opcional. Lar gura do bot ão cont ido na barr a.
n H e ig h t Num érico, opcional. Alt ura do bot ão cont ido na barra.
3D Se definido habilit a a visualização em 3D da barra de bot ões.
oD lg Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser
criado.
M OD E Define a form a de orient ação do obj et o But t onBar ut ilizando
os seguint es t erm os pré- definidos:

TOP, BOTTOM, FLOAT

CURSOR Obj et o, opcional. Define Cursor ao posicionar o m ouse sobr e


a barr a.

- 336 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A sint axe But t onBar requer a adição dos bot ões com o recur sos adicionais da barr a
previam ent e definida ut ilizando a sint axe abaixo:

 Bot õe s: BUTTON RESOURCE

 Sin t a x e a d icion a l:

D EFI N E BUTTON RESOURCE cBit M a p OF oBa r ACTI ON cAca o TOOLTI P


cTe x t o

 Pa r â m e t r os:

cBit M a p Nom e da im agem disponível na aplicação.


oBa r Obj et o do t ipo TBar( ) no qual o bot ão será adicionado.
cAca o Função ou list a de expr essões que det erm ina a ação que será
realizada pelo bot ão.
cTe x t o Text o no est ilo “ t oolt ip t ext ” que será exibido quando o
cursor do m ouse for posicionado sobre o bot ão na barra de
ferram ent as.

 Ap a r ê ncia :

Ex e m plo: Ut iliz a çã o d a sin t a x e Bu t t on Ba r

#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------
| Função | TstBBar | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto TBar() |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function TstBBar()

Local oDlg
Local oBtn1
Local oBtn2

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - BUTTONBAR',,,,,,,,,.T.)

DEFINE BUTTONBAR oBar SIZE 25,25 3D TOP OF oDlg

- 337 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

DEFINE BUTTON RESOURCE "S4WB005N" OF oBar ACTION NaoDisp() TOOLTIP "Recortar"


DEFINE BUTTON RESOURCE "S4WB006N" OF oBar ACTION NaoDisp() TOOLTIP "Copiar"
DEFINE BUTTON RESOURCE "S4WB007N" OF oBar ACTION NaoDisp() TOOLTIP "Colar"
DEFINE BUTTON oBtn1 RESOURCE "S4WB008N" OF oBar GROUP;
ACTION Calculadora() TOOLTIP "Calculadora"

oBtn1:cTitle:="Calc"
DEFINE BUTTON RESOURCE "S4WB009N" OF oBar ACTION Agenda() TOOLTIP "Agenda"
DEFINE BUTTON RESOURCE "S4WB010N" OF oBar ACTION OurSpool() TOOLTIP "Spool"
DEFINE BUTTON RESOURCE "S4WB016N" OF oBar GROUP;
ACTION HelProg() TOOLTIP "Ajuda"

DEFINE BUTTON oBtn2 RESOURCE "PARAMETROS" OF oBar GROUP;


ACTION Sx1C020() TOOLTIP "Parâmetros"

oBtn2:cTitle:="Param."

DEFINE BUTTON oBtOk RESOURCE "FINAL" OF oBar GROUP;


ACTION oDlg:End()TOOLTIP "Sair"

oBar:bRClicked := {|| AllwaysTrue()}


oDlg:lCentered := .T.
oDlg:Activate()

Return

- 338 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 0 .3 .4 . I m a ge ns pr é - de finida s pa r a a s ba r r a s de bot õe s

Conform e m encionado nos t ópicos ant eriores, os bot ões visuais do t ipo bar ra de bot ões
perm it em a definição de it ens com ações e im agens vinculadas.

Dent r e os obj et os e funções m encionados, foi cit ada a EnchoiceBar( ) , a qual perm it e a adição
de bot ões adicionais at ravés do parâm et r o a Bu t t on, sendo que os it ens dest e ar ray dev em
possuir o seguint e form at o:

 Sin t a x e : AADD( aBut t ons,{ cBit Map, bAcao, cTex t o} )

 Est r u t u r a :

Nom e da im agem pré- definida exist ent e na aplicação ERP que


cBit M a p
será vinculada ao bot ão.
Bloco de código que define a ação que será ex ecut ada com a
bAca o
ut ilização do bot ão.
Text o no est ilo “ t oolt ip t ext ” que será exibido quando o cursor
cTe x t o do m ouse for posicionado sobr e o bot ão na bar ra de
ferram ent as.

 Alg u n s Bit M a ps d isp on íve is:

D ESTI N OS D I SCAGEM
ED I T ED I TABLE
EXCLUI R FORM
GRAF2 D GRAF3 D
LI N E N OTE
OBJETI VO OK
PEN D EN TE PRECO
PROD UTO S4 SB0 1 4 N
S4 W B0 0 1 N S4 W B0 0 5 N
S4 W B0 0 6 N S4 W B0 0 7 N
S4 W B0 0 8 N S4 W B0 0 9 N
S4 W B0 1 0 N S4 W B0 1 1 N
S4 W B0 1 3 N S4 W B0 1 4 A
S4 W B0 1 6 N SI M ULACA
VEN D ED OR USER

 Ex e m plo:

AADD(aButtons,{"USER",{||AllwaysTrue()},"Usuário"})

- 339 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


APÊN D I CES

BOAS PRÁTI CAS D E PROGRAM AÇÃO


31. Ar r e donda m e nt o

Algum as operações num éricas podem causar diferenças de ar r edondam ent o. I sso ocor r e
devido a diferenças no arm azenam ent o de variáveis num éricas nos diversos pr ocessadores,
diferença est a, inclusive, pr esent e no ADVPL, m esm o ant es do surgim ent o do Pr ot heus.

Para evit ar esses problem as de arr edondam ent o, dev e ser ut ilizada a função Round( ) ,
principalm ent e ant es de r ealizar um a com paração e ant es de se ut ilizar a função I nt ( ) .

Desse m odo, assegura- se que o result ado será cor r et o independent em ent e do pr ocessador ou
plat aform a.

Ex e m plo 0 1 :

If (Valor/30) == 50 // pode ser falso ou inválido


If Round(Valor/30, 0) == 50 // correto

Ex e m plo 0 2 :

M->EE8_QTDEM1 := Int(M->EE8_SLDINI/M->EE8_QE) // pode ser falso ou inválido


M->EE8_QTDEM1 := Int(Round(M->EE8_SLDINI/M->EE8_QE,10)) // correto

32. Ut iliz a çã o de I de nt a çã o

É obrigat ória a ut ilização da ident ação, pois t orna o código m uit o m ais legível. Vej a os
ex em plos abaixo:

While !SB1->(Eof())
If mv_par01 == SB1->B1_COD
dbSkip()
Loop
Endif
Do Case
Case SB1->B1_LOCAL == “01” .OR. SB1->B1_LOCAL == “02”
TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)
Case SB1->B1_LOCAL == “03”
TrataDefeito(SB1->B1_COD)
OtherWise
TrataCompra(SB1->B1_COD, SB1->B1_LOCAL)
EndCase
dbSkip()
EndDo

- 340 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A ut ilização da ident ação seguindo as est rut uras de cont r ole de fluxo ( while, I F, caso et c.)
t orna a com pr eensão do código m uit o m ais fácil:

While !SB1->(Eof())

If mv_par01 == SB1->B1_COD
dbSkip()
Loop
Endif

Do Case
Case SB1->B1_LOCAL == “01” .OR. SB1->B1_LOCAL == “02”
TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)

Case SB1->B1_LOCAL == “03”


TrataDefeito(SB1->B1_COD)

OtherWise
TrataCompra(SB1->B1_COD, SB1->B1_LOCAL)
EndCase
dbSkip()

EndDo

Para ident ar o código ut ilize a t ecla < TAB> e na ferram ent a DEV- St udio, a qual pode ser
configurada at rav és da opção “ Pr efer ências” :

- 341 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


33. Ca pit ula çã o de Pa la vr a s- Cha ve

Um a conv enção am plam ent e ut ilizada é a de capit ular as palavras chaves, funções, variáveis e
cam pos ut ilizando um a com binação de caract er es em m aiúsculo e m inúsculo, visando facilit ar
a leit ura do código font e. O código a seguir:

Loca l n cn t w h ile ( n cn t + + < 1 0 ) n t ot a l + = n cn t * 2 e n d do

Ficaria m elhor com as palavras chav es e variáv eis capit uladas:

Loca l n Cn t W h ile ( n Cn t + + < 1 0 ) n Tot a l + = n Cn t * 2 En dD o

Para funções de m anipulação de dados que com ecem por “ db” , a capit ulação
só será efet uada após o “ db” :

 dbSe e k ( )
 dbSe le ct Ar e a ( )

3 3 .1 . Pa la vr a s e m m a iú sculo

A regra é ut ilizar caract er es em m aiúsculo para:

 Con st a nt e s:

# define NUMLI NES 60 # define NUMPAGES 1000

 Va r iá ve is de m e m ór ia :

M- > CT2_CRCONV M- > CT2_MCONVER : = CriaVar( " CT2_CONVER" )

 Ca m p os:

SC6- > C6_NUMPED

 Qu e r y s:

SELECT * FROM...

- 342 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


34. Ut iliz a çã o da N ot a çã o H únga r a

A not ação húngara consist e em adicionar os prefixos aos nom es de variáveis, de m odo a
facilm ent e se ident ificar seu t ipo. I st o facilit a na criação de códigos- font e ext ensos, pois
usando a Not ação Húngara, v ocê não pr ecisa ficar o t em po t odo volt ando à definição de um a
variável para se lem brar qual é o t ipo de dados que dev e ser colocado nela. Variáveis devem
t er um pr efixo de Not ação Húngara em m inúsculas, seguido de um nom e que ident ifique a
função da variável, sendo que a inicial de cada palavra dev e ser m aiúscula.

É obrigat ória a ut ilização dest a not ação para nom ear variáveis.

N ot a çã o Tipo de da do Ex e m plo
a Array aValores
b Bloco de código bSeek
c Caract er cNom e
d Dat a dDat aBase
l Lógico lCont inua
n Num érico nValor
o Obj et o oMainWindow
x I ndefinido xCont eudo

35. Té cnica s de pr ogr a m a çã o e ficie nt e

Para o desenvolvim ent o de sist em as e a pr ogram ação de r ot inas, sem pr e é esperado que
qualquer código escrit o sej a:

 Fu n cion a lm e n t e cor r e t o
 Eficie n t e
 Le gív e l
 Re u t iliz á ve l
 Ex t e n sív e l
 Por t á ve l

Após anos de experiência na ut ilização de linguagens padrão xBase e do desenvolvim ent o da


linguagem ADVPL, algum as t écnicas para um a progr am ação ot im izada e eficient e foram
reconhecidas. A ut ilização das t écnicas a seguir, visa buscar o m áxim o apr ov eit am ent o dos
recursos da linguagem com o obj et ivo de criar program as com est as car act eríst icas.

Cr ia çã o de fun çõe s se gu n d o a n e ce ssid a de

Observ e o código de ex em plo:

User Function GetAnswer(lDefault)


Local lOk
lOk := GetOk(lDefault)
If lOk
Return .T.
Else
Return .F.
Endif
Return nil

- 343 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ut ilizando- se apenas o crit ério " a função funciona corr et am ent e?" , a função Get Answer é
perfeit a. Recebe um parâm et ro lógico com a respost a padrão e r et orna um valor lógico
dependent e da opção escolhida pelo usuário em um a função de diálogo " sim / não" designada
para isso. Pode ent r et ant o ser m elhorada, part icularm ent e se eficiência for considerada com o
um crit ério para um código m elhor. Eficiência t ipicam ent e envolve a ut ilização de poucos
recursos de m áquina, poucos cham adas de funções ou t ornar m ais rápido um pr ocesso.

Segundo esse raciocínio, poderia se pr oduzir o seguint e código:

User Function GetAnswer(lDefault)


Return If( GetOk(lDefault), .T., .F.)

O código acim a ainda pode ser aprim orado confor m e abaixo:

User Function GetAnswer(lDefault)


Return GetOk(lDefault)

Com a ot im ização do código da função Get Answer( ) , pode facilm ent e verificar que a m esm a
não r ealiza nada adicional à cham ada de Get Ok( ) , podendo ser subst it uída por um a cham ada
diret a dest a, cont inuando a funcionar cor ret am ent e.

Codif ica çã o a u t o- docu m e n t á ve l

Nenhum com ent ário subst it ui um código claram ent e escrit o, e est e não é um acident e.
Consider e o exem plo:

cVar := " " // 11 espaços

O t am anho da variável cVar não é evident e por si só e não é facilm ent e verificado. Est es
m esm os 10 espaços est ariam m ais óbvios e ainda assim garant idos se a inst rução fosse escrit a
com o:

cVar := Space(11)

O m esm o princípio pode ser aplicado para qualquer st ring longa de caract eres r epet idos. A
função Replicat e pode ser ut ilizada com o a seguir:

cVar := Replicate( "*", 80 )

Est e t ipo de program ação deixa o código fácil de digit ar, fácil de ler e m ais flexível.

- 344 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ut iliz a çã o d e solu çõe s sim p le s

Sim plicidade na criação de inst ruções t orna a program ação e at é m esm o a ex ecução m ais
rápida. Consider e a linha de código:

If nVar > 0 .Or. nVar < 0

Se o valor da variável nVar for igual a zero ( 0) no m om ent o da ex ecução dest a linha de
código, am bas as com parações separadas pelo operador lógico .Or. serão efet uadas: Após ser
avaliada, a prim eira com paração irá falhar. A segunda com paração será ent ão av aliada e
falhará t am bém . Com o result ado, o código exist ent e dent ro da est rut ura de fluxo I f não será
ex ecut ado. Tal código som ent e será ex ecut ado quando o valor dest a variável for m aior OU
m enor do que zero. Ou sej a, sem pr e que for DI FERENTE de zero, o que t orna a linha a seguir
m ais eficient e:

If nVar != 0

Est e t ipo de alt eração t orna o código m ais legível e o pr ocessam ent o m ais rápido, evit ando a
avaliação de inst ruções desnecessariam ent e.

Exist em out ras sit uações onde a sim plificação pode ser ut ilizada. A expressão de avaliação a
seguir:

If cVar == "A" .Or. cVar == "B" .Or cVar == "C" .Or. cVar == "D"

Pode ser subst it uído pelo operador de cont enção:

If cVar $ "ABCD"

Opçã o por f le x ib ilid a de

A m elhor solução é aquela que envolve o problem a im ediat o e previne problem as no fut ur o.
Consider e o exem plo:

@nRow,nCol PSAY cVar Picture "!!!!!!!!!!!!!!!!!!!!"

Excet o cont ando- se os caract eres, não exist e m aneira de saber se o núm ero de car act er es de
exclam ação é o esperado. Enquant o ist o é um problem a, exist em algo m ais grave. A expressão
de pict ure é est át ica. Se no fut ur o for necessário aj ust ar o t am anho da variável cVar, ser á
necessário localizar t odos os lugares no código onde est a m áscara de pict ure est á sendo
ut ilizada para aj ust e m anual.

- 345 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exist e um a opção de solução de aut o- aj ust e disponível que é fácil de digit ar e t em a garant ia
de execut ar a t ar efa igualm ent e ( t ornar t odos os caract er es m aiúsculos) :

@nRow,nCol PSAY cVar Picture "@!"

Opçã o da p r a t icida de a o dr a m a

Se a solução par ece com plexa, pr ovav elm ent e é porque o cam inho escolhido est á levando a
isso. Deve- se sem pr e se pergunt ar porque alguém desenv olveria um a linguagem que requisit e
t ant os com andos com plicados para fazer algo sim ples. Na grande m aioria dos casos, exist e
um a solução m ais sim ples. O exem plo abaixo deixa isso bem claro:

@ 10,25 Say Substr(cCep,1,5) + "-" + Substr(cCep,6,3) Picture "!!!!!!!!!"

Est e código pode ser escrit o de um a form a m uit o m ais sim ples, confor m e dem onst rado abaixo:

@ 10,25 Say cCep Picture "@R 99999-999"

Ut iliz a çã o d e op e r a dor e s de in cr e m e n t o/ d e cr e m e n t o

Ut ilizados devidam ent e, os operador es de increm ent o e decrem ent o t ornam o código m ais fácil
de ler e possivelm ent e um pouco m ais rápidos. Ao cont rário de escrever adições sim ples com o:

nVar := nVar + 1
nVar := nVar -1

Pode- se escrevê- las assim :

++nVar
--nVar

Dev e- se apenas t om ar cuidado com a precedência dest es operador es, pois o " + + " ou o " - - "
podem aparecer ant es ou depois de um a variável, e em alguns casos quando a variável for
ut ilizada dent ro de um a expressão, a prefixação ou sufixação dest es operador es afet ará o
result ado. Para m aiores det alhes, consult e a docum ent ação de operador es da linguagem
ADVPL.

- 346 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Evit a r p a ssos d e sn e ce ssá r ios

Exist e um a diferença ent re um bom hábit o e perda de t em po. Algum as v ezes est es conceit os
podem est ar m uit o pr óxim os, m as um m odo de difer enciá- los é balancear os benefícios de
realizar algum a ação cont ra o pr oblem a que result aria se não fosse ex ecut ada. Obser ve o
ex em plo:

Local nCnt := 0
For nCnt := 1 To 10
<código>
Next nCnt

I nicializar a variável no m om ent o da declaração não é um problem a. Se o 0 fosse necessário


no exem plo, t eria sido út il a inicialização na declaração. Mas nest e caso a est rut ura de
repet ição For ...N e x t at ribui o seu valor im ediat am ent e com 1, port ant o não houv e ganho em
at ribuir a variável com 0 no com eço.

Nest e ex em plo não há nenhum pont o negat ivo e nada er rado ocorr er á se a variável não for
inicializada, port ant o é aconselhável evit ar est e t ipo de inicialização, pois não t orna o código
m ais segur o e t am bém não expr essa a int enção do código m ais claram ent e.

Por ém not e est e ex em plo, onde a variável não é inicializada:

Local nCnt
While ( nCnt++ < 10 )
<código>
EndDo

Em ADVPL, variáveis não inicializadas sem pre t em seu valor cont endo nulo ( nil) a princípio, o
que fará com que um a exceção em t em po de execução acont eça quando a inst rução de
repet ição while for ex ecut ada.

Diferent em ent e do prim eiro ex em plo, onde a inicialização da variável não fazia diferença
algum a, nest e segundo ex em plo a inicialização é absolut am ent e necessária. Deve- se pr ocurar
inicializar variáveis num éricas com zer o ( 0) e variáveis caract er com st ring nula ( " " ) apenas
quando realm ent e necessário.

- 347 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ut iliz a çã o d e a lt e r n a t iva s

Quando se est á t rabalhando em um a sim ples r ot ina, deve- se t om ar algum t em po par a


explorar duas ou t r ês diferent es abordagens. Quando se est á t r abalhando em algo m ais
com plexo, dev e- se planej ar prot ot ipar algum as a m ais. Consider e o seguint e código:

If cHair = "A"
Replace hair With "Loira"
Else
If cHair = "B"
Replace hair With "Morena"
Else
If cHair = "C"
Replace hair With "Ruiva"
Else
If cHair = "D"
Replace hair With "Grisalho"
Else
Replace hair With "Preto"
Endif
Endif
Endif
Endif

Um código de um a única let ra, ( A at é E) , foi inform ado para indicar a cor de cabelo. Est e
código foi ent ão conv er t ido e ar m azenado com o um a st ring. Pode- se not ar que a cor " Pret o"
será at ribuída se nenhum a out ra opção for v erdadeira.

Um a alt ernat iva que reduz o nível de ident ação t orna o código m ais fácil de ler enquant o reduz
o núm ero de com andos replace:

Do Case
Case cHair == "A"
cColor := "Loira"
Case cHair == "B"
cColor := "Morena"
Case cHair == "C"
cColor := "Ruiva"
Case cHair == "D"
cColor := "Grisalho"
OtherWise
cColor := "Preto"
EndCase

Replace hair With cColor

- 348 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ut iliz a çã o d e a r q uiv os d e ca be ça lh o qu a n d o n e ce ssá r io

Se um arquivo de código criado se refer encia a com andos para int erpr et ação e t rat am ent o de
arquivos XML, est e deve se incluir o arquivo de cabeçalho próprio para t ais com andos
( XMLXFUN.CH no exem plo) . Por ém não dev e- se incluir arquivos de cabeçalho apenas por
segurança. Se não se est á r efer enciando nenhum a das const ant es ou ut ilizando nenhum dos
com andos cont idos em um dest es arquivos, a inclusão apenas t ornará a com pilação m ais
dem orada.

Con st a n t e s e m m a iú scu lo

I st o é um a convenção que faz sent ido. Em ADVPL, com o em C por ex em plo, a regra é ut ilizar
t odos os caract eres de um a const ant e em m aiúsculo, a fim de que possam ser claram ent e
reconhecidos com o const ant es no código, e que não sej a necessários lem brar onde for am
declarados.

Ut iliz a çã o d e ide n t a çã o

Est e é um hábit o que t odo program ador dev e desenvolver. Não consom e m uit o esforço para
m ant er o código alinhado durant e o t r abalho, porém quando necessário pode- se ut ilizar a
ferram ent a TOTVS Dev St udio para a re- ident ação de código. Para m aior es det alhes, consult e a
docum ent ação sobre a ident ação de códigos font es disponível nos dem ais t ópicos dest e
m at erial.

Ut iliz a çã o d e e sp a ços e m br a n co

Espaços em branco ext r as t ornam o código m ais fácil para a leit ura. Não é necessário im ensas
áreas em br anco, m as agrupar pedaços de código at ravés da ut ilização de espaços em branco
funciona m uit o bem . Cost um a- se separar parâm et r os com espaços em branco.

Qu e br a de lin h a s m u it o lon g a s

Com o obj et ivo de t ornar o código m ais fácil de ler e im prim ir, as linhas do código não devem
est ender o lim it e da t ela ou do papel. Podem ser " quebradas" em m ais de um a linha de t ext o
ut ilizando o pont o- e- vírgula ( ; ) .

Ca pit u la çã o de p a la vr a s- ch a v e

Um a conv enção am plam ent e ut ilizada é a de capit ular as palavras chaves, funções, variáveis e
cam pos ut ilizando um a com binação de caract er es em m aiúsculo e m inúsculo, visando facilit ar
a leit ura do código font e.

Avaliando o código a seguir:

local ncnt
while ( ncnt++ < 10 )
ntotal += ncnt * 2
enddo

- 349 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


O m esm o ficaria m uit o m ais claro se r e- escrit o conform e abaixo:

Local nCnt

While ( nCnt++ < 10 )


nTotal += nCnt * 2
EndDo

Ut iliz a çã o d a N ot a çã o H ú n g a r a

A Not ação Húngara é m uit o com um ent re pr ogram ador es xBase e de out ras linguagens. A
docum ent ação do ADVPL ut iliza est a not ação para a descrição das funções e com andos e é
aconselhável sua ut ilização na criação de rot inas, pois aj uda a evit ar pequenos err os e facilit a
a leit ura do código. Para m aiores det alhes, consult e a docum ent ação sobr e a ut ilização da
Not ação Húngara de códigos font es disponível nos dem ais t ópicos dest e m at erial.

Ut iliz a çã o d e n om e s sign ifica nt e s p a r a v a r iá ve is

A principal vant agem da liberdade na criação dos nom es de variáveis é a facilidade de


ident ificação da sua ut ilidade. Port ant o dev e- se ut ilizar essa facilidade o m áxim o possível.
Nom es sem sent ido apenas t ornarão difícil a ident ificação da ut ilidade de um a det erm inada
variável, assim com o nom es ext r em am ent e curt os. Nem sem pr e a ut ilização de um a variável
cham ada i é a m elhor saída. Claro, não conv êm criar um a variável com um nom e m uit o longo
que será ut ilizada com o um cont ador, e r efer enciada m uit as vezes no código. O bom senso
dev e ser ut ilizado.

Criar variáveis com o nNum er o ou dDat a t am bém não aj udam na ident ificação. A Not ação
Húngara j á est á sendo ut ilizada para isso e o obj et ivo do nom e da variável deveria ser
ident ificar sua ut ilização, não o t ipo de dado ut ilizado. Deve- se procurar subst it uir t ais
variáveis por algo com o nTot al ou dCom pra.

O m esm o é válido para nom es de funções, que dev em descrev er um pouco sobr e o que a
função faz. Novam ent e nom es ext r em am ent e curt os não são aconselháveis.

Ut iliz a çã o d e com e n t á r ios

Com ent ários são m uit o út eis na docum ent ação de pr ogram as criados e para facilit ar a
ident ificação de pr ocessos im port ant es no fut ur o e devem sem pr e ser ut ilizados.

Sem pr e que possível, funções criadas dev em t er um a breve descrição do seu obj et ivo,
parâm et ros e ret orno. Além de servir com o docum ent ação, os com ent ários em belezam o
código ao separar as funções um as das out ras. Os com ent ários dev em ser ut ilizados com bom
senso, pois r eescrever a sint axe ADVPL em port uguês t orna- se apenas perda de t em po:

If nLastKey == 27 // Se o nLastKey for igual a 27

- 350 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cr ia çã o de m e n sa ge n s sist ê m ica s sign if ica n t e s e con sist e n t e s

Sej a oferecendo assist ência, exibindo m ensagens de aviso ou m ant endo o usuário inform ado
do est ado de algum processo, as m ensagens dev em r eflet ir o t om geral e a im port ância da
aplicação. Em t erm os gerais, dev e- se evit ar ser m uit o inform al e ao m esm o t em po m uit o
t écnico.

"Aguarde. Reindexando (FILIAL+COD+ LOCAL) do arquivo: \DADOSADV\SB1990.DBF"

Esse t ipo de m ensagem pode dar inform ações dem ais para o usuário e deixá- lo sent indo- se
desconfort áv el se não souber o que significa " reindexando" , et c. E de fat o, o usuário não devia
ser incom odado com t ais det alhes. Apenas a frase " Aguarde, indexando." funcionaria
corr et am ent e, assim com o palavras " pr ocessando" ou " r eorganizando" .

Out ra boa idéia é evit ar a r efer encia a um it em corr ent e de um a t abela com o um " r egist ro" :

"Deletar este registro?"

Se a operação est iver sendo efet uada em um arquivo de client es, o usuário deve ser
quest ionado sobre a rem oção do client e cor rent e, se possível inform ando valores de
ident ificação com o o código ou o nom e.

Evit a r a br e via çã o de com a n dos e m 4 le t r a s

Apesar do ADVPL supor t ar a abr eviação de com andos em quat r o let r as ( por exem plo, r epl no
lugar de r eplace) não há necessidade de ut ilizar t al funcionalidade. I st o apenas t orna o código
m ais difícil de ler e não t orna a com pilação m ais rápida ou sim ples.

Evit a r " d isf a r ce s" n o código

Não dev e- se criar const ant es para expr essões com plexas. I st o t ornará o código m uit o difícil de
com preender e poderá causar er r os prim ários, pois pode- se im aginar que um a at ribuição é
efet uada a um a variável quando na v erdade há t oda um a expr essão disfarçada:

#define NUMLINES aPrintDefs[1]


#define NUMPAGES aPrintDefs[2]
#define ISDISK aReturn[5]

If ISDISK == 1
NUMLINES := 55
Endif

NUMPAGES += 1

- 351 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A im pressão que se t em após um a leit ura dest e código é de que valor es est ão sendo at ribuídos
às variáveis ou que const ant es est ão sendo ut ilizadas. Se o obj et ivo é flexibilidade, o código
ant erior dev e ser subst it uído por:

#define NUMLINES 1
#define NUMPAGES 2
#define ISDISK 5

If aReturn[ISDISK] == 1
aPrintDefs[ NUMLINES ] := 55
Endif

aPrintDefs[ NUMPAGES ] += 1

Evit a r códig o d e se g u r a n ça de sne ce ssá r io

Dada sua nat ur eza binária, t udo pode ou não acont ecer dent r o de um com put ador . Adicionar
pedaços de código apenas para " garant ir a segurança" é fr eqüent em ent e ut ilizado com o um a
desculpa para evit ar cor rigir o pr oblem a r eal. I st o pode incluir a checagem para validar
int ervalos de dat as ou para t ipos de dados corr et os, o que é com um ent e ut ilizando em
funções:

Static Function MultMalor( nVal )


If ValType( nVal ) != "N"
nVal := 0
Endif
Return ( nVal * nVal )

O ganho é irrisório na checagem do t ipo de dado do parâm et ro j á que nenhum pr ogram a


corr et am ent e escrit o em execução poderia enviar um a st ring ou um a dat a para a função. De
fat o, est e t ipo de " capt ura" é o que t orna a depuração difícil, j á que o ret orno será sem pr e um
valor válido ( m esm o que o par âm et ro r ecebido sej a de t ipo de dado incor ret o) . Se est a
capt ura não t iver sido efet uada quando um possível er r o de t ipo de dado inválido ocor rer, o
código pode ser cor rigido para que est e er r o não m ais acont eça.

I sola m e n t o de st r in g s d e t e x t o

No caso de m ensagens e st rings de t ext o, a cent ralização é um bom negócio. Pode- se colocar
m ensagens, cam inhos para arquivos, e m esm o out ros valor es em um local específico. I st o os
t orna acessíveis de qualquer lugar no program a e fáceis de ger enciar.

Por exem plo, se exist e um a m ensagem com um com o " I m pr im in do, por fa vor a g u a r de ..."
em m uit as part es do código, corr e- se o risco de não seguir um padrão para um a das
m ensagens em algum lugar do código. E m ant ê- las em um único lugar, com o um arquivo de
cabeçalho, t orna fácil a produção de docum ent ação e a int ernacionalização em out r os idiom as.

- 352 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


LI STAS DE EXERCÍ CI OS
M ódulo 0 4 .1 .: D e se nvolve ndo a plica çõe s e m AD VPL

Desenv olver um progr am a que im plem ent e a função AxCadast ro( ) para a
01
t abela padrão do sist em a SA2 – Cadast ro de Fornecedor es.

I m plem ent ar no Ax Cadast ro( ) desenv olvido no it em ant erior as funções de


02
validação de alt eração e validação de exclusão.

Desenv olver um program a que im plem ent e a função Mbrowse( ) ut ilizando as


03 funções padrões de cadast ro, para a t abela padrão do sist em a SA2 – Cadast ro
de Fornecedor es.

- 353 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


I m plem ent ar no Mbr owse( ) desenvolvido no it em ant erior a função de
04
legenda.

I m plem ent ar no Mbrowse( ) desenv olvido no it em ant erior um a função


05
específica de inclusão ut ilizando os r ecur sos adicionais da função Ax I nclui( ) .

Desenv olver um pr ogr am a que im plem ent e um a Mark Br owse ut ilizando as


06 funções padrões de cadast ro, para a t abela padrão do sist em a SA2 – Cadast ro
de Fornecedor es.

I m plem ent ar na Mar kBr owse( ) desenv olvida no it em ant erior um a função para
07 exclusão de m últ iplos regist ros da t abela padrão do sist em a SA2 – Cadast ro
de Fornecedor es.

- 354 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Desenv olver um program a que im plem ent e um a Mar kBr ow se( ) para a t abela
08 padrão do sist em a SA1 – Cadast r o de Client e, cont em plando um a função que
perm it a a visualização dos dados principais de m últ iplos client es selecionados.

Desenv olver um progr am a que im plem ent e um a Modelo2( ) para a t abela


09 padrão do sist em a SX5 – Cadast r o de t abelas, cont em plando a funcionalidade
de inclusão.

I m plem ent ar na Modelo2( ) desenvolvida no it em ant erior as funcionalidades


10
de Visualização, Alt eração e Exclusão.

Desenv olver um program a que im plem ent e um a Modelo3( ) para as t abelas


padrões do sist em a SF1 – Cabeçalho do Docum ent o de Ent r ada e SD1 – I t ens
11
do docum ent o de ent rada, cont em plando as funcionalidades de Visualização e
I nclusão.

- 355 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


I m plem ent ar na Modelo3( ) desenvolvida no it em ant erior as funcionalidades e
12
Alt eração e Ex clusão.

Desenv olver um progr am a que crie um arquivo de t rabalho com est rut ura
13
sim ilar ao SA1 e receba as inform ações dest a t abela.

I m plem ent ar na r ot ina desenvolvida no it em ant erior, um Mar kBr owse que
14
perm it e a seleção e visualização de apenas um r egist ro selecionado.

Desenv olver um progr am a que im plem ent e um r elat ório que perm it a a
15 im pressão de um a list agem sim ples dos dados da t abela padrão SA1 –
Cadast r o de client es.

- 356 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Desenv olver um progr am a que im plem ent e um r elat ório que perm it a a
16
im pressão de um a list agem sim ples das not as fiscais e seus r espect ivos it ens.

Desenv olver um program a que realize a export ação dos it ens m arcados no
17 SA1 – Cadast ro de Client es para um arquivo no form at o .TXT em um diret ório
especificado pelo usuário.

Desenv olver um program a que r ealize a im port ação das inform ações cont idas
18 em um arquivo no form at o .TXT selecionado pelo usuário e as at ualize n o SA1
– Cadast r o de Client es.

Desenv olver o m esm o program a do it em ant erior ut ilizando as funções da


19
fam ília FT.

- 357 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ódulo 0 4 .2 .: Oficina de Pr ogr a m a çã o I

Desenv olver um a aplicação visual que im plem ent e cada um dos com ponent es
20
disponíveis no font e DI ALOG_OBJETOS.PRW.

I m plem ent ar as r ot inas de im port ação e expor t ação desenvolvidas nos it ens
21
ant erior as r éguas de pr ocessam ent o m ais adequadas.

Subst it uir em um a das r ot inas desenvolvidas ant eriorm ent e a função


22
Pergunt e( ) pela função Param Box( ) .

- 358 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Desenv olver um a rot ina que im plem ent ar um List Box sim ples que perm it a
23
visualizar as t abelas cadast radas no SX5 – Cadast ro de Tabelas.

I m plem ent ar na r ot ina desenvolvida no it em ant erior a opção de visualização


25 dos it ens de um a das t abelas selecionadas, dem onst rando- os em um a List Box
Grid.

Desenv olver um a r ot ina que im plem ent e um a Modelo2( ) ut ilizando os


26 com ponent es visuais necessários, com plem ent ados com os r ecur sos de
rolagem do obj et o Scr ollBox( ) .

- 359 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ódulo 0 5 : I nt r oduçã o a or ie nt a çã o à obj e t os

I m plem ent ar a classe Aluno( ) com os m ét odos New( ) , BuscaAluno( ) e


27
SalvaAluno( ) .

Desenv olver a int erface visual para int eragir com a classe Aluno( )
28
im plem ent ada ant erior m ent e.

I m plem ent ar na rot ina desenvolvida no it em ant erior os r ecursos necessários


29 para persist ir as infor m ações e r ecuperar os dados de it ens pr ev iam ent e
salvos.

- 360 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ódulo 0 6 : AD VPL or ie nt a do à obj e t os I

Desenv olver um a rot ina que im plem ent e um a Enchoice( ) para o SA1 –
30
Cadast r o de client es.

Adequar a r ot ina desenvolvida no it em ant erior para perm it ir o uso da classe


31
de obj et os MsMGet ( ) .

Desenv olver um a int erface de cadast ro com binando os r ecursos de um obj et o


32 MsMGet ( ) e um obj et o MsNewGet Dados( ) causando o m esm o efeit o de um a
int erface no padr ão da Modelo3( ) .

- 361 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


I m plem ent ar na r ot ina desenv olvida no it em ant erior o uso da função
33 EnchoiceBar( ) com um bot ão que perm it a ao usuário visualizar um dos it ens
exibidos na int erface.

Adequar a r ot ina desenvolvida no it em ant erior de for m a a subst it uir o uso da


34
função EnchoiceBar( ) pela classe de obj et o TBar( ) .

Convert er a sint axe clássica ut ilizada no font e DI ALOG_OBJETOS.PRW para a


35
sint axe orient ada a obj et os.

Convert er a sint axe clássica dos font es “ List Box” para a sint axe orient ada a
36
obj et os.

- 362 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Pr oj e t o: Ava lia çã o pr á t ica do t r e ina m e nt o de AD VPL I nt e r m e diá r io

Objetivos do projeto

 Contemplar o conteúdo do curso e estimular a prática da programação utilizando a linguagem


ADVPL;

 Acrescentar um grau de desafio ao treinamento;

Regras para entrega e apresentação

 Deverá ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos
necessários. A avaliação do projeto será realizada após a entrega, no prazo estabelecido pelo
instrutor;

 Pode ser realizado em grupos de até 03 pessoas. Caso existam alunos sem grupos, estes poderão
integrar equipes já formadas com o total de membros estabelecido, mediante aprovação do
instrutor;

Avaliação do projeto

 Mesmo peso da prova teórica, podendo substituí-la integralmente.


 Serão considerados os quesitos:
 Funcionalidades
 Clareza da programação
 Apresentação
 Otimização de técnicas e recursos apresentados no treinamento

Funcionalidades que compõe o projeto

Desenvolver uma aplicação utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:

Efet ue a leit ura de um arquivo em form at o .TXT com os dados necessários


01 para realizar o cadast ro de fornecedor es no sist em a Pr ot heus, e grav e est as
inform ações em um arquivo int erm ediário.

A part ir da seleção dos r egist ros disponíveis nest e arquivo int erm ediário, o
usuário poderá:

 I m prim ir os it ens selecionados;


 Efet ivar os it ens selecionados, gravando- os no SA2 – Cadast r o de
Fornecedores;
 Est ornar it ens j á efet ivados, elim inando- os do SA2 - Cadast r o de
02 Fornecedores;
 Excluir os regist ros selecionados do arquivo int erm ediário;
 Excluir t odos os r egist r os im port ados de um arquivo em for m at o .TXT
especificado.
 Visualizar as inform ações do r egist ro gerado no arquivo int erm ediário;
 Visualizar o r egist ro gerado no SA2 – Cadast ro de Fornecedor es a
part ir de um it em selecionado no arquivo int er m ediário.

- 363 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ÓD ULO 0 7 : AD VPL Or ie nt a do à obj e t os I I
Nest e m ódulo serão t r at ados os com ponent es e obj et os da int erface visual da linguagem
ADVPL, perm it indo o desenvolvim ent o de aplicações com int erfaces gráficas com sint axe
orient ada a obj et os.

36. Com pone nt e s da int e r fa ce visua l do AD VPL

A linguagem ADVPL possui diversos com ponent es visuais e auxiliares, os quais podem ser
represent ados ut ilizando a est rut ura abaixo:

 Cla sse s da I n t e r fa ce Visua l


Tsr vobj ect
 Cla sse s Aux ilia r e s
Tfont

 Cla sse s de Ja n e la s
Msdialog
Tdialog
Twindow

 Cla sse s de Com pon e n t es


Tcont rol
Cla sse s de Com pon e n t es
 Visua is
Br get ddb
Mscalend
Mscalendgr id
Msselbr
Msworkt im e
Sbut t on
Tbar
Tbit m ap
Tbr owsebut t on
Tbt nbm p
Tbt nbm p2
Tbut t on
Tcbr owse
Tcheckbox
Tcolor t riangle
Tcom bobox
Tfolder
Tfont
Tget
Tgroup
Thbut t on
Tibrowser
Tlist box
Tm enu
Tm enubar
Tm et er
Tm sgr aphic
Tm sgbar
Tm ult ibt n
Tm ult iget
Tolecont ainer
Tpageview
Tpanel
Tr adm enu
Tsbr owse
Tsay
Tscr ollbox
Tsim pleedit or
Tslider

- 364 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse s de Com pon e n t es
 Visua is
Tsplit t er
Tt abs
Tt oolbox
Twbrowse
Vcbrowse

At r ibu t os com u n s a s cla sse s de com pon e n t e s v isu a is

cCa pt ion Tít ulo ou cont eúdo do obj et o.


Consult a F3 ao qual o obj et o est á vinculado, quando o
cF3
m esm o é do t ipo get .
Mensagem exibida na barra de st at us da j anela principal
cM sg
quando o obj et o ganha foco.
cN a m e Nom e do obj et o
cToolt ip Mensagem exibida quando obj et o exibe seu t oolt ip.
Variável que receberá o cont eúdo selecionado ou digit ado no
cVa r ia ble
obj et o, quando o m esm o for t o t ipo get ou sim ilar.
I ndica se o t ext o digit ado no obj et o será exibido no form at o
lPa ssw or d
de password, quando o m esm o é do t ipo get .
lRe a dOn ly Flag que indica se o obj et o pode ou não ser edit ado.
Flag que at iva .T. ou desat iva .F. a exibição do t oolt ip do
lSh ow H in t
obj et o.
lV isible Con t r ol Se .T. o obj et o é visível, se .F. o obj et o é invisível.
n H e ig h t Alt ura em pixels.
n Le ft Coordenada horizont al em pixels.
n Top Coordenada v ert ical em pixels.
n W idt h Largura em pixels.
Pict ure de digit ação do obj et o, quando o m esm o é do t ipo
Pict ur e
get .

Eve n t os com u n s a s cla sse s de com pon e n t e s v isu a is

Bloco de código ex ecut ado quando o obj et o é ut ilizado,


bAct ion
quando o m esm o é do t ipo bot ão ou sim ilar.
Bloco de código ex ecut ado quando ocor re um a m undança na
bCh a ng e seleção de it ens que com põe o obj et o, com o por ex em plo
em list as ou grids.
Bloco de código ex ecut ado quando ut ilizado o r ecurso de
bF3
consult a F3 vinculado ao obj et o.
bGot Focu s Ex ecut ado quando obj et o ganha foco.
Ex ecut ado quando acionado click do bot ão esquerdo do
blClick e d
m ouse sobr e o obj et o.
Ex ecut ado quando acionado duplo click do bot ão esquerdo
blD b lClick
do m ouse sobr e o obj et o.
bLost Focu s Ex ecut ado quando obj et o perde foco.
Ex ecut ado quando acionado click do bot ão direit o do m ouse
br Click e d
sobr e o obj et o.
Ex ecut ado quando o cont eúdo do obj et o é m odificado e
bV a lid dev erá ser validado. Deve ret ornar .T. se o cont eúdo é
válido e .F. se cont eúdo inválido.
Ex ecut ado quando há m ovim ent ação de foco na j anela.Se
bW h e n ret ornar .T. o obj et o cont inua habilit ado, se ret ornar .F. o
obj et o será desabilit ado.

- 365 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse s d a in t e r f a ce v isu a l

TSRVOBJECT( )

 D e scr içã o: Classe abst rat a inicial de t odas as classes de int erface do ADVPL. Não dev e
ser inst anciada diret am ent e.

 Pr opr ie da d e s:

n Le ft Coordenada horizont al em pixels.


n Top Coordenada v ert ical em pixels.
n W idt h Largura em pixels.
n H e ig h t Alt ura em pixels.
cCa pt ion Tít ulo ou cont eúdo do obj et o.
cToolt ip Mensagem exibida quando obj et o exibe seu t oolt ip.
Flag que at iva .T. ou desat iva .F. a exibição do t oolt ip do
lSh ow H in t
obj et o.
Mensagem exibida na barra de st at us da j anela principal
cM sg
quando o obj et o ganha foco.
n Clr Te x t Cor do t ext o do obj et o.
n Clr Pa n e Cor do fundo do obj et o.
Ex ecut ado quando há m ovim ent ação de foco na j anela.Se
bW h e n ret ornar .T. o obj et o cont inua habilit ado, se ret ornar .F. o
obj et o será desabilit ado.
Ex ecut ado quando o cont eúdo do obj et o é m odificado e
bV a lid dev erá ser validado. Deve ret ornar .T. se o cont eúdo é
válido e .F. se cont eúdo inválido.
Ex ecut ado quando acionado click do bot ão esquerdo do
blClick e d
m ouse sobr e o obj et o.
Ex ecut ado quando acionado click do bot ão direit o do m ouse
br Click e d
sobr e o obj et o.
Ex ecut ado quando acionado duplo click do bot ão esquerdo
blD b lClick
do m ouse sobr e o obj et o.
oW n d Janela onde o obj et o foi criado.
lV isible Se .T. o obj et o é visível, se .F. o obj et o é invisível.
Ca r go Cont eúdo associado ao obj et o.
bLost Focu s Ex ecut ado quando obj et o perde foco.
bGot Focu s Ex ecut ado quando obj et o ganha foco.

 Con st r u t or : N ã o pod e se r in st a n cia da .

 Pa r â m e t r os:

Nenhum -

- 366 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a ux ilia r e s:

Se t Focu s

 D e scr içã o: Força m udança do foco de ent rada de dados para o cont r ole.
 Sin t a x e : Set Focus( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

H ide

 D e scr içã o: Torna obj et o invisível.


 Sin t a x e : Hide( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

Show

 D e scr içã o: Torna obj et o visível.


 Sin t a x e : Show( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

En a ble

 D e scr içã o: Habilit a o obj et o.


 Sin t a x e : En a ble ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

- 367 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D isa b le

 D e scr içã o: Desabilit a o obj et o.


 Sin t a x e : D isa ble ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

Re fr e sh

 D e scr içã o: Força at ualização ( sincr onia) de pr opriedades ent re o program a e o


Prot heus Rem ot e.
 Sin t a x e : Re fr e sh( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

Ex e m plo:

CLASS TCONTROL FROM TSRVOBJECT

- 368 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse s a u x ilia r e s

TFON T( )

 D e scr içã o: Classe de obj et os que define a font e do t ext o ut ilizado nos cont roles
visuais.

 Pr opr ie da d e s:

- Herdadas as classes superior es

 Con st r u t or : New( [ acNam e] , [ nPar2] , [ anHeight ] , [ lPar4] , [ alBold] , [ nPar6] ,


[ lPar7] , [ nPar8] , [ alI t alic] , [ alUnderline] )

 Pa r â m e t r os:

a cN a m e Caract er e, opcional. Nom e da font e, o padrão é “ Arial” .


n Pa r 2 Reser vado.
a n H e igh t Num érico, opcional. Tam anho da font e. O padr ão é - 11.
lPa r 4 Reser vado.
a lBold Lógico, opcional. Se .T. o est ilo da font e será negrit o.
n Pa r 6 Reser vado.
lPa r 7 Reser vado.
n Pa r 8 Reser vado.
a lI t a lic Lógico, opcional. Se .T. o est ilo da font e será it álico.
a lUn d e r lin e Lógico, opcional. Se .T. o est ilo da font e será sublinhado.

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oSay
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE 'My dialog' PIXEL
// Cria font para uso
oFont:= TFont():New('Courier New',,-14,.T.)
// Apresenta o tSay com a fonte Courier New
oSay := TSay():New( 10, 10, {|| 'Mensagem'},oDlg,, oFont,,,, .T.,
CLR_WHITE,CLR_RED )
oSay:lTransparent:= .F.
ACTIVATE MSDIALOG oDlg CENTERED
Return

- 369 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse s de j a n e la s

M SD I ALOG( )

 D e scr içã o: Classe de obj et os que deve ser ut ilizada com o padr ão de j anela para
ent rada de dados. MSDialog é um t ipo de j anela diálogo m odal, ist o
é, não perm it e que out ra j anela at iva receba dados enquant o est a
est iver at iva.

 Pr opr ie da d e s:

- Herdadas as classes superior es

 Con st r u t or : New( [ anTop] , [ anLeft ] , [ anBot t om ] , [ anRight ] , [ acCapt ion] ,


[ cPar6] , [ nPar7] , [ lPar8] , [ nPar9] , [ anClrText ] , [ anClrBack] , [ oPar12] ,
[ aoWnd] , [ alPixel] , [ oPar15] , [ oPar16] , [ lPar17] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical superior em pixels


a n Top
ou caract er es.
Num érico, opcional. Coordenada horizont al esquerda em
a nLe ft
pixels ou caract eres.
Num érico, opcional. Coordenada vert ical inferior em pixels
a n Bot om
ou caract er es.
Num érico, opcional. Coordenada horizont al direit a em pixels
a nRigh t
ou caract er es.
a cCa pt ion Caract er e, opcional. Tít ulo da j anela.
cPa r 6 Reser vado.
n Pa r 7 Reser vado.
lPa r 8 Reser vado.
n Pa r 9 Reser vado.
a nClr Te x t Num érico,opcional. Cor do t ext o.
a nClr Ba ck Num érico,opcional. Cor de fundo.
oPa r 1 2 Reser vado.
Obj et o, opcional. Janela m ãe da j anela a ser criada, padrão
a oW n d
é a j anela principal do program a.
Lógico, opcional. Se .T. considera as coordenadas passadas
a lPix e l
em pixels, se .F. considera caract er es.
oPa r 1 5 Reser vado.
oPa r 1 6 Reser vado.
n Pa r 1 7 Reser vado.

- 370 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
// cria diálogo
Local oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)

// ativa diálogo centralizado


oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando…'
)} )
Return

TD I ALOG( )

 D e scr içã o: Classe de obj et os do t ipo diálogo de ent rada de dados, sendo seu
uso reservado. Recom enda- se ut ilizar a classe MSDialog que é
herdada dest a classe.

 Pr opr ie da d e s:

- Herdadas as classes superior es

 Con st r u t or : New( [ anTop] , [ anLeft ] , [ anBot t om ] , [ anRight ] , [ acCapt ion] ,


[ cPar6] , [ nPar7] , [ lPar8] , [ nPar9] , [ anClrText ] , [ anClrBack] , [ oPar12] ,
[ aoWnd] , [ alPixel] , [ oPar15] , [ oPar16] , [ nPar17] , [ anWidt h] ,
[ anHeight ] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical superior em pixels


a nTop
ou caract er es.
Num érico, opcional. Coordenada horizont al esquerda em
a nLe ft
pixels ou caract eres.
Num érico, opcional. Coordenada vert ical inferior em pixels
a n Bot om
ou caract er es.
a n Righ t Num érico, opcional. Coordenada horizont al direit a em pixels

- 371 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


ou caract er es.
a cCa pt ion Caract er e, opcional. Tít ulo da j anela.
cPa r 6 Reser vado.
n Pa r 7 Reser vado.
lPa r 8 Reser vado.
n Pa r 9 Reser vado.
a nClr Te x t Num érico,opcional. Cor do t ext o.
a nClr Ba ck Num érico,opcional. Cor de fundo.
oPa r 1 2 Reser vado.
Obj et o, opcional. Janela m ãe da j anela a ser criada, padrão
a oW n d
é a j anela principal do program a.
Lógico, opcional. Se .T. considera as coordenadas passadas
a lPix e l
em pixels, se .F. considera caract er es.
oPa r 1 5 Reser vado.
oPa r 1 6 Reser vado.
n Pa r 1 7 Reser vado.
a nW idt h Num érico, opcional. Lar gura da j anela em pixels.
a n H e igh t Num érico, opcional. Alt ura da j anela em pixels.

 M é t odos a u x ilia r e s:

Act iv a t e

 D e scr içã o: At iva ( exibe) o diálogo. Cham ar som ent e um a v ez est e


m ét odo.
 Sin t a x e : Act ivat e( [ bPar1] , [ bPar2] , [ bPar3] , [ alCent er ed] , [ abValid] ,
[ lPar6] , [ abI nit ] , [ bPar8] , [ bPar9] )
 Pa r â m e t r os:

bPa r 1 Reser vado.


bPa r 2 Reser vado.
bPa r 3 Reser vado.
Lógico, opcional. Se .T. exibe a j anela cent ralizada, .F. é
a lCe n t e r e d
padrão.
Bloco de código, opcional. Deve ret ornar .T. se cont eúdo
a bVa lid do diálogo é válido, se ret ornar .F. o diálogo não fechará
quando solicit ada de encerrar.
lPa r 6 Reser vado.
Bloco de código, opcional. Execut ado quando o diálogo
a bI n it
inicia exibição.
bPa r 8 Reser vado.
bPa r 9 Reser vado.

 Re t or n o:

Nenhum -

- 372 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


En d

 D e scr içã o: Encerr a ( fecha) o diálogo.


 Sin t a x e : End( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o: Lógico .T. se o diálogo foi encer rado.

Lógico I ndica se o diálogo foi encer rado.

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
// cria diálogo
oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)
// ativa diálogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando..
.')} )

/* os comandos abaixo proporcionam o mesmo resultado


// cria diálogo
DEFINE DIALOG oDlg TITLE 'Meu dialogo' FROM 10,10 TO 300,300 COLOR
CLR_BLACK,CLR_WHITE PIXEL
// ativa diálogo centralizado
ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop('iniciando...')) VALID
(msgstop('validou!'),.T.)
*/
Return Nil

- 373 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TW I N D OW ( )

 D e scr içã o: Classe de obj et os do t ipo diálogo principal de program a. Dev erá
exist ir apenas um a inst ância dest e obj et o na execução do program a.

 Pr opr ie da d e s:

- Herdadas das classes superior es

 Con st r u t or : New( [ anTop] , [ anLeft ] ,[ anBot t om ] , [ anRight ] , [ acTit le] , [ nPar6] ,


[ oPar7] ,[ oPar8] ,[ oPar9] , [ aoPar ent ] , [ lPar11] , [ lPar12] , [ anClrFore] ,
[ anClrBack] , [ oPar15] , [ cPar16] , [ lPar17] , [ lPar18] , [ lPar19] ,
[ lPar20] , [ alPixel] ) ;

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical superior em pixels


n Top
ou caract er es.
Num érico, opcional. Coordenada horizont al esquerda em
n Le ft
pixels ou caract eres.
Num érico, opcional. Coordenada vert ical inferior em pixels
n Bot t om
ou caract er es.
Num érico, opcional. Coordenada horizont al inferior em pixels
n Rig h t
ou caract er es.
cTit le Caract er e, opcional. Tít ulo da j anela.
n Pa r 6 Reser vado.
oPa r 7 Reser vado.
oPa r 8 Reser vado.
oPa r 9 Reser vado.
oPa r e n t Obj et o, opcional. Janela m ãe da j anela corr ent e.
lPa r 1 1 Reser vado.
lPa r 1 2 Reser vado.
n Clr For e Num érico, opcional. Cor de fundo da j anela.
n Clr Te x t Num érico, opcional. Cor do t ext o da j anela.
oPa r 1 5 Reser vado.
cPa r 1 6 Reser vado.
lPa r 1 7 Reser vado.
lPa r 1 8 Reser vado.
lPa r 1 9 Reser vado.
lPa r 2 0 Reser vado.
Lógico, opcional. Se .T. ( padrão) considera coor denadas
lPix e l
passadas em pixels, se .F. considera caract er es.

- 374 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a u x ilia r e s:

Act iv a t e

 D e scr içã o: At iva ( exibe) a j anela. Cham ar esse m ét odo apenas um a vez.
 Sin t a x e : Act ivat e( [ acShow] , [ bPar2] , [ bPar3] , [ bPar4] , [ bPar5] , [ bPar 6] ,
[ abI nit ] , [ bPar8] , [ bPar9] , [ bPar10] , [ bPar11] , [ bPar12] ,[ bPar13] ,
[ bPar14] , [ bPar15] , [ abValid] , [ bPar17] , [ bPar18] ) .
 Pa r â m e t r os:

Caract er , opcional. “ I CONI ZED” para j anela iconizada ou


a cSh ow
“ MAXI MI ZED” para j anela m axim izada.
bPa r 2 Reser vado.
bPa r 3 Reser vado.
bPa r 4 Reser vado.
bPa r 5 Reser vado.
bPa r 6 Reser vado.
Bloco de código. Execut ado quando j anela est á sendo
a bI n it
exibida.
bPa r 8 Reser vado.
bPa r 9 Reser vado.
bPa r 1 0 Reser vado.
bPa r 1 1 Reser vado.
bPa r 1 2 Reser vado.
bPa r 1 3 Reser vado.
bPa r 1 4 Reser vado.
bPa r 1 5 Reser vado.
Bloco de código. Execut ado quando a j an ela for solicit ada
de fechar. Dev erá ret or nar .T. se o cont eúdo da j anela for
a bVa lid
válido, ou .F. se não. Se o bloco r et ornar .F. a j anela não
fechará.
bPa r 1 7 Reser vado.
bPa r 1 8 Reser vado.

 Re t or n o:

Nenhum -

En d

 D e scr içã o: Solicit a encer ram ent o da j anela.


 Sin t a x e : End( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o: Lógico .T. se o diálogo foi encer rado.

Lógico I ndica se a j anela foi encerrada.

- 375 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ce n t e r

 D e scr içã o: Cent raliza a j anela.


 Sin t a x e : Cent er( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o: Lógico .T. se o diálogo foi encer rado.

Nenhum -

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oWindow
Local abInit:= {||conout('ativando!')}
Local abValid:= {||conout('encerrando!'),.T.}
oWindow:= tWindow():New( 10, 10, 200, 200, 'Meu
programa',,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. )
oWindow:Activate('MAXIMIZED',,,,,,abInit,,,,,,,,,abValid,,)

/* os comandos abaixo proporcionam o mesmo resultado


DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE 'Meu programa'
COLOR CLR_WHITE,CLR_BLACK
ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid
*/
Return
.

- 376 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse s de com p on e n t e s

TCON TROL( )

 D e scr içã o: Classe abst rat a com um ent r e t odos os com ponent es visuais
edit áveis. Não dev e ser inst anciada diret am ent e.

 Pr opr ie da d e s:

Num érico. Alinham ent o do cont r ole no espaço


disponibilizado pelo seu obj et o par ent e. 0 = Nenhum
Align
( padrão) , 1= no t opo, 2 = no r odapé, 3= a esquerda, 4 = a
direit a e 5 = em t odo o parent e.
Lógico. Se .T. indica que o cont eúdo da variável associada
lM odifie d
ao cont r ole foi m odificado.
Lógico. Se .T. o cont eúdo da v ariável associada ao cont r ole
lRe a dOn ly
perm anecerá apenas para leit ura.
Num érico. Handle ( ident ificador) do obj et o sobr e o qual o
h Pa r e n t
cont r ole foi criado.
Bloco de código. Execut ado quando o est ado ou cont eúdo do
bCh a n ge
cont r ole é m odificado pela ação sobre o cont role.

 Con st r u t or : N ã o pod e se r in st a n cia d a .

 Pa r â m e t r os:

Nenhum -

 M é t odos a u x ilia r e s:

Se t Focu s

 D e scr içã o: Força m udança do foco de ent rada de dados para o cont r ole.
 Sin t a x e : Set Focus( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

Ex e m plo:

CLASS TSay FROM Tcontrol

- 377 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cla sse s de com p on e n t e s v isu a is

BRGETD D B( )

 D e scr içã o: Classe de obj et os visuais do t ipo Gr id.

 Pr opr ie da d e s:

+ Herdadas da classe superior


n At Linha at ualm ent e selecionada / posicionada no obj et o
n Le n Núm er o t ot al de linhas do obj et o

 Con st r u t or : New( [ nRow] , [ nCol] , [ nWidt h] , [ nHeigt h] , [ bFields] , [ aHeader s] ,


[ aColSizes] , [ oDlg] , [ cField] , [ uValue1] , [ uValue2] , [ uChange] ,
[ uLDblClick] , [ uRClick] , [ oFont ] , [ oCur sor] , [ nClrFore] , [ nClrBack] ,
[ cMsg] , [ lUpdat e] , [ cAlias] , [ lPixel] , [ bWhen] , [ lDesign] , [ bValid] ,
[ aAlt er] , [ oMot her] )

 Pa r â m e t r os:

n Row Num érico, opcional. Coordenada vert ical


n Col Num érico, opcional. Coordenada horizont al
n W idt h Num érico, opcional. Lar gura do obj et o
n H e ig h t Num érico, opcional. Alt ura do obj et o
bFie ld s Bloco de código, List a de Cam pos
a H e a de r s Vet or, Descrição dos cam pos para no cabeçalho
a ColSiz e s Vet or, Largur a das colunas
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oD lg
ser criado.
cFie ld Caract er , opcional. Cam pos necessários ao filt ro
u V a lu e 1 I ndefinido, opcional. I nicio do int ervalo para o filt ro
uV a lu e 2 I ndefinido, opcional. Fim do int ervalo par a o filt ro
Bloco de código, opcional. Execut ado quando o it em
bCh a ng e
selecionado é alt erado.
Bloco de código, opcional. Execut ado quando acionado duplo
bLD blClick
click do bot ão esquerdo do m ouse sobr e o cont r ole.
bRClick Não ut ilizado
oFon t Obj et o, opcional. Font e
oCu r sor Obj et o, opcional. Tipo do Cur sor
n Clr For e Num érico, opcional. Cor do t ext o da j anela.
n Clr Ba ck Num érico, opcional. Cor de fundo da j anela.
Caract er , opcional. Mesam ge ao posicionar o m ouse sobr e o
cM sg
obj et o
lUp da t e Não ut ilizado
Caract er , opcional se obj et o ut ilizado com Vet or , obrigat orio
cAlia s
se ut ilizado com Tabela
Lógico, opcional. Se .T. as coordenadas inform adas são em
lPix e l
pixels, se .F. são em car act eres.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lD e sig n Não Ut ilizado

- 378 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Bloco de código, opcional. Execut ado quando o cont eúdo do
bV a lid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
a Alt e r Não Ut ilizado
oM ot h e r Não Ut ilizado

 M é t odos a u x ilia r e s:

GoUp

 D e scr içã o: Salt a um a linha para cim a.


 Sin t a x e : GoUp( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoD ow n

 D e scr içã o: Salt a um a linha para baixo.


 Sin t a x e : GoD ow n ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoTop

 D e scr içã o: Salt a para prim eira linha.


 Sin t a x e : GoTop( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoBot t om

 D e scr içã o: Salt a para ult im a linha.


 Sin t a x e : GoBot t om ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

- 379 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Row Cou n t

 D e scr içã o: Ret orna num er o de linhas visiveis.


 Sin t a x e : Row Cou n t ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

 Ap a r ê n cia :

- 380 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

DbSelectArea('SA1')
oBrowse := BrGetDDB():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

M SCALEN D ( )

 D e scr içã o: Classe de obj et os visuais do t ipo Calendário.

 Pr opr ie da d e s:

+ Herdadas da classe superior


Bloco de código ex ecut ado na m udança de seleção de um
bCh a ng e
dia.
Bloco de código ex ecut ado na m undaça de seleção de um
bCh a n ge M e s
m ês.
dD ia At u Dia at ualm ent e selecionado

 Con st r u t or : New( [ nRow] , [ nCol] , [ oDlg] , [ lCanMult Sel] )

- 381 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Pa r â m e t r os:

nRow Num érico, opcional. Coordenada vert ical


nCol Num érico, opcional. Coordenada horizont al
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oDlg
ser criado.
lCanMult Sel Logico, opcional. Perm it e seleção de m ult iplos dias

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
user function Calend_Ex()
DEFINE MSDIALOG oDlg FROM 0,0 TO 1000,1000 PIXEL TITLE 'Exemplo de
MsCalend'
// Cria objeto
oCalend:=MsCalend():New(01,01,oDlg,.T.)
// Code-Block para mudança de Dia
oCalend:bChange := {|| Alert('Dia Selecionado: ' +
dtoc(oCalend:dDiaAtu)) }
// Code-Block para mudança de mes
oCalend:bChangeMes := {|| alert('Mes alterado') }
ACTIVATE MSDIALOG oDlg CENTERED
Return

- 382 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M SCALEN D GRI D ( )

 D e scr içã o: Classe de obj et os visuais do t ipo Grade de Períodos.

 Pr opr ie da d e s:

Bloco de código. Execut ado quando o bot ão esquerdo do


bAct ion
m ouse é pr essionado.
Bloco de código. Execut ado quando o bot ão dir eit o do m ouse
bRClick
é pr essionado.

 Con st r u t or : New( [ aoWnd] , [ anRow] , [ anCol] , [ anHeight ] , [ anWidt h] ,


[ dDat eI ni] , [ nResolut ion] , [ abWhen] , [ abAct ion] , [ nDefColor] ,
[ bRClick] , [ lFillAll] )

 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser


a oW n d
criado.

Num érico, opcional. Coordenada vert ical em pixels ou


a nRow
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
a nCol
caract eres.
a n H e igh t Num érico, opcional. Alt ura do bot ão em pixels.
a nW idt h Num érico, opcional. Lar gura do bot ão em pixels.

dD a t e I n i Dat a, Dat a inicial do Calendário


n Re solu t ion Num érico, Resolução a ser aplicada na grid do Calendário
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.

Bloco de código, opcional. Bloco que dev erá ser acionado


a bAct ion
quando o bot ão for pressionado.

n D e fColor Num érico, opcional. Cor do Fundo da Grid.


Bloco de código, opcional. Execut ado quando acionado o
bRClick
bot ão direit o do m ouse sobr e o cont r ole.
lFillAll Lógico, opcional. Pr eenche t odo o periodo

 M é t odos a u x ilia r e s:

Add

 D e scr içã o: Adiciona periodo na Grid.


 Sin t a x e : Add( cCapt ion, nLin, nI nit ial, nFinal, nColor, cDescri )
 Pa r â m e t r os:

cCa pt ion Caract er . Descrição a ser inserida a esquerda da Grid


n Lin Num erico. Num er o da linha a ser inserido o it em
n I n it ia l Num erico. Dia inicial
n Fin a l Num erico. Dia Final

- 383 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


n Color Num erico. Cor que dest acara o it em
cD e scr i Caract er , Opicional. Descrição do t ipo t oolt ip( hint ) do it em

 Re t or n o:

N il

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
nResolution := 1
oMsCalendGrid := MsCalendGrid():New( oDlg, 01, 01, 500,300,;
date(), nResolution, ,{|x,y| Alert(x) },;
RGB(255,255,196), {|x,y|Alert(x,y)}, .T.
)
oMsCalendGrid:Add('caption 01', 1, 10, 20, RGB(255,000,0),
'Descricao 01')
oMsCalendGrid:Add('caption 02', 2, 20, 30, RGB(255,255,0),
'Descricao 02')
oMsCalendGrid:Add('caption 03', 3, 01, 05, RGB(255,0,255),
'Descricao 03')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 384 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M SSELBR( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - Grid

 Pr opr ie da d e s:

+ Herdadas da classe superior


n At Linha at ualm ent e selecionada / posicionada no obj et o
n Le n Núm er o t ot al de linhas do obj et o

 Con st r u t or : New( [ nRow] , [ nCol] , [ nWidt h] , [ nHeigt h] , [ bFields] , [ aHeader s] ,


[ aColSizes] , [ oDlg] , [ cField] , [ uValue1] , [ uValue2] , [ uChange] ,
[ uLDblClick] , [ uRClick] , [ oFont ] , [ oCur sor] , [ nClrFore] , [ nClrBack] ,
[ cMsg] , [ lUpdat e] , [ cAlias] , [ lPixel] , [ bWhen] , [ lDesign] , [ bValid] )

 Pa r â m e t r os:

n Row Num érico, opcional. Coordenada vert ical


n Col Num érico, opcional. Coordenada horizont al
n W idt h Num érico, opcional. Lar gura do obj et o
n H e ig h t Num érico, opcional. Alt ura do obj et o
bFie ld s Bloco de código, List a de Cam pos
a H e a de r s Vet or, Descrição dos cam pos para no cabeçalho
a ColSiz e s Vet or, Largur a das colunas
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oD lg
ser criado.
cFie ld Caract er , opcional. Cam pos necessários ao filt ro
u V a lu e 1 I ndefinido, opcional. I nicio do int ervalo para o filt ro
u V a lu e 2 I ndefinido, opcional. Fim do int ervalo par a o filt ro
Bloco de código, opcional. Execut ado quando o it em
bCh a ng e
selecionado é alt erado.
Bloco de código, opcional. Execut ado quando acionado duplo
bLD blClick
click do bot ão esquerdo do m ouse sobr e o cont r ole.
bRClick Não ut ilizado
oFon t Obj et o, opcional. Font e
oCu r sor Obj et o, opcional. Tipo do Cur sor
n Clr For e Num érico, opcional. Cor do t ext o da j anela.
n Clr Ba ck Num érico, opcional. Cor de fundo da j anela.
Caract er , opcional. Mesam ge ao posicionar o m ouse sobr e o
cM sg
obj et o
lUp da t e Não ut ilizado
Caract er , opcional se obj et o ut ilizado com Vet or , obrigat orio
cAlia s
se ut ilizado com Tabela
Lógico, opcional. Se .T. as coordenadas inform adas são em
lPix e l
pixels, se .F. são em car act eres.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lD e sig n Não Ut ilizado
Bloco de código, opcional. Execut ado quando o cont eúdo do
bV a lid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.

- 385 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a u x ilia r e s:

GoUp

 D e scr içã o: Salt a um a linha para cim a.


 Sin t a x e : GoUp( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoD ow n

 D e scr içã o: Salt a um a linha para baixo.


 Sin t a x e : GoD ow n ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoTop

 D e scr içã o: Salt a para prim eira linha.


 Sin t a x e : GoTop( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoBot t om

 D e scr içã o: Salt a para ult im a linha.


 Sin t a x e : GoBot t om ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

- 386 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Row Cou n t

 D e scr içã o: Ret orna num er o de linhas visiveis.


 Sin t a x e : Row Cou n t ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

 Ap a r ê n cia :

- 387 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

DbSelectArea('SA1')
oBrowse := MsSelBr():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,{||
Alert(oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL
.

M SW ORKTI M E( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - Bar ra de Período.

 Pr opr ie da d e s:

Bloco de código. Execut ado ao disparar qualquer ação sobre


bCh a ng e
o obj et o.

 Con st r u t or : New( [ aoWnd] , [ anRow] , [ anCol] , [ anHeight ] , [ anWidt h] ,


[ nResolut ion] , [ cValue] , [ abWhen] , [ abChange] )

 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser


a oW n d
criado.
Num érico, opcional. Coordenada vert ical em pixels ou
a nRow
carat er es.
a nCol Num érico, opcional. Coordenada horizont al em pixels ou

- 388 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


caract eres.
a n H e igh t Num érico, opcional. Alt ura do bot ão em pixels.
a nW idt h Num érico, opcional. Lar gura do bot ão em pixels.
n Re solu t ion Num érico, Resolução a ser aplicada na grid do Calendário
cVa lu e Caract er , opcional. Descrit ivo
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
Bloco de código, opcional. Bloco que dev erá ser acionado
a bCh a n ge
quando o bot ão for pressionado.

 M é t odos a u x ilia r e s:

Ge t Va lu e

 D e scr içã o: Ret orna os it em selecionados no for m at o “ XX X XX” .


 Sin t a x e : Get Value( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Ca r a ct e r Ret orna os it em selecionados no form at o “ XX X XX” .

Ge t I n t e r Tim e

 D e scr içã o: Ret orna per iodo selecionado.


 Sin t a x e : Get I nt erTim e( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Ca r a ct e r Ret orna o período selecionada no form at o “ HH: MM: SS”

Se t Re sol

 D e scr içã o: Define a r esolução da dem onst ração da bar ra de períodos.


 Sin t a x e : Set Resol ( nResolut ion)
 Pa r â m e t r os:

n Re solu t ion Resolução

 Re t or n o:

N il

- 389 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Se t V a lu e

 D e scr içã o: At ribui um det erm indo cont eúdo para um obj et o ou at ribut o
de um obj et o.
 Sin t a x e : Set Value( xValue, cPict ure)
 Pa r â m e t r os:

xValue Valor que será at ribuído ao obj et o ou at ribut o do obj et o.


cPict ure Pict ure de form ação opcional para o cont eúdo at ribuído.

 Re t or n o:

Nenhum

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMsWorkTime := MsWorkTime():New(oDlg,04,04,280,133,0,'',{||.T.},;
{|oWorkTime|Alert('GetValue():
'+oWorkTime:GetValue()+chr(13)+;
'GetInterTime():
'+oWorkTime:GetInterTime())} )
oMsWorkTime:SetValue('X X XX X')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 390 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


SBUTTON ( )

 D e scr içã o: Classe de obj et os visuais do t ipo bot ão que Define o com ponent e
visual SBut t on, o qual perm it e a inclusão de bot ões de operação na
t ela da int erface, os quais serão visualizados dependendo da
int erface do sist em a ERP ut ilizada som ent e com um t ext o sim ples
para sua ident ificação, ou com um a im agem ( Bit Map) pré- definido.

 Pr opr ie da d e s:

Bloco de código. Execut ado ao pr ecionar o bot ão esquerdo


bAct ion
do m ouse.

 Con st r u t or : New( [ nTop] , [ nLeft ] , [ nType] , [ bAct ion] , [ oWnd] , [ lEnable] ,


[ cMsg] , [ bWhen] )

 Pa r â m e t r os:

Pa r â m e t r o Tipo / Descrição
Num érico, opcional. Coordenada vert ical em pixels ou
n Top
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
n Le ft
caract eres.
n Type Num érico. Tipo do Bot ão
Bloco de código, opcional. Bloco que dev erá ser acionado
bAct ion
quando o bot ão for pressionado.
Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser
oW n d
criado.
lEn a ble Logico, opcional. Habilit a/ Desabilit a bot ão
cM sg Caract er , Opicional. Descrição do t ipo t oolt ip( hint ) do it em
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.

 M é t odos a u x ilia r e s:

Cr e a t e

 D e scr içã o: Ret orna Mét odo const rut or opcional da classe.
 Sin t a x e : Creat e( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Obj et o da classe Sbut t on com t odos os at ribut os com


Obj e t o
cont eúdos padrões.

- 391 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oSButton1 := SButton():New( 01,01,1,{||Alert('SButton
01')},oDlg,.T.,,)
oSButton2 := SButton():New( 21,01,2,{||Alert('SButton
02')},oDlg,.T.,,)
oSButton3 := SButton():New( 41,01,3,{||Alert('SButton
03')},oDlg,.T.,,)
oSButton4 := SButton():New( 61,01,4,{||Alert('SButton
04')},oDlg,.T.,,)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 392 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TBAR( )

 D e scr içã o: Classe de obj et os visuais que perm it e a im plem ent ação de um
com ponent e do t ipo barra de bot ões para a part e superior de um a
j anela previam ent e definida.

 Pr opr ie da d e s:

- Herdados das classes superior es.

 Con st r u t or :

 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser


oW n d
criado.
n Bt n W idt h Num érico, opcional. Lar gura do bot ão cont ido na barr a
n Bt n H e igh t Num érico, opcional. Alt ura do bot ão cont ido na barra
l3 D Lógico, opcional. Define t ipo da barra
cM ode Não ut ilizado.
Obj et o, opcional. Define Cursor ao posicionar o m ouse sobr e a
oCu r sor
barra.
Caract er , opcional. I m agem do r ecurso a ser inserido com o
cRe sou r ce
fundo da bar ra.
lN oAu t oAd j u st Lógico.

 Ap a r ê n cia :

- 393 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'

/*/
+------------------------------------------------------------------------
| Função | TSTBAR | Autor | MICROSIGA |Data | |
+------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto TBar() |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/

User Function TstTBar()


Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

Exemplo (continuação):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;


{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;


{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;


{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;


{||},oTBar,'Preço' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return

- 394 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TBI TM AP( )

 D e scr içã o: Classe de obj et os visuais que perm it e a exibição de um a im agem .

 Pr opr ie da d e s:

cResNam e Caract er e, Nom e do r esource


cBm pFile Caract er e, Nom e do arquivo
lSt ret ch Lógico, opcional. St rech da im agem
lAut oSize Lógico, opcional. Tam anho aut om át ico
lTransparent Lógico, opcional. Transparent e

 Con st r u t or : New( [ anTop] , [ anLeft ] , [ anWidt h] , [ anHeight ] , [ acResNam e] ,


[ acBm pFile] , [ alNoBor der] , [ aoWnd] , [ abLClicked] , [ abRClicked] ,
[ alScroll] , [ alSt ret ch] , [ aoCursor] , [ acMsg] , [ alUpdat e] , [ abWhen] ,
[ alPixel] , [ abValid] , [ alDesign] , [ alI sI con] , [ alI sJpeg] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


a nTop
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
a nLe ft
caract eres.
a nW idt h Num érico, opcional. Lar gura em pixels.
a n H e igh t Num érico, opcional. Alt ura em pixels.
a cRe sN a m e Caract er e, Nom e do r esource.
a cBm pFile Caract er e, Nom e do arquivo.
a lN oBor d e r Lógico, opcional. Exibe borda
Obj et o, opcional. Janela ou cont r ole onde a im agem deverá
a oW n d
ser criada.
Bloco de código, opcional. Bloco que dev erá ser acionado
a bLClick e d
bot ão esquerdo do m ouse for pressionado.
Bloco de código, opcional. Bloco que dev erá ser acionado
a bRClick e d
bot ão direit o do m ouse for pr essionado.
a lScr oll Lógico, opcional. At iva o scroll
a lSt r e t ch Lógico, opcional. St rech da im agem
a oCu r sor Obj et o, opcional. Cursor a ser exibido
a cM sg Não ut ilizado
a lUpd a t e Não ut ilizado
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
a lPix e l Lógico, opcional. Ut iliza coordenadas em pixel
Bloco de código, opcional. Bloco que dev erá ser acionado na
a bVa lid
validação.
a lD e sign Não ut ilizado
Lógico, opcional. Í cone. Não ut ilizado a part ir da versão
a lI sI con
Prot heus 8
Lógico, opcional. Jpeg. Não ut ilizado a part ir da versão
a lI sJpe g
Prot heus 8

- 395 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a u x ilia r e s:

Cr e a t e

 D e scr içã o: Ret orna Mét odo const rut or opcional da classe.
 Sin t a x e : Creat e( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Obj et o da classe TBar com t odos os at r ibut os com


Obj e t o
cont eúdos padrões.

Se t Bm p

 D e scr içã o: Mét odo par a car r egar um a im agem do reposit ório.
 Sin t a x e : Set Bm p( acResNam e )
 Pa r â m e t r os:

acResNam e Caract er e, Nom e do r esource

 Re t or n o:

Nenhum -

Loa d

 D e scr içã o: Mét odo par a car r egar um a im agem do reposit ório ou local.
 Sin t a x e : Load( acResNam e, acBm pFile )
 Pa r â m e t r os:

acResNam e Caract er e, Nom e do r esource.


acBm pFile Caract er e, Nom e do arquivo.

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 396 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include “protheus.ch”

User Function tBitmapTst()


Local oDlg
Local oBmp

DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 280,330 PIXEL

@ 10, 10 BITMAP oBmp RESOURCE 'totvs.bmp' SIZE 150,150 OF oDlg PIXEL


oBmp:lAutoSize := .T.

ACTIVATE MSDIALOG oDlg CENTERED

Return

TBROW SEBUTTON ( )

 D e scr içã o: Classe de obj et os visuais do t ipo bot ão no form at o padrão ut ilizado
em br ow ses da aplicação.

 Pr opr ie da d e s:

Bloco de código. Execut ado ao pr ecionar o bot ão esquerdo


bAct ion
do m ouse.

 Con st r u t or : New( [ nRow] , [ nCol] , [ cCapt ion] , [ oWnd] , [ bAct ion] , [ nWidt h] ,
[ nHeight ] , [ nHelpI d] , [ oFont ] , [ lDefault ] , [ lPixel] , [ lDesign] , [ cMsg] ,
[ lUpdat e] , [ bWhen] , [ bValid] , [ lCancel] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


n Row
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
n Col
caract eres.
cCa pt ion Caract er e, opcional. Tit ulo do bot ão.
Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser
oW n d
criado.
Bloco de código, opcional. Bloco que dev erá ser acionado
bAct ion
quando o bot ão for pressionado.
n W idt h Num érico, opcional. Lar gura do bot ão em pixels
n H e ig h t Num érico, opcional. Alt ura do bot ão em pixels.

n H e lp I d Reser vado
Obj et o, opcional. Obj et o t ipo t Font com propriedades da
oFon t
font e ut ilizada para o t ít ulo do bot ão.
lD e f a u lt Reser vado
Lógico, opcional. Se .T. considera as coordenadas passadas
lPix e l
em pixels, se .F. ( padrão) considera em caract eres.

- 397 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


lD e sig n Reser vado
cM sg Reser vado
lUp da t e Reser vado
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
bV a lid Reser vado
lCa n ce l Reser vado

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBrowseButton := TBrowseButton():New( 01,01,'TBrowseButton',oDlg,;

{||Alert('TBrowseButton')},40,10,,,.F.,.T.,.F.,,.F.,,,)

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

- 398 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TBTN BM P( )

 D e scr içã o: Classe de obj et os visuais do t ipo bot ão, o qual perm it e que sej a
vinculada um a im agem ao cont r ole.

 Pr opr ie da d e s:

Bloco de código. Execut ado ao pr ecionar o bot ão esquerdo


bAct ion
do m ouse.

 Con st r u t or : NewBar( [ cResNam e1] , [ cResNam e2] , [ cBm pFile1] , [ cBm pFile2] ,
[ cMsg] , [ bAct ion] , [ lGroup] , [ oWnd] , [ lAdj ust ] , [ bWhen] , [ cToolTip] ,
[ lPressed] , [ bDr op] , [ cAct ion] , [ nPos] , [ cPr om pt ] , [ oFont ] ,
[ cResNam e3] , [ cBm pFile3] , [ lBorder] )

 Pa r â m e t r os:

cRe sN a m e 1 Caract er e, Nom e do r esource


cRe sN a m e 2 Caract er e, Nom e do r esource
cBm pFile 1 Caract er e, NÃO UTI LI ZADO
cBm pFile 2 Caract er e, NÃO UTI LI ZADO
cM sg Caract er e, Mensagem de Hint
bAct ion Bloco de código. Ação execut ada
lGr ou p Lógico. Define grupo
Obj et o, opcional. Janela ou cont r ole onde a bot ão deverá ser
oW n d
criado
lAd j u st Lógico, NÃO UTI LI ZADO
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
cToolTip Mensagem exibida quando obj et o exibe seu t oolt ip.
lPr e sse d Não ut ilizado
bD r op Não ut ilizado
cAct ion Não ut ilizado
n Pos Não ut ilizado
cPr om pt Caract er , opcional. Capt ion do bot ão.
Obj et o, opcional. Obj et o t ipo t Font ut ilizado para definir as
oFon t caract eríst icas da font e ut ilizada para exibir o cont eúdo do
cont r ole.
cRe sN a m e 3 Não ut ilizado
cBm pFile 3 Não ut ilizado
lBor de r Não ut ilizado

- 399 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a u x ilia r e s:

Loa dBit m a ps

 D e scr içã o: At ribui ao bot ão os bit m aps ou r ecursos para exibição.


 Sin t a x e : LoadBit m aps( [ cResNam e1] , [ cResNam e2] , [ cBm pFile1] ,
[ cBm pFile2] , [ cResNam e3] , [ cBm pFile3] )

 Pa r â m e t r os:

cResNam e1 Caract er e, Nom e do r esource


cResNam e2 Caract er e, Nom e do r esource
cBm pFile1 Caract er e, Nom e do arquivo BMP
cBm pFile2 Caract er e, Nom e do arquivo BMP
cResNam e3 Caract er e, Nom e do r esource
cBm pFile3 Caract er e, Nom e do r esource

 Re t or n o:

Nenhum

Se t Pop UpM e n u

 D e scr içã o: Set a o obj et o do t ipo TMenu referent e ao bot ão.


 Sin t a x e : Set PopupMenu( oMenu)
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 400 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. ) // Orig: 25,45
oTBtnBmp1 := TBtnBmp() :NewBar('RPMNEW',,,,'Msg 01',;
{||Alert('TBtnBmp
01')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
oTBtnBmp2 := TBtnBmp() :NewBar('copyuser',,,,'Msg 02',;
{||Alert('TBtnBmp
02')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

TBTN BM P2 ( )

 D e scr içã o: Classe de obj et os visuais do t ipo bot ão, o qual perm it e a exibição de
um a im agem ou de um popup.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New( [ anTop] , [ anLeft ] , [ anWidt h] , [ anHeight ] , [ acResNam e1] ,


[ acResNam e2] , [ acBm pFile1] , [ acBm pFile2] ,[ abAct ion] , [ aoWnd] ,
[ acMsg] , [ abWhen] , [ lAdj ust e] , [ lUpdat e] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


a nTop
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
a nLe ft
caract eres.
a nW idt h Num érico, opcional. Lar gura em pixels.
a n H e igh t Num érico, opcional. Alt ura em pixels.
a cRe sN a m e 1 Caract er e, Nom e do r esource
a cRe sN a m e 2 Caract er e, NÃO UTI LI ZADO
a cBm pFile 1 Caract er e, NÃO UTI LI ZADO
a cBm pFile 2 Caract er e, NÃO UTI LI ZADO
a bAct ion Bloco de código. Ação execut ada
Obj et o, opcional. Janela ou cont r ole onde a bot ão deverá ser
a oW n d
criado
a cM sg Caract er e, Mensagem de Hint
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lAd j u st Lógico, NÃO UTI LI ZADO
lUp da t e Lógico, NÃO UTI LI ZADO

 M é t odos a u x ilia r e s:

- 401 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Loa dBit m a ps

 D e scr içã o: At ribui ao bot ão os bit m aps ou r ecursos para exibição.


 Sin t a x e : LoadBit m aps( [ cResNam e1] , [ cResNam e2] , [ cBm pFile1] ,
[ cBm pFile2] , [ cResNam e3] , [ cBm pFile3] )

 Pa r â m e t r os:

cRe sN a m e 1 Caract er e, Nom e do r esource


cRe sN a m e 2 Caract er e, Nom e do r esource
cBm pFile 1 Caract er e, Nom e do arquivo BMP
cBm pFile 2 Caract er e, Nom e do arquivo BMP
cRe sN a m e 3 Caract er e, Nom e do r esource
cBm pFile 3 Caract er e, Nom e do r esource

 Re t or n o:

Nenhum

Se t Pop UpM e n u

 D e scr içã o: Set a o obj et o do t ipo TMenu referent e ao bot ão.


 Sin t a x e : Set PopupMenu( oMenu)
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 402 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

Local oBtn := TBtnBmp2():New( 10, 10, 25, 25, 'printer_r2' , , , , , oDlg,


, , )
Exemplo 2 (Popup)
#INCLUDE 'PROTHEUS.CH'
User Function BtnBmpPopUp
Local oDlg
Local oBtn
DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 100,200 PIXEL
oBtn := TBtnBmp2():New( 10, 10, 13, 13, 'IBF-MENU.BMP' , 'IBF-MENU.BMP' ,
, , , oDlg, , , .T.)
oBtn:SetPopupmenu(TShowMenu())
ACTIVATE MSDIALOG oDlg CENTERED
Return

/**************************/
Static Function TShowMenu()
Local oMenu
oMenu := TMenu():New(0,0,0,0,.T.)
oMenu:Add(TMenuItem():New(,'Detalhes', 'Detalhes',,, ,,,,,,,,,.T.))
oMenu:Add(TMenuItem():New(,'Add Info', 'Add Info',,, ,,,,,,,,,.T.))
Return oMenu

TBUTTON ( )

 D e scr içã o: Classe de obj et os visuais do t ipo bot ão, o qual perm it e a ut ilização
de t ext o para sua ident ificação.

 Pr opr ie da d e s:

lPr oce ssin g Lógico. Se .T. indica o bot ão est á efet uando um a ação.
bAct ion Bloco de código. Execut ado quando o bot ão é pressionado.

 Con st r u t or : New( [ anRow] , [ anCol] , [ acCapt ion] , [ aoWnd] , [ abAct ion] ,


[ anWidt h] , [ anHeight ] , [ nPar8] , [ aoFont ] , [ lPar10] ,
[ alPixel] ,[ lPar12] ,[ cPar13] , [ lPar14] , [ abWhen] , [ bPar16] , [ lPar17] )

 Pa r â m e t r os:

Pa r â m e t r o Tipo / Descrição
Num érico, opcional. Coordenada vert ical em pixels ou
a nRow
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
a nCol
caract eres.
a cCa pt ion Caract er e, opcional. Tit ulo do bot ão.
Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser
a oW n d
criado.
Bloco de código, opcional. Bloco que dev erá ser acionado
a bAct ion
quando o bot ão for pressionado.
a nW idt h Num érico, opcional. Lar gura do bot ão em pixels.
a n H e igh t Num érico, opcional. Alt ura do bot ão em pixels.
n Pa r 8 Reser vado.
Obj et o, opcional. Obj et o t ipo t Font com propriedades da
a oFon t
font e ut ilizada para o t ít ulo do bot ão.

- 403 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


lPa r 1 0 Reser vado.
Lógico, opcional. Se .T. considera as coordenadas passadas
a lPix e l
em pixels, se .F. ( padrão) considera em caract eres.
lPa r 1 2 Reser vado.
cPa r 1 3 Reser vado.
lPa r 1 4 Reser vado.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
bPa r 1 6 Reser vado.
lPa r 1 7 Reser vado.

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo
aItems:= {'item1','item2','item3'}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Combo'
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop('Mudou item')},,,,.T.,,,,,,,,,'cCombo')

// Botão para fechar a janela


oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor é '+cCombo )
Return NIL

- 404 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TCBROW SE( )

 D e scr içã o: Classe de obj et os visuais do t ipo Gr id.

 Pr opr ie da d e s:

+ Herdadas da classe superior


n At Linha at ualm ent e selecionada / posicionada no obj et o
n Le n Núm er o t ot al de linhas do obj et o

 Con st r u t or : New( [ nRow] , [ nCol] , [ nWidt h] , [ nHeigt h] ,[ bFields] , [ aHeader s] ,


[ aColSizes] , [ oDlg] , [ cField] , [ uValue1] , [ uValue2] ,
[ uChange] ,[ { | nRow,nCol,nFlags| [ uLDblClick] } ] ,
[ { | nRow,nCol,nFlags| [ uRClick] } ] , [ oFont ] , [ oCursor] , [ nClrFor e] ,
[ nClrBack] , [ cMsg] , [ lUpdat e] , [ cAlias] , [ lPixel] , [ { uWhen} ] ,
[ lDesign] , [ bValid] , [ lHScr oll] , [ lVScroll] )

 Pa r â m e t r os:

n Row Num érico, opcional. Coordenada vert ical


n Col Num érico, opcional. Coordenada horizont al
n W idt h Num érico, opcional. Lar gura do obj et o
n H e ig h t Num érico, opcional. Alt ura do obj et o
bFie ld s Bloco de código, List a de Cam pos
a H e a de r s Vet or, Descrição dos cam pos para no cabeçalho
a ColSiz e s Vet or, Largur a das colunas
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oD lg
ser criado.
cFie ld Caract er , opcional. Cam pos necessários ao filt ro
u V a lu e 1 I ndefinido, opcional. I nicio do int ervalo para o filt ro
u V a lu e 2 I ndefinido, opcional. Fim do int ervalo par a o filt ro
Bloco de código, opcional. Execut ado quando o it em
bCh a ng e
selecionado é alt erado.
Bloco de código, opcional. Execut ado quando acionado duplo
bLD blClick
click do bot ão esquerdo do m ouse sobr e o cont r ole.
bRClick Não ut ilizado
oFon t Obj et o, opcional. Font e
oCu r sor Obj et o, opcional. Tipo do Cur sor
n Clr For e Num érico, opcional. Cor do t ext o da j anela.
n Clr Ba ck Num érico, opcional. Cor de fundo da j anela.
Caract er , opcional. Mesam ge ao posicionar o m ouse sobr e o
cM sg
obj et o
lUp da t e Não ut ilizado
Caract er , opcional se obj et o ut ilizado com Vet or , obrigat orio
cAlia s
se ut ilizado com Tabela
Lógico, opcional. Se .T. as coordenadas inform adas são em
lPix e l
pixels, se .F. são em car act eres.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lD e sig n Não Ut ilizado
Bloco de código, opcional. Execut ado quando o cont eúdo do
bV a lid
cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo

- 405 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


for válido e .F. quando o cont eúdo for inválido.
Lógico, opcional. Se .T., habilit a barra de rolagem
lH Scr oll
horizont al.
lVScr oll Lógico, opcional. Se .T., habilit a barra de rolagem vert ical.

 M é t odos a u x ilia r e s:

GoUp

 D e scr içã o: Salt a um a linha para cim a.


 Sin t a x e : GoUp( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoD ow n

 D e scr içã o: Salt a um a linha para baixo.


 Sin t a x e : GoD ow n ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoTop

 D e scr içã o: Salt a para prim eira linha.


 Sin t a x e : GoTop( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoBot t om

 D e scr içã o: Salt a para ult im a linha.


 Sin t a x e : GoBot t om ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

- 406 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Row Cou n t

 D e scr içã o: Ret orna num er o de linhas visiveis.


 Sin t a x e : Row Cou n t ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

 Ap a r ê n cia :

- 407 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
user function TcBrowse_EX()
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
Local aList := {} // Vetor com elementos do Browse
Local nX
// Cria Vetor para teste
for nX := 1 to 100
aListAux := {.T., strzero(nX,10), 'Descrição do Produto '+;
strzero(nX,3), 1000.22+nX}
aadd(aList, aListAux)
next

DEFINE MSDIALOG oDlg FROM 0,0 TO 520,600 PIXEL TITLE 'Exemplo da TCBrowse'
// Cria objeto de fonte que sera usado na Browse
Define Font oFont Name 'Courier New' Size 0, -12
// Cria Browse
oList := TCBrowse():New( 01 , 01, 300, 200,,;
'','Codigo','Descrição','Valor'},{20,50,50,50},;
oDlg,,,,,{||},,oFont,,,,,.F.,,.T.,,.F.,,, )
// Seta o vetor a ser utilizado
oList:SetArray(aList)
// Monta a linha a ser exibina no Browse
oList:bLine := {||{ If(aList[oList:nAt,01],oOK,oNO),;
aList[oList:nAt,02],;
aList[oList:nAt,03],;
Transform(aList[oList:nAT,04],'@E 99,999,999,999.99') } }
// Evento de DuploClick (troca o valor do primeiro elemento do Vetor)
oList:bLDblClick := {|| aList[oList:nAt][1] :=;
!aList[oList:nAt][1],oList:DrawSelect() }
// Principais commandos
oBtn := TButton():New( 210, 001,'GoUp()' , oDlg,{||oList:GoUp()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 001,'GoDown()', oDlg,{||oList:GoDown()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 230, 001,'GoTop()' , oDlg,{||oList:GoTop()}, ;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 240, 001,'GoBottom()', oDlg,{||oList:GoBottom()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 210, 060, 'nAt (Linha selecionada)' ,;
oDlg,{|| Alert(oList:nAt)},;
90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 060, 'nRowCount (Nr de linhas visiveis)',
oDlg,;{|| Alert(oList:nRowCount()) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )

oBtn := TButton():New( 230, 060, 'nLen (Numero total de linhas)', oDlg,;


{|| Alert(oList:nLen) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )

oBtn := TButton():New( 240, 060, 'lEditCell (Edita a celula)', oDlg,;


{|| lEditCell(@aList,oList,'@!',3) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return

- 408 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TCH ECKBOX ( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - CheckBox.

 Pr opr ie da d e s:

bLClick e d Bloco de código disparado ao clique do m ouse no obj et o


Bloco de código disparado na m udança de it em selecionado,
bSe t Ge t responsavel pela m udança de valor da variavel num erica
que indica o it em selecionado.
Bloco de código r ecebe um lógico e de True per m it e
bW h e n
alt eração, se False não perm it e.
bV a lid Bloco de código ex ecut ado na saida do obj et o.

 Con st r u t or : New( [ nRow] , [ nCol] , [ cCapt ion] , [ bSet Get ] , [ oDlg] , [ nWidt h] ,
[ nHeight ] , [ aHelpI ds] , [ bLClicked] , [ oFont ] , [ bValid] , [ nClrText ] ,
[ nClrPane] , [ lDesign] , [ lPixel] , [ cMsg] , [ lUpdat e] , [ bWhen] )

 Pa r â m e t r os:

n Row Num érico, opcional. Coordenada vert ical


n Col Num érico, opcional. Coordenada horizont al
cCa pt ion Caract er , Text o descrit ivo
bSe t Ge t Code- block , opcional, Responsáv el pela set agem de valor
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oD lg
ser criado.
n W idt h Num érico, opcional. Lar gura do obj et o
n H e ig h t Num érico, opcional. Alt ura do obj et o
a H e lpI d s Não ut ilizado
bLClick e d Bloco de código, opcional. Execut ado ao clique do m ouse.
oFon t Obj et o, opcional. Font e
Bloco de código, opcional. Execut ado quando o cont eúdo do
bV a lid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
n Clr Te x t Num érico, opcional. Cor do t ext o da j anela.
n Clr Pa n e Num érico, opcional. Cor de fundo da j anela.
lD e sig n Não ut ilizado
Lógico, opcional. Se .T. as coordenadas inform adas são em
lPix e l
pixels, se .F. são em car act eres.
Caract er , opcional. Mesam ge ao posicionar o m ouse sobr e o
cM sg
obj et o
lUp da t e Não ut ilizado
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.

- 409 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
user function TCheckBox()
DEFINE MSDIALOG oDlg FROM 0,0 TO 270,400 PIXEL TITLE 'Exemplo da
TCBrowse'
lCheck1 := .T.
oCheck1 := TCheckBox():New(01,01,'CheckBox 001',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck2 := TCheckBox():New(11,01,'CheckBox 002',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck3 := TCheckBox():New(21,01,'CheckBox 003',,oDlg,
100,210,,,,,,,,.T.,,,)

oCheck4 :=TCheckBox():New(31,01,'CheckBox 004',,oDlg,


100,210,,,,,,,,.T.,,,)
oCheck5 := TCheckBox():New(41,01,'CheckBox
005',,oDlg,100,210,,,,,,,,.T.,,,)

// Seta Eventos do primeiro Check


oCheck1:bSetGet := {|| lCheck1 }
oCheck1:bLClicked := {|| lCheck1:=!lCheck1 }
oCheck1:bWhen := {|| .T. }
oCheck1:bValid := {|| Alert('bValid') }
// Principais comandos
oBtn := TButton():New( 060, 001, 'Retorna estado do CheckBox
001',;
oDlg,{|| Alert(lCheck1) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return

- 410 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TCOLORTRI AN GLE( )

 D e scr içã o: Classe de obj et os visuais do t ipo Palet a de Cor es.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New( [ anRow] , [ anCol] , [ aoWnd] , [ anWidt h] , [ anHeight ] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


a nRow
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
a nCol
caract eres.
Obj et o, opcional. Janela ou cont r ole onde a palet a dev erá
a oW n d
ser criada.
a nW idt h Num érico, opcional. Lar gura da palet a em pixels.
a n H e igh t Num érico, opcional. Alt ura da palet a em pixels.

 M é t odos a u x ilia r e s:

Cr e a t e

 D e scr içã o: Mét odo const rut or opcional da classe.


 Sin t a x e : Creat e( aoWnd)
 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde a palet a dev erá


aoWnd
ser criada.

 Re t or n o:

Obj et o do t ipo TColorTr iangule com os at ribut os definidos


Obj e t o
com cont eúdo padrão.

Re t Color

 D e scr içã o: Ret orna o RGB da cor selecionada


 Sin t a x e : Re t Color ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N u m é r ico Valor que represent a do RGB da cor.

- 411 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Se t Color I n i

 D e scr içã o: Define a cor inicial selecionada para o cont r ole.


 Sin t a x e : Se t Color I n i ( nColor )
 Pa r â m e t r os:

nColor Valor da cor inicial no padrão RGB.

 Re t or n o:

Nenhum -

Se t Color

 D e scr içã o: Define a cor corr ent e.


 Sin t a x e : Se t Color ( nColor )
 Pa r â m e t r os:

nColor Valor da cor inicial no padrão RGB.

 Re t or n o:

Nenhum -

Se t Siz e Tr ia n g u le

 D e scr içã o: Define o t am anho do t riângulo de configuração das cores.


 Sin t a x e : Se t Siz e Tr ia n gu le ( nWidh, nHeight )
 Pa r â m e t r os:

nWidt h Num érico. Largura


nHeight Num érico.Alt ura

 Re t or n o:

N e n h um -

 Ap a r ê n cia :

- 412 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include “protheus.ch”

User Function tColor()


Local oDlg, oColorT
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE “Cores”
// Usando o método create
oColorT := tColorTriangle():Create( oDlg )
oColorT:SetColorIni( nColorIni )
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil

TCOM BOBOX ( )

 D e scr içã o: Classe de obj et os visuais do t ipo t Com boBox, a qual cria um a
ent rada de dados com m últ ipla escolha com it em definido em um a
list a vert ical, acionada por F4 ou pelo bot ão esquerdo localizado na
part e direit a do cont role. A variável associada ao cont role t erá o
valor de um dos it ens selecionados ou no caso de um a list a
indexada, o valor de seu índice.

 Pr opr ie da d e s:

Array . List a de it ens, caract er es, a serem exibidos. Pode t er


os seguint es form at os: a) Seqüencial, exem plo:
aI tem s
{ “ it em 1” ,” it em 2” ,...,” it em N” } ou b) I ndexada, exem plo:
{ “ a= it em 1” ,” b= it em 2” , ..., “ n= it em N” } .
n At Num érico. Posição do it em selecionado.

 Con st r u t or : New( [ anRow] , [ anCol] , [ abSet Get ] , [ anI t em s] , [ anWidt h] ,


[ anHeight ] , [ aoWnd] , [ nPar8] , [ abChange] , [ abValid] , [ anClrText ] ,
[ anClrBack] , [ alPixel] , [ aoFont ] , [ cPar15] , [ lPar16] , [ abWhen] ,
[ lPar18] , [ aPar19] , [ bPar20] , [ cPar21] , [ acReadVar] )

 Pa r â m e t r os:

Pa r â m e t r o
Num érico, opcional. Coordenada vert ical em pixels ou
a nRow
caract eres.
Num érico, opcional. Coordenada horizont al em pixels ou
a nCol
caract eres.
Bloco de código, opcional. Bloco de código no form at o { | u|
if( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont role ut iliza
para at ualizar a variável < var > . < var > deve ser t ipo
a bSe t Ge t caract er. Se a list a for seqüencial, o cont role at ualizará
< var> com o cont eúdo do it em selecionado, se a list a for
indexada, < var> será at ualizada com o valor do índice do
it em selecionado.
Array , opcional. List a de it em s, caract er es, a ser em exibidos.
Pode t er os seguint es form at os: a) Seqüencial, ex em plo:
anI tem s
{ “ it em 1” ,” it em 2” ,...,” it em N” } ou b) I ndexada, exem plo:
{ “ a= it em 1” ,” b= it em 2” , ..., “ n= it em N” } .
a nW idt h Num érico, opcional. Lar gura do cont role em pixels.

- 413 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


a n H e igh t Num érico, opcional. Alt ura do cont role em pixels.
Obj et o, opcional. Janela ou cont r ole onde o cont role será
a oW n d
criado.
n Pa r 8 Reser vado.
Bloco de código, opcional. Execut ado quando o cont r ole
a bCh a n ge
m odifica o it em selecionado.
Bloco de código, opcional. Execut ado quando o cont eúdo do
a bVa lid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
a nClr Ba ck Num érico, opcional. Cor de fundo do cont role.
a nClr Te x t Num érico, opcional. Cor do t ext o do cont role.
Lógico, opcional. Se .T. as coordenadas inform adas são em
a lPix e l
pixels, se .F. são em car act eres.
Obj et o, opcional. Obj et o t ipo t Font ut ilizado para definir as
a oFon t caract eríst icas da font e ut ilizada para exibir o cont eúdo do
cont r ole.
cPa r 1 5 Reser vado.
lPa r 1 6 Reser vado.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lPa r 1 8 Reser vado.
a Pa r 1 9 Reser vado.
bPa r 2 0 Reser vado.
cPa r 2 1 Reser vado.
Caract er e, opcional. Nom e da variável que o cont role dev erá
a cRe a dVa r m anipular, dev erá ser a m esm a variável inform ada no
parâm et ro abSet Get , e será o r et orno da função ReadVar( ) .

 M é t odos a u x ilia r e s:

Se le ct

 D e scr içã o: Muda o it em selecionado no com bobox .


 Sin t a x e : Select ( [ anI t em ] )
 Pa r â m e t r os:

anI t em Num érico, opcional. Posição do it em a ser selecionado.

 Re t or n o:

Nenhum -

- 414 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo
aItems:= {'item1','item2','item3'}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Combo'
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop('Mudou item')},,,,.T.,,,,,,,,,'cCombo')

// Botão para fechar a janela


oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor é '+cCombo )
Return NIL

- 415 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TFOLD ER( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - Folder.

 Pr opr ie da d e s:

a Pr om pt s Array , Tit ulo dos folders


a D ia logs Array , Nom e dos diálogos
n Opt ion Num érico, Folder selecionado
bSe t Opt ion Bloco de código, Execut ado na seleção do folder

 Con st r u t or : New( [ anTop] , [ anLeft ] , [ aPr om pt s] , [ aDialogs] , [ aoWnd] ,


[ anOpt ion] , [ anClrFore] , [ anClrBack] , [ alPixel] , [ alDesign] , [ anWidt h] ,
[ anHeight ] , [ acMsg] , [ alAllWidt h] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


a nTop
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
a nLe ft
caract eres.
a Pr om pt s Array , Tit ulo dos folders
a D ia logs Array , Nom e dos diálogos
Obj et o, opcional. Janela ou cont r ole onde a bot ão deverá ser
a oW n d
criado
a n Opt ion Num érico, opcional. Folder selecionado
a n Clr For e Num érico, opcional. Cor de fr ent e
a nClr Ba ck Num érico, opcional. Cor de fundo
a lPix e l Lógico, opcional. Ut iliza coordenadas em pixel
a lD e sign Lógico, opcional. NÃO USADO
a nW idt h Num érico, opcional. Lar gura em pixels.
a n H e igh t Num érico, opcional. Alt ura em pixels.
a cM sg Caract er e, Mensagem de Hint
a lAllW idt h Lógico, opcional. NÃO USADO

 M é t odos a u x ilia r e s:

Se t Opt ion

 D e scr içã o: Seleciona folder desej ado


 Sin t a x e : Set Opt ion( nOpt ion )
 Pa r â m e t r os:

nOpt ion Num érico. Folder a ser selecionado

 Re t or n o:

Nenhum -

- 416 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Add I t e m

 D e scr içã o: I nser e um folder


 Sin t a x e : Add I t e m ( cI t em , lVisible )
 Pa r â m e t r os:

cI t em Caract er e. Tít ulo do Folder


lVisible Lógico. Visível

 Re t or n o:

Nenhum -

a En a ble

 D e scr içã o: Habilit a/ Desabilit a um folder


 Sin t a x e : aEnable( nI t em , lEnable )
 Pa r â m e t r os:

nI t em Num érico. Folder para habilit ar/ desabilit ar


lEnable Lógico. Habilit a/ Desabilit a

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 417 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

Local oFolder
Local aFolder := { 'Folder 1', 'Folder 2', 'Folder 3' }

oFolder := TFolder():New( 0, 0, aFolder, aFolder, oDlg,,,, .T., , 200,;


200 )

TGET( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont r ole – t Get , a qual cria um
cont r ole que arm azena ou alt era o cont eúdo de um a variável at ravés
de digit ação. O cont eúdo da variável só é m odificado quando o
cont r ole perde o foco de edição para out ro cont r ole.

 Pr opr ie da d e s:

Lógico. Se .T. o cont role se com port a com o ent r ada de


lPassword dados de senha, exibindo ast eriscos ‘* ’ para esconder o
cont eúdo digit ado.
Caract er e. Máscara de form at ação do cont eúdo a ser
Pict ure
exibido.

 Con st r u t or : New( [ anRow] , [ anCol] , [ abSet Get ] , [ aoWnd] , [ anWidt h] ,


[ anHeight ] , [ acPict ] , [ abValid] , [ anClrFore] , [ anClrBack] , [ aoFont ] ,
[ lPar12] , [ oPar13] , [ alPixel] , [ cPar15] , [ lPar16] , [ abWhen] , [ lPar18] ,
[ lPar19] , [ abChange] , [ alReadOnly] , [ alPassw ord] , [ cPar23] ,
[ acReadVar] , [ cPar25] , [ lPar26] , [ nPar27] , [ lPar28] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


a nRow
caract eres.
Num érico, opcional. Coordenada horizont al em pixels ou
a nCol
caract eres.
Bloco de código, opcional. Bloco de código no form at o { | u|
if( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont role ut iliza
a bSe t Ge t
para at ualizar a variável < var > . < var > deve ser t ipo
caract er, num érico ou dat a.
Obj et o, opcional. Janela ou cont r ole onde o cont role será
a oW n d
criado.
a nW idt h Num érico, opcional. Lar gura do cont role em pixels.
a n H e igh t Num érico, opcional. Alt ura do cont role em pixels.
Caract er e, opcional. Máscar a de form at ação do cont eúdo a
a cPict
ser exibido.
Bloco de código, opcional. Execut ado quando o cont eúdo do
a bVa lid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
a n Clr For e Num érico, opcional. Cor de fundo do cont role.
a nClr Ba ck Num érico, opcional. Cor do t ext o do cont role.
Obj et o, opcional. Obj et o t ipo t Font ut ilizado para definir as
a oFon t
caract eríst icas da font e ut ilizada para exibir o cont eúdo do

- 418 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


cont r ole.
lPa r 1 2 Reser vado.
oPa r 1 3 Reser vado.
Lógico, opcional. Se .T. as coordenadas inform adas são em
a lPix e l
pixels, se .F. são em car act eres.
cPa r 1 5 Reser vado.
lPa r 1 6 Reser vado.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lPa r 1 8 Reser vado.
lPa r 1 9 Reser vado.
Bloco de código, opcional. Execut ado quando o cont r ole
a bCh a n ge
m odifica o valor da variável associada.
a lRe a dOn ly Lógico, opcional. Se .T. o cont r ole não poderá ser edit ado.
Lógico, opcional. Se .T. o cont r ole exibirá ast eriscos “ * ” no
a lPa ssw or d lugar dos caract er es exibidos pelo cont r ole para sim ular
ent rada de senha.
cPa r 2 3 Reser vado.
Caract er e, opcional. Nom e da variável que o cont role dev erá
a cRe a dVa r m anipular, dev erá ser a m esm a variável inform ada no
parâm et ro abSet Get , e será o r et orno da função ReadVar( ) .
cPa r 2 5 Reser vado.
lPa r 2 6 Reser vado.
n Pa r 2 7 Reser vado.
lPa r 2 8 Reser vado.

 Ap a r ê n cia :

- 419 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo, nGet1:=0
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Get'
oGet1:= TGet():New(10,10,{|u| if(PCount()>0,nGet1:=u,nGet1)}, oDlg,;
100,20,'@E 999,999.99',;
{|o|nGet1>1000.00},,,,,,.T.,,,,,,,,,,'nGet1')

// Botão para fechar a janela


oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor é '+Transform(nGet1,'@E 999,999.00') )

Return NIL

TGROUP( )

 D e scr içã o: Classe de obj et os visuais do t ipo painel – t Group, a qual cria um
painel onde cont r oles visuais podem ser agrupados ou classificados.
Nest e painel é criada um a borda com t ít ulo em volt a dos cont r oles
agrupados.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New( [ anTop] , [ anLeft ] , [ anBot t om ] , [ anRight ] , [ acCapt ion] ,


[ aoWnd] , [ anClrText ] , [ anClrPane] , [ alPixel] , [ lPar10] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical superior em pixels


a nTop
ou caract er es.
Num érico, opcional. Coordenada horizont al esquerda em
a nLe ft
pixels ou caract eres.
Num érico, opcional. Coordenada vert ical inferior em pixels
a n Bot t om
ou caract er es.
Num érico, opcional. Coordenada horizont al direit a em pixels
a n Righ t
ou caract er es.
a cCa pt ion Caract er e, opcional. Tít ulo do grupo.
Obj et o, opcional. Janela ou cont r ole onde o cont role será
a oW n d
criado.
a nClr Te x t Num érico, opcional. Cor do t ext o.
a nClr Pa n e Num érico, opcional. Cor do fundo.
Lógico, opcional. Se .T. as coordenadas inform adas são em
a lPix e l
pixels, se .F. são em car act eres.
lPa r 1 0 Reser vado.

- 420 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oGroup:= tGroup():New(10,10,130,130,'grupo de gets',oDlg,,,.T.)
@ 18,16 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
@ 38,16 MSGET oGet2 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
ACTIVATE MSDIALOG oDlg CENTERED

- 421 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TH BUTTON ( )

 D e scr içã o: Classe de obj et os visuais do t ipo bot ão com hiperlink.

 Pr opr ie da d e s:

bAct ion Bloco de código. Execut ado quando o bot ão é pressionado.

 Con st r u t or : New( [ anRow] , [ anCol] , [ acCapt ion] , [ aoWnd] , [ abAct ion] ,


[ anWidt h] , [ anHeight ] , [ aoFont ] , [ abWhen] )

 Pa r â m e t r os:

Pa r â m e t r o Tipo / Descrição
Num érico, opcional. Coordenada vert ical em pixels ou
a nRow
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
a nCol
caract eres.
a cCa pt ion Caract er e, opcional. Tit ulo do bot ão.
Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser
a oW n d
criado.
Bloco de código, opcional. Bloco que dev erá ser acionado
a bAct ion
quando o bot ão for pressionado.
a nW idt h Num érico, opcional. Lar gura do bot ão em pixels.
a n H e igh t Num érico, opcional. Alt ura do bot ão em pixels.
Obj et o, opcional. Obj et o t ipo t Font com propriedades da
a oFon t
font e ut ilizada para o t ít ulo do bot ão.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.

 M é t odos a u x ilia r e s:

Cr e a t e

 D e scr içã o: Mét odo const rut or opcional da classe.


 Sin t a x e : Creat e( aoWnd)
 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde a palet a dev erá


aoWnd
ser criada.

 Re t or n o:

Obj et o do t ipo THBut t on com os at ribut os definidos com


Obj e t o
cont eúdo padrão.

- 422 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include “protheus.ch”
#include “hbutton.ch”
User Function MyhBtn()
Local oDlg, ohBtn
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE “Meu hButton”
// Usando o método create
ohBtn:= tHButton():Create( oDlg )
ohBtn:nTop := 100
ohBtn:nLeft := 10
ohBtn:nWidth := 100
ohBtn:nHeight := 30
ohBtn:cCaption := 'hButton'
ohBtn:blClicked := { || MsgStop( 'Cliquei' ) }
// Usando o command
@ 200,100 HBUTTON ohBtn PROMPT 'Exemplo hButton' SIZE 100,30 ACTION
MsgStop('Cliquei') OF oDlg MESSAGE 'hButton'
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil

TI BROW SER( )

 D e scr içã o: Classe de obj et os visuais do t ipo Página de I nt ernet , sendo


necessário incluir a clausula Browser Enabled= 1 no Config do
Rem ot e.I NI

 Pr opr ie da d e s:

- Herdadas da classe superior

 Con st r u t or : New( [ nRow] , [ nCol] , [ nWidt h] , [ nHeight ] , [ cPager] , [ oWnd] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


n Row
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
n Col
caract eres
n W idt h Num érico, opcional. Lar gura em pixels
n H e igt h Num érico, opcional. Alt ura em pixels.
cPa ge Caract er . Enr edeço URL da página de I nt ernet
Obj et o, opcional. Janela ou cont r ole onde a bot ão deverá ser
oW n d
criado

 Ap a r ê n cia :

- 423 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// Habilitar no Remote(Config) -> BrowserEnabled=1


oTIBrowser:=
TIBrowser():New(0,0,306,134,'http://www.microsiga.com.br',oDlg )

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

- 424 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TLI STBOX ( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – t List box, a qual cria um a
j anela com it ens selecionáveis e barra de rolagem . Ao selecionar um
it em , um a variável é at ualizada com o cont eúdo do it em selecionado.

 Pr opr ie da d e s:

n At Num érico. Posição do it em selecionado.


aI tem s Array de it em s caract er es. List a do it ens selecionáveis.

 Con st r u t or : New( [ anRow] , [ anCol] , [ abSet Get ] , [ aaI t em s] , [ anWidt h] ,


[ anHeigt h] , [ abChange] , [ aoWnd] , [ abValid] , [ anClrFor e] ,
[ anClrBack] , [ alPixel] , [ lPar13] , [ abLDBLClick] , [ aoFont ] , [ cPar16] ,
[ lPar17] , [ abWhen] , [ aPar19] , [ bPar20] , [ lPar21] , [ lPar22] ,
[ abRight Click] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


a nRow
caract eres.
Num érico, opcional. Coordenada horizont al em pixels ou
a nCol
caract eres.
Bloco de código, opcional. Bloco de código no form at o { | u|
if( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont role ut iliza
a bSe t Ge t
para at ualizar a variável < var > . < var > deve ser t ipo
caract er ou num érica.
Array de it em s caract er es, opcional. List a de it em s
aaI tem s
selecionáveis.
a nW idt h Num érico, opcional. Lar gura do cont role em pixels.
a n H e igh t Num érico, opcional. Alt ura do cont role em pixels.
Bloco de código, opcional. Execut ado quando o it em
a bCh a n ge
selecionado é alt erado.
Obj et o, opcional. Janela ou cont r ole onde o cont role será
a oW n d
criado.
Bloco de código, opcional. Execut ado quando o cont eúdo do
a bVa lid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
a n Clr For e Num érico, opcional. Cor de fundo do cont role.
a nClr Ba ck Num érico, opcional. Cor do t ext o do cont role.
Lógico, opcional. Se .T. as coordenadas inform adas são em
a lPix e l
pixels, se .F. são em car act eres.
lPa r 1 3 Reser vado.
Bloco de código, opcional. Execut ado quando acionado duplo
a bLD BLClick
click do bot ão esquerdo do m ouse sobr e o cont r ole.
Obj et o, opcional. Obj et o t ipo t Font ut ilizado para definir as
a oFon t caract eríst icas da font e ut ilizada para exibir o cont eúdo do
cont r ole.
cPa r 1 6 Reser vado.
lPa r 1 7 Reser vado.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
a bW h e n
onde o cont r ole foi criado. O bloco deve r et ornar . T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.

- 425 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


a Pa r 1 9 Reser vado.
bPa r 2 0 Reser vado.
lPa r 2 1 Reser vado.
lPa r 2 2 Reser vado.
Bloco de código, opcional. Execut ado quando acionado click
a bRigh t Click
do bot ão direit o do m ouse sobr e o cont role.

 M é t odos a u x ilia r e s:

Se le ct

 D e scr içã o: Força a seleção de um it em .


 Sin t a x e : Select ( [ anI t em ] )
 Pa r â m e t r os:

nI t em Num érico, opcional. Posição do it em a ser selecionado.

 Re t or n o:

Nenhum -

Add

 D e scr içã o: Adiciona novo it em .


 Sin t a x e : Add( cText , nPos )
 Pa r â m e t r os:

cText Caract er e, obrigat ório. Text o do it em .


Num érico, obrigat ório. Se 0 ou m aior que o núm er o de
it ens, insere o it em no final da list a. Se valor ent re 1 e
nPos
núm ero de it ens, inser e o it em na posição infor m ada,
em pur rando o it em ant erior para baixo.

 Re t or n o:

Nenhum -

M odify

 D e scr içã o: Modifica o t ext o de um it em .


 Sin t a x e : Modify( cText , nPos )
 Pa r â m e t r os:

cText Caract er e, obrigat ório. Nov o t ext o do it em .


Num érico, obrigat ório. Posição a ser m odificada dev e ser
nPos
m aior que 0 e m enor ou igual que o núm er o de it ens.

 Re t or n o:

Nenhum -

- 426 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Del

 D e scr içã o: Rem ov e um it em .


 Sin t a x e : Del( nPos )
 Pa r â m e t r os:

Num érico, obrigat ório. Posição a ser ex cluida, dev e ser


nPos
m aior que 0 e m enor ou igual que o núm er o de it ens.

 Re t or n o:

Nenhum -

Le n

 D e scr içã o: Ret orna o núm er o de it ens.


 Sin t a x e : Len( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Num érico Núm er o de it ens.

Re se t

 D e scr içã o: Apaga t odos os it ens.


 Sin t a x e : Reset ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Nenhum -

- 427 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oList, nList:= 1
Local aItems:={}
Aadd(aItems,'Item 1')
Aadd(aItems,'Item 2')
Aadd(aItems,'Item 3')
Aadd(aItems,'Item 4')
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE 'Teste'
oList:= tListBox():New(10,10,{|u|if(Pcount()>0,nList:=u,nList)};
,aItems,100,100,,oDlg,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 428 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TM EN U( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - Menu.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New ( [ nTop] , [ nLeft ] , [ nHeight ] , [ nWidt h] , [ lPopUp] , [ cBm pNam e] ,


[ oWnd] , [ nClrNoSelect ] , [ nClrSelect ] , [ cArr owUpNoSel] ,
[ cArr owUpSel] , [ cArr ow DownNoSel] , [ cAr r owDownSel] )

 Pa r â m e t r os:

n Top Num érico, opcional. Coordenada vert ical em pixels.


n Le ft Num érico, opcional. Coordenada horizont al em pixels.
n H e ig h t Num érico, opcional. Alt ura do cont role em pixels.
n W idt h Num érico, opcional. Lar gura do cont role em pixels.
lPop Up Lógico. Define se o obj et o será um PoPup
cBm p N a m e Caract er opcional. Figura do Menu
Obj et o, opcional. Janela ou cont r ole onde a bot ão deverá
oW n d
ser criado
n Clr N oSe le ct Num erico opcional. Cor quando não selecionado
n Clr Se le ct Num erico opcional. Cor quando selecionado
Caract er opcional, Define a figura da set a para cim a
cAr r ow Up N oSe l
quando não selecionado o it em .
Caract er opcional, Define a figura da set a para cim a
cAr r ow Up Se l
quando selecionado o it em .
Caract er opcional, Define a figura da set a para baixo
cAr r ow D ow n N oSe l
quando não selecionado o it em .
Caract er opcional, Define a figura da set a para baixo
cAr r ow D ow n Se l
quando selecionado o it em .

 Ap a r ê n cia :

- 429 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMenu := TMenu():New( 0,0,0,0,.F.,'',oDlg,CLR_WHITE,CLR_BLACK)
// Adiciona Item ao Menu Principal
oMenuItem1 := TMenuItem():New2( oMenu:Owner(),'Item 001','Item
001',,,)
oMenu:Add( oMenuItem1 )

// Adiciona sub-Itens
oMenuItem2 := TMenuItem():New2( oMenu:Owner(),'Sub-Item
001',,,{||Alert('TMenuItem')})
oMenuItem3 := TMenuItem():New2( oMenu:Owner(),'Sub-Item
002',,,{||Alert('TMenuItem')})
oMenuItem1:Add( oMenuItem2 )
oMenuItem1:Add( oMenuItem3 )

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

TM EN UBAR( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - Bar ra de Menu.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New( [ oWnd] )

 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser


oWnd
criado.

 Ap a r ê n cia :

- 430 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
// Monta um Menu Suspenso
TMenuBar := TMenuBar():New(oDlg)
TMenuBar:nClrPane := RGB(183,208,248) // Cor de fundo do Menu
oTMenu1 := TMenu():New(0,0,0,0,.T.,,oDlg)
oTMenu2 := TMenu():New(0,0,0,0,.T.,,oDlg)
TMenuBar:AddItem('Arquivo' , oTMenu1, .T.)
TMenuBar:AddItem('Relatorio', oTMenu2, .T.)

// Cria Itens do Menu


oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 01',,,,;
{||Alert('TMenuItem 01')},,'AVGLBPAR1',,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 02',,,,;
{||Alert('TMenuItem 02')},,,,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

TM ETER( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – t Met er, a qual exibe um a
régua ( gauge) de pr ocessam ent o, descr ev endo o andam ent o de um
processo at ravés da exibição de um a barra horizont al.

 Pr opr ie da d e s:

Num érico. Núm er o t ot al de passos at é o pr eenchim ent o da


nTot al
régua de processo.
Lógico. Se .T. considera o passo de m ovim ent ação em
lPercent age
porcent agem .
nClrBar Num érico. Cor da bar ra de andam ent o.

 Con st r u t or : New( [ anRow] , [ anCol] , [ abSet Get ] , [ anTot al] , [ aoWnd] , [ anWidt h] ,
[ anHeight ] , [ lPar8] , [ alPixel] , [ oPar10] , [ cPar11] , [ alNoPerc] ,
[ anClrPane] , [ nPar14] , [ anClrBar] , [ nPar16] , [ lPar17] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


anRow
caract eres.
Num érico, opcional. Coordenada horizont al em pixels ou
anCol
caract eres.
Bloco de código, opcional. Bloco de código no form at o { | u|
if( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont role ut iliza
abSet Get
para at ualizar a variável < var > . < var > deve ser t ipo
num érico.
Num érico, opcional. Num er o t ot al de passos at é o
anTot al
preenchim ent o da régua de processo.

- 431 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Obj et o, opcional. Janela ou cont r ole onde o cont role sera
aoWnd
criado.
anWidt h Num érico, opcional. Lar gura do cont role em pixels.
anHeight Num érico, opcional. Alt ura do cont role em pixels.
lPar8 Reser vado.
Lógico, opcional. Se .T. as coordenadas inform adas são em
alPixel
pixels, se .F. são em car act eres.
oPar10 Reser vado.
cPar11 Reser vado.
Lógico, opcional. Se .T. ( padrão) não considera os passos de
alNoPer c
at ualização em porcent agem .
anClrPane Num érico, opcional. Cor de fundo do cont role.
nPar14 Reser vado.
anClrBar Num érico, opcional. Cor da bar ra de andam ent o.
nPar16 Reser vado.
lPar17 Reser vado.

 M é t odos a u x ilia r e s:

Se t

 D e scr içã o: At ualiza a posição da r égua de pr ocessam ent o.


 Sin t a x e : Set ( [ nVal] )
 Pa r â m e t r os:

Num érico, opcional. Novo valor da posição da r égua de


nVal
processam ent o.

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 432 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
STATIC lRunning:=.F., lStop:=.F.
User Function Teste()
Local oDlg, oMeter, nMeter:=0, oBtn1, oBtn2
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE 'Teste' Pixel
oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)};
,100,oDlg,100,16,,.T.) // cria a régua
// botão para ativar andamento da régua
@ 30,10 BUTTON oBtn1 PROMPT 'Run ' OF oDlg PIXEL ACTION RunMeter(oMeter)
@ 50,10 BUTTON oBtn2 PROMPT 'Stop' OF oDlg PIXEL ACTION lStop:=.T.
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
STATIC Function RunMeter(oMeter)
If lRunning
Return
Endif
lRunning:= .T.

oMeter:Set(0)
// inicia a régua
While .T. .and. !lStop
Sleep(1000) // pára 1 segundo
ProcessMessages() // atualiza a pintura da janela, processa mensagens do
windows
nCurrent:= Eval(oMeter:bSetGet) // pega valor corrente da régua
nCurrent+=10 // atualiza régua

oMeter:Set(nCurrent)
if nCurrent==oMeter:nTotal
Return
endif
Enddo

lRunning:= .F.
lStop:= .F.
Return

- 433 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TM SGRAPH I C( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - Gráfico.

 Pr opr ie da d e s:

l3D Lógico, opcional Gráfico em 3D


lAxisVisib Lógico, opcional Most ra eixos do gráfico

 Con st r u t or : New( [ anRow] , [ anCol] , [ aoWnd] , [ aoFont ] , [ anClrText ] ,


[ anClrBack] , [ anWidt h] , [ anHeight ] )

 Pa r â m e t r os:

anRow Num érico, opcional. Coordenada vert ical em pixels.


anCol Num érico, opcional. Coordenada horizont al em pixels.
Obj et o, opcional. Janela ou cont r ole onde a im agem deverá
aoWnd
ser criada.
aoFont Obj et o, opcional. Font e ut ilizada no gráfico.
anClrText Caract er e, Nom e do r esource.
anClrBack Caract er e, Nom e do arquivo.
anWidt h Lógico, opcional. Exibe borda
Obj et o, opcional. Janela ou cont r ole onde a im agem deverá
anHeight
ser criada.

 M é t odos a u x ilia r e s:

Cr e a t e Se r ie

 D e scr içã o: Mét odo par a criação de um a serie para o gráfico.


 Sin t a x e : Creat eSerie( [ nSerieType] , [ cLegend] , [ nDecim als] ,
[ lShowValues] )
 Pa r â m e t r os:

Num érico. I ndica o t ipo do gráfico


GRP_LI NE 1
GRP_AREA 2
nSerieType
GRP_POI NT 3
GRP_BAR 4
GRP_PI E 10
cLegend Caract er e, opcional. Legenda da série.
Num érico, opcional. Num er o de casas decim ais dos
nDecim als
valores.
lShowValues Lógico, opcional. Most ra valores

 Re t or n o:

Num érico Num er o da série criada.

- 434 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Add

 D e scr içã o: Mét odo par a adicionar um it em ao gráfico.


 Sin t a x e : Add( nSerie, nVal, cLegend, nColor )
 Pa r â m e t r os:

nSerie Num érico. Serie a ser inserido o it em .


nVal Num érico. Valor do it em .
cLegend Caract er e. Legenda do it em .
nColor Num érico, Cor do it em .

 Re t or n o:

Nenhum -

Se t Gr a d ie n t e

 D e scr içã o: Mét odo par a set ar o fundo do gráfico com um a cor gradient e
em det erm inada direção.
 Sin t a x e : Set Gr adient ( nDirect ion, St art Color , EndColor )
 Pa r â m e t r os:

Num érico. I ndica direção do gradient e.


GDTOPBOTTOM 1
nDirect ion GDBOTTOMTOP 2
GDLEFTRI GHT 3
GDRI GHTLEFT 4
St art Color Num érico. Cor inicial.
EndColor Num érico. Cor final.

 Re t or n o:

Nenhum -

Se t Tit le

 D e scr içã o: Define o t it ulo do gráfico.


 Sin t a x e : Set Tit le( cTit le, cTit le2, Color, Aligm ent , lFoot )
 Pa r â m e t r os:

cTit le Caract er e. Prim eiro t it ulo.


cTit le2 Caract er e. Segundo t it ulo.
Color Num érico. Cor do t it ulo.
Num érico. Alinham ent o do t it ulo.
A_LEFTJUST 1
Aligm ent
A_RI GHTJUS 2
A_CENTER 3
lFoot Lógico. I ndica t it ulo no r odapé do gráfico.

 Re t or n o:

Nenhum -

- 435 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Se t Le ge n Pr op

 D e scr içã o: Mét odo par a set ar propriedades da legenda.


 Sin t a x e : Set LegenPr op( Align, Color, St yle, Visible )
 Pa r â m e t r os:

Num erico. Alinham ent o da legenda.


GRP_SCRTOP 1
Align GRP_SCRLEFT 2
GRP_SCRBOTTOM 3
GRP_SCRRI GHT 4
Color Num érico. Cor da legenda.
Num érico. Est ilo da legenda.
GRP_AUTO 1
St yle GRP_SERI ES 2
GRP_VALUES 3
GRPLASTVAL 4
Visible Lógico. I ndica de o t it ulo será visível.

 Re t or n o:

Nenhum -

Se t M a r gin s

 D e scr içã o: Mét odo par a set ar as m argens superior , inferior e lat erais do
gráfico.
 Sin t a x e : Set Margins( nTop, nLeft , nBot t om , nRight )
 Pa r â m e t r os:

nTop Num érico. Posição em r elação ao t opo do gráfico.


nLeft Num érico. Posição em r elação a esquerda.
nBot t om Num érico. Posição em r elação ao r odapé.
nRight Num érico. Posição em r elação a direit a.

 Re t or n o:

Nenhum -

Se t Ra n ge Y

 D e scr içã o: D e fin e a e sca la dos v a lor e s do e ix o Y


 Sin t a x e : Set RangeY ( m in, m ax, delt a) .
 Pa r â m e t r os:

Min valor inicial


Max valor final
int ervalo ent re os valor es [ opcional, calculado
delt a
aut om at icam ent e ]

 Re t or n o:

Nenhum -

- 436 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Sa ve ToBM P

 D e scr içã o: Mét odo para salvar o gráfico at ual em um bit m ap no


serv er( Ob sole t o, ve r Sa ve ToI m a ge ) .
 Sin t a x e : Sav eToBMP( Bm pNam e, Pat hToWrit e )
 Pa r â m e t r os:

Bm pNam e Caract er e, Nom e do da figura a ser salva.


Pat hToWrit e Caract er e. Pat h no Serv er onde será salva a figura.

 Re t or n o:

Lógico I ndica se a im agem foi salva corr et am ent e.

Sa ve ToI m a ge

 D e scr içã o: Mét odo par a salvar o gráfico at ual em um form at o de pr é-


det erm inado no ser ver.
 Sin t a x e : Sav eToI m age( Bm pNam e, Pat hToWrit e, TypeI m age)
 Pa r â m e t r os:

Bm pNam e Caract er e, Nom e do da figura a ser salva.


Pat hToWrit e Caract er e. Pat h no Serv er onde será salva a figura.
Caract er e. Tipo da Figura ( Default 'JPEG')
TypeI m age
Tipos suport ados: JPEG, PNG, BMP

 Re t or n o:

Lógico I ndica se a im agem foi salva corr et am ent e.

D e lSe r ie

 D e scr içã o: Mét odo par a delet ar um a série do grafico.


 Sin t a x e : DelSerie ( nSerie )
 Pa r â m e t r os:

nSerie Num érico. Serie a ser delet ada.

 Re t or n o:

Lógico I ndica se a séria foi rem ovida do gráfico

Zoom I n

 D e scr içã o: Mét odo par a efet uar zoom int erno ( + ) .
 Sin t a x e : Zoom I n( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Nenhum -

- 437 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Zoom Ou t

 D e scr içã o: Mét odo par a efet uar zoom ext erno ( - ) .
 Sin t a x e : Zoom Out ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 438 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'MSGRAPHI.CH'
User Function tMsGraphicTst()

DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 250,330 PIXEL

@ 001, 001 MSGRAPHIC oGraphic SIZE 120,120 OF oDlg

oGraphic:SetTitle('Titulo do Grafico', DTOC(Date()), CLR_BLACK,


A_LEFTJUST, GRP_TITLE )
oGraphic:SetMargins(2,6,6,6)
oGraphic:SetGradient(GDBOTTOMTOP, CLR_HGRAY, CLR_WHITE)
oGraphic:SetLegenProp(GRP_SCRRIGHT, CLR_HGRAY, GRP_AUTO,.T.)

nSerie := oGraphic:CreateSerie( 10 )
oGraphic:l3D := .T. // Grafico em 3D
oGraphic:lAxisVisib := .T. // Mostra os eixos

// Itens do Grafico
oGraphic:Add(nSerie, 200, 'Item01', CLR_BLUE )
oGraphic:Add(nSerie, 180, 'Item02', CLR_RED )
oGraphic:Add(nSerie, 210, 'Item03', CLR_BLUE )
oGraphic:Add(nSerie, 110, 'Item04', CLR_BLUE )
oGraphic:Add(nSerie, 100, 'Item05', CLR_BLUE )
oGraphic:Add(nSerie, 080, 'Item06', CLR_BLUE )
oGraphic:Add(nSerie, 110, 'Item07', CLR_BLUE )

@ 001, 124 BUTTON 'Salva Grafico' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:SaveToBMP('Exemplo.bmp','\web\')
@ 020, 124 BUTTON 'Zoom IN' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:ZoomIn()
@ 040, 124 BUTTON 'Zoom OUT' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:ZoomOut()
@ 060, 124 BUTTON 'Deleta Serie' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:DelSerie(nSerie)

ACTIVATE MSDIALOG oDlg CENTERED

Return

- 439 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TM SGBAR( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - Rodapé.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New ( [ oWnd] , [ cPr om pt ,] , [ lCent ered] , [ lClock] , [ lDat e] , [ lKbd] ,


[ nClrFore] , [ nClrBack] , [ oFont ] , [ lI nset ] , [ im ageNam e] )

 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde a bot ão deverá ser


oWnd
criado
cPr om pt Caract er . Descrição na Barra
lCent ered Logico. Define cent ralização do t ext o
lClock Nao ut ilizado
lDat e Nao ut ilizado
lKbd Nao ut ilizado
nClrFore Num erico, opcional. Define cor da font e da barr a
nClrBack Num erico, opcional. Define cor do fundo da barr a
Obj et o, opcional. Obj et o t ipo t Font com propriedades da
oFont
font e ut ilizada para o t ít ulo do bot ão.
lI nset Nao ut ilizado
im ageNam e Caract er , opcional. I nsere figura lat eral esquerda

 M é t odos a u x ilia r e s:

Add I t e m

 D e scr içã o: Mét odo insere um subit em no rodapé


 Sin t a x e : AddI t em ( oTMsgI t em )
 Pa r â m e t r os:

Obj et o do t ipo TMsgI t em que será inserido com o subit em


oTMsgI t em
do r odapé.

 Re t or n o:

Nenhum -

- 440 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Se t M sg

 D e scr içã o: Define a descrição da bar ra de rodapé


 Sin t a x e : Set Msg( cText o )
 Pa r â m e t r os:

cText o Text o a ser inserido na barra

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software',
.F.,.F.,.F.,.F., RGB(116,116,116),,,.F.)
oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T.,
{||})
oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T.,
{||Alert('Item da Barra Acionado')} )

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

- 441 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TM SGI TEM ( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – ut ilizado para adicionar
m ensagens em out ros obj et os, com o bar ras e m enus.

 Pr opr ie da d e s:

- Herdadas das classes superior es

 Con st r u t or : N e w ( < oM sgBa r > , < cM sg > , < n Siz e > , < oFon t > , < n Clr For e > ,
< n Clr Ba ck > , lEn a ble , [ < { bAct ion } > ] , cI m a ge m )

 Pa r â m e t r os:

oM sgBa r Obj et o do t ipo bar ra ou m enu no qual será adicionado o it em


de m ensagem .
cM sg Mensagem que será exibida pelo obj et o
n Siz e Tam anho da font e do t ext o
oFon t Font e do t ext o
n Clr For e Cor da font e do t ext o
n Clr Ba ck Cor do fundo do obj et o
lEn a ble I ndica se o obj et o est á habilit ado.
bAct ion Bloco de código ex ecut ado quando o obj et o é at ivado
cI m a ge m I m agem a ser vinculada no obj et o.

 Ap a r ê n cia :

- 442 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software',
.F.,.F.,.F.,.F., RGB(116,116,116),,,.F.)
oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T.,
{||})
oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T.,
{||Alert('Item da Barra Acionado')} )

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

TM ULTI BTN ( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - Múlt iplos bot ões.

 Pr opr ie da d e s:

Bloco de código. Execut ado ao pr ecionar o bot ão esquerdo


bAct ion
do m ouse.

 Con st r u t or : New( [ nRow] , [ nCol] , [ cTit le] , [ oWnd] , [ bAct ion] , [ nWidt h] ,
[ nHeight ] , [ im gNam e] , [ ori] , [ cMsg] , [ bt nPer Line] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


nRow
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
nCol
caract eres
Obj et o, opcional. Janela ou cont r ole onde a bot ão deverá ser
oWnd
criado
Bloco de código, opcional. Bloco que dev erá ser acionado
bAct ion
quando o bot ão for pressionado.
nWidt h Num érico, opcional. Lar gura em pixels
nHeigt h Num érico, opcional. Alt ura em pixels.
Caract er . I m agem a ser inserida ao lado esquer do do
im gNam e
com ponent e
ori Num erico, opcional. Orient ação dos bot ões.
cMsg Caract er , Opicional. Descrição do t ipo t oolt ip( hint ) do it em
bt nPerLine Num erico, opcional. Quant idade de bot ões por linha

- 443 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a u x ilia r e s:

Loa dI m a ge
 D e scr içã o: Muda a figura a esquerda do com ponent e
 Sin t a x e : LoadI m age( cI m agem )
 Pa r â m e t r os:

cI m agem Nom e da im agem que será car regada pelo obj et o

 Re t or n o:

Nenhum -

Add Bu t t on
 D e scr içã o: I nser e um bot ão
 Sin t a x e : AddBut t on( cText o)
 Pa r â m e t r os:

cText o Text o para exibição no bot ão inserido.

 Re t or n o:

Nenhum -

Se t Tit le
 D e scr içã o: Muda o t it ulo e o num er o de bot ões por linha
 Sin t a x e : Set Tit le( cText o, nBot oes)
 Pa r â m e t r os:

cText o Text o que será at ribuído aos bot ões


nBot oes Núm er o de bot ões por linha

 Re t or n o:

Nenhum -

Se t Fon t s
 D e scr içã o: Muda a font do t it ulo e dos bot ões
 Sin t a x e : Set Tit le( cFont Tit , nSizeTit , nFont But , nSizeBut )
 Pa r â m e t r os:

cFont Tit Nom e da font e que será at ribuída ao t ít ulo


nSizeTit Tam anho da font e do t ít ulo
nFont But Nom e da font e que será at ribuída aos bot ões
nSizeBut Tam anho da font e dos bot ões

 Re t or n o:

Nenhum -

- 444 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

otMultiBtn := tMultiBtn():New( 01,01,'cTitle1',oDlg,;


{|x|Alert(Str(x)) },200,150,'afastamento',0,'cTitle',3
)

otMultiBtn:SetFonts('Tahoma',16,'Tahoma',10)
otMultiBtn:AddButton('btn01')
otMultiBtn:AddButton('btn02')
otMultiBtn:AddButton('btn04')
otMultiBtn:AddButton('btn05')

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL
.

- 445 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TM ULTI GET( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role - edição de t ext o de
m últ iplas linhas.

 Pr opr ie da d e s:

lWordWrap Lógico. Se .T., faz quebra aut om át ica de linhas.

 Con st r u t or : New( [ anRow] , [ anCol] , [ abSet Get ] , [ aoWnd] , [ anWidt h] ,


[ anHeight ] , [ aoFont ] , [ alHScroll] , [ anClrFore] , [ anClrBack] , [ oPar11] ,
[ alPixel] , [ cPar13] , [ lPar14] , [ abWhen] , [ lPar16] , [ lPar17] ,
[ alReadOnly] , [ abValid] , [ bPar20] , [ lPar21] , [ alNoBorder] ,
[ alNoVScroll] )

 Pa r â m e t r os:

Parâm et r o
Num érico, opcional. Coordenada vert ical em pixels ou
anRow
caract eres.
Num érico, opcional. Coordenada horizont al em pixels ou
anCol
caract eres.
Bloco de código, opcional. Bloco de código no form at o { | u|
if( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont role ut iliza
abSet Get
para at ualizar a variável < var > . < var > deve ser t ipo
caract er.
Obj et o, opcional. Janela ou cont r ole onde o cont role será
aoWnd
criado.
anWidt h Num érico, opcional. Lar gura do cont role em pixels.
anHeight Num érico, opcional. Alt ura do cont role em pixels.
Obj et o, opcional. Obj et o t ipo t Font ut ilizado para definir as
aoFont caract eríst icas da font e ut ilizada para exibir o cont eúdo do
cont r ole.
Lógico, opcional. Se .T., habilit a barra de rolagem
alHScroll
horizont al.
anClrFore Num érico, opcional. Cor de fundo do cont role.
anClrBack Num érico, opcional. Cor do t ext o do cont role.
oPar11 Reser vado.
Lógico, opcional. Se .T. as coordenadas inform adas são em
alPixel
pixels, se .F. são em car act eres.
cPar13 Reser vado.
lPar14 Reser vado.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
abWhen
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lPar16 Reser vado.
lPar17 Reser vado.
alReadOnly Lógico, opcional. Se .T. o cont r ole so perm it ira leit ura.
Bloco de código, opcional. Execut ado quando o cont eúdo do
abValid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
bPar20 Reser vado.
lPar21 Reser vado.

- 446 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


alNoBorder Lógico, opcional. Se .T. cria cont r ole sem borda.
alNoVScroll Lógico, opcional. Se .T., habilit a barra de rolagem vert ical.

 M é t odos a u x ilia r e s:

En a ble VScr oll

 D e scr içã o: Habilit a a barra de r olagem vert ical.


 Sin t a x e : EnableVScroll( lEnable )
 Pa r â m e t r os:

Lógico, obrigat ório. Se .T. habilit a se .F. desabilit a a bar ra


lEnable
de r olagem .

 Re t or n o:

Nenhum -

En a b le H Scr oll

 D e scr içã o: Habilit a a barra de r olagem horizont al.


 Sin t a x e : EnableHScr oll( lEnable )
 Pa r â m e t r os:

Lógico, obrigat ório. Se .T. habilit a se .F. desabilit a a bar ra


lEnable
de r olagem .

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 447 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include “protheus.ch”
User Function Teste()

Local oDlg, oMemo, cMemo:= space(50)

DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test”

oMemo:= tMultiget():New(10,10,{|u|if(Pcount()>0,cMemo:=u,cMemo)};
,oDlg,100,100,,,,,,.T.)

@ 200,10 BUTTON oBtn PROMPT “Fecha” OF oDlg PIXEL ACTION oDlg:End()

ACTIVATE MSDIALOG oDlg CENTERED

MsgStop(cMemo)

Return NIL

TOLECON TAI N ER( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role, a qual perm it e a criação
de um bot ão vinculado a um obj et o OLE.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New( [ nRow] , [ nCol] , [ nWidt h] , [ nHeight ] , [ oWnd] , [ lAut oAct ivat e] ,
[ cFileNam e] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


nRow
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
nCol
caract eres.
nWidt h Num érico, opcional. Lar gura do bot ão em pixels
nHeight Num érico, opcional. Alt ura do bot ão em pixels.

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser


oWnd
criado.
lAut oAct ivat e Nao ut ilizado
cFileNam e Caract er . Endereço do arquivo Ole a ser abert o

- 448 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a u x ilia r e s:

Ope n Fr om File

 D e scr içã o: Abr e arquivo do t ipo OLE.


 Sin t a x e : New( [ cFileNam e, [ lAsI con] , [ allowI nPlace] )
 Pa r â m e t r os:

cFileNam e Caract er . Endereço do arquivo Ole a ser abert o


lAsI con Logico. Define obj et o Ole com o I cone
allowI nPlace Logico opcional. Perm it e abert ura de arquivo local

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// TOleContainer
oTOleContainer := TOleContainer():New(
05,05,306,134,oDlg,.T.,'C:\Lixo\TesteRemote.doc' )

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

- 449 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TPAGEVI EW ( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role, que perm it e a
visualização de arquivos no form at o ger ado pelo spool de im pressão
do Prot heus.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New( [ nCol] , [ nRow] , [ nWidt h] , [ nHeight ] , [ oPrint er] , [ oWnd] ,


[ nPageWidt h] , [ nPageHeight ] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


nCol
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
nRow
caract eres
nWidt h Num érico, opcional. Lar gura em pixels
nHeigt h Num érico, opcional. Alt ura em pixels.

oPrint er Obj et o do t ipo TMsPrint er( )


Obj et o, opcional. Janela ou cont r ole onde a bot ão dev erá ser
oWnd
criado
nPageWidt h Num érico, opcional. Lar gura em pixels da pagina
nPageHeight Num érico, opcional. Alt ura em pixels da pagina

 M é t odos a u x ilia r e s:

Pa ge Siz e

 D e scr içã o: Define o t am anho da pagina.


 Sin t a x e : AddI t em ( nLar gura, nAlt ura)
 Pa r â m e t r os:

nLargura Lagura da página


nAlt ura Alt ura da página

 Re t or n o:

Nenhum -

Pr in t Pa g e

 D e scr içã o: I m prim e um a det erm inada página.


 Sin t a x e : Pr in t Pa g e ( nNrPagina)
 Pa r â m e t r os:

nNrPagina Página que será im pressa

 Re t or n o:

Nenhum -

- 450 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// TPageView
__RelDir := WSPLRelDir()
oPrinter := TMsPrinter():New()
oPrinter:SetFile(__RELDIR + 'matr020.prt',.F.)
oTPageView := TPageView():New(
0,0,500,300,oPrinter,oTFolder2:aDialogs[07],550,350 )
oTPageView:Reset(400,400)
oTPageView:PrintPage(1)
oTPageView:Show()
oTPageView:nZoom := 150

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

- 451 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TPAN EL( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont r ole – t Panel, a qual perm it e
criar um painel est át ico, onde podem ser criados out ros cont r oles
com o obj et ivo de organizar ou agrupar com ponent es visuais.

 Pr opr ie da d e s:

- Herdadas das classes superior es

 Con st r u t or : New( [ anRow] , [ anCol] , [ acText ] , [ aoWnd] , [ aoFont ] , [ alCent ered] ,


[ lPar6] , [ anClrText ] , [ anClrBack] , [ anWidt h] , [ anHeight ] , [ alLower ed] ,
[ alRaised] )

 Pa r â m e t r os:

anRow Num érico, opcional. Coordenada vert ical em pixels.


anCol Num érico, opcional. Coordenada horizont al em pixels.
acText Caract er e, opcional. Tex t o a ser exibido ao fundo.
Obj et o, opcional. Janela ou cont r ole onde será criado o
aoWnd
obj et o.
Lógico, opcional. Se .T. exibe o t ext o de t ít ulo ao cent r o do
alCent ered
cont r ole.
lPar6 Reser vado.
anClrText Num érico, opcional. Cor do t ext o do cont role.
anClrBack Num érico, opcional. Cor do fundo do cont role.
anWidt h Num érico, opcional. Lar gura do cont role em pixels.
anHeight Num érico, opcional. Alt ura do cont role em pixels.
Lógico, opcional. Se .T. exibe o painel rebaixado em r elação
alLower ed
ao cont r ole de fundo.
Lógico, opcional. Se .T. exibe a borda do cont r ole rebaixada
alRaised
em relação ao cont role de fundo.

 Ap a r ê n cia :

- 452 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oPanel:= tPanel():New(10,10,””,oDlg,,,,,CLR_BLUE,100,100) // cria o
painel
@ 10,10 BUTTON oBtn1 PROMPT 'hide' OF oPanel ACTION oPanel:Hide() // cria
botão sobre o painel
@ 200,10 BUTTON oBtn2 PROMPT 'show' OF oDlg ACTION oPanel:Show() // cria
botão fora o painel
ACTIVATE MSDIALOG oDlg CENTERED
Return

TRAD M EN U( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont r ole – TRadMenu, a qual
perm it e criar um cont role visual no form at o Radio But t on.

 Pr opr ie da d e s:

bCh a ng e Bloco de código disparado na m udança de it em selecionado


Bloco de código disparado na m udança de it em selecionado,
bSe t Ge t responsavel pela m udança de valor da variavel num erica
que indica o it em selecionado.
bW h e n Bloco de código que per m it e ou não a alt eração do obj et o
bV a lid Bloco de código ex ecut ado na saida do obj et o.

 Con st r u t or : New( [ nRow] , [ nCol] , [ aI t em s] , [ bSet Get ] , [ oDlg] , [ aHelpI ds] ,


[ bChange] , [ nClrText ] , [ nClrPane] , [ cMsg] , [ lUpdat e] , [ bWhen] ,
[ nWidt h] , [ nHeight ] , [ bValid] , [ lDesign] , [ l3d] , [ lPixel] )

 Pa r â m e t r os:

nRow Num érico, opcional. Coordenada vert ical


nCol Num érico, opcional. Coordenada horizont al
aI t em s Vet or, elem ent os do Radio
bSet Get Code- block , Responsáv el pela set agem de valor
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oDlg
ser criado.
aHelpI ds Não ut ilizado
Bloco de código, opcional. Execut ado quando o it em
bChange
selecionado é alt erado.
nClrText Num érico, opcional. Cor do t ext o da j anela.
nClrPane Num érico, opcional. Cor de fundo da j anela.
Caract er , opcional. Mesam ge ao posicionar o m ouse sobr e o
cMsg
obj et o
lUpdat e Não ut ilizado
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bWhen
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.

- 453 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


nWidt h Num érico, opcional. Lar gura do obj et o
nHeight Num érico, opcional. Alt ura do obj et o
Bloco de código, opcional. Execut ado quando o cont eúdo do
bValid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
lDesign Não ut ilizado
l3d Não ut ilizado
Lógico, opcional. Se .T. as coordenadas inform adas são em
lPixel
pixels, se .F. são em car act eres.

 M é t odos a u x ilia r e s:

Se t Opt ion

 D e scr içã o: Seleciona um it em .


 Sin t a x e : Se t Opt ion ( n I t e m )
 Pa r â m e t r os:

nI tem I t em que será selecionado

 Re t or n o:

Nenhum -

En a b le I t e m

 D e scr içã o: Habilit a/ Desabilit a um I t em


 Sin t a x e : En a b le I t e m ( n I t e m , lSt a t u s)
 Pa r â m e t r os:

nI tem I t em que será m odificado


lSt a t u s St at us que será at ribuído ( .T. – Enable , .F. – Disable)

 Re t or n o:

Nenhum -

En a ble

 D e scr içã o: Habilit a um it em .


 Sin t a x e : En a b le ( nI t e m )
 Pa r â m e t r os:

nI tem I t em que será habilit ado

 Re t or n o:

Nenhum -

- 454 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D isa b le

 D e scr içã o: Desabilit a um it em


 Sin t a x e : D isa ble ( n I t e m )
 Pa r â m e t r os:

nI tem I t em que será desabilit ado

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 455 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
user function TRadMenu()
DEFINE MSDIALOG oDlg FROM 0,0 TO 270,400 PIXEL TITLE 'Exemplo da
TCBrowse'
// Variavel numerica que guarda o item selecionado do Radio
nRadio := 1
// Cria o Objeto
oRadio := TRadMenu():New
(01,01,{'Item01','Item02','Item03','Item04','Item05'},;

,oDlg,,,,,,,,200,200,,,,.T.)
// Seta Eventos
oRadio:bchange := {|| Alert('bChange') }
oRadio:bSetGet := {|u|Iif (PCount()==0,nRadio,nRadio:=u)}
oRadio:bWhen := {|| .T. }
oRadio:bValid := {|| Alert('bValid') }
// Principais comandos
oBtn := TButton():New( 060, 001, 'Retorna item selecionado',;
oDlg,{|| Alert(nRadio) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 070, 001, 'SetOption(2) (Seta um
item)',;
oDlg,{|| oRadio:SetOption(2) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 080, 001, 'EnableItem(2,.T.) (Habilita
item)',;
oDlg,{|| oRadio:EnableItem(2,.T.) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 090, 001, 'EnableItem(2,.F.)
(Desabilita item)',;
oDlg,{|| oRadio:EnableItem(2,.F.) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 100, 001, 'Enable(3) (Habilita
item)',;
oDlg,{|| oRadio:Enable(3) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 110, 001, 'Disable(3) (Desabilita
item)',;
oDlg,{|| oRadio:Disable(3) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )

ACTIVATE MSDIALOG oDlg CENTERED


Return

- 456 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TSBROW SE( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont r ole – TSBr ow se, a qual
perm it e criar um cont role visual do t ipo Grid.

 Pr opr ie da d e s:

+ Herdadas da classe superior


n At Linha at ualm ent e selecionada / posicionada no obj et o
n Le n Núm er o t ot al de linhas do obj et o

 Con st r u t or : New( [ nRow] , [ nCol] , [ nWidt h] , [ nHeight ] , [ oWnd] , [ bChange] ,


[ nHWidt h] , [ oFont ] , [ nLines] )

 Pa r â m e t r os:

nRow Num érico, opcional. Coordenada vert ical


nCol Num érico, opcional. Coordenada horizont al
nWidt h Num érico, opcional. Lar gura do obj et o
nHeight Num érico, opcional. Alt ura do obj et o
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oWnd
ser criado.
bChange Bloco de código, na m udança de linha
nHWidt h Não ut ilizado
oFont Obj et o, opcional. Font e
nLines Núm erico. Nr de linhas por célula

 M é t odos a u x ilia r e s:

GoUp

 D e scr içã o: Salt a um a linha para cim a.


 Sin t a x e : GoUp( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoD ow n

 D e scr içã o: Salt a um a linha para baixo.


 Sin t a x e : GoD ow n ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

- 457 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


GoTop

 D e scr içã o: Salt a para prim eira linha.


 Sin t a x e : GoTop( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoBot t om

 D e scr içã o: Salt a para ult im a linha.


 Sin t a x e : GoBot t om ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

Row Cou n t

 D e scr içã o: Ret orna num er o de linhas visiveis.


 Sin t a x e : Row Cou n t ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

LEdit Ce ll

 D e scr içã o: Edit a o valor de um a coluna.


 Sin t a x e : lEdit Cell( aList , oList , cPict ure, nCol )
 Pa r â m e t r os:

aList Vet or da Browse onde est ão os valor es da m esm a


oList Obj et o, Brow se a ser edit ado
cPict ure Caract er , pict ure necessária para edição do cam po
nCol Num érico, coluna a ser edit ada.

 Re t or n o:

N il

- 458 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

- 459 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

aBrowse := {{'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE


001'},;
{'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE 001'}
}
oBrowse := TSBrowse():New(01,01,245,150,oDlg,,16,,5)
nForeCor := CLR_GRAY
nBackCor := CLR_WHITE
oBrowse:AddColumn( TcColumn():New('Nome',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:AddColumn( TcColumn():New('Endereço',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:AddColumn( TcColumn():New('Bairro',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:SetArray(aBrowse)

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)
TButton():New( 190, 060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},40,10,,,,.T.)

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

- 460 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TSAY( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – t Say, a qual exibe o
cont eúdo de t ext o est át ico sobr e um a j anela ou cont role
previam ent e definidos.

 Pr opr ie da d e s:

Lógico. Se .T. quebra o t ext o em várias linhas de m aneira a


lWordWrap enquadrar o cont eúdo na ár ea det erm inada para o cont r ole,
sendo o padrão .F.
Lógico. Se .T. a cor de fundo do cont r ole é ignorada
lTransparent assum indo o cont eúdo ou cor do cont role ou j anela ao
fundo, sendo o padrão .T.

 Con st r u t or : New( [ anRow] , [ anCol] , [ abText ] , [ aoWnd] , [ acPict ure] , [ aoFont ] ,


[ lPar7] , [ lPar8] , [ lPar9] , [ alPixels] , [ anClrText ] , [ anClrBack] ,
[ anWidt h] , [ anHeight ] , [ lPar15] , [ lPar16] , [ lPar17] , [ lPar18] , [ lPar19] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


anRow
caract eres.
Num érico, opcional. Coordenada h orizont al em pixels ou
anCol
caract eres.
Codeblock , opcional. Quando execut ado dev e r et ornar um a
abText
cadeia de caract eres a ser exibida.
Obj et o, opcional. Janela ou diálogo onde o cont r ole será
aoWnd
criado.
Caract er e, opcional. Pict ure de form at ação do cont eúdo a
acPict ure
ser exibido.
Obj et o, opcional. Obj et o t ipo t Font para configuração do t ipo
aoFont
de font e que será ut ilizado para exibir o cont eúdo.
lPar7 Reser vado.
lPar8 Reser vado.
lPar9 Reser vado.
Lógico, opcional. Se . T. considera coordenadas passadas em
alPixels pixels se .F., padrão, considera as coordenadas passadas em
caract eres.
anClrText Num érico, opcional. Cor do cont eúdo do cont role.
anClrBack Num érico, opcional. Cor do fundo do cont role.
anWidt h Num érico, opcional. Lar gura do cont role em pixels.
anHeight Num érico, opcional. Alt ura do cont role em pixels.
lPar15 Reser vado.
lPar16 Reser vado.
lPar17 Reser vado.
lPar18 Reser vado.
lPar19 Reser vado.

- 461 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oSay:= tSay():New(01,01,{||'para exibir'},oDlg,,,,;
,,.T.,CLR_RED,CLR_WHITE,100,20)
ACTIVATE MSDIALOG oDlg CENTERED
Return

- 462 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TSCROLLBOX( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – t Scrollbox, a qual
perm it e criar um painel com scroll deslizant es nas lat erais
( horizont ais e v ert icais) do cont r ole.

 Pr opr ie da d e s:

- Herdadas das classes superior es

 Con st r u t or : New( [ aoWnd] , [ anTop] , [ anLeft ] , [ anHeight ] , [ anWidt h] ,


[ alVert ical] , [ alHorizont al] , [ alBorder] )

 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o cont role será


aoWnd
criado.
anTop Num érico, opcional. Coordenada vert ical em pixels.
anLeft Num érico, opcional. Coordenada horizont al em pixels.
anHeight Num érico, opcional. Alt ura do cont role em pixels.
anWidt h Num érico, opcional. Lar gura do cont role em pixels.
alVert ical Lógico, opcional. Se .T. exibe a barra de scroll vert ical.
alHorizont al Lógico, opcional. Se .T. exibe a barra de scroll horizont al.
alBorder Lógico, opcional. Se .T. exibe a borda do cont r ole.

 Ap a r ê n cia :

- 463 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oScr, oGet1, oGet2, oGet3
Local cGet1, cGet2, cGet3
cGet1:= Space(10)
cGet2:= Space(10)
cGet3:= Space(10)
DEFINE MSDIALOG oDlg FROM 0,0 TO 220,220 PIXEL TITLE 'Meu test'
oScr:= TScrollBox():New(oDlg,10,10,100,100,.T.,.T.,.T.) // cria controles
dentro do scrollbox
@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oScr PIXEL
@ 50,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oScr PIXEL
@ 150,100 MSGET oGet3 VAR cGet3 SIZE 100,10 OF oScr PIXEL
ACTIVATE MSDIALOG oDlg CENTERED
Return

TSI M PLEED I TOR( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – t Sim pleEdit or, a qual
perm it e criar um cont r ole visual para edição de t ext os com recursos
sim ples, com o o Not ePad®

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New( [ anRow] , [ anCol] , [ aoWnd] , [ anWidt h] , [ anHeight ] ,[ acText ] ,


[ alReadOnly] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


anRow
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
anCol
caract eres.
aoWnd Janela ou cont r ole onde o edit or deverá ser criado.
anWidt h Num érico, opcional. Lar gura do edit or em pixels.
anHeight Num érico, opcional. Alt ura do edit or em pixels.
acText Text o, opcional. I nserido na inicialização do obj et o.
alReadOnly Lógico, opcional. Perm it e ou não a edição do t ext o

 M é t odos a u x ilia r e s:

Cr e a t e

 D e scr içã o: Mét odo const rut or opcional da classe.


 Sin t a x e : Creat e( aoWnd )
 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o edit or dev erá


aoWnd
ser criado.

- 464 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Re t or n o:

Obj e t o Obj et o do t ipo Tsim pleEdit or.

Loa d

 D e scr içã o: Carr ega um t ext o para o edit or.


 Sin t a x e : Load( acText o )
 Pa r â m e t r os:

acText o Text o. Text o que inicializará o edit or.

 Re t or n o:

Nenhum -

Te x t Bold

 D e scr içã o: Text o em Negrit o.


 Sin t a x e : Text Bold( alBold )
 Pa r â m e t r os:

Lógico. Habilit a ou Desabilit a a sessão do t ext o com o


alBold
Negrit o.

 Re t or n o:

Nenhum -

Te x t Un d e r lin e

 D e scr içã o: Text o Sublinhado.


 Sin t a x e : Text Underline( alUnderline )
 Pa r â m e t r os:

Lógico. Habilit a ou Desabilit a a sessão do t ext o


alUnderline
Sublinhado.

 Re t or n o:

Nenhum -

Te x t I t a lic

 D e scr içã o: Text o I t álico.


 Sin t a x e : Text I t alic( alI t alic )
 Pa r â m e t r os:

alI t alic Lógico. Habilit a ou Desabilit a a sessão do t ext o I t álico.

 Re t or n o:

Nenhum -

- 465 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Te x t Fa m ily

 D e scr içã o: Fam ília de font es.


 Sin t a x e : Text Fam ily( acFam ily )
 Pa r â m e t r os:

Text o. Nom e da fam ília da font e a ser usada na sessão do


acFam ily
t ext o.

 Re t or n o:

Nenhum -

Te x t Siz e

 D e scr içã o: Tam anho da font e.


 Sin t a x e : Text Size( anSize )
 Pa r â m e t r os:

anSize Num érico. Tam anho da font e ut ilizada na sessão do t ext o.

 Re t or n o:

Nenhum -

Te x t St yle

 D e scr içã o: Est ilo do parágrafo.


 Sint a x e : Text St yle( anSt yle )
 Pa r â m e t r os:

Num érico. Est ilo do par ágrafo a ser ut ilizada na sessão do


t ext o.

1 – Norm al
2 – Disco ( Bullet )
anSt yle
3 – Circulo ( Bullet )
4 – Quadrado ( Bullet )
5 – Ordem decim al
6 – Ordem alfanum érica m inúsculo
7 – Ordem alfanum érica m aiúsculo

 Re t or n o:

Nenhum -

- 466 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Te x t Align

 D e scr içã o: Alinham ent o do t ext o.


 Sin t a x e : Text Align( anAlign )
 Pa r â m e t r os:

Num érico. Tipo do alinham ent o do parágrafo.


1 – Esquerda
anAlign 2 – Direit a
3 – Cent ralizado
4 – Just ificado

 Re t or n o:

N e n hu m -

Te x t For m a t

 D e scr içã o: Form at o do t ext o.


 Sin t a x e : Text Form at ( anForm at )
 Pa r â m e t r os:

Num érico. Form at o do t ext o


anForm at 1 – Ht m l
2 – Plain Text

 Re t or n o:

Nenhum -

Re t Te x t

 D e scr içã o: Ret orna o t ext o em form at o st ring.


 Sin t a x e : Ret Text ( void )
 Pa r â m e t r os:

void Ret orna um a st ring com o cont eúdo do edit or

 Re t or n o:

Nenhum -

Re t Te x t Se l

 D e scr içã o: Ret orna o t ext o selecionado em for m at o st ring..


 Sin t a x e : Ret Text ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

St r in g Text o selecionado.

- 467 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Te x t St a t us

 D e scr içã o: Ret orna um arr ay com as propriedades do t ext o posicionado.


 Sin t a x e : Text St at us( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

Ret orna um ar ray com as seguint es propriedades :

1 – Lógico Negrit o
2 – Lógico I t álico
Ar r a y
3 – Lógico Sublinhado
4 – Caract er RGB da cor
5 – Caract er Tam anho da font e
6 – Caract er Font e

 Ap a r ê n cia :

- 468 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include “protheus.ch”

User Function MyEditor()


Local oDlg, oEditor
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE “Meu Editor”
// Usando o método create
oEdit := tSimpleEditor():Create( oDlg )
oEdit:nTop := 10
oEdit:nLeft := 10
oEdit:nWidth := 600
oEdit:nHeight := 500

// Usando o método new


oEdit := tSimpEdit():New( 0, 0, oDlg, 500, 600 )

ACTIVATE MSDIALOG oDlg CENTERED


Return Nil

TSLI D ER( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont r ole – t Slider, a qual perm it e
criar um cont r ole visual do t ipo bot ão deslizant e.

 Pr opr ie da d e s:

Bloco de código. Execut ado t oda v ez que o valor é alt erado


bChange
ret ornando o nov o valor .

 Con st r u t or : New( [ anRow] , [ anCol] , [ aoWnd] , [ abChange] , [ anWidt h] ,


[ anHeight ] , [ acMsg] , [ abWhen] )

 Pa r â m e t r os:

anRow Num érico, opcional. Coordenada vert ical em pixels


anCol Num érico, opcional. Coordenada horizont al em pixels
Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser
aoWnd
criado.
Bloco de código, opcional. Bloco que dev erá ser acionado
abChange
quando o bot ão for m ov im ent ado.
anWidt h Num érico, opcional. Lar gura do bot ão em pixels.
anHeight Num érico, opcional. Alt ura do bot ão em pixels.
acMsg Caract er , opcional. Mensagem de hint do bot ão
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
abWhen
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.

 M é t odos a u x ilia r e s:

- 469 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Cr e a t e

 D e scr içã o: Mét odo const rut or da classe.


 Sin t a x e : Creat e( aoWnd )
 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá


aoWnd
ser criado.

 Re t or n o:

Obj e t o Obj et o do t ipo TSlide criado.

se t Ra ng e

 D e scr içã o: Especifica a faixa de valor es.


 Sin t a x e : set Range( m in, m ax )
 Pa r â m e t r os:

Min Núm érico. Valor m ínim o do bot ão.


Max Núm érico. Valor m áxim o do bot ão.

 Re t or n o:

Nenhum -

se t M a r k s

 D e scr içã o: Especifica o t ipo de m ar cação do bot ão.


 Sin t a x e : set Marks( nTipo )
 Pa r â m e t r os:

Núm érico. Tipo de m ar cação do bot ão.


nTipo
1 -
Núm érico. Valor m áxim o do bot ão.
0 – Sem m ar cação
Max 1 – Acim a ( esquerda se vert ical)
2 – Abaixo ( direit a se v ert ical)
3 – Am bos os lados

 Re t or n o:

Nenhum -

- 470 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


se t I n t e r va l

 D e scr içã o: Especifica a dist ância ent re um m ar cador e out ro.


 Sin t a x e : set I nt erval( nI nt erval )
 Pa r â m e t r os:

nI nt erval Núm érico. Valor ent r e os m ar cador es

 Re t or n o:

Nenhum -

se t V a lu e

 D e scr içã o: Especifica um valor para o bot ão.


 Sin t a x e : set Value( nVal )
 Pa r â m e t r os:

nVal Núm érico. Valor do bot ão

 Re t or n o:

Nenhum -

se t St e p

 D e scr içã o: Especifica o valor dos passos do bot ão.


 Sin t a x e : set St ep( nSt ep )
 Pa r â m e t r os:

nSt ep Núm érico. Valor do passo do bot ão

 Re t or n o:

Nenhum -

se t Or ie n t

 D e scr içã o: Especifica a orient ação do bot ão, horizont al ou vert ical.
 Sin t a x e : set Orient ( nOr ient )
 Pa r â m e t r os:

Núm érico. Orient ação do bot ão


nOrient 0 – Horizont al
1 – Vert ical

 Re t or n o:

Nenhum -

- 471 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include “protheus.ch”
#include “hbutton.ch”
User Function MytSlider()
Local oDlg, oSlider
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE “Meu tSlider”
// Usando o método create
oSlider:= tSlider():Create( oDlg )
oSlider:nTop := 100
oSlider:nLeft := 10
oSlider:nWidth := 100
oSlider:nHeight := 30

// Usando o command
@ 100, 10 SLIDER oSlider SIZE 30, 100 OF oDlg MESSAGE 'tSlider'
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil

TSPLI TTER( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – t Split t er, a qual perm it e
criar um cont r ole visual do t ipo divisor.

 Pr opr ie da d e s:

- Herdadas as classes superior es.

 Con st r u t or : New( [ anRow] , [ anCol] , [ aoWnd] , [ anWidt h] , [ anHeight ] ,


[ anOrient at ion] )

 Pa r â m e t r os:

anRow Num érico, opcional. Coordenada vert ical


anCol Num érico, opcional. Coordenada horizont al
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
aoWnd
ser criado.
anWidt h Num érico, opcional. Lar gura do obj et o
anHeight Num érico, opcional. Alt ura do obj et o
Num érico, opcional. Sent ido no qual deverão ser criado os
divisores.
anOrient at ion
0 – Horizont al
1 – Vert ical

- 472 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a u x ilia r e s:

Cr e a t e

 D e scr içã o: Mét odo const rut or da classe.


 Sin t a x e : Creat e( aoWnd )
 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o divisor deverá


aoWnd
ser criado.

 Re t or n o:

Obj e t o Obj et o do t ipo Tsplit t er gerado.

se t Or ie n t

 D e scr içã o: Especifica a orient ação do divisor, horizont al ou vert ical.


 Sin t a x e : set Orient ( nOr ient )
 Pa r â m e t r os:

Núm érico. Orient ação do bot ão


nOrient 0 – Horizont al
1 – Vert ical

 Re t or n o:

Nenhum -

se t Ch ildColla p se

 D e scr içã o: Especifica se os elem ent os podem ser “ collapsibles” .


 Sin t a x e : set ChildCollpse( lColl )
 Pa r â m e t r os:

lColl Lógico. At iva / Desat iva

 Re t or n o:

Nenhum -

- 473 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


se t Colla p se

 D e scr içã o: Especifica o obj et o que pode ser “ collapsible” .


 Sin t a x e : set Collapse( oObj , lColl )
 Pa r â m e t r os:

oObj Obj et o. Cont role a ser “ collapsed”


lColl Lógico. At iva / Desat iva

 Re t or n o:

Nenhum -

m ovToLa st

 D e scr içã o: Coloca o obj et o com o ult im o das divisões.


 Sin t a x e : m ovToLast ( oObj )
 Pa r â m e t r os:

oObj Obj et o. Cont role a posicionado

 Re t or n o:

Nenhum -

m ovToFir st

 D e scr içã o: Coloca o obj et o com o prim eiro das divisões.


 Sin t a x e : m ovToFirst ( oObj )
 Pa r â m e t r os:

oObj Obj et o. Cont role a ser posicionado

 Re t or n o:

Nenhum -

se t Op a qu e Re siz e

 D e scr içã o: Especifica se o r esize dev e ser opaco.


 Sin t a x e : set OpaqueResize( lOpaq )
 Pa r â m e t r os:

lOpaq Lógico. At iva / Desat iva

 Re t or n o:

Nenhum -

- 474 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


se t Re siz e M ode

 D e scr içã o: Especifica o m ode de “ r esize” do obj et o..


 Sin t a x e : se t Re siz e M ode ( oObj , nMode )
 Pa r â m e t r os:

oObj Obj et o. Cont role a ser “ resized”


Num érico. Modo do “ r esize”
0 – St r et ch
nMode 1- KeepSize
2 – FollowSizeHint
3 – Aut o

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 475 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include “protheus.ch”
#include “hbutton.ch”

User Function MytSplitter()


Local oDlg, oSplitter, oPanel1, oPanel2, oPanel3

DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE “Meu tSplitter”

// Usando o método create


oSplitter := tSplitter():Create( oDlg )
@ 1, 1 MSPANEL oPanel1 OF oSplitter
@ 1, 2 MSPANEL oPanel2 OF oSplitter
@ 1, 3 MSPANEL oPanel3 OF oSplitter

// Usando o command
@ 1, 1 SPLITTER oSplitter SIZE 100, 100 OF oDlg
@ 1, 1 MSPANEL oPanel1 OF oSplitter
@ 1, 2 MSPANEL oPanel2 OF oSplitter
@ 1, 3 MSPANEL oPanel3 OF oSplitter

ACTIVATE MSDIALOG oDlg CENTERED

Return Nil

TTABS( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont r ole – TTabs, a qual perm it e
criar um cont r ole visual do t ipo past a.

 Pr opr ie da d e s:

- Herdadas das classes superior es.

 Con st r u t or : New( [ anTop] , [ anLeft ] , [ aPr om pt s] , [ bAct ion] , [ oWnd] , [ nOpt ion] ,
[ nClrFore] , [ nClrBack] , [ lPixel] , [ lDesign] , [ nWidt h] , [ nHeigt h] ,
[ cMsg] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


anTop
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
anLeft
caract eres
aProm pt s Array , Tit ulo dos folders
bAct ion Bloco de codigo, Dispar ado na t r oca da aba.

Obj et o, opcional. Janela ou cont r ole onde a bot ão deverá ser


oWnd
criado
nOpt ion Num érico, opcional. Folder selecionado
nClrFore Num érico, opcional. Cor de fr ent e
nClrBack Num érico, opcional. Cor de fundo
lPixel Lógico, opcional. Ut iliza coordenadas em pixel

- 476 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


lDesign Lógico, opcional. NÃO USADO
nWidt h Num érico, opcional. Lar gura em pixels
nHeigt h Num érico, opcional. Alt ura em pixels.
cMsg Caract er e, Mensagem de Hint

 M é t odos a u x ilia r e s:

Add I t e m

 D e scr içã o: Adiciona um a aba na past a


 Sin t a x e : AddI t em ( cTít ulo)
 Pa r â m e t r os:

cTít ulo Tít ulo da aba que será adicionada

 Re t or n o:

N e n hu m -

Se t Opt ion

 D e scr içã o: Seleciona a Aba


 Sin t a x e : Set Opt ion( nNrAba )
 Pa r â m e t r os:

Núm er o que ident ifica a posição da aba que ser á


nNrAba
selecionada.

 Re t or n o:

Nenhum -

 Ap a r ê n cia :

- 477 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

oTTabs := TTabs():New(01,01,{'Aba01','Aba02','Aba03'},;
{||oPanel01:LVISIBLECONTROL:=(oTTabs:nOption==1)},;
oDlg,,RGB(255,0,0),RGB(255,255,0),.T.,,120,120,)
oPanel01 := TPanel():New( 000, 000,'',oTTabs,,,,,,100,100,,.T. )
oPanel01:lVisibleControl := .T.
oBtn01 := TButton():New( 01,01,'TButton01',oPanel01,;
{||oTTabs:SetOption(2)}, 037,
012,,,.F.,.T.,.F.,,.F.,,,.F. )

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

TTOOLBOX( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – t Toolbox, a qual perm it e
criar um cont r ole visual para agrupar difer ent es obj et os.

 Pr opr ie da d e s:

Bloco de código. Ex ecut ado na t r oca ent r e os grupos


bChangeGrp
exist ent es.

 Con st r u t or : New( [ anRow] , [ anCol] , [ aoWnd] , [ anWidt h] , [ anHeight ] , [ aoFont ] ,


[ acMsg] ] , [ abWhen] )

 Pa r â m e t r os:

Num érico, opcional. Coordenada vert ical em pixels ou


anRow
carat er es.
Num érico, opcional. Coordenada horizont al em pixels ou
anCol
caract eres.
Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser
aoWnd
criado.
anWidt h Num érico, opcional. Lar gura do bot ão em pixels.
anHeight Num érico, opcional. Alt ura do bot ão em pixels.
Obj et o, opcional. Obj et o t ipo t Font com propriedades da
aoFont
font e ut ilizada para o t ít ulo do bot ão.
acMsg Mensagem , opcional. Toolt ip/ Hint do com ponent e.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
abWhen
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.

- 478 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odos a u x ilia r e s:

Cr e a t e

 D e scr içã o: Mét odo const rut or opcional da classe.


 Sin t a x e : Creat e( aoWnd )
 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá


aoWnd
ser criado.

 Re t or n o:

Obj e t o Obj et o do t ipo Tt oolBox gerado.

a dd Gr ou p

 D e scr içã o: Adiciona um grupo


 Sin t a x e : addGroup( aoObj , acNam e, aoI con )
 Pa r â m e t r os:

aoObj Obj et o. Obj et o Pai que vai ser inserido no grupo.


acNam e Caract er e. Descrição do grupo
aoI con Obj et o, opcional. Í cone para o grupo

 Re t or n o:

Nenhum -

r e m ov e Gr ou p

 D e scr içã o: Rem ov e um grupo


 Sin t a x e : r em ov eGroup( aoObj )
 Pa r â m e t r os:

aoObj Obj et o. Obj et o Pai que vai ser r em ovido do grupo.

 Re t or n o:

Nenhum -

se t Cu r r e n t Gr ou p

 D e scr içã o: Define o gr upo cor rent e


 Sin t a x e : set Cur rent Gr oup( aoObj )
 Pa r â m e t r os:

aoObj Obj et o. Obj et o Pai que será definido com o grupo cor r ent e.

 Re t or n o:

Nenhum -

- 479 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo:

#include “protheus.ch”

User Function MytToolbox()


Local oDlg, oTb

DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE “Meu Toolbox”

// Usando o método create


oTb:= tToolbox():Create( oDlg )
oTb:nTop := 100
oTb:nLeft := 10
oTb:nWidth := 100
oTb:nHeight := 30

oTb:Add( oPanel, “Opção 1”, oIcone)

// Usando o command
@ 200,100 TOOLBOX oTb SIZE 100,30 OF oDlg

TOOLBOX oTb ADDGROUP TITLE “Opção 1” OBJECT oPanel ICON oIcone

ACTIVATE MSDIALOG oDlg CENTERED

Return Nil

- 480 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TW BROW SE( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – TWBrow se, a qual
perm it e criar um cont role visual do t ipo Grid.

 Pr opr ie da d e s:

+ Herdadas da classe superior


n At Linha at ualm ent e selecionada / posicionada no obj et o
n Le n Núm er o t ot al de linhas do obj et o

 Con st r u t or : New( [ nRow] , [ nCol] , [ nWidt h] , [ nHeigt h] ,[ bFields] , [ aHeader s] ,


[ aColSizes] , [ oDlg] , [ cField] , [ uValue1] , [ uValue2] ,
[ uChange] ,[ { | nRow,nCol,nFlags| [ uLDblClick] } ] ,
[ { | nRow,nCol,nFlags| [ uRClick] } ] , [ oFont ] , [ oCursor] , [ nClrFor e] ,
[ nClrBack] , [ cMsg] , [ lUpdat e] , [ cAlias] , [ lPixel] , [ { uWhen} ] ,
[ lDesign] , [ bValid] , [ lHScr oll] , [ lVScroll] )

 Pa r â m e t r os:

nRow Num érico, opcional. Coordenada vert ical


nCol Num érico, opcional. Coordenada horizont al
nWidt h Num érico, opcional. Lar gura do obj et o
nHeight Num érico, opcional. Alt ura do obj et o
bFields Bloco de código, List a de Cam pos
aHeaders Vet or, Descrição dos cam pos para no cabeçalho
aColSizes Vet or, Largur a das colunas
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oDlg
ser criado.
cField Caract er , opcional. Cam pos necessários ao filt ro
uValue1 I ndefinido, opcional. I nicio do int ervalo para o filt ro
uValue2 I ndefinido, opcional. Fim do int ervalo par a o filt ro
Bloco de código, opcional. Execut ado quando o it em
bChange
selecionado é alt erado.
Bloco de código, opcional. Execut ado quando acionado duplo
bLDblClick
click do bot ão esquerdo do m ouse sobr e o cont r ole.
bRClick Não ut ilizado
oFont Obj et o, opcional. Font e
oCursor Obj et o, opcional. Tipo do Cur sor
nClrFore Num érico, opcional. Cor do t ext o da j anela.
nClrBack Num érico, opcional. Cor de fundo da j anela.
Caract er , opcional. Mesam ge ao posicionar o m ouse sobr e o
cMsg
obj et o
lUpdat e Não ut ilizado
Caract er , opcional se obj et o ut ilizado com Vet or , obrigat orio
cAlias
se ut ilizado com Tabela
Lógico, opcional. Se .T. as coordenadas inform adas são em
lPixel
pixels, se .F. são em car act eres.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bWhen
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lDesign Não Ut ilizado
bValid Bloco de código, opcional. Execut ado quando o cont eúdo do

- 481 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
Lógico, opcional. Se .T., habilit a barra de rolagem
lHScroll
horizont al.
lVScroll Lógico, opcional. Se .T., habilit a barra de rolagem vert ical.

 M é t odos a u x ilia r e s:

GoUp

 D e scr içã o: Salt a um a linha para cim a.


 Sin t a x e : GoUp( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoD ow n

 D e scr içã o: Salt a um a linha para baixo.


 Sin t a x e : GoD ow n ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoTop

 D e scr içã o: Salt a para prim eira linha.


 Sin t a x e : GoTop( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoBot t om

 D e scr içã o: Salt a para ult im a linha.


 Sin t a x e : GoBot t om ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

- 482 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


N il

Row Cou n t

 D e scr içã o: Ret orna num er o de linhas visiveis.


 Sin t a x e : Row Cou n t ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

LEdit Ce ll

 D e scr içã o: Edit a o valor de um a coluna.


 Sin t a x e : lEdit Cell( aList , oList , cPict ure, nCol )
 Pa r â m e t r os:

aList Vet or da Browse onde est ão os valor es da m esm a


oList Obj et o, Brow se a ser edit ado
cPict ure Caract er , pict ure necessária para edição do cam po
nCol Num érico, coluna a ser edit ada.

 Re t or n o:

N il

 Ap a r ê n cia :

- 483 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')

DEFINE MSDIALOG oDlg FROM 0,0 TO 402,402 PIXEL TITLE 'Exemplo'

oBrowse := TWBrowse():New( 01 , 01, 245, 150,,;


{'','Codigo','Descrição'},{20,30,30}, oDlg, ,,,,;
{||},,,,,,,.F.,,.T.,,.F.,,, )
aBrowse := {{.T.,'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{.F.,'CLIENTE 002','RUA CLIENTE 002','BAIRRO CLIENTE
002'},;
{.T.,'CLIENTE 003','RUA CLIENTE 003','BAIRRO CLIENTE
003'} }

oBrowse:SetArray(aBrowse)
oBrowse:bLine := {||{;
If(aBrowse[oBrowse:nAt,01],oOK,oNO),;
aBrowse[oBrowse:nAt,02],;
aBrowse[oBrowse:nAt,03],;
aBrowse[oBrowse:nAt,04] } }
oBrowse:bLDblClick := ;
{|| aBrowse[oBrowse:nAt][1] :=
!aBrowse[oBrowse:nAt][1],oBrowse:DrawSelect()}

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)
TButton():New(190,060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},80,10,,,,.T.)

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

- 484 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


VCBROW SE( )

 D e scr içã o: Classe de obj et os visuais do t ipo cont role – VCBr ow se, a qual
perm it e criar um cont role visual do t ipo Grid.

 Pr opr ie da d e s:

+ Herdadas da classe superior


n At Linha at ualm ent e selecionada / posicionada no obj et o
n Le n Núm er o t ot al de linhas do obj et o

 Con st r u t or : New( [ nRow] , [ nCol] , [ nWidt h] , [ nHeigt h] ,[ bFields] , [ aHeader s] ,


[ aColSizes] , [ oDlg] , [ cField] , [ uValue1] , [ uValue2] ,
[ uChange] ,[ { | nRow,nCol,nFlags| [ uLDblClick] } ] ,
[ { | nRow,nCol,nFlags| [ uRClick] } ] , [ oFont ] , [ oCursor] , [ nClrFor e] ,
[ nClrBack] , [ cMsg] , [ lUpdat e] , [ cAlias] , [ lPixel] , [ { uWhen} ] ,
[ lDesign] , [ bValid] , [ lHScr oll] , [ lVScroll] )

 Pa r â m e t r os:

nRow Num érico, opcional. Coordenada vert ical


nCol Num érico, opcional. Coordenada horizont al
nWidt h Num érico, opcional. Lar gura do obj et o
nHeight Num érico, opcional. Alt ura do obj et o
bFields Bloco de código, List a de Cam pos
aHeaders Vet or, Descrição dos cam pos para no cabeçalho
aColSizes Vet or, Largur a das colunas
Obj et o, opcional. Janela ou cont r ole onde o divisor deverá
oDlg
ser criado.
cField Caract er , opcional. Cam pos necessários ao filt ro
uValue1 I ndefinido, opcional. I nicio do int ervalo para o filt ro
uValue2 I ndefinido, opcional. Fim do int ervalo par a o filt ro
Bloco de código, opcional. Execut ado quando o it em
bChange
selecionado é alt erado.
Bloco de código, opcional. Execut ado quando acionado duplo
bLDblClick
click do bot ão esquerdo do m ouse sobr e o cont r ole.
bRClick Não ut ilizado
oFont Obj et o, opcional. Font e
oCursor Obj et o, opcional. Tipo do Cur sor
nClrFore Num érico, opcional. Cor do t ext o da j anela.
nClrBack Num érico, opcional. Cor de fundo da j anela.
Caract er , opcional. Mesam ge ao posicionar o m ouse sobr e o
cMsg
obj et o
lUpdat e Não ut ilizado
Caract er , opcional se obj et o ut ilizado com Vet or , obrigat orio
cAlias
se ut ilizado com Tabela
Lógico, opcional. Se .T. as coordenadas inform adas são em
lPixel
pixels, se .F. são em car act eres.
Bloco de código, opcional. Execut ado quando m udança de
foco de ent rada de dados est á sendo efet uada na j anela
bWhen
onde o cont r ole foi criado. O bloco deve r et ornar .T. se o
cont r ole dev e perm anecer habilit ado ou .F. se não.
lDesign Não Ut ilizado

- 485 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Bloco de código, opcional. Execut ado quando o cont eúdo do
bValid cont r ole dev e ser validado, dev e ret ornar .T. se o cont eúdo
for válido e .F. quando o cont eúdo for inválido.
Lógico, opcional. Se .T., habilit a barra de rolagem
lHScroll
horizont al.
lVScroll Lógico, opcional. Se .T., habilit a barra de rolagem vert ical.

 M é t odos a u x ilia r e s:

GoUp

 D e scr içã o: Salt a um a linha para cim a.


 Sin t a x e : GoUp( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoD ow n

 D e scr içã o: Salt a um a linha para baixo.


 Sin t a x e : GoD ow n ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

GoTop

 D e scr içã o: Salt a para prim eira linha.


 Sin t a x e : GoTop( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

- 486 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


GoBot t om

 D e scr içã o: Salt a para ult im a linha.


 Sin t a x e : GoBot t om ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

Row Cou n t

 D e scr içã o: Ret orna num er o de linhas visiveis.


 Sin t a x e : Row Cou n t ( )
 Pa r â m e t r os:

Nenhum -

 Re t or n o:

N il

LEdit Ce ll

 D e scr içã o: Edit a o valor de um a coluna.


 Sin t a x e : lEdit Cell( aList , oList , cPict ure, nCol )
 Pa r â m e t r os:

aList Vet or da Browse onde est ão os valor es da m esm a


oList Obj et o, Brow se a ser edit ado
cPict ure Caract er , pict ure necessária para edição do cam po
nCol Num érico, coluna a ser edit ada.

 Re t or n o:

N il

- 487 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

- 488 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include 'protheus.ch'
User Function Teste()
Local oDlg
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
DEFINE MSDIALOG oDlg FROM 0,0 TO 402,402 PIXEL TITLE 'Exemplo'

oBrowse := VCBrowse():New( 01 , 01, 245, 150,,;


{'','Codigo','Descrição'},{20,30,30}, oDlg, ,,,,;
{||},,,,,,,.F.,,.T.,,.F.,,, )
aBrowse := {{.T.,'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{.F.,'CLIENTE 002','RUA CLIENTE 002','BAIRRO CLIENTE
002'},;
{.T.,'CLIENTE 003','RUA CLIENTE 003','BAIRRO CLIENTE
003'} }

oBrowse:SetArray(aBrowse)
oBrowse:bLine := {||{;
If(aBrowse[oBrowse:nAt,01],oOK,oNO),;
aBrowse[oBrowse:nAt,02],;
aBrowse[oBrowse:nAt,03],;
aBrowse[oBrowse:nAt,04] } }
oBrowse:bLDblClick :=;
{|| aBrowse[oBrowse:nAt][1] :=
!aBrowse[oBrowse:nAt][1],oBrowse:DrawSelect()}

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)
TButton():New(190,060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},40,10,,,,.T.)

ACTIVATE MSDIALOG oDlg CENTERED


Return NIL

- 489 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D ocum e n t a çã o dos com pon e n t e s d a in t e r f a ce v isu a l

Os com ponent es da int er face visual da linguagem ADVPL ut ilizados nest e t r einam ent o est ão
docum ent ados na seção Guia de Referência, ao final dest e m at erial.

Para visualizar a docum ent ação com plet a de t odos os com ponent es m encionados nest e
capít ulo deve ser acesso o sit e DEM – Docum ent ação Elet r ônica Microsiga
( dem .m icrosiga.com .br) confor m e abaixo:

- 490 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 6 .1 . Pa r t icula r ida de s dos com pone nt e s visua is

3 6 .1 .1 . Configur a ndo a s cor e s pa r a os com pone nt e s

Os com ponent es visuais da linguagem ADVPL ut ilizam o padrão de cores RGB.

As cor es dest e padrão são definidas pela seguint e fór m ula, a qual dev e ser avaliada t endo
com o base a palet a de cor es no form at o RGB:

n Cor := n Ve r m e lh o + ( n V e r d e * 2 5 6 ) + ( n Az u l * 6 5 5 3 6 )

Figu r a : Pa le t a d e cor e s n o for m a t o RGB

Com base nest a palet a, podem os definir os valores das seguint es cores básicas:

Cor R G B Va lor
Pret o 0 0 0 0
Azul 0 0 255 16711680
Verde 0 255 0 65280
Ciano 0 255 255 16776960
Verm elho 255 0 0 255
Rosa 255 0 255 16711935
Am arelo 255 255 0 65535
Branco 255 255 255 16777215

- 491 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Para at ribuir as cor es aos obj et os visuais devem ser obser vados os at r ibut os ut ilizados para
est es fins em cada obj et o, com o por ex em plo:

M SD I ALOG( )

n Clr Pa n e Cor de fundo do painel

n Clr Te x t Cor da font e das let ras do painel

TSAY( )

n Clr Pa n e Cor de fundo do painel

n Clr Te x t Cor da font e das let ras do painel

Fu n çã o RGB( )

A linguagem ADVPL possui a função RGB( ) a qual ret orna o valor da cor a ser definido, de
acordo com a param et rização de cada um dos elem ent os da palet a RGB.

RGB( n Re d, n Gr e e n , n Blu e )

n Re d Valor de 0- 255 para o elem ent o v erm elho da palet a RGB

n Gr e e n Valor de 0- 255 para o elem ent o v erde da palet a RGB

n Blu e Valor de 0- 255 para o elem ent o azul da palet a RGB

Re t or n o Valor a ser definido para o at ribut o cor do com ponent e

- 492 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


37. Aplica çõe s com a int e r fa ce visua l do AD VPL

A linguagem ADVPL possui int erfaces visuais pré- definidas que auxiliam no desenv olvim ent o
de aplicações m ais com plet as, com binando est as int erfaces com os com ponent es visuais
dem onst rados ant erior m ent e.

Didat icam ent e as int erfaces visuais pré- definidas da linguagem ADVPL podem ser divididas em
t rês grupos:

 Ca pt u r a d e in f or m a çõe s sim ple s ou M u lt i- Ge t s;


 Ca pt u r a d e m ú lt ip la s in for m a çõe s ou M u lt i- Lin e s;
 Ba r r a s de bot õe s

3 7 .1 . Ca pt ur a de infor m a çõe s sim ple s ( M ult i- Ge t s)

Em ADVPL, as t elas de capt ura de inform ações com post as por m últ iplos cam pos digit áveis
acom panhados de seus r espect ivos t ext os explicat ivos são com um ent e cham ados de
Enchoices.

Um Enchoice pode ser facilm ent e ent endida com o diversos conj unt os de obj et os TSay e TGet
alinhados de form a a visualizar ou capt urar inform ações, nor m alm ent e vinculadas a arquivos
de cadast r os ou m ovim ent ações sim ples.

Abaixo t em os a visualização de um a Enchoice para o arquivo padr ão do ERP Pr ot heus de


Cadast r o de Client es ( “ SA1” ) :

Figu r a : En ch oice do Ca d a st r o d e Clie n t e s d o ERP Pr ot h e u s

- 493 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A linguagem ADVPL per m it e a im plem ent ação da Enchoice de duas for m as sim ilares:

 Fu n çã o En ch oice : Sint axe t radicionalm ent e ut ilizada em ADVPL, a qual não ret orna
um obj et o para a aplicação cham adora;

 Cla sse M sM Ge t : Classe do obj et o Enchoice, a qual perm it e a inst anciação diret a de um
obj et o, t ornando- o disponível na aplicação cham adora.

A ut ilização de um ou out ro obj et o depende unicam ent e da escolha do desenvolvedor j á que os


parâm et ros para a função Enchoice e para o m ét odo New( ) da classe MsMGet são os m esm os,
lem brando que para m ant er a coerência com um a aplicação escrit a em orient ação a obj et os
dev erá ser ut ilizada a classe MsMGet ( ) .

3 7 .1 .1 . Enchoice ( )

 Sin t a x e : En ch oice ( cAlia s, n Re g, n Opc, a CRA, cLe t r a , cTe x t o, a Ach o, a Pos,


a Cpos, n M od e lo, n ColM e n s, cM e n sa ge m , cTu doOk , oW n d, lF3 ,
lM e m or ia , lColu m n , ca Te la , lN oFolde r , lPr ope r t y )

 Re t or n o: N il
 Pa r â m e t r os:

cAlia s Tabela cadast r ada no Dicionário de Tabelas ( SX2) que será


edit ada
n Re g Parâm et r o não ut ilizado
n Opc Núm er o da linha do aRot ina que definirá o t ipo de edição
( I nclusão, Alt eração, Ex clusão, Visualização)
a CRA Parâm et r o não ut ilizado
cLe t r a Parâm et r o não ut ilizado
cTe x t o Parâm et r o não ut ilizado
a Ach o Vet or com nom e dos cam pos que serão exibidos. Os cam pos
de usuário sem pre serão exibidos se não exist ir no par âm et ro
um elem ent o com a expressão " NOUSER"
a Pos Vet or com coordenadas para criação da enchoice no form at o
{ < t op> , < left > , < bot t om > , < right > }
a Cpos Vet or com nom e dos cam pos que poderão ser edit ados
n M ode lo Se for difer ent e de 1 desabilit a execução de gat ilhos
est r angeiros
n ColM e n s Parâm et r o não ut ilizado
cM e n sa ge m Parâm et r o não ut ilizado
cTu doOk Expressão par a validação da Enchoice
oW n d Obj et o ( j anela, painel, et c.) onde a enchoice ser á criada.
lF3 I ndica se a enchoice est a sendo criada em um a consult a F3
para ut ilizar variáveis de m em ória
lM e m or ia I ndica se a enchoice ut ilizará variáveis de m em ória ou os
cam pos da t abela na edição
lColu m n I ndica se a apresent ação dos cam pos ser á em form a de
coluna
ca Te la Nom e da variável t ipo " privat e" que a enchoice ut ilizará no
lugar da propriedade aTela
lN oFold e r I ndica se a enchoice não irá ut ilizar as Past as de Cadast r o
( SXA)
lPr op e r t y I ndica se a enchoice não ut ilizará as variáveis aTela e aGet s,
som ent e suas propriedades com os m esm os nom es

- 494 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Ut iliz a çã o d a f u n çã o En ch oice ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização da função Enchoice() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwEnch()

Private cCadastro := " Cadastro de Clientes"


Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)

Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias


Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

- 495 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE


If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL


RegToMemory("SA1", If(nOpc==3,.T.,.F.))

Enchoice(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/, /*cTexto*/, ;


aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/,/*cTudoOk*/, oDlg, lF3, lMemoria, lColumn,;
caTela, lNoFolder, lProperty)

ACTIVATE MSDIALOG oDlg CENTERED

Return

3 7 .1 .2 . M sM Ge t ( )

 Sin t a x e : M sM Ge t ( ) :N e w ( cAlia s, n Re g, n Opc, a CRA, cLe t r a , cTe x t o, a Ach o,


a Pos, a Cpos, n M ode lo, n ColM e n s, cM e n sa ge m , cTu doOk , oW n d, lF3 ,
lM e m or ia , lColu m n , ca Te la , lN oFolde r , lPr ope r t y )

 Re t or n o: oM sM Ge t  obj e t o d o t ipo M sM Ge t ( )
 Pa r â m e t r os:

cAlia s Tabela cadast r ada no Dicionário de Tabelas ( SX2) que será


edit ada
n Re g Parâm et r o não ut ilizado
n Opc Núm er o da linha do aRot ina que definirá o t ipo de edição
( I nclusão, Alt eração, Ex clusão, Visualização)
a CRA Parâm et r o não ut ilizado
cLe t r a Parâm et r o não ut ilizado
cTe x t o Parâm et r o não ut ilizado
a Ach o Vet or com nom e dos cam pos que serão exibidos. Os cam pos
de usuário sem pre serão exibidos se não exist ir no par âm et ro
um elem ent o com a expressão " NOUSER"
a Pos Vet or com coordenadas para criação da enchoice no form at o
{ < t op> , < left > , < bot t om > , < right > }
a Cpos Vet or com nom e dos cam pos que poderão ser edit ados
n M ode lo Se for difer ent e de 1 desabilit a execução de gat ilhos
est r angeiros
n ColM e n s Parâm et r o não ut ilizado
cM e n sa ge m Parâm et r o não ut ilizado
cTu doOk Expressão par a validação da Enchoice
oW n d Obj et o ( j anela, painel, et c.) onde a enchoice ser á criada.
lF3 I ndica se a enchoice est a sendo criada em um a consult a F3
para ut ilizar variáveis de m em ória

- 496 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


lM e m or ia I ndica se a enchoice ut ilizará variáveis de m em ória ou os
cam pos da t abela na edição
lColu m n I ndica se a apresent ação dos cam pos ser á em form a de
coluna
ca Te la Nom e da variável t ipo " privat e" que a enchoice ut ilizará no
lugar da propriedade aTela
lN oFold e r I ndica se a enchoice não irá ut ilizar as Past as de Cadast r o
( SXA)
lPr op e r t y I ndica se a enchoice não ut ilizará as variáveis aTela e aGet s,
som ent e suas propriedades com os m esm os nom es

Ex e m plo: Ut iliz a çã o d o ob j e t o M sM Ge t ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MsMget() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwMsGet()

Private cCadastro := " Cadastro de Clientes"


Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)


Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias


Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

- 497 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE


If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

oDlg := MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)

RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/,;


/*cTexto*/, aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/, /*cTudoOk*/,oDlg,lF3,lMemoria,lColumn, caTela,;
lNoFolder, lProperty)

oDlg:lCentered := .T.
oDlg:Activate()

Return

3 7 .2 . Ca pt ur a de m últ ipla s infor m a çõe s ( M ult i- Line s)

A linguagem ADVPL perm it e a ut ilização de basicam ent e dois t ipos de obj et os do t ipo grid, ou
com o t am bém são conhecidos: m ult i- line:

 Gr ids d igit á v e is: per m it em a visualização e capt ura de inform ações, com um ent e
ut ilizados em int erfaces de cadast r o e m anut enção, t ais com o:

 M SGETD B( )
 M SGETD AD OS( )
 M SN EW GETD AD OS( )

 Gr ids n ã o dig it á v e is: perm it em som ent e a visualização de inform ações, com um ent e
ut ilizados com o brow ses do ERP Pr ot heus, t ais com o:

 TW BROW SE( )
 M AW N D BROW SE( )
 M BROW SE( )

Nest e t ópico serão t rat adas as grids digit áveis disponíveis na linguagem ADVPL para o
desenvolvim ent o de int er faces de cadast r os e m anut enção de inform ações.

- 498 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 7 .2 .1 . M sGe t D B( )

A classe de obj et os visuais MsGet DB( ) perm it e a criação de um grid digit ável com um a ou m ais
colunas, baseado em um a t abela t em porária.

 Sin t a x e : M sGe t D B( ) :N e w ( n Top , n Le ft , n Bot t om , n Righ t , n Opc, cLin h a Ok ,


cTu doOk , cI n iCp os, lD e le t e , a Alt e r , n Fr e e z e , lEm pt y, u Pa r 1 , cTRB,
cFie ldOk , lCon d icion a l, lAppe n d, oW n d, lD isp a r os, u Pa r 2 , cD e lOk ,
cSu pe r D e l)

 Re t or n o: oM sGe t D B ob j e t o do t ipo M sGe t D B( )

 Pa r â m e t r os:

n Top Dist ancia ent re a MsGet DB e o ext r em idade superior do


obj et o que a cont ém .
n Le ft Dist ancia ent re a MsGet DB e o ext r em idade esquerda do
obj et o que a cont ém .
n Bot t om Dist ancia ent re a MsGet DB e o ext r em idade inferior do obj et o
que a cont ém .
n Rig h t Dist ancia ent re a MsGet DB e o ext r em idade direit a do obj et o
que a cont ém .
n Opc Posição do elem ent o do vet or aRot ina que a MsGet DB usará
com o referência.
cLin h a Ok Função ex ecut ada para validar o cont ext o da linha at ual do
aCols.
cTu doOk Função execut ada para validar o cont ext o ger al da MsGet DB
( t odo aCols) .
cI n iCpos Nom e dos cam pos do t ipo caract er que ut ilizarão increm ent o
aut om át ico. Est e parâm et r o dev e ser no for m at o “ + < nom e
do prim eiro cam po> + < nom e do segundo cam po> + ...” .
lD e le t e Habilit a a opção de excluir linhas do aCols. Valor padrão
falso.
a Alt e r Vet or com os cam pos que poderão ser alt erados.
n Fr e e z e I ndica qual coluna não ficara congelada na exibição.
lEm pt y Habilit a validação da pr im eira coluna do aCols para est a não
poder est ar vazia. Valor padrão falso.
u Pa r 1 Parâm et r o r eservado.
cFie ldOk Função execut ada na validação do cam po.
cTRB Alias da t abela t em porária.
lCon dicion a l Reser vado
lAp pe n d I ndica se a MsGet DB ira criar um a linha em branco
aut om at icam ent e quando for inclusão.
cD e lOk Função ex ecut ada para validar a exclusão de um a linha do
aCols.
lD ispa r os I ndica se será ut ilizado o Dicionário de Dados para consult a
padrão, inicialização padrão e gat ilhos.
u Pa r 2 Parâm et r o r eservado.
cSu pe r D e l - Função ex ecut ada quando pressionada as t eclas
< Ct rl> + < Delet e> .
oW n d Obj et o no qual a MsGet DB será criada.

- 499 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

 Va r iá ve is p r iv a t e :

a Rot in a Vet or com as r ot inas que ser ão execut adas na MBrowse e


que definira o t ipo de operação que est a sendo ex ecut ada
( inclusão, alt eração, ex clusão, visualização, pesquisa, ...) no
for m at o:

{ cTit ulo, cRot ina, nOpção, nAcesso} , aonde:

nOpção segue o padrão do ERP Prot heus para:

11- Pesquisar
12- Visualizar
13- I ncluir
14- Alt erar
15- Excluir

a H e a de r Vet or com inform ações das colunas no form at o:

{ cTit ulo, cCam po, cPict ure, nTam anho, nDecim ais,;
cValidação, cReservado, cTipo, xReservado1, x Reser vado2}

A t abela t em porária ut ilizada pela MsGet DB deverá ser criada


com base no aHeader m ais um últ im o cam po t ipo lógico que
det erm ina se a linha foi excluída.

lRe f r e sh Variável t ipo lógica para uso r eser vado.

- 500 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Va r iá ve is pú blica s:

n Br Lin I ndica qual a linha posicionada do aCols.

 Fu nçõe s de va lida çã o:

cLin h a Ok Função de validação na m udança das linhas da grid. Não


pode ser definida com o St at ic Funct ion.
cTu doOk Função de validação da confirm ação da operação com o grid.
Não pode ser definida com o St at ic Funct ion.

 M é t odos a dicion a is:

For ce Re fr e sh ( ) At ualiza a MsGet DB com a t abela e posiciona na prim eira


linha.

Ex e m plo: Ut iliz a çã o d o ob j e t o M sGe t D B( )

#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Função | GETDBSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MsGetDB() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDbSA1()

Local nI
Local oDlg
Local oGetDB
Local nUsado := 0
Local aStruct := {}

Private lRefresh := .T.


Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")

- 501 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"


If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
AADD(aStruct,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3->X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
DbSkip()
End

AADD(aStruct,{"FLAG","L",1,0})

cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)

oDlg := MSDIALOG():New(000,000,300,400, “MsGetDB – SA1”,,,,,,,,,.T.)

oGetDB := MsGetDB():New(05,05,145,195,3,"U_LINHAOK", "U_TUDOOK", "+A1_COD", ;


.T.,{"A1_NOME"},1,.F.,,cCriaTrab,"U_FIELDOK",,.T.,oDlg, .T., ,"U_DELOK",;
"U_SUPERDEL")

oDlg:lCentered := .T.
oDlg:Activate()
DbSelectArea(cCriaTrab)
DbCloseArea()

Return

User Function LINHAOK()


ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()


ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()


ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()


ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()


ApMsgStop("FIELDOK")
Return .T.

- 502 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 7 .2 .2 . M sGe t D a dos( )

A classe de obj et os visuais MsGet Dados( ) per m it e a criação de um grid digit ável com um a ou
m ais colunas, baseado em um array.

 Sin t a x e : M sGe t D a d os( ) :N e w ( n Top, n Le ft , n Bot t om , n Righ t , n Opc, cLin h a Ok ,


cTu doOk , cI n iCpos, lD e le t e , a Alt e r , u Pa r 1 , lEm pt y, n M a x , cFie ldOk ,
cSu pe r D e l, u Pa r 2 , cD e lOk , oW n d)

 Re t or n o: oM sGe t D a d os  obj e t o d o t ipo M sGe t D a dos( )

 Pa r â m e t r os:

n Top Dist ancia ent re a MsGet Dados e o ext r em idade superior do


obj et o que a cont ém .
n Le ft Dist ancia ent re a MsGet Dados e o ext r em idade esquerda do
obj et o que a cont ém .
n Bot t om Dist ancia ent re a MsGet Dados e o ext r em idade inferior do
obj et o que a cont ém .
n Rig h t Dist ancia ent re a MsGet Dados e o ext rem idade direit a do
obj et o que a cont ém .
n Opc Posição do elem ent o do vet or aRot ina que a MsGet Dados
usará com o referencia.
cLin h a Ok Função ex ecut ada par a validar o cont ext o da linha at ual do
aCols.
cTu doOk Função execut ada para validar o cont ext o geral da
MsGet Dados ( t odo aCols) .
cI n iCpos Nom e dos cam pos do t ipo caract er que ut ilizarão increm ent o
aut om át ico. Est e parâm et r o dev e ser no for m at o “ + < nom e
do prim eiro cam po> + < nom e do segundo cam po> + ...” .
lD e le t e Habilit a excluir linhas do aCols. Valor padrão falso.
a Alt e r Vet or com os cam pos que poderão ser alt erados.
u Pa r 1 Parâm et r o r eservado.
lEm pt y Habilit a validação da pr im eira coluna do aCols para est a não
poder est ar vazia. Valor padrão falso.
nMax Núm er o m áxim o de linhas perm it idas. Valor padrão 99.
cFie ldOk Função execut ada na validação do cam po.
cSu pe r D e l Função execut ada quando pressionada as t eclas
< Ct rl> + < Delet e> .
u Pa r 2 Parâm et r o r eservado.
cD e lOk Função ex ecut ada para validar a exclusão de um a linha do
aCols.
oW n d Obj et o no qual a MsGet Dados será criada.

- 503 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

 Va r iá ve is p r iv a t e :

a Rot in a Vet or com as r ot inas que ser ão execut adas na MBrowse e


que definira o t ipo de operação que est a sendo ex ecut ada
( inclusão, alt eração, ex clusão, visualização, pesquisa, ...) no
for m at o:

{ cTit ulo, cRot ina, nOpção, nAcesso} , aonde:

nOpção segue o padrão do ERP Prot heus para:

16- Pesquisar
17- Visualizar
18- I ncluir
19- Alt erar
20- Excluir

a H e a de r Vet or com inform ações das colunas no form at o:

{ cTit ulo, cCam po, cPict ure, nTam anho, nDecim ais,;
cValidação, cReservado, cTipo, xReservado1, x Reser vado2}

A t abela t em porária ut ilizada pela MsGet DB deverá ser criada


com base no aHeader m ais um últ im o cam po t ipo lógico que
det erm ina se a linha foi excluída.

lRe f r e sh Variável t ipo lógica para uso r eser vado.

- 504 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Va r iá ve is pú blica s:

N I ndica qual a linha posicionada do aCols.

 Fu n çõe s de va lida çã o:

cLin h a Ok Função de validação na m udança das linhas da grid. Não


pode ser definida com o St at ic Funct ion.
cTu doOk Função de validação da confirm ação da operação com o grid.
Não pode ser definida com o St at ic Funct ion.

 M é t odos a dicion a is:

For ce Re fr e sh ( ) At ualiza a MsGet Dados com a t abela e posiciona na prim eira


linha.
H ide ( ) Ocult a a MsGet Dados.
Sh ow ( ) Most ra a MsGet Dados.

Ex e m plo: Ut iliz a çã o d o ob j e t o M sGe t D a dos( )

#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Função | GETDADOSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MSGETADOS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDadoSA1()

Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}

Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;


{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")

- 505 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"


If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
EndIf
DbSkip()
End

AADD(aCols,Array(nUsado+1))

For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next

aCols[1][nUsado+1] := .F.

oDlg := MSDIALOG():New(000,000,300,400, “MsGetDados – SA1”,,,,,,,,,.T.)

oGetDados := MsGetDados():New(05, 05, 145, 195, 4, "U_LINHAOK", "U_TUDOOK",;


"+A1_COD", .T., {"A1_NOME"}, , .F., 200, "U_FIELDOK", "U_SUPERDEL",,;
"U_DELOK", oDlg)

oDlg:lCentered := .T.
oDlg:Activate()

Return

User Function LINHAOK()


ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()


ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()


ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()


ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()


ApMsgStop("FIELDOK")
Return .T.

- 506 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 7 .2 .3 . M sN e w Ge t D a dos( )

A classe de obj et os visuais MsNewGet Dados( ) perm it e a criação de um grid digit ável com um a
ou m ais colunas, baseado em um array .

 Sin t a x e : M sN e w Ge t D a dos( ) :N e w ( n Su pe r ior , n Esqu e r d a ,n I n fe r ior , n D ir e it a ,


n Opc, cLin Ok , cTu doOk , cI n iCpos, a Alt e r GD a , n Fr e e z e , n M a x ,
cFie ldOk , cSu pe r D e l, cD e lOk , oD LG, a H e a d e r , a Cols)

 Re t or n o: oM sGe t D a d os  obj e t o d o t ipo M sN e w Ge t D a dos( )

 Pa r â m e t r os:

n Su p e r ior Dist ancia ent re a MsNewGet Dados e o ext r em idade superior


do obj et o que a cont em
n Esqu e r d a Dist ancia ent re a MsNewGet Dados e o ext r em idade esquerda
do obj et o que a cont em
n I n f e r ior Dist ancia ent re a MsNewGet Dados e o ext r em idade inferior do
obj et o que a cont em
n D ir e it a Dist ancia ent re a MsNewGet Dados e o ext r em idade direit a do
obj et o que a cont em
n Opc Operação em ex ecução: 2- Visualizar, 3- I ncluir, 4- Alt erar , 5-
Excluir
cLin Ok Função execut ada para validar o cont ext o da linha at ual do
aCols
cTu doOk Função execut ada para validar o cont ext o geral da
MsNewGet Dados ( t odo aCols)
cI n iCpos Nom e dos cam pos do t ipo caract er que ut ilizarão increm ent o
aut om át ico.
a Alt e r GD a Cam pos alt eráv eis da Get Dados
n Fr e e z e Cam pos est át icos na Get Dados, part indo sem pr e da posição
inicial da get dados aonde:

3- Prim eiro cam po congelado


4- Prim eiro e segundo cam pos congelados...

nMax Núm er o m áxim o de linhas perm it idas. Valor padrão 99


cFie ldOk Função execut ada na validação do cam po
cSu pe r D e l Função execut ada quando pr essionada as t eclas
< Ct rl> + < Delet e>
cD e lOk Função execut ada para validar a ex clusão de um a linha do
aCols
oD LG Obj et o no qual a MsNew Get Dados será criada
a H e a de r Array a ser t r at ado int er nam ent e na MsNew Get Dados com o
aHeader
a Cols Array a ser t r at ado int er nam ent e na MsNew Get Dados com o
aCols

- 507 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

 Va r iá ve is p r iv a t e :

a Rot in a Vet or com as r ot inas que ser ão execut adas na MBrowse e


que definira o t ipo de operação que est a sendo ex ecut ada
( inclusão, alt eração, ex clusão, visualização, pesquisa, ...) no
for m at o:
{ cTit ulo, cRot ina, nOpção, nAcesso} , aonde:

nOpção segue o padrão do ERP Prot heus para:

6- Pesquisar
7- Visualizar
8- I ncluir
9- Alt erar
10- Excluir

a H e a de r Vet or com inform ações das colunas no form at o:

{ cTit ulo, cCam po, cPict ure, nTam anho, nDecim ais,;
cValidação, cReservado, cTipo, xReservado1, x Reser vado2}

A t abela t em porária ut ilizada pela MsGet DB deverá ser criada


com base no aHeader m ais um últ im o cam po t ipo lógico que
det erm ina se a linha foi excluída.

lRe f r e sh Variável t ipo lógica para uso r eser vado.

- 508 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Va r iá ve is pú blica s:

N I ndica qual a linha posicionada do aCols.

 Fu n çõe s de va lida çã o:

cLin h a Ok Função de validação na m udança das linhas da grid. Não


pode ser definida com o St at ic Funct ion.
cTu doOk Função de validação da confirm ação da operação com o grid.
Não pode ser definida com o St at ic Funct ion.

 M é t odos a dicion a is:

For ce Re fr e sh ( ) At ualiza a MsNewGet Dados com a t abela e posiciona na


prim eira linha.
H ide ( ) Ocult a a MsNew Get Dados.
Sh ow ( ) Most ra a MsNew Get Dados.

Ex e m plo: Ut iliz a çã o d os obj e t os M sN e w Ge t D a dos( ) e M sM Ge t ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização dos objetos |
| | MsNewGetDados() e MsMGet() combinados |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGetD()

Private cCadastro := "Pedidos de Venda"


Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}

- 509 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

Local aPos := {000,000,080,400}


Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE


If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD


If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.;
cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

- 510 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,;
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)


RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
/*cTudoOk*/, oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,;
lProperty)

oGetD:= MsNewGetDados():New(nSuperior, nEsquerda, nInferior, nDireita,;


nOpc,cLinOk,cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk,;
cSuperDel,cDelOk, oDLG, aHeader, aCols)

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()},{||oDlg:End()},,aButtons)}


oDlg:lCentered := .T.
oDlg:Activate()
Return

- 511 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 7 .2 .3 .1 . D e fin in do cor e s pe r son a liz a da s pa r a o ob j e t o M sN e w Ge t D a dos( )

Conform e vist o no t ópico sobr e definição das propriedades de cor es para os com ponent es
visuais, cada obj et o possui caract eríst icas que dev em ser respeit adas para corr et a ut ilização
dest e r ecurso.

 At r ibu t os a d icion a is:

lUse D e fa u lt Color s At ribut o que dev erá ser definido com o .F. par a que as
alt erações nas cor es sej am perm it idas.

 M é t odos a dicion a is:

Se t Blk Ba ck Color Mét odo que define a cor que será ut ilizada para cada linha do
grid. Não é necessário ut ilizar o m ét odo Refr esh( ) após a
definição da cor por est e m ét odo.

 Ap a r ê n cia :

- 512 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: D e fin in do cor e s p e r son a liz a da s p a r a o ob j e t o M sN e w Ge t D a dos( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização dos objetos |
| | MsNewGetDados() e MsMGet() combinados e tratamento de cores |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGtCl()

Private cCadastro := "Pedidos de Venda"


Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0

Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999

- 513 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

Local cFieldOk := "AllwaysTrue"


Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE


If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD


If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3-
>X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

- 514 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado

IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF

Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)

RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,;


aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)

oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,;


cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,;
cDelOk, oDLG, aHeader, aCols)

// Tratamento para definição de cores específicas,


// logo após a declaração da MsNewGetDados

oGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}


oDlg:lCentered := .T.
oDlg:Activate()

Return

- 515 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

// Função para tratamento das regras de cores para a grid da MsNewGetDados

Static Function GETDCLR(aLinha,nLinha,aHeader)

Local nCor2 := 16776960 // Ciano - RGB(0,255,255)


Local nCor3 := 16777215 // Branco - RGB(255,255,255)
Local nPosProd := aScan(aHeader,{|x| Alltrim(x[2]) == "C6_PRODUTO"})
Local nUsado := Len(aHeader)+1
Local nRet := nCor3

If !Empty(aLinha[nLinha][nPosProd]) .AND. aLinha[nLinha][nUsado]


nRet := nCor2
ElseIf !Empty(aLinha[nLinha][nPosProd]) .AND. !aLinha[nLinha][nUsado]
nRet := nCor3
Endif

Return nRet

- 516 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 7 .3 . Ba r r a s de bot õe s

A linguagem ADVPL perm it e a im plem ent ação de bar ras de bot ões ut ilizando funções pré-
definidas desenvolvidas com o obj et ivo de facilit ar sua ut ilização, ou at rav és da ut ilização
diret a dos com ponent es visuais disponíveis. Dent re os r ecur sos da linguagem que podem ser
ut ilizados com est a finalidade serão abordados:

 Fu n çã o En ch oice Ba r : Sint axe t radicionalm ent e ut ilizada em ADVPL, a qual não


ret orna um obj et o par a a aplicação cham adora;

 Cla sse TBa r : Classe do obj et o TBar( ) , a qual perm it e a inst anciação diret a de um
obj et o do t ipo bar ra de bot ões superior, t ornando- o disponível na aplicação cham adora.

 Cla sse Bu t t on Ba r : Classe do obj et o But t onBar( ) , a qual perm it e a inst anciação diret a
de um obj et o bar ra de bot ões genérico, o qual pode ser ut ilizado em qualquer posição
da t ela, t ornando- o disponível na aplicação cham adora.

3 7 .3 .1 . Enchoice Ba r ( )

Função que cria um a barra de bot ões no form at o padrão ut ilizado pelas int erfaces de cadast r o
da aplicação Prot heus.

Est a bar ra possui os bot ões padrões para confirm ar ou cancelar a int erface e ainda perm it e a
adição de bot ões adicionais com a ut ilização do parâm et r o a Bu t t on s.

 Sin t a x e :

En ch oice Ba r ( oD lg, b Ok , bCa n ce l, lM sgD e l, a Bu t t on s, n Re cn o, cAlia s)

 Pa r â m e t r os:

oD lg Dialog onde irá criar a barra de bot ões


bOk Bloco de código a ser ex ecut ado no bot ão Ok
bCa n ce l Bloco de código a ser ex ecut ado no bot ão Cancelar
lM sgD e l Exibe dialog para confir m ar a ex clusão
Array cont endo bot ões adicionais.
aArray[ n] [ 1] - > I m agem do bot ão
a Bu t t on s
aArray[ n] [ 2] - > bloco de código cont endo a ação do bot ão
aArray[ n] [ 3] - > t ít ulo do bot ão
n Re cn o Regist ro a ser posicionado após a ex ecução do bot ão Ok .
Alias do regist r o a ser posicionado após a ex ecução do bot ão
cAlia s Ok. Se o parâm et r o nRecno for inform ado, o cAlias passa ser
obrigat ório.

 Ap a r ê n cia :

- 517 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Ut iliz a çã o d a f u n çã o En ch oice Ba r ( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização da função |
| | EnchoiceBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function DEnchBar()


Local oDlg, oBtn
Local aButtons := {}

DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF;
oMainWnd

AADD( aButtons, {"HISTORIC", {|| TestHist()}, "Histórico...",;


"Histórico",{|| .T.}} )

@ -15,-15 BUTTON oBtn PROMPT "..." SIZE 1,1 PIXEL OF oDlg

ACTIVATE MSDIALOG oDlg ;


ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))

Return

- 518 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 7 .3 .2 . TBa r ( )

Classe de obj et os visuais que perm it e a im plem ent ação de um com ponent e do t ipo barr a de
bot ões para a part e superior de um a j anela previam ent e definida.

 Sin t a x e : N e w ( oW n d, n Bt n W idt h , n Bt n H e ig h t , l3 D , cM ode , oCu r sor , cRe sou r ce ,


lN oAu t oAd j u st )

 Re t or n o: oTBa r  ob j e t o do t ipo TBa r ( )

 Pa r â m e t r os:

Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser


oW n d
criado.
n Bt n W idt h Num érico, opcional. Lar gura do bot ão cont ido na barr a
n Bt n H e igh t Num érico, opcional. Alt ura do bot ão cont ido na barra
l3 D Lógico, opcional. Define t ipo da barra
cM ode Não ut ilizado.
Obj et o, opcional. Define Cursor ao posicionar o m ouse sobr e a
oCu r sor
barra.
Caract er , opcional. I m agem do r ecurso a ser inserido com o
cRe sou r ce
fundo da bar ra.
lN oAu t oAd j u st Lógico.

 Ap a r ê n cia :

Ex e m plo: Ut iliz a çã o d a f u n çã o En ch oice Ba r ( )

#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------------
| Função | TSTBAR | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto TBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function TstTBar()


Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

- 519 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;


{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;


{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;


{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;


{||},oTBar,'Preço' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return

3 7 .3 .3 . But t onBa r

A sint axe Bu t t on Ba r é a form a clássica ut ilizada na linguagem ADVPL para im plem ent ar um
obj et o da classe TBar( ) , o qual possui as caract eríst icas m encionadas no t ópico ant erior .

 Sin t a x e :

D EFI N E BUTTON BAR oBa r SI ZE n W idt h , nH e igh t 3 D M OD E OF oD lg


CURSOR

 Re t or n o: ( ) .

 Pa r â m e t r os:

oBa r Obj et o do t ipo TBar( ) que será criado com a ut ilização da


sint axe But t onBar( ) .
n W idt h Num érico, opcional. Lar gura do bot ão cont ido na barr a.
n H e ig h t Num érico, opcional. Alt ura do bot ão cont ido na barra.
3D Se definido habilit a a visualização em 3D da barra de bot ões.
oD lg Obj et o, opcional. Janela ou cont r ole onde o bot ão deverá ser
criado.
M OD E Define a form a de orient ação do obj et o But t onBar ut ilizando
os seguint es t erm os pré- definidos:

TOP, BOTTOM, FLOAT

CURSOR Obj et o, opcional. Define Cursor ao posicionar o m ouse sobr e


a barr a.

- 520 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A sint axe But t onBar requer a adição dos bot ões com o recur sos adicionais da barr a
previam ent e definida ut ilizando a sint axe abaixo:

 Bot õe s: BUTTON RESOURCE

 Sin t a x e a d icion a l:

D EFI N E BUTTON RESOURCE cBit M a p OF oBa r ACTI ON cAca o TOOLTI P


cTe x t o

 Pa r â m e t r os:

cBit M a p Nom e da im agem disponível na aplicação.


oBa r Obj et o do t ipo TBar( ) no qual o bot ão será adicionado.
cAca o Função ou list a de expr essões que det erm ina a ação que será
realizada pelo bot ão.
cTe x t o Text o no est ilo “ t oolt ip t ext ” que será exibido quando o
cursor do m ouse for posicionado sobre o bot ão na barra de
ferram ent as.

 Ap a r ê n cia :

Ex e m plo: Ut iliz a çã o d a sin t a x e Bu t t on Ba r

#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------
| Função | TstBBar | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto TBar() |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function TstBBar()

Local oDlg
Local oBtn1
Local oBtn2

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - BUTTONBAR',,,,,,,,,.T.)

DEFINE BUTTONBAR oBar SIZE 25,25 3D TOP OF oDlg

- 521 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Exemplo (continuação):

DEFINE BUTTON RESOURCE "S4WB005N" OF oBar ACTION NaoDisp() TOOLTIP "Recortar"


DEFINE BUTTON RESOURCE "S4WB006N" OF oBar ACTION NaoDisp() TOOLTIP "Copiar"
DEFINE BUTTON RESOURCE "S4WB007N" OF oBar ACTION NaoDisp() TOOLTIP "Colar"
DEFINE BUTTON oBtn1 RESOURCE "S4WB008N" OF oBar GROUP;
ACTION Calculadora() TOOLTIP "Calculadora"

oBtn1:cTitle:="Calc"
DEFINE BUTTON RESOURCE "S4WB009N" OF oBar ACTION Agenda() TOOLTIP "Agenda"
DEFINE BUTTON RESOURCE "S4WB010N" OF oBar ACTION OurSpool() TOOLTIP "Spool"
DEFINE BUTTON RESOURCE "S4WB016N" OF oBar GROUP;
ACTION HelProg() TOOLTIP "Ajuda"

DEFINE BUTTON oBtn2 RESOURCE "PARAMETROS" OF oBar GROUP;


ACTION Sx1C020() TOOLTIP "Parâmetros"

oBtn2:cTitle:="Param."

DEFINE BUTTON oBtOk RESOURCE "FINAL" OF oBar GROUP;


ACTION oDlg:End()TOOLTIP "Sair"

oBar:bRClicked := {|| AllwaysTrue()}


oDlg:lCentered := .T.
oDlg:Activate()

Return

- 522 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 7 .3 .4 . I m a ge ns pr é - de finida s pa r a a s ba r r a s de bot õe s

Conform e m encionado nos t ópicos ant eriores, os bot ões visuais do t ipo bar ra de bot ões
perm it em a definição de it ens com ações e im agens vinculadas.

Dent r e os obj et os e funções m encionados, foi cit ada a EnchoiceBar( ) , a qual perm it e a adição
de bot ões adicionais at ravés do parâm et r o a Bu t t on, sendo que os it ens dest e ar ray dev em
possuir o seguint e form at o:

 Sin t a x e : AADD( aBut t ons,{ cBit Map, bAcao, cTex t o} )

 Est r u t u r a :

Nom e da im agem pré- definida exist ent e na aplicação ERP que


cBit M a p
será vinculada ao bot ão.
Bloco de código que define a ação que será ex ecut ada com a
bAca o
ut ilização do bot ão.
Text o no est ilo “ t oolt ip t ext ” que será exibido quando o cursor
cTe x t o do m ouse for posicionado sobr e o bot ão na bar ra de
ferram ent as.

 Alg u n s Bit M a ps d isp on íve is:

D ESTI N OS D I SCAGEM
ED I T ED I TABLE
EXCLUI R FORM
GRAF2 D GRAF3 D
LI N E N OTE
OBJETI VO OK
PEN D EN TE PRECO
PROD UTO S4 SB0 1 4 N
S4 W B0 0 1 N S4 W B0 0 5 N
S4 W B0 0 6 N S4 W B0 0 7 N
S4 W B0 0 8 N S4 W B0 0 9 N
S4 W B0 1 0 N S4 W B0 1 1 N
S4 W B0 1 3 N S4 W B0 1 4 A
S4 W B0 1 6 N SI M ULACA
VEN D ED OR USER

 Ex e m plo:

AADD(aButtons,{"USER",{||AllwaysTrue()},"Usuário"})

- 523 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


38. Out r a s a plica çõe s da int e r fa ce visu a l do AD VPL

3 8 .1 . M a W ndBr ow se ( )

 D e scr içã o: Br owse que perm it e a visualização de r egist ros para arquivos / t abelas que
não possuem est rut ura definida no Dicionário de Dados do sist em a.

 Sin t a x e : MaWndBr ow se ( nLin1, nCol1, nLin2, nCol2, cTit le, cAlias, aCam pos, aRot ina,
cFunLeg, cTopFun, cBot Fun, lCent ered, aResource, nMod, aPesqui, cSeek ,
lDic, lSavOrd)

 Pa r â m e t r os:

n Lin 1 Linha inicial do brow se


n Col1 Coluna inicial do browse
n Lin 2 Linha final do brow se
n Col2 Coluna final do browse
cTit le Tít ulo do browse ( obrigat ório)
cAlia s Alias da t abela cor rent e podendo ser um t em por ário
Se lDic= .T. ut ilizará o SX3, do cont rário o aCam pos
a Ca m pos
inform ado
a Rot in a I dênt ico ao aRot ina para m Br owse
Função que dev erá r et ornar um valor lógico e com isso será
cFu n Le g
at ribuído sem afór o na prim eira coluna do br owse
cTopFu n Most rar os r egist ros com a chav e de
cBot Fu n Most rar os r egist ros com a chav e at e
lCe n t e r e d Valor verdadeiro cent raliza
a Re sou r ce aAdd( aResource,{ " I MAGEM" ," Text o significat ivo" } )
Posição do Menu:

n M ode lo 1- Horizont al ( superior)


2- Vert ical ( esquerda)
3- Horizont al ( inferior)
aAdd( aPesqui{ " Tít ulo" ,nOrdem } ) , se não passado será
a Pe squ i
ut ilizado o AxPesqui
cSe e k Chave principal para a busca, ex em plo: xFilial( "???" )
lD ic Parâm et r o em conj unt o com aCam pos
lSa vOr d Est abelecer a ordem após pesquisas.

 Est r u t u r a d o a r r a y a Ca m pos

aAdd( aCam po,{ X3_CAMPO,X3_PI CTURE,X3_TI TULO,X3_TAMANHO} )

- 524 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ap a r ê n cia :

Ex e m plo: M a W n dBr ow se p a r a a r qu ivo t e m por á r io

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Função | WndBrwTRB | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Demonstra a utilização da MaWndBrowse com Temporário |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function WndBrwTRB()

// Variáveis para o Arquivo Temporario


Local cChave := ""
Local cArqTrb := ""
Local aStruTRB := {}

// Variáveis para o MaWndBrowse


Local cTitulo := "Cadastro Temporario"// Título obrigatório
Local cAlias := "TRB" // Alias da tabela corrente podendo ser TRB
Local cFunLeg := "" // Função que deverá retornar um valor lógico e com isso
será atribuído semafóro na primeira coluna do browse
Local cTopFun := "" // Mostrar os registros com a chave de
Local cBotFun := "" // Mostrar os registros com a chave ate
Local lCentered := .T. // Valor verdadeiro centraliza
Local aResource := {} // aAdd(aResource,{"IMAGEM","Texto significativo"})
Local nModelo := 1 // 1- Menu do aRotina
Local aPesqui := {} // aAdd(aPesqui{"Título",nOrdem}), se não passado será
utilizado o AxPesqui
Local cSeek := "" // Chave principal para a busca, exemplo: xFilial("???")
Local lDic := .F. // Parâmetro em conjunto com aCampos
Local lSavOrd := .T. // Estabelecer a ordem após pesquisas.

- 525 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


// Variaveis para a MsAdvSize
Local lEnchBar := .F. // Se a janela de diálogo possuirá enchoicebar (.T.)
Local lPadrao := .F. // Se a janela deve respeitar as medidas padrões do
//Protheus (.T.) ou usar o máximo disponível (.F.)
Local nMinY := 400 // Altura mínima da janela

Local aSize := MsAdvSize(lEnchBar, lPadrao, nMinY)

Private cCadastro := " "


Private aCampos := {} // Se lDic=.T. utilizará o SX3, do contrário o aCampos
//informado -> aAdd(aCampo,{X3_CAMPO,X3_PICTURE,X3_TITULO,X3_TAMANHO})
Private aRotina := {} // Idêntico ao aRotina para mBrowse

aAdd(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
aAdd(aRotina,{"Visualizar","U_TVisual",0,2})
aAdd(aRotina,{"Incluir" ,"U_TInclui",0,3})
aAdd(aRotina,{"Alterar" ,"U_TAltera",0,4})
aAdd(aRotina,{"Excluir" ,"U_TExclui",0,5})

// Estrutura do Arquivo: Nome do campo / tipo, tamanho, decimais (SX3 para


//temporário)
AADD(aStruTRB,{"TRB_FILIAL" ,"C",02,0}) // Nome_Campo , Tipo_Campo,
//Tamanho, Decimal
AADD(aStruTRB,{"TRB_ID" ,"C",14,0})
AADD(aStruTRB,{"TRB_NOME" ,"C",20,0})
AADD(aStruTRB,{"TRB_IDADE" ,"N",03,0})
AADD(aStruTRB,{"TRB_STATUS" ,"C",01,0})

// aCampos padrão para a MaWndBrowse


//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>})

// aCampos melhorado para a WndBrwTRB


//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>,<Tipo>,<cWhen>,<lObrig
//atorio>})
// Nota: lObrigatorio deve ser sempre a ultima informacao do aCampos

AADD(aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02,"C",".F.",.T.})


AADD(aCampos,{"TRB_ID" ,"@!" ,"Matricula" ,14,"C",".F.",.T.})
AADD(aCampos,{"TRB_NOME" ,"@!" ,"Nome" ,20,"C",".T.",.F.})
AADD(aCampos,{"TRB_IDADE" ,"@E 999","Idade" ,03,"N",".T.",.F.})
AADD(aCampos,{"TRB_STATUS" ,"@!" ,"Status" ,01,"C",".T.",.T.})

If ( Select( "TRB" ) <> 0 )


dbSelectArea ( "TRB" )
dbCloseArea ()
Endif

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Crio arq. de trab. p/ gravar as inconsistencias. ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
cArqTrb := CriaTrab(aStruTRB,.t.)
dbUseArea(.T.,,cArqTrb,"TRB",.T.,.F.)

cChave := "TRB_FILIAL+TRB_ID"
IndRegua("TRB",cArqTrb,cChave,,,"Selecionando Registros...")

- 526 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


dbSelectArea( "TRB" )
MaWndBrowse(aSize[7],aSize[2],aSize[6],aSize[5],cTitulo,cAlias,aCampos,aRotina,,
cTopFun,cBotFun,lCentered,,nModelo,,cSeek,lDic,lSavOrd)

If ( Select( "TRB" ) <> 0 )


dbSelectArea ( "TRB" )
dbCloseArea ()
Endif

Return

3 8 .1 .1 . Enchoice pa r a Ar quivos Te m por á r ios


Para apr ov eit ar int eiram ent e o recur so da MaWndBrowse ut ilizada com arquivos
t em porários, é necessário im plem ent ar um a função do t ipo Enchoice para realizar as
operações de Visualizar, I ncluir, Alt erar e Excluir os regist r os dest e arquivo / t abela.

Com foco nest a necessidade, foi desenvolvida para o curso de ADVPL a função
TEnchoice.

 D e scr içã o: Função par a m anipulação de r egist ros de um arquivo t em porário sim ular a
Enchoice do am bient e Prot heus.

 Sin t a x e : TEnchoice( oDlg, aCam pos, nLeft E, nTopE, nHeight E, nWidt hE, lEnchBar)

 Pa r â m e t r os:

oD lg Obj et o Dialog no qual a TEnchoice será vinculada


a Ca m pos Est rut ura de cam pos para exibição da t ela da TEnchoice
n Le ft E Coordenada horizont al em pixels.
n TopE Coordenada v ert ical em pixels.
n H e ig h t E Alt ura em pixels
n W idt h E Largura em pixels.
lEn ch Ba r Se a enchoice será m ont ada em conj unt o com um a barra de
bot ões do t ipo Enchoicebar( )

 Pr é - r e qu isit os d a f u n çã o ch a m a dor a :

Para cor r et a ut ilização da função TEnchoice são necessários os seguint es t rat am ent os /
definições na função cham adora:

 Tr a t a m e n t o 0 1 : M on t a ge m do a r r a y a Ca m pos

O ar ray aCam pos ut ilizado pela TEnchoice possui basicam ent e o m esm o form at o do
array ut ilizado pela função Modelo2( ) .

" < V a r ia v e l> " Nom e da variável Privat e que est á vinculada ao cam po
digit ável.
{ n Lin h a ,n Colu n a } Posição em pixels do cam po na Enchoice.
" < Tit u lo> " Tít ulo do cam po.
" < Pict u r e > " Pict ure de form at ação do cam po.
" < V a lida ca o> " Validação do cam po digit ável.
" < F3 > " Consult a F3 vinculada ao cam po.

- 527 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


" < lW h e n > " Se o cam po est á edit ável.
< Ta m a nh o> Tam anho do cam po par a visualização.

AADD(aCposEnch, {"<Variavel>" ,{nLinha,nColuna} ,"<Titulo>",;


"<Picture>", "<Validacao>", "<F3>", "<lWhen>",;
<Tamanho>})

 Tr a t a m e n t o 0 2 : D e fin içã o da s d im e n sõe s da TEn ch oice

Os parâm et ros de dim ensão da TEnchoice não precisam se inform ados, pois ela irá se
aj ust ar ao t am anho do obj et o Dialog ao qual for vinculado, caso o obj et ivo sej a que a
TEnchoice ocupe t oda a área disponível do obj et o.

É im port ant e especificar se o Dialog irá cont er um a EnchoiceBar( ) para que a


TEnchoice( ) sej a posicionada adequadam ent e no obj et o.

 Ap a r ê n cia :

 D e t a lh a m e n t o da fu n çã o TEn choice :

- 528 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


/*/
+-----------------------------------------------------------------------
| Função | TEnchoice | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

Static Function TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE,;


lEnchBar)

Local aSays := {}
Local aGets := {}
Local cCaption := ""
Local cPict := ""
Local cValid := ""
Local cF3 := ""
Local cWhen := ""
Local cBlKSay := ""
Local cBlkGet := ""
Local cBlKVld := ""
Local cBlKWhen := ""
Local nLeft := 0
Local nTop := 0
Local nI := 0

Default lEnchBar := .F.


Default nLeftE := IIF(lEnchBar,(oDlg:nLeft)+16,2)
Default nTopE := 2
Default nHeightE := (oDlg:nHeight)-135
Default nWidthE := (oDlg:nWidth)-102
// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aC,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})

If Len(aCampos) > 0

oScroll := TScrollBox():New(oDlg, nLeftE, nTopE, nHeightE , nWidthE, .T.,;


.T., .T.)

For nI:=1 to Len(aCampos)

If Len(aCampos[nI])==8

cCampo := aCampos[nI,1]
nLeft := aCampos[nI,2,1]-13
nTop := aCampos[nI,2,2]
cCaption:= Iif(Empty(aCampos[nI,3]), " " ,aCampos[nI,3])
cPict := Iif(Empty(aCampos[nI,4]), Nil ,aCampos[nI,4])
cValid := Iif(Empty(aCampos[nI,5]), ".t." ,aCampos[nI,5])
cF3 := Iif(Empty(aCampos[nI,6]), NIL ,aCampos[nI,6])
cWhen := Iif(Empty(aCampos[nI,7]), ".T." ,aCampos[nI,7])

nWidthG := Iif(Empty(aCampos[nI,8]), 100,;


IiF(aCampos[nI,8]*3.5 > 100,100,nil))

- 529 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


cBlKSay := "{|| OemToAnsi('"+cCaption+"')}"
cBlkGet := "{ | u | If( PCount() == 0,;
"+cCampo+","+cCampo+":= u ) }"
cBlKVld := "{|| "+cValid+"}"
cBlKWhen := "{|| "+cWhen+"}"

AADD(aSays,Array(1))
aSays[nI] := TSay():New(nLeft+1, nTop, &(cBlkSay), oScroll,,,;
.F., .F., .F., .T.,,, 50, 8, .F., .F., .F., .F.,;
.F. )
AADD(aGets,Array(1))

aGets[nI] := TGet():New( nLeft, nTop+50, &(cBlKGet), oScroll,;


nWidthG, 11, cPict, &(cBlkVld),,,, .F.,, .T.,,;
.F., &(cBlkWhen), .F., .F.,, .F., .F. , cF3,;
(cCampo))

EndIf
Next
Endif

Return

- 530 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o TVisu a l ( M a W n dBr ow se com TEn ch oice )

/*/
+-----------------------------------------------------------------------
| Função | TVisual | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TVisual(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk := {||oDlg:End()}
LOCAL bCancel := {||oDlg:End()}
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen


// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}


oDlg:lCentered := .T.
oDlg:Activate()

RETURN

- 531 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o TI n clu i ( M a W n dBr ow se com TEn ch oice )

/*/
+-----------------------------------------------------------------------
| Função | TInclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TInclui(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen


// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".T.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

Do Case
Case aCampos[nX][5] == "C"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
Case aCampos[nX][5] == "N"
&("_"+aCampos[nX][1]) := 0
Case aCampos[nX][5] == "D"
&("_"+aCampos[nX][1]) := CTOD("")
Case aCampos[nX][5] == "L"
&("_"+aCampos[nX][1]) := .F.
Case aCampos[nX][5] == "M"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
EndCase

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

- 532 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;


(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}


oDlg:lCentered := .T.
oDlg:Activate()

RETURN

Ex e m plo: Fu n çã o TAlt e r a ( M a W n d Br ow se com TEn ch oice )

/*/
+-----------------------------------------------------------------------
| Função | TAltera | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TAltera(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen


// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",aCampos[nX][6],aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

- 533 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;


(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}


oDlg:lCentered := .T.
oDlg:Activate()

RETURN

Ex e m plo: Fu n çã o TEx clu i ( M a W n dBr ow se com TEn ch oice )

/*/
+-----------------------------------------------------------------------
| Função | TExclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TExclui(cAlias, nReg, nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen


// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

- 534 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;


(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}


oDlg:lCentered := .T.
oDlg:Activate()

RETURN

Ex e m plo: Fu n çã o TV a lid ( M a W n dBr ow se com TEn ch oice )

/*/
+-----------------------------------------------------------------------
| Função | TValid | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TValid(cAlias,nReg,nOpc,aCampos)


LOCAL lRet
LOCAL nX
LOCAL nPosObrig := Len(aCampos[1])

For nX := 1 to Len(aCampos)
IF aCampos[nX,nPosObrig] == .T.
IF !(lRet := !Empty(&("_"+aCampos[nX,1])))
Help("TEnchoice",1,"HELP","OBRIGATORIO","Existem campos
obrigatorios nao preenchidos",1,0)
RETURN lRet // EXIT
ENDIF
ENDIF
Next nX

IF nOpc == 3
IF !(lRet := !((cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID))))
Help("TEnchoice",1,"HELP","INCLUSAO","Ja existe um registro com esta
chave",1,0)
ENDIF
ELSE
IF !(lRet := (cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID)))
Help("TEnchoice",1,"HELP","ALTERACAO","Nao existe um registro com
esta chave",1,0)
ENDIF
ENDIF

RETURN lRet

- 535 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: Fu n çã o TGr a va r ( M a W n dBr ow se com TEn ch oice )

/*/
+-----------------------------------------------------------------------
| Função | TGravar | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TGravar(cAlias,nReg,nOpc,aCampos)


LOCAL nX

RecLock(cAlias,nOpc==3)
IF nOpc == 5
DbDelete()
ELSE
For nX := 1 to Len(aCampos)
(cAlias)->&(aCampos[nX][1]) := &("_"+aCampos[nX][1])
Next nX
ENDIF
Msunlock()

RETURN

- 536 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 8 .2 . D bTr e e ( )

 D e scr içã o: Classe Adv pl que perm it e a criação de um obj et o visual do t ipo Tree.

 Pr opr ie da d e s:

bCh a ng e Arm azena o code- block ex ecut ado quando da m udança de


foco ent r e elem ent os do Tr ee at ual.

 M é t odos p r in cip a is:

Cont rut or da Classe DbTr ee.


New
Ret orna um a nov a inst ância do Obj et o da Classe DbTr ee.
At ravés do m ét odo AddTr ee, é possível acr escent ar um 'nó'
na árv or e at ual.
AddTr e e
Um a vez acrescent ado o nó, as pr óxim as inclusões de it ens
na parv or e serão r ealizadas nest e nó, at é que o m esm o
sej a fechado at rav és do m ét odo EndTree.
At ravés dele, podem os acr escent ar it ens na ár v or e at ual ou
AddTr e e I t e m
últ im o nó acr escent ado em abert o.
Dev e ser ut ilizado após t odos os elem ent os e it ens serem
En dTr e e acr escent ados a um nó da árv or e, abert o com o m ét odo
AddTree( ) .

 Ap a r ê n cia :

- 537 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M é t odo: N e w ( )

 Sin t a x e : DbTr ee( ) : New ( [ nTop ] , [ nLeft ] , [ nBot t om ] , [ nRight ] , [ oWnd] ,


[ bchange ] , [ bRClick ] , [ lCargo ] , [ lDisable ] )

 Pa r â m e t r os:

n Top Coordenada v ert ical superior do Obj et o.


n Le ft Coordenada horizont al esquerda do Obj et o.
n Bot t om Coordenada v ert ical inferior do Obj et o.
n Rig h t Coordenada horizont al direit a do Obj et o.
oW n d Janela pai do Obj et o Tr ee
Code- Block cont endo a ação a ser edxecut ada na m udança
bch a n ge
de foco enrt e os elem ent os da árv ore.
Code- Block a ser ex ecut ado quando pressionado o bot ão
bRClick
direit o do Mouse sobre um elem ent o da ár voew .
Se .T., indica que os elem ent os do Tr ee ut ilizarão a
propriedade CARGO, capaz de arm azenar um a st ring
lCa r go
ident ificadora, fornecida na m ont agem para cada elem ent o
e it em da árvor e.
Se .T., cria o obj et o do Tr ee desabilit ado, não perm it indo
lD isa ble foco e nav egação no m esm o qneuando ele não sej a
habilit ado.

 Re t or n o:

Obj e t o Ret orna um a nov a inst ância do Obj et o da Classe DbTr ee.

M é t odo: AddTr e e ( )

 Sin t a x e : oObj : AddTree ( < cLabel > , [ lPar02 ] , [ cResOpen ] , [ cResClose ] ,


[ cBMPOpen ] , [ cBMPClose ] , [ cCargo ] )

 Pa r â m e t r os:

cLa be l Tít ulo do " nó" da ár vore a ser acrescent ado.


lPa r 0 2 ( reservado)
Resource do RPO a ser ut ilizado quando o nó est iver
cRe sOpe n
abert o.
Resource do RPO ( bit m ap) a ser ut ilizado quando o nó
cRe sClose
est iver fechado.
Pat h + I m agem bit m ap a ser ut ilizada quando o n[ o est iver
abert o.

cBM POpe n A especificação de im agens a part ir dos param et ros


cBMPOpen e cBMPClose apenas será considerada caso os
parâm et ros cResOpen e cResClose não for em
especificados.
Pat h + I m agem bit m ap a ser ut ilizada quando o nó est iver
fechado.
cBM PClose
A especificação de im agens a part ir dos param et ros
cBMPOpen e cBMPClose apenas será considerada caso os

- 538 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


parâm et ros cResOpen e cResClose não for em
especificados.
St ring com valor único, fornecido par a ident ificar o nó
cCa r go at ual. Pode ser r ecuper ado post eriorm ent e dur ant e a
navegação.

 Re t or n o:

Nenhum -

M é t odo: AddTr e e I t e m ( )

 Sin t a x e : oObj : AddTr eeI t em ( < cLabel> , [ cResource] , [ cBit Map] , [ cCargo] )

 Pa r â m e t r os:

cLa be l Tít ulo do it em da árv or e.


Resource ( BMP) do r eposit ório, a ser m ost rado à esquerda
cRe sou r ce
do t ít ulo do it em .
Arquivo de im agem ( bit m ap) a ser m ost rado à esquerda do
t ít ulo do it em .
cBit M a p
Est e parâm ,et r o apenas serã consider ado caso o parâm et ro
cResour ce não for infor m ado.
at ravés dele, podem os especificar um a st ring de
cCa r go
ident ificação para est e it em na árvor e.

 Re t or n o:

Nenhum -

M é t odo: En dTr e e ( )

 Sin t a x e : oObj : EndTree ( )

 Pa r â m e t r os:

Nenhum

 Re t or n o:

Nenhum

- 539 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

#include "Protheus.ch"

/*/
+-----------------------------------------------------------------------
| Função | TDBTree | Autor | MICROSIGA | Data | |
+-----------------------------------------------------------------------
| Descrição | Exemplo de utilização da função DbTree |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function TDBTree()


Local cBmp1 := "PMSEDT3"
Local cBmp2 := "PMSDOC"
Private cCadastro := "Meu Computador"
Private oDlg
Private oDBTree

DEFINE MSDIALOG oDlg TITLE cCadastro FROM 0,0 TO 240,500 PIXEL

oDBTree := dbTree():New(10,10,95,240,oDlg,{|| U_Proc(oDBTree:GetCargo())},;


,.T.)

oDBTree:AddTree("Pentium 4"+Space(24),.T.,cBmp1,cBmp1,,,"1.0")

oDBTree:AddTreeItem("Gabinete",cBmp2,,"1.1")
oDBTree:AddTreeItem("Monitor" ,cBmp2,,"1.2")
oDBTree:AddTreeItem("Teclado" ,cBmp2,,"1.3")
oDBTree:AddTreeItem("Mouse",cBmp2,,"1.4")
oDBTree:AddTreeItem("Som",cBmp2,,"1.5")
oDBTree:AddTree("Placa Mãe",.T.,cBmp1,cBmp1,,,"2.0")
oDBTree:AddTreeItem("Processador",cBmp2,,"2.1")
oDBTree:AddTreeItem("Memória" ,cBmp2,,"2.2")
oDBTree:AddTreeItem("Vídeo",cBmp2,,"2.3")
oDBTree:AddTreeItem("Fonte",cBmp2,,"2.4")

oDBTree:EndTree()

oDBTree:EndTree()

DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg


ACTIVATE MSDIALOG oDlg CENTER

Return

- 540 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


User Function Proc(cCargo)
Local cRet := ""

If cCargo == "1.1"
MsgInfo("Gabinete Torre com 4 baias - Preto, com unidade de leitura e”+;
“gravação de CD/DVD",cCadastro)
Elseif cCargo == "1.2"
MsgInfo("Monitor LCD 17' - LG",cCadastro)
Elseif cCargo == "1.3"
MsgInfo("Teclado multimídia com funções de internet e e-mail",cCadastro)
Elseif cCargo == "1.4"
MsgInfo("Mouse Optico sem fio",cCadastro)
Elseif cCargo == "1.5"
MsgInfo("2 Caixas de Som - 50W RMS Cada",cCadastro)
Elseif cCargo == "2.1"
MsgInfo("Processador Pentium 4 - 3.8 Ghz",cCadastro)
Elseif cCargo == "2.2"
MsgInfo("1 Pente de Memória de 1Gb - DDR 500",cCadastro)
Elseif cCargo == "2.3"
MsgInfo("Placa de Vídeo GeoForce 5000 com 256Mb",cCadastro)
Elseif cCargo == "2.4"
MsgInfo("Fonte de Alimentação de 500W",cCadastro)
Endif

Return

- 541 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 8 .3 . M sSe le ct ( )

 D e scr içã o: A classe MsSelect cria um obj et o brow se ( ou grid) , com a prim eira coluna
sendo do t ipo m arcação.

 Pr opr ie da d e s:

Obj et o pai da MsSelect ( MSDI ALOG, MSWI NDOW,


oWnd
MSPANEL)
Obj et o br owse ( ou grid) da MsSelect , herdado da classe
oBr owse
TCBROWSE

 M é t odos p r in cip a is:

New Cont rut or da Classe MsSelect .


Ret orna um a nov a inst ância do Obj et o da Classe MsSelect .

 Ap a r ê n cia :

- 542 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M é t odo: N e w ( )

 Sin t a x e : MsSelect ( ) : NEW ( < cAlias > , [ cCam po ] , [ cCpo ] , [ aCam pos ] , [
lI nv ] , [ cMar ] , [ aCord ] , [ cTopFun ] , [ cBot Fun ] , [ oWnd ] , [
reserv ed ] , [ aColors ] )
 Pa r â m e t r os:

cAlia s Tabela que será ut ilizada pela MsSelect


cCa m p o Cam po que será ut ilizado na coluna de m ar cação
Cam po da t abela inform ada pelo param et r o cAlias ou
cCpo função que será execut ada na apr esent ação da coluna que
indica se a linha da MsSelect est a habilit ada ou não
Vet or com inform ações dos cam pos para criação das
colunas da MsSelect . Se não for inform ado, a MsSelect irá
criar as colunas baseado no Dicionário de Cam pos ( SX3) da
t abela inform ada no par am et r o cAlias.
Form at o:
a Ca m pos
1 - cam po ou blocó de código com cont eúdo que será
apresent ado na coluna pela MsSelect
2 - não ut ilizado
3 - cabeçalho
4 - m ácara de apr esent ação ( pict ure)
lI n v I ndica se MsSelect irá ut ilizar m arcação invert ida
Marca que será ut ilizada pela MsSelect para cont role do
cam po inform ado pelo param et ro cCam po. Para ut ilizar o
cM a r
param et ro cMar, ut ilize a função Get Mar k para r et ornar a
próxim a m ar ca.
Coordenadas para criação da MsSelect .
Form at o:
1 - Linha inicial
a Cor d
2 - Coluna inicial
3 - Linha final
4 - Coluna final
Função que r et ornará o cont eúdo inicial que a MsSelect
ut ilizará para apr esent ar a prim eira linha da t abela, com o
um range, j unt o com o param et ro cBot Fun.
cTopFu n
O cont eúdo r et ornado será ut ilizado para fazer o
posicionam ent o da t abela inform ada pelo param et r o cAlias,
baseado na chave de índice posicionada para a m esm a.
Função que r et ornará o cont eúdo final que a MsSelect
ut ilizará para apr esent ar a últ im a linha da t abela, com o um
range, j unt o com o param et r o cTopFun.
cBot Fu n
O cont eúdo r et ornado será ut ilizado para o posicionam ent o
final da t abela inform ada pelo param et r o cAlias, baseado
na chave de índice posicionada para a m esm a
Obj et o pai da MsSelect ( MSDI ALOG, MSWI NDOW,
oW n d
MSPANEL, et c.)
r e se r ve d Param et r o r eservado
Vet or com regras para a apresent ação da coluna de
legenda.
Form at o:
a Color s
1 - Expr essão ADVPL com r et orno lógico que indica se a
cor ser á ut ilizada pela coluna
2 - cor da coluna:

- 543 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CI NZA
BR_LARANJA
BR_MARROM
BR_PI NK
BR_PRETO
BR_VERDE
BR_VERMELHO

 Re t or n o:

Obj e t o Ret orna um a nov a inst ância do Obj et o da Classe MsSelect .

Ex e m plo:

DEFINE MSDIALOG oDlg1 TITLE "Selecao para Transferencia" From 9,0 To 32,80;
OF oMainWnd
@1.4,.8 Say "Valor Total:"
@1.4, 7 Say oValor VAR nValor Picture "@E 999,999,999,999.99"
@1.9,.8 Say "Quantidade:"
@1.9, 9 Say oQtda VAR nQtdBem Picture "@E 99999" SIZE 50,10
@1.4,15 Say Iif(MVParBox01==1,;
"Somente grupos de ["+MVParBox02+"] ate ["+MVParBox03+"]","")
If cTipoDet == "D"
@12.4,01 Say "Qtde. a Detalhar"
@158,60 MSGET nQtde Picture "@E 999" SIZE 036, 10 OF oDlg PIXEL;
VALID nQtde > 0
ElseIf cTipoDet == "P"
@12.4,01 Say oLabel Var cLabel := "Tipo de Projeto"
oRad := TRadMenu():New(169,005,{"Industrial","Florestal"},;
bSetGet(nOpcRad),oDlg,,{|| AF250RAD(nOpcRad)},,,,,,100,12,,,,.T.)
@15.5,01 Say oLabel2 Var cLabel2 := "Detalhamento:"
oRad2 := TRadMenu():New(210,005,{"Manter","Alterar"},;
bSetGet(nOpcRad2),oDlg,,{|| AF250RAD2(nOpcRad2)},,,,,,;
100,12,,,,.T.)
@16.4,01 Say oLabel3 Var cLabel3 := "Percentual"
oGet := TGet():New(210,043,bSetGet(nPerc),oDlg,030,010,;
"@E 999.99",,,,,,,.T.)
@18.2,01 Say oLabel4 Var cLabel4 := "Qtde. Det."
oGet2 := TGet():New(235,040,bSetGet(nQtde),oDlg,030,010,;
"@E 999",,,,,,,.T.)
oGet:Hide()
oGet2:Hide()
oLabel3:Hide()
oLabel4:Hide()
EndIf
oMark := MsSelect():New("SN3","N3_OK","!N3_BAIXA",,@lInverte,;
@cMarca,{35,1,143,315})
oMark:bMark := {| | a250Display(cMarca,lInverte,oValor,oQtda)}

ACTIVATE MSDIALOG oDlg1


ON INIT EnchoiceBar(oDlg1,;
{|| nOpct:=1,iif(DeParaEnt(),oDlg1:End(),.f.)},{|| nOpct:=2,oDlg1:End()})

- 544 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


39. I nt r oduçã o à r e la t ór ios gr á ficos

3 9 .1 . TRe por t ( )

3 9 .1 .1 . I nt r oduçã o

Fin a lid a de

O Pr ot heus ofer ece o r ecur so per sonalização para alguns relat órios de cadast r os e
m ovim ent ações do sist em a. Ele t em com o pr incipais funcionalidades a definição de cores,
est ilos, t am anho, font es, quebras, m áscara das células para cada seção, criação de fórm ulas e
funções ( Som a, Média, et c.) , possibilidade de salvar as configurações por usuário e criação de
gráficos.
Com a funcionalidade de Relat órios Per sonalizáveis, o usuário pode m odificar os r elat órios
padrões, criando seu pr óprio layout .

Vale lem brar que nem t odos os r elat órios são per sonalizáveis. Por ex em plo, relat órios que
t enham layout pré- definidos por lei e form ulários ( bolet os, not as- fiscais, et c) não poderão ser
alt erados.
Os relat órios per sonalizados são gravados com ext ensão .PRT, diferenciando- se dos r elat órios
padrões que recebem a ext ensão .# # R.

- 545 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D e scr içã o

O TReport é um a classe de im pressão que subst it ui as funções Set Print , Set Default ,
Rpt St at us e Cabec.

A classe TReport perm it e que o usuário personalize as inform ações que serão apresent adas no
relat ório, alt erando font e ( t ipo, t am anho, et c) , cor, t ipo de linhas, cabeçalho, rodapé, et c.

Est rut ura do com ponent e TReport :

• O r elat ório ( TReport ) cont ém 1 ou m ais seções ( TRSect ion) ;


• Um a seção ( TRSect ion) pode cont er 1 ou m ais seções;
• A seção ( TRSect ion) cont ém células pré- definidas e células selecionadas pelo usuário;
• A seção ( TRSect ion) t am bém cont ém as quebras ( TRBr eak) par a im pressão de
t ot alizadores ( TRFunct ion) ;
• Os t ot alizadores são incluídos pela seção que aut om at icam ent e inclui no relat ório
( TReport ) .

Pr é - Re qu isit os

Para ut ilizar o TReport , verifique se o seu r eposit ório est á com o Release 4 do Pr ot heus- 8, ou
versão superior .

A função TRepI nUse( ) verifica se a lib do TReport est á liberada no reposit ório em uso. O
ret orno é um a variável lógica.

#include "protheus.ch"

User Function MyReport()


Local oReport

If TRepInUse() //verifica se a opção relatórios personalizáveis está


disponível
Pergunte("MTR025",.F.)

oReport := ReportDef()
oReport:PrintDialog()
EndIf
Return

Verifique t am bém o parâm et ro MV_TReport . Para ut ilizar os r elat órios personalizáveis, o


parâm et ro MV_TREPORT ( t ipo num érico) dev e ser alt erado no am bient e Configurador ,
conform e um a das opções que seguem :
1 = ut iliza relat ório no form at o t radicional ( ant igo) ;
2 = ut iliza relat ório per sonalizável;
3 = pergunt a qual relat ório será ut ilizado: t radicional ( ant igo) ou personalizável.

- 546 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


3 9 .1 .2 . I m pr e ssã o do r e la t ór io pe r sona liz á ve l

Cada com ponent e da t ela de im pressão do TReport , deve ser configurado no program a, par a
que o usuário t enha acesso às personalizações:

3 9 .1 .2 .1 . Pa r â m e t r os d e im pr e ssã o

A caixa de list agem apr esent ada deve ser ut ilizada conform e o m eio de saída do r elat ório. Vej a
a seguir.

I m pr e ssã o

Ar q u iv o

O r elat ório será gravado em disco com o nom e apr esent ado. Caso sej a escolhida a opção
" Ser vidor" ele será gr avado no diret ório det erm inado na senha do usuário, at rav és do
configurador , sendo est e sem pre no ser vidor ( padrão \ SPOOL\ ) . Na escolha da opção " Local"
será abert a um a j anela para que sej a escolhido o local onde o relat ório será gravado na
m áquina do usuário.
O r elat ório gerado a part ir dest a opção pode ser im presso ou enviado por e- m ail após ser
apresent ado na t ela.

- 547 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Spool

Direciona o r elat ório para im pressão via configuração do Windows® das im pressoras
inst aladas.
E- m a il

Envia o r elat ório por e- m ail ( I nt ernet ) . Para ist o, dev em ser configurados os seguint es
parâm et ros no Am bient e Configurador:
 M V_ RELACN T
Define a cont a de e- m ail para ident ificar a prov eniência dos r elat órios.
Ex em plo: relprot heus@m icrosiga.com .br
 M V_ RELPSW
Define a senha da cont a de e- m ail para envio dos r elat órios.
 M V_ RELSERV
Define o servidor da cont a de e- m ail para o envio do relat ório.
Ex em plo: sm t p.m icrosiga.com .br

Quando selecionada est a opção, dev e- se infor m ar, no cam po em dest aque na figura abaixo, o
e- m ail para o qual o relat ório deve ser r em et ido.

- 548 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


O Pr ot heus Ser ver pode t am bém ser ex ecut ado com o um servidor Web, r espondendo a
requisições HTTP. No m om ent o dest as r equisições, pode ex ecut ar r ot inas escrit as em ADVPL
com o pr ocessos individuais, enviando o result ado das funções com o ret orno das requisições
para o client e HTTP ( com o por exem plo, um Br owser de I nt ernet ) . Qualquer rot ina escrit a em
ADVPL que não cont enha com andos de int erface pode ser ex ecut ada at rav és de r equisições
HTTP. O Pr ot heus perm it e a com pilação de arquivos HTML cont endo código ADVPL em but ido.
São os cham ados arquivos ADVPL ASP, para a criação de páginas dinâm icas.

 Pr ogr a m a çã o Te lN e t

TelNet é part e da gam a de pr ot ocolos TCP/ I P que perm it e a conexão a um com put ador rem ot o
at ravés de um a aplicação client e dest e pr ot ocolo. O PROTHEUS Ser ver pode em ular um
t erm inal TelNet , at ravés da execução de r ot inas escrit as em ADVPL. Ou sej a, pode- se escrever
rot inas ADVPL cuj a int erface final será um t erm inal TelNet ou um colet or de dados m óv el.

Pa pe l

Ta m a n h o do p a pe l

Selecione o t am anho do papel em que o r elat ório será im presso.

As especificações de t am anho do papel são as do padrão do m ercado,


conform e o form at o escolhido, o Prot heus irá aj ust ar a im pressão.
For m a t o da im pr e ssã o

Selecione o for m at o de im pressão, clicando nos bot ões de opção “ Ret rat o” ou “ Paisagem ” ,
fazendo assim que o r elat ório sej a im presso na orient ação vert ical ou horizont al,
respect ivam ent e.

Con f igu r a çõe s

Tít u lo

Caso queira alt erar a opção sugerida pelo sist em a, digit e o cabeçalho do r elat ório.

Or de m

Escolha a ordem em que as inform ações serão apresent adas no relat ório, clicando em um a das
chaves disponíveis.

La you t

Per m it e selecionar o m odelo de relat ório para im pressão, à m edida que novos leiaut es forem
gravados para um relat ório, seus nom es serão list ados nessa caixa.

Pr e vie w

Faz a exibição do relat ório ger ado na t ela, possibilit ando, na seqüência, o seu envio para
im pressora ou a cancelam ent o da im pr essão.

- 549 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e cu t a r e m se gu n do pla n o

Essa opção perm it e que o relat ório sej a gerado e enviado para a fila de im pressão, enquant o o
usuário pode execut ar out ras t ar efas no sist em a.

3 9 .1 .3 . Pe r sona liz a çã o

É possível configurar- se as colunas do lay- out do relat ório, bem com o os acum uladores,
cabeçalhos e linhas.
Est ão disponíveis para per sonalização t am bém a font e, t am anho, cor es, e et c.

3 9 .1 .3 .1 . Edit a n do o la you t do r e la t ór io

O prim eiro passo é ent ender a nova est rut ura dos r elat órios desenv olvidos com a fer ram ent a
TReport .
O Relat ório possui Seções e Células. É cham ada de Seção, cada um dos grupos de
inform ações, e de Célula, cada um dos cam pos que serão im pressos.

- 550 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


N ov a e st r u t u r a do r e la t ór io TRe por t :

O r elat ório m ais sim ples que se consegue em it ir em TReport , é um a list agem .

3 9 .1 .4 . D e finindo a Funçã o Re por t D e f( )

A função Report Def( ) é responsáv el pela const rução do lay- out do relat ório ( oReport ) . É ela
quem define as colunas, os cam pos e as inform ações que serão im pressas.
Os com andos que fará essa const rução são:

1. DEFI NE REPORT
2. DEFI NE SECTI ON
3. DEFI NE CELL

- 551 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


D EFI N E REPORT

A função DEFI NE REPORT é r esponsáv el pela criação do obj et o Report , ou sej a, o r elat ório.
I nt ernam ent e, o DEFI NE REPORT irá execut ar o m ét odo TReport ( ) : New( ) .
Est rut ura do com ponent e TReport :

⇒ O r elat ório ( TReport ) cont ém 1 ou m ais seções ( TRSect ion) ;


⇒ Um a seção ( TRSect ion) pode cont er 1 ou m ais seções;
⇒ A seção ( TRSect ion) cont ém células pré- definidas e células selecionadas pelo usuário;
⇒ A seção ( TRSect ion) t am bém cont ém as quebras ( TRBr eak) par a im pressão de
t ot alizadores ( TRFunct ion) ;
⇒ Os t ot alizadores são incluídos pela seção que aut om at icam ent e inclui no relat ório
( TReport ) .

D EFI N E SECTI ON

Ainda no Report Def( ) , são definidas as seções ( oSect ion) do r elat ório.
As seções do r elat ório r epr esent am os difer ent es grupos de inform ações exibidos.
Há a seção principal e as específicas.
I nt ernam ent e, o DEFI NE SECTI ON irá ex ecut ar o m ét odo TRSect ion( ) : New( ) .
A classe TRSect ion pode ser ent endida com o um layout do relat ório, por cont er células,
quebras e t ot alizadores que darão um form at o para sua im pressão.
Com a classe TRSect ion é possível definir um a query , filt ro ou índice com filt ro ( I ndRegua) que
será ut ilizada por ela para pr ocessam ent o do r elat ório, at ravés do m ét odo Print e ut ilizando as
células de posicionam ent o ( TRPosit ion) .

D EFI N E CELL

Para cada seção, dev em ser definidas as células. Célula é cada inform ação que deverá ser
im pressa. Pode ser um cam po do cadast r o, ou um result ado de um a operação. É um a Célula
de im pressão de um a seção ( TRSect ion) de um r elat ório que ut iliza a classe TReport
I nt ernam ent e, o DEFI NE CELL irá execut ar o m ét odo TRCell( ) : New ( ) .

- 552 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M ÓD ULO 0 8 : Aplica çõe s AD VPL pa r a o ERP

40. Pr ot he us e o TOPCON N ECT / TOTV S D bAcce ss

O TOTVSDBAccess é um a ferram ent a de conect ividade a bases de dados, perm it indo que
aplicat ivos acessem um a am pla variedade de ser vidores de banco de dados sem a necessidade
de geração de códigos específicos para cada um a delas.

Os bancos de dados hoj e suport ados pelo TOTVSDBAccess são:

 Microsoft SQL7® ou superior


 Oracle 8® ou superior
 I BM Universal Dat abase® ( DB2)
 I nform ix®
 Sybase Adapt ive Serv er ®
 Post gres 7.1.1® ou superior
 MySQL®

O TOTVSDBAccess per m it e gerenciar as infor m ações pert inent es à ut ilização do banco de


dados, r egist rando e apresent ado dados, com o:

 Dados est at íst icos de form a gr áfica com r elação à:


 Quant idade de usuários conect ados
 Quant idade de t abelas em ut ilização
 I Os por segundo
 Máxim o de I Os por segundo
 Relação dos usuários conect ados
 Checagem das querys geradas pelos usuários conect ados
 Quebr a de conexão do usuário
 Mensagens de ut ilização do TOTVSDBAccess
 Configurações Gerais quant o a:
 Banco de dados em ut ilização
 Relação de usuários e senhas por banco de dados
 Logins de usuário
 Configuração de " Table Spaces" para det erm inados bancos de dados
 Definição dos parâm et r os de criação de t abelas para det erm inados bancos de dados
 Validação de conexão, checando os parâm et r os de conexão com o banco de dados
 Monit oram ent o de índices gerados

- 553 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 0 .1 . Ca r a ct e r íst ica s t é cnica s com o uso do TOTVS D bAcce ss

Com por t a m e n t o de Qu e r ie s – Colu n a s Ca lcu la da s

Após enviar ao Banco de Dados um a solicit ação de abert ura de Quer y , em caso de sucesso na
operação, o TOPConnect obt ém do Banco de Dados a quant idade de colunas que serão
ret ornadas, e qual é o t am anho e t ipo e especificações de cada um a das colunas, para r et ornar
ao Pr ot heus um a est rut ura definida de inform ações, e o cursor aber t o é lido conform e são
solicit ados os pr óxim os r egist ros ( DBSkip( ) no Advpl ) , e a cada requisição, um a linha do
cursor é r et ornada, at é não hav er m ais linhas no cursor , at ingindo o final do arquivo no Advpl (
EOF( ) ) .

Quando especificam os um a coluna de ret orno na Query , que cor responde a inform ações lidas
diret am ent e de um a ou m ais coluna( s) da t abela, cada coluna ret ornada pela Query cont ém
um a definição de t ipo e t am anho corr espondent e ao cam po de origem do dado de r et orno.
Dest e m odo, se considerarm os, por exem plo, a Query : SELECT A1_FI LI AL FROM SA1990 ,
onde o cam po A1_FI LI AL na t abela SA1990 é um cam po do t ipo varchar , com 2 byt es de
t am anho, quando o cur sor for abert o no Banco de Dados, o TOPConnect irá obt er do banco
que o r esult - set gerado possui apenas um a coluna, e est a coluna é do t ipo varchar , com no
m áxim o 2 byt es de t am anho.

Os Bancos de Dados não apenas perm it em r ecuperar ret ornos diret am ent e lidos de um a ou
m ais t abelas, m as t am bém é possível abrir um cursor onde um a ou m ais colunas cont enham
um result ado calculado, ut ilizando- se de expressões e/ ou funções nat ivas do Banco de Dados.
Para est es t ipos de ret orno, cada banco de dados pode apresent ar com port am ent os
diferenciados ao descr ever o t am anho de ret or no da( s) coluna( s) .

Est e com port am ent o pode variar de acordo com o Banco de Dados, a expr essão e/ ou funções
ut ilizadas para ger ar a coluna de r et orno, e inclusive podem t er difer enças ent r e versões e
Build’s do m esm o Banco de Dados e/ ou param et rizações específicas do Banco de Dados e/ ou
da aplicação Client / ODBC / API ut ilizada para acesso ao Banco.

Para ilust rar m elhor est as diferenças, v ej am os abaixo os result ados obt idos com queries, em
bancos dist int os, onde foi criada um a t abela com a m esm a est rut ura, e 10 linhas de dados, e
nela foram ex ecut adas algum as querys, onde t em os com o r et orno um a coluna calculada. A
t abela possui os cam pos CPOC, t ipo Caract er e, t am anho 10 byt es, num erados de 0000000001
a 0000000010 e um cam po num érico CPON, alim ent ado com valor es posit ivos. Para cada
Query, m ost ram os o valor r et ornado ao Advpl, cont endo o t ipo de dado ret ornado e o t am anho
( len) da coluna, no form at o . ( Tipo ( t am anho ) ) .

Qu e r y : SELECT MI N( CPOC) CPOTESTE FROM TESTRET

 Re t or n o: Todos os bancos r et ornaram um a coluna com t am anho de 10 byt es.

 Ba n cos:

D a t a ba se Tipo Ta m a n h o Con t e ú do
M SSQL 2 0 0 0 Caract er 10 0000000001
I N FORM I X Caract er 10 0000000001
ORACLE Caract er 10 0000000001
M YSQL Caract er 10 0000000001
D B2 Caract er 10 0000000001

- 554 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Qu e r y : SELECT MI N( CPOC) CPOTESTE FROM TESTRET WHERE CPON < 0

 Re t or n o: Todos os bancos r et ornaram um a coluna vazia.

 Ba n cos:

D a t a ba se Tipo Ta m a n h o Con t e ú do
M SSQL 2 0 0 0 Caract er 10 Vazio
POSTGRES Ca r a ct e r 0 Va z io
I N FORM I X Caract er 10 Vazio
ORACLE Caract er 10 Vazio
M YSQL Caract er 10 Vazio
D B2 Caract er 10 Vazio

Qu e r y : SELECT LEFT( CPOC,5) CPOTESTE FROM TESTRET

 Re t or n o: Todos os bancos que suport am a função LEFT( ) ret ornaram um a coluna


de inform ações, onde os 5 prim eiros byt es er am '00000'.

 Obse r v a çõe s: Os bancos r et ornaram que a coluna t em 5 byt es de t am anho.


Por ém , o BAnco DB2 inform a que a coluna t êm t am anho de 4000 Byt es.
Est e m esm o r et orno foi obt ido no DB2 quando ut ilizadas funções
RI GHT( ) , REPLACE( ) e REPEAT( ) , no banco DB2, e para o BAnco
Post gres, foi r et ornado o t am anho de 2000 byt es para est as funções.

 Ba n cos:

D a t a ba se Tipo Ta m a n h o Con t e ú do
M SSQL 2 0 0 0 Caract er 5 00000
M YSQL Caract er 5 00000
D B2 Ca r a ct e r 4000 00000 …

Qu e r y : SELECT SUBSTRI NG( CPOC,2,4) CPOTESTE FROM TESTRET

 Re t or n o: Todos os bancos r et ornaram um a coluna de t am anho 4 byt es, excet o o


POSTGRES, que r et ornou t am anho de 2000 byt es.

 Ba n cos:

D a t a ba se Tipo Ta m a n h o Con t e ú do
M SSQL 2 0 0 0 Caract er 4 0000
POSTGRES Caract er 2000 0000 …
I N FORM I X Caract er 4 0000
ORACLE Caract er 4 0000
M YSQL Caract er 4 0000
D B2 Caract er 4 0000

- 555 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Devido a est as diferenças de com port am ent o, dev em os t om ar alguns cuidados ao desenv olver
aplicações que ut ilizam colunas calculadas em queries. Nest es casos, deve ser ut ilizada um a
função do banco de dados, para assegurar que o banco de dados r et or ne o t am anho de coluna
adequado ao TOPConnect / Tot vsDBAccess.

Por exem plo, vej am os a query abaixo :

SELECT REPLACE(CPOC,'0','_') AS CPOTESTE FROM TESTRET

Se j á é de conhecim ent o do pr ogram ador que o cam po da base de dados CPOC dest a t abela
t em 10 byt es de t am anho, devem os fazer um cast dest e r et orno, par a char ou var char, com
t am anho de 10 byt es. Dessa form a, o banco ret orna o t am anho esperado da coluna para o
TOPConnect quando da abert ura da quer y. I st o evit a que espaços desnecessários t rafeguem
pela rede para at ender à r equisição, e que est e valor ex cedent e sej a usado para alim ent ar
um a variável do Advpl. Vej am os com o usar est e r ecurso na query acim a descrit a, ut ilizando
um a sint axe aceit a pela m aioria dos Bancos de Dados hom ologados :

SELECT CAST( REPLACE(CPOC,'0','_') AS VARCHAR(10)) CPOTESTE FROM TESTRET

Vale a pena salient ar que, cada banco de dados possui, com pequenas variações, um a sint axe
para perm it ir o CAST de um ret orno. Para m aior es det alhes, a docum ent ação do banco dev e
ser consult ada.

Com por t a m e n t o d ife r e n cia do com Ba n dos de D a dos Post Gr e s

O Banco de Dados Post gres possuem um com port am ent o diferenciado ent r e os Builds do
Ser ver do Banco, e possui um a param et rização na configuração do ODBC que pode int erferir
na m aneira com o os at ribut os das colunas de r et orno de um a query são r et ornados.

Em versões inferior es ào Post gr es 8.x , as diferenças de com port am ent o em relação àos dem ais
Bancos de Dados possuem um difer encial m uit o significat ivo, em prat icam ent e t odas as
funções de r et orno calculado. Para est es casos, em se t rat ando de Post gres versões inferiores
a 8.x, a pr ecisão de r et orno da coluna corr esponde ao t am anho m áxim o de r et orno do t ipo
VarChar. ( Est e t am anho m áxim o pode ser configurado na conexão ODBC do Post gr eSql, e o
valor default é 65536 byt es. )

Na função Subst ring( ) , m esm o que est ej a especificado no 3. parâm et ro da função, a


quant idade final lim it ada de Byt es, o Banco de Dados descr ev e est a coluna de r et orno com o
sendo um VarChar( ) com a pr ecisão do m aior v alor VARCHAR( ) a ser r et ornado pelo client . Na
função Max( ) , quando especificado um cam po da base do t ipo Char ou Varchar, t em os um
com port am ent o sem elhant e.

Quando foram hom ologados os Bancos Post gr es para uso com o ERP Microsiga e TOPConnect
4, prat icam ent e não er am ut ilizadas queries com colunas calculadas nas aplicações Advpl, e
est e com port am ent o diferenciado não foi percebido. Confor m e as r ot inas foram evoluindo,
buscando m ais per form ance at rav és do uso de Queries, t ornou- se per cept ível est as difer enças
operacionais.

- 556 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Algum as dest as diferenças operacionais foram assim iladas pelas funções do ERP, por exem plo
a ChangeQuery, que em ver são at ualizada ( * * Prot heus 8 e P10, font e aplib070.prw com dat a
igual ou superior a 08/ 03/ 2008) , aplicam o CAST( ) aut om at icam ent e para SELECT
MAX( CAMPO) , quando o banco é Post gr es, e o cam po selecionado for um cam po da base de
dados, pr esent e no Dicionário de Cam pos ( SX3 ) .

Para t odos os efeit os, para ut ilização com as versões hom ologadas de Post gr es inferiores a
8.x, é necessário alt erar a configuração de ODBC do Post gr es, para lim it ar o r et orno do t ipo
VarChar par a 2000 Byt es, pois o r et orno do valor default ( 65536 byt es ) não é suport ado pelo
TOPConnect / TOTVSDBAccess. Alt eram os est a configuração no arquivo .odbc.ini no linux, e/ ou
no arquivo de configuração do ODBC do Post gres ut ilizado, inserindo na seção da conexão /
ident ificação do banco a chave abaixo :

MaxLongVarcharSize=2000

At ualm ent e est á em processo de hom ologação as v er sões m ais recent es ( 8.x) do banco
Posgres. Quando hom ologado, a inform ação est ará disponivel na DEM, em Principal - > Guia de
Refer ência - > Guia de Plat aform as Hom ologadas - > Bancos de Dados Relacional X S.O.

Con ce it o de Í n dice s Pe r m a n e n t e s e D ife r e n ça s d a s RD D s

Na RDD TOPCONN, não t em os o conceit o de criação de índice t em porário, apenas índice


perm anent e. Um índice perm anent e é criado fisicam ent e no Banco de Dados r elacional
ut ilizado, at rav és do TOPConnect / DbAccess, onde dev em os especificar um ou m ais cam pos
para com por a chav e / expr essão de índice.

Quando ut ilizam os CodeBase/ DBF, podem os especificar com o cam pos de chave de índice o
ret orno de funções, com o por ex em plo STR( ) , DTOS( ) , SUBSTR( ) , ent re out ras suport adas de
m odo nat ivo pela aplicação provedor a de acesso, no caso ADS Local e/ ou ADS Ser ver.

Quando usam os um Banco Relacional SGDB at ravés do TOPConnect / DbAccess, dev em os


especificar um a expr essão de chav e que sem pre ret orne um valor Caract er e, e as únicas
funções perm it idas para adequações de t ipo de dado no Advpl para est as expr essões de índice
são : DTOS( ) e STR( ) .

Fu n cion a m e n t o I n t e r n o

A expr essão ut ilizada para a criação de um índice perm anent e em Adv pl, por ex em plo : CPOC
+ DTOS( CPOD) + STR( CPON,10 ) , quando ut ilizam os o RDD TOPCONN, será aj ust ada para o
Banco de Dados r elacional ut ilizado para um a expr essão cont endo apenas a list a de cam pos
desej ada, na sequência em que foi especificada, e as funções DTOS( ) e STR( ) nao são
passadas ao banco de dados, pois não exist e a necessidade de conversão de dados para o
Banco.

Um cam po do t ipo 'D' Dat a é t rat ado pelo TOPConnect e gravado na t abela em quest ão com o
um cam po 'C' Caract ere, de 10 byt es, no for m at o AAAAMMDD, e os núm er os são gravados em
um cam po DOUBLE* .

- 557 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Qu e br a de Com p a t ibilida de com Cod e Ba se / D BF

Os Bancos r elacionais, em sua grande m aioria, senão t odos, suport am apenas a criação de
índices onde sej am especificados cam pos físicos da base de dados. Não são suport adas
funções de conversão ou t ransform ação de dados na criação de índices, com o por ex em plo
subst ring( ) , left ( ) , ent re out ras. Em bora alguns bancos perm it am a criação de colunas
calculadas, as m esm as são 'virt uais', ist o é, não exist em fisicam ent e na t abela, e t am bém não
é perm it ido o uso de colunas virt uais para a criação de índices.

Ent endem os que o RDD CodeBase / DBF, onde originalm ent e foi desenvolvido o ERP, nos dava
cert a flexibilidade ao perm it ir operações com o est as, por ém a um cust o de processam ent o
m ais alt o, pois para cada inser ção ou alt eração, o RDD t em que ex ecut ar funções de conversao
e concat enação de st rings para at ualização dos índices que usam est e r ecur so.

Mant er o suport e a t odos os indices perm anent es, criados a part ir de result ados de
expr essões, nas v ersões ant eriores do ERP, t eríam os um cust o m uit o alt o de com plexidade,
perform ance e duplicidade de inform ações nas t abelas. Seria necessário criar colunas físicas
nas t abelas, t ranspar ent es ao usuario, para m ant er copias em duplicidade de part es de colunas
agrupadas, com gat ilhos do banco de dados disparados int ernam ent e em operações de insert e
updat e, um m ecanism o r elat ivam ent e com plex o de se m ant er, inst ável para dar m anut enção,
e cust oso em per form ance para o Banco de Dados.

Part indo da prem issa que, se um a det erm inada inform ação deve ser indexada para busca, ela
dev e ser um a inform ação que ocupa exclusivam ent e um cam po físico da base de dados, são
evit adas as operações const ant es de concat enação e desm em bram ent o de um a inform ação
agrupada, colocando cada part e da infor m ação em seu devido espaço ( cam po )
definido, m esm o com o im pact o gerado para alt erar as aplicações que usavam est es t ipos
de índices, os ganhos obt idos em organização e per form ance foram m uit o significat ivos.

- 558 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


List a d os cód igos d e e r r o do TOPCon n e ct / D b Acce ss

Quant o ut ilizado o TOPConnect / DbAccess para conexão e operações com Bancos de Dados,
as ocorr ências de err o são r eport adas ao Prot heus inform ando em conj unt o com o er r o um
núm ero m enor que zer o, cor respondendo a um t ipo de err o.

Para a m aioria das ocor rências, r elacionadas ao Banco de Dados, dev e- se olhar o log de er r o
gravado pelo TOPConnect / DbAccess ( arquivo t opconn.log ) para obt er m aiores det alhes
sobr e a ocor rência.

TC_ N O_ ERROR 0 COM M _ I N I TPGM _ ERROR - 81


N O_ ROUTER_ I N STALLED -1 COM M _ PARAM _ ERROR - 86
N O_ CON N ECTI ON -2 COM M _ PROGRAM _ ERROR - 88
N O_ USER_ SECURI TY -4 COM M _ I N SM EM _ ERROR - 90
PASSTH RU_ FAI LED -5 I N VALI D _ BUI LD - 99
N O_ M ORE_ CON N ECTI ON S -6 I N VALI D _ TOPAPI - 100
I N VALI D _ TOP_ KEY -8
I N VALI D _ EN VI RON M EN T -9
I N VALI D _ FI LE - 10
UN KN OW N _ FI LE - 11
EXCLUSI VE_ REQUI RED - 11
I N VALI D _ OPERATI ON - 13
I N VALI D _ KEY_ N UM - 14
FI LE_ I N _ USE - 15
TOO_ M AN Y_ FI LES - 16
I N VALI D _ N UM RECS - 17
CALL_ FAI LED - 18
COM M AN D _ FAI LED - 19
OVERRI D E_ FAI LED - 20
QUERY_ FAI LED - 21
CREATI ON _ FAI LED - 22
OPEN _ FAI LED - 23
N OT_ OPEN ED - 24
N O_ RECORD _ FOUN D - 25
EN D _ OF_ RECORD S - 26
N O_ W RI TE_ POSI BLE - 27
N O_ RECORD _ EQUAL - 28
UPD ATE_ FAI LED - 29
D ELETE_ FAI LED - 30
RECORD _ LOCKED - 31
FI LE_ LOCKED - 32
N O_ AUTORI ZATI ON - 33
TOO_ M AN Y_ USERS - 34
N O_ D B_ CON N ECTI ON - 35
N O_ CON N _ ALLOW ED - 36
I N TEGRI TY_ FAI LURE - 37
BUFFER_ OVERFLOW - 40
I N VALI D _ PARAM ETERS - 41
N O_ AUD I T_ CON N ECTI ON - 50
COM M _ D OSM EM _ ERROR - 58
COM M _ PARTN ER_ ERROR - 67
COM M _ SN D STAT_ ERROR - 76
COM M _ RCVSTAT_ ERROR - 76

- 559 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 0 .2 . Funçõe s AD VPL pa r a TOPCON N ECT / TOTVS D bAcce ss

Nest e t ópico serão descrit as as funções da linguagem ADVPL que per m it em a int eração
com a aplicação TopConnect / DbAccess.

List a d a s f u n çõe s de in t e r a çã o com a a p lica çã o TopCon n e ct / D b Acce ss:

 TCCAN OPEN
 TCCON TYPE
 TCD ELFI LE
 TCGEN QRY
 TCGETD B
 TCLI N K
 TCQUERY
 TCQUI T
 TCSETCON N
 TCSETFI ELD
 TCSPEXEC
 TCSPEXI ST
 TCSQLERROR
 TCSQLEXEC
 TCSRVTYPE
 TCUN LI N K
 TCCH KOBJ
 TCEXEERROR
 TCPGM EXE
 TCSYSEXE
List a d a s f u n çõe s a ce ssór ia s u t iliz a d a s n os fon t e s com o f a cilit a d or a s:

 CH AN GEQUERY
 RETFULLN AM E
 RETSQLCON D
 RETSQLN AM E
 RETSQLTABLE
 SQLCOPY
 SQLORD ER
 SQLTOTRB

- 560 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çõe s de in t e r a çã o com o TopCon n e ct / D bAcce ss

TCCAN OPEN ( )

Verifica a exist ência de t abelas e índices no ser vidor.

 Sin t a x e : TCCa n Op e n ( cTa ble , cI n dice )

 Pa r â m e t r os:

cTa ble Nom e com plet o da t abela no banco de dados.


cI n d ice Opcional, indica o nom e com plet o do índice referent e a t abela especificada.

 Re t or n o:

Lógico I ndica a exist ência da t abela e/ ou do índice especificado.

 Ex e m plo:

//Verifica a existência da tabela customer


IF !TCCanOpen("CUSTOMER")
dbCreate("CUSTOMER", aStru, "TOPCONN")
ENDIF
USE CUSTOMER SHARED NEW VIA "TOPCONN"

//Verifica a existência do índice


IF !TCCanOpen("CUSTOMER","CUSTCOD")
INDEX ON CODIGO TO CUSTCOD
ELSE
SET INDEX TO CUSTCOD
ENDIF

TCCON TYPE( )

Especifica o pr ot ocolo de com unicação a ser ut ilizado pelo TOPConnect .

 Sin t a x e : TCCon Type ( cType )

 Pa r â m e t r os:

cType Tipo de pr ot ocolo de com unicação a ser ut ilizado pelo TopConnect , aonde:

TCPI P: Ut iliza o prot ocolo TCP/ I P.


NPI PE: Ut iliza o prot ocolo Nam ed Pipes.
APPC: Ut iliza o prot ocolo APPC.
BRI DGE: Ut iliza o ut ilit ário TOPBrigde para com unicação de est ações DOS
NPI PE com servidor AS/ 400 ut ilizando TCP/ I P.

- 561 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Re t or n o:

Nenhum .

 Ex e m plo:

#INCLUDE "TOPCONN.CH"
//Especifica conexão TCP/IP
TCConType("TCPIP")

//Conecta-se ao ambiente SIGAADV no Microsoft SQL-Server


TCLink("MSSQL/SIGAADV")

TCD ELFI LE( )

Exclui um a t abela no servidor.

 Sin t a x e : TCD e lFile ( cTa ble )

 Pa r â m e t r os:

cTa ble Nom e com plet o da t abela a ser ex cluída.

 Re t or n o:

Nenhum .

 Ex e m plo:

TCDelFile( " CUSTOMER" )

- 562 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TCGEN QRY( )

Per m it e a ex ecução de um a query de seleção no banco de dados e r et orna um recordset com o


result ado.

 Sin t a x e : TCGEN QRY( x Pa r a m 1 ,x Pa r a m 2 ,cQu e r y )

 Pa r â m e t r os:

x Pa r a m 1 Parâm et r o r eservado.
x Pa r a m 2 Parâm et r o r eservado.
cQu e r y Query de seleção com sint axe no padrão SQL ANSI a ser execut ada no banco
de dados.

 Re t or n o:

Re cor d Se t RecordSet cont endo o r esult ado da execução da quer y de seleção.

Para que os dados cont idos no RecordSet r et or nado pela função TCGenQry( )
sej am ut ilizados pela aplicação ADVPL é necessário disponibilizá- los em um a
WorkAr ea.

Dest a form a a função TCGenQry( ) deverá ser ut ilizada em conj unt o com a
função DbUseAr ea( ) , para que a m esm a disponibilize o RecordSet com o um a
área de t rabalho do ADVPL.

 Ex e m plo:

cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8")


cQuery += " WHERE "
cQuery += "CV8_FILIAL = '"+MV_PAR01+"' AND "
cQuery += "D_E_L_E_T_ = '' "
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)

TCGETD B( )

Ret orna o t ipo de Banco de Dados cor rent e.

 Sin t a x e : TCGETD B( )

 Pa r â m e t r os:

Nenhum .

- 563 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Re t or n o:

Ca r a ct e r Descrição r efer ent e ao t ipo do banco de dados cor rent e, aonde:

ANYWHERE - Sybase SQL Any wher e


ANYSYBASE - Sybase SQL Any wher e ( Em ulando Sybase SQL- Ser ver)
DB2 - I BM Universal Dat abase
I NFORMI X – I nform ix
MSSQL - Microsoft SQL- Ser ver 6.5
MSSQL7 - Microsoft SQL- Serv er 7.0 ou superior
ORACLE - Oracle
POSTGRES - Post Gr es
SYBASE - Sybase SQL- Ser ver

Not a: O r et orno da função pode variar de acordo com a hom ologação de


novos dat abases para ut ilização com a ferr ram ent a TopConnect / DbAccess.

 Ex e m plo:

cDataBase := TCGETDB() // “MSSQL7”

TCLI N K( )

Abre um a conexão com o Servidor TOPConnect .

 Sin t a x e : TCLin k ( cCon e ct St r in g,cSe r v e r )

 Pa r â m e t r os:

cCon e ct St r in g St ring com post a confor m e a r egra:


Para TOPConnect NT : Nom e do Banco de Dados / Nom e do Am bient e

Para TOPConnect / 400: Nom e do Am bient e

cSe r v e r Nom e do ser vidor conform e a r egra:


Para conex ões Nam edPipe, APPC e Brigde : O nom e do servidor
TOPConnect .

Para conex ões TCP/ I P : O ender eço I P do ser vidor TOPConnect

 Obse r v a çõe s:

 Para o TOPConnect NT acessando Oracle, um am bient e é o nom e do Alias criado


com o ut ilit ário SQL- Net .

 Para o TOPConnect NT acessando os dem ais SGDB's um am bient e é um Syst em


DSN criado at rav és do ODBC Dat a Source Adm inist rat or.

 Para o TOPConnect AS/ 400 um am bient e é um a Library criada at rav és do com ando
CRTTOPENV do TOPConnect .

- 564 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Para inform ações sobr e a criação de am bient es consult e o m anual de inst alação do
TOPConnect .

 A list a dos t ipos de bancos de dados supor t ados pela aplicação TopConnect /
DbAccess é a m esm a das possibilidades de ret orno da função TCGETDB conform e
abaixo:

ANYWHERE - Sybase SQL Anywher e


ANYSYBASE - Sybase SQL Anywher e ( Em ulando Sybase SQL- Serv er)
DB2 - I BM Universal Dat abase
I NFORMI X – I nform ix
MSSQL - Microsoft SQL- Ser ver 6.5
MSSQL7 - Microsoft SQL- Ser ver 7.0 ou superior
ORACLE - Oracle
POSTGRES - Post Gr es
SYBASE - Sybase SQL- Serv er

 Re t or n o:

N u m é r ico A função TCLink r et orna ou o núm ero da conexão ou um valor negat ivo
cont endo o código do er ro.

A relações dos códigos de er ros ocor ridos durant e um a t ent at iva de conexão
est á disponível no t ópico 8.1. dest e m at erial.

 Ex e m plo:

//Conecta-se ao Microsoft SQL-Server no ambiente SIGAADV


//Protocolo Named Pipes
TCConType("NPIPE")

nCon := TCLink("MSSQL/SIGAADV","TOPSRV")
if nCon < 0 //Conexões com retorno < 0 significam erro
Alert("Falha de conexão com o TOPConnect")
endif
//Protocolo TCP/IP
TCConType("TCPIP")
//Conecta-se ao Oracle – no ambiente TESTES
nCon := TCLink("ORACLE/TESTES",172.16.1.2)

//Protocolo APPC
//Conecta-se ao AS/400 no ambiente PRODUCAO
nCon := TCLink("PRODUCAO","TOP400")

- 565 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TCQUERY( )

Ex ecut a um a Query no servidor e coloca seu r et orno em um a Wor kAr ea.

Durant e o processo de com pilação, a sint axe TCQUERY( ) é subst it uída pelas
expr essão:

dbUseAr ea( .T.," TOPCONN" ,TcGenQry( ,,cQuery) , “ ALI AS” ,.T.,.F.)

Est a subst it uição é realizada conform e as definições do include TOPCONN.CH.

Dest a form a é r ecom endável a ut ilização diret a da sint axe DbUseArea( ) +


TcGeQr y( ) .

 Sin t a x e : TCQUERY cSQLEx pr ALI AS cAlia s N EW VI A " TOPCON N "

 Pa r â m e t r os:

cSQLEx pr Expressão SQL a ser enviada ao servidor .


ALI AS cAlia s Especifica um nom e par a a Wor k Ar ea a ser abert a.
N EW Abre a t abela < cTable> na próxim a Work Ar ea disponível. Se est a
clausula não for especificada, < cTable> será na Work Ar ea corr ent e.
VI A " TOPCON N " Est e parâm et r o indica ao ADVPL que est a Work Area será ger enciada
pelo TOPconnect .

 Obse r v a çõe s:

 A Work Ar ea criada com o com ando TCQUERY é READ- ONLY, port ant o não é
perm it ido o uso de APPEND's ou REPLACE's.

 O TOPConnect t em apenas um cur sor para a Query execut ada port ando apenas os
seguint es com andos são suport ados em um a Work Area criada com TCQUERY:

o GO TOP - DbGoTop( )
o GO BOTTOM - DbGoBot t om ( )
o SKI P - DbSkip( )
o Eof( )
o Bof( )

 Ao execut ar um a Query que r et orne um ou m ais valor es calculados, o nom e dos


cam pos da WorkAr ea serão COLUMN1, COLUMN2... COLUMNn.

 Re t or n o:

Nenhum .

- 566 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ex e m plo:

//Abre a tabela de Clientes em uma nova WorkArea

cQuery := "SELECT a.codigo, b.nome FROM CLIENTES a, CLIDATA b "


cQuery += "WHERE a.CODIGO = b.CODIGO ORDER BY CODIGO,NOME "

TCQUERY cQuery ALIAS CLIENTES NEW VIA "TOPCONN"


dbGoTop()

While !Eof()
ALERT(CODIGO+"|"+NOME)
dbSkip()
end

cQuery := 'SELECT SUM(VALOR),SUM(SALDO) FROM CUSTOMER'


TCQUERY cQuery NEW VIA "TOPCONN"
ALERT(CValToChar(COLUMN1)+"|"+CValToChar(COLUMN2))
// COLUMN1 - Somatoria dos valores
// COLUMN2 - Somatoria dos saldos

TCQUI T( )

Encer ra t odas as conex ões com o TOPConnect .

 Sin t a x e : TCQu it ( )

 Pa r â m e t r os:

Nenhum .

 Re t or n o:

Nenhum .

TCSETCON N ( )

Seleciona a conexão at iva.

 Sin t a x e : TCSETCON N ( n Con n )

 Pa r â m e t r os:

nConn Núm er o da conexão

 Re t or n o:

Nenhum .

- 567 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ex e m plo:

// Abre conexão com o ambiente de Produção


nCon1 := TCLink("MSSQL/PRODUCAO")
if nCon1 < 0
Alert("Falha conectando ambiente de Produção")
QUIT
endif

// Abre conexão com o ambiente de Testes


nCon2 := TCLink("MSSQL/TESTES")

if nCon2 < 0 then


Alert("falha conectando ambiente de Testes")
QUIT
endif

TCSetConn(nCon1)

//Abre tabela de Clientes no ambiente de produção


USE CUSTOMER ALIAS PROD SHARED NEW VIA "TOPCONN"

TCSetConn(nCon2)

//Abre tabela de Clientes no ambiente de testes


USE CUSTOMER ALIAS TEST SHARED NEW VIA "TOPCONN"
...

TCSETFI ELD ( )

Est a função serv e com o apoio ao com ando TCQUERY, na recuperação de cam pos t ipo
NUMERI C, DATE e LOGI CAL, pois os m esm os são gravados fisicam ent e no Banco de Dados
com o caract eres, e no caso dos num éricos com o float .

 Sin t a x e : TCSe t Fie ld ( cAlia s, cFie ld ,cTyp e , n Ta m , n D e c )

 Pa r â m e t r os:

cAlia s Alias da Wor kAr ea gerada pela ex ecução da quer y.


cFie ld Nom e do cam po a ser t r at ado
cType Tipo desej ado para o cam po
n Ta m Tam anho t ot al desej ado para o cam po
nDec Núm er o de decim ais desej ado para o cam po

 Re t or n o:

Nenhum .

- 568 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ex e m plo 0 1 :

TCQUERY "SELECT NOME, DATA, MARRIED, VALOR FROM CUSTOMER" ALIAS QUERY VIA
"TOPCONN"

TCSetField("QUERY","DATA","D")
TCSetField("QUERY","VALOR","N",12,2)

Dent r o de um program a ADVPL j á podem os considerar com o um cam po dat a


não m ais um cam po car act er com o é o seu arm azenam ent o.

O cam po Dat a só é r et ornado com o um cam po caract er por que est am os


ut ilizando a função TCQUERY, se não o t rat am ent o é aut om át ico.

A est rut ura dos parâm et r os da função TCSETFI ELD( ) é a m esm a ret ornada
pela função DbSt ruct ( ) e que é ut ilizada em diversas funções que m anipulam
arquivos de dados.

Dest a form a é m uit o com um a m ont agem de queries em t abelas do sist em a


part indo da est rut ura de cam pos ret ornada pela função DbSt ruct ( ) sendo que
após a ex ecução dos cam pos Tcquer y( ) ou DbUseAr ea( ) norm alm ent e é
ut ilizado o cam po TcSet Field com base no cont eúdo dest e m esm o array de
est rut ura.

 Ex e m plo 0 2 :

Local cQuery := ""


Local cCampos := ""
Local aStruSA1 := SA1->(DbStruct())
Local nX := 0
Local nMax := Len(aStruSA1)

// Monta a String cCampos de acordo com o conteúdo de aStruSA1

aEval(aStruSA1,{|aCampo| nX++, cCampos += aCampo[1] +;


IIF(nX == nMax,' ',', ')})

// Monta a query utilizando a String cCampos

cQuery := "SELECT "+cCampos+" FROM "+RetSqlName("SA1")

If Select("SA1SQL") <> 0
DbSelectArea("SA1SQL")
DbCloseArea()
Endif

dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"SA1SQL",.T.,.F.)

- 569 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

For nX := 1 to Len(aStruSA1)
IF !( aStrutSA1[nX][2] $ "C/M")
TCSetField( cAlias,aStruSA1[nX][1],aStruSA1[nX][2],;
aStruSA1[nX][3],aStruSA1[nX][4])
ENDIF
Next nX

TCSPEXEC( )

Ex ecut a um a St or ed Procedur e no Banco de Dados.

Devido a um a lim it ação em alguns dos Bancos de Dados suport ados na


obt enção dos t ipos de parâm et ros ( se são de I NPUT e/ ou OUTPUT) t odos as
St or ed Procedures a ser em ex ecut adas at rav és do TOPConnect dev erão
obedecer o seguint e padrão de nom enclat ura de seus parâm et r os :

Parâm et r os de I NPUT dev em com eçar com I N_... Ex . I N_VALOR.


Parâm et r os de OUTPUT dev em com eçar com OUT_... Ex. OUT_CODI GO

Após a ex ecução de um a St ored Procedure o TOPConnect r et ornará ao ADVPL


um array com 'n' elem ent os, onde n é o núm er o de parâm et r os de OUTPUT da
St or ed Procedure.

 Sin t a x e : TCSPEx e c( cSPN a m e ,x Pa r a m 1 ,x Pa r a m 2 ...x Pa r a m N )

 Pa r â m e t r os:

cSPN a m e Nom e com plet o da St or ed Procedu re no banco de dados.


x Pa r a m N Parâm et r os de input da St or ed Procedure.

As pr ocedur es padr ões da aplicação ERP Pr ot heus possuem concat enadas em


seus nom es o código da em pr esa par a a qual foram aplicadas.

Dest a form a ao ex ecut ar um a pr ocedure padr ão do ERP at r av és do com ando


TCSPEXEC é necessário ut ilizar a função xPr ocedur es( ) , pois a m esm a irá
concat enar ao nom e da procedur e que será ex ecut ada o código da em presa.

Por exem plo: Procedure MAT001

 Se for ex ecut ada com a sint axe: TCSPEx ec( “ MAT001” ,...) ocor rerá
um er ro na aplicação pois est a pr ocedur e não exist e.

 Ut ilizando a função xPr ocedur es( ) t em os:

TCSPExec( x Pr ocedur es( “ MAT001” ) , ...) , onde caso a em pr esa em uso


sej a a 01, será ex ecut ada a MAT001_01, a qual é válida.

- 570 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Re t or n o:

Ar r a y Array com os parâm et r os de r et orno da St or ed Procedure e < cSPNam e> é o


nom e da St or ed Procedure a ser ex ecut ada e os dem ais parâm et r os variam
conform e a definição da St or ed Pr ocedure.

 Ex e m plo:

//Verifica se a Stored Procedure Teste existe no Servidor


If TCSPExist("TESTE")

//Executa a Stored Procedure Teste


aRet := TCSPExec("TESTE","JOSE",1000)
if aRet <> nil

cRetorno := ""
For i:= 1 to Len(aRet)
cRetorno += "|"+ IIF(ValType(aRet[i]) == "C", aRet[i],;
IIF(ValType(aRet[i]) == "N", CValToChar(aRet[i]), "U"))
Next

//Mostra os valores de retorno


ALERT(cRetorno)

Else
ALERT("Erro executando Stored Procedure"+CRLF+"Mensagem: "+TCSQLError())
Endif
EndIf

A função TCSPExist ( ) dev e ser ut ilizada apenas para v erificação da ex ist ência
de St or ed Procedures padrões da aplicação ERP, ou que possuam concat e
nadas no nom e a infor m ação da em pr esa para qual est ão habilit adas.

Para v erificação de pr ocedur es sem est a caract eríst ica deve ser ut ilizada a
função Exist Pr oc( ) .

- 571 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TCSPEXI ST( )

Verifica a exist ência de um a det erm inada St ored Pr ocedur e no servidor .

 Sin t a x e : TCSPEx ist ( cSPN a m e )

 Pa r â m e t r os:

CSPN a m e Nom e da procedure a ser verificada no banco de dados.

 Re t or n o:

Lógico I ndica se a St or ed Pr ocedur e exist e ou não e < cSPNam e> é o nom e da


St or ed Procedure pr ocurada.

 Ex e m plo:

If TCSPExist("MAT001_01")
TCSPExec("MAT001_01",...)
Endif

A função TCSPExist ( ) dev e ser ut ilizada apenas para v erificação da ex ist ência
de St or ed Procedures padrões da aplicação ERP, ou que possuam concat e
nadas no nom e a infor m ação da em pr esa para qual est ão habilit adas.

Para v erificação de pr ocedur es sem est a caract eríst ica deve ser ut ilizada a
função Exist Pr oc( ) .

TCSQLERROR( )

Ret orna o últ im o er ro r egist rado pelo TOPConnect durant e a execução de um a Query.

 Sin t a x e : TCSQLEr r or ( )

 Pa r â m e t r os:

Nenhum .

 Re t or n o:

St r in g Mensagem de er ro r egist rada no TopConnect para a ocor r ência.

 Ex e m plo:

If TCSQLExec("UPDATE CUSTOMER SET VALUE=0") < 0 then


ALERT(TCSQLError())
Endif

- 572 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Est a é a m esm a m ensagem que est a r egist rada no log de event os do
TopConnect / TOTVS DbAccess Manager.

TCSQLEXEC( )

Per m it e a execução de com andos de at ualização no servidor de banco de dados.

 Sin t a x e : TCSQLEx e c( cCom m a n d)

 Pa r â m e t r os:

cCom m a nd Com ando SQL a ser ex ecut ado.

 Re t or n o:

N u m é r ico Ret orna um valor negat ivo em caso de er ros.

 Ex e m plo:

nRet : = TCSQLEx ec( " UPDATE CUSTOMER SET VALUE= 0)

TCSRVTYPE( )

Ret orna o t ipo do servidor no qual TOPConnect / TOTVS DbAccess est á em ex ecução.

 Sin t a x e : TCSr vType ( )

 Pa r â m e t r os:

Nenhum .

 Re t or n o:

St r in g Tipo do ser vidor, com o por ex em plo: " WinNT" ou " AS/ 400" .

 Ex e m plo:

TCLink("MSSQL/TESTE","TOPSRV")
ALERT(TCSrvtype())

- 573 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Devido aos t rat am ent os específicos necessários nas queries que serão
ex ecut adas em bancos de dados DB2 com sist em as operacionais AS/ 400 é
norm al a seguint e verificação:

# I FDEF TOP
I f TcSrv Type( ) ! = " AS/ 400"

< Trat am ent o SQL conv encional>

Else

# ENDI F

< Trat am ent o padrão CODBASE>

# I FDEF TOP
Endif
# ENDI F

TCUN LI N K( )

Encer ra um a conexão com o TOPConnect .

 Sin t a x e : TCUn lin k ( n Con n )

 Pa r â m e t r os:

n Con n Núm er o da conexão previam ent e r et ornado pela função TCLink( )

 Re t or n o:

Nenhum .

 Ex e m plo:

TCConType("NPIPE")
nConn := TCLink("MSSQL/TOPCONN","TOPSRV")
TCUnLink(nConn)

- 574 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


TCCH KOBJ( )

Verifica a exist ência de um obj et o no servidor AS/ 400

 Sin t a x e : TCCh k Obj ( cObj ,cLibr a r y ,cType )

 Pa r â m e t r os:

cObj Nom e do obj et o a ser v erificado.


cLibr a r y Nom e da bibliot eca que dev e cont er o obj et o
cType Tipo do de obj et o AS/ 400, com o por ex em plo: * FI LE ou * PGM.

 Re t or n o:

N u m é r ico 0 quando o obj et o exist e ou o núm er o do er ro no AS/ 400.

 Ex e m plo:

nError := TCChkObj("CALCCUST","PRODUCAO","*PGM")

Fu n çã o pa r a u so a p e n a s com o TOPCon n e ct e m se r vidor e s AS/ 4 0 0 .

TCEXEERROR( )

Ret orna um a st ring com a m ensagem de er r o r et ornada pela ex ecução das funções
TCPGMEXE( ) e TCSYSEXE( ) .

 Sin t a x e : TCEx e Er r or ( )

 Pa r â m e t r os:

Nenhum .

 Re t or n o:

St r in g Mensagem de er ro.

 Ex e m plo:

If TCPGMEXE("CALCCUST") != 0
ALERT(TCExeError())
Endif

- 575 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Fu n çã o pa r a u so a p e n a s com o TOPCon n e ct e m se r vidor e s AS/ 4 0 0 .

TCPGM EXE( )

Ex ecut a um program a no servidor AS/ 400.

 Sin t a x e : TCPGM EXE( cPr ogr a m )

 Pa r â m e t r os:

cPr ogram Nom e do pr ogram a a ser execut ado.

 Re t or n o:

N u m é r ico 0 quando o obj et o exist e ou o núm er o do er ro no AS/ 400.

 Ex e m plo:

If TCPGMEXE("CALCCUST") != 0
ALERT(TCExeError())
Endif

Fu n çã o pa r a u so a p e n a s com o TOPCon n e ct e m se r vidor e s AS/ 4 0 0 .

TCSYSEXE( )

Per m it e a ex ecução de um com ando ut ilizando a sint axe e r ecur sos nat ivos do DB2/ 400,
diret am ent e no ser vidor do banco de dados.

 Sin t a x e : TCSy sEx e ( cCom m a n d)

 Pa r â m e t r os:

cCom m a n d Com ando a ser ex ecut ado no servidor de banco de dados ut ilizando sint axe
DB2/ 400.

 Re t or n o:

N u m é r ico 0 quando o obj et o exist e ou o núm er o do er ro no AS/ 400.

- 576 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ex e m plo:

cCommand := "CRTCBLMOD MODULE("+cTDataBase+"/"+cName+"F"+cCrrEmp+") "


cCommand += "SRCFILE("+cTDataBase+"/QSPSRC) "
cCommand += "SRCMBR("+cName+"F"+cCrrEmp+") "
cCommand += "REPLACE(*YES)"

If TCSysExe( cCommand )!= 0


ALERT(TCExeError())
Endif

Fu n çã o pa r a u so a p e n a s com o TOPCon n e ct e m se r vidor e s AS/ 4 0 0 .

Fu n çõe s a ce ssór ia s p a r a u so e m fon t e s com in t e r a çã o com o TOTVS D bAcce ss

CH AN GEQUERY( )

Função que efet ua as adequações necessárias a query par a que a m esm a possa ser execut ada
adequadam ent e no banco de dados em uso pela aplicação ERP at rav és do TopConnect .

Est a função é necessária pois a aplicação ERP Prot heus pode ser ut ilizada com diver sos bancos
de dados, e cada banco possui part icularidades em sua sint axe, de for m a que m esm o um a
query escrit a respeit ando o padrão SQL ANSI pode necessit ar de adequações.

 Sin t a x e : Ch a n ge Qu e r y( cQu e r y)

 Pa r â m e t r os:

cQu e r y St ring cont endo a quer y escrit a em sint axe SQL ANSI .

 Re t or n o:

St r in g
Query adequada em função do banco em uso pela conexão at iva com a
aplicação TopConnect .

 Ex e m plo:

cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8")


cQuery += " WHERE "
cQuery += "CV8_FILIAL = '"+MV_PAR01+"' AND "
cQuery += "D_E_L_E_T_ = '' "
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)

- 577 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A função ChangeQuery( ) dev e obrigat oriam ent e ser ut ilizada pelos font es da
aplicação ERP, pois a m esm a pode ser inst alada em diversos am bient es,
ut ilizando os vários bancos de dados hom ologados, m as para
desenvolvim ent os específicos de client es, o analist a pode opt ar por não
ut ilizar a função ChangeQuery( ) .

A razão dist o é perm it ir ao analist a, que t enha conhecim ent os m ais apurados
do banco de dados em uso pelo client e, ut ilizar um a sint axe focada em ut ilizar
m elhor os recursos do banco, ot im izando a perform ance da aplicação.

RETFULLN AM E( )

Ret orna o nom e r eal da t abela no banco de dados para ut ilização dest a na seleção da query .

A função Ret FullNam e( ) não é ex clusiva para uso em queries, sendo ut ilizada
pela aplicação ERP par a verificar o nom e da t abela para o alias, especificado
no SX2 da em pr esa indicada.

 Sin t a x e : Re t Fu llN a m e ( cAlia s, cEm p)

 Pa r â m e t r os:

cAlia s Nom e da área de t rabalho da aplicação para ident ificação da t abela no banco
de dados.
cEm p Código da em presa a ser avaliada.

 Re t or n o:

St r in g Nom e com plet o / r eal da t abela no banco de dados.

 Ex e m plo:

SA1->(DbSetOrder(1)) // A1_FILIAL+A1_COD+A1_LOJA
cOrder := SqlOrder(IndexKey())

cQuery := "SELECT * FROM "+RETSQLNAME("SA1")+ " WHERE "


cQuery += RetSqlCond("SA1")
cQuery += " ORDER BY "+cOrder

dbUseArea(.T.,"TOPCONN", TcGenQry(,,cQuery), "TRBSQL", .T., .F.)

cRealName := RetFullName("TRBSQL")

- 578 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


RETSQLCON D ( )

Ret orna um a st ring com as condições padr ões de uso em um a query .

 Sin t a x e : Re t SqlCon d ( cAlia s)

 Pa r â m e t r os:

cAlia s Nom e do alias para com posição a st ring de condições.

 Re t or n o:

St r in g
Condições de seleção padrões para o alias indicado.
As condições padr ões são:
ALI AS_FI LI AL = xFilial( ALI AS) .AND.
ALI AS.D_E_L_E_T_ = “ ” .

 Ex e m plo:

cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8")


cQuery += " WHERE "
cQuery += RetSqlCond("CV8")
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)

RETSQLN AM E( )

Ret orna o nom e padrão da t abela para seleção no banco de dados at ravés da query.

 Sin t a x e : Re t SqlN a m e ( cAlia s)

 Pa r â m e t r os:

cAlia s Alias para ser avaliado o nom e padrão da t abela.

 Re t or n o:

St r in g Nom e com plet o da t abela para seleção at rav és da query .

 Ex e m plo:

cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8")


cQuery += " WHERE "
cQuery += RetSqlCond("CV8")
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)

- 579 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


RETSQLTABLE( )

Ret orna o nom e r eal da t abela para seleção no banco de dados at rav és da quer y.

 Sin t a x e : Re t SqlTa b le ( cAlia s)

 Pa r â m e t r os:

cAlia s Alias para ser avaliado o nom e real da t abela.

 Re t or n o:

St r in g Nom e r eal da t abela no banco de dados.

 Ex e m plo:

cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLTABLE("CV8")


cQuery += " WHERE "
cQuery += RetSqlCond("CV8")
cQuery += "ORDER BY CV8_PROC"
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)

SQLCOPY( )

Cria um arquivo no for m at o especificado pela configuração LOCALFI LES do am bient e com o
ret orno da query .

 Sin t a x e : Sq lCopy( cFile , cW h e r e , a St r u , cAlia s, a D a t e s, lRe cn o)

 Pa r â m e t r os:

cFile Nom e do arquivo t em porario dest ino a ser gerado


cW h e r e Condicao " Wher e" da quer y
a St r u Array com os Cam pos a ser em selecionados pela quer y
cAlia s Alias origem dos dados
aDates Array com os nom es dos cam pos que dev erão t er o t rat am ent o da função
TCSet Field( ) para o for m at o de dat a.
lRe cn o Se copia o cont eúdo da coluna R_E_C_N_O_ para o arquivo gerado.

 Re t or n o:

Nenhum .

- 580 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


SQLORD ER( )

Convert e a sint axe de um indíce em form at o I SAM ( CODEBASE) para o for m at o SQL ANSI

 Sin t a x e : Sq lOr d e m ( cOr de r )

 Pa r â m e t r os:

cOr de r Sint axe de índice em for m at o I SAM.

 Re t or n o:

St r in g Í ndice conv ert ido para sint axe SQL ANSI

 Ex e m plo:

SA1->(DbSetOrder(1)) // A1_FILIAL+A1_COD+A1_LOJA
cOrder := SqlOrder(IndexKey())

cQuery := "SELECT * FROM "+RETSQLNAME("SA1")+ " WHERE "


cQuery += RetSqlCond("SA1")
cQuery += " ORDER BY "+cOrder

dbUseArea(.T.,"TOPCONN", TcGenQry(,,cQuery), "TRBSQL", .T., .F.)

cRealName := RetFullName("TRBSQL")

- 581 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


SQLTOTRB( )

Preenche um arquivo t em porário com o cont eúdo do r et orno da query.

 Sin t a x e : Sq lToTr b ( cQu e r y, a St r u, cAlia s)

 Pa r â m e t r os:

cQu e r y Query para seleção dos regist ros no banco de dados.


a St r u Array cont endo a est rut ura do arquivo t em por ário a ser pr eenchido com os
dados de ret orno da quer y.
cAlia s Alias do arquivo t em porário a ser pr eenchido com os dados de r et or no da
query .

Para cor r et a ut ilização da função SQLTOTRB( ) o arquivo t em porário dev e est ar


criado e com a ár ea de t rabalho ( ALI AS) definido.

 Re t or n o:

Nenhum .

 Ex e m plo:

// Arquivo de trabalho que será utilizado pela MaWndBrowse

cCampos:= ""
nX := 0
nMax := Len(aStruSQL)

aEval( aStruSQL,{|aCampo| nX++, cCampos += aCampo[1] +;


IIF(nX == nMax,' ',', ')})

cArqTrb := CriaTrab(aStruSQL,.T.)
dbUseArea(.T.,__LOCALDRIVER,cArqTrb,cAlias,.T.,.F.)
cQuery := "SELECT "+cCampos+" FROM "+RetSqlName("SA1")+" (NOLOCK) "
SqlToTrb(cQuery,aStruSQL,cAlias)

cArqInd := CriaTrab(Nil,.F.)
cChave := "A1_FILIAL+A1_COD+A1_LOJA"
IndRegua(cAlias,cArqInd,cChave,,,"Indexando Registros...")

dbSelectArea( cAlias )
dbGotop()

- 582 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 0 .3 . Aplica çõe s com cont r ole de com uniçã o com o Ba nco de D a dos

Ut ilizando as função de int eração com a aplicação TopConnect / TOTVS DbAccess t êm - se um


grande núm ero de aplicações que podem ser desenv olvidas, com binando- se r ecur sos
previam ent e est udados nos m ódulos Básico, I nt erm ediário e ut ilizando os conceit os de
orient ação à obj et os e as classes de obj et os disponíveis na linguagem ADVPL, t ais com o:

 Rot inas de pr ocessam ent o ut ilizando queries par a seleção dos r egist ros;
 Relat órios para seleção dos regist r os;
 Rot inas de at ualização para ex ecução dos com ando de at ualização diret am ent e
no banco de dados.

Em r esum o, qualquer aplicação do am bient e ERP pode ser escrit a ut ilizando os recursos de
int eração com a aplicação TopConnect / TOTVS DbAccess, para obt er, m anipular e at ualizar os
dados do banco do banco de dados.

Nest e t ópico serão det alhadas duas aplicações ut ilizando est as funções, cuj o grau de
com plexidade ilust ra bem o pot encial dest a fer r am ent a.

 M a W n d Br ow se com Alia s Te m por á r io g e r a do por Qu e r y

 Ba n co de da dos de in t e r f a ce

4 0 .3 .1 . M a W ndBr ow se com Alia s Te m por á r io ge r a do por Que r y


Conform e descrit o no t ópico 6.1. MaWndBr ow se, est a função perm it e a m ont agem de
um browse cuj a est rut ura do arquivo não necessit a est ar definida no dicionário de dados
da aplicação ERP.

Ut ilizando est a part icularidade da MaWndBrowse é possível ent ão com por um alias
t em porário cont endo o r et orno de um a query e exibi- lo em um browse.

A vant agem dest e “ Br owseSQL” em r elação ao br ow se de um a t abela “ norm al” é a


possibilidade de com binar inform ações de várias t abelas at ravés de um a query e exibi-
las em t ela.

Algum as aplicações int eressant es para est e r ecurso seriam :

 Consult a Kardex em t ela, pois est e r elat ório com bina dados das t abelas de
it ens dos docum ent os de ent rada ( SD1) , it ens dos docum ent os de saída
( SD2) e m ovim ent ações int ernas ( SD3) .

 Conciliação de cont abilizações, pois um a cont abilização é com post a por


um a origem , a qual pode ser prat icam ent e de qualquer t abela de
m ovim ent os da aplicação ERP, e de um ou m ais lançam ent os cont ábeis
( CT2) gerados por est a origem .

 Dem onst ração em t ela das depr eciações dos bens do im obilizado por
período, com pondo dinam icam ent e as colunas de depreciação de acordo
com o int ervalo de m eses selecionados. Est e recurso é int eressant e pois
elim ina a lim it ação de espaço da im pressão e pode ser com binado com a
funcionalidade de expor t ação de grids de dados para o Micr osoft Ex cel.

- 583 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo: M a W n dBr ow se com Alia s Te m por á r io ge r a do por Qu e r y

Est e ex em plo de uso da MaWndBrow se com alias de t em porário ut ilizando


queries é derivado do ex em plo de ut ilização da MaWndBr owse com arquivo
t em porário descrit o no it em 6.1. MaWndBrowse.

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Função | WndSQLTRB | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Demonstra a utilização da MaWndBrowse com SQL |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function WndSQLTRB()

// Variáveis para o Arquivo Temporario


Local cChave := ""
Local cArqTrb := ""
Local aStruTRB := {}
Local aStruSQL := SA1->(DbStruct())

// Variáveis para o MaWndBrowse


Local cTitulo := "Cadastro Temporario"// Título obrigatório
Local cAlias := "SA1" // Alias da tabela corrente podendo ser TRB
Local cFunLeg := "" // Função que deverá retornar um valor lógico e com isso
será atribuído semafóro na primeira coluna do browse
Local cTopFun := "" // Mostrar os registros com a chave de
Local cBotFun := "" // Mostrar os registros com a chave ate
Local lCentered := .T. // Valor verdadeiro centraliza
Local aResource := {} // aAdd(aResource,{"IMAGEM","Texto significativo"})
Local nModelo := 1 // 1- Menu do aRotina
Local aPesqui := {} // aAdd(aPesqui{"Título",nOrdem}), se não passado será
utilizado o AxPesqui
Local cSeek := "" // Chave principal para a busca, exemplo: xFilial("???")
Local lDic := .T. // Parâmetro em conjunto com aCampos
Local lSavOrd := .T. // Estabelecer a ordem após pesquisas.

// Variaveis para a MsAdvSize


Local lEnchBar := .F. // Se a janela de diálogo possuirá enchoicebar (.T.)
Local lPadrao := .F. // Se a janela deve respeitar as medidas padrões do
Protheus (.T.) ou usar o máximo disponível (.F.)
Local nMinY := 400 // Altura mínima da janela

Local aSize := MsAdvSize(lEnchBar, lPadrao, nMinY)

Private cCadastro := " "


Private aCampos := {} // Se lDic=.T. utilizará o SX3, do contrário o aCampos
informado -> aAdd(aCampo,{X3_CAMPO,X3_PICTURE,X3_TITULO,X3_TAMANHO})
Private aRotina := {} // Idêntico ao aRotina para mBrowse

- 584 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

aAdd(aRotina,{"Visualizar","U_TcVisual",0,2}) // Desenvolver Enchoice para


campos de arquivo temporário
aAdd(aRotina,{"Incluir" ,"U_TcInclui",0,3}) // Desenvolver Enchoice para
campos de arquivo temporário
aAdd(aRotina,{"Alterar" ,"U_TcAltera",0,4}) // Desenvolver Enchoice para
campos de arquivo temporário

aAdd(aRotina,{"Excluir" ,"U_TcExclui",0,5}) // Desenvolver Enchoice para


campos de arquivo temporário

// Estrutura do Arquivo: Nome do campo / tipo, tamanho, decimais (SX3 para


temporário)
/*
AADD(aStruTRB,{"TRB_FILIAL" ,"C",02,0})
// Nome_Campo , Tipo_Campo, Tamanho, Decimal
AADD(aStruTRB,{"TRB_ID" ,"C",14,0})
AADD(aStruTRB,{"TRB_NOME" ,"C",20,0})
AADD(aStruTRB,{"TRB_IDADE" ,"N",03,0})
AADD(aStruTRB,{"TRB_STATUS" ,"C",01,0})
*/
// aCampos padrão para a MaWndBrowse
//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>})

// aCampos melhorado para a WndBrwTRB


//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>,<Tipo>,<cWhen>,;
//<lObrigatorio>})
// Nota: lObrigatorio deve ser sempre a ultima informacao do aCampos
/*
AADD(aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02,"C",".F.",.T.})
AADD(aCampos,{"TRB_ID" ,"@!" ,"Matricula" ,14,"C",".F.",.T.})
AADD(aCampos,{"TRB_NOME" ,"@!" ,"Nome" ,20,"C",".T.",.F.})
AADD(aCampos,{"TRB_IDADE" ,"@E 999","Idade" ,03,"N",".T.",.F.})
AADD(aCampos,{"TRB_STATUS" ,"@!" ,"Status" ,01,"C",".T.",.T.})
*/

If ( Select( cAlias ) <> 0 )


dbSelectArea ( cAlias )
dbCloseArea ()
Endif

// Arquivo de trabalho que será utilizado pela MaWndBrowse

cCampos:= ""
nX := 0
nMax := Len(aStruSQL)
aEval( aStruSQL,{|aCampo| nX++, cCampos += aCampo[1] +;
IIF(nX == nMax,' ',', ')})

cArqTrb := CriaTrab(aStruSQL,.T.)
dbUseArea(.T.,__LOCALDRIVER,cArqTrb,cAlias,.T.,.F.)
cQuery := "SELECT "+cCampos+" FROM "+RetSqlName("SA1")+" (NOLOCK) "
SqlToTrb(cQuery,aStruSQL,cAlias)

- 585 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

cArqInd := CriaTrab(Nil,.F.)
cChave := "A1_FILIAL+A1_COD+A1_LOJA"

IndRegua(cAlias,cArqInd,cChave,,,"Indexando Registros...")

dbSelectArea( cAlias )
dbGotop()

MaWndBrowse(aSize[7],aSize[2],aSize[6],aSize[5],cTitulo,cAlias,/*aCampos*/,;
aRotina,,cTopFun,cBotFun,lCentered,,nModelo,,cSeek,lDic,lSavOrd)

If ( Select( cAlias ) <> 0 )


dbSelectArea ( cAlias )
dbCloseArea ()
Endif

If File(cArqInd+OrdBagExt())
FErase(cArqInd+OrdBagExt())
ENDIF

DbSelectArea("SA1")
DbSetOrder(1)

Return

/*/
+-----------------------------------------------------------------------
| Função | TcVisual | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcVisual(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk := {||oDlg:End()}
LOCAL bCancel := {||oDlg:End()}
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen


// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
// ,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

Continuação:

- 586 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}


oDlg:lCentered := .T.
oDlg:Activate()

RETURN

/*/
+-----------------------------------------------------------------------
| Função | TcInclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcInclui(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen


// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

Continuação:

- 587 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".T.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

Do Case
Case aCampos[nX][5] == "C"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
Case aCampos[nX][5] == "N"
&("_"+aCampos[nX][1]) := 0
Case aCampos[nX][5] == "D"
&("_"+aCampos[nX][1]) := CTOD("")
Case aCampos[nX][5] == "L"
&("_"+aCampos[nX][1]) := .F.
Case aCampos[nX][5] == "M"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
EndCase

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;


( U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}


oDlg:lCentered := .T.
oDlg:Activate()

RETURN

- 588 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

/*/
+-----------------------------------------------------------------------
| Função | TcAltera | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcAltera(cAlias,nReg,nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen


// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",aCampos[nX][6],aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;


( U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}


oDlg:lCentered := .T.
oDlg:Activate()

RETURN

- 589 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

/*/
+-----------------------------------------------------------------------
| Função | TcExclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcExclui(cAlias, nReg, nOpc)

LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL nX

// Padrao Modelo2(), com lWhen -> cWhen


// AADD(aCposEnch,{"<Variavel>" ,{nLinha,nColuna}
// ,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})
// aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02}

For nX := 1 to Len(aCampos)

If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif

AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})

SetPrvt("_"+aCampos[nX][1])

&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])

Next nX

oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)

TEnchoice(oDlg, aCposEnch,,,,,.T.)

bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;


(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}

oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}


oDlg:lCentered := .T.
oDlg:Activate()

RETURN

Continuação:

- 590 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


/*/
+-----------------------------------------------------------------------
| Função | TcValid | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcValid(cAlias,nReg,nOpc,aCampos)


LOCAL lRet
LOCAL nX
LOCAL nPosObrig := Len(aCampos[1])

For nX := 1 to Len(aCampos)
IF aCampos[nX,nPosObrig] == .T.
IF !(lRet := !Empty(&("_"+aCampos[nX,1])))
Help("TEnchoice",1,"HELP","OBRIGATORIO","Existem campos
obrigatorios nao preenchidos",1,0)
RETURN lRet // EXIT
ENDIF
ENDIF
Next nX

IF nOpc == 3
IF !(lRet := !((cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID))))
Help("TEnchoice",1,"HELP","INCLUSAO","Ja existe um registro com esta
chave",1,0)
ENDIF
ELSE
IF !(lRet := (cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID)))
Help("TEnchoice",1,"HELP","ALTERACAO","Nao existe um registro com
esta chave",1,0)
ENDIF
ENDIF

RETURN lRet

- 591 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

/*/
+-----------------------------------------------------------------------
| Função | TcGravar | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION TcGravar(cAlias,nReg,nOpc,aCampos)


LOCAL nX

RecLock(cAlias,nOpc==3)
IF nOpc == 5
DbDelete()
ELSE
For nX := 1 to Len(aCampos)
(cAlias)->&(aCampos[nX][1]) := &("_"+aCampos[nX][1])
Next nX
ENDIF
Msunlock()

RETURN

- 592 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

/*/
+-----------------------------------------------------------------------
| Função | TEnchoice | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

Static Function TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE,;


lEnchBar)

Local aSays := {}
Local aGets := {}
Local cCaption := ""
Local cPict := ""
Local cValid := ""
Local cF3 := ""
Local cWhen := ""
Local cBlKSay := ""
Local cBlkGet := ""
Local cBlKVld := ""
Local cBlKWhen := ""
Local nLeft := 0
Local nTop := 0
Local nI := 0

Default lEnchBar := .F.


Default nLeftE := IIF(lEnchBar,(oDlg:nLeft)+16,2)
Default nTopE := 2
Default nHeightE := (oDlg:nHeight)-135
Default nWidthE := (oDlg:nWidth)-102
// Padrao Modelo2(), com lWhen -> cWhen
// AADD(aC,{"<Variavel>" ,{nLinha,nColuna}
//,"<Titulo>","<Picture>","<Validacao>","<F3>","<lWhen>",<Tamanho>})

If Len(aCampos) > 0

oScroll := TScrollBox():New(oDlg, nLeftE, nTopE, nHeightE , nWidthE, .T.,;


.T., .T.)

For nI:=1 to Len(aCampos)

If Len(aCampos[nI])==8

cCampo := aCampos[nI,1]
nLeft := aCampos[nI,2,1]-13
nTop := aCampos[nI,2,2]
cCaption:= Iif(Empty(aCampos[nI,3]), " " ,aCampos[nI,3])
cPict := Iif(Empty(aCampos[nI,4]), Nil ,aCampos[nI,4])
cValid := Iif(Empty(aCampos[nI,5]), ".t." ,aCampos[nI,5])
cF3 := Iif(Empty(aCampos[nI,6]), NIL ,aCampos[nI,6])

cWhen := Iif(Empty(aCampos[nI,7]), ".T." ,aCampos[nI,7])

- 593 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

nWidthG := Iif(Empty(aCampos[nI,8]), 100,;


IiF(aCampos[nI,8]*3.5 > 100,100,nil))

cBlKSay := "{|| OemToAnsi('"+cCaption+"')}"


cBlkGet := "{ | u | If( PCount() == 0,;
"+cCampo+","+cCampo+":= u ) }"
cBlKVld := "{|| "+cValid+"}"
cBlKWhen := "{|| "+cWhen+"}"

AADD(aSays,Array(1))
aSays[nI] := TSay():New(nLeft+1, nTop, &(cBlkSay), oScroll,,,;
.F., .F., .F., .T.,,, 50, 8, .F., .F., .F., .F.,;
.F. )
AADD(aGets,Array(1))

aGets[nI] := TGet():New( nLeft, nTop+50, &(cBlKGet), oScroll,;


nWidthG, 11, cPict, &(cBlkVld),,,, .F.,, .T.,,;
.F., &(cBlkWhen), .F., .F.,, .F., .F. , cF3,;
(cCampo))

EndIf
Next
Endif

Return

- 594 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 0 .3 .2 . Ba nco de da dos de int e r fa ce

O t erm o “ Banco de dados de int erface” é ut ilizado para classificar um a aplicação ADVPL escrit a
com funções de int eração com a aplicação TopConnect / TOTVS DbAccess para r ealizar a
int egração ent r e a aplicação ERP Prot heus e out ro sist em a, ut ilizando com o m eio de
com unicação um banco de dados e não m ais im port ação de arquivos em “ N” form at os, t ais
com o .TXT, .DBF e sim ilares.

Est e t ipo de int egração não visa subst it uir form at os de int egrações padrões j á
exist ent es com o o padr ão CNAB e o padrão Web XML.
Sua aplicação é int egr ação diret a ent re sist em as at rav és de um banco de
dados com form at o e padrões com uns ent r e elas.

As vant agens da ut ilização do conceit o de Banco de Dados de I nt erface em com paração da


int egração por im port ação / export ação de arquivos são:

 Maior cont role da int egração das inform ações ent re os sist em as, perm it indo um
t rat am ent o adequado de ev ent os de err os;

 Transparência e rast r eabilidade das inform ações int egradas, im plem ent ando
confiabilidade no pr ocesso;

 Possibilidade de ut ilização de um t ipo de banco de dados pela aplicação ERP


Prot heus e de out ro t ipo de banco de dados par a int egração ent r e os sist em as.

 Possibilidade de desenv olvim ent o de ferram ent as para m onit orar e gerenciar a
int egração ent r e os sist em as at rav és do cont r ole da área de int erface no banco
de dados, inclusive com a ut ilização de St or ed Pr ocedur es par a aum ent ar a
perform ance da aplicação de int erface.

Con side r a çõe s r e le va n t e s sobr e a s fu n çõe s TCLin k ( ) e TCSe t Con n ( )

 A função TCLink( ) perm it e a abert ura de um a conexão com um banco de dados,


desde que haj a o OBDC configurado no am bient e da aplicação e na aplicação
TOPConnect / TOTVS DBAccess;

 Cada abert ura de conexão at rav és da função TcLink( ) consom e um a licensa de


usuário do TOPConnect / TOTVS DBAccess. Após a abert ura de um a conexão a
m esm a dev e ser selecionada pela função TcSet Conn( ) para se t ornar a conexão
at iva;

 Podem ser ut ilizadas diversas conex ões em um a m esm a aplicação ADVPL, e


podem ser ut ilizadas as inform ações das t abelas j á abert as e vinculadas a um a
área de t rabalho independent e da conexão que est á at iva. Som ent e dev e ser
verificado que para abert ura de um a t abela e vínculo dest a com um a área de
t rabalho obrigat oriam ent e deve est ar at iva a conexão com o banco de dados que
cont ém est a t abela.

 A conexão abert a ent r e o ERP Prot heus e o TopConnect / DbAccess possuí o


núm ero de referência 0. Dest a form a, após finalizar um a conexão abert a com o
com ando TCLink( ) deve ser efet uado um TCSet Conn( 0) para rest aurar com o
conexão at iva a conexão padrão do Prot heus com o TopConnec.

- 595 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


A figura abaixo ilust ra a est rut ura t ípica de um a aplicação ut ilizando o conceit o de Banco de
Dados de I nt er face, com foco na aplicação ERP Pr ot heus e seus r ecursos pré- disponíveis:

Ta r e f a D e scr içã o D e t a lh a m e n t o
Ut ilização de queries ou st or ed
procedur es para at ualização das
01 Ex por t a çã o Pr ot h e u s - > D b I n t e r f a ce t abelas do banco DBI nt erface no
for m at o necessário ao ERP X,
ex ecut adas a part ir do ERP Pr ot heus.
Fer ram ent as propriet ár ias do ERP X
para leit ura do DBI nt erface e
02 I m por t a çã o D b I n t e r f a ce - > ERP X t rat am ent o das infor m ações para
at ualização do banco de dados dest a
aplicação.
Pode ser um a fer ram ent a propriet ária
da aplicação ERP X, ou pode ser um
conj unt o de queries e st or ed
procedur es desenv olvidas em
03 Ex t r a çã o ERP X - > D b I n t e r fa ce
conj unt o com a equipe do ERP X e a
equipe TOTVS, perm it indo o cont r ole
de ex ecução da ext ração pelo ERP
Prot heus.
Ut ilização de queries ou st or ed
procedur es para leit ura das
inform ações do DBI nt erface e
04 I m por t a çã o D b I n t e r f a ce - > Pr ot h e u s
at ualização de t abelas int erm ediárias
no banco de dados do ERP Pr ot heus,
ex ecut adas a part ir do ERP Pr ot heus.
Ut ilização de funções próprias para
est a finalidade no ERP Prot heus para
efet ivação das inform ações
05 Efe t iv a çã o Pr ot h e u s - > Pr ot h e u s im port adas em infor m ações válidas no
ERP. Est as funções nor m alm ent e são
com pat íveis com a ex ecução at rav és
do r ecurso de MsExecAut o( ) .

Con side r a çõe s com ple m e n t a r e s sobr e o con ce it o d e Ba n co de D a dos d e I n t e r f a ce

- 596 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 A ut ilização de t abelas int erm ediárias no banco de dados Pr ot heus apesar de não
ser obrigat ória é recom endada para per m it ir um t rat am ent o adequado das
ocor rências de efet ivação das inform ações, pr incipalm ent e quando ut ilizada a
função MsExecAut o( ) para ex ecut ação das r ot inas de efet ivação dos dados;

 Para ext ração das inform ações t ant o do banco de dados Prot heus para
export ação, quant o do banco de dados do sist em a ERP X é r ecom endável o uso
de St or ed Procedures para aum ent ar a perform ance do processo com o um t odo.
É im port ant e lem brar que se o sist em a ERP X possuir pr ocedur es de export ação
as m esm as poderão ser ex ecut adas diret am ent e pelo Pr ot heus at ravés da função
TCSpEx ec( ) ;

 É recom endáv el que as funcionalidades de Ex port ação, Ext ração, I m port ação e
Efet ivação sej am t rat adas t ant o com int erfaces de ex ecução diret a quant o
at ravés de ex ecução via Job.

- 597 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 0 .4 . Em be dde d SQL – Fa cilit a dor de Que r y’s

O obj et ivo do Em bedded SQL é facilit ar a escrit a e leit ura de query 's. Foi definida um a sint axe
para que se possa escr ev er a query diret am ent e no código ADVPL, sem a necessidade de ficar
concat enando pedaços de st ring para com por a st ring final.

D isp on ibilid a d e d o Re cu r so

Est e recur so est á disponível apenas no Prot heus 8. A ut ilização do Em bedded SQL divide- se
em : com pilação do font e, e ex ecução do font e. Para ser possível com pilar um font e com o
código escrit o no form at o Em bedded, deve ser ut ilizado um Prot heus, com Build igual ou
superior a 7.00.050721p, em um am bient e com r eposit ório para TopConnect ( RPODB= TOP ) .

A ut iliação dest e r ecurso t am bém depende da at ualização da LI B 811, superior a 'Lib


20050902 - 811'.

 Ex e m plo b á sico - Fon t e a t u a l

cQuery : 'SELECT SE2.E2_PREFIXO,SE2.E2_NUM '


cQuery += 'FROM '+RetSqlTable('SE2')+' SE2,'+RetSqlTable('QEK')+' QEK '
cQuery += 'WHERE SE2.E2_FILIAL= '+xfilial('SE2')+' AND '
cQuery += 'SE2.E2_PREFIXO<> ''+cPrefixo+'' AND '
cQuery += 'SE2.D_E_L_E_T_ = ' ' '
cQuery += 'ORDER BY '+RetSqlOrder('SE2')
dbUseArea(.T.,'TOPCONN',TcGenQry(,,cQuery),'E2TEMP',.T.,.T.)
TCSetField('E2TEMP','E2_EMISSAO','D',8,0)

 Ex e m plo b á sico - Ut iliz a n do Em be dde d SQL

BeginSql alias 'E2TEMP'


column E2_EMISSAO as Date
%noparser%
SELECT SE2.E2_PREFIXO,SE2.E2_NUM
FROM %table:SE2% SE2,%table:QEK% QEK
WHERE SE2.E2_FILIAL= %xfilial:SE2% AND
SE2.E2_PREFIXO<> %exp:cPrefixo% AND
SE2.%notDel%
ORDER BY %Order:SE2%
EndSql

- 598 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ca r a ct e r íst ica s op e r a cion a is - Sin t a x e

O bloco onde será escrit o o Select deve sem pr e ser iniciado com ' Be g in Sq l a lia s' e finalizado
com 'En dSq l'.

Part es do código que devem ser subst it uídas aparecem ent r e os sinais de % . Est as expressões
possuem t r at am ent o especial em m om ent o de ex ecução.

Qualquer inst rução colocada ent r e BEGI NSQL... ENDSQL, que não sej a um a expr essão % ...% ,
será inserida na quer y a ser enviada para o banco, de form a lit eral.

Variáveis, expressões, funções apar ecem iniciando com % e x p : % .

Em colu m n , especificar cam pos da query que são do t ipo dat a, lógico ou num érico ( DATE,
LOGI C, NUMBER) . Est a linha é t r ocada por cham adas à função TCSe t Fie ld.

% n op a r se r % indica que a query não dev e passar pela função 'Ch a n ge Qu e r y ' ant es de ser
enviada ao banco de dados. Caso não especificado, o default é a st ring da query ser passada
aut om at icam ent e pela função ChangeQuery.

% t a ble :< a lia s> % é subst it uída por Re t SqlN a m e ( < a lia s> )

% n ot D e l% é subst it uída por D _ E_ L_ E_ T_ = ' '

% Or de r :< a lia s> % é subst it uída por SqlOr d e r ( < a lia s> - > ( I n de x Ke y( ) ) )

Há 3 opções par a o % Order:


1. % Or de r : < cAlia s> % t raduzido para
SqlOrder( < cAlias> - > ( I ndexKey( ) ) )
2. % Or de r : < cAlia s> , < n I n d ice > % t raduzido para
SqlOrder( < cAlias> - > ( I ndexKey( < nI ndice> ) ) )
3. % Or de r : < cAlia s> , < cN ick > % t raduzido para
SqlOrder( < alias> - > ( DBNickI ndexKey( < cNick> ) ) )

Lim it a çã o:

Não é perm it ido incluir funções no m eio do código 'em bedded'. Se pr ecisar, o valor dev e ser
guardado em um a variável ant es do início do BeginSql.

tam_cp := GetE2ValorSize()

BeginSql alias 'E2TEMP'


column E2_EMISSAO as Date, E2_VALOR as Numeric(tam_cp,2)
. . .
EndSql

- 599 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Er r os d e Com pila çã o

Caso sej a ut ilizado algum argum ent o inválido para especificar as colunas, ou err os de sint axe
nas expressões a ser em t ransform adas para a m ont agem da query, a com pilação do font e é
int err om pida com a ocor rência 'Synt ax Err or ', inform ando a linha onde a prim eira ocor rência
foi encont rada.

ENDSQL (Error C2001 Syntax error:)

Caso a ocorr ência de com pilação apont e diret am ent e para a linha do código- font e, onde est á
escrit a a inst rução EndSql, verifique se exist e algum espaço em branco ou t abulação, a part ir
do início da linha, ant es da inst rução EndSql. A ver são at ual desde am bient e não suport a est a
declaração, exigindo que a inst rução EndSql sej a alinhada à esquerda do font e, sem espaços
ou t abulações.

Er r os d e Ex e cu çã o

 'Qu e r y Ar gu m e n t Er r or : Alia s [ X X X] a lr e a dy in u se .'

Caso a inst rução BeginSQL especifique um alias que j á est ej a abert o ( em uso) , a aplicação
é abort ada com a ocor r ência de er ro fat al acim a, inform ando em XXX o alias ut ilizado.

 'Qu e r y Ar gu m e n t Er r or : I n v a lid V a lu e Typ e [ X] '

Caso algum a expr essão inform ada na Quer y, at rav és da t ag % exp: ... % , r et orne um valor de
t ipo difer ent e de 'C' Cat act er, 'D' Dat a, 'N' Num érico, ou 'L' Lógico, a aplicação é abort ada com
a ocorr ência de er ro acim a, onde o t ipo do argum ent o inesperado é m ost rado em [ X] .

 'Type M ism a ch on + '

Est a ocorr ência, se repr oduzida, inform ará na pilha de cham adas o núm er o da linha do código-
font e cor r espondent e à inst rução EndSQL. Ocor re caso algum a função int erm ediária do engine
do Em bedded SQL, excluindo- se as funções especificadas na quer y com a sint axe % exp: ... %
, r et ornar um cont eúdo não- caract er e a ser acr escent ado na Query . Est a ocor rência é de m ais
difícil localização, sendo út il nest es casos a análise do arquivo t em por ár io gerado pelo Pr ot heus
I DE, no m om ent o da com pilação.

 H e lp N OFUN CW - Fu n çã o _ _ EXECSQL

Caso um font e com o Em bedded SQL sej a ex ecut ado em um r eposit ório que não t enha sido
at ualizado, OU que não sej a um Reposit ório para o am bient e TOPConnect ( RPODB= TOP) , a
aplicação exibirá a ocorr ência acim a, indicando que a função int erna de ex ecução da Quer y
não est á pr esent e no am bient e. Verifique se a lib est á at ualizada, e se o RPO em uso é de um
am bient e TOPConnect .

- 600 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ca r a ct e r íst ica s op e r a cion a is - de pu r a çã o

Dada a m ont agem da Query, não é possível depurar o bloco do código- font e com pr eendido
ent re as inst ruções BeginSql e EndSql, não sendo considerados pont os de parada de depuração
( BreakPoint s ) , caso colocados nest e int ervalo do código. A colocação de pont os de parada
dev e ser r ealizada ant es ou depois dest e bloco.

Fu n çã o a u x ilia r - GETLa st Qu e r y ( )

Após a abert ura do cur sor, no alias especificado, a função Get Last Quer y( ) r et orna um ar ray ,
com 5 elem ent os, onde est ão disponíveis as seguint es inform ações sobr e a Query ex ecut ada :

[ 1] cAlias - Alias usado para abrir o Cursor.


[ 2] cQuery - Quer y execut ada.
[ 3] aCam pos - Ar ray de cam pos com crit ério de conv ersão especificados.
[ 4] lNoParser - Caso .T., não foi ut ilizada ChangeQuer y( ) na St ring original.
[ 5] nTim eSpend - Tem po, em segundos, ut ilizado para a abert ura do Cursor.

 Ex e m plo m a is com ple t o: Código AD VPL

BeginSql alias 'E2TEMP'


column E2_EMISSAO as Date, E2_VALOR as Numeric(tam_cp,2)
column QEK_SKLDOC As Logical

%noparser%

SELECT SE2.E2_PREFIXO,SE2.E2_NUM, SE2.E2_FORNECE, SE2.E2_LOJA,SE2.E2_VALOR,


SE2.D_E_L_E_T_ DEL1, QEK.D_E_L_E_T_ DEL2 , QEK.QEK_SKLDOC, SE2.R_E_C_N_O_
SE2RECNO
FROM %table:SE2% SE2,%table:qeK% QEK
WHERE SE2.E2_FILIAL= %xfilial:SE2% AND
qek.%notDel% and
SE2.E2_PREFIXO<> %exp:cPrefixo% AND
SE2.E2_NUM<> %exp:(cAlias)->M0_CODIGO% AND
SE2.E2_NUM<>45 AND
SE2.E2_FORNECE=%exp:Space(Len(SE2->E2_FORNECE))% AND
SE2.E2_EMISSAO<>%exp:MV_PAR06% AND
SE2.E2_LOJA<>%exp:MV_PAR05% AND
SE2.E2_VALOR<>%exp:MV_PAR04% AND
qek.QEK_SKLDOC<>%exp:MV_PAR03% And
SE2.%notDel%
ORDER BY %Order:SE2,1%
EndSql

- 601 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Ex e m plo m a is com ple t o: Fon t e ge r a do pe lo pr é - com p ila dor ( PPO)

__execSql(
'E2TEMP',
' SELECT SE2.E2_PREFIXO,SE2.E2_NUM, SE2.E2_FORNECE, SE2.E2_LOJA,SE2.E2_VALOR,
SE2.D_E_L_E_T_ DEL1, QEK.D_E_L_E_T_ DEL2 , QEK.QEK_SKLDOC, SE2.R_E_C_N_O_
SE2RECNO FROM '+RetSqlName('SE2')+' SE2, '+RetSqlName('QEK')+' QEK WHERE
SE2.E2_FILIAL= '' +xFilial('SE2')+'' AND qek.D_E_L_E_T_= ' ' AND
SE2.E2_PREFIXO<> '+___SQLGetValue(CPREFIXO)+' AND SE2.E2_NUM <> '+
___SQLGetValue((CALIAS)->M0_CODIGO)+' AND SE2.E2_NUM<>45 AND SE2.E2_FORNECE= '+
___SQLGetValue(SPACE(LEN(SE2->E2_FORNECE)))+' AND SE2.E2_EMISSAO<> '+
___SQLGetValue(MV_PAR06)+' AND SE2.E2_LOJA<> '+___SQLGetValue(MV_PAR05) +' AND
SE2.E2_VALOR<> '+___SQLGetValue(MV_PAR04)+' AND qek.QEK_SKLDOC<> '+
___SQLGetValue(MV_PAR03)+' And SE2.D_E_L_E_T_= ' ' ORDER BY '+
SqlOrder(SE2->(IndexKey(1))), {{'E2_EMISSAO','D',8,0}, {'E2_VALOR','N',tam_cp,2},
{'QEK_SKLDOC','L',1,0}},.T.)
)

- 602 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


41. Funciona lida de M sEx e cAut o

Sobr e a M sEx e cAu t o e Rot in a s Au t om á t ica s

A funcionalidade MsEx ecAut o, ou t am bém conhecida com o Rot ina Aut om át ica, perm it e a
ex ecução de r ot inas do am bient e ERP Pr ot heus por funções específicas, o que confere ao
desenvolvedor a possibilidade de efet uar t r at am ent os específicos ant es da ex ecução da r ot ina
padrão, e m ais im port ant e, não perder nenhum a funcionalidade que a r ot ina padrão ofer ece.

Avaliando est a funcionalidade apenas pelo parágrafo acim a, t em - se a im pressão de ser um


recurso sim ples e at é m esm o desnecessário, pois um desenvolvedor experient e poderia
reproduzir t odas as validações e t rat am ent os exist ent es em sua r ot ina, ent ão porque t er de
t rat ar a r ot ina padrão?

Para responder a est a pergunt a devem os fazer as seguint es consider ações:

 A a plica çã o ERP e st á e m con st a nt e e v olu çã o:

No m om ent o de desenvolvim ent o da rot ina específica era necessário apenas o


t rat am ent o de um conj unt o isolado de inform ações, m as com o aprim oram ent o do
ERP com o um t odo, agora são necessários out ros conj unt os de dados, os quais não
foram t rat ados pelo desenvolvedor naquele m om ent o, m as que est ão cont em plados
na rot ina padrão do sist em a.

Com o o desenvolvedor opt ou por r ealizar t odo o t rat am ent o de form a específica, em
um a at ualização do ERP est e desenv olvim ent o pr ecisará ser r evist o ou at é m esm o
refeit o, o que im placará em cust o para o client e ou par a o desenv olvedor.

Se o desenv olvedor t ivesse opt ado por ut ilizar a rot ina padrão encapsulada em seu
desenvolvim ent o ele não t eria problem as em adapt ar sua rot ina as novas
necessidades do sist em a, pois a r ot ina padrão j á se preocupada com a
com pat ibilidade ent re as versões, possibilit ando que um a sim ples m anut enção
at ualize t oda a r ot ina específica, ist o se est a m anut enção for necessária, pois a
rot ina padrão poder t rat ar a novas infor m ações com “ cont eúdos padrões”
dependendo da sit uação em que est as não forem inform adas.

 A a plica çã o ERP p ode se r pe r son a lid a d a a t r a v é s d e pon t os d e e n t r a da e


do d icion á r io d e d a d os:

A part ir do m om ent o que um a aplicação padrão é desenvolvida e disponibilizada a


m esm a pode sofr er diversas per sonalizações em cam po, as quais podem ser
im plem ent adas em paralelo ou após o desenvolvim ent o da rot ina específica
disponibilizada pelo desenvolvedor .

Se est a sit uação não for previst a, a inclusão de inform ações ut ilizando a rot ina
padrão do sist em a poderá sofr er diversas v alidações ou at é m esm o efet uar a
gravação de inform ações adicionais, as quais não est ão visíveis na r ot ina específica,
gerando graves inconist ências na base de dados.

Avaliando est as considerações per cebesse o fat or de sucesso que um desenv olvim ent o
específico pode t er ao opt ar por refazer t odos os t rat am ent os do sist em a em det rim ent o de
ut ilizar a funcionalidade MsEx ecAut o, ou sej a, qualquer m odificação no am bient e,
independent e do quão sim ples pode t ornar a r ot ina específica inadequada.

- 603 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Qu a n do u t iliz a r a fun cion a lid a de M sEx e cAu t o ?

Tendo em vist a est e cenário fica a pergunt a: “ Quando ut ilizar a funcionalidade MsEx ecAut o ?”

A respost a pode ser óbvia e at é conser vadora, m as é “ Sem pre que a funcionalidade est iver
disponível naquele processo” .

Em r esum o, qualquer funcionalidade de int erface, sej a ela de carga ou cont ínua, qualquer
funcionalidade de at ualização, ou sej a, qualquer m anut enção na base de dados do sist em a,
sem pre que possível, deve ut ilizar a funcionalidade MsExecAut o.

Pr oce ssos d a a p lica çã o ERP com t r a t a m e n t os p a r a e x e cu çã o por M sEx e cAu t o

Pode- se dizer que as pr incipais rot inas de at ualização do ERP Pr ot heus at ualm ent e possuem o
t rat am ent o necessário para sua ex ecução por MsEx ecAut o, e com base nas necessidades de
desenvolvim ent o int ernas da TOTVS e nas m elhorias solicit adas por client es e analist as de
im plant ação as dem ais rot inas necessárias são at ualizadas para cont em plar est e t rat am ent o.

O quadr o abaixo ilust ra um dos últ im os cenários de t rat am ent o de MsEx ecAut o pelas rot inas
da aplicação ERP Prot heus.

Rot in a Pa r â m e t r os
ATFA0 1 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
ATFA0 3 0 ( xAut oCab, nOpc)
ATFA0 3 5 ( xAut oCab, nOpc)
CFGX0 1 6 ( xAut oCab, xAut oI t ens)
CTBA0 1 5 ( nOpcAut o, aAut o)
CTBA0 1 6 ( nOpcAut o, aAut o)
CTBA0 2 0 ( aRot Aut o, nOpcAut o, aRot I t em )
CTBA1 0 2 ( xAut oCab, xAut oI t ens, nOpcAut o)
CTBA2 7 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
FATA1 4 0 ( nOpcAut o, aAut o)
FATA2 2 0 ( nOpcAut o, aAut oCab)
FATA3 0 0 ( nOpcAut o, xAut oCab, x Aut oAD2, xAut oAD3, xAut oAD4, xAut oAD9)
FATA3 1 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
FATA3 2 0 ( xAut oVend, xAut oTask, xAut oCalend)
FI N A0 1 0 ( aRot Aut o, nOpcAut o)
FI N A0 4 0 ( aRot Aut o, nOpcAut o)
FI N A0 5 0 ( aRot Aut o, nOpcion, nOpcAut o)
FI N A0 7 0 ( xAut oCab, nOpc)
FI N A0 8 0 ( xAut oCab, nOpc)
FI N A3 9 0 ( nPosAr ot ina, xAut oCab, nOpcAut o)
M ATA0 4 0 ( aAut o, nOpcAut o)
M ATA0 8 0 ( aRot aut o, nOpcAut o)
M ATA1 0 3 ( xAut oCab, xAut oI t ens, nOpcAut o, lWhenGet , x Aut oI m p)
M ATA1 0 5 ( xReser vCab, xReserv I t ens, nOpcAut o)
M ATA1 1 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA1 1 6 A ( xAut oCab, xAut oI t ens, lI nclui)
M ATA1 2 0 ( nFuncao, xAut oCab, xAut oI t ens, nOpcAut o, )
M ATA1 2 5 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA1 4 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA1 4 5 ( xAut oCab, xAut oI t , xAut oI t 2, nOpcAut o)
M ATA1 5 0 ( xAut oCab, xAut oI t ens, nOpcAut o)

- 604 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Rot in a Pa r â m e t r os
M ATA1 7 5 ( xRot Aut o, xOpcAut o)
M ATA1 8 5 ( xAut oSCP, xAut oSD3, nOpcAut o, xPerg)
M ATA2 0 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA2 3 0 ( aAut o, nOpcAut o)
M ATA2 4 1 ( xAut oCab, xAut oI t ens, nCallOpcx)
M ATA2 4 2 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA2 6 1 ( aAut oI t ens, nOpcAut o)
M ATA2 6 5 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA2 6 6 ( aAut oI t ens)
M ATA2 6 7 ( aAut oI t ens)
M ATA3 6 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA4 1 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA4 1 5 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA4 1 6 ( xAut oCab, xAut oI t ens)
M ATA4 9 0 ( xAut o, nOpcAut o)
M ATA6 8 5 ( xAut oCab, xAut oI t ens, nOpcAut o)
M ATA7 0 0 ( xAut o, nOpcAut o)
M ATA9 2 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
TM KA0 6 1 ( xAut oCab, xAut oI t ens, nOpcAut o)
TM KA0 6 2 ( xAut oCab, xAut oI t ens, nOpcAut o)
TM KA2 7 1 ( xAut oCab, xAut oI t ens, nOpcAut o)
TM SA0 4 0 ( xAut oCab, xAut oI t ens, nOpcAut o)
TM SA0 5 0 ( xAut oCab, xAut oI t ens, xI t ensPesM3, x I t ensEnder , nOpcAut o)
TM SA1 7 0 ( xAut oCab, nOpcAut o)
TM SA3 6 0 ( xAut oCab, xAut oI t ens, xAut oNFAva, nOpcAut o)
TM SA4 3 0 ( cAlias, xAut oCab, xAut oVei, xAut oMot , nOpcAut o)
TM SA4 4 0 ( xAut oCab, xAut oI t ens, nOpcAut o)

Qu a n do n ã o u t iliz a r a fu n cion a lid a d e M sEx e cAu t o

Apesar de t odas as or ient ações dos t ópicos ant erior es exist em sit uações nas quais não é
recom endado ut ilizar a funcionalidade MsEx ecAut o, no caso, em sit uações para as quais
exist em r ot inas padrões da aplicação ERP par a processam ent os de int egrações e at ualizações
que possuem t rat am ent o para execução diret a ou execução via Job.

Para est es casos a r ot ina j á est á pré- dispost a a execução diret a, não havendo a necessidade
de t rat am ent o via MsEx ecAut o, ou o t rat am ent o r ealizado pela rot ina é o m ais adequado par a
aquele volum e de dados.

O ex em plo clássico dest a sit uação é para im port ação de lançam ent os ou saldos cont ábeis. A
aplicação ERP possui um a rot ina de int egração denom inada “ Cont abilização TXT” ( CTBA500)
m as a rot ina de lançam ent os cont ábeis ( CTBA102) pode ser execut ada at rav és da
MsExecAut o.

Para im port ações de saldos e lançam ent os dev e- se opt ar pela ut ilização da r ot ina de
“ Cont abilização TXT” , devido aos t rat am ent os que a m esm a perm it e at ravés das configurações
da própria rot ina em conj unt o com as param et rizações do m ódulo. O uso da CTBA102 –
Laçam ent os Cont ábeis via MsExecAut o é r ecom endado para r ot inas de m anut enção ou
funcionalidades específicas / m elhorias, com por exem plo o est orno de lançam ent os cont ábeis
sem a necessidade de avaliar regras de cont abilização.

- 605 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


4 1 .1 . D e se nvolve ndo a plica çõe s com M sEx e cAut o

Est r u t u r a d e u m a r ot in a com e x e cuçã o de M sEx e cAu t o

 Definição das variáveis de cont r ole da MsEx ecAut o


 Mont agem dos ar ray s de par âm et ros
 Definição dos parâm et r os específicos da r ot ina que será execut ada
 Cont role de t ransação
 Trat am ent o do sucesso ou não da operação

Va r iá ve is de con t r ole

 Pr iv a t e lM sEr r oAu t o
I ndica de se houv e er ro não fat al durant e a execução.

 Pr iv a t e lM sH e lp Au t o
Habilit a a capt ura das m ensagens de er ro.

 Pr iv a t e lAu t oEr r N oFile


Desabilit a a geração do arquivo de log padrão do sist em a.

M on t a g e m dos a r r a y s de p a r â m e t r os

 Tipos de a r r a y s d e pa r â m e t r os:

Basicam ent e um a MsExecAut o possui dois t ipos de arrays de parâm et r os: Array de
Dados de Cabeçalho e Array de Dados de I t ens.

Os ex em plos a seguir visam ilust rar a ut ilização de cada um a dos t ipos de ar ray s:

 Cadast r o de client es ( MATA030) : Est a rot ina at ualiza apenas os dados da t abela
SA1 – Cadast r o de Client es, port ant o será necessário apenas um ar ray de dados
cont endo as inform ações que dev erão ser gravadas na t abela SA1.

 Docum ent os de ent rada ( MATA103) : Est a r ot ina at ualiza basicam ent e os dados
das t abelas SF1 – Cabeçalho do Docum ent o de Ent rada e SD1 – I t ens do
Docum ent o de ent rada, port ant o ser ão necessários dois arrays de dados
cont endo as inform ações do cabeçalho do docum ent o de ent rada e dos it ens do
docum ent o de ent rada, sendo que est e últ im o t erá sua est rut ura de cont eúdo
repet ida para cada it em do docum ent o.

 Aviso de Recebim ent o de Carga ( MATA145) : Est a rot ina at ualiza basicam ent e os
dados das t abelas DB1 – Aviso de Recebim ent o de Carga, DB2 – Cabeçalho do
docum ent o recebido e DB3 – I t ens do docum ent o recebido, port ant o são
necessários t rês arr ay de dados cont endo as respect ivas inform ações para as
t abelas DB1, DB2 e DB3, sendo que as duas últ im as t erão suas est r ut uras de
cont eúdo r epet idas para cada docum ent o r ecebido.

- 606 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Est r u t u r a d os a r r a ys de p a r â m e t r os:

 Ar r a y d e d a dos do ca be ça lh o ( x Au t oCa b ) :

O ar ray cont endo os dados do cabeçalho é com post o por: Cam po, Cont eúdo e
Validação.

Cada it em dest e ar ray é um dos cam pos da t abela de cabeçalho das inform ações
que serão processadas pela MsEx ecAut o. Com base nos exem plos ant erior es, a
MsExecAut o da MATA030 possui apenas um array de parâm et ros no form at o
xAut oCab, sendo que a MATA103 ut ilizará o xAut oCab para a t abela SF1 e a
MATA145 para a t abela DB1.

Sin t a x e :

AADD(xAutoCab,{“Campo”, xConteúdo, “Validação”})

Ex e m plo:

AADD(xAutoCab,{“A1_FILIAL” , xFilial(“SA1”) , Nil})


AADD(xAutoCab,{“A1_COD” , “000001” , Nil})
AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})

MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

 Ar r a y d e d a dos dos it e n s ( x Au t oI t e n s) :

O array cont endo os dados dos it ens t am bém é com post o por: Cam po, Cont eúdo
e Validação; sendo que a diferença est á no fat o de que para cada it em a ser
t rat ado pela MsEx ecAut o dev erá ser r epet ida e preenchida a est rut ura do ar ray
com as inform ações do m esm o.

Com base nos ex em plos ant erior es, a MsEx ecAut o da MATA030 não possui um
array de par âm et ros no form at o xAut oI t ens, j á a MATA103 ut ilizará o x Aut oI t ens
para a t abela SD1 e a MATA145 ut ilizará dois xAut oI t ens, sendo o prim eiro para
a t abela DB2 e o segundo para a t abela DB3.

Sin t a x e :

<Estrutura de controle e repetição>

xAutoItem := {}

AADD(xAutoItem,{“Campo”, xConteúdo, “Validação”})

AADD(xAutoItens, xAutoItem)

</Estrutura>

- 607 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo:

AADD(xAutoCab,{“F1_FILIAL” , xFilial(“SF1”) , Nil})


AADD(xAutoCab,{“F1_DOC” , “000001” , Nil})
AADD(xAutoCab,{“F1_SERIE” , “1” , Nil})
AADD(xAutoCab,{“F1_FORNECE” , “000001” , Nil})
AADD(xAutoCab,{“F1_LOJA” , “01” , Nil})

For nX := 1 to 2

xAutoItem := {}

AADD(xAutoItem,{“D1_FILIAL” , xFilial(“SD1”) , Nil})


AADD(xAutoItem,{“D1_DOC” , “000001” , Nil})
AADD(xAutoItem,{“D1_SERIE” , “1” , Nil})
AADD(xAutoItem,{“D1_FORNECE” , “000001” , Nil})
AADD(xAutoItem,{“D1_LOJA” , “01” , Nil})
AADD(xAutoItem,{“D1_ITEM” , STRZERO(nx,04) , Nil})
AADD(xAutoItem,{“D1_COD” , STRZERO(nx,15) , Nil})
AADD(xAutoItem,{“D1_QUANT” , 100*nX , Nil})
AADD(xAutoItem,{“D1_VUNIT” , 5*nX , Nil})
AADD(xAutoItem,{“D1_TOTAL” , (100*nX)*(5*nX) , Nil})
AADD(xAutoItem,{“D1_TES” , “001” , Nil})

AADD(xAutoItens, xAutoItem)

Next nX

MsExecAuto({|x,y,z| MATA103(x,y,z)}, xAutoCab, xAutoItens, 3)

 M é t odo de a t r ib u içã o de con t e ú do D ir e t o:


O m ét odo diret o consist e em at ribuir diret am ent e na m ont agem do arr ay de parâm et r os
o cont eúdo de cada cam po que será t rat ado pela MsExecAut o.

Est e m ét odo é o m ais com um de ser ut ilizado dado sua prat icidade, e pela possibilidade
do desenvolvedor especificar som ent e os cam pos obrigat órios para a t abela e aqueles
que cont erão as inform ações geradas por sua aplicação.

Ex e m plo:

AADD(xAutoCab,{“A1_FILIAL” , xFilial(“SA1”) , Nil})


AADD(xAutoCab,{“A1_COD” , “000001” , Nil})
AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})

MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

- 608 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 M é t odo de a t r ib u içã o de con t e ú do pe la e st r u t u r a :
O m ét odo de at ribuição pela est rut ura é recom endáv el em r ot inas que efet uam a
im port ação das inform ações at rav és da leit ura de arquivos de dados, sej am eles
CODEBASE ou via banco de dados.

Est e m ét odo consist e em com parar a est rut ura do arquivo de origem ( a ser im port ado)
cont ra a do arquivo de dest ino ( t rat ado pela MsEx ecAut o) . Dest a form a os cam pos que
for em coincident es ent r e o arquivo de origem e o arquivo de dest ino serão pr eenchidos
com as inform ações do arquivo im port ado, caso cont rário os m esm os poderão ser
desconsiderados ou ser em pr eenchidos com um cont eúdo padrão.

Ex e m plo:

// Captura a estrutura da tabela padrão do sistema


DbSelectArea("SN1")
DbSetOrder(1)
aStruSN1 := SN1->(DbStruct())

// Efetua a abertura do arquivo SN1 que será importado


cArqSN1:= cDirArq+"SN1IMP"
IF File(cArqSN1+cFileExt)
dbUseArea(.T.,,cArqSN1+cFileExt,"SN1IMP",.F.,.F.)
IndRegua("SN1IMP",cArqSN1+OrdBagExt(),"N1_FILIAL+N1_CBASE+N1_ITEM",;
,,"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN1IMP não existe."+;
CRLF+"Verifique caminho informado.",1,0)
RETURN
ENDIF

// Efetua a leitura do arquivo a ser importado


DbSelectArea("SN1IMP")
DbGotop()
WHILE SN1IMP->(!Eof())

// Efetua a montagem do xAutoCab com base nas estruturas dos


// arquivos

FOR nX := 1 TO LEN(aStruSN1)
IF SN1IMP->(FieldPos(aStruSN1[nX][1]))>0
DO CASE
CASE EMPTY(SN1IMP->&(aStruSN1[nX][1]))
AADD(xAutoCab,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})

CASE aStruSN1[nX][2] == "C"


AADD(xAutoCab,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]),;
"",aStruSN1[nX][3]), NIL})

CASE aStruSN1[nX][2] == "N"


AADD(xAutoCab,{aStruSN1[nX][1],;
ABS(SN1IMP->&(aStruSN1[nX][1])), NIL})

- 609 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


OTHERWISE
AADD(xAutoCab,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]), NIL})
ENDCASE
ELSE
AADD(xAutoCab,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})
ENDIF
NEXT nX

...

MsExecAuto({|x,y,z| ATFA010(x,y,z)}, xAutoCab, xAutoItens, 3)

END

D e fin içã o dos p a r â m e t r os e spe cíficos da r ot in a q u e se r á e x e cu t a da

Est e é pont o no qual o desenvolvedor inclui os t rat am ent os necessários a cor r et a execução da
rot ina, além de seus t rat am ent os específicos, os quais j ust ificaram o desenvolvim ent o.

Ut ilizando o m esm o ex em plo ant erior da ATFA010 – Cadast r o de At ivos podem os cit ar dois
t rat am ent os específicos necessários para a corr et a execução da MsEx ecAut o:

 Ch a m a da d a s pe r gu n t a s d a ATFA0 1 0 :

A ex ecução da função Pe r gu n t e ( “ ATFA0 1 0 ”,.F.) perm it e que sej a definidos os


cont eúdos desej ados para os parâm et r os da rot ina de cadast r o conform e a
necessidade da aplicação, com o por ex em plo perm it ir a inclusão de um a chapa de
bem em branco ou não efet uar a cont abilização da inclusão.

 At u a liz a çã o da s va r ia vé is d e m e m ór ia do ALI AS “M - > ” p a r a o SN 1 :

A execução da função Re gToM e m or y( “SN 1 ”,.T.) é necessária para a ut ilização da


função CRI AVAR( ) no m ét odo de at ribuição pela est rut ura.

Muit as vezes um a est r ut ura que funciona para um MsEx ecAut o pode não
funcionar para out r o do m esm o t ipo, devido as car act eríst icas individuais de
cada r ot ina. Podem os cit ar os seguint es exem plos:

 M ATA1 0 3 ( Docum ent o de Ent rada) : Para t rat am ent o do t ít ulo


financeiro a ser gerado pela not a fiscal quando o parâm et r o de
at ualização de financeiro da TES est á at ivado, dev e ser incluído
o seguint e it em no ar ray xAut oCab:

{ " E2_NATUREZ " ," NAT01" ,NI L} )

 M ATA6 5 0 ( Abert ura de ordem de produção) : Para que sej am


geradas as ordens de produção int erm ediárias na abert ura de
um a ordem de pr odução principal deve ser incluído o seguint e
it em no ar ray xAut oCab:

{ " AUTEXPLODE" ," S" ,NI L} )

- 610 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Con t r ole de t r a n sa çã o

A ut ilização do cont role de t ransação perm it e garant ir a int egridade das inform ações gravadas
pelo processam ent o.

Para ut ilização do cont r ole de t ransação na aplicação podem ser ut ilizados os seguint es blocos
de cont r ole:

 Be g in Tr a n sa ct ion ... D isa r m Tr a n sa ct ion ( ) ... En d Tr a n sa ct ion

Um bloco de código det erm inado pelos com andos Begin Transact ion ... End Transact ion
t erá suas inform ações at ualizadas som ent e se ant es do ex ecução do com ando End
Transact ion não for ex ecut ada a função Disarm Transact ion( ) .

Dest a form a pode- se im plem ent ar um cont role de t ransação por it em processado, sendo
ex ecut ado o Disarm Transact ion( ) para aquele elem ent o em que houv e algum problem a
de pr ocessam ent o.

Seguindo est e m esm o r aciocínio, caso ocorra um er ro fat al na aplicação, som ent e o it em
que est á em pr ocessam ent o será desconsiderado, pois a aplicação ERP efet ua um
DisarTransact ion( ) aut om at icam ent e, fecham ent o as t ransações pendent es e
rest aurando as sit uações ant erior es, m as apenas para aqueles processam ent o pr ot egidos
pelo bloco de cont r ole de t ransação.

O com ando END TRANSACTI ON não pode t er sua int erpr et ação vinculada a
um a condição. Nest es casos ocor rerá um err o de com pilação indicando que o
bloco abert o pelo com ando BEGI N TRANSACTI ON não foi cor r et am ent e
fechado.

Ex e m plo:

AADD(xAutoCab,{“A1_FILIAL” , xFilial(“SA1”) , Nil})


AADD(xAutoCab,{“A1_COD” , “000001” , Nil})
AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})

BEGIN TRANSACTION

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
DisarmTransaction()
ENDIF

END TRANSACTION

- 611 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Be gin Tr a n ( ) ... D isa r m Tr a n sa ct ion ( ) ... En dTr a n ( )

As funções BeginTran( ) e EndTran( ) visam perm it ir que o t érm ino da t ransação sej a
condicional, elim inando a lim it ação da est rut ura BEGI N TRANSACTI ON ... END
TRANSACTI ON.

Ex e m plo:

AADD(xAutoCab,{“A1_FILIAL” , xFilial(“SA1”) , Nil})


AADD(xAutoCab,{“A1_COD” , “000001” , Nil})
AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})

BeginTran()

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
DisarmTransaction()
ELSE
EndTran()
ENDIF

MsUnlockAll()

Nest e m odelo de cont r ole de t ransação é r ecom endável a ut ilização da função


MsUnlockAll( ) para dest ravar t odos os regist r os que est ej am ev ent ualm ent e
t ravados.

- 612 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Tr a t a m e n t o de m e n sa ge n s de e r r o

Com a ut ilização da funcionalidade MsExecAut o a aplicação ERP disponibiliza diver sos m ét odos
para visualização e t rat am ent o das m ensagens de er ro ocor ridas durant e a execução da r ot ina,
sendo est es:

 Visualização do event o de er ro;


 Gravação do event o de er ro em arquivo t ext o;
 Per sonalização da gravação do ev ent o de er ro.

 Visu a liz a çã o do e ve n t o de e r r o

Para visualização em t ela do ev ent o de er ro ocor rido durant e o pr ocessam ent o da


rot ina via MsEx ecAut o dev e- se ut ilizar a função Most raEr ro( ) , conform e o exem plo:

Private lMsHelpAuto := .T.


Private lAutoErrNoFile := .F.

AADD(xAutoCab,{“A1_FILIAL” , xFilial(“SA1”) , Nil})


AADD(xAutoCab,{“A1_COD” , “000001” , Nil})
AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})

BEGIN TRANSACTION

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
MostraErro()
DisarmTransaction()
ENDIF

END TRANSACTION

O cont eúdo das variáveis PRI VATE de cont role da MsEx ecAut o dev e ser
configurado conform e abaixo:

Privat e lMsHelpAut o : = .T.


Privat e lAut oEr rNoFile : = .F.

- 613 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Gr a v a çã o do e v e n t o d e e r r o e m a r qu ivo t e x t o

Para gravação em arquivo no form at o t ext o do ev ent o de er ro ocor r ido durant e o


processam ent o da rot ina via MsEx ecAut o deve- se ut ilizar a função Most raEr ro( ) ,
conform e o ex em plo:

Private lMsHelpAuto := .T.


Private lAutoErrNoFile := .F.

AADD(xAutoCab,{“A1_FILIAL” , xFilial(“SA1”) , Nil})


AADD(xAutoCab,{“A1_COD” , “000001” , Nil})
AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})

BEGIN TRANSACTION

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
MostraErro(“\system\”)
DisarmTransaction()
ENDIF

END TRANSACTION

A função Most raEr ro( ) possui o par âm et ro cPat h o qual pode ser infor m ado
de duas form as:

 Apenas o diret ório: Se for inform ado apenas o diret ório será
gerado um arquivo com denom inação no form at o SCxx xxx x.log,
aonde x xxx xx ser á um núm ero sequencial gerado int ernam ent e
pelo sist em a.

 I nform ando o diret ório e o nom e do arquivo: A função irá


respeit ar o nom e do arquivo inform ado, sobr escrendo o
cont eúdo ant erior.

Caso sej a necessário gerar um único arquivo t ext o cont endo t odos os
ev ent os de err o gerados pelos sucessivos pr ocessam ent os da MsEx ecAut o,
a função Most raErr o( cPat h) deverá ser cham ada apenas um a vez, ao
t érm ino do processam ent o da r ot ina.

I st o ocor re pois a função Most raErr o( ) lim pa o cache de event os de er ros


cont r olado pela MsEx ecAut o.

- 614 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


 Pe r son a liz a çã o da gr a va çã o do e v e n t o de e r r o

Para processam ent os m ais volum osos, a ger ação de diver sos arquivos de t ext os ou
at é m esm o a geração de um único arquivo t ext o cont endo t odos os event os de er ro
pode dificult ar a análise e cor r eção dos problem as encont rados durant e o
processam ent o.

Dest a form a é possível per sonalizar a gravação do event o de err o, de form a que o
m esm o sej a gerado em um arquivo no form at o .DBF, perm it indo o vínculo do regist r o
processado com a m ensagem de er ro gerada.

Private lMSHelpAuto := .F.


Private lAutoErrNoFile := .T.

AADD(xAutoCab,{“A1_COD” , “000001” , Nil})


AADD(xAutoCab,{“A1_LOJA” , “01” , Nil})
AADD(xAutoCab,{“A1_NOME” , “TESTE-000001” , Nil})

// Função específica que cria o arquivo no formato DBF que conterá as


// mensagens de erro.
XDBFLOG()

BEGIN TRANSACTION

lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)

IF lMsErroAuto
// Função que retorna o evento de erro na forma de um array
aAutoErro := GETAUTOGRLOG()

// Função especifica que converte o array aAutoErro em texto


// contínuo, com a quantidade de caracteres desejada por linha

// Função específica que efetua a gravação do evento de erro no


// arquivo previamente crado.
XGRVLOG(XCONVERRLOG(aAutoErro))

DisarmTransaction()
ENDIF

END TRANSACTION

As funções específicas XDBFLOG( ) , XCONVERRLOG( ) e XGRVLOG( ) serão


det alhadas no ex em plo com plet o de ut ilzação da função MsEx ecAut o( ) .

- 615 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Aplica çã o com ple t a d e im por t a çã o u t iliz a n do M sEx e cAu t o: Ca r g a d e im ob iliz a do

#INCLUDE "PROTHEUS.CH"

/*/
+-----------------------------------------------------------------------
| Função | IATF001 | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | IMPORTACAO DO CADASTRO DE ATIVO IMOBILIZADO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION IATF001()

LOCAL oProcess

PRIVATE oMainWnd

//Perguntas para parametrizacao da rotina (PARAMBOX)


//MVParBox01 - Tipo de informação (.DBF/.TXT)
//MVParBox02 - LayOut do arquivo (Padrão / Especifico)
//MVParBox03 - Arquivo de dados (Consulta)
//MVParBox04 - Arquivo de layout (Consulta)
//MVParBox05 - Operacao (Incluir, Alterar, Excluir)
//MVParBox06 - Diretorio de Log (Consulta)
//MVParBox07 - Importa CIAP (SIM/NAO)

PRIVATE aTiposFile := {".DBF",".DTC",".TXT"}


PRIVATE MvParBox01 := 0
PRIVATE MvParBox02 := 0
PRIVATE MvParBox03 := ""
PRIVATE MvParBox04 := ""
PRIVATE MvParBox05 := 0
PRIVATE MvParBox06 := ""
PRIVATE MVParBox07 := 0

PRIVATE _cDirectory := ""

RpcSetType(3)
RpcSetEnv("99", "01",,,,,
{"CT1","SF9","SN1","SN2","SN3","SN4","SN5","SNG","SM2"})

SET DATE FORMAT "dd/mm/yyyy"

oMainWnd := TWindow():New( 000, 000, 001, 001, "Importação: Fichas do


imobilizado",,,,,,,,,,,,,,,,.T.)
oMainWnd:bInit := {|| IIF(IC001PARBX(),(oProcess:= MsNewProcess():New({|lEnd|
PROCATIVO(.F.,oProcess)}),oProcess:Activate(),oMainWnd:End()),oMainWnd:End())}
oMainWnd:Activate("ICONIZED")

RpcClearEnv()
RETURN

- 616 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

/*/
+-----------------------------------------------------------------------
| Função | PROCATIVO | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | PROCESSAMENTO DA IMPORTACAO DO CADASTRO DE IMOBILIZADO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

STATIC FUNCTION PROCATIVO(lEnd,oProcess)

Local aArea := GetArea()


Local aDadosSN1 := {}
Local aDadosSN3 := {}
Local aDadosSF9 := {}
Local aDadosTN1 := {}
Local aDadosTN2 := {}
Local aDadosTN3 := {}
Local aItemSN3 := {}
Local cArqSN1 := ""
Local cArqSN2 := ""
Local cArqSN3 := ""
Local cArqSA2 := ""
Local aStruSN1 := {}
Local aStruSN2 := {}
Local aStruSN3 := {}
Local aStruSF9 := {}
Local nX := 0
Local nTotRegs := 0
Local nProcRegs := 0
Local nPosDados := 0
Local cCodFor := ""
Local cLojaFor := ""
Local cDescFor := ""
Local cFilAtu := cFilAnt
Local cDirArq := Alltrim(MVParBox03)
Local cHistorico := ""
Local nX := 0
Local cFileExt := aTiposFile[MvParBox01]
Local lImpSF9 := MvParBox07==1
Local lImpSNG := .F. // Ainda nao implementado
Local cKeyImp := ""
Local aAutoErro := {}

// Tratamentos adicionais - arquivos especificos do cliente


Local cArqCTA := ""
Local cArqSM2 := ""
Local cIndSNG
Local nIndex := 0
Local cGrupo := ""
Local cContab := ""
Local aEntSNG := {}
Local cChapa := "000000"

Private lMsErroAuto := .F.


Private lMSHelpAuto := .F.

- 617 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

Private lAutoErrNoFile := .T.

// Garante a abertura dos arquivos padrões do sistema


DbSelectArea("CT1")
DbSetOrder(2) // FILIAL + COD.REDUZIDO

DbSelectArea("SM2")
DbSetOrder(1)

DbSelectArea("SN1")
DbSetOrder(1)
aStruSN1 := SN1->(DbStruct())

DbSelectArea("SN2")
DbSetOrder(1)
aStruSN2 := SN2->(DbStruct())

DbSelectArea("SN3")
DbSetOrder(1)
aStruSN3 := SN3->(DbStruct())

DbSelectArea("SF9")
DbSetOrder(1)
aStruSF9 := SF9->(DbStruct())

// Prepara o arquivo no formato .DBF para gravação dos eventos de erro


XDBFLOG()

DbSelectArea("SNG")
cIndSNG := CRIATRAB(Nil,.F.)
IndRegua("SNG",cIndSNG,"NG_FILIAL+NG_CCONTAB",,,"Selecionando Registros...")
nIndex := RetIndex()
#IFNDEF TOP
DbSetIndex(cIndSNG+OrdBagExt())
#ENDIF
DbSetOrder(nIndex)

PERGUNTE("ATF010",.F.)
MV_PAR02 := 1 // Permite repetir chapa definido como sim

IF Select("SN1IMP") > 0
DbSelectArea("SN1IMP")
DbCloseArea()
ENDIF
IF Select("SN2IMP") > 0
DbSelectArea("SN2IMP")
DbCloseArea()
ENDIF
IF Select("SN3IMP") > 0
DbSelectArea("SN3IMP")
DbCloseArea()
ENDIF
IF Select("SF9IMP") > 0
DbSelectArea("SF9IMP")
DbCloseArea()
ENDIF

- 618 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

IF Select("CTAIMP") > 0
DbSelectArea("CTAIMP")
DbCloseArea()
ENDIF

cArqSN1:= cDirArq+"SN1IMP"
IF File(cArqSN1+cFileExt)
dbUseArea(.T.,,cArqSN1+cFileExt,"SN1IMP",.F.,.F.)
IndRegua("SN1IMP",cArqSN1+OrdBagExt(),"N1_FILIAL+N1_CBASE+N1_ITEM",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN1IMP não existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

cArqSN2:= cDirArq+"SN2IMP"
IF File(cArqSN2+cFileExt )
dbUseArea(.T.,,cArqSN2+cFileExt,"SN2IMP",.F.,.F.)
IndRegua("SN2IMP",cArqSN2+OrdBagExt(),;
"N2_FILIAL+N2_CBASE+N2_ITEM+N2_TIPO+N2_SEQ",,,"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN2IMP não existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

cArqSN3:= cDirArq+"SN3IMP"
IF File(cArqSN3+cFileExt)
dbUseArea(.T.,,cArqSN3+cFileExt,"SN3IMP",.F.,.F.)
IndRegua("SN3IMP",cArqSN3+OrdBagExt(),"N3_FILIAL+N3_CBASE+N3_ITEM",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN3IMP não existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

IF lImpSF9
cArqSF9:= cDirArq+"SF9IMP"
IF File(cArqSF9+cFileExt )
dbUseArea(.T.,,cArqSF9+cFileExt,"SF9IMP",.F.,.F.)
IndRegua("SF9IMP",cArqSF9+OrdBagExt(),"F9_FILIAL+F9_CODIGO",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SF9IMP não existe."+;
CRLF+"Verifique caminho informado.",1,0)
RETURN
ENDIF
ENDIF

- 619 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

cArqCTA:= cDirArq+"CTAIMP"
IF File(cArqCTA+cFileExt)
dbUseArea(.T.,,cArqCTA+cFileExt,"CTAIMP",.F.,.F.)
IndRegua("CTAIMP",cArqCTA+OrdBagExt(),"CODIGO_CON",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO CTAIMP não existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

cArqSM2:= cDirArq+"SM2IMP"
IF File(cArqSM2+cFileExt)
dbUseArea(.T.,,cArqSM2+cFileExt,"SM2IMP",.F.,.F.)
IndRegua("SM2IMP",cArqSM2+OrdBagExt(),"DTOS(BTN_DATA)",,,"Selecionando
Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SM2IMP não existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF

lMSHelpAuto := .T.
DbSelectArea("SN1IMP")
DbGotop()

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Preparação para inicio do processamento ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
cKeyImp := DTOS(dDatabase)+StrZero(HoraToInt(Time()),6)
// Identidficador dos registros do log de erros

ConOut("Processando importação:")
ConOut("Inicio: "+Time())
ConOut("Registros SN1IMP: "+CValToChar(SN1IMP->(RecCount())))
ConOut("Registros SN2IMP: "+CValToChar(SN2IMP->(RecCount())))
ConOut("Registros SN3IMP: "+CValToChar(SN3IMP->(RecCount())))

dbEval( {|x| nTotRegs++ },,{||SN1IMP->(!EOF())})


oProcess:SetRegua1(nTotRegs+2)
oProcess:IncRegua1("Iniciando processamento...")
oProcess:SetRegua2(nTotRegs+1)
oProcess:IncRegua2("Ficha de Ativo:")

DbSelectArea("SN1IMP")
DbGotop()

- 620 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

While SN1IMP->(!Eof())

nProcRegs++
oProcess:IncRegua1("Processando item: "+CValToChar(nProcRegs)+" / "+;
CValToChar(nTotRegs))
oProcess:IncRegua2("Ficha de Ativo: ")

aDadosSN1 := {}
aDadosSN3 := {}

// Compatibilização para utilização do CRIAVAR()


REGTOMEMORY("SN1",.T.)

//Monstagem do array com dados sem tratamento e com as informação da IMP

FOR nX := 1 TO LEN(aStruSN1)
IF SN1IMP->(FieldPos(aStruSN1[nX][1]))>0
DO CASE
CASE EMPTY(SN1IMP->&(aStruSN1[nX][1]))
AADD(aDadosSN1,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})
CASE aStruSN1[nX][2] == "C"
AADD(aDadosSN1,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]),;
"",aStruSN1[nX][3]), NIL})
CASE aStruSN1[nX][2] == "N"
AADD(aDadosSN1,{aStruSN1[nX][1],;
ABS(SN1IMP->&(aStruSN1[nX][1])), NIL})
OTHERWISE
AADD(aDadosSN1,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]), NIL})
ENDCASE
ELSE
AADD(aDadosSN1,{aStruSN1[nX][1], CRIAVAR(aStruSN1[nX][1]),;
NIL})
ENDIF
NEXT nX

// Alteração das informações do array de acordo com a necessidade


// AADD(aDadosTN1,{"CAMPO",CONTEUDO,"VALIDACAO"})
aDadosTN1 := {}

// ALTERACAO DO ARRAY ADADOSSN1 COM AS INFORMACOES TRABALHADAS E


// ARMAZENADAS EM ADADOSTN1
// AADD(aDadosTN1,{"N1_XXXXXX" ,xConteudo ,Nil})

For nX := 1 TO LEN(aDadosTN1)
IF (nPosField := aScan(aDadosSN1,{|aDadoSN1| aDadosSN1[1] ==;
aDadosTN1[nX][1]})) > 0
aDadosSN1[nPosField][2] := aDadosTN1[nX][2]
aDadosSN1[nPosField][3] := aDadosTN1[nX][3]
ENDIF
Next nX

- 621 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

IF SN1->(DbSeek(aDadosSN1[1][2]+aDadosSN1[2][2]+aDadosSN1[3][2]))
ConOut("Registro já importado: "+;
aDadosSN1[1][2]+"/"+aDadosSN1[2][2]+"/"+aDadosSN1[3][2])
ConOut("Registros importados com sucesso: "+CValToChar(nProcRegs))
SN1IMP->(dbSkip())
Loop
ENDIF

SN3IMP->(DbSeek(SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)))
While SN3IMP->(!Eof()) .AND. SN3IMP->(N3_FILIAL+N3_CBASE+N3_ITEM) ==;
SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)

aItensSN3 := {}

//³ Monstagem do array com dados sem tratamento e com as informações

FOR nX := 1 TO LEN(aStruSN3)
IF SN3IMP->(FieldPos(aStruSN3[nX][1]))>0
DO CASE
CASE EMPTY(SN3IMP->&(aStruSN3[nX][1]))
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), NIL})
CASE aStruSN3[nX][2] == "C"
AADD(aItensSN3,{aStruSN3[nX][1],;
SN3IMP->&(aStruSN3[nX][1]),;
aStruSN3[nX][3]), NIL})
CASE aStruSN3[nX][2] == "N"
AADD(aItensSN3,{aStruSN3[nX][1],;
ABS(SN3IMP->&(aStruSN3[nX][1])),;
".T."})

OTHERWISE
AADD(aItensSN3,{aStruSN3[nX][1],;
SN3IMP->&(aStruSN3[nX][1]), NIL})

ENDCASE
ELSEIF aStruSN3[nX][2] == "N"
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), ".T."})
ELSE
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), NIL})
ENDIF
NEXT nX

// Alteração das informações do array de acordo com a necessidade


// AADD(aDadosTN3,{"CAMPO" ,CONTEUDO,"VALIDACAO"})
aDadosTN3 := {}

// ALTERACAO DO ARRAY aItenSN3 COM AS INFORMACOES TRABALHADAS E


// ARMAZENADAS EM aDadosTN3

For nX := 1 TO LEN(aDadosTN3)
IF (nPosField := aScan(aItensSN3,{|aItenSN3| aItenSN3[1] ==;
aDadosTN3[nX][1]})) > 0
aItensSN3[nPosField][2] := aDadosTN3[nX][2]
aItensSN3[nPosField][3] := aDadosTN3[nX][3]

- 622 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

ENDIF
Next nX

AADD(aDadosSN3,aItensSN3)
SN3IMP->(DbSkip())
Enddo

IF Len(aDadosSN1) > 0 .AND. Len(aDadosSN3) > 0

ConOut("Iniciando MsExecAuto - ATFA010: "+Time())

Begin Transaction
cFilAnt := SN1IMP->N1_FILIAL
lMsErroAuto := .F.
MSExecAuto({|x,y,z| Atfa010(x,y,z)},aDadosSN1,aDadosSN3,3)
// Cabeçalho, Itens e Opção

ConOut("Finalizada MsExecAuto - ATFA010: "+Time())

IF lMsErroAuto
aAutoErro := GETAUTOGRLOG()
XGRVLOG(cKeyImp,;
SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM),;
SN1IMP->N1_DESCRIC, XCONVERRLOG(aAutoErro))
DisarmTransaction()
MostraErro(Alltrim(MVParBox06))
ELSE

// TRATAMENTO DA DESCRIÇÃO ESTENDIDA (SN2)


SN2IMP->(DbSeek(SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)))
cHistorico := ALLTRIM(SN2IMP->N2_HISTOR1) +;
ALLTRIM(SN2IMP->N2_HISTOR2)

For nX := 1 to Len(cHistorico) STEP 40

RECLOCK("SN2",.T.)
SN2->N2_FILIAL := SN1->N1_FILIAL
SN2->N2_CBASE := SN1->N1_CBASE
SN2->N2_ITEM := SN1->N1_ITEM
SN2->N2_TIPO := "01"
SN2->N2_SEQ := "001"
SN2->N2_SEQUENC := STRZERO(nX,2)
SN2->N2_HISTOR := SUBSTR(cHistorico,nX,40)
MSUNLOCK()

NEXT nX

// TRATAMENTO DA CARGA DO CIAP


IF lImpSF9
IATFCIAP(aStruSF9,aDadosSF9)
ENDIF

ConOut("Registros importados com sucesso: "+;


CValToChar(nProcRegs))

ENDIF
End Transaction

- 623 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

ENDIF

SN1IMP->(DbSkip())
Enddo

oProcess:IncRegua1("Processamento finalizado")

DbSelectArea("SN1IMP")
DbCloseArea()
IF File(cArqSN1+OrdBagExt())
FErase(cArqSN1+OrdBagExt())
ENDIF

DbSelectArea("SN2IMP")
DbCloseArea()
IF File(cArqSN2+OrdBagExt())
FErase(cArqSN2+OrdBagExt())
ENDIF

DbSelectArea("SN3IMP")
DbCloseArea()
IF File(cArqSN3+OrdBagExt())
FErase(cArqSN3+OrdBagExt())
ENDIF

IF lImpSF9
DbSelectArea("SF9IMP")
DbCloseArea()
IF File(cArqSF9+OrdBagExt())
FErase(cArqSF9+OrdBagExt())
ENDIF
ENDIF

IF lImpSNG
DbSelectArea("SNGIMP")
DbCloseArea()
IF File(cIndSNG+OrdBagExt())
FErase(cIndSNG+OrdBagExt())
ENDIF
ENDIF

DbSelectArea("CTAIMP")
DbCloseArea()
IF File(cArqCTA+OrdBagExt())
FErase(cArqCTA+OrdBagExt())
ENDIF

DbSelectArea("SM2IMP")
DbCloseArea()
IF File(cArqSM2+OrdBagExt())
FErase(cArqSM2+OrdBagExt())
ENDIF

- 624 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

DbSelectArea("LOGIMP")
DbCloseArea()

ConOut("Total de registros importados: "+CValToChar(nProcRegs))


ConOut("Término da importação: "+Time())

cFilAnt := cFilAtu
RestArea(aArea)
RETURN

/*/
+-----------------------------------------------------------------------
| Função | CT001PARBX | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | TELA DE PARAMETROS ESPECIFICOS DA ROTINA CUSTOMIZADA |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

STATIC FUNCTION IC001PARBX()

LOCAL aParamBox := {}
LOCAL cTitulo := "Importacao de cadastros"
LOCAL aRet := {}
LOCAL bOk := {|| .T.}
LOCAL aButtons := {}
LOCAL lCentered := .T.
LOCAL nPosx
LOCAL nPosy
LOCAL cLoad := ""
LOCAL lCanSave := .T.
LOCAL lUserSave := .T.
LOCAL nX := 0
LOCAL lRet := .F.

AADD(aParamBox,{2,"Tipo de informação" ,1 ,aTiposFile ,060,;


"AllwaysTrue()", .T.})
AADD(aParamBox,{2,"LayOut do arquivo " ,1 ,;
{"Padrão","Especifico"},060, "AllwaysTrue()", .T.})
AADD(aParamBox,{1,"Diretorio de dados" ,Space(60) ,;
"@!","AllwaysTrue()","HSSDIR" ,".T.",120,.T.})
AADD(aParamBox,{1,"Arquivo de layout " ,Space(60) ,;
"@!","AllwaysTrue()","" ,".T.",120,.F.})
AADD(aParamBox,{2,"Operacao " ,1 ,;
{"Incluir","Alterar","Excluir"},060, "AllwaysTrue()", .T.})
AADD(aParamBox,{1,"Diretorio de Log " ,Space(60) ,;
"@!","AllwaysTrue()","HSSDIR" ,".T.",120,.F.})
AADD(aParamBox,{2,"Importa CIAP " ,1 ,;
{"Sim","Não"} ,060, "AllwaysTrue()", .T.})

lRet := ParamBox(aParamBox, cTitulo, aRet, bOk, aButtons, lCentered, nPosx,;


nPosy, /*oMainDlg*/ , cLoad, lCanSave, lUserSave)

- 625 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox)


For nX := 1 to Len(aParamBox)
If aParamBox[nX][1] == 1
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C"
&("MvParBox"+StrZero(nX,2)) := aScan(aParamBox[nX][4],;
{|x| Alltrim(x) == aRet[nX]})
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N"
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
Endif
Next nX
ENDIF

RETURN lRet

/*/
+-----------------------------------------------------------------------
| Função | IATFCIAP | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | IMPORTACAO DO LIVRO FISCAL CIAP |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION IATFCIAP(aStruSF9,aDadosSF9)
Local aDadosCIAP := {}
Local nX := 0
Local nPosSF9 := 0

// Monta array com dados padrões do SF9 de acordo com o SX3


FOR nX := 1 to Len(aStruSF9)
AADD(aDadosCIAP,{aStruSF9[nX][1],CRIAVAR(aStruSF9[nX][1]),NIL})
NEXT nX

// Atualiza dados do array com as informações presentes no SN1


FOR nX := 1 to Len(aDadosSF9)
IF (nPosSF9 := aScan(aDadosCIAP,{|aLinhaCIAP| aLinhaCIAP[1] ==
aDadosSF9[nX][1]})) > 0
aDadosCIAP[nPosSF9][2] := aDadosSF9[nX][2]
ENDIF
NEXT nX

ConOut("Iniciando MsExecAuto - ATFCIAP: "+Time())


lMsErroAuto := .F.
MSExecAuto({|x,y| U_ATFCIAP(x,y)},aDadosCIAP,3) // Dados e Opção
ConOut("Finalizada MsExecAuto - ATFCIAP: "+Time())

RETURN lMsErroAuto

- 626 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

/*/
+-----------------------------------------------------------------------
| Função | XDBFLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | CRIACAO DO ARQUIVO DBF PARA TRATAMENTO DOS EVENTOS DE ERR|
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION XDBFLOG()
LOCAL aCampos := {}
LOCAL cArqLog := MVParBox06+"LOGIMP"+GetDbExtension()

IF !File(cArqLog)
AADD(aCampos,{"CKEYIMP" ,"C",014,0})
AADD(aCampos,{"CKEYREG" ,"C",020,0})
AADD(aCampos,{"CDESCR" ,"C",040,0})
AADD(aCampos,{"CSEQMSG" ,"C",003,0})
AADD(aCampos,{"CMSGERR" ,"C",254,0})
dbCreate(cArqLog,aCampos,__LocalDriver)
ENDIF

dbUseArea(.T., __LocalDriver, cArqLog, "LOGIMP", .T., .F.)


RETURN

/*/
+-----------------------------------------------------------------------
| Função | XGRVLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | GRAVACAO DA MENSAGEM DE ERRO NO ARQUIVO DBF DE CONTROLE |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION XGRVLOG(cKeyImp, cKeyReg, cDescReg, cMsgErr)

LOCAL cSeqLog := "000"

FOR nX := 1 TO Len(cMsgErr) STEP 254

cSeqLog := SOMA1(cSeqLog)
RECLOCK("LOGIMP",.T.)
LOGIMP->CKEYIMP := cKeyImp
LOGIMP->CKEYREG := cKeyReg
LOGIMP->CDESCR := cDescReg
LOGIMP->CSEQMSG := cSeqLog
LOGIMP->CMSGERR := SUBSTR(cMsgErr,nX,254)
MSUNLOCK()

NEXT nX

RETURN

- 627 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

/*/
+-----------------------------------------------------------------------
| Função | XCONVERRLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | CONVERTE O ARRAY AAUTOERRO EM TEXTO CONTINUO. |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

STATIC FUNCTION XCONVERRLOG(aAutoErro)

LOCAL cRet := ""


LOCAL nX := 1

FOR nX := 1 to Len(aAutoErro)
cRet += aAutoErro[nX]+CHR(13)+CHR(10)
NEXT nX

RETURN cRet

- 628 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


42. Re cur sos de e nvio de e - m a il

Nest e t ópico ser ão descrit as as funções da linguagem ADVPL que per m it em o envio e o
recebim ent o de m ensagens at rav és de e- m ails.

Fu n çõe s pa r a m a n ipu la çã o de e - m a ils

 CALLPROC

 M AI LSM TPON

 M AI LPOPON

 M AI LSM TPOFF

 M AI LPOPOFF

 M AI LRECEI VE

 M AI LAUTH

 POPM SGCOUN T

 M AI LSEN D

 M AI LGETERR

D e t a lh a m e n t o da s f u n çõe s d e m a n ipu la çã o de e - m a ils

CALLPROC( )

Mét odo do obj et o oRpcSrv que perm it e a ut ilização de t odas as funções de envio e
recebim ent o de e- m ail descrit as nest e t ópico.

 Sin t a x e : Ca llPr oc( cFu n ca o, x Pa r a m 1 , ..., x Pa r a m N )

 Pa r â m e t r os:

cFu n ca o Nom e da função ou m ét odo do obj et o oRpcSrv que será execut ado.
x Pa r a m N Parâm et r os da função ou m ét odo que será execut ado.

 Re t or n o:

Nenhum .

- 629 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M AI LSM TPON ( )

At iva um a conexão com o serviço de SMTP para a t hread at iva.

 Sin t a x e : M a ilSm t pOn ( cSe r ve r , cUse r , cPa ss, n Tim e Ou t )

 Sin t a x e clá ssica :

CONNECT SMTP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN
SERVER oRpcSrv RESULT lResult

 Pa r â m e t r os:

Cse r ve r Endereço do servidor para conexão


Cu se r Nom e do usuário para aut ent icação no servidor.
CPa ss Senha do usuário para aut ent icação no servidor.
N Tim e Ou t Tem po de espera para operação de aut ent icação.

 Re t or n o:

Lógico I ndica se foi realizada com sucesso a conexão com o ser vidor indicado.

M AI LPOPON ( )

At iva um a conexão com o serviço de POP para a t hread at iva. - > lRet urn

 Sin t a x e : M a ilPopOn ( cSe r v e r , cUse r , cPa ss, n Tim e Ou t )

 Sin t a x e clá ssica :

CONNECT POP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN
SERVER oRpcSrv RESULT lResult

 Pa r â m e t r os:

Cse r ve r Endereço do servidor para conexão


Cu se r Nom e do usuário para aut ent icação no servidor.
CPa ss Senha do usuário para aut ent icação no servidor.
N Tim e Ou t Tem po de espera para operação de aut ent icação.

 Re t or n o:

Lógico I ndica se foi realizada com sucesso a conexão com o ser vidor indicado.

- 630 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M AI LSM TPOFF( )

Encer ra a conexão com o serviço de SMTP.

 Sin t a x e : M a ilSm t pOff ( )

 Sin t a x e clá ssica :

DISCONNECT SMTP SERVER IN SERVER oRpcSrv RESULT lResult

 Pa r â m e t r os:

Nenhum .

 Re t or n o:

Lógico I ndica se a operação foi r ealizada com sucesso.

M AI LPOPOFF( )

Encer ra a conexão com o serviço de POP

 Sin t a x e : M a ilPopOff ( )

 Sin t a x e clá ssica :

DISCONNECT POP SERVER IN SERVER oRpcSrv RESULT lResult

 Pa r â m e t r os:

Nenhum .

 Re t or n o:

Lógico I ndica se a operação foi r ealizada com sucesso.

- 631 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M AI LRECEI VE( )

Efet ua o r ecebim ent o de um e- m ail, salvando- o no local definido.

 Sin t a x e : M a ilRe ce ive ( n N u m be r , @cFr om , @cTo, @cCc, @cBcc, @cSu bj e ct ,


@cBod y, @a File s, cPa t h , lD e le t e )

 Sin t a x e clá ssica :

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

 Pa r â m e t r os:

n N u m be r Núm er o da m ensagem que deverá ser recebida. Est e núm er o é em função da


quant idade de m ensagens na caixa de e- m ails.
cFr om Variável local do font e que será at ualizada com o r em et ent e da m ensagem .
cTo Variável local do font e que será at ualizada com o dest inat ório da m ensagem .
cCc Variável local do font e que será at ualizada com a cont a copiada na
m ensagem .
cBcc Variável local do font e que será at ualizada com a cont a copiada em cópia
ocult a na m ensagem .
cSu bj e ct Variável local do font e que será at ualizada com o assunt o da m ensagem .
cBody Variável local do font e que será at ualizada com corpo da m ensagem .
a File s Variável local do font e que ser á at ualizada os nom es dos anex os da
m ensagem .
cPa t h Diret ório no qual serão salvos os anex os da m ensagem .
lD e le t e I ndica se a m ensagem dev erá ser apagada do servidor de e- m ails após sua
recepção pela aplicação.

 Re t or n o:

Lógico I ndica se a oper ação de recebim ent o de m ensagens foi realizada com
sucesso.

- 632 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M AI LAUTH ( )

Função que ex ecut a a aut ent icação do usuário no ser viço at ivo.

 Sin t a x e : M a ilAu t h ( cUse r , cPa ssw or d)

 Pa r â m e t r os:

cUse r Nom e do usuário para v alidação da conexão com o servidor.


cPa ssw or d Senha do usuário para validação da conexão com o servidor.

 Re t or n o:

Lógico I ndica se foi realizada a aut ent icação do usuário com sucesso.

A função MailAut h( ) deverá ser ut ilizada obrigat oriam ent e após a abert ura da
conexão com o servidor , sej a ele de envio ou recebim ent o de m ensagens.

Para validação da conex ão sem pr e efet ue a v erificação com o usuário cont endo
o ender eço com plet o do e- m ail, e caso necessário som ent e com o usuário,
elim inando o r est ant e do ender eço após o caract er e “ @” .

lResult : = MailAut h( Allt rim ( cEm ail) , Allt rim ( cPass) )


/ / Se nao conseguiu fazer a Aut ent icacao usando o E- m ail com plet o, t ent a
/ / fazer a aut ent icacao usando apenas o nom e de usuario do E- m ail.
I f ! lResult
nA : = At ( " @",cEm ail)
cUser : = I f( nA> 0,Subs( cEm ail,1,nA- 1) ,cEm ail)
lResult : = MailAut h( Allt rim ( cUser) , Allt rim ( cPass) )
Endif

- 633 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


POPM SGCOUN T( )

Verifica quant as m ensagens exist em na caixa de ent rada do serviço POP at ivo.

 Sin t a x e : PopM sgCou n t ( @nM sgCou n t )

 Sin t a x e clá ssica :

POP MESSAGE COUNT nMsgCount IN SERVER oRpcSrv RESULT lResult

 Pa r â m e t r os:

n M sgCou n t Variável local do font e que será at ualizada com a quant idade de m ensagens
disponíveis para r ecebim ent o na caixa de e- m ails.

 Re t or n o:

Lógico I ndica se foi realizado o acesso a caixa de m ensagens.

M AI LSEN D ( )

Envia um e- m ail ut ilizando a serviço de SMTP at ivo.

 Sin t a x e : M a ilSe n d( cFr om , a To, a Cc, a Bcc, cSu bj e ct , cBod y, a File s, lTe x t )

 Sin t a x e clá ssica :

SEND MAIL FROM cFrom TO aTo,... CC aCc,... BCC aBcc,... SUBJECT cSubject BODY
cBody FORMAT TEXT ATTACHMENT aFiles,... IN SERVER oRpcSrv RESULT lResult

 Pa r â m e t r os:

cFr om Endereço de e- m ail do rem ent e da m ensagem .


a To Array cont endo os endereços de e- m ails dos dest inat ários da m ensagem .
a Cc Array cont endo os endereços de e- m ails dos copiados na m ensagem .
a Bcc Array cont endo os ender eços de e- m ails dos copiados de form a ocult a na
m ensagem .
cSu bj e ct Text o de assunt o do e- m ail.
cBody Text o da m ensagem do e- m ail.
a File s Array cont endo os nom es dos arquivos que ser ão anexados a m ensagem .
lTe x t I ndica se o corpo do e- m ail est á em form at o t ext o.

 Re t or n o:

Lógico I ndica se a operação de envio de m ensagens foi r ealizada com sucesso.

- 634 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


M AI LGETERR( )

Ret orna o err o que ocor reu no envio do e- m ail.

 Sin t a x e : M a ilGe t Er r ( )

 Sin t a x e clá ssica :

GET MAIL ERROR cErrorMsg IN SERVER oRpcSrv

 Pa r â m e t r os:

Nenhum .

 Re t or n o:

Ca r a ct e r Mensagem de er r o ocor rida no pr ocessam ent o do envio ou r ecebim ent o dos


e- m ails.

Ex e m plos d e u t iliz a çã o d a s fu n cion a lida d e s de e n v io e r e ce bim e n t o d e e - m a il

En vio de m e n sa ge n s u t iliz a n do sin t a x e clá ssica

#include "protheus.ch"
#include "tbiconn.ch"
#include "AP5MAIL.CH"

/*/
+-----------------------------------------------------------------------
| Função | SENDMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | ENVIO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION SendMail(_lJob)

Local lResulConn := .T.


Local lResulSend := .T.
Local cError := ""

Local cServer := AllTrim(GetMV("MV_RELSERV"))


Local cEmail := AllTrim(GetMV("MV_RELACNT"))
Local cPass := AllTrim(GetMV("MV_RELPSW"))
Local lRelauth := GetMv("MV_RELAUTH")

Local cDe := cEmail


Local cPara := "arnaldojr@microsiga.com.br"

- 635 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

Local cCc := ""


Local cAssunto := "Teste de envio de e-mail: Curso ADVPL"
Local cAnexo := "\SYSTEM\lgrl99.bmp"
Local cMsg := Space(200)

Default _lJob := .T.

cMsg := "--------------------------------------------------"
cMsg += "CURSO DE ADVPL "
cMsg += "--------------------------------------------------"
cMsg += "Você está recebendo um e-mail do curso de ADVPL avançado"

CONNECT SMTP SERVER cServer ACCOUNT cEmail PASSWORD cPass RESULT lResulConn

If !lResulConn
GET MAIL ERROR cError
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif

// Sintaxe: SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
// Todos os e-mail terão: De, Para, Assunto e Mensagem, porém precisa analisar
se tem: Com Cópia e/ou Anexo

If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
//Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta fazer
a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif

Endif

If lResult
If Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg RESULT
lResulSend
Else
If Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf !Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
RESULT lResulSend
Endif
Endif

- 636 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

If !lResulSend
GET MAIL ERROR cError
If _lJob
ConOut(Padc("Falha no Envio do e-mail "+cError,80))
Else
MsgAlert("Falha no Envio do e-mail " + cError)
Endif
Endif

Else

If _lJob
ConOut(Padc("Falha na autenticação do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticação do e-mail:" + cError)
Endif

Endif

DISCONNECT SMTP SERVER

IF lResulSend
If _lJob
ConOut(Padc("E-mail enviado com sucesso",80))
Else
MsgInfo("E-mail enviado com sucesso" + cError)
Endif
ENDIF

RETURN lResulSend

- 637 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


En vio de m e n sa ge n s u t iliz a n do fu n çõe s

#include "protheus.ch"
#include 'tbiconn.ch'
#include "AP5MAIL.CH"

/*/
+-----------------------------------------------------------------------
| Função | SENDMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | ENVIO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION FSendMail(_lJob)

Local lResulConn := .T.


Local lResulSend := .T.
Local lResult := .T.
Local cError := ""

Local cServer := AllTrim(GetMV("MV_RELSERV"))


Local cEmail := AllTrim(GetMV("MV_RELACNT"))
Local cPass := AllTrim(GetMV("MV_RELPSW"))
Local lRelauth := GetMv("MV_RELAUTH")

Local cDe := cEmail


Local cPara := "arnaldojr@microsiga.com.br"
Local cCc := ""
Local cBcc := ""
Local cAssunto := "Teste de envio de e-mail: Curso ADVPL"
Local cAnexo := "\SYSTEM\lgrl99.bmp"
Local cMsg := Space(200)

Default _lJob := .F.

cMsg := "--------------------------------------------------"
cMsg += "CURSO DE ADVPL "
cMsg += "--------------------------------------------------"
cMsg += "Você está recebendo um e-mail do curso de ADVPL avançado"

//CONNECT SMTP SERVER cServer ACCOUNT cEmail PASSWORD cPass RESULT lResulConn
lResulConn := MailSmtpOn( cServer, cEmail, cPass)

If !lResulConn
//GET MAIL ERROR cError
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif

- 638 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

// Sintaxe: SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
// Todos os e-mail terão: De, Para, Assunto e Mensagem, porém precisa analisar
se tem: Com Cópia e/ou Anexo

If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
//Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta fazer
a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif

Endif

If lResult

/*
If Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg RESULT
lResulSend
Else
If Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf !Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
RESULT lResulSend
Endif
Endif
*/

lResulSend := MailSend(cDe,{cPara},{cCc},{cBcc},cAssunto,cMsg,{cAnexo},.T.)

If !lResulSend
//GET MAIL ERROR cError
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha no Envio do e-mail "+cError,80))
Else
MsgAlert("Falha no Envio do e-mail " + cError)
Endif
Endif

Else
If _lJob
ConOut(Padc("Falha na autenticação do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticação do e-mail:" + cError)
Endif
Endif

Continuação:

- 639 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


//DISCONNECT SMTP SERVER
MailSmtpOff()

IF lResulSend
If _lJob
ConOut(Padc("E-mail enviado com sucesso",80))
Else
MsgInfo("E-mail enviado com sucesso" + cError)
Endif
ENDIF

RETURN lResulSend

- 640 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Re ce bim e n t o de m e n sa g e n s u t iliz a n do fu n çõe s

#include "protheus.ch"
#include "tbiconn.ch"
#include "AP5MAIL.CH"

/*/
+-----------------------------------------------------------------------
| Função | POPMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | RECEBIMENTO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

USER FUNCTION FPopMail(_lJob)

Local lResulConn := .T.


Local lResulPop := .T.
Local lResult := .T.
Local cError := ""

Local cServer := AllTrim(GetMV("MV_RELSERV"))


Local cEmail := AllTrim(GetMV("MV_RELACNT"))
Local cPass := AllTrim(GetMV("MV_RELPSW"))
Local lRelauth := GetMv("MV_RELAUTH")

Local cDe := ""


Local cPara := ""
Local cCc := ""
Local cBcc := ""
Local cAssunto := ""
Local aAnexo := {}
Local cMsg := ""
Local cPath := "\MailBox"
Local nMsgCount:= 0
Local nNumber := 0

Default _lJob := .F.

lResulConn := MailPopOn( cServer, cEmail, cPass,1000)

If !lResulConn
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif

- 641 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

/*If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
// Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta
// fazer a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif

Endif*/

If lResult

PopMsgCount(@nMsgCount)

For nNumber := 1 to nMsgCount

lResulPop := MailReceive(nNumber, @cDe, @cPara, @cCc, @cBcc,;


@cAssunto, @cMsg, @aAnexo , cPath, .F.)

If !lResulPop
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha no recebimento do e-mail "+cError,80))
Else
MsgAlert("Falha no recebimento do e-mail " + cError)
Endif

Else // Salvar mensagem de e-mail

cMessage := "DE: "+cDe+CRLF


cMessage += "PARA: "+cPara+CRLF
cMessage += "CC: "+cCc+CRLF
cMessage += "BCC: "+cBcc+CRLF
cMessage += "ASSUNTO: "+cAssunto+CRLF
cMessage += "MENSAGEM: "+cMsg+CRLF

MsgInfo(cMessage,"E-mail Recebido")

Endif

End-For // Next nNumber

Else

If _lJob
ConOut(Padc("Falha na autenticação do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticação do e-mail:" + cError)
Endif

Endif

MailPopOff()

- 642 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

IF lResulPop
If _lJob
ConOut(Padc("E-mails recebidos com sucesso",80))
Else
MsgInfo("E-mail recebidos com sucesso" + cError)
Endif
ENDIF

RETURN lResulPop

43. I nt e gr a çã o bá sica com M sOffice

4 3 .1 . Ex por t a çã o pa r a EXCEL

A funcionalidade básica de export ação de infor m ações para o Micr osoft Excel ut iliza a função
DlgToExcel( ) , a qual perm it e que as inform ações em form at os de ar ray sej am geradas em um a
planilha.

D LGTOEXCEL( )

Realiza a export ação das inform ações do am bient e Prot heus em form at o de ar ray s para um a
planilha do Microsoft Ex cel.

 Sin t a x e : D lgToEx ce l( cOr ige m , cTit u lo, a D a dosCa b, a D a dosI t e n s)

 Pa r â m e t r os:

cOr ige m Cont eúdo fixo definido com o: “ GETDADOS”


cTit u lo Nom e par a exibição da planilha
a D a dosCa b Array cont endo os nom es dos cam pos que serão exibidos na planilha.
a D a dosI t e n s Array cont endo as inform ações dos cam pos, de acordo com a ordem do
array de cabeçalho.

 Re t or n o:

Nenhum .

Na export ação das infor m ações par a o Microsoft Excel deve- se at ent ar para as
colunas que possuírem inform ações alfanum éricas m as que cont ém apenas
núm eros. Para que est as colunas sej am exibidas cor ret am ent e deve ser
acr escent ado um caract er especial no início da st ring de form a que o Microsoft
Excel as reconheça com o t ext o e não com o num éricas.

- 643 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Ex e m plo de e x por t a çã o pa r a o M icr osoft Ex ce l u t iliz a n do a fu n çã o D lgToEx ce l( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Função | GExpExcel | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrição | EXPORTACAO PARA EXCEL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function GExpExcel()

Local aCabExcel :={}


Local aItensExcel :={}

// AADD(aCabExcel, {"TITULO DO CAMPO", "TIPO", NTAMANHO, NDECIMAIS})


AADD(aCabExcel, {"A1_FILIAL" ,"C", 02, 0})
AADD(aCabExcel, {"A1_COD" ,"C", 06, 0})
AADD(aCabExcel, {"A1_LOJA" ,"C", 02, 0})
AADD(aCabExcel, {"A1_NOME" ,"C", 40, 0})
AADD(aCabExcel, {"A1_MCOMPRA" ,"N", 18, 2})

MsgRun("Favor Aguardar.....", "Selecionando os Registros",;


{|| GProcItens(aCabExcel, @aItensExcel)})

MsgRun("Favor Aguardar.....", "Exportando os Registros para o Excel",;


{||DlgToExcel({{"GETDADOS",;
"POSIÇÃO DE TÍTULOS DE VENDOR NO PERÍODO",;
aCabExcel,aItensExcel}})})

Return

/*/
+-----------------------------------------------------------------------
| Função | GProcItens | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

Static Function GProcItens(aHeader, aCols)

Local aItem
Local nX

DbSelectArea("SA1")
DbSetOrder(1)
DbGotop()

- 644 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Continuação:

While SA1->(!EOF())

aItem := Array(Len(aHeader))

For nX := 1 to Len(aHeader)
IF aHeader[nX][2] == "C"
aItem[nX] := CHR(160)+SA1->&(aHeader[nX][1])
ELSE
aItem[nX] := SA1->&(aHeader[nX][1])
ENDIF
Next nX

AADD(aCols,aItem)
aItem := {}
SA1->(dbSkip())

End

Return

- 645 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


APÊN D I CES
Re la çã o de im a ge ns pa r a a plica çõe s visua is

AFASTAME BPMSDOCI COLTOT

AFASTAMENTO BPMSEDT1 CONTAI NR

ALT_CAD BPMSEDT2 DBG05

AMARELO BPMSEDT3 DBG06

ANALI TI CO BPMSEDT4 DBG09

ANALI TI C BPMSRELA DBG3

AGENDA BPMSTASK1 DESTI NOS

ALTERA BPMSTASK2 DESTI NOS2

AREA BPMSTASK3 DI SABLE

ASI ENTOS BPMSTASK4 DI SCAGEM

AUTOM BR_AMARELO DOWN

BAI XATI T BR_AZUL E5

BAR BR_AZUL_OCEAN EDI TABLE

BMPCALEN BR_CI NZA EXCLUI R

BMPEMERG BR_LARANJA FI LTRO

BMPGROUP BR_MARROM FI NAL

BMPI NCLUI R BR_PRETO FOLDER10

BMPPERG BR_VERDE FOLDER11

BMPPOST BR_VERDE_OCEAN FOLDER12

BMPTABLE BR_VERMELHO FOLDER14

BMPTRG BR_VERMELHO_OCEAN FOLDER5

BMPUSER BUDGET FOLDER6

BMPVI SUAL BUDGETY FOLDER7

BONUS CADEADO GEOROTA

- 646 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


BOTTOM CALCULADORA GRAF2D

BPMSDOC CANCEL GRAF3D

BPMSDOCA CHAVE2 HI STORI C

BPMSDOCE CHECKED I NSTRUME

I MPRESSAO PCO_I TALT PMSSETATOP

LBNO PCO_I TEXC PMSSETAUP

LBOK PCOCO PMSTASK1

LBTI K PCOCUBE PMSTASK2

LEFT PCOFXCANCEL PMSTASK3

LI NE PCOFXOK PMSTASK4

LI QCHECK PENDENTE PMSUSER

LJPRECO PESQUI SA PMSZOOMI N

LOCALI ZA PGNEXT PMSZOOMOUT

LUPA PGPREV POSCLI

MAQFOTO PMSCOLOR PRECO

MATERI AL PMSEDT3 PREV

METAS_BAI XO_16 PMSEDT4 PRI NT03

METAS_BAI XO_LEG PMSEXCEL PRODUTO

METAS_CI MA_16 PMSEXPALL RECALC

METAS_CI MA_LEG PMSEXPCMP RECORTAR

MSGHI GH PMSMAI S RI GHT

MSVI SI O PMSMATE RPMNEW

NEXT PMSMENOS RPMSAVE

NOTE PMSPESQ S4SB014N

NOVACELULA PMSPRI NT S4WB001N

OBJETI VO PMSRELA S4WB005N

- 647 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


OK PMSRRFSH S4WB006N

ORDEM PMSSETABOT S4WB007N

PARAMETROS PMSSETADI R S4WB008N

PCO_COI NC PMSSETADOWN S4WB009N

PCO_CONOR PMSSETAESQ S4WB010N

S4WB011N WEB CARAGANEW

S4WB014B WFCHK CARGASEQ

S4WB016N WFUNCHK CCTCALC

SALVAR ADDCONTAI NER CHAT

SDUI MPORT ADI CI ONAR_001 CHAT1

SDUPACK ARMAZEM CHAT2

SDUPROPR ATALHO CHAT3

SDUSETDEL AVGARMAZEM CHECK

SDUSOFTSEEK AVGBOX1 CHECKOK

SHORTCUTDEL AVGLBPAR1 CLOCK01

SHORTCUTEDI T AVGOI C1 CLOCK02

SHORTCUTMI NUS AVI AO CLOCK03

SHORTCUTNEW AZUL CLOCK04

SHORTCUTPLUS BALANCA DEVOLNF

SI MULACA BGCOLOR COBROWSR

SI MULACAO BMPPARAM COLFORM

SUGESTAO BMPCONS COMPTI TL

SUMARI O BMPCPO COMSOM

SVM BMPDEL CRI TI CA

TK_VERTI T BR_BRANCO COPYUSER

UNCHECKED BRANCO CTBLANC

- 648 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


UP BR_CANCEL CTBREPLA

USER BR_MARROM DBG07

VCDOWN BR_PI NK DELWEB

VCUP BTCALC COLOR

VENDEDOR BTPESQ DBG12

VERNOTA CARGA DBG10

DEPENDENTES F7_VERM F14_PI NK

GEO F8_NULL F14_PRET

EDI TWEB F10_AMAR F14_VERD

EMPI LHADEI RA F10_AZUL F14_VERM

ENABLE F10_CI NZ FÉRI AS

ESCALA F10_LARA FI LTRO1

ESTOMOVI F10_MARR FOLDER8

F5_AZUL F10_NULL FOLDER13

F5_NULL F10_PI NK FOLDER15

F5_VERD F10_PRET FORM

F5_VERM F10_VERD FRCOLOR

F6_NULL F10_VERM FRTOFFLI NE

F5_AMAR F11_NULL FRTONLI NE

F5_CI NZ F12_AMAR GEO

F5_LARA F12_AZUL GEOEMAI L

F5_MARR F12_CI NZ GEOTRECHO

F5_PI NK F12_LARA GERPROJ

F5_PRET F12_MARR GLOBO

F7_AMAR F12_PI NK I C_17

F7_AZUL F12_PRET I NSTRUME

- 649 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


F7_CI NZ F12_VERD LANDSCAPE

F7_LARA F12_VERM LI GHTBLU

F7_MARR F14_AMAR MDI HELP

F7_NULL F14_AZUL MDI LOGOFF

F7_PI NK F14_CI NZ MDI RUN

F7_PRET F14_LARA MDI SPOOL

F7_VERD F14_MARR MEDEXT

MENURUN RPMCABEC SDUFI ELDS

MPWI ZARD RPMCPO SDUFI ND

NCO RPMDES SDUGOTO

NEWWEB RPMFORM SDUNEW

NOCONNECT RPMFUNC SDUOPEN

NOCHECKED RPMGROUP SDUOPENI DX

NOMEDI CA RPMI MP SDUORDER

NORMAS RPMI MPORT SDURECALL

OPEN RPMNEW2 SDUREPL

OPERACAO RPMOPEN SDUSEEK

OUTLOOK RPMPERG SDUSTRUCT

PAPEL_ESCRI TO RPMTABLE SDUSUM

PEDI DO S4WB004N SDUZAP

PI N S4WB013N SEMSOM

PMSI NFO S4WB014A SOLI CI TA

PREDI O SALARI OS SSFONTES

PRI NT02 SAVECLOCK TAB1

PROCESSA SDUADDTBL TABPRI CE

PRODUT2 SDUAPPEND TEXTBOLD

- 650 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


PROJETPMS SDUCLOSE TEXTCENTER

PRTETQ SDUCLOSEI DX XCLOSE

QMT_COND SDUCOPYTO TEXTI TALI C

QMT_NO SDUCOUNT TEXTJUSTI FY

QMT_OK SDUCREATEI DX TEXTLEFT

RESPADEX SDUDELETE TEXTRI GHT

RESPONSA SDUDRPTBL TEXTUNDERLI NE

ROSA SDUERASE TK_ALTFI N

TK_CLI FI N BPMSEDT3A GCT_NEW

TK_FI ND BPMSEDT3E I NVOI CE1

TK_FONE BPMSEDT3I MSGGROUP

TK_HI STORY BPMSEDT4A MSGHI GH

TK_NOVO BPMSEDT4E PCO_COALT

TK_REFRESH BPMSEDT4I PCO_COEXC

TPOPAGTO1 BPMSREC PCO_I TI NC

UPDWARNI NG BPMSRECA PCOCOLA

UPDERROR BPMSRECE PCOCOPY

UPDI NFORMATI ON BPMSRECI PCOEDI T

VERDE BPMSRELAA PCOFX

VERMELHO BPMSRELAE PCOLOCK

VERMESCURO BPMSRELAI PEDI DO2

WATCH BPMSTSK1A PEDI DO2_MDI

CLI ENTE BPMSTSK1E PGRSAVE

ACAO BPMSTSK1I PMSAPONT

BOXBOM1 BPMSTSK2A PMSCANC

BOXBOM2 BPMSTSK2E PMSCOLUM

- 651 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


BOXBOM3 BPMSTSK2I PMSCONS

BOXBOM4 BPMSTSK3A PMSCUSTO

BOXBOM5 BPMSTSK3E PMSDATE

BPMSEDT1A BPMSTSK3I PMSESTRU

BPMSEDT1E BPMSTSK4A PMSEXCEL

BPMSEDT1I BPMSTSK4E PMSEXEC

BPMSEDT2A BPMSTSK4I PMSEXPEXC

BPMSEDT2E ENGRENAGEM2 PMSFI LTER

BPMSEDT2I GCT_EDI T PMSGRAPH

PMSNEXT MSGFORWD UNSELECTALL

PMSOPCAO MSGREPLY BSTART

PMSPESQ OMSDI VI DE BTURNSHARPLEFT


PMSPREV PMSUPDOWN BTURNSHARPRI GHT

PMSPREVI O SHAPE01 ENGRENAGEM

PMSPRI NT SHAPE02 PAGEDOWN

PMSPROG SHAPE03 PAGEUP

PMSSUPALOC SHAPE04 SELECT

PMSTOOLS SHAPE05 SELECTALL

PMSUSERP TRI DOWN BBEARRI GHT

REFRESH WORD BEND

SHAPE06 ROTEI RO BKEEPLEFT

TRI LEFT CLI PS_PQ BKEEPRI GHT

TRI RI GHT NEXT_PQ BLEFT

VI NCULA1 RELACI ONAMENTO_DI REI RA_PQ BRI GHT

BAHEAD PREV_PQ CANCEL

BBEARLEFT UP.GI F CONFI RM

- 652 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


DOWN GOTOP I NVERTSELECTI ON

GOBOTTOM

- 653 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


LI STAS DE EXERCÍ CI OS

I m plem ent ar a classe Aluno com os m ét odos New( ) , I nscrever( ) e Avaliar( ) .


01

Desenv olver um diálogo para int eragir com a classe Aluno desenvolvida no
02
ex er cício ant erior.

I m plem ent ar um a Enchoice para o cadast ro de produt os ( SB1) .


03

- 654 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Convert er o cadast ro desenvolvido no ex er cício ant erior para que o m esm o
04
ut ilize o obj et o MsMGet ( ) .

Desenv olver um a int erface de cadast r o que com bine os obj et os MsMGet e
05
MsNewGet Dados causando o efeit o de um a Modelo3( ) .

Adicionar na int erface de cadast r o desenvolvida no ex er cício ant erior um a


06 EnchoiceBar( ) com um bot ão definido pelo usuário que exiba o AxCadast ro de
um it em ut ilizado na int er face.

Convert er o font e DI ALOG_OBJETOS.PRW para sint axe orient ada à obj et os.
07

- 655 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Desenv olver um a MaWndBrow se ut ilizando um arquivo t em porário.
08

I m plem ent ar um a funcionalidade com m últ iplos TwBr owses que perm it a
09
pesquisar client es e visualizar os t ít ulos a r eceber dos m esm os.

I m plem ent ar um obj et o TFolder para m ont ar um r odapé para um a int er face
10
que cont enha MsMGet ( ) e MsNew Get Dados( ) .

I m plem ent ar a MsAdvSize( ) e MsObj Size( ) no font e desenvolvido no exercício


11
ant erior.

- 656 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Desenv olver um a MaWndBrowse ut ilizando um Alias gerado pela função
12
TcGenQry( ) .

Desenv olver um a MaWndBrowse ut ilizando um Alias gerado pela função


13
TcGenQry( ) para um banco de dados ext erno a aplicação ERP.

Desenv olver um a aplicação que ex ecut e a St ored Procedure padrão de


14
reprocessam ent o de saldos cont ábeis.

I m plem ent ar no font e WndSqlConn desenv olvido ant eriorm ent e as funções
15 TcI nclui( ) , TcAlt era( ) , TcExclui( ) com o uso das funções TEnchoice( ) e
TcSqlExec( ) .

- 657 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


I m plem ent ar um a função que realize o envio de um t ext o sim ples para um a
16
cont a de e- m ail @t ot vs, que perm it a sua fácil ident ificação.

I m plem ent ar um a rot ina que r ealize o r ecebim ent o do e- m ail enviado
17
ant eriorm ent e para a cont a de e- m ail @t ot vs.

I m plem ent ar um a rot ina aut om át ica para grav ar as inform ações no cadast ro
18
de client es ( MATA030) .

- 658 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


Pr oj e t o: Ava lia çã o pr á t ica do t r e ina m e nt o de AD VPL Ava nça do

Objetivos do projeto

 Contemplar o conteúdo do curso e estimular a prática da programação utilizando a linguagem


ADVPL;

 Acrescentar um grau de desafio ao treinamento;

Regras para entrega e apresentação

 Deverá ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos
necessários. A avaliação do projeto será realizada após a entrega, no prazo estabelecido pelo
instrutor;

 Pode ser realizado em grupos de até 03 pessoas. Caso existam alunos sem grupos, estes poderão
integrar equipes já formadas com o total de membros estabelecido, mediante aprovação do
instrutor;

Avaliação do projeto

 Mesmo peso da prova teórica, podendo substituí-la integralmente.


 Serão considerados os quesitos:
 Funcionalidades
 Clareza da programação
 Apresentação
 Otimização de técnicas e recursos apresentados no treinamento

Funcionalidades que compõe o projeto

Desenvolver uma aplicação utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:

Desenv olver um a aplicação de cadast ro ut ilizando a classe Aluno e os m ét odos


Pr oj e t o 0 1
disponíveis para a m esm a.

Convert er os font es do pacot e de oficina de program ação para orient ação a


Pr oj e t o 0 2
obj et os.

I m plem ent ar um a aplicação ADVPL que consult e e at ualize dados em um


Pr oj e t o 0 3
banco de int erface ext er no ao Pr ot heus.

- 659 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/


REFERÊN CI AS BI BLI OGRÁFI CAS
Re fe r ê n cia s bib liogr á fica s

Gestão empresarial com ERP


Ernesto Haberkorn, 2006

Pr ogr a m a çã o Or ie n t a da a Obj e t os com C + +


I van Luiz Marques Ricar t e, 1996

Modelagem e Projetos baseados em objetos


James Rumbaugh, 1994 – 11ª . Edição

Programação orientada à objetos no FiveW in


Gilmer – FiveWin Brasil

Oficina de Programação
Robson Luiz Estefani Gonçalves

Apostila de Treinamento - TReport


Tânia Bronzeri

Apostila de Treinamento - ADVPL


Educação corporativa

Apostila de Treinamento – Boas Práticas de Programação


Inteligência Protheus e Fábrica de Software

DEM – Documentação Eletrônica Microsiga


Microsiga Software S.A.

Materiais diversos de colaboradores Microsiga


Colaboradores Microsiga

Cola bor a dor e s

Revisão 01 Data: 04.2008


Arnaldo Raym undo Junior CSA
Luis Akira Tam ura Educação Corporat iva
Márcia Sat iko Sasaki Tokura ACR- N1_FRAMEW1
Pat ricia Lopes Legas Educação Corporat iva
Robson Luiz Est efani Gonçalves Fábrica de Soft war e
Sérgio Sueo Fuzinaka I nt eligência Prot heus

- 660 -

AD VPL Com ple t o

Document shared on https://www.docsity.com/pt/advpl-completo/4742058/

Você também pode gostar