Mat r iz Av. Br az Leme, 1.717 02511- 000 So Paulo SP Br asil. Tel.: 55 ( 11) 3981- 7001
www.micr osiga.com.br
- 2 -
ADVPL Compl et o
ESTRUTURA DO TREI NAMENTO
MDULO 01: Introduo programao ...................................................................................................................... 11 1. Lgica de Programao e Algoritmos .................................................................................................................... 11 1.1. Lgica de Programao ................................................................................................................ 11 1.2. Desenvolvendo algoritmos ............................................................................................................ 12 1.2.1. Estudando algoritmos ................................................................................................................................ 13 1.2.2. Teste de mesa ............................................................................................................................................ 15 2. Estruturas de programao .................................................................................................................................... 16 2.1. Diagrama de bloco ........................................................................................................................ 16 2.2. Estruturas de deciso e repetio ................................................................................................ 19 2.2.1. Estruturas de deciso ................................................................................................................................. 19 2.2.2. Estruturas de repetio .............................................................................................................................. 22 MDULO 02: A linguagem ADVPL ............................................................................................................................... 24 3. Estrutura de um Programa ADVPL ...................................................................................................................... 26 3.1. reas de um Programa ADVPL .................................................................................................. 28 4. Declarao e Atribuio de Variveis .................................................................................................................... 31 4.1. Tipo de Dados ................................................................................................................................ 31 4.2. Declarao de variveis ................................................................................................................ 32 4.3. Escopo de variveis ....................................................................................................................... 33 4.4. Entendendo a influncia do escopo das variveis ...................................................................... 37 4.5. Operaes com Variveis ............................................................................................................. 38 4.5.1. Atribuio de variveis .............................................................................................................................. 38 4.5.2. Operadores da linguagem ADVPL ............................................................................................................ 39 4.5.3. Operao de Macro Substituio ............................................................................................................... 44 4.5.4. Funes de manipulao de variveis ....................................................................................................... 45 5. Estruturas bsicas de programao ....................................................................................................................... 51 5.1. Estruturas de repetio ................................................................................................................ 51 5.1.1. Influenciando o fluxo de repetio ............................................................................................................ 54 5.2. Estruturas de deciso .................................................................................................................... 56 6. Arrays e Blocos de Cdigo ...................................................................................................................................... 60 6.1. Arrays ............................................................................................................................................ 60 6.1.1. Inicializando arrays ................................................................................................................................... 62 6.1.2. Funes de manipulao de arrays ............................................................................................................ 63 6.1.3. Cpia de arrays .......................................................................................................................................... 65 6.2. Listas de Expresses e Blocos de Cdigo .................................................................................... 67 6.2.1. Premissas para utilizao de Blocos de Cdigo ........................................................................................ 67 6.2.2. Lista de expresses .................................................................................................................................... 68 6.2.3. Blocos de Cdigo ...................................................................................................................................... 70 6.2.4. Funes para manipulao de blocos de cdigo ........................................................................................ 72 7. Funes ................................................................................................................................................................... 73 7.1. Tipos e escopos de funes ........................................................................................................... 74 7.2. Passagem de parmetros entre funes ...................................................................................... 77
- 3 -
ADVPL Compl et o
8. Diretivas de compilao .......................................................................................................................................... 83 MDULO 03: Desenvolvendo pequenas customizaes ................................................................................................ 88 9. ADVPL e o ERP Microsiga Protheus .................................................................................................................... 88 9.1. O Ambiente Protheus ................................................................................................................... 88 9.2. Organizao e configurao inicial do ambiente Protheus ....................................................... 92 9.3. O Configurador do Protheus ....................................................................................................... 98 9.3.1. Funcionalidades Abordadas ...................................................................................................................... 98 9.3.2. Estruturas bsicas da aplicao ERP Protheus .......................................................................................... 98 9.3.3. Acessando o mdulo Configurador ......................................................................................................... 101 9.4. Funcionalidades do Configurador ............................................................................................. 104 9.4.1. Dicionrio de Dados da aplicao ERP ................................................................................................... 105 9.4.2. Adio de tabelas ao Dicionrio de Dados .............................................................................................. 105 9.4.3. Adio de campos as tabelas do Dicionrio de Dados ............................................................................ 108 9.4.4. Adio de ndices para as tabelas do Dicionrio de Dados ..................................................................... 113 9.4.5. Adio de gatilhos para os campos das tabelas do sistema ..................................................................... 116 9.4.6. Criao de Tabelas Genricas ................................................................................................................. 118 9.4.7. Criao de Parmetros ............................................................................................................................. 119 10. TOTVS Development Studio ................................................................................................................................ 121 Desenvolvimento de pequenas customizaes ....................................................................................... 124 11. Acesso e manipulao de bases de dados em ADVPL ......................................................................................... 124 11.1. Diferenas e compatibilizaes entre bases de dados ............................................................... 125 11.2. Funes de acesso e manipulao de dados .............................................................................. 126 11.3. Diferenciao entre variveis e nomes de campos ................................................................... 131 11.4. Controle de numerao seqencial ............................................................................................ 132 12. Customizaes para a aplicao ERP .................................................................................................................. 133 12.1. Customizao de campos Dicionrio de Dados ..................................................................... 134 12.1.1. Validaes de campos e perguntas ..................................................................................................... 134 12.1.2. Pictures de formao disponveis ....................................................................................................... 136 12.2. Customizao de gatilhos Configurador ................................................................................ 138 12.3. Customizao de parmetros Configurador ......................................................................... 139 12.3.1. Funes para manipulao de parmetros .......................................................................................... 139 12.3.2. Cuidados na utilizao de um parmetro ............................................................................................ 140 12.4. Pontos de Entrada Conceitos, Premissas e Regras ............................................................... 141 13. Interfaces visuais .................................................................................................................................................. 142 13.1. Sintaxe e componentes das interfaces visuais ........................................................................... 142 13.2. Interfaces padres para atualizaes de dados ........................................................................ 145 13.2.1. AxCadastro() ...................................................................................................................................... 145 13.2.2. MBrowse() .......................................................................................................................................... 146 13.2.3. AxFunctions() ..................................................................................................................................... 150 APNDICES .................................................................................................................................................................. 152 BOAS PRTICAS DE PROGRAMAO .................................................................................................................... 152 14. Utilizao de Identao ........................................................................................................................................ 152 15. Capitulao de Palavras-Chave ........................................................................................................................... 153 15.1. Palavras em maisculo ............................................................................................................... 154
- 4 -
ADVPL Compl et o
16. Utilizao da Notao Hngara ........................................................................................................................... 154 17. Palavras reservadas .............................................................................................................................................. 155 LISTAS DE EXERCCIOS ........................................................................................................................................... 156 Mdulo 01: Introduo programao ................................................................................................. 156 Mdulo 02: A linguagem ADVPL ........................................................................................................... 157 Mdulo 03: Desenvolvendo pequenas customizaes ........................................................................... 160 MDULO 04: Desenvolvendo aplicaes em ADVPL ................................................................................................. 162 18. A linguagem ADVPL ............................................................................................................................................ 162 19. Estrutura de um Programa ADVPL .................................................................................................................... 164 19.1. reas de um Programa ADVPL ................................................................................................ 166 20. Declarao e Atribuio de Variveis .................................................................................................................. 169 20.1. Tipo de Dados .............................................................................................................................. 169 20.2. Declarao de variveis .............................................................................................................. 170 20.3. Escopo de variveis ..................................................................................................................... 171 20.4. Entendendo a influncia do escopo das variveis .................................................................... 175 21. Regras adicionais da linguagem ADVPL ............................................................................................................ 176 21.1. Palavras reservadas .................................................................................................................... 176 21.2. Pictures de formatao disponveis ........................................................................................... 177 22. Programas de Atualizao .................................................................................................................................... 178 22.1. Modelo1() ou AxCadastro() ....................................................................................................... 179 22.2. Modelo2() ..................................................................................................................................... 181 22.2.1. Componentes de uma tela no formato Modelo 2 ................................................................................ 181 22.2.2. Estrutura de um programa utilizando a Modelo2() ............................................................................. 189 22.2.3. Funo Modelo2() .............................................................................................................................. 197 22.3. Modelo3() ..................................................................................................................................... 201 22.3.1. Estrutura de um programa utilizando a Modelo3() ............................................................................. 204 22.3.2. Funo Modelo3() .............................................................................................................................. 213 22.4. Mbrowse() .................................................................................................................................... 217 22.4.1. AxFunctions() ..................................................................................................................................... 222 22.4.2. FilBrowse() ......................................................................................................................................... 224 22.4.3. EndFilBrw() ........................................................................................................................................ 224 22.4.4. PesqBrw() ........................................................................................................................................... 225 22.4.5. BrwLegenda () .................................................................................................................................... 225 22.5. MarkBrowse() ............................................................................................................................. 229 23. Arquivos e ndices Temporrios ........................................................................................................................... 233 23.1. Utilizao de arquivos e ndices temporrios ........................................................................... 233 23.2. Funes para manipulao de arquivos e ndices temporrios .............................................. 233 23.2.1. CriaTrab() ........................................................................................................................................... 233 23.2.2. dbUseArea() ....................................................................................................................................... 234 23.2.3. IndRegua() .......................................................................................................................................... 234 24. Relatrios no grficos ......................................................................................................................................... 238 24.1.1. Estrutura de relatrios baseados na SetPrint() .................................................................................... 238 25. Manipulao de arquivos I ................................................................................................................................... 248
- 5 -
ADVPL Compl et o
25.1. Gerao e leitura de arquivos em formato texto ...................................................................... 248 1. Famlia de funes de gravao e leitura de arquivos texto .................................................................... 249 2. Famlia de funes de gravao e leitura de arquivos texto .................................................................... 254 26. Oficina de programao I .................................................................................................................................... 256 26.1. Interfaces com sintaxe clssica ................................................................................................... 256 26.2. Rguas de processamento ........................................................................................................... 259 26.2.1. RptStatus() .......................................................................................................................................... 259 SETREGUA() .............................................................................................................................................. 261 INCREGUA() .............................................................................................................................................. 262 26.2.2. Processa() ........................................................................................................................................... 263 SETPROC() ................................................................................................................................................. 265 INCPROC() ................................................................................................................................................. 265 26.2.3. MsNewProcess(). ............................................................................................................................... 266 26.2.4. MsAguarde(). ..................................................................................................................................... 268 26.2.5. MsgRun(). ........................................................................................................................................... 270 26.3. ListBox() ...................................................................................................................................... 271 26.3.1. ListBox simples .................................................................................................................................. 271 26.3.2. ListBox mltiplas colunas .................................................................................................................. 274 26.4. ScrollBox() ................................................................................................................................... 276 26.5. ParamBox() .................................................................................................................................. 280 MDULO 05: Introduo a orientao objetos ......................................................................................................... 285 27. Conceitos de orientao objetos ........................................................................................................................ 285 27.1. Definies ..................................................................................................................................... 285 27.2. Conceitos Bsicos ........................................................................................................................ 288 27.3. O Modelo de Objetos (OMT) ..................................................................................................... 289 27.3.1. Objetos e Classes ................................................................................................................................ 289 27.3.2. Atributos ............................................................................................................................................. 290 27.3.3. Operaes e Mtodos ......................................................................................................................... 291 27.3.4. Sugestes de desenvolvimento ........................................................................................................... 292 28. Orientao a objetos em ADVPL ......................................................................................................................... 293 28.1. Sintaxe e operadores para orientao a objetos ....................................................................... 293 28.2. Estrutura de uma classe de objetos em ADVPL ...................................................................... 295 28.3. Implementao dos mtodos de uma classe em ADVPL ......................................................... 296 MDULO 06: ADVPL Orientado objetos I ............................................................................................................... 300 29. Componentes da interface visual do ADVPL ...................................................................................................... 300 29.1. Particularidades dos componentes visuais ................................................................................ 307 29.1.1. Configurando as cores para os componentes ...................................................................................... 307 30. Aplicaes com a interface visual do ADVPL ..................................................................................................... 309 30.1. Captura de informaes simples (Multi-Gets) ......................................................................... 309 30.1.1. Enchoice() .......................................................................................................................................... 310 30.1.2. MsMGet() ........................................................................................................................................... 312 30.2. Captura de mltiplas informaes (Multi-Lines) ..................................................................... 314 30.2.1. MsGetDB() ......................................................................................................................................... 315 30.2.2. MsGetDados() .................................................................................................................................... 319 30.2.3. MsNewGetDados() ............................................................................................................................. 323 30.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados() ............................................... 328
E-mail ........................................................................................................................................................... 548 Papel ............................................................................................................................................................. 549 Tamanho do papel ........................................................................................................................................ 549 Formato da impresso .................................................................................................................................. 549 Configuraes .............................................................................................................................................. 549 Ttulo ............................................................................................................................................................ 549 Ordem .......................................................................................................................................................... 549 Layout .......................................................................................................................................................... 549 Preview ........................................................................................................................................................ 549 Executar em segundo plano ......................................................................................................................... 550 39.1.3. Personalizao .................................................................................................................................... 550 39.1.3.1. Editando o layout do relatrio ....................................................................................................... 550 Nova estrutura do relatrio TReport: ........................................................................................................... 551 39.1.4. Definindo a Funo ReportDef() ........................................................................................................ 551 DEFINE REPORT ....................................................................................................................................... 552 DEFINE SECTION ..................................................................................................................................... 552 DEFINE CELL ............................................................................................................................................ 552 MDULO 08: Aplicaes ADVPL para o ERP ............................................................................................................ 553 40. Protheus e o TOPCONNECT / TOTVS DbAccess .............................................................................................. 553 40.1. Caractersticas tcnicas com o uso do TOTVS DbAccess ...................................................... 554 Comportamento de Queries Colunas Calculadas ...................................................................................... 554 Comportamento diferenciado com Bandos de Dados PostGres ................................................................... 556 Conceito de ndices Permanentes e Diferenas das RDDs .......................................................................... 557 Funcionamento Interno ................................................................................................................................ 557 Quebra de Compatibilidade com CodeBase/DBF ........................................................................................ 558 Lista dos cdigos de erro do TOPConnect / DbAccess ................................................................................ 559 40.2. Funes ADVPL para TOPCONNECT / TOTVS DbAccess .................................................. 560 Lista das funes de interao com a aplicao TopConnect / DbAccess: .................................................. 560 Lista das funes acessrias utilizadas nos fontes como facilitadoras: ........................................................ 560 Funes de interao com o TopConnect / DbAccess ................................................................................. 561 TCCANOPEN () .......................................................................................................................................... 561 TCCONTYPE() ........................................................................................................................................... 561 TCDELFILE() .............................................................................................................................................. 562 TCGENQRY() ............................................................................................................................................. 563 TCGETDB() ................................................................................................................................................ 563 TCLINK() .................................................................................................................................................... 564 TCQUERY() ................................................................................................................................................ 566 TCQUIT() .................................................................................................................................................... 567 TCSETCONN() ........................................................................................................................................... 567 TCSETFIELD() ........................................................................................................................................... 568 TCSPEXEC() ............................................................................................................................................... 570 TCSPEXIST() .............................................................................................................................................. 572 TCSQLERROR() ......................................................................................................................................... 572 TCSQLEXEC() ............................................................................................................................................ 573 TCSRVTYPE() ............................................................................................................................................ 573 TCUNLINK() .............................................................................................................................................. 574 TCCHKOBJ() .............................................................................................................................................. 575 TCEXEERROR() ......................................................................................................................................... 575 TCPGMEXE() ............................................................................................................................................. 576 TCSYSEXE() ............................................................................................................................................... 576 Funes acessrias para uso em fontes com interao com o TOTVS DbAccess ....................................... 577 CHANGEQUERY() .................................................................................................................................... 577 RETFULLNAME() ...................................................................................................................................... 578 RETSQLCOND() ........................................................................................................................................ 579 RETSQLNAME() ........................................................................................................................................ 579 RETSQLTABLE() ....................................................................................................................................... 580 SQLCOPY() ................................................................................................................................................. 580
- 9 -
ADVPL Compl et o
SQLORDER() .............................................................................................................................................. 581 SQLTOTRB() .............................................................................................................................................. 582 40.3. Aplicaes com controle de comunio com o Banco de Dados .............................................. 583 40.3.1. MaWndBrowse com Alias Temporrio gerado por Query ................................................................. 583 Exemplo: MaWndBrowse com Alias Temporrio gerado por Query .......................................................... 584 40.3.2. Banco de dados de interface ............................................................................................................... 595 Consideraes relevantes sobre as funes TCLink() e TCSetConn() ......................................................... 595 Consideraes complementares sobre o conceito de Banco de Dados de Interface ..................................... 596 40.4. Embedded SQL Facilitador de Querys ................................................................................. 598 Disponibilidade do Recurso ......................................................................................................................... 598 Caractersticas operacionais - Sintaxe .......................................................................................................... 599 Limitao: .................................................................................................................................................... 599 Erros de Compilao .................................................................................................................................... 600 Erros de Execuo ........................................................................................................................................ 600 Caractersticas operacionais - depurao ..................................................................................................... 601 Funo auxiliar - GETLastQuery() .............................................................................................................. 601 41. Funcionalidade MsExecAuto ............................................................................................................................... 603 Sobre a MsExecAuto e Rotinas Automticas .............................................................................................. 603 Quando utilizar a funcionalidade MsExecAuto ? ......................................................................................... 604 Processos da aplicao ERP com tratamentos para execuo por MsExecAuto .......................................... 604 Quando no utilizar a funcionalidade MsExecAuto ..................................................................................... 605 41.1. Desenvolvendo aplicaes com MsExecAuto ............................................................................ 606 Estrutura de uma rotina com execuo de MsExecAuto .............................................................................. 606 Variveis de controle ................................................................................................................................... 606 Montagem dos arrays de parmetros ............................................................................................................ 606 Definio dos parmetros especficos da rotina que ser executada ............................................................ 610 Controle de transao ................................................................................................................................... 611 Tratamento de mensagens de erro ................................................................................................................ 613 Aplicao completa de importao utilizando MsExecAuto: Carga de imobilizado ................................... 616 42. Recursos de envio de e-mail ................................................................................................................................. 629 Funes para manipulao de e-mails .......................................................................................................... 629 Detalhamento das funes de manipulao de e-mails ................................................................................ 629 CALLPROC() .............................................................................................................................................. 629 MAILSMTPON() ........................................................................................................................................ 630 MAILPOPON() ............................................................................................................................................ 630 MAILSMTPOFF() ....................................................................................................................................... 631 MAILPOPOFF() .......................................................................................................................................... 631 MAILRECEIVE() ........................................................................................................................................ 632 MAILAUTH() .............................................................................................................................................. 633 POPMSGCOUNT() ..................................................................................................................................... 634 MAILSEND() .............................................................................................................................................. 634 MAILGETERR() ......................................................................................................................................... 635 Exemplos de utilizao das funcionalidades de envio e recebimento de e-mail .......................................... 635 Envio de mensagens utilizando sintaxe clssica .......................................................................................... 635 Envio de mensagens utilizando funes ...................................................................................................... 638 Recebimento de mensagens utilizando funes ........................................................................................... 641 43. Integrao bsica com MsOffice .......................................................................................................................... 643 43.1. Exportao para EXCEL ........................................................................................................... 643 DLGTOEXCEL() ........................................................................................................................................ 643 Exemplo de exportao para o Microsoft Excel utilizando a funo DlgToExcel() .................................... 644 APNDICES .................................................................................................................................................................. 646 Relao de imagens para aplicaes visuais .......................................................................................... 646 LISTAS DE EXERCCIOS ........................................................................................................................................... 654
- 10 -
ADVPL Compl et o
Projeto: Avaliao prtica do treinamento de ADVPL Avanado ...................................................... 659 REFERNCIAS BIBLIOGRFICAS .......................................................................................................................... 660
- 11 -
ADVPL Compl et o
MDULO 01: I nt r oduo pr ogr amao
1. Lgi ca de Pr ogr amao e Al gor i t mos
No aprendi zado de qual quer l i nguagem de pr ogramao essenci al desenvol ver os concei t os rel aci onados a l gi ca e a t cni ca da escri t a de um programa.
Com foco nest a necessi dade, est e t pi co i r descr ever r esumi dament e os concei t os envol vi dos no pr ocesso de desenvol vi ment o de um programa at ravs dos concei t os r el aci onados :
E Lgi ca de programao E Al gori t mos E Di agramas de bl ocos
1.1. Lgi ca de Pr ogr amao
Lgi ca
A l gi ca de programao necessri a para pessoas que desej am t rabal har com desenvol vi ment o de si st emas e pr ogramas, el a permi t e defi ni r a seqnci a l gi ca para o desenvol vi ment o. Ent o o que l gi ca?
Lgi ca de pr ogr amao a t cni ca de encadear pen sament os par a at i ngi r det er mi n ado obj et i v o.
Seq nci a Lgi ca
Est es pensament os, podem ser descri t os como uma seqnci a de i nst rues, que devem ser segui das para se cumpri r uma det ermi nada t arefa.
Seq nci a Lgi ca so passos ex ecut ados at at i n gi r u m obj et i v o ou sol uo de u m pr obl ema.
I nst r ues
Na li nguagem comum, ent ende- se por i nst rues um conj unt o de r egras ou normas defi ni das para a reali zao ou emprego de al go .
Em i nformt i ca, porm, i nst ruo a i nformao que i ndi ca a um comput ador uma ao el ement ar a execut ar . Convm r essal t ar que uma ordem i sol ada no per mi t e real i zar o processo compl et o, par a i sso necessri o um conj unt o de i nst rues col ocadas em ordem seqenci al l gi ca.
Por exempl o, se qui ser mos fazer uma omel et e de bat at as, pr eci sar emos col ocar em prt i ca uma sri e de i nst rues: descascar as bat at as, bat er os ovos, fri t ar as bat at as, et c. evi dent e que essas i nst rues t m que ser execut adas em uma ordem adequada no se pode descascar as bat at as depoi s de fri t - l as.
Dessa manei ra, uma inst ruo t omada em separado no t em mui t o sent i do; para obt ermos o resul t ado, preci samos col ocar em prt i ca o conj unt o de t odas as i nst rues, na ordem cor ret a.
- 12 -
ADVPL Compl et o
I nst r ues so um conj unt o de r egr as ou nor mas def i n i das par a a r eal i zao ou empr ego de al go. Em i nf or mt i ca, o que i ndi ca a um comput ador uma ao el ement ar a ex ecut ar .
Al gor i t mo
Um al gori t mo for malment e uma seqnci a fi nit a de passos que l evam a execuo de uma t arefa. Podemos pensar em al gori t mo como uma recei t a, uma seqnci a de i nst rues que do cabo de uma met a especfi ca. Est as t arefas no podem ser r edundant es nem subj et i vas na sua defi ni o, devem ser cl aras e preci sas.
Como exempl os de al gori t mos podemos ci t ar os al gori t mos das oper aes bsi cas ( adi o, mul t ipli cao, di vi so e subt rao) de nmer os r eai s deci mai s. Out ros exempl os seri am os manuai s de aparel hos el et rni cos, como um vi deocasset e, que expl i cam passo- a- passo como, por exempl o, gravar um event o.
At mesmo as coi sas mai s si mpl es, podem ser descri t as por seqnci as l gi cas, t ai s como:
E Chupar uma bal a 1. Pegar a bal a; 2. Ret i rar o papel ; 3. Chupar a bal a; 4. Jogar o papel no li xo.
E Somar doi s nmeros quai squer 1. Escr eva o pri mei ro nmer o no r et ngul o A; 2. Escr eva o segundo nmer o no r et ngul o B; 3. Some o nmero do r et ngul o A com nmero do r et ngul o B e col oque o resul t ado no r et ngul o C.
1.2. Desenv ol v endo al gor i t mos
Pseu docdi go
Os al gori t mos so descri t os em uma linguagem chamada pseudocdi go. Est e nome uma al uso post eri or i mplement ao em uma l inguagem de pr ogramao, ou sej a, quando for ut ili zada a linguagem a de pr ogramao pr opri ament e di t a como, por exempl o, ADVPL.
Por i sso os al gori t mos so i ndependent es das li nguagens de pr ogr amao, sendo que ao cont rri o de uma linguagem de pr ogramao no exi st e um formali smo rgi do de como deve ser escri t o o al gori t mo.
O al gori t mo deve ser fci l de i nt erpret ar e fci l de codi fi car. Ou sej a, el e deve ser o i nt ermedi ri o ent r e a li nguagem fal ada e a l i nguagem de pr ogramao.
- 13 -
ADVPL Compl et o
Regr as par a const r uo do Al gor i t mo
Para escr ever um al gori t mo preci samos descrever a seqnci a de i nst rues, de manei ra si mpl es e obj et i va. Para i sso ut ili zaremos al gumas t cni cas:
1. Usar soment e um verbo por frase; 2. I magi nar que voc est desenvol vendo um al gori t mo para pessoas que no t rabal ham com i nformt i ca; 3. Usar frases curt as e si mpl es; 4. Ser obj et i vo; 5. Procurar usar pal avras que no t enham sent i do dbi o.
Fases
Para i mpl ement ar de um al gori t mo de si mpl es i nt erpr et ao e codi fi cao necessri o i ni ci al ment e di vi di r o pr obl ema apr esent ado em t rs fases fundament ais, as quai s so:
E ENTRADA: So os dados de ent rada do al gori t mo; E PROCESSAMENTO: So os procedi ment os ut ilizados para chegar ao r esul t ado fi nal ; E SA DA: So os dados j processados.
1.2.1. Est udando al gor i t mos
Nest e t pi co sero demonst rados al guns algori t mos do cot i di ano, os quai s foram i mpl ement ados ut ili zando os pri ncpi os descri t os nos t pi cos ant eri or es.
Mascar um ch i cl et e Ut i l i zar um t el ef on e pbl i co car t o Fr i t ar um ov o Tr ocar l mpadas Descascar bat at as Jogar o j ogo da f or ca Cal cul ar a mdi a de n ot as Jogar o j ogo da v el ha cont r a o al gor i t mo
Mascar um ch i cl et e
1. Pegar o chi cl et e 2. Ret i rar o papel 3. Mast i gar 4. Jogar o papel no li xo
Ut i l i zar um t el ef on e pbl i co - car t o
1. Ret i rar o t el efone do gancho 2. Esperar o si nal 3. Col ocar o cart o 4. Di scar o nmer o 5. Fal ar no t el efone 6. Col ocar o t el efone no ganho
- 14 -
ADVPL Compl et o
Fr i t ar um ov o
1. Pegar fri gi dei ra, ovo, leo e sal 2. Col ocar l eo na fri gi dei ra 3. Ascender o fogo 4. Col ocar a fri gi dei ra no fogo 5. Esperar o l eo esquent ar 6. Quebr ar o ovo na fri gi dei ra 7. Jogar a casca no l i xo 8. Ret i rar a fri gi dei ra do fogo quando o ovo est i ver no pont o 9. Desl i gar o fogo 10. Col ocar sal a gost o
Tr ocar l mpadas
1. Se a l mpada est i ver fora do al cance, pegar uma escada 2. Pegar a l mpada nova 3. Se a l mpada quei mada est i ver quent e, pegar um pano 4. Ti rar l mpada quei mada 5. Col ocar l mpada nova
Descascar bat at as
1. Pegar faca, baci a e bat at as 2. Col ocar gua na baci a 3. Enquant o houver bat at as, descascar as bat at as 3.1. Col ocar as bat at as descascadas na baci a
Jogar o j ogo da f or ca
1. Escol her a pal avra 2. Mont ar o di agrama do j ogo 3. Enquant o houver l acunas vazi as e o corpo est i ver i ncompl et o: 3.1. Se acert ar a l et ra: escr ever na l acuna corr espondent e 3.2. Se er rar a l et ra: desenhar uma part e do corpo na forca
Cal cul ar a mdi a de n ot as
1. Enquant o houver not as a ser em recebi das: 1.1. Receber a not a;
2. Some t odas as not as r ecebi das; 3. Di vi da o t ot al obt i do pela quant idade de not as r ecebi das; 4. Exi ba a mdi a das not as.
Jogar o j ogo da v el ha cont r a o al gor i t mo
1. Enquant o exi st i r um quadrado l i vre e ni ngum ganhou ou perdeu o j ogo: 1.1. Esper e a j ogada do adver sri o, cont i nue depoi s 1.2. Se cent r o est i ver li vre: j ogue no cent r o 1.3. Seno, se o adversri o possui r 2 quadrados em li nha com um quadr ado li vre, j ogue nest e quadrado 1.4. Seno, se h al gum cant o li vre, j ogue nest e cant o
- 15 -
ADVPL Compl et o
1.2.2. Test e de mesa
Aps desenvol ver um al gori t mo el e dever sempr e ser t est ado. Est e t est e chamado de TESTE DE MESA, que si gni fi ca segui r as i nst rues do al gori t mo de manei ra pr eci sa para veri fi car se o procedi ment o ut ilizado est cor ret o ou no.
Para aval i ar a apli cao do t est e de mesa, ut ilizaremos o al gori t mo de cal cul ar a mdi a de not as:
Al gor i t mo: Cal cul ar a mdi a de not as
1. Enquant o houver not as a serem r ecebi das: a. Receber a not a;
2. Some t odas as not as recebi das; 3. Di vi da o t ot al obt i do pel a quant i dade de not as r ecebi das; 4. Exi ba a mdi a das not as.
Test e de mesa:
1. Par a cada not a i nfor mada, r eceber e r egi st rar na t abel a abai xo:
I D Not a
2. Ao t rmi no das not as, a t abel a dever cont er t odas as not as i nformadas, como abai xo:
I D Not a 1 8.0 2 7.0 3 8.0 4 8.0 5 7.0 6 7.0
3. Somar t odas as not as: 45 4. Di vi di r a soma das not as, pel o t ot al de not as informado: 45/ 6 7.5 5. Exi bi r a mdi a obt i da: Mensagem( Mdi a: 7.5)
- 16 -
ADVPL Compl et o
2. Est r ut ur as de pr ogr amao
2.1. Di agr ama de bl oco
O di agrama de bl ocos uma forma padr oni zada e efi caz para r epr esent ar os passos l gi cos de um det ermi nado processament o.
Com o di agrama podemos defi ni r uma seqnci a de smbol os, com si gni fi cado bem defi ni do, port ant o, sua pri nci pal funo a de faci lit ar a vi suali zao dos passos de um pr ocessament o.
Si mbol ogi a
Exi st em di ver sos smbolos em um di agrama de bl oco. No quadr o abai xo est o represent ados al guns dos smbol os mai s ut ili zados:
Smbol o Funo
Ter mi nador I ndi ca o i nci o e o fi m de um processament o.
Pr ocessament o Processament o em geral .
Ent r ada Manu al I ndi ca a ent rada de dados at ravs do t ecl ado.
Deci so I ndi ca um pont o no qual dever ser efet uada uma escol ha ent r e duas si t uaes possvei s.
Ex i bi o Most ra os r esul t ados obt i dos com um processament o.
Document o I ndi ca um document o ut ili zado pel o processament o, sej a para ent rada de i nformaes ou para exi bi o dos dados di sponvei s aps um processament o.
Cada smbol o i r cont er uma descri o pert i nent e a forma com o qual o mesmo foi ut ilizado no fl uxo, i ndi cando o processament o ou a i nformao que o mesmo r epr esent a.
- 17 -
ADVPL Compl et o
Repr esent ao de al gor i t mos at r av s de di agr amas de bl oco
Al gor i t mo 01: Fr i t ar u m ov o
1. Pegar fri gi dei ra, ovo, l eo e sal 2. Col ocar l eo na fri gi dei ra 3. Ascender o fogo 4. Col ocar a fri gi dei ra no fogo 5. Esperar o l eo esquent ar 6. Quebrar o ovo na fri gi dei ra 7. Jogar a casca no li xo 8. Ret i rar a fri gi dei ra do fogo quando o ovo est i ver no pont o 9. Desl i gar o fogo 10. Col ocar sal a gost o
- 18 -
ADVPL Compl et o
Al gor i t mo 02: Cal cul ar a mdi a de not as
1. Enquant o houver not as a serem r ecebi das: a. Receber a not a;
2. Some t odas as not as recebi das; 3. Di vi da o t ot al obt i do pel a quant i dade de not as r ecebi das; 4. Exi ba a mdi a das not as.
- 19 -
ADVPL Compl et o
2.2. Est r ut ur as de deci so e r epet i o
A ut ilizao de est rut ur as de deci so e r epet i o em um al gori t mo per mi t e a real i zao de aes r el aci onadas a si t uaes que i nfluenci am na execuo e sol uo do pr obl ema.
Como foco na ut ili zao da li nguagem ADVPL sero i l ust radas as segui nt es est rut uras:
E Est r ut u r as de deci so o I F. .. ELSE o DO CASE ... CASE
E Est r ut u r as de r epet i o o WHI LE... END o FOR... NEXT
2.2.1. Est r ut ur as de deci so
Os comandos de deci so so ut ili zados em al gori t mos cuj a sol uo no obt i da at ravs da ut ili zao de aes merament e seqenci ais, permi t indo que est e aval i e as condi es necessri as para opt ar por uma ou out ra manei ra de cont i nuar seu fl uxo.
As est rut uras de deci so que sero anal i sadas so:
E I F...ELSE E DO CASE ... CASE
I F...ELSE
A est rut ura I F... ELSE ( Se/ Seno) permi t e a anli se de uma condi o e a part i r da qual ser execut ada uma de duas aes possvei s: se a anli se da condi o r esul t ar em um valor verdadei ro ou se a anlise da condi o r esul t ar em um val or fal so.
Repr esent ao 01 : I F...ELSE com aes par a ambas as si t uaes
Ao vinculada ao resultado verdadeiro Anlise da condio Verdadeiro Falso Aes anteriores ... Continuao do fluxo aps a tomada da deciso Ao vinculada ao resultado falso
- 20 -
ADVPL Compl et o
Est a est rut ura permi t e ai nda que sej a execut ada apenas uma ao, na si t uao em que a a anli se da condi o result ar em um val or verdadei ro.
Repr esent ao 02 : I F...ELSE soment e com ao par a si t u ao v er dadei r a
Ao vinculada ao resultado verdadeiro Anlise da condio Verdadeiro Falso Aes anteriores ... Continuao do fluxo aps a tomada da deciso
Apesar das l i nguagens de pr ogramao possurem vari aes para a est rut ura I F. .. ELSE, concei t ual ment e t odas as r epr esent aes podem ser descri t as com base no model o apr esent ado.
A li nguagem ADVPL possui uma vari ao para a est rut ura I F... ELSE, descri t a como I F. .. ELSEI F.. .ELSE.
Com est a est rut ura possvel real i zar a anli se de di versas condi es em seqnci a, para as quai s ser aval i ada soment e a ao da pri mei ra expresso cuj o anli se r esul t ar em um val or verdadei ro.
- 21 -
ADVPL Compl et o
DO CASE...CASE
A est rut ura DO CASE... ENDCASE ( Caso) permi t e a anli se de di versas condi es consecut i vas, para as quai s soment e a condi o a pri mei ra condi o verdadei ra ser sua ao vi ncul ada execut ada.
O r ecurso de anl i se de ml t i pl as condi es necessri o para sol uo de probl emas mai s compl exos, nos quai s as possi bili dades de sol uo superam a mer a anli se de um ni co resul t ado verdadei ro ou fal so.
Anlise da condio 1 Verdadeiro Falso Aes anteriores ... Continuao do fluxo aps a tomada da deciso Ao vinculada a condio 1 Anlise da condio 2 Verdadeiro Ao vinculada a condio 2 Anlise da condio N Verdadeiro Ao vinculada a condio N Falso Falso Falso
Apesar das li nguagens de programao possurem vari aes para a est rut ura DO CASE.. . CASE, concei t ual ment e t odas as repr esent aes podem ser descri t as com base no model o apresent ado.
- 22 -
ADVPL Compl et o
2.2.2. Est r ut ur as de r epet i o
Os comandos de r epet io so ut i lizados em al gori t mos nas si t uaes em que necessri o real i zar uma det ermi nada ao ou um conj unt o de aes para um nmero defi ni do ou i ndefi ni do de vezes, ou ai nda enquant o uma det ermi nada condi o for verdadei ra.
As est rut uras de deci so que sero anal i sadas so:
E WHI LE...END E FOR...TO...NEXT
WHI LE...END
Nest a est rut ura, o conj unt o de aes ser execut ado enquant o a anli se de uma condi o de refernci a resul t ar em um val or verdadei ro. i mport ant e veri fi car que o bl oco soment e ser execut ado, i nclusi ve se na pri mei ra anli se a condi o resul t ar em um val or verdadei ro.
Repr esent ao: WHI LE...END
Ao vinculada ao resultado verdadeiro Anlise da condio Verdadeiro Falso Aes anteriores ... Continuao do fluxo ... Loop
Exi st em di ver sas vari aes para a est rut ura WHI LE... END, na qual h a possi bili dade da pri mei ra execuo ser r eal i zada sem a anli se da condi o, a qual val er apenas a part i r da segunda execuo.
A li nguagem ADVPL acei t a a si nt axe DO WHI LE.. .ENDDO, que em out ras linguagens represent a a si t uao descri t a ant eri orment e ( anli se da condi o soment e a part i r da segunda execuo) , mas em ADVPL est a si nt axe t em o mesmo efei t o do WHI LE... END.
- 23 -
ADVPL Compl et o
FOR...TO...NEXT
Nest a est rut ura, o conj unt o de aes ser execut ado uma quant i dade de vezes defi ni da, normal ment e referenci ada como passo .
Para cada passo real izado pel a est rut ura FOR...TO.. .NEXT, ser avali ada uma condi o que veri fi car se foi at i ngido o nmero de execues previ ament e defi ni do. Dest a forma a est rut ura compreende um cont rol e de nmero de passos execut ados, o qual increment ado na anli se da expresso NEXT.
Semel hant e a est rut ura WHI LE. .. END, a pri mei ra ao soment e ser real i zada medi ant e um resul t ado verdadei ro na anli se da condi o.
Repr esent ao: FOR.. .TO...NEXT
Ao vinculada ao resultado verdadeiro Anlise da condio Verdadeiro Falso Aes anteriores ... Continuao do fluxo ... Incrementa o contador de passos
A est rut ura FOR... TO. . .NEXT, dependendo da linguagem de programao, permi t e a r eali zao de um i ncrement o si mpl es a cada execuo da i nst ruo NEXT, ou a adi o de out ro val or ao cont ador, o qual dever especi fi cado de acordo com a si nt axe da li nguagem.
Em ADVPL pode ser ut ili zada a i nst ruo STEPS para al t erar o val or a ser adi ci onado no cont ador de passos a cada execuo da i nst ruo NEXT, sendo que est e val or poder ser at negat i vo, vi abili zando uma cont agem decrescent e.
- 24 -
ADVPL Compl et o
MDULO 02: A l i nguagem ADVPL
A Li nguagem ADVPL t eve seu i nci o em 1994, sendo na verdade uma evol uo na ut i lizao de linguagens no padro xBase pel a Mi crosi ga Soft ware S.A. ( Cl i pper, Vi sual Obj ect s e depoi s Fi veWi n) . Com a cri ao da t ecnol ogi a Prot heus, era necessri o criar uma linguagem que suport asse o padro xBase para a manut eno de t odo o cdi go exi st ent e do si st ema de ERP Si ga Advanced. Foi ent o cri ada a li nguagem chamada Advanced Pr ot heus Language.
O ADVPL uma ext enso do padro xBase de comandos e funes, operador es, est rut uras de cont r ol e de fl uxo e pal avras reservadas, cont ando t ambm com funes e comandos di sponi bili zados pel a Mi crosi ga que a t orna uma linguagem complet a para a cri ao de apli caes ERP pront as para a I nt ernet . Tambm uma l i nguagem ori ent ada a obj et os e event os, permi t indo ao programador desenvol ver apli caes vi suais e cri ar suas prpri as cl asses de obj et os.
Quando compi l ados, t odos os arqui vos de cdi go t ornam- se uni dades de i nt eli gnci a bsi cas, chamados APO s ( de Advanced Prot heus Obj ect s) . Tai s APO s so mant i dos em um reposi t ri o e car regados di nami cament e pel o PROTHEUS Ser ver para a execuo. Como no exi st e a li nkedi o, ou uni o fsi ca do cdigo compi l ado a um det ermi nado mdul o ou apli cao, funes cri adas em ADVPL podem ser execut adas em qual quer pont o do ambi ent e Advanced Pr ot heus.
O compil ador e o i nt erpret ador da li nguagem ADVPL o prpr i o ser vi dor PROTHEUS ( PROTHEUS Ser ver) , e exi st e um ambi ent e vi sual para desenvol vi ment o i nt egrado ( PROTHEUSI DE) onde o cdi go pode ser cri ado, compi l ado e depurado.
Os programas em ADVPL podem cont er comandos ou funes de i nt er face com o usuri o. De acordo com t al caract erst i ca, t ai s programas so subdi vi di dos nas seguint es cat egori as:
Pr ogr amao Com I n t er f ace Pr pr i a com o Usu r i o
Nest a cat egori a ent ram os pr ogramas desenvol vi dos para serem execut ados at ravs do t ermi nal remot o do Prot heus, o Pr ot heus Remot e. O Pr ot heus Remot e a apli cao encar r egada da i nt erface e da i nt erao com o usuri o, sendo que t odo o pr ocessament o do cdi go em ADVPL, o acesso ao banco de dados e o gerenci ament o de conexes efet uado no Prot heus Ser ver. O Pr ot heus Remot e o pri nci pal mei o de acesso a execuo de r ot i nas escri t as em ADVPL no Prot heus Server, e por i sso permi t e execut ar qual quer t i po de cdi go, t enha el e i nt erface com o usuri o ou no. Por m nest a cat egori a so consi derados apenas os programas que real i zem al gum t i po de i nt erface r emot a ut i lizando o prot ocol o de comuni cao do Prot heus.
Podem- se cri ar r ot i nas para a cust omi zao do si st ema ERP Mi cr osi ga Prot heus, desde processos adi ci onai s at mesmo rel at ri os. A grande vant agem apr ovei t ar t odo o ambi ent e mont ado pel os mdul os do ERP Mi crosi ga Prot heus. Por m, com o ADVPL possvel at mesmo cri ar t oda uma apli cao, ou mdul o, do comeo.
Todo o cdi go do si st ema ERP Mi crosi ga Prot heus escri t o em ADVPL.
Pr ogr amao Sem I nt er f ace Pr pr i a com o Usu r i o
As rot i nas cri adas sem i nt erface so consi deradas nest a cat egori a porque geral ment e t m uma ut ili zao mai s especfi ca do que um processo adi ci onal ou um rel at ri o novo. Tai s rot i nas no t m i nt erface com o usuri o at ravs do Pr ot heus Remot e, e qual quer t ent at i va nesse sent i do
- 25 -
ADVPL Compl et o
( como a cri ao de uma j anel a padro) ocasi onar uma exceo em t empo de execuo. Est as rot i nas so apenas processos, ou Jobs, execut ados no Pr ot heus Ser ver. Al gumas vezes, a i nt erface dest as rot i nas fi ca a cargo de apli caes ext ernas, desenvol vi das em out ras linguagens, que so responsvei s por i ni ci ar os pr ocessos no ser vi dor Pr ot heus at ravs dos mei os di sponvei s de i nt egrao e conect i vi dade no Prot heus.
De acordo com a ut ilizao e com o mei o de conect i vi dade ut ili zado, est as rot i nas so subcat egori zadas assi m:
E Pr ogr amao por Pr ocessos
Rot i nas escri t as em ADVPL podem ser i ni ci adas como pr ocessos i ndi viduai s ( sem i nt erface) no Prot heus Server at ravs de duas manei ras: I ni ci adas por out ra r ot i na ADVPL at ravs da chamada de funes como St art Job( ) ou Call Proc( ) ou i ni ci adas aut omat i cament e na i ni ci alizao do Pr ot heus Server ( quando pr opri ament e confi gurado) .
E Pr ogr amao de RPC
At ravs de uma bi bli ot eca de funes di sponvel no Prot heus ( uma API de comuni cao) , podem- se execut ar r ot inas escri t as em ADVPL di ret ament e no Prot heus Server, at r avs de apli caes ext ernas escri t as em out ras l inguagens. I st o o que se chama de RPC ( de Remot e Procedure Call, ou Chamada de Pr ocediment os Remot a) .
O servi dor Prot heus t ambm pode execut ar r ot i nas em ADVPL em out ros servi dores Pr ot heus at ravs de conexo TCP/ I P di r et a ut ilizando o concei t o de RPC. Do mesmo modo, apl i caes ext ernas podem r equi si t ar a execuo de r ot i nas escri t as em ADVPL at ravs de conexo TCP/ I P di ret a. Programao Web
O Pr ot heus Ser ver pode t ambm ser execut ado como um servi dor Web, r espondendo a requi si es HTTP. No moment o dest as r equi si es, pode execut ar r ot inas escri t as em ADVPL como pr ocessos i ndi vi duai s, envi ando o resul t ado das funes como ret orno das requi si es para o cli ent e HTTP ( como por exempl o, um Br owser de I nt ernet ) . Qual quer rot i na escri t a em ADVPL que no cont enha comandos de i nt erface pode ser execut ada at ravs de r equi si es HTTP. O Pr ot heus permi t e a compil ao de arqui vos HTML cont endo cdi go ADVPL embut i do. So os chamados arqui vos ADVPL ASP, para a cri ao de pgi nas di nmi cas.
E Pr ogr amao Tel Net
Tel Net part e da gama de pr ot ocol os TCP/ I P que permi t e a conexo a um comput ador remot o at ravs de uma apl i cao cl i ent e dest e pr ot ocol o. O PROTHEUS Ser ver pode emul ar um t ermi nal Tel Net , at ravs da execuo de r ot i nas escri t as em ADVPL. Ou sej a, pode- se escrever rot i nas ADVPL cuj a i nt erface fi nal ser um t ermi nal Tel Net ou um col et or de dados mvel .
- 26 -
ADVPL Compl et o
3. Est r ut ur a de um Pr ogr ama ADVPL
Um programa de comput ador nada mai s do que um grupo de comandos l ogi cament e di spost os com o obj et i vo de execut ar det ermi nada t arefa. Esses comandos so gravados em um arqui vo t ext o que t ransformado em uma li nguagem execut vel por um comput ador at ravs de um pr ocesso chamado compilao. A compi l ao subst i t ui os comandos de al t o nvel ( que os humanos compr eendem) por inst rues de bai xo nvel ( compreendi da pelo si st ema operaci onal em execuo no comput ador) . No caso do ADVPL, no o si st ema operaci onal de um comput ador que i r execut ar o cdi go compil ado, mas si m o Prot heus Ser ver.
Dent r o de um programa, os comandos e funes ut i lizados devem segui r regras de si nt axe da linguagem ut ili zada, poi s caso cont rri o o pr ograma ser i nt errompi do por er ros. Os er ros podem ser de compi l ao ou de execuo.
Er ros de compi l ao so aquel es encont rados na si nt axe que no per mi t em que o arqui vo de cdi go do programa sej a compi l ado. Podem ser comandos especi fi cados de forma err nea, ut ili zao i nvli da de operador es, et c.
Er ros de execuo so aquel es que acont ecem depoi s da compil ao, quando o programa est sendo execut ado. Podem ocor rer por i nmeras razes, mas geral ment e se refer em as funes no exi st ent es, ou vari vei s no cri adas ou i ni ciali zadas, et c.
Li nh as de Pr ogr ama
As li nhas exi st ent es dent ro de um arqui vo t ext o de cdi go de programa podem ser li nhas de comando, l inhas de coment ri o ou l i nhas mi st as.
E Li nh as de Comando
Li nhas de comando possuem os comandos ou i nst rues que sero execut adas. Por exempl o:
Local nCnt Local nSoma : = 0 For nCnt : = 1 To 10 nSoma + = nCnt Next nCnt
E Li nh as de Coment r i o
Li nhas de coment ri o possuem um t ext o qual quer, mas no so execut adas. Servem apenas para document ao e para t ornar mai s fci l o ent endi ment o do pr ograma. Exi st em t r s formas de se coment ar l i nhas de t ext o. A pri mei ra del as ut ili zar o si nal de * ( ast eri sco) no comeo da li nha:
* Pr ograma para cl cul o do t ot al * Aut or: Mi cr osi ga Soft ware S.A. * Dat a: 2 de out ubr o de 2001
- 27 -
ADVPL Compl et o
Todas as l inhas i ni ci adas com um si nal de ast eri sco so consi deradas como coment ri o. Pode- se ut ilizar a pal avra NOTE ou doi s smbol os da l et ra "e" comer ci al ( &&) para r eal izar a funo do si nal de ast eri sco. Por m t odas est as for mas de coment ri o de li nhas so obsol et as e exi st em apenas para compat i bili zao com o padro xBase. A mel hor manei ra de coment ar linhas em ADVPL ut ili zar duas barr as t ransver sai s:
/ / Programa para cl culo do t ot al / / Aut or: Mi cr osi ga Soft ware S.A. / / Dat a: 2 de out ubro de 2001
Out ra forma de document ar t ext os ut i lizar as barras t ransversai s j unt ament e com o ast eri sco, podendo- se coment ar t odo um bl oco de t ext o sem pr eci sar coment ar l inha a linha:
/ * Programa para cl cul o do t ot al Aut or: Mi cr osi ga Soft ware S.A. Dat a: 2 de out ubro de 2001 * /
Todo o t ext o encont rado ent r e a abert ura ( i ndi cada pel os caract er es / * ) e o fechament o ( indi cada pel os caract er es * / ) consi derado como coment ri o.
E Li nh as Mi st as
O ADVPL t ambm per mi t e que exi st am l inhas de comando com coment ri o. I st o possvel adi ci onando- se as duas barras t ransver sai s ( / / ) ao fi nal da linha de comando e adi ci onando- se o t ext o do coment ri o:
Local nCnt Local nSoma : = 0 / / I ni ci ali za a vari vel com zer o para a soma For nCnt : = 1 To 10 nSoma + = nCnt Next nCnt
E Tamanho da Li n ha
Assi m como a li nha fsica, del i mit ada pel a quant i dade de caract er es que pode ser di gi t ado no edi t or de t ext os ut ili zado, exi st e uma l inha consi derada li nha l gi ca. A li nha l gi ca, aquel a consi derada para a compil ao como uma ni ca li nha de comando.
A pri ncpi o, cada li nha di gi t ada no arqui vo t ext o di ferenci ada aps o pressi onament o da t ecl a < Ent er> . Ou sej a, a l inha l gi ca, a li nha fsi ca no arqui vo. Por m al gumas vezes, por li mi t ao fsi ca do edi t or de t ext o ou por est t i ca, pode- se "quebrar" a linha l gi ca em mai s de uma li nha fsi ca no arqui vo t ext o. I st o efet uado ut ili zando- se o si nal de pont o- e- vrgul a ( ; ) .
I f ! Empt y( cNome) .And. ! Empt y( cEnd) .And. ; < ent er > ! Empt y( cTel ) .And. ! Empt y( cFax) .And. ; < ent er> ! Empt y( cEmail )
GravaDados( cNome,cEnd,cTel ,cFax,cEmai l )
Endi f
- 28 -
ADVPL Compl et o
Nest e exempl o exi st e uma linha de comando para a checagem das var i vei s ut ilizadas. Como a linha t orna- se mui t o grande, pode- se di vi di- l a em mai s de uma li nha fsi ca ut ilizando o si nal de pont o- e- vrgul a. Se um si nal de pont o- e- vr gul a for esqueci do nas duas pri mei ras li nhas, durant e a execuo do programa ocor rer um err o, poi s a segunda li nha fsi ca ser consi derada como uma segunda li nha de comando na compil ao. E durant e a execuo est a linha no t er sent i do.
3.1. r eas de um Pr ogr ama ADVPL
Apesar de no ser uma li nguagem de padr es rgi dos com rel ao est rut ura do programa, i mport ant e i dent i fi car al gumas de suas part es. Consi der e o pr ograma de exempl o abai xo:
# i ncl ude prot heus. ch
/ * + = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = + | Pr ograma: Cl cul o do Fat ori al | | Aut or : Mi cr osi ga Soft ware S.A. | | Dat a : 02 de out ubr o de 2001 | + = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = + * /
User Funct i on Cal cFat or ( )
Local nCnt Local nResul t ado : = 1 / / Resul t ado do fat ori al Local nFat or : = 5 / / Nmer o para o cl cul o
/ / Cl cul o do fat ori al For nCnt : = nFat or To 1 St ep - 1 nResul t ado * = nCnt Next nCnt
/ / Exi be o r esul t ado na t el a, at ravs da funo al ert Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ; " " + cVal ToChar( nResul t ado) )
/ / Termi na o pr ograma Ret urn
A est rut ura de um pr ogr ama ADVPL compost a pel as segui nt es reas:
E rea de I dent i fi cao - Decl arao dos i ncl udes - Decl arao da funo - I dent i fi cao do pr ogr ama
E rea de Aj ust es I ni ci ai s - Decl arao das vari vei s
E Corpo do Programa - Preparao para o processament o - Processament o
E rea de Encer rament o
- 29 -
ADVPL Compl et o
r ea de I dent i f i cao
Est a uma rea que no obri gat ri a e dedi cada a document ao do programa. Quando exi st ent e, cont m apenas coment ri os expl i cando a sua finali dade, dat a de cri ao, aut or , et c. , e aparece no comeo do programa, ant es de qual quer li nha de comando.
O format o para est a rea no defi ni do. Pode- se col ocar qual quer t i po de i nformao desej ada e escol her a format ao apr opri ada.
# i ncl ude prot heus.ch
/ * + = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = + | Pr ograma: Cl cul o do Fat ori al | | Aut or : Mi cr osi ga Soft ware S.A. | | Dat a : 02 de out ubr o de 2001 | + = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = + * /
User Funct i on Cal cFat or ( )
Opci onal ment e podem- se i nclui r defi ni es de const ant es ut ili zadas no programa ou i ncluso de arqui vos de cabeal ho nest a r ea.
r ea de Aj u st es I ni ci ai s
Nest a rea geral ment e se fazem os aj ust es i ni ci ai s, i mport ant es para o cor ret o funci onament o do programa. Ent re os aj ust es se encont ram decl araes de vari vei s, i ni ci ali zaes, abert ura de arqui vos, et c. Apesar do ADVPL no ser uma li nguagem rgi da e as vari vei s poderem ser decl aradas em qual quer l ugar do programa, aconsel hvel faz- l o nest a rea vi sando t ornar o cdi go mai s l egvel e facili t ar a i dent i fi cao de vari vei s no ut ili zadas.
Local nCnt Local nResul t ado : = 0 / / Resul t ado do fat ori al Local nFat or : = 10 / / Nmero para o cl cul o
Cor po do Pr ogr ama
nest a r ea que se encont ram as l inhas de cdi go do pr ograma. onde se real i za a t arefa necessri a at ravs da organi zao l gi ca dest as li nhas de comando. Espera- se que as l i nhas de comando est ej am organizadas de t al modo que no fi nal dest a rea o resul t ado esperado sej a obt i do, sej a el e armazenado em um arqui vo ou em vari vei s de memri a, pront o par a ser exi bi do ao usuri o at ravs de um r el at ri o ou na t el a.
/ / Cl cul o do fat ori al For nCnt : = nFat or To 1 St ep - 1 nResul t ado * = nCnt Next nCnt
- 30 -
ADVPL Compl et o
A preparao para o pr ocessament o formada pel o conj unt o de vali daes e processament os necessri os ant es da r eali zao do pr ocessament o em si .
Avali ando o processament o do cl cul o do fat orial descri t o ant eri orment e, pode- se defi ni r que a vali dao i ni ci al a ser r eali zada o cont edo da vari vel nFat or, poi s a mesma det ermi nar a corr et a execuo do cdi go.
/ / Cl cul o do fat ori al nFat or : = Get Fat or( ) / / Get Fat or funo il ust rat i va na qual a vari vel recebe a i nformao do usuri o.
I f nFat or < = 0 Al ert ( I nformao i nvlida ) Ret urn Endi f
For nCnt : = nFat or To 1 St ep - 1 nResul t ado * = nCnt Next nCnt
r ea de Encer r ament o
nest a rea onde as fi nalizaes so efet uadas. onde os arqui vos abert os so fechados, e o resul t ado da execuo do pr ogr ama ut ili zado. Pode- se exi bi r o r esult ado armazenado em uma vari vel ou em um arqui vo ou si mpl esment e fi nali zar, caso a t arefa j t enha si do t oda compl et ada no corpo do programa. nest a rea que se encont r a o encerrament o do programa. Todo programa em ADVPL deve sempre t ermi nar com a pal avra chave r et urn.
/ / Exi be o r esul t ado na t el a, at ravs da funo al ert Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ; " " + cVal ToChar( nResul t ado) )
/ / Termi na o pr ograma Ret urn
- 31 -
ADVPL Compl et o
4. Decl ar ao e At r i bui o de Var i v ei s
4.1. Ti po de Dados
O ADVPL no uma li nguagem de t i pos rgidos ( st rongl y t yped) , o que si gni fi ca que vari vei s de memri a podem r eceber di fer ent es t i pos de dados durant e a execuo do programa.
As vari vei s podem t ambm cont er obj et os, mas os t i pos pri mri os da l i nguagem so:
Numr i co
O ADVPL no di fer enci a val ores i nt ei ros de val ores com pont o fl ut uant e, port ant o podem- se cri ar vari vei s numri cas com qual quer val or dent ro do i nt erval o permi t i do. Os segui nt es el ement os so do t i po de dado numri co:
2 43.53 0.5 0.00001 1000000
Uma vari vel do t i po de dado numri co pode cont er um nmer o de dezoi t o dgi t os i ncl uindo o pont o fl ut uant e, no i nt erval o de 2.2250738585072014 E308 at 1.7976931348623158 E+ 308.
Lgi co
Val ores l gi cos em ADVPL so i dent i fi cados at r avs de .T. ou .Y. para verdadei ro e .F. ou .N. para fal so ( i ndependent ement e se os caract er es est i ver em em mai scul o ou mi nscul o) .
Car act er e
St ri ngs ou cadei as de caract er es so i dent i fi cadas em ADVPL por bl ocos de t ext o ent r e aspas dupl as ( ") ou aspas si mpl es ( ' ) :
"Ol mundo! " ' Est a uma st ri ng' "Est a ' out ra' st ri ng"
Uma vari vel do t i po caract er e pode cont er st ri ngs com no mxi mo 1 MB, ou sej a, 1048576 caract eres.
Dat a
O ADVPL t em um t i po de dados especfi co para dat as. I nt ernament e as vari vei s dest e t i po de dado so armazenadas como um nmero cor respondent e a dat a Jul i ana.
Vari vei s do t i po de dados Dat a no podem ser decl aradas di ret ament e, e si m at ravs da ut ili zao de funes especfi cas como por exempl o CTOD( ) que convert e uma st ri ng para dat a.
- 32 -
ADVPL Compl et o
Ar r ay
O Ar ray um t i po de dado especi al . a di sposi o de out r os el ement os em col unas e li nhas. O ADVPL suport a ar rays uni di mensi onai s ( vet or es) ou mul t i di mensi onai s ( mat ri zes) . Os el ement os de um arr ay so acessados at r avs de ndi ces numri cos i ni ci ados em 1, i dent i fi cando a li nha e col una para quant as di menses exi st i rem.
Arrays devem ser ut ilizadas com caut el a, poi s se forem mui t o grandes podem exauri r a memri a do servi dor.
Bl oco de Cdi go
O bl oco de cdi go um t i po de dado especi al . ut ilizado para armazenar i nst rues escri t as em ADVPL que podero ser execut adas post eri orment e.
4.2. Decl ar ao de v ar i vei s
Vari vei s de memri a so um dos r ecursos mai s i mport ant es de uma linguagem. So r eas de memri a cri adas para armazenar i nformaes ut ili zadas por um progr ama para a execuo de t arefas. Por exempl o, quando o usuri o di gi t a uma i nformao qual quer , como o nome de um produt o, em uma t el a de um programa est a informao armazenada em uma vari vel de memri a para post eri or ment e ser gravada ou i mpressa.
A part i r do moment o que uma vari vel cri ada, no necessri o mai s se r efer enci ar ao seu cont edo, e si m ao seu nome.
O nome de uma vari vel um i dent i fi cador ni co o qual deve r espei t ar um mx i mo de 1 0 car act er es. O ADVPL no i mpede a cri ao de uma vari vel de memr i a cuj o nome cont enha mai s de 10 caract er es, por m apen as os 10 pr i mei r os ser o consi der ados para a l ocalizao do cont edo armazenado.
Port ant o se forem cri adas duas vari vei s cuj os 10 pri mei ros car act er es for em i guai s, como nTot al Geral Anual e nTot al Geral Mensal , as refer nci as a qual quer uma del as no pr ograma resul t aro o mesmo, ou sej a, sero a mesma vari vel :
nTot al Geral Mensal : = 100 nTot al Geral Anual : = 300 Al ert ( "Val or mensal : " + cVal ToChar( nTot al Geral Mensal ) )
Quando o cont edo da vari vel nTot al Geral Mensal exi bi do, o seu val or ser de 300. I sso acont ece porque no moment o que esse val or foi at ri budo vari vel nTot al Geral Anual , o ADVPL consi der ou apenas os 10 pri mei ros caract er es ( assi m como o faz quando deve exi bi r o val or da vari vel nTot alGeral Mensal ) , ou sej a, consi der ou- as como a mesma vari vel . Assi m o val or ori ginal de 100 foi subst i t udo pel o de 300.
- 33 -
ADVPL Compl et o
4.3. Escopo de var i v ei s
O ADVPL no uma linguagem de t i pos rgidos para vari vei s, ou sej a, no necessri o i nformar o t i po de dados que det ermi nada varivel i r cont er no moment o de sua decl arao, e o seu val or pode mudar durant e a execuo do pr ograma.
Tambm no h necessi dade de decl arar vari vei s em uma seo especfi ca do seu cdi go font e, embora sej a aconsel hvel decl arar t odas as vari vei s necessri as no comeo, t ornando a manut eno mai s fci l e evi t ando a decl arao de vari vei s desnecessri as.
Para decl arar uma vari vel deve- se ut ili zar um ident ificador de escopo. Um i dent i fi cador de escopo uma pal avra chave que i ndi ca a que cont ext o do pr ograma a vari vel decl arada pert ence. O cont ext o de vari vei s pode ser l ocal ( vi suali zadas apenas dent r o do pr ograma at ual) , pblico ( vi sualizadas por qual quer out ro programa) , ent r e out r os.
O Cont ex t o de Var i v ei s dent r o de um Pr ogr ama
As vari vei s decl aradas em um programa ou funo, so vi svei s de acordo com o escopo onde so defi nidas. Como t ambm do escopo depende o t empo de exi st nci a das vari vei s. A defi ni o do escopo de uma vari vel efet uada no moment o de sua decl arao.
Local nNumero : = 10
Est a li nha de cdi go decl ara uma vari vel chamada nNumero i ndi cando que pert ence seu escopo l ocal .
Os i dent i fi cador es de escopo so:
E Local E St at i c E Pri vat e E Publi c
O ADVPL no rgi do em rel ao decl arao de vari vei s no comeo do programa. A i ncluso de um i dent i fi cador de escopo no necessri o para a decl arao de uma vari vel , cont ant o que um val or l he sej a at ri budo.
nNumer o2 : = 15
Quando um val or at r i budo uma vari vel em um programa ou funo, o ADVPL cri ar a vari vel caso el a no t enha si do decl arada ant eri orment e. A vari vel ent o cri ada como se t i vesse si do decl arada como Pri vat e.
Devi do a essa caract erst i ca, quando se pret ende fazer uma at ri bui o a uma vari vel decl arada pr evi ament e mas escr eve- se o nome da vari vel de forma i ncorr et a, o ADVPL no gerar nenhum err o de compil ao ou de execuo. Poi s compr eender o nome da vari vel escri t o de forma i ncorr et a como se fosse a cri ao de uma nova vari vel . I st o al t erar a l gi ca do pr ograma, e um er ro mui t as vezes di fcil de i dent i fi car.
- 34 -
ADVPL Compl et o
Var i v ei s de escopo l ocal
Vari vei s de escopo l ocal so pert encent es apenas ao escopo da funo onde foram decl aradas e devem ser expli ci t ament e decl aradas com o i dent i fi cador LOCAL, como no exempl o:
Funct i on Pai ( ) Local nVar : = 10, aMat r i z : = { 0,1,2,3} . < comandos> . Filha( ) . < mai s comandos> . Ret urn( .T.)
Nest e exempl o, a vari vel nVar foi decl arada como l ocal e at ri buda com o val or 10. Quando a funo Fil ha execut ada, nVar ainda exi st e mas no pode ser acessada. Quando a execuo da funo Pai t ermi nar, a vari vel nVar dest r uda. Qual quer vari vel com o mesmo nome no programa que chamou a funo Pai no afet ada.
Vari vei s de escopo l ocal so cri adas aut omat i cament e cada vez que a funo onde for em decl aradas for at i vada. El as cont i nuam a exi st i r e mant m seu val or at o fi m da at i vao da funo ( ou sej a, at que a funo r et orne o cont rol e para o cdi go que a execut ou) . Se uma funo chamada r ecursi vament e ( por exempl o, chama a si mesma) , cada chamada em recurso cri a um novo conj unt o de vari vei s l ocai s.
A vi si bilidade de vari vei s de escopo l ocai s i dnt i ca ao escopo de sua decl arao, ou sej a, a vari vel vi svel em qual quer l ugar do cdi go font e em que foi decl arada. Se uma funo chamada r ecursi vament e, apenas as vari vei s de escopo l ocal cri adas na mai s r ecent e at i vao so vi svei s.
Var i v ei s de escopo st at i c
Vari vei s de escopo st at i c funci onam basi cament e como as vari vei s de escopo l ocal , mas mant m seu val or at ravs da execuo e devem ser decl aradas expl i ci t ament e no cdi go com o i dent i fi cador STATI C.
O escopo das vari vei s st at i c depende de onde so decl aradas. Se for em decl aradas dent r o do corpo de uma funo ou procedi ment o, seu escopo ser l i mit ado quel a rot i na. Se forem decl aradas for a do corpo de qual quer rot i na, seu escopo afet a a t odas as funes decl aradas no font e.
- 35 -
ADVPL Compl et o
Nest e exempl o, a vari vel nVar decl arada como st at i c e i ni ci ali zada com o val or 10:
Funct i on Pai ( ) St at i c nVar : = 10 . < comandos> . Filha( ) . < mai s comandos> . Ret ur n( .T.)
Quando a funo Fil ha execut ada, nVar ai nda exi st e mas no pode ser acessada. Di fer ent e de vari vei s decl aradas como LOCAL ou PRI VATE, nVar cont i nua a exist i r e mant m seu val or at ual quando a execuo da funo Pai t ermina. Ent ret ant o, soment e pode ser acessada por execues subseqent es da funo Pai .
Var i v ei s de escopo pr i v at e
A decl arao opci onal para vari vei s pri vadas. Mas podem ser decl aradas expl i ci t ament e com o i dent i fi cador PRI VATE.
Adi ci onal ment e, a at ri bui o de val or a uma vari vel no cri ada ant eri orment e aut omat i cament e cri a a vari vel como pri vada. Uma vez cri ada, uma vari vel pri vada cont i nua a exi st i r e mant m seu val or at que o programa ou funo onde foi cri ada t ermi ne ( ou sej a, at que a funo onde foi cri ada ret orne para o cdi go que a execut ou) . Nest e moment o, aut omat i cament e dest r uda.
possvel cri ar uma nova vari vel pri vada com o mesmo nome de uma vari vel j exi st ent e. Ent ret ant o, a nova ( dupli cada) vari vel pode apenas ser cri ada em um nvel de at i vao i nferi or ao nvel onde a vari vel foi decl arada pel a pri mei ra vez ( ou sej a, apenas em uma funo chamada pel a funo onde a vari vel j havi a si do cri ada) . A nova vari vel pri vada i r esconder qual quer out r a vari vel pri vada ou pbli ca ( vej a a document ao sobr e vari vei s pbli cas) com o mesmo nome enquant o exi st i r.
Uma vez cri ada, uma vari vel pri vada visvel em t odo o pr ogr ama enquant o no for dest ruda aut omat i cament e quando a rot i na que a cri ou t ermi nar ou uma out ra vari vel pri vada com o mesmo nome for cri ada em uma subfuno chamada ( nest e caso, a vari vel exi st ent e t orna- se i nacessvel at que a nova vari vel pri vada sej a dest r uda) . Em t ermos mai s si mpl es, uma vari vel pri vada vi svel dent ro da funo de cri ao e t odas as funes chamadas por est a, a menos que uma funo chamada cri e sua pr pri a vari vel pri vada com o mesmo nome.
- 36 -
ADVPL Compl et o
Por ex empl o:
Funct i on Pai ( ) Pri vat e nVar : = 10 < comandos> . Filha( ) < mai s comandos> . Ret ur n( .T.)
Nest e exempl o, a vari vel nVar cri ada com escopo pri vat e e i ni ci ali zada com o val or 10. Quando a funo Fi lha execut ada, nVar ai nda exi st e e, di ferent e de uma vari vel de escopo l ocal , pode ser acessada pel a funo Fil ha. Quando a funo Pai t erminar, nVar ser dest ruda e qual quer decl arao de nVar ant eri or se t ornar acessvel novament e.
No ambi ent e ERP Pr ot heus, exi st e uma conveno adi ci onal a qual deve ser respei t ada que vari vei s em uso pel a apli cao no sej am i ncorr et ament e mani pul adas. Por est a conveno deve ser adi ci onado o caract er _ ant es do nome de vari vei s PRI VATE e PUBLI C. Mai ores i nformaes avali ar o t pi co: Boas Prt i cas de Pr ogramao.
Ex empl o: Pri vat e _dDat a
Var i v ei s de escopo publ i c
Podem- se cri ar vari vei s de escopo publi c di nami cament e no cdi go com o i dent i fi cador PUBLI C. As vari vei s dest e escopo cont i nuam a exi st i r e mant m seu val or at o fi m da execuo da t hread ( conexo) .
possvel cri ar uma vari vel de escopo pri vat e com o mesmo nome de uma vari vel de escopo publi c exi st ent e, ent r et ant o, no permi t ido cri ar uma vari vel de escopo publi c com o mesmo nome de uma vari vel de escopo pri vat e exi st ent e.
Uma vez cri ada, uma vari vel de escopo publi c vi svel em t odo o programa onde foi decl arada at que sej a escondida por uma vari vel de escopo pri vat e cri ada com o mesmo nome. A nova vari vel de escopo pri vat e cri ada esconde a vari vel de escopo publi c exi st ent e, e est a se t ornar i nacessvel at que a nova var i vel pri vat e sej a dest ruda. Por exempl o:
Funct i on Pai ( ) Publi c nVar : = 10 < comandos> . Filha( ) < mai s comandos> . Ret ur n( .T.)
- 37 -
ADVPL Compl et o
Nest e exempl o, nVar cri ada como publi c e i nici ali zada com o val or 10. Quando a funo Fi l ha execut ada, nVar ai nda exi st e e pode ser acessada. Di fer ent e de vari vei s l ocai s ou pri vat es, nVar ai nda exi st e aps o t rmi no da a execuo da funo Pai .
Di ferent ement e dos out ros i dent i fi cadores de escopo, quando uma var i vel decl arada como pbli ca sem ser i ni ci ali zada, o val or assumi do fal so ( .F.) e no nul o ( nil) .
No ambi ent e ERP Pr ot heus, exi st e uma conveno adi ci onal a qual deve ser respei t ada que vari vei s em uso pel a apli cao no sej am i ncorr et ament e mani pul adas. Por est a conveno deve ser adi ci onado o caract er _ ant es do nome de vari vei s PRI VATE e PUBLI C. Mai ores i nformaes avali ar o t pi co: Boas Prt i cas de Pr ogramao.
Ex empl o: Publ i c _cRot ina
4.4. Ent endendo a i nf l unci a do escopo das var i v ei s
Se est a l inha for execut ada em um programa ADVPL, ocorr er um err o de execuo com a mensagem "vari abl e does not exi st : nPercent ual ", poi s est a vari vel est sendo ut ili zada em uma expr esso de cl cul o sem t er si do decl arada. Para sol uci onar est e er ro, deve- se decl arar a vari vel previ ament e:
Nest e exempl o, as vari vei s so decl aradas pr evi ament e ut ilizando o i dent i fi cador de escopo local. Quando a li nha de cl cul o for execut ada, o er ro de vari vel no exi st ent e, no mai s ocor rer. Por m vari vei s no i ni ci alizadas t m sempr e o val or default nul o ( Nil ) e est e val or no pode ser ut ili zado em um cl cul o poi s t ambm gerar err os de execuo ( nul o no pode ser di vi dido por 100) . A resol uo dest e pr obl ema efet uada i nici ali zando- se a vari vel at ravs de uma das for mas:
Local nPercent ual : = 10, nResul t ado nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )
A di ferena ent re o l t i mo exempl o e os doi s ant eri or es que a vari vel i ni ci ali zada no moment o da decl arao. Em ambos os exempl os, a vari vel pri mei ro decl arada e ent o i ni ci alizada em uma out ra l inha de cdi go.
- 38 -
ADVPL Compl et o
aconsel hvel opt ar pel o operador de at ri bui o compost o de doi s pont os e si nal de i gual , poi s o operador de at ri bui o ut ilizando soment e o si nal de igual pode ser faci l ment e confundi do com o operador r el aci onal ( para comparao) durant e a cri ao do programa.
4.5. Oper aes com Var i vei s
4.5.1. At r i bui o de var i vei s
Uma vez que um val or l he sej a at ri budo, o t ipo de dado de uma vari vel i gual ao t i po de dado do val or at ri budo. Ou sej a, uma vari vel passa a ser numri ca se um nmer o l he at ri budo, passa a ser caract ere se uma st ri ng de t ext o l he for at ri buda, et c. Por m mesmo que uma vari vel sej a de det ermi nado t i po de dado, pode- se mudar o t i po da vari vel at ri bui ndo out ro t i po a el a:
01 Local xVari avel / / Decl ara a vari vel i ni ci al ment e com val or nul o 02 03 xVari avel : = "Agora a vari vel caract er e.. . " 04 Al ert ( "Val or do Text o: " + xVari avel ) 05 06 xVari avel : = 22 / / Agora a vari vel numr i ca 07 Al ert ( cVal ToChar( xVari avel ) ) 08 09 xVari avel : = .T. / / Agora a vari vel l gi ca 10 I f xVari avel 11 Al ert ( "A vari vel t em val or verdadei ro.. .") 12 El se 13 Al ert ( "A vari vel t em val or fal so. ..") 14 Endi f 15 16 xVari avel : = Dat e( ) / / Agora a vari vel dat a 17 Al ert ( "Hoj e : " + Dt oC( xVari avel ) ) 18 19 xVari avel : = nil / / Nul o novament e 20 Al ert ( "Val or nul o: " + xVari avel ) 21 22 Ret urn
No programa de exempl o ant eri or, a vari vel xVari avel ut i lizada para armazenar di ver sos t i pos de dados. A l et ra "x" em mi nscul o no comeo do nome ut ili zada para indi car uma vari vel que pode cont er di versos t i pos de dados, segundo a Not ao Hngara ( consul t e document ao especfi ca para det al hes) . Est e programa t r oca os val ores da vari vel e exi be seu cont edo para o usuri o at ravs da funo ALERT( ) . Essa funo r ecebe um parmet r o que deve ser do t i po st ri ng de caract ere, por i sso dependendo do t i po de dado da vari vel xVari avel necessri o fazer uma converso ant es.
Apesar dessa fl exi bili dade de ut i lizao de vari vei s, devem- se t omar cui dados na passagem de parmet r os para funes ou comandos, e na concat enao ( ou soma) de val or es. Not e a linha 20 do programa de exempl o. Quando est a li nha execut ada, a vari vel xVari avel cont m o val or nul o. A t ent at i va de soma de t i pos de dados di fer ent es ger a er r o de execuo do programa. Nest a l inha do exempl o, ocorr er um err o com a mensagem "t ype mi smat ch on + " .
Excet uando- se o caso do val or nul o, para os demai s devem ser ut i lizadas funes de conver so quando necessri o concat enar t i pos de dados di fer ent es ( por exempl o, nas li nhas 07 e 17.
- 39 -
ADVPL Compl et o
Not e t ambm que quando uma vari vel do t i po de dado l gi co, el a pode ser ut ilizada di ret ament e para checagem ( l inha 10) :
I f xVari avel o mesmo que I f xVari avel = .T.
4.5.2. Oper ador es da l i nguagem ADVPL
Oper ador es comuns
Na document ao sobr e vari vei s h uma breve demonst rao de como at ri bui r val ores a uma vari vel da forma mai s si mpl es. O ADVPL ampli a si gni fi cat i vament e a ut ili zao de vari vei s at ravs do uso de expr esses e funes.
Uma expresso um conj unt o de operadores e oper andos cuj o r esul t ado pode ser at ri budo a uma vari vel ou ent o anali sado para a t omada de deci ses. Por exempl o:
Local nSal ari o : = 1000, nDescont o : = 0.10 Local nAument o, nSal Liquido nAument o : = nSal ari o * 1.20 nSal Li quido : = nAument o * ( 1- nDescont o)
Nest e exempl o so ut ili zadas al gumas expr esses para cal cul ar o sal ri o lquido aps um aument o. Os operandos de uma expr esso podem ser uma vari vel , uma const ant e, um campo de arqui vo ou uma funo.
Oper ador es Mat emt i cos
Os operador es ut ilizados em ADVPL para cl culos mat emt i cos so:
+ Adi o - Subt rao * Mul t ipli cao / Di vi so * * ou ^ Exponenci ao % Mdul o ( Rest o da Di vi so)
Oper ador es de St r i n g
Os operador es ut ilizados em ADVPL para t rat ament o de caract eres so:
+ Concat enao de st ri ngs ( uni o) - Concat enao de st ri ngs com el i minao dos brancos fi nai s das st ri ngs i nt ermedi ri as $ Comparao de Subst ri ngs ( cont i do em)
- 40 -
ADVPL Compl et o
Oper ador es Rel aci on ai s
Os operador es ut ilizados em ADVPL para operaes e avali aes r el acionai s so:
< Comparao Menor > Comparao Mai or = Comparao I gual = = Comparao Exat ament e I gual ( para caract er es) < = Comparao Menor ou I gual > = Comparao Mai or ou I gual < > ou # ou ! = Comparao Di fer ent e
Oper ador es Lgi cos
Os operador es ut ilizados em ADVPL para operaes e avali aes l gi cas so:
.And. E l gi co .Or . OU l gi co .Not . ou ! NO l gi co
Oper ador es de At r i bu i o
Os operador es ut ilizados em ADVPL para at ri buio de val ores a vari vei s de memri a so:
: = At ri bui o Si mpl es + = Adi o e At ri bui o em Li nha - = Subt rao e At ri bui o em Li nha * = Mul t ipli cao e At ri bui o em Li nha / = Di vi so e At ri bui o em Li nha * * = ou ^ = Exponenci ao e At ri buio em Li nha % = Mdul o ( rest o da di vi so) e At ri bui o em Li nha
E At r i bu i o Si mpl es
O si nal de i gualdade ut ilizado para at ri bui r valor a uma vari vel de memri a. nVari avel : = 10
E At r i bu i o em Li nh a
O operador de at ri bui o em li nha caract eri zado por doi s pont os e o si nal de i gual dade. Tem a mesma funo do si nal de i gualdade sozi nho, por m apl i ca a at ri bui o s vari vei s. Com el e pode- se at ri bui r mai s de uma vari vel ao mesmo t empo.
nVar1 : = nVar2 : = nVar 3 : = 0
- 41 -
ADVPL Compl et o
Quando di versas vari vei s so i ni ci ali zadas em uma mesma li nha, a at ri bui o comea da di rei t a para a esquerda, ou sej a, nVar3 recebe o val or zer o i ni ci alment e, nVar2 r ecebe o cont edo de nVar3 e nVar1 r ecebe o cont edo de nVar2 por fi nal .
Com o operador de at ri bui o em l i nha, pode- se subst i t ui r as i ni ci alizaes i ndi vi duai s de cada vari vel por uma i ni ci alizao apenas:
Local nVar1 : = 0, nVar2 : = 0, nVar3 : = 0 por Local nVar1 : = nVar2 : = nVar3 : = 0
O operador de at ri bui o em li nha t ambm pode ser ut ili zado para subst i t ui r val ores de campos em um banco de dados.
E At r i bu i o Compost a
Os operador es de at r i bui o compost a so uma facilidade da linguagem ADVPL para expr esses de cl cul o e at ri bui o. Com el es pode- se economi zar di gi t ao:
Oper ador Ex empl o Equi v al ent e a + = X + = Y X = X + Y - = X - = Y X = X - Y * = X * = Y X = X * Y / = X / = Y X = X / Y * * = ou ^ = X * * = Y X = X * * Y %= X %= Y X = X % Y
Oper ador es de I ncr ement o/ Decr ement o
A li nguagem ADVPL possui operador es para r eali zar i ncrement o ou decrement o de vari vei s. Ent ende- se por i ncrement o aument ar o val or de uma vari vel numri ca em 1 e ent ende- se por decrement o di mi nui r o val or da vari vel em 1. Os operador es so:
+ + I ncrement o Ps ou Pr- fi xado - - Decrement o Ps ou Pr- fi xado
Os operador es de decr ement o/ i ncrement o podem ser col ocados t ant o ant es ( pr - fi xado) como depoi s ( ps- fi xado) do nome da vari vel . Dent ro de uma expresso, a ordem do operador mui t o i mport ant e, podendo al t erar o r esul t ado da expr esso. Os oper ador es i ncrement ai s so execut ados da esquerda para a di rei t a dent ro de uma expresso.
Local nA : = 10 Local nB : = nA+ + + nA
O val or da vari vel nB r esul t a em 21, poi s a pri mei ra r efer nci a a nA ( ant es do + + ) cont i nha o val or 10 que foi consi derado e i medi at ament e aument ado em 1. Na segunda refer nci a a nA, est e j possua o val or 11. O que foi efet uado foi a soma de 10 mai s 11, i gual a 21. O resul t ado fi nal aps a execuo dest as duas l i nhas a vari vel nB cont endo 21 e a vari vel nA cont endo 11.
No ent ant o:
Local nA : = 10 Local nB : = + + nA + nA
- 42 -
ADVPL Compl et o
Resul t a em 22, poi s o operador i ncrement al aument ou o val or da primei ra nA ant es que seu val or fosse consi derado.
Oper ador es Especi ai s
Al m dos operador es comuns, o ADVPL possui al guns out ros operador es ou i dent i fi cadores. Est as so suas fi nali dades:
( ) Agrupament o ou Funo [ ] El ement o de Mat ri z { } Defi ni o de Mat ri z, Const ant e ou Bl oco de Cdi go - > I dent i fi cador de Apeli do & Macr o subst i t ui o @ Passagem de parmet ro por r efer nci a | | Passagem de parmet ro por val or
- Os parnt eses so ut ilizados para agrupar el ement os em uma expr esso mudando a ordem de precednci a da avali ao da expresso ( segundo as r egras mat emt i cas por exempl o) . Tambm ser vem para envol ver os argument os de uma funo.
- Os col chet es so ut ilizados para especi fi car um el ement o especfi co de uma mat ri z. Por exempl o, A[ 3,2] , refer e- se ao el ement o da mat ri z A na linha 3, col una 2.
- As chaves so ut ili zadas para a especi fi cao de mat ri zes li t erai s ou bl ocos de cdi go. Por exempl o, A: = { 10,20,30} cri a uma mat ri z chamada A com t r s el ement os.
- O smbol o - > i dent i fi ca um campo de um arquivo di fer enci ando- o de uma vari vel . Por exempl o, FUNC- > nome refere- se ao campo nome do arqui vo FUNC. Mesmo que exi st a uma vari vel chamada nome, o campo nome que ser acessado.
- O smbol o & i dent i fi ca uma aval i ao de expresso at ravs de macro e vi st o em det al hes na document ao sobr e macr o subst i t ui o
. - O smbol o @ ut ili zado para i ndi car que durant e a passagem de uma vari vel para uma funo ou pr ocedi ment o el a sej a t omada como uma refer nci a e no como val or .
- O smbol o | | ut i lizado para i ndi car que durant e a passagem de uma vari vel para uma funo ou pr ocedi ment o el a sej a t omada como um e val or no como refernci a.
- 43 -
ADVPL Compl et o
Or dem de Pr ecednci a dos Oper ador es
Dependendo do t i po de operador , exi st e uma ordem de pr ecednci a para a avali ao dos operandos. Em pri ncpio, t odas as operaes com os operador es, so r eali zadas da esquer da para a di rei t a se el es t i ver em o mesmo nvel de pri ori dade.
A ordem de precednci a, ou nvel de pri ori dade de execuo, dos operador es em ADVPL :
1. Operador es de I ncr ement o/ Decrement o pr - fi xado 2. Operador es de St ri ng 3. Operador es Mat emt i cos 4. Operador es Rel aci onai s 5. Operador es Lgi cos 6. Operador es de At ri bui o 7. Operador es de I ncr ement o/ Decrement o ps- fi xado
Em expr esses compl exas com di ferent es t i pos de operador es, a avali ao segui r essa seqnci a. Caso exi st a mai s de um operador do mesmo t i po ( ou sej a, de mesmo nvel ) , a avali ao se d da esquerda para di rei t a. Para os operador es mat emt i cos ent r et ant o, h uma precednci a a segui r:
1. Exponenci ao 2. Mul t ipli cao e Di vi so 3. Adi o e Subt rao
Consi der e o exempl o:
Local nResul t ado : = 2+ 10/ 2+ 5* 3+ 2^ 3
O r esul t ado dest a expr esso 30, poi s pri mei rament e cal cul ada a exponenci ao 2^ 3( = 8) , ent o so cal cul adas as mul t i pli caes e di vi ses 10/ 2( = 5) e 5* 3( = 15) , e fi nal ment e as adi es resul t ando em 2+ 5+ 15+ 8( = 30) .
E Al t er ao da Pr ecednci a
A ut ilizao de parnt eses dent r o de uma expresso al t era a ordem de pr ecednci a dos operadores. Operandos ent re par nt eses so anali sados ant es dos que se encont ram fora dos parnt eses. Se exi st i rem mai s de um conj unt o de parnt eses no- ani nhados, o grupo mai s a esquerda ser avali ado pri mei ro e assi m sucessi vament e.
Local nResul t ado : = ( 2+ 10) / ( 2+ 5) * 3+ 2^ 3
No exempl o aci ma pri mei ro ser cal cul ada a exponenci ao 2^ 3( = 8) . Em segui da 2+ 10( = 12) ser cal cul ado, 2+ 5( = 7) cal cul ado, e fi nal ment e a di vi so e a mul t i pli cao sero efet uadas, o que r esul t a em 12/ 7* 3+ 8( = 13.14) .
Se exi st i rem vri os par nt eses ani nhados, ou sej a, col ocados um dent ro do out r o, a aval i ao ocor rer do parnt eses mai s int ero em di reo ao mai s ext erno.
- 44 -
ADVPL Compl et o
4.5.3. Oper ao de Macr o Subst i t ui o
O operador de macr o subst i t ui o, si mbolizado pel o "e" comer ci al ( &) , ut ili zado para a avali ao de expresses em t empo de execuo. Funci ona como se uma expresso armazenada fosse compil ada em t empo de execuo, ant es de ser de fat o execut ada.
Consi der e o exempl o:
01 X : = 10 02 Y : = " X + 1" 03 B : = &Y / / O cont edo de B ser 11
A vari vel X at ri buda com o val or 10, enquant o a vari vel Y at ri buda com a st ri ng de caract eres cont endo "X + 1".
A t er cei ra li nha ut iliza o operador de macro. Est a li nha faz com que o nmer o 11 sej a at ri budo vari vel B. Pode- se per ceber que esse o val or r esul t ant e da expresso em format o de caract ere cont i da na vari vel Y.
Ut ilizando- se uma t cnica mat emt i ca el ement ar, a subst i t ui o, t emos que na segunda li nha, Y defi ni do como "X + 1", ent o pode- se subst i t ui r Y na t ercei ra li nha:
03 B : = &"X + 1" O operador de macr o cancel a as aspas: 03 B : = X + 1
Pode- se per ceber que o operador de macro r emove as aspas, o que dei xa um pedao de cdi go para ser execut ado. Deve- se t er em ment e que t udo i sso acont ece em t empo de execuo, o que t orna t udo mui t o dinmi co. Uma ut ilizao i nt eressant e cri ar um t i po de cal cul adora, ou aval i ador de frmul as, que det ermi na o r esul t ado de al go que o usuri o di gi t a.
O operador de macro t em uma li mit ao: vari vei s refer enci adas dent ro da st ri ng de caract eres ( X nos exempl os ant eri or es) no podem ser l ocai s.
- 45 -
ADVPL Compl et o
4.5.4. Funes de mani pul ao de v ar i vei s
Al m de at ri bui r, cont r ol ar o escopo e macro execut ar o cont edo das vari vei s necessri o mani pul ar seu cont edo at ravs de funes especfi cas da li nguagem para cada si t uao.
As operaes de mani pul ao de cont edo mai s comuns em pr ogramao so:
E Converses ent r e t i pos de vari vei s E Mani pulao de st ri ngs E Mani pulao de vari veis numri cas E Veri fi cao de t i pos de vari vei s E Mani pulao de ar rays E Execuo de bl ocos de cdi go
Nest e t pi co sero abordadas as converses ent re t i pos de varivei s e as funes de mani pul ao de st ri ngs e vari vei s numri cas.
Conv er ses ent r e t i pos de v ar i v ei s
As funes mai s ut ili zadas nas operaes ent r e conver so ent r e t i pos de vari vei s so:
Si nt ax e CTOD( cDat a) Descr i o Reali za a conver so de uma i nformao do t i po caract er no format o DD/ MM/ AAAA para uma vari vel do t i po dat a.
CVALTOCHAR( )
Si nt ax e CVALTOCHAR( n Val or ) Descr i o Reali za a conver so de uma i nformao do t i po numri co em uma st ri ng, sem a adi o de espaos a i nformao.
- 46 -
ADVPL Compl et o
DTOC( )
Si nt ax e DTOC( dDat a) Descr i o Reali za a conver so de uma i nformao do t i po dat a para em caract er, sendo o r esul t ado no format o DD/ MM/ AAAA .
DTOS( )
Si nt ax e DTOS( dDat a) Descr i o Reali za a conver so de uma i nformao do t i po dat a em um caract er, sendo o r esul t ado no format o AAAAMMDD .
STOD( )
Si nt ax e STOD( sDat a) Descr i o Reali za a conver so de uma i nformao do t i po caract er com cont edo no for mat o AAAAMMDD em dat a.
STR( )
Si nt ax e STR( n Val or ) Descr i o Reali za a conver so de uma i nformao do t i po numri co em uma st ri ng, adi ci onando espaos di rei t a.
STRZERO( )
Si nt ax e STRZERO( nVal or , nTaman ho) Descr i o Reali za a conver so de uma i nformao do t i po numri co em uma st ri ng, adi ci onando zer os esquerda do nmero convert i do, de forma que a st ri ng gerada t enha o t amanho especi fi cado no parmet r o.
VAL( )
Si nt ax e VAL( cVal or ) Descr i o Reali za a conver so de uma i nformao do t i po caract er em numri ca.
- 47 -
ADVPL Compl et o
Man i pu l ao de st r i n gs
As funes mai s ut ili zadas nas operaes de mani pul ao do cont edo de st ri ngs so:
Si nt ax e ALLTRI M( cSt r i ng) Descr i o Ret orna uma st ri ng sem os espaos di rei t a e esquerda, r eferent e ao cont edo i nformado como par met ro.
A funo ALLTRI M( ) i mpl ement a as aes das funes RTRI M ( ri ght t rim ) e LTRI M ( l eft t ri m ) .
ASC( )
Si nt ax e ASC( cCar act er e) Descr i o Convert e uma i nformao caract er e em seu val or de acordo com a t abel a ASCI I .
AT( )
Si nt ax e AT( cCar act er e, cSt r i n g ) Descr i o Ret orna a pri mei ra posi o de um caract er ou st ri ng dent ro de out ra st r i ng especi fi cada.
- 48 -
ADVPL Compl et o
CHR( )
Si nt ax e CHR( n ASCI I ) Descr i o Convert e um val or nmer o referent e a uma i nformao da t abel a ASCI I no caract ere que est a i nfor mao r epr esent a.
LEN( )
Si nt ax e LEN( cSt r i n g) Descr i o Ret orna o t amanho da st ri ng especi fi cada no parmet ro.
LOWER( )
Si nt ax e LOWER( cSt r i ng) Descr i o Ret orna uma st ri ng com t odos os caract eres mi nscul os, t endo como base a st ri ng passada como parmet ro.
RAT( )
Si nt ax e RAT( cCar act er e, cSt r i ng) Descr i o Ret orna a l t i ma posi o de um caract er ou st ri ng dent ro de out ra st ri ng especi fi cada.
STUFF( )
Si nt ax e STUFF( cSt r i ng, nPosI ni ci al , nEx cl u i r , cAdi cao) Descr i o Per mi t e subst i t ui r um cont edo caract er e em uma st ri ng j exi st ent e, especi fi cando a posi o i ni ci al para est a adi o e o nmero de caract er es que sero subst i t udos.
SUBSTR( )
Si nt ax e SUBSTR( cSt r i n g, nPosI n i ci al , n Car act er es) Descr i o Ret orna part e do cont edo de uma st ri ng especifi cada, de acordo com a posi o i ni ci al dest e cont edo na st ri ng e a quant i dade de caract eres que dever ser r et ornada a part i r daquel e pont o ( i ncl usi ve) .
- 49 -
ADVPL Compl et o
UPPER( )
Si nt ax e UPPER( cSt r i ng) Descr i o Ret orna uma st ri ng com t odos os caract eres mai scul os, t endo como base a st ri ng passada como parmet ro.
Man i pu l ao de v ar i v ei s n umr i cas
As funes mai s ut ili zadas nas operaes de mani pul ao do cont edo de st ri ngs so:
ABS( ) I NT( ) NOROUND( ) ROUND( )
ABS( )
Si nt ax e ABS( n Val or ) Descr i o Ret orna um val or absol ut o ( i ndependent e do si nal ) com base no val or especi fi cado no parmet ro.
I NT( )
Si nt ax e I NT( nVal or ) Descr i o Ret orna a part e i nt ei ra de um val or especi fi cado no parmet r o.
NOROUND( )
Si nt ax e NOROUND( nVal or , nCasas) Descr i o Ret orna um val or, t runcando a part e deci mal do val or especi fi cado no parmet ro de acordo com a quant i dade de casas deci mai s soli ci t adas.
ROUND( )
Si nt ax e ROUND( n Val or , nCasas) Descr i o Ret orna um val or, ar r edondando a part e deci mal do val or especi fi cado no parmet ro de acordo com a quant i dades de casas deci mai s soli ci t adas, ut ili zando o cri t ri o mat emt i co.
- 50 -
ADVPL Compl et o
Ver i f i cao de t i pos de v ar i v ei s
As funes de veri fi cao permi t em a consul t a ao t i po do cont edo da vari vel durant e a execuo do pr ogr ama.
TYPE( ) VALTYPE( )
TYPE( )
Si nt ax e TYPE( cVar i av el ) Descr i o Det ermi na o t i po do cont edo de uma vari vel , a qual no foi defi ni da na funo em execuo.
VALTYPE( )
Si nt ax e VALTYPE( cVar i v el ) Descr i o Det ermi na o t i po do cont edo de uma vari vel , a qual foi defi ni da na funo em execuo.
- 51 -
ADVPL Compl et o
5. Est r ut ur as bsi cas de pr ogr amao
O ADVPL suport a vri as est rut uras de cont r ol e que permi t em mudar a seqnci a de fl uxo de execuo de um pr ogr ama. Est as est rut uras permi t em a execuo de cdi go baseado em condi es l gi ca e a repet i o da execuo de pedaos de cdi go qual quer nmer o de vezes.
Em ADVPL, t odas as est rut uras de cont r ol e podem ser "ani nhadas" dent ro de t odas as demai s est rut uras cont ant o que est ej am ani nhadas propri ament e. Est rut ur as de cont rol e t m um i dent i fi cador de i nci o e um de fi m, e qual quer est rut ura ani nhada deve se encont r ar ent r e est es i dent i fi cador es.
Tambm exi st em est rut uras de cont rol e para det ermi nar que el ement os, comandos, et c. em um programa sero compil ados. Est as so as di ret i vas do pr- pr ocessador # i fdef.. .# endi f e # i fndef...# endi f. Consul t e a document ao sobr e o pr - pr ocessador par a mai ores det al hes.
As est rut uras de cont rol e em ADVPL est o di vi didas em:
E Est rut uras de repet i o E Est rut uras de deci so
5.1. Est r ut ur as de r epet i o
Est rut uras de r epet i o so desi gnadas para execut ar uma seo de cdi go mai s de uma vez. Por exempl o, i magi nando- se a exi st nci a de uma funo para i mpri mi r um rel at ri o, pode- se desej ar i mpri mi - l o quat ro vezes. Cl aro, pode- se si mpl esment e chamar a funo de i mpresso quat ro vezes em seqnci a, mas i st o se t ornari a pouco profi ssi onal e no resol veri a o probl ema se o nmer o de r el at ri os fosse vari vel .
Em ADVPL exi st em doi s comandos para a r epet i o de sees de cdi go, que so os comandos FOR...NEXT e o comando WHI LE.. .ENDDO E Si nt ax e .
O Comando FOR. ..NEXT
A est rut ura de cont r ol e FOR... NEXT, ou si mpl esment e o l oop FOR, r epet e uma seo de cdi go em um nmero det ermi nado de vezes.
FOR Variavel : = nValorI nicial TO nVal orFinal [ STEP nI ncr ement o] Comandos... [ EXI T] [ LOOP] NEXT
- 52 -
ADVPL Compl et o
E Par met r os
Var i v el Especi fi ca uma vari vel ou um el ement o de uma mat ri z para at uar como um cont ador. A vari vel ou o el ement o da mat ri z no pr eci sa t er si do decl arado ant es da execuo do comando FOR... NEXT. Se a vari vel no exi st i r, ser cri ada como uma v ar i v el pr i v ada. nVal or I ni ci al TO nVal or Fi n al nVal orI ni ci al o val or i ni ci al para o cont ador; nVal orFinal o val or fi nal para o cont ador. Pode- se ut ili zar val ores numri cos li t erai s, vari vei s ou expresses, cont ant o que o resul t ado sej a do t i po de dado numri co. STEP nI ncr ement o nI ncrement o a quant idade que ser increment ada ou decrement ada no cont ador aps cada execuo da seo de comandos. Se o val or de nI ncr ement o for negat i vo, o cont ador ser decrement ado. Se a cl usul a STEP for omi t i da, o cont ador ser i ncrement ado em 1. Pode- se ut ilizar val ores numri cos li t erai s, vari vei s ou expresses, cont ant o que o resul t ado sej a do t i po de dado numri co. Comandos Especi fi ca um ou mai s inst rues de comando ADVPL que sero execut adas. EXI T Transfere o cont r ol e de dent ro do comando FOR... NEXT para o comando i medi at ament e segui nt e ao NEXT, ou sej a, fi nali za a repet i o da seo de comandos i medi at ament e. Pode- se col ocar o comando EXI T em qual quer l ugar ent re o FOR e o NEXT. LOOP Ret orna o cont rol e di ret ament e para a cl usul a FOR sem execut ar o r est ant e dos comandos ent re o LOOP e o NEXT. O cont ador i ncrement ado ou decr ement ado nor mal ment e, como se o NEXT t i vesse si do al canado. Pode- se col ocar o comando LOOP em qual quer l ugar ent re o FOR e o NEXT.
Uma vari vel ou um el ement o de uma mat ri z ut ili zado como um cont ador para especi fi car quant as vezes os comandos ADVPL dent r o da est rut ura FOR. ..NEXT so execut ados.
Os comandos ADVPL depoi s do FOR so execut ados at que o NEXT sej a al canado. O cont ador ( Vari avel ) ent o i ncrement ado ou decrement ado com o val or em nI ncr ement o ( se a cl usul a STEP for omi t i da, o cont ador i ncrement ado em 1) . Ent o, o cont ador comparado com o val or em nVal orFi nal . Se for menor ou i gual ao val or em nVal orFi nal , os comandos segui nt es ao FOR so execut ados novament e.
Se o val or f or mai or que o cont i do em nVal orFi nal , a est rut ura FOR... NEXT t ermi nada e o pr ogr ama cont i nua a execuo no pri mei ro comando aps o NEXT.
Os val ores de nVal or I ni ci al , nVal orFi nal e nI ncr ement o so apenas consi derados i ni ci al ment e. Ent r et ant o, mudar o val or da vari vel ut ili zada como cont ador dent r o da est rut ura afet ar o nmer o de vezes que a repet i o ser execut ada. Se o val or de nI ncr ement o negat i vo e o val or de nVal orI ni ci al mai or que o de nVal orFi nal , o cont ador ser decrement ado a cada r epet i o.
- 53 -
ADVPL Compl et o
Ex empl o:
Local nCnt Local nSomaPar : = 0 For nCnt : = 0 To 100 St ep 2 nSomaPar + = nCnt Next Al ert ( "A soma dos 100 pri mei ros nmeros par es : " + ; cVal ToChar( nSomaPar) ) Ret urn
Est e exempl o i mpri me a soma dos 100 pri mei ros nmer os par es. A soma obt i da at ravs da repet i o do cl cul o ut ilizando a prpri a vari vel de cont ador . Como a cl usul a STEP est sendo ut ilizada, a vari vel nCnt ser sempr e i ncrement ada em 2. E como o cont ador comea com 0, seu val or sempr e ser um nmero par .
O Comando WHI LE... ENDDO
A est rut ura de cont r ol e WHI LE... ENDDO, ou si mpl esment e o l oop WHI LE, repet e uma seo de cdi go enquant o uma det ermi nada expr esso r esul t ar em verdadei ro ( . T. ) .
E Si nt ax e
WHI LE l Expr essao Comandos... [ EXI T] [ LOOP] ENDDO
E Par met r os
l Ex pr essao Especi fi ca uma expresso l gi ca cuj o val or det ermi na quando os comandos ent re o WHI LE e o ENDDO so execut ados. Enquant o o resul t ado de l Expr essao for aval i ado como verdadei ro ( .T. ) , o conj unt o de comandos so execut ados. Comandos Especi fi ca um ou mai s i nst rues de comando ADVPL que sero execut adas enquant o l Expressao for aval i ado como verdadei ro ( . T. ) . EXI T Transfere o cont r ol e de dent r o do comando WHI LE... ENDDO par a o comando i medi at ament e segui nt e ao ENDDO, ou sej a, fi nali za a repet i o da seo de comandos i medi at ament e. Pode- se col ocar o comando EXI T em qual quer l ugar ent r e o WHI LE e o ENDO. LOOP Ret orna o cont r ol e di ret ament e para a cl usul a WHI LE sem execut ar o r est ant e dos comandos ent re o LOOP e o ENDDO. A expr esso em l Expressao r eaval i ada para a deci so se os comandos cont i nuaro sendo execut ados.
Os comandos ent r e o WHI LE e o ENDDO so execut ados enquant o o resul t ado da avali ao da expr esso em l Expressao permanecer verdadei ro ( .T.) . Cada pal avra chave WHI LE deve t er uma pal avra chave ENDDO cor r espondent e.
- 54 -
ADVPL Compl et o
Ex empl o :
Local nNumber : = nAux : = 350 nAux : = I nt ( nAux / 2) Whil e nAux > 0 nSomaPar + = nCnt Next Al ert ( "A soma dos 100 pri mei ros nmeros par es : " + ; cVal ToChar( nSomaPar) ) Ret urn
5.1.1. I nf l uenci ando o f l ux o de r epet i o
A linguagem ADVPL permi t e a ut ili zao de comandos que i nfluem di ret ament e em um processo de r epet i o, sendo el es:
E LOOP E EXI T
LOOP
A i nst ruo LOOP ut i lizada para for ar um desvi o no fl uxo do programa de vol t a a anli se da condi o de repet i o. Dest a forma, t odas as operaes que seri am real i zadas dent ro da est rut ura de r epet i o aps o LOOP sero desconsi deradas.
Ex empl o:
aI t ens: = Li st aProdut os( ) / / funo i l ust rat i va que r et orna um array com dados dos pr odut os nQuant idade : = Len( aI t ens) nI t ens : = 0
Whil e nI t ens < nQuant i dade
nI t ens+ + I F BLOQUEADO( aI t ens [ nI t ens] ) / / funo il ust rat i va que veri fi ca se o produt o est LOOP / / bl oqueado. ENDI F
I MPRI ME( ) / / funo il ust rat i va que r eal i za a i mpresso de um i t em li berado par a uso
End
/ / Caso o pr odut o est ej a bl oqueado, o mesmo n o ser i mpr esso, poi s a ex ecuo da / / i n st r u o LOOP f ar o f l ux o do pr ogr ama r et or n ar a par t i r da an l i se da condi o.
- 55 -
ADVPL Compl et o
EXI T
A i nst ruo EXI T ut i lizada para for ar o t rmi no de uma est rut ura de repet i o. Dest a forma, t odas as operaes que seri am real i zadas dent ro da est rut ura de r epet i o aps o EXI T sero desconsi deradas, e o programa i r cont i nuar a execuo a part i r da prxi ma inst ruo post eri or ao t rmi no da est rut ura ( END ou NEXT) .
Ex empl o:
Whil e .T.
I F MSGYESNO( Desej a j ogar o j ogo da for ca? ) JFORCA( ) / / Funo i l ust rat i va que i mpl ement a o al gori t mo do j ogo da for ca. ELSE EXI T ENDI F End
MSGI NFO( Fi nal de Jogo )
/ / Enqu ant o n o f or r espondi do No par a a per gunt a: Desej a j ogar o j ogo da / / f or ca , ser ex ecu t ada a f uno do j ogo da f or ca. / / Caso sej a sel eci onada a opo No , ser ex ecut ada a i n st r uo EXI T qu e pr ov ocar o t r mi no do LOOP, per mi t i ndo a ex ecuo da mensagem de Fi n al de Jogo .
- 56 -
ADVPL Compl et o
5.2. Est r ut ur as de deci so
Est rut uras de desvi o so desi gnadas para execut ar uma seo de cdi go se det ermi nada condi o l gi ca resul t ar em verdadei ro ( .T.) .
Em ADVPL exi st em doi s comandos para execuo de sees de cdi go de acordo com avali aes l gi cas, que so os comandos I F...ELSE.. .ENDI F e o comando DO CASE...ENDCASE E Si nt ax e .
O Comando I F...ELSE. ..ENDI F
Execut a um conj unt o de comandos baseado no val or de uma expr esso l gi ca.
I F l Expressao Comandos [ ELSE Comandos.. . ] ENDI F
E Par met r os
LEx pr essao Especi fi ca uma expresso l gi ca que aval i ada. Se l Expr essao resul t ar em verdadei ro ( .T.) , qual quer comando segui nt e ao I F e ant ecedent e ao ELSE ou ENDI F ( o que ocorr er pri mei ro) ser execut ado. Se l Expr essao resul t ar em fal so ( .F.) e a cl usul a ELSE for defi ni da, qual quer comando aps essa cl usul a e ant eri or ao ENDI F ser execut ada. Se a cl usula ELSE no for defi ni da, t odos os comandos ent re o I F e o ENDI F so i gnorados. Nest e caso, a execuo do programa cont i nua com o pri mei ro comando seguint e ao ENDI F. Comandos Conj unt o de comandos ADVPL que sero execut ados dependendo da avali ao da expr esso l gi ca em l Expr essao.
Pode- se ani nhar um bloco de comando I F.. . ELSE. .. ENDI F dent ro de out ro bl oco de comando I F.. . ELSE... ENDI F. Por m, para a avali ao de mai s de uma expr esso l gi ca, deve- se ut ilizar o comando DO CASE.. .ENDCASE ou a verso est endi da da expresso I F. .. ELSE.. .ENDI F denomi nada I F... ELSEI F.. .ELSE.. .ENDI F.
Ex empl o: Local dVenct o : = CTOD( "31/ 12/ 01") I f Dat e( ) > dVenct o Al ert ( "Venci ment o ul t rapassado! ") Endi f Ret urn
- 57 -
ADVPL Compl et o
O Comando I F...ELSEI F...ELSE.. .ENDI F
Execut a o pri mei ro conj unt o de comandos cuj a expr esso condi ci onal resul t a em verdadei ro ( .T.) .
E Si nt ax e
I F l Expressao1 Comandos [ ELSEI F lExpr essaoX Comandos] [ ELSE Comandos.. .] ENDI F
E Par met r os
l Ex pr essao1 Especi fi ca uma expresso l gi ca que avaliada. Se l Expressao resul t ar em verdadei ro ( .T.) , execut ar os comandos compreendi dos ent r e o I F e a prxi ma expr esso da est rut ura ( ELSEI F ou I F) Se l Expressao r esul t ar em fal so ( .F.) , ser avali ada a prxi ma expr esso l gi ca vi nculada ao comando ELSEI F, ou se o mesmo no exi st i r ser execut ada a ao defi ni da no comando ELSE. l Ex pr essaoX Especi fi ca uma expresso l gi ca que ser avali ada para cada comando ELSEI F. Est a expresso soment e ser aval i ada se a expr esso l gi ca especi fi cada no comando I F r esul t ar em fal so ( .F.) . Caso a l Expr essaoX avali ada resul t e em fal so ( .F.) ser aval i ada a prxi ma expresso l ExpressaoX vi ncul ada ao prxi mo comando ELSEI F, ou caso o mesmo no exi st a ser execut ada a ao defi ni da parao comando ELSE. Comandos Conj unt o de comandos ADVPL que sero execut ados dependendo da avali ao da expresso l gi ca em l Expr essao.
O campo I F... ELSE. .. ELSEI F.. .ENDI F possui a mesma est rut urao de deci so que pode ser obt i da com a ut i lizao do comando DO CASE.. .ENDCASE.
- 58 -
ADVPL Compl et o
Ex empl o: Local dVenct o : = CTOD( "31/ 12/ 01") I f Dat e( ) > dVenct o Al ert ( "Venci ment o ul t rapassado! ") El seI f Dat e( ) = = dVenct o Al ert ( "Venci ment o na dat a! ") El se Al ert ( "Venci ment o dent r o do prazo! ") Endi f Ret urn
O Comando DO CASE. ..ENDCASE
Execut a o pri mei ro conj unt o de comandos cuj a expr esso condi ci onal resul t a em verdadei ro ( .T.) .
E Si nt ax e
DO CASE CASE lExpr essao1 Comandos [ CASE lExpr essao2 Comandos . .. CASE lExpr essaoN Comandos] [ OTHERWI SE Comandos] ENDCASE
E Par met r os
CASE l Ex pr essao1 Comandos... Quando a pri mei ra expresso CASE resul t ant e em verdadei ro ( . T.) for encont rada, o conj unt o de comandos seguint e execut ado. A execuo do conj unt o de comandos cont i nua at que a prxi ma cl usul a CASE, OTHERWI SE ou ENDCASE sej a encont rada. Ao t ermi nar de execut ar esse conj unt o de comandos, a execuo cont i nua com o pri mei ro comando segui nt e ao ENDCASE. Se uma expr esso CASE r esul t ar em fal so ( .F.) , o conj unt o de comandos segui nt e a est a at a prxi ma cl usula i gnorado. Apenas um conj unt o de comandos execut ado. Est es so os pri mei ros comandos cuj a expresso CASE aval i ada como verdadei ro ( .T.) . Aps a execuo, qual quer out ra expresso CASE post eri or i gnorada ( mesmo que sua aval i ao resul t asse em verdadei ro) . OTHERWI SE Comandos Se t odas as expr esses CASE for em avali adas como fal so ( .F.) , a cl usul a OTHERWI SE det ermi na se um conj unt o adi ci onal de comandos deve ser execut ado. Se essa cl usul a for i ncl uda, os comandos segui nt es sero execut ados e ent o o programa cont i nuar com o pri mei ro comando segui nt e ao ENDCASE. Se a cl usul a OTHERWI SE for omi t i da, a execuo cont i nuar normal ment e aps a cl usul a ENDCASE.
- 59 -
ADVPL Compl et o
O Comando DO CASE. ..ENDCASE ut ili zado no l ugar do comando I F...ENDI F quando um nmero mai or do que uma expresso deve ser avali ada, subst i t ui ndo a necessi dade de mai s de um comando I F. .. ENDI F ani nhados.
Ex empl o:
Local nMes : = Mont h( Dat e( ) ) Local cPeri odo : = " "
DO CASE CASE nMes < = 3 cPeri odo : = "Pri mei ro Tr i mest re" CASE nMes > = 4 .And. nMes < = 6 cPeri odo : = "Segundo Tri mest r e" CASE nMes > = 7 .And. nMes < = 9 cPeri odo : = "Ter cei ro Tr i mest re" OTHERWI SE cPeri odo : = "Quart o Tri mest re" ENDCASE
Ret urn
- 60 -
ADVPL Compl et o
6. Ar r ays e Bl ocos de Cdi go
6.1. Ar r ay s
Arrays ou mat ri zes, so col ees de val ores, semel hant es a uma l i st a. Uma mat ri z pode ser cri ada at ravs de di ferent es manei ras.
Cada i t em em um arr ay r eferenci ado pel a i ndi cao de sua posi o numri ca na l i st a, i ni ci ando pel o nmer o 1.
O exempl o a segui r decl ara uma vari vel , at ribui um array de t rs el ement os a el a, e ent o exi be um dos el ement os e o t amanho do arr ay:
Local aLet ras / / Decl arao da vari vel aLet r as : = { "A", "B" , "C"} / / At ri bui o do ar ray a vari vel Al ert ( aLet ras[ 2] ) / / Exi be o segundo el ement o do array Al ert ( cVal ToChar( Len( aLet ras) ) ) / / Exi be o t amanho do arr ay
O ADVPL permi t e a mani pul ao de arrays facil ment e. Enquant o que em out ras l inguagens como C ou Pascal necessri o al ocar memri a para cada el ement o de um ar ray ( o que t ornari a a ut ilizao de "pont ei ros" necessri a) , o ADVPL se encar rega de gerenci ar a memri a e t orna si mpl es adi ci onar el ement os a um array, ut ilizando a funo AADD( ) :
AADD( aLet ras, "D") / / Adi ci ona o quart o el ement o ao fi nal do ar ray Al ert ( aLet ras[ 4] ) / / Exi be o quart o el ement o Al ert ( aLet ras[ 5] ) / / Er r o! No h um qui nt o el ement o no ar ray
Ar r ay s como Est r ut ur as
Uma caract erst i ca i nt eressant e do ADVPL que um array pode cont er qual quer t i po de dado: nmeros, dat as, l gi cos, caract er es, obj et os, et c. , e ao mesmo t empo. Em out r as pal avras, os el ement os de um array no pr eci sam ser necessari ament e do mesmo t i po de dado, em cont rast e com out r as l i nguagens como C e Pascal .
aFunct 1 : = { "Pedro",32,.T.}
Est e ar ray cont em uma st ri ng, um nmero e um val or l gi co. Em out r as li nguagens como C ou Pascal , est e "pacot e" de informaes pode ser chamado como um "st ruct " ( est rut ura em C, por exempl o) ou um "r ecor d" ( regi st r o em Pascal , por exempl o) . Como se fosse na verdade um regi st ro de um banco de dados, um pacot e de i nformaes const rudo com di versos campos. Cada campo t endo um pedao di fer ent e de dado.
Suponha que no exempl o ant eri or, o ar ray aFunct 1 cont enha i nfor maes sobre o nome de uma pessoa, sua i dade e sua si t uao mat ri moni al . Os segui nt es # defi nes podem ser cri ados para i ndi car cada posi o dos val or es dent ro de um array:
# defi ne FUNCT_NOME 1 # defi ne FUNCT_I DADE 2 # defi ne FUNCT_CASADO 3
- 61 -
ADVPL Compl et o
E consi der e mai s al guns arr ays para r epr esent ar mai s pessoas:
Al ert ( aFunct 1[ FUNCT_NOME] ) Al ert ( aFunct 2[ FUNCT_NOME] ) Al ert ( aFunct 3[ FUNCT_NOME] )
Agora, ao i nvs de t rabal har com vari vei s i ndivi duai s, pode- se agrup- l as em um out ro array, do mesmo modo que muit os r egi st ros so agrupados em uma t abel a de banco de dados:
aFunct s um array com 3 li nhas por 3 col unas. Uma vez que as vari vei s separadas foram combi nadas em um ar ray, os nomes podem ser exi bi dos assi m:
Local nCount For nCount : = 1 To Len( aFunct s) Al ert ( aFunct s[ nCount , FUNCT_NOME] ) / / O acesso a el ement os de um arr ay mul t idi mensi onal / / pode ser r eali zado t ambm dest a forma: / / aFunct s[ nCount ] [ FUNCT_NOME] Next nCount
A vari vel nCount sel eci ona que funci onri o ( ou que li nha) de i nt er esse. Ent o a const ant e FUNCT_NOME sel eci ona a pri mei ra col una daquel a linha.
Cui dados com Ar r ay s
Arrays so l i st as de el ement os, port ant o memri a necessri a para armazenar est as i nformaes. Como est es arrays podem ser mult i di mensi onai s, a memri a necessri a ser a mul t ipli cao do nmer o de i t ens em cada di menso do array, consi derando- se o t amanho do cont edo de cada el ement o cont i do nest a. Port ant o o t amanho de um array pode vari ar mui t o.
A faci lidade da ut ilizao de ar rays, mesmo que para armazenar i nfor maes em pacot es como descri t o ant eri orment e, no compensada pel a ut ilizao em memri a quando o nmer o de i t ens em um array for mui t o grande. Quando o nmero de el ement os for mui t o grande deve- se procurar out ras sol ues, como a ut i lizao de um arqui vo de banco de dados t emporri o.
- 62 -
ADVPL Compl et o
6.1.1. I ni ci al i zando ar r ay s
Al gumas vezes o t amanho da mat ri z conheci do previ ament e. Out r as vezes o t amanho do array soment e ser conheci do em t empo de execuo.
Se o t amanho do ar r ay con heci do
Se o t amanho do ar ray conheci do no moment o que o programa escri t o, h di versas manei ras de i mpl ement ar o cdi go:
01 Local nCnt 02 Local aX[ 10] 03 Local aY : = Ar ray( 10) 04 Local aZ : = { 0,0,0,0,0,0,0,0,0,0} 05 06 For nCnt : = 1 To 10 07 aX[ nCnt ] : = nCnt * nCnt 08 Next nCnt
Est e cdi go preenche o array com uma t abel a de quadrados. Os val ores sero 1, 4, 9, 16 ... 81, 100. Not e que a l i nha 07 se refere vari vel aX, mas poderi a t ambm t r abal har com aY ou aZ.
O obj et i vo dest e exempl o demonst rar t rs modos de cri ar um array de t amanho conheci do no moment o da cri ao do cdi go.
1. Na l inha 02 o array cri ada usando aX[ 10] . I st o i ndi ca ao ADVPL para al ocar espao para 10 el ement os no array. Os col chet es [ e ] so ut i lizados para i ndi car o t amanho necessri o.
2. Na li nha 03 ut ilizada a funo ar ray com o parmet r o 10 para cri ar o ar ray, e o ret orno dest a funo at ri budo vari vel aY. Na li nha 03 efet uado o que se chama "desenhar a i magen do array". Como se pode not ar, exi st em dez 0 s na li st a encerr ada ent re chaves ( { } ) . Cl arament e, est e mt odo no o ut ili zado para cri ar uma mat ri z de 1000 el ement os.
3. O t ercei ro mt odo di fer e dos ant eri or es por que i ni ci ali za a mat ri z com os val ores defi ni t i vos. Nos doi s pri mei ros mt odos, cada posi o da mat ri z cont m um val or nul o ( Nil ) e deve ser i ni ci alizado post eri orment e.
4. A li nha 07 demonst ra como um val or pode ser at ri budo para uma posi o exi st ent e em uma mat ri z especi fi cando o ndi ce ent r e col chet es.
- 63 -
ADVPL Compl et o
Se o t amanho do ar r ay n o conh eci do
Se o t amanho do ar ray no conheci do at o moment o da execuo do pr ograma, h al gumas manei ras de cri ar um array e adi ci onar el ement os a el e. O exempl o a segui r ilust ra a i di a de cri ao de um array vazi o ( sem nenhum el ement o) e adi o de el ement os di nami cament e.
01 Local nCnt 02 Local aX[ 0] 03 Local aY : = Ar ray( 0) 04 Local aZ : = { } 05 06 For nCnt : = 1 To nSi ze 07 AADD( aX, nCnt * nCnt ) 08 Next nCnt
1. A linha 02 ut ili za os col chet es para cri ar um array vazi o. Apesar de no t er nenhum el ement o, seu t i po de dado ar ray.
2. Na li nha 03 a chamada da funo ar ray cri a uma mat ri z sem nenhum el ement o.
3. Na li nha 04 est decl arada a r epr esent ao de um array vazi o em ADVPL. Mai s uma vez, est o sendo ut ili zadas as chaves para i ndi car que o t i po de dados da vari vel array. Not e que { } um array vazi o ( t em o t amanho 0) , enquant o { Ni l } um array com um ni co el ement o nul o ( t em t amanho 1) .
Porque cada uma dest es arrays no cont m el ement os, a li nha 07 ut ili za a funo AADD( ) para adi ci onar el ement os sucessi vament e at o t amanho necessri o ( especi fi cado por exempl o na vari vel nSize) .
6.1.2. Funes de mani pul ao de ar r ays
A li nguagem ADVPL possui di versas funes que auxi li am na mani pul ao de ar rays, dent r e as quai s podemos ci t ar as mai s ut ili zadas:
ARRAY( ) AADD( ) ACLONE( ) ADEL( ) ASI ZE( ) AI NS( ) ASORT( ) ASCAN( )
- 64 -
ADVPL Compl et o
ARRAY( )
Si nt ax e ARRAY( nLi nh as, n Col unas) Descr i o A funo Array( ) ut ilizada na defini o de vari vei s de t i po array, como uma opo a si nt axe ut ili zando chaves ( { } ) .
AADD( )
Si nt ax e AADD( aAr r ay , x I t em) Descr i o A funo AADD( ) per mit e a i nsero de um i t em em um array j exi st ent e, sendo que est e i t em podem ser um el ement o si mpl es, um obj et o ou out ro array.
ACLONE( )
Si nt ax e AADD( aAr r ay ) Descr i o A funo ACLONE( ) r eali za a cpi a dos el ement os de um array par a out r o array i nt egral ment e.
ADEL( )
Si nt ax e ADEL( aAr r ay , nPosi o) Descr i o A funo ADEL( ) permi t e a excl uso de um el ement o do array. Ao efet uar a excl uso de um el ement o, t odos os demai s so reorgani zados de for ma que a ul t i ma posi o do array passar a ser nul a.
ASI ZE( )
Si nt ax e ASI ZE( aAr r ay , nTamanho) Descr i o A funo ASI ZE permi t e a redefi ni o da est rut ura de um arr ay pr - exi st ent e, adi ci onando ou removendo i t ens do mesmo.
ASORT( )
Si nt ax e ASORT( aAr r ay , n I n i ci o, n I t en s, bOr dem) Descr i o A funo ASORT( ) per mi t e que os i t ens de um array sej am ordenados a part i r de um cri t ri o pr - est abel eci do.
- 65 -
ADVPL Compl et o
ASCAN( )
Si nt ax e ASCAN( aAr r ay , bSeek ) Descr i o A funo ASCAN( ) per mi t e que sej a i dent i fi cada a posi o do array que cont m uma det ermi nada i nformao, at ravs da anli se de uma expr esso descri t a em um bl oco de cdi go.
AI NS( )
Si nt ax e AI NS( aAr r ay , nPosi cao) Descr i o A funo AI NS( ) permi t e a i nsero de um el ement o no ar ray especi fi cado em qual quer pont o da est rut ura do mesmo, diferi ndo dest a forma da funo AADD( ) a qual sempr e i nsere um novo el ement o ao fi nal da est rut ura j exi st ent e.
6.1.3. Cpi a de ar r ays
Conforme coment ado ant eri orment e, um array uma rea na memri a, o qual possui uma est rut ura permi t e que as i nformaes sej am armazenadas e organi zadas das mai s di versas for mas.
Com base nesse concei t o, o ar ray pode ser consi derado apenas como um mapa ou um gui a de como as i nformaes est o organi zadas e de como el as podem ser armazenadas ou consul t adas. Para se copi ar um array deve- se l evar est e concei t o em consi derao, poi s caso cont rri o o r esul t ado esperado no ser o obt i do na execuo da cpi a .
Para copi ar o cont edo de uma vari vel , ut iliza- se o operador de at r i bui o : = , conforme abai xo:
nPessoas : = 10 nAlunos : = nPessoas
Ao execut ar a at ri bui o de nAl unos com o cont edo de nPessoas, o cont edo de nPessoas at ri budo a vari vel nAlunos, causando o efei t o de cpi a do cont edo de uma vari vel para out ra.
I st o porque o comando de at ri bui o copi a o cont edo da r ea de memri a represent ada pel o nome nPessoas para a rea de memri a represent ada pel o nome nAlunos . Mas ao ut ilizar o operador de at ri bui o : = da mesma forma que ut ilizado em vari vei s si mpl es para se copi ar um array o efei t o di ferent e:
aPessoas : = { Ri cardo , Cri st i ane , Andr , Camil a } aAl unos : = aPessoas
- 66 -
ADVPL Compl et o
A vari vel aPessoas r epresent e uma rea de memri a que cont m a est rut ura de um ar ray ( mapa ) , no as i nformaes do ar ray, poi s cada i nformao est em sua prpri a rea de memri a.
Dest a forma ao at ri bui r o cont edo r epresent ado pel a vari vel aPessoas a vari vel aAl unos no est se copi ando as i nfor maes e si m o mapa das reas de memri a onde as i nformaes est o r eal ment e armazenadas.
Como foi copi ado o mapa e no as informaes, qual quer ao ut ilizando o rt ul o aAlunos i r afet ar as i nformaes do r t ul o aPessoas. Com i sso ao i nvs de se obt er doi s arrays di st i nt os, t em- se o mesmo ar ray com duas formas de acesso ( rt ul os) di fer ent es.
Por est a razo deve ser ut ilizado o comando ACLONE( ) quando desej a- se obt er um ar ray com a mesma est rut ura e i nformaes que compe out ro ar ray j exi st ent e.
- 67 -
ADVPL Compl et o
6.2. Li st as de Ex pr esses e Bl ocos de Cdi go
Bl ocos de cdi go so um concei t o exi st ent e h mui t o t empo em li nguagens xBase. No como al go que apareceu da noi t e para o di a, e si m uma evol uo progressi va ut ili zando a combi nao de mui t os concei t os da li nguagem para a sua i mpl ement ao.
6.2.1. Pr emi ssas par a ut i l i zao de Bl ocos de Cdi go
Pr i mei r a pr emi ssa
O ADVPL uma l inguagem baseada em funes. Funes t m um val or de ret orno. Assim como o operador de at ri bui o : = .
Assi m, ao i nv s de escr ev er :
x : = 10 / / At ri bui o val or 10 vari vel chamada X Al ert ( "Val or de x: " + cVal ToChar( x) )
Pode- se escr ev er :
/ / At ri bui e ent o exi be o val or da vari vel X Al ert ( "Val or de x: " + cVal t oChar( X : = 10) )
A expr esso x: = 10 avali ada pri mei ro, e ent o seu r esul t ado ( o val or de X, que agora 10) passada para a funo cval t ochar para a converso para caract er e, e em segui da para a funo al ert para a exi bi o. Por causa dest a regra de pr ecednci a possvel at ri bui r um val or a mai s de uma vari vel ao mesmo t empo:
Z : = Y : = X : = 0
Por causa dessa r egra, essa expr esso aval i ada como se fosse escri t a assi m:
Z : = ( Y : = ( X : = 0) )
Apesar de o ADVPL avali ar expr esses da esquerda para a di rei t a, no caso de at ri bui es i sso acont ece ao cont rri o, da di rei t a para a esquerda. O val or at ri budo vari vel X, que r et orna
- 68 -
ADVPL Compl et o
o val or para ser at ri budo vari vel Y e assi m sucessi vament e. Pode- se di zer que o zer o foi "propagado at ravs da expr esso".
Segu nda pr emi ssa
Em ADVPL pode- se j unt ar di versas l inhas de cdi go em uma ni ca li nha fsi ca de comando. Por exempl o, o cdi go:
I f l Achou Al ert ( "Cli ent e encont rado! ") Endi f pode ser escri t o assi m: I f l Achou ; Al ert ( "Cli ent e encont r ado! ") ; Endi f
O pont o- e- vrgul a i ndi ca ao ADVPL que a nova li nha de cdi go est para comear. Pode- se ent o col ocar di ver sas linhas l gi cas de cdi go na mesma l inha fsi ca at ravs do edi t or de t ext o ut ili zado.
Apesar da possi bilidade de se escr ever t odo o programa assi m, em uma ni ca li nha fsi ca, i st o no r ecomendado poi s di fi cul t a a l egi bili dade do pr ograma e, conseqent ement e, a manut eno.
6.2.2. Li st a de ex pr esses
A evol uo dos bl ocos de cdi go comea com as l i st as de expr esses. Nos exempl os a segui r, o smbol o = = > i ndi car o ret orno da expr esso aps sua aval i ao ( sej a para at ri bui r em uma vari vel , exi bi r para o usuri o ou i mpri mi r em um r el at ri o) , que ser i mpresso em um rel at ri o por exempl o.
Duas Li nh as de Cdi go
@00,00 PSAY x : = 10 = = > 10 @00,00 PSAY y : = 20 = = > 20
Cada uma das l i nhas t er a expr esso aval i ada, e o val or da vari vel ser ent o i mpresso.
Duas l i n h a de cdi go em u ma , ut i l i zando pont o- e- v r gul a
Est e o mesmo cdi go que o ant eri or , apenas escri t o em uma ni ca linha:
Al ert ( cVal ToChar( x : = 10 ; y : = 20 ) ) = = > 10
Apesar desse cdi go se encont rar em uma ni ca linha fsi ca, exi st em duas li nhas l gi cas separadas pel o pont o e vrgul a. Ou sej a, esse cdi go equi val ent e a:
Al ert ( cVal ToChar( x : = 10 ) ) y : = 20
Port ant o apenas o val or 10 da vari vel x ser passado par a as funes cval t ochar e al ert para ser exi bido. E o val or 20 apenas ser at ri budo vari vel y.
- 69 -
ADVPL Compl et o
Conv er t endo par a u ma l i st a de ex pr esses
Quando par nt eses so col ocados ao r edor do cdi go e o si nal de pont o- e- vrgul a subst it udo por uma vrgul a apenas, o cdi go t orna- se uma li st a de expresses:
Al ert ( cVal ToChar ( ( X : = 10 , Y : = 20 ) ) ) = = > 20
O val or de r et orno r esult ant e de uma li st a de expresses o val or resul t ant e da lt i ma expr esso ou el ement o da li st a. Funci ona como se fosse um pequeno programa ou funo, que ret orna o resul t ado de sua l t ima avali ao ( efet uadas da esquerda par a a di rei t a) .
Nest e exempl o, a expr esso x : = 10 aval iada, e ent o a expr esso y : = 20, cuj o val or resul t ant e passado para a funo al ert e cval t ochar, e ent o exi bi do. Depoi s que essa l inha de cdi go execut ada, o val or de X i gual a 10 e o de y i gual a 20, e 20 ser exi bi do.
Teori cament e, no h l imi t ao para o nmero de expresses que podem ser combi nadas em uma li st a de expresses. Na prt i ca, o nmer o mxi mo por vol t a de 500 smbol os. Debugar l i st as de expr esses di fcil porque as expr esses no est o di vi didas em l i nhas de cdi go font e, o que t or na t odas as expresses associ adas a uma mesma li nha de cdi go. I st o pode t ornar mui t o di fcil det ermi nar onde um er ro ocorr eu.
Onde pode- se ut i l i zar uma l i st a de ex pr esses?
O propsi t o pri ncipal de uma li st a de expr esses agrup- l as em uma ni ca unidade. Em qual quer l ugar do cdi go ADVPL que uma expresso si mpl es pode ser ut ili zada, pode- se ut ili zar uma li st a de expresses. E ai nda, pode- se fazer com que vri as coi sas acont eam onde normal ment e apenas uma acont eceri a.
X : = 10 ; Y : = 20 I f X > Y Al ert ( "X") Z : = 1 El se Al ert ( "Y") Z : = - 1 Endi f
Aqui t emos o mesmo concei t o, escri t o ut ilizando li st as de expr esses na funo I I F( ) :
X : = 10 ; Y : = 20 ii f( X > Y , ; ( Al ert ( "X") , Z : = 1 ) , ; ( Al ert ( "Y") , Z : = - 1 ) )
De l i st as de ex pr esses par a bl ocos de cdi go
Consi der e a segui nt e li st a de expresses:
Al ert ( cVal ToChar( ( x : = 10, y : = 20 ) ) ) = = > 20
O ADVPL per mi t e cri ar funes, que so pequenos pedaos de cdigo, como se fosse um pequeno pr ograma, ut ili zados para di minui r part es de t ar efas mai s compl exas e r eapr ovei t ar cdi go em mai s de um l ugar num programa. Para mai ores det al hes consul t e a document ao sobr e a cri ao de funes em ADVPL. Por m, a i di a nest e moment o que a l i st a de expr esses ut ili zada na linha ant eri or pode ser cri ada como uma funo:
- 70 -
ADVPL Compl et o
Funct i on Li st a( ) X : = 10 Y : = 20 Ret urn Y
E a li nha de exempl o com a l i st a de expr esses pode ser subst i t uda, t endo o mesmo resul t ado, por:
Al ert ( cVal ToChar( Li st a( ) ) ) = = > 20
Como menci onado ant eri orment e, uma li st a de expr esses como um pequeno pr ograma ou funo. Com poucas mudanas, uma l i st a de expresses pode se t ornar um bl oco de cdi go:
( X : = 10 , Y : = 20 ) / / Li st a de Expr esses { | | X : = 10 , Y : = 20 } / / Bl oco de Cdi go
Not e as chaves { } ut ilizadas no bl oco de cdigo. Ou sej a, um bl oco de cdi go uma mat ri z. Por m na verdade, no uma li st a de dados, e si m uma li st a de comandos, uma li st a de cdi go.
/ / I st o uma mat ri z de dados A : = { 10, 20, 30} / / I st o um bl oco de cdi go, por m funci ona como / / se fosse uma mat ri z de comandos B : = { | | x : = 10, y : = 20}
6.2.3. Bl ocos de Cdi go
Di ferent ement e de uma mat ri z, no se pode acessar el ement os de um bl oco de cdi go at ravs de um ndi ce numri co. Por m bl ocos de cdi go so semel hant es a uma li st a de expr esses, e a uma pequena funo.
Ou sej a, podem ser execut ados. Para a execuo, ou aval i ao, de um bl oco de cdi go, deve- se ut i lizar a funo Eval ( ) :
nRes : = Eval ( B) = = > 20
Essa funo recebe como parmet r o um bl oco de cdi go e avali as t odas as expresses cont i das nest e bl oco de cdi go, r et ornando o r esul t ado da lt i ma expr esso aval i ada.
Passando Par met r os
J que bl ocos de cdi go so como pequenas funes, t ambm possvel a passagem de parmet ros para um bloco de cdi go. Os parmet r os devem ser i nfor mados ent re as bar ras vert i cai s ( | | ) separados por vrgul as, assi m como em uma funo.
B : = { | N | X : = 10, Y : = 20 + N}
Por m deve- se not ar que j que o bl oco de cdi go recebe um parmet r o, um val or deve ser passado quando o bl oco de cdi go for aval i ado.
C : = Eval ( B, 1) = = > 21
- 71 -
ADVPL Compl et o
Ut i l i zando Bl ocos de Cdi go
Bl ocos de cdi go podem ser ut ili zados em di ver sas si t uaes. Geral ment e so ut i lizados par a execut ar t ar efas quando event os de obj et os so aci onados ou para modi fi car o comport ament o padro de al gumas funes.
Por exempl o, consi dere a mat ri z abai xo:
A : = { "GARY HALL", "FRED SMI TH", "TI M JONES"}
Est a mat ri z pode ser ordenada pel o pri mei ro nome, ut ili zando- se a chamada da funo asort ( A) , r esul t ado na mat ri z com os el ement os ordenados dessa forma:
{ "FRED SMI TH", "GARY HALL", " TI M JONES"}
A ordem padro para a funo asort ascendent e. Est e comport ament o pode ser modi fi cado at ravs da i nformao de um bl oco de cdi go que ordena a mat ri z de forma descendent e:
B : = { | X, Y| X > Y } aSort ( A, B)
O bl oco de cdi go ( de acordo com a document ao da funo asort ) deve ser escri t o para acei t ar doi s parmet r os que so os doi s el ement os da mat ri z para comparao. Not e que o bl oco de cdi go no conhece que el ement os est comparando - a funo asort sel eci ona os el ement os ( t al vez ut ili zando o al gori t mo QuickSort ) e passa- os para o bl oco de cdi go. O bl oco de cdi go compara- os e ret orna verdadei ro ( .T. ) se encont ram na ordem corr et a, ou fal so ( .F. ) se no. Se o val or de r et orno for fal so, a funo asort i r ent o t rocar os val ores de l ugar e segui r comparando o pr xi mo par de val ores. Ent o, no bl oco de cdigo ant eri or, a comparao X > Y verdadei ra se os el ement os est o em ordem descendent e, o que si gni fi ca que o pr i mei ro val or mai or que o segundo.
Para ordenar a mesma mat ri z pel o l t i mo nome, t ambm em ordem descendent e, pode- se ut ili zar o segui nt e bl oco de cdi go:
B : = { | X, Y| SUBSTR( X, At ( " ",X) + 1) > SUBSTR( Y, At ( " ", Y) + 1) }
Not e que est e bl oco de cdi go pr ocura e compara as part es dos caract er es i medi at ament e segui nt e a um espao em branco. Depoi s de ut ili zar esse bl oco de cdigo para a funo asort , a mat ri z cont er:
{ "GARY HALL", "TI M JONES" , "FRED SMI TH"}
Fi nalment e, para ordenar um sub- el ement o ( col una) de uma mat ri z por exempl o, pode- se ut ili zar o segui nt e bl oco de cdi go:
B : = { | X, Y| X[ 1] > Y[ 1] }
- 72 -
ADVPL Compl et o
6.2.4. Funes par a mani pul ao de bl ocos de cdi go
A li nguagem ADVPL possui di versas funes que auxili am na mani pul ao de bl ocos de cdi go, dent re as quai s podemos ci t ar as mai s ut ilizadas:
EVAL( ) DBEVAL( ) AEVAL( )
EVAL( )
Si nt ax e EVAL( bBl oco, x Par am1, x Par am2, x Par amZ) Descr i o A funo EVAL( ) ut ilizada para avali ao di ret a de um bl oco de cdi go, ut ili zando as i nformaes di sponvei s no mesmo de sua execuo. Est a funo permi t e a defi nio e passagem de di ver sos parmet ros que sero consi derados na i nt erpr et ao do bl oco de cdi go.
DBEVAL( )
Si nt ax e Ar r ay ( bBl oco, bFor , bWhi l e) Descr i o A funo DBEval ( ) permi t e que t odos os r egi st ro de uma det ermi nada t abel a sej am anal i sados e para cada r egi st ro ser execut ado o bl oco de cdi go defi ni do.
AEVAL( )
Si nt ax e AEVAL( aAr r ay , bBl oco, n I n i ci o, nFi m) Descr i o A funo AEVAL( ) per mit e que t odos os el ement os de um det ermi nada array sej am anal i sados e par a cada el ement o ser execut ado o bl oco de cdi go defi ni do.
- 73 -
ADVPL Compl et o
20
7. Funes
A mai or part e das rot i nas que quer emos escrever em programas so compost as de um conj unt o de comandos, rot i nas est as que se r epet em ao l ongo de t odo o desenvol vi ment o. Uma funo nada mai s do que um conj unt o de comandos que para ser ut ili zada bast a cham- la pel o seu nome.
Para t ornar uma funo mai s fl exvel , ao cham- l a pode- se passar parmet r os, o quai s cont m os dados e i nformaes que defi nem o pr ocessament o da funo.
Os parmet r os das funes descri t as ut ilizando a linguagem ADVPL so posi ci onai s, ou sej a, na sua passagem no i mport a o nome da vari vel e si m a sua posio dent r o da li st a de parmet ros, o que permi t e execut ar uma funo escr evendo:
Cal cul a( parA, parB, par C) / / Chamada da funo em uma rot i na
E a f u no est ar escr i t a:
User Funct i on Cal cul a( x, y, z)
... Comandos da Funo
Ret urn .. .
Nest e caso, x assume o val or de parA, y de par B e z de parC.
A funo t ambm t em a facul dade de r et ornar uma vari vel , podendo i ncl usi ve ser um Ar ray. Para t al encer ra- se a funo com:
Ret ur n( campo)
Assi m A : = Cal cul a( parA,parB,parC) at ri bui A o cont edo do r et orno da funo Cal cul a.
No ADVPL exi st em milhares de funes escri t as pel a equipe de Tecnol ogi a Mi crosi ga, pel os anali st as de supor t e e pel os pr pri os usuri os.
Exi st e um di t ado que di z que:
Vale mais um pr ogramador que conhece t odas as funes disponvei s em uma linguagem do que aquele que, mesmo sendo gnio, reinvent a a roda a cada novo programa .
No DEM ( Document ao El et r ni ca Mi crosi ga) mai s de 500 est o document adas, e est e nmero t ende a aument ar exponenci al ment e com os novos pr ocessos de document ao que est o em i mpl ant ao na Tecnol ogi a e I nt el i gnci a Prot heus.
O obj et i vo do cur so apresent ar, demonst r ar e fi xar a ut ilizao das pri nci pai s funes, si nt axes e est rut uras ut ili zadas em ADVPL.
No ADVPL, at os pr ogramas chamados do menu so funes, sendo que em um reposi t ri o no podem haver funes com o mesmo nome, e para permi t i r que os usuri os e anal i st as
- 74 -
ADVPL Compl et o
possam desenvol ver suas prpri as funes sem que as mesmas confli t em com as j di sponvei s no ambi ent e ERP, foi i mpl ement ada pel a Tecnol ogi a Mi crosi ga um t i po especi al de funo denomi nado User Funct i on .
Nos t pi cos a segui r sero det al hados os t i pos de funes di sponvei s na li nguagem ADVPL, suas formas de ut ili zao e r espect i vas di ferenas.
7.1. Ti pos e escopos de f unes
Em ADVPL podem ser ut ilizados os segui nt es t ipos de funes:
E Funct i on( ) E User Funct i on ( ) E St at i c Fu nct i on( ) E Mai n Funct i on( )
Funct i on( )
Funes ADVPL convenci onai s, rest ri t as ao desenvol vi ment o da rea de I nt eli gnci a Prot heus da Mi crosi ga.
O i nt erpr et ador ADVPL di st i ngue nomes de funes do t i po Funct i on( ) com at dez caract eres. A part i r do dci mo car act er, apesar do compi l ador no i ndi car quai squer t i pos de er ros, o i nt erpr et ador i gnorar os demai s caract eres.
Ex empl o:
/ / Font e MATA100I NCL. PRW # I NCLUDE "pr ot heus. ch"
Funct i on MATA100I NCL01( )
ALERT( "01") Ret urn
Funct i on MATA100I NCL02( )
ALERT( "02") Ret urn
Ao execut ar a funo MATA100I NCL01( ) ser exi bi da a mensagem 01 , mas ao execut ar a funo MATA100I NCL02( ) t ambm ser exi bi da a mensagem 01 , poi s o i nt erpret ador consi dera o nome da funo como MATA100I NC .
1. Funes do t i po Funct ion( ) soment e podem ser execut adas at ravs dos mdul os do ERP.
2. Soment e poder o ser compil adas funes do t i po Funct i on( ) se o MP- I DE possui r uma aut ori zao especi al forneci da pel a Mi crosi ga.
3. Funes do t i po Funct i on( ) so acessvei s por quai squer out r as funes em uso pel a apli cao.
- 75 -
ADVPL Compl et o
User Funct i on ( )
As User Defi ned Funct ions ou funes defi ni das pel os usuri os, so t i pos especi ai s de funes i mpl ement ados pel o ADVPL para garant i r que desenvol vi ment os especfi cos no r eal i zados pel a I nt el i gnci a Prot heus da Mi crosi ga sobr eponham as funes padres desenvol vi das para o ERP.
O i nt erpr et ador ADVPL consi dera que o nome de uma User Funct i on compost o pel o nome defi ni do para a funo precedi do dos caract er es U_ . Dest a forma a User Funct i on XMAT100I ser t rat ada pel o i nt erpret ador como U_XMAT100I .
1. Como ocorr e o acr sci mo dos caract er es U_ no nome da funo e o i nt erpr et ador consi dera apenas os dez pri mei ros caract er es da funo para sua di fer enci ao, r ecomendado que os nomes das User Funct i ons t enham apenas oi t o caract er es para evi t ar r esul t ados i ndesej ados durant e a execuo da apli cao.
2. Funes do t i po User Funct i on so acessvei s por quai squer out ras funes em uso pel a apli cao, desde que em sua chamada sej am ut ili zados os caract er es U_ em conj unt o com o nome da funo.
As User Funct i ons podem ser execut adas a par t i r da t el a ini ci al do cli ent do ERP ( Mi crosi ga Prot heus Remot e) , mas as apli caes que pret endem di sponi bili zar est a opo devem possui r um pr eparo adi ci onal de ambi ent e.
Para mai or es i nformaes consul t e no DEM o t pi co sobr e pr eparao de ambi ent e e a document ao sobr e a funo RpcSet Env( ) .
St at i c Fu nct i on( )
Funes ADVPL t radi cionai s, cuj a vi sibili dade est rest ri t a as funes descri t as no mesmo arqui vo de cdi go font e no qual est o defi ni das.
Ex empl o:
/ / Font e FI NA010.PRW
Funct i on FI NA010( )
Cri aSx1( FI N010 ) Ret urn
St at i c Funct i on CRI ASX1( ) / / Font e FI NA020.PRW
Funct i on FI NA020( )
Cri aSx1( FI N020 ) Ret urn
St at i c Funct i on CRI ASX1( )
- 76 -
ADVPL Compl et o
No exempl o aci ma, exi st em duas funes denomi nadas CRI ASX1( ) defi ni das em arqui vos de cdi go font e di st i nt os: FI NA010.PRW e FI NA020.PRW.
A funo FI NA010( ) t er vi si bilidade apenas da funo CRI ASX1( ) defi ni da no arqui vo de cdi go font e FI NA010.PRW, sendo que o mesmo ocor re com a funo FI NA020( ) .
Est e r ecur so permi t e i sol ar funes de uso excl usi vo de um arqui vo de cdi go font e, evi t ando a sobr eposi o ou dupli cao de funes na apli cao.
Nest e cont ext o as St at i c Funct i ons( ) so ut ili zadas para:
1. Padroni zar o nome de uma det ermi nada funo, que possui a mesma fi nali dade, mas que sua i mpl ement ao pode vari ar de acordo com a necessi dade de funo pri nci pal / apli cao.
2. Redefi ni r uma funo padro da apli cao, adequando- a as necessi dades especfi cas de uma funo pri nci pal / apli cao.
3. Prot eger funes de uso especfi co de um arqui vo de cdi go font e / funo pri nci pal .
O ambi ent e de desenvol vi ment o ut ili zado na apli cao ERP ( MP- I DE) vali da se exi st em Funct i ons( ) , Mai n Funct i ons( ) ou User Funct i ons( ) com o mesmo nome mas em arqui vos de cdi go font es di st int os, evi t ando a dupli ci dade ou sobr eposi o de funes.
Mai n Funct i on( )
Mai n Funct i on( ) out ro t i po de funo especi al do ADVPL i ncorporado para permi t ir t rat ament os di fer enci ados na apl i cao ERP.
Uma Mai n Funct i on( ) t em a car act erst i ca de poder ser execut ada at ravs da t el a i ni ci al de parmet ros do cli ent do ERP ( Mi cr osi ga Pr ot heus Remot e) , da mesma forma que uma User Funct i on, com a di ferena que as Mai n Funct i ons soment e podem ser desenvol vi das com o uso da aut ori zao de compil ao, t ornando sua ut ilizao r est ri t a a I nt el i gnci a Prot heus da Mi crosi ga.
Na apli cao ERP comum o uso das Mai n Funct i ons( ) nas segui nt es si t uaes:
1. Defi ni o dos mdul os da apli cao ERP: Mai n Funct i on Si gaadv( )
2. Defi ni o de at uali zaes e updat es: AP710TOMP811( )
3. At uali zaes especfi cas de mdul os da apl i cao ERP: Updat eATF( )
- 77 -
ADVPL Compl et o
7.2. Passagem de par met r os ent r e f unes
Como menci onado ant eri orment e os parmet r os das funes descri t as ut ilizando a li nguagem ADVPL so posi ci onai s, ou sej a, na sua passagem no i mport a o nome da vari vel e si m a sua posi o dent r o da li st a de parmet ros.
Compl ement ando est a defi ni o, podem ser ut ilizadas duas formas di st i nt as de passagens de parmet ros para funes descri t as na li nguagem ADVPL:
E Passagem de parmet ros por cont edo E Passagem de parmet ros por refernci a
Passagem de par met r os por cont e do
A passagem de parmet ros por cont edo a forma convenci onal de defi ni o dos parmet ros recebi dos pel a funo chamada, na qual a funo recebe os cont edos passados pel a funo chamadora, na ordem com os quai s so i nformados.
User Funct i on Cal cFat or ( nFat or)
Local nCnt Local nResul t ado : = 0
For nCnt : = nFat or To 1 St ep - 1 nResul t ado * = nCnt Next nCnt
Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ; " " + cVal ToChar( nResul t ado) )
Ret urn
Avali ando a funo Cal cFat or( ) descri t a ant eri orment e podemos veri fi car que a mesma r ecebe como par met ro para sua execuo a vari vel nFat or.
Com base nest a funo podemos descr ever duas forma de passagem de parmet r os por cont edo:
E Passagem de cont edos di r et os E Passagem de v ar i v ei s como cont e dos
Ex empl o 01 Passagem de cont e dos di r et os
User Funct i on Di rFat or( )
Local nResul t ado : = 0
nResul t ado : = Cal cFat or ( 5)
- 78 -
ADVPL Compl et o
A passagem de cont edos di ret os i mpli ca na defi ni o explcit a do val or do parmet ro na execuo da chamada da funo. Nest e caso foi i nformado o cont edo 5 ( numri co) como cont edo para o pri mei ro parmet ro da funo Cal cFat or.
Como a l i nguagem ADVPL t r at a os parmet r os de for ma posi ci onal , o cont edo 5 ser at ri budo di ret ament e a vari vel defi ni da como pri mei ro parmet ro da funo chamado, no nosso caso nFat or.
Por ser uma at ri bui o de par met ros por cont edo, o i nt erpret ador da li nguagem basi cament e execut a uma operao de at ri bui o normal , ou sej a, nFat or : = 5.
Duas caract erst i cas da linguagem ADVPL t or nam necessri a uma at eno especi al na chamada de funes:
1. A li nguagem ADVPL no uma linguagem t i pada, de for ma que as vari vei s no t em um t ipo previ ament e defi ni do, acei t ando o cont edo que l hes for i mpost o at r avs de uma at ri bui o.
2. Os parmet ros de uma funo so at ri budos de acordo com a ordem com os quai s so defi ni dos na chamada da mesma. No real i zada nenhum t i po de consi st nci a em rel ao aos t i pos dos cont edos e obri gat ori edade de parmet r os nest a ao.
Os par met ros de uma funo so caract eri zados como vari vei s de escopo LOCAL para efei t o de execuo.
Dest a forma os mesmos no devem ser defi ni dos novament e como LOCAL na rea de defi ni o e i ni ci alizao de vari vei s, poi s caso i st o ocor ra haver a perda dos val or es r ecebi dos pel a redefi ni o das vari vei s na funo.
Caso sej a necessri o garant i r um cont edo padro para um det er mi nado parmet ro dever ser ut ili zado o i dent i fi cador DEFAULT conforme det al hado no t pi co Trat ament o de val or es padr es para parmet ros de funes .
Ex empl o 02 Passagem de v ar i v ei s como cont edos
User Funct i on Di rFat or( )
Local nResul t ado : = 0 Local nFat orUser : = 0
nFat orUser : = Get Fat or ( ) / / Funo il ust rat i va na qual o usuri o i nforma o fat or a ser ut i lizado.
nResul t ado : = Cal cFat or ( nFat or User )
A passagem de cont edos como vari vei s i mpli ca na ut ili zao de vari vei s de apoi o par a execut ar a chamada de uma funo. Nest e caso foi i nformada a vari vel nFat orUser, a qual ser defi ni da pel o usuri o at ravs da funo il ust rat i va Get Fat or( ) . O uso de vari vei s de apoi o fl exi biliza a chamada de out ras funes, poi s el as sero paramet ri zadas de acordo com as necessi dades daquel e processament o especfi co no qual se encont ra a funo chamadora.
- 79 -
ADVPL Compl et o
Como a l i nguagem ADVPL t rat a os parmet r os de forma posi ci onal , o cont edo da vari vel nFat orUser ser at ri budo di ret ament e a vari vel defi ni da como pri mei ro parmet r o da funo chamado, no nosso caso nFat or.
Por ser uma at ri bui o de par met ros por cont edo, o i nt erpret ador da li nguagem basi cament e execut a uma operao de at ri bui o normal , ou sej a, nFat or : = nFat or User.
A passagem de parmet r os no necessi t a que as vari vei s i nformadas na funo chamadora t enham os mesmos nomes das vari vei s ut ilizadas na defi ni o de parmet r os da funo chamada.
Dest a forma podemos t er:
User Funct i on Di rFat or( )
Local nFat orUser : = Get Fat or( )
nResul t ado : = Cal cFat or ( nFat or User )
...
Funct i on Cal cFat or( nFat or ) ...
As vari vei s nFat orUser e nFat or podem t er nomes di fer ent es poi s o i nt erpr et ador far a at ri bui o de cont edo com base na ordem dos parmet ros e no pel o nome das vari vei s.
Passagem de par met r os por r ef er nci a
A passagem de par met r os por refernci a uma t cni ca mui t o comum nas linguagens de programao a qual per mi t e que vari vei s de escopo LOCAL t enham seu cont edo mani pul ado por funes especfi cas, mant endo o cont r ol e dest as vari vei s rest ri t o a funo que as defi ni u e as funes desej adas pel a apli cao.
A passagem de parmet ros por refernci a ut iliza o concei t o de que uma vari vel uma rea de memri a e port ant o passar um parmet ro por refernci a nada mai s do que ao i nvs de passar o cont edo par a a funo chamada, passar qual a rea de memri a ut ilizada pela vari vel passada.
- 80 -
ADVPL Compl et o
Passagem de par met r os t r adi ci onal Duas var i vei s x Duas r eas de memr i a
Passagem de par met r os por r ef er nci a Duas var i vei s x uma ni ca r ea de memr i a
- 81 -
ADVPL Compl et o
Dest a forma a funo chamada t em acesso no apenas ao cont edo, mas a vari vel em si , poi s a rea de memri a a vari vel , e qual quer alt erao nest a ser vi svel a funo chamadora quando t i ver o r et orno da funo chamadora.
Tr at ament o de cont edos padr es par a par met r os de f unes
O t rat ament o de cont edos padres para parmet r os de funes muit o ut ilizado nas funes padres da apl i cao ERP, de for ma a garant i r a corr et a execuo dest as funes por qual quer funo chamadora, evi t ando si t uaes de ocor rnci as de err os pel a fal t a da defi ni o de parmet ros necessri os a cor ret a ut ili zao da funo.
A li nguagem ADVPL no obri ga a passagem de t odos os parmet r os descri t os na defi ni o da funo, sendo que os parmet r os no i nformados sero consi derados com cont edo nul o.
Dest a forma o uso do i dent i fi cador DEFAULT permi t e ao desenvol vedor garant i r que na ut ili zao da funo det ermi nados parmet ros t ero o val or com um t i po adequado a funo.
Ex empl o:
User Funct i on Cal cFat or ( nFat or)
Local nCnt Local nResul t ado : = 0 Defaul t nFat or : = 1
For nCnt : = nFat or To 1 St ep - 1 nResul t ado * = nCnt Next nCnt
Ret urn nResul t ado
No exempl o descri t o, caso o parmet r o nFat or no sej a i nformado na funo chamadora, o mesmo t er seu cont edo defi ni do como 1.
- 82 -
ADVPL Compl et o
Se est e t r at ament o no fosse reali zado e com i sso o parmet r o nFat or no fosse i nformado, ocor reri a o segui nt e event o de err o:
Ex empl o:
User Funct i on Cal cFat or ( nFat or)
Local nCnt Local nResul t ado : = 0
For nCnt : = nFat or To 1 St ep - 1 / / nFat or est como Nul o, port ando nCnt nul o nResul t ado * = nCnt Next nCnt / / Ao efet uar o Next , o i nt erpret ador real i za a ao nCnt + = 1.
Ret urn nResul t ado
Como o i nt erpret ador real i zar a ao nCnt + = 1, e o cont edo da vari vel nCnt nul o ocor rer o er ro de t ype mi smat h on + = , expect ed N U poi s os t i pos das vari vei s envol vi dos na operao so di ferent es: nCnt nul o ( U) e 1 numri co ( N) .
Caso o parmet r o que possui a opo DEFAULT descri t a no font e sej a i nformado, a li nha de DEFAULT no ser execut ada, mant endo dest a forma o cont edo passado pel a funo chamadora.
- 83 -
ADVPL Compl et o
8. Di r et i vas de compi l ao
O compi l ador ADVPL possui uma funci onali dade denomi nada pr- pr ocessador, o qual nada mai s do que um programa que exami na o programa font e escri t o em ADVPL e execut a cert as modi fi caes nel e, baseadas nas Di r et i vas de Compil ao.
As di ret i vas de compil ao so comandos que no so compi l ados, sendo di ri gidos ao pr - processador, o qual execut ado pel o compil ador ant es da execuo do processo de compi l ao propri ament e di t o.
Port ant o, o pr - pr ocessador modi fi ca o programa font e, ent regando para o compi l ador um programa modi fi cado de acordo com as di ret i vas de compi l ao, as so i ni ci adas pel o caract er e # .
As di ret i vas podem ser col ocadas em qual quer part e do programa, sendo que as i mpl ement adas pel a li nguagem ADVPL so:
E # I NCLUDE E # DEFI NE E # I FDEF E # I FNDEF E # ELSE E # ENDI F E # COMMAND
Lembr e- se
As di ret i vas de compil ao t ambm so conheci das como UDC User Defi ned Commands.
Di r et i v a: # I NCLUDE
A di ret i va # I NCLUDE indi ca em que arqui vo de ext enso CH ( padro ADVPL) est o os UDCs a ser em ut ili zados pel o pr- pr ocessador.
A apli cao ERP possui di versos i ncl udes, os quai s devem ser ut i lizados segundo a apl i cao que ser desenvol vi da, o que permi t i r a ut ilizao de r ecursos adi cionai s defi ni dos para a linguagem, i mpl ement ados pel a rea de Tecnol ogi a da Mi crosi ga.
Os i ncl udes mai s ut ili zados nas apli caes ADVPL desenvol vi das par a o ERP so:
E PROTHEUS.CH: di ret ivas de compi l ao padres par a a linguagem. Cont m a especi fi cao da mai or i a das sint axes ut ili zadas nos font es, i ncl usive permi t i ndo a compat i bilidade da si nt axe t radi ci onal do Cli pper para os novos r ecur sos i mpl ement ados no ADVPL.
- 84 -
ADVPL Compl et o
O i ncl ude PROTHEUS.CH ai nda cont m a r efernci a a out ros i ncl udes ut ili zadas pel a linguagem ADVPL que compl ement am est a funci onali dade de compat i bilidade com a si nt axe Cli pper, t ai s como:
o DI ALOG.CH o FONT.CH o I NI .CH o PTMENU.CH o PRI NT. CH
Fi que at ent o
A ut ilizao do i ncl ude prot heus.ch nos font es desenvol vi dos para a apli cao ERP Pr ot heus obri gat ri a e necessri a ao cor ret o funci onament o das apl i caes.
E AP5MAI L. CH: Permi t e a ut ili zao da si nt axe t radi ci onal na defini o das segui nt es funes de envi o e r ecebi ment o de e- mai l :
o CONNECT SMTP SERVER o CONNECT POP SERVER o DI SCONNECT SMTP SERVER o DI SCONNECT POP SERVER o POP MESSAGE COUNT o SEND MAI L FROM o GET MAI L ERROR o RECEI VE MAI L MESSAGE
E TOPCONN.CH: Permi t e a ut ili zao da si nt axe t radi ci onal na defi ni o das segui nt es funes de i nt egrao com a ferrament a TOPCONNECT ( MP10 DbAcess) :
o TCQUERY
E TBI CONN.CH: Permi t e a ut ili zao da si nt axe t radi ci onal na defi ni o de conexes com a apli cao Server do ambi ent e ERP, at ravs da segui nt es si nt axes:
o CREATE RPCCONN o CLOSE RPCCONN o PREPARE ENVI RONMENT o RESET ENVI RONMENT o OPEN REMOTE TRANSACTI ON o CLOSE REMOTE TRANSACTI ON o CALLPROC I N o OPEN REMOTE TABLES
E XMLXFUN.CH: Permi t e a ut ili zao da si nt axe t radi ci onal na mani pul ao de arqui vos e st ri ngs no padro XML, at ravs das segui nt es si nt axes:
o CREATE XMLSTRI NG o CREATE XMLFI LE o SAVE XMLSTRI NG o SAVE XMLFI LE
- 85 -
ADVPL Compl et o
o ADDI TEM TAG o ADDNODE NODE o DELETENODE
Os recursos de t rat ament os de e- mail s, int egrao com a ferr ament a TOPCONNECT ( DbAcess) , pr eparao de ambi ent es e mani pul ao de arqui vos e st ri ngs do padro XML sero abordados no curso de ADVPL Avanado.
O di ret ri o de i ncludes deve ser especi fi cado no ambi ent e de desenvol vi ment o do ERP Prot heus ( MP- I DE) para cada confi gurao de compi l ao di sponvel .
Caso o di ret ri o de i ncl udes no est ej a i nformado, ou est ej a i nfor mado i ncorret ament e ser exi bi da uma mensagem de err o i nformando:
No f oi possv el cr i ar o ar qu i v o < cami nho\ nome> .ERX
As funes desenvol vi das para a apl i cao ERP cost umam ut ili zar i ncl udes para defi ni r o cont edo de st ri ngs e vari vei s di versas ut ili zadas pel a apli cao em di ferent es i di omas. Dest a forma normal veri fi car que um font e possui um arqui vo .CH com o mesmo nome, o que caract eri za est e t i po de i ncl ude.
Di r et i v a: # DEFI NE
A di ret i va # DEFI NE per mi t e que o desenvol vedor cri e novos t ermos para ser em ut ilizadas no cdi go font e. Est e t er mo t em o efei t o de uma vari vel de escopo PUBLI C, mas que afet a soment e o font e na qual o # DEFI NE est defi ni do, com a caract er st i ca de no permi t i r a al t erao de seu cont edo.
Dest a forma um t er mo defi ni do at ravs da di ret i va # DEFI NE pode ser consi derado como uma const ant e.
Os arqui vos de i nclude defi ni dos para os font es da apli cao ERP cont m di ret i vas # DEFI NE para as st ri ngs de t ext os de mensagens exi bi das para os usuri os nos t r s i di omas com os quai s a apli cao di st ri buda: Port ugus, I ngl s e Espanhol .
Por est a razo a apli cao ERP possui t rs reposi t ri os di st i nt os para cada uma das bases de dados homol ogadas pel a Mi crosi ga, poi s cada compi l ao ut ili za uma di ret i va referent e ao seu i di oma.
- 86 -
ADVPL Compl et o
Di r et i v as: # I FDEF, I FNDEF, # ELSE e # ENDI F
As di ret i vas # I FDEF, # I FNDEF, # ELSE e # ENDI F permi t em ao desenvol vedor cri ar font es fl exvei s e sensvei s a det ermi nadas confi guraes da apl i cao ERP.
At ravs dest as di ret i vas, podem ser veri fi cados parmet r os do si st ema, t ai s como o i di oma com o qual est paramet ri zado e a base de dados ut ili zada para armazenar e ger enci ar as i nformaes do ERP.
Dest a forma, ao i nvs de escr ever doi s ou mai s cdi gos font es que r eal i zam a mesma funo, mas ut ilizando recursos di st i nt os para cada base de dados ou exi bi ndo mensagem para cada um dos i di omas t rat ados pel a apl i cao, o desenvol vedor pode pr eparar seu cdi go font e para ser aval i ado pel o pr- processador, o qual i r gerar um cdi go compi l ado de acordo com a anli se dos parmet ros de ambi ent e.
Est as di ret i vas de compil ao est o normal ment e associ adas as seguint es veri fi caes de ambi ent e:
E I di oma: veri fi ca as vari vei s SPANI SH e ENGLI SH, di sponi bilizadas pel a apli cao. O i di oma port ugus det ermi nado pel a exceo:
# I FDEF SPANI SH # DEFI NE STR0001 Hol a ! ! ! # ELSE
# I FDEF ENGLI SH # DEFI NE STR0001 Hel lo ! ! ! # ELSE # DEFI NE STR0001 Ol ! ! ! # ENDI F
# ENDI F
Apesar da est rut ura semel hant e ao I F- ELSE- ELSEI F- ENDI F, no exi st e a di ret i va de compil ao # ELSEI F, o que t or na necessri o o uso de di versos # I FDEFs par a a mont agem de uma est rut ura que seria faci l ment e sol uci onada com I F- ELSE- ELSEI F- ENDI F.
A apli cao ERP di sponi biliza a vari vel de escopo PUBLI C - __LANGUAGE, a qual cont m uma st ri ng que i dent i fi ca o i di oma em uso pel o si st ema, cuj o os cont edos possvei s so:
E PORTUGUESE E SPANI SH E ENGLI SH
- 87 -
ADVPL Compl et o
E Banco de Dados: veri fi ca as vari vei s AXS e TOP para det ermi nar se o banco de dados em uso pel a apli cao est no formado I SAM ( DBF, ADS, CTREE, et c.) ou se est ut ili zando a fer rament a TOPCONNECT ( DbAcess) .
Os bancos de dados padro AS400 no permi t em a execuo de quer i es no format o SQLANSI at r avs da ferrament a TOPCONNECT ( DbAcess) .
Dest a forma necessri o r eal izar uma veri fi cao adi ci onal ao # I FDEF TOP ant es de execut ar uma query, que no caso r eal i zada at ravs do uso da funo TcSrvType( ) , a qual ret orna a st r i ng AS/ 400 quando est e for o banco em uso.
Para est es bancos deve ser ut ili zada a si nt axe ADVPL t radi ci onal .
Di r et i v a: # COMMAND
A di ret i va # COMMAND ut ili zada pri nci pal ment e nos i ncludes da li nguagem ADVPL para efet uar a t raduo de comandos em si nt axe CLI PPER para as funes i mpl ement adas pel a Tecnol ogi a Mi crosi ga.
Est a di ret i va permi t e que o desenvol vedor defi na para o compi l ador como uma expresso dever ser i nt erpret ada.
Tr echo do ar qu i v o PROTHEUS.CH
# xcommand @ < nRow> , < nCol > SAY [ < oSay> < l abel : PROMPT,VAR > ] < cText > ; [ PI CTURE < cPi ct > ] ; [ < dl g: OF,WI NDOW, DI ALOG > < oWnd> ] ; [ FONT < oFont > ] ; [ < l Cent er: CENTERED, CENTER > ] ; [ < l Right : RI GHT > ] ; [ < l Border: BORDER > ] ; [ < l Pi xel : PI XEL, PI XELS > ] ; [ < col or: COLOR,COLORS > < nCl rText > [ ,< nCl rBack> ] ] ; [ SI ZE < nWi dt h> , < nHei ght > ] ; [ < desi gn: DESI GN > ] ; [ < updat e: UPDATE > ] ; [ < l Shaded: SHADED, SHADOW > ] ; [ < l Box: BOX > ] ; [ < l Rai sed: RAI SED > ] ; = > ; [ < oSay> : = ] TSay ( ) : New ( < nRow> , < nCol > , < { cText } > ,; [ < oWnd> ] , [ < cPi ct > ] , < oFont > , < .l Cent er. > , < .l Ri ght .> , < .l Border.> ,; < .l Pi xel .> , < nCl rText > , < nCl rBack> , < nWi dt h> , < nHei ght > ,; < .desi gn.> , < .updat e.> , < .l Shaded.> , < .l Box.> , < .l Rai sed.> )
At ravs da di ret i va # COMMAND, o desenvol vedor det ermi nou as regras para que a si nt axe t radi ci onal da linguagem CLI PPER para o comando SAY fosse conver t i da na especi fi cao de um obj et o TSAY( ) do ADVPL.
- 88 -
ADVPL Compl et o
MDULO 03: Desenvol vendo pequenas cust omi zaes
9. ADVPL e o ERP Mi cr osi ga Pr ot heus
O ADVPL ( Advanced Pr ot heus Language) uma linguagem de programao desenvol vi da pela Mi crosi ga e que cont m t odas as inst rues e funes necessri as ao desenvol vi ment o de um si st ema, i ndependent e de sua compl exi dade.
O PROTHEUS, por out r o l ado, uma pl at afor ma t ecnol gi ca que engl oba um Servi dor de Apli cao, um Di ci onrio de Dados e as I nt erfaces para conexo com o usuri o. o Prot heus que execut a o cdi go ADVPL e o devi do acesso base da dados.
O Pr ot heus compost o pel o ERP ( que engl oba, al m das funcionali dades descri t as nos capt ul os ant eri ores, mai s de t ri nt a vert i cai s apli cadas a reas especfi cas de negci os) e pel o Confi gurador ( programa que permi t e cust omi zar o si st ema s necessi dades do usuri o de forma fcil ) .
9.1. O Ambi ent e Pr ot heus
O Pr ot heus const i t udo de um conj unt o de Soft war es que compem as camadas de funci onali dades bsi cas aos servi os de apl icao, i nt erface, banco de dados e reposi t ri o, conforme o di agrama da fi gura abai xo:
O obj et i vo do TOTVS DevSt udi o faci li t ar a t arefa de escr ever programas: at ravs de cor es, i ndi ca se a pal avra escri t a uma i nst ruo, uma vari vel ou um coment ri o; organi za a bi bli ot eca de programas em pr oj et os e admi nist ra o reposi t ri o de obj et os; apont a er ros de Fi gu r a: Camadas bsi cas do ambi ent e Pr ot heu s
Para execut ar um progr ama desenvol vi do em ADVPL, pr eci so ant es de mai s nada escr ev- l o e compi l - l o. Est e procedi ment o fei t o at ravs da ferrament a TOTVS DevSt udi o do Prot heus ( Tot vs Devel opment St udi o) .
- 89 -
ADVPL Compl et o
si nt axe; permi t e o debug ( execuo passo a passo do pr ograma, veri fi cando o cont edo das vari vei s) e fornece assi st ent es ( model os) de pr ogramas.
E Prot eger o pr ograma font e, evi t ando que sej a al t erado i ndevi dament e, poi s soment e os obj et os so di st ri budos com uma execuo mai s rpi da em funo da compi l ao no DEV- St udi o; Fi gu r a: Man ut eno n o r eposi t r i o de obj et os
Aps compil ar o programa, o resul t ado um obj et o, o qual carregado na memri a fi cando di sponvel para sua execuo at ravs da apl i cao PROTHEUS.
O obj et o no um execut vel , ou sej a, no est convert i do para a linguagem nat i va do equi pament o. Quem faz esse t rabal ho o Prot heus Server em t empo de execuo. Por i sso, o Prot heus Ser ver est sempre pr esent e na memri a em t empo de execuo, permi t i ndo:
E Fl exi bilizao pl at afor ma de t rabal ho. Assi m, um mesmo programa pode rodar em ambi ent es Wi ndows, Li nux ou mesmo em um Hand Hel d, fi cando a t arefa de adequao para o Servi dor Pr ot heus;
E Que o si st ema cresa de forma i limi t ada, poi s os obj et os fi cam fora do execut vel ;
E O uso de macr o subst i t ui es, ou sej a, o uso de r ot i nas ext eri ores ao si st ema armazenadas em arqui vos e que podem faci l ment e al t eradas pel o usur i o, poi s o Ser ver t ambm i nt erpr et a o cdi go font e em t empo de execuo.
- 90 -
ADVPL Compl et o
Fi gu r a: Di agr ama esquemt i co de obj et os Pr ot heus
O Reposi t ri o de Obj et os a bi bli ot eca de obj et os de t odo o ambi ent e Pr ot heus, i ncl uindo t ant o os obj et os i mpl ement ados par a as funcionali dades bsi cas do ERP como aquel es gerados pel os usuri os. A fi gura abai xo demonst ra a est rut ura e a i nt erconexo ent re as vri as camadas.
Fi gu r a: Est r ut ur a de i nt er conex o do Pr ot h eus
- 91 -
ADVPL Compl et o
El a demonst ra t ambm que os dados a ser em processados podem est ar armazenados em bases I SAM ou em Bancos de Dados padro SQL. No pri mei ro caso o server comuni ca- se di ret ament e com os dados. Em Bancos SQL a i nt erface TOPCONNECT / DBACCESS que convert e os comandos de ent rada e sada, adequando- os ao SQL ut ili zado ( SQl Server Mi crosoft , Oracl e, DB2, et c.) .
Uma vez t ermi nado o processament o do obj et o chamado, o el e descart ado da memri a, ou sej a, o Prot heus um si st ema que pode cr escer de forma i limi t ada poi s os obj et os, armazenados em um reposi t ri o prat i cament e no ocupam espao no HD ( Hard Di sk) .
O Pr ot heus uma pl at afor ma mul t i camada. Ent re as di versas camadas, t emos a i nt erface de apresent ao ao usuri o ( Remot e) , o t rat ament o dado para as r egras de negci o i mpl ement adas ( Server) , o acesso aos obj et os do reposi t ri o ( Ser ver) , o acesso aos dados di sponvei s no Banco de Dados ( Ser ver ou TOPCONNECT / DBACCESS ) e ao ger enci ament o de ser vi os WEB ( Ser ver) . Nest e processo, o Prot heus possui , basi cament e, quat ro apl i cat i vos ut ilizados com di fer ent es fi nali dades:
E Pr ot heus Ser v er / TOTVS AppSer v er : Responsvel pel a comuni cao ent re o cl i ent e, o banco de dados e o RPO. O nome do execut vel depende da ver so do si st ema ( TOTVSAPPSERVER. EXE) sendo que as pl at aformas I SAM suport adas pel o Pr ot heus Ser ver so DBF e CTREE.
E Pr ot heus Remot e / TOTVS Smar t Cl i ent : I nst al ado no Server ou na est ao. O nome t ambm depende da ver so do si st ema ( TOTVSSMARTCLI ENT. EXE) .
E TopCon nect / DbAccess: Responsvel pel a converso dos comandos de banco de dados, adequando- os ao SQL ut ili zado.
E Pr ot heus Moni t or / TOTVS Moni t or : Progr ama de anli se que veri fi ca quem est usando o si st ema e possi bilit a o envi o de mensagens ou mesmo derrubar conexes ( TOTVSMONI TOR.EXE) .
Al guns nomes r efer em- se a um conj unt o de pr ogramas para facili t ar a sua i dent i fi cao:
E RPO: o arqui vo bi nrio do APO ( Advanced Prot heus Obj ect s) , ou sej a, os obj et os.
E Bui l d: Execut vei s, DLLs e o RPO compl et o.
E Pat ch : At uali zaes pont uai s do RPO, apl i cadas por mei o do I DE.
E Updat e: Pacot e de at ualizao para o r eposi t ri o ( RPO) li berado peri odi cament e cont endo t odas as adequaes e mel hori as di sponi bili zadas para o si st ema em um det ermi nado perodo, sendo no cumul at i vo, apli cadas por mei o do DEV- St udi o.
A i nt erface de apr esent ao r eali zada pel o Smart Cli ent que pr ocessa a part e da est ao, basi cament e, t el a e t ecl ado. Pode est ar gravado no Server e ser car regado vi a rede para a memri a da est ao. Ou, de pr efernci a, deve fi car ar mazenado no HD da est ao. Pode t ambm ser carr egado pel o I nt ernet Expl orer, rodando dent r o do prpri o browser com o Smart Cli ent Act i veX e permi t i ndo o acesso ao Prot heus Server pel a I nt ernet , com as mesmas funci onali dades do Smart Cli ent , sendo que o browser preci sa supor t ar o uso da t ecnol ogi a Act i veX.
Caso exi st a al gum Fi rewall ou Proxy ent r e o WEB Server e o Br owser que vai acessar o Smart Cli ent Act i veX, el es devero ser confi gurados para permi t i r o seu downl oad.
- 92 -
ADVPL Compl et o
9.2. Or gani zao e conf i gur ao i ni ci al do ambi ent e Pr ot heus
O Prot heus ocupa uma past a que t em a segui nt e est rut ura:
. APO: Cont m o arqui vo RPO, r eposi t ri o de obj et os do Pr ot heus. Fi gu r a: Est r ut ur a bsi ca das past as do Pr ot heu s
. SMARTCLI ENT: Rene um conj unt o de arqui vos execut vei s, dl l s e arqui vos de confi gurao do si st ema, para possi bilit ar o acesso ao servi dor. . APPSERVER: Rene um conj unt o de execut vei s, dll s e arqui vos de confi gurao do si st ema que compem o servi dor. . I NCLUDE: Cont m as bi bli ot ecas necessri as para a compi l ao de programas Prot heus. . DATA: Cont m a base de dados no caso de ver so I SAM. . SAMPLES: Ofer ece um conj unt o de pr ogramas exempl o e arqui vos ADVPL padr es da Mi crosi ga. . SPOOL: Nest a past a so gravados os rel at ri os gerados em di sco pel o si st ema Prot heus. . SYSTEM: Cont m os arqui vos de menus, os arqui vos de confi guraes e os arqui vos de cust omi zaes ( SXs) do si st ema Prot heus.
- 93 -
ADVPL Compl et o
. SYSTEMLOAD: Cont m o di ci onri o de dados em format o TXT. nest e arqui vo que est o t odos os padres e format os para a ger ao dos arqui vos de confi guraes e de cust omi zaes ( SXs) , conforme a l ocal izao de pas defi ni da pel o usuri o na ent rada do si st ema. . MY PROJECTS: Suger e- se a cri ao dest a past a para armazenar pr oj et os e font es das cust omi zaes real i zadas pel o usuri o. . UPDATES: Suger e- se est a past a para o ar mazenament o das at uali zaes a ser em apli cadas no si st ema Pr ot heus.
Apesar da est rut ura il ust rada ant eri orment e i ndi car que as past as est o subordi nadas past a PROTHEUS, possvel que al gumas del as possam est ar em mqui nas di ferent es ou at mesmo em ambi ent es comput aci onai s di ferent es.
Fi gu r a: For mas de i nst al ao e u so do Pr ot heu s
- 94 -
ADVPL Compl et o
Para i sso, necessri o confi gurar, ou sej a, i nfor mar ao Prot heus onde est cada uma del as. Esse t i po de i nformao const a nos arqui vos de parmet r os de confi gurao do si st ema ( TOTVSAPPSERVER. I NI e TOTVSSMARTCLI ENT. I NI ) exi st ent es nas respect i vas past as APPSERVER e SMARTCLI ENT.
Os parmet r os do TOTVSAPPSERVER. I NI so l i dos pel o programa TOTVSAPPSERVER. EXE l ogo no i nci o de sua execuo. O mesmo pr ocediment o ocorr e em r el ao aos parmet r os do TOTVSSMARTCLI ENT. I NI pel o pr ograma TOTVSSMARTCLI ENT. EXE. A execuo desses doi s programas fei t a por mei o de ao do usuri o, facili t ada pel os at al hos TOTVS APPSERVER e TOTVS SMARTCLI ENT.
Fi gu r a: Li nk s dos par met r os de con f i gur ao
Para que o TOTVS AppServer e o TOTVS Smart Cl i ent sej am execut ados, os arqui vos TOTVSAPPSERVER. I NI e TOTVSSMARTCLI ENT. I NI devem est ar di sponvei s nas respect i vas past as APPSERVER e SMARTCLI ENT poi s so el es que i ndi cam o endereo das demai s past as conforme a il ust rao da fi gura ant eri or.
O det al he de pr eenchiment o das pr opri edades dos r espect i vos at al hos TOTVS AppServer e o TOTVS Smart Cl i ent demonst rado a segui r. No at alho do TOTV SAppSer ver, necessri o que sej a i nformado o parmet r o - debug ou - consol e .
- 95 -
ADVPL Compl et o
Pr opr i edades dos at al hos
= Dest i no: c: \ prot heus\ bi n\ appserver\ t ot vsappserver .exe - consol e I ni ci ar em: c: \ prot heus\ bi n\ appserver
E - Consol e ou - Debug
Execut ado como uma Janel aConsol e, as i nfor maes r ecebi das das conexes com o TOTVS Appli cat i on Server conect ados so exi bidas di ret ament e na t el a do consol e do TOTVS Appli cat i on Server, bem como i nformaes de No Conformi dades.
E - I nst al l
Se o TOTVS Appli cat ion Server, no for i nst al ado como um Ser vi o do NT, durant e a I nst al ao, i st o pode ser r eal i zado, execut ando- o com a opo de Li nha de Comando.
E - Remov e Para r emov- l o da Li st a de Servi os do NT, pode- se execut - l o com a opo de Li nha de Comando.
= Dest i no: c: \ prot heus\ bi n\ smart cli ent \ t ot vssmart cl i ent e.exe M I ni ci ar em: c: \ prot heus\ bi n\ smart cli ent
E - Q ( Qui et )
I ndi ca que o TOTVS Smart Cli ent , no dever most r ar o Spl ash ( I magem de Apresent ao) e a t el a de i dent i fi cao de Parmet r os I ni ci ai s, necessi t a ser acompanhada da ( Cl usul a P) .
E - P ( Mai n Pr ogr am)
I dent i fi ca o Programa ( APO) I ni ci al .
E - E ( Env i r onment )
Nome da Seo de Envi ronment , no ( I ni do Ser ver) , que ser ut ili zada, para defi ni es gerai s.
E - C ( Conn ect i on)
Nome da Seo de Conexo, que ser ut ili zada, para a conexo ao TOTVS Appli cat i on Server.
E - M ( Al l ow Mul t i Sessi on)
Per mi t e mlt i pl as i nst nci as ( Cpi as) do TOTVS Smart Cli ent , na mesma mquina, o que por Defaul t no permi t i do.
- 96 -
ADVPL Compl et o
Os parmet ros que confi guram o l ocal do RPO, o Banco de Dados ( I SAM ou SQL) , os arqui vos de menus, confi guraes e cust omi zaes do si st ema no arqui vo I NI so:
E Sour cePat h: I ndi ca o l ocal de ori gem dos obj et os. o ender eo do Reposi t ri o de Obj et os ( Exempl o: SourcePat h= C: \ PROTHEUS\ APO)
E Root Pat h: Apont a para a past a rai z ( i ni ci al ) , a part i r da qual ser o l ocali zados os dados ( no caso de I SAM) , bem como o prpri o Di ci onri o de Dados ( Exempl o: Root Pat h= C: \ PROTHEUS\ PROTHEUS_DATA)
E St ar t Pat h: I ndi ca qual a past a dent ro da past a rai z ( informada no parmet ro Root Pat h) que cont m os arqui vos de menus, os arqui vos de confi guraes e os arqui vos de cust omi zaes ( SXs) do si st ema Prot heus ( Exempl o: St art Pat h= \ SYSTEM\ ) .
No h necessi dade de que os parmet r os est ej am em ordem nos ar qui vos de confi gurao ( .i ni) . Al m dos parmet r os j det al hados, exi st em out ros que podem i ndi car a verso do si st ema, o t i po de banco de dados, l inguagem do pas em que est sendo ut i lizado e as mscaras de edi o e format ao.
Fi gu r a: Ex empl o de u m ambi ent e em um ar qu i v o de par met r os
No exempl o da fi gura ant eri or, o r t ul o [ environment ] descreve um conj unt o de parmet r os que sero i ni ci alizados no si st ema. Os rt ul os [ Dri ver s] e [ TCP] i dent i ficam a comuni cao que pode ser est abel eci da ent re o Pr ot heus Server e o Pr ot heus Remot e. Out ros ambi ent es podem ser confi gurados no mesmo arqui vo ( TOTVSAPPSERVER. I NI ) .
J o arqui vo de parmet ros do Prot heus Remot e ( TOTVSSMARTCLI ENT.I NI ) cont m apenas as confi guraes l ocai s, basi cament e as i nfor maes necessri as para a i ni ci alizao e a comuni cao com o Pr ot heus Server , conforme o exempl o da fi gura a segui r.
- 97 -
ADVPL Compl et o
[ CONFI G] LASTMAI NPROG= SI GACFG LANGUAGE= 1
[ DRI VERS] ACTI VE= TCP
[ TCP] SERVER= 172.16.72.41 PORT= 1234
E Act i v e: I ndi ca qual a for ma de comuni cao. Fi gu r a: Ex empl o de u m ar qu i v o de con f i gu r ao do r emot e
E Por t : I ndi ca o nmero da port a a ser ut ili zada para a comuni cao ent re o Prot heus Ser ver e o Prot heus Remot e. necessri o que a port a ut ili zada na comuni cao sej a a mesma em ambos ( no TOTVSAPPSERVER. I NI e no TOTVSSMARTCLI ENT. I NI ) . Val e ressal t ar que a port a 80 r eservada para a I nt ernet e pode causar confli t os caso sej a ut ili zada na comuni cao do Prot heus.
E Ser v er : Apont a para o ender eo do servi dor que pode ser a prpri a mquina ( l ocalhost ) ou o nome da mqui na ( Server= Ser vi dor_01) ou mesmo um ender eo I P ( exempl o Ser ver= 172.16.72.41) .
Ex empl o:
O parmet ro Server= 172.16.72.41 no arqui vo TOTVSSMARTCLI ENT. I NI i ndi ca ao Prot heus Remot e o ender eo da mquina na qual est funci onando o Prot heus Ser ver.
- 98 -
ADVPL Compl et o
9.3. O Conf i gur ador do Pr ot heus
9.3.1. Funci onal i dades Abor dadas
O obj et i vo dest e t pi co no abranger t odo a est rut ura e recursos do mdul o Confi gurador da apli cao ERP, mas permi t i r a realizao de t arefas de confi gurao si mpl es que sero necessri as no desenvol vi ment o de pequenas cust omi zaes.
Com foco nest e obj et i vo sero det al hadas as seguint es operaes
E Confi gurao e cri ao de novas t abel as no Di cionri o de Dados E At uali zao das est rut ur as do Di ci onri o de Dados o Tabel as do si st ema o Vali daes de campos o ndi ces de t abel as o Gat il hos de campos
Para cont ext uali zar a est rut ura da apli cao ERP, no t pi co a segui r det al hada a forma como as t abel as de dados do si st ema est o di vi didas ent re os di versos mdul os que compe o PROTHEUS.
9.3.2. Est r ut ur as bsi cas da apl i cao ERP Pr ot heus
Ar qui v os de conf i gur ao do si st ema
Ar qui v o Descr i o SI GAMAT Cadast r o de empr esas e fili ai s do si st ema SI GAPSS Arqui vo de usuri os, gr upos e senhas do si st ema SI X ndi ces dos arqui vos SX1 Pergunt as e r espost as SX2 Mapeament o de t abel as SX3 Di ci onri o de Dados SX4 Agenda do Schedul e de processos SX5 Tabel as SX6 Parmet r os SX7 Gat il hos de I nt erface SX8 Fora de uso SX9 Rel aci onament os ent re t abel as SXA Past as cadast rai s apont adas no SX3 SXB Consul t a por mei o da t ecl a F3 ( Consul t a Padro) SXD Cont rol e do Schedul e de pr ocessos SXE Seqnci a de document os ( + 1) SXF Seqnci a de document os ( Pr xi mo) SXG Tamanho padro para campos apont ado pel o SX3 SXK Respost a de Pergunt as ( SX1) por usuri os SXO Cont rol e de LOGs por t abel a SXP Hi st ri co de Logs cadast rados no SXO
SXQ Cadast r o de fi l t ros i nt eligent es da mbr owse ( cont m as i nformaes necessri as para a cri ao do fi lt ro) . SXR Cadast r o de r el aci onament o ent r e pr ograma x fil t ro ( ut ili zada i nt ernament e pel o Pr ot heus para veri fi car em quai s programas os fi l t ros podero ser ut ili zados) .
- 99 -
ADVPL Compl et o
SXS Cadast r o de pr ogramas ( ut ili zado na vali dao para most r ar/ i ni bi r os fil t ros na execuo da mbr owse) . SXT Tabel a de usuri os ( cont m as i nformaes dos usuri os que podero ut ilizar os fi lt ros da mbr owse) . SXOffi ce Cadast r o de r el aci onament o ent r e as ent i dades ( t abel as) e as consul t as TOI I .
Ambi ent es e t abel as
Na apli cao PROTHEUS as t abel as de dados podem t er uma est rut ura mai s si mpl es e econmi ca, com t abel as em DBF/ ADS, do fabri cant e Ext ended Syst em ou CTREE do fabri cant e FAI RCOM ou uma est rut ura mai s robust a e compl exa, em bases SQL ( SQLSERVER da Mi crosoft , ORACLE, DB I I da I BM, SYBASE, MYSQL, POSTGREE, et c. ) .
No caso do SQL, o acesso fei t o at ravs do TOPCONNECT / DBACESS, que convert e os comandos do ADVPL para est e ambi ent e.
Para permi t i r uma ut ilizao adequada das t abel as de dados do si st ema por cada um dos ambi ent es da apli cao ERP, as t abel as foram di vi didas em grupos denomi nados famli as . Cada mdul o pode ut i lizar uma ou mai s famli as de t abel as especi fi cas para suas at i vi dades, e ai nda compart i lhar informaes com out r os mdul os at ravs de famli as comuns a t odas as operaes real i zadas no si st ema.
A t abel a a segui r demonst ra al guns dos mdul os que compe a apl i cao ERP PROTHEUS at ual ment e:
Ambi ent e I dent i f i cao SI GAATF ATI VO FI XO SI GACOM COMPRAS SI GACON CONTABI LI DADE SI GAEST ESTOQUE E CUSTOS SI GAFAT FATURAMENTO SI GAFI N FI NANCEI RO SI GAFI S LI VROS FI SCAI S SI GAPCP PLANEJAMENTO E CONTROLE DA PRODUO SI GAGPE GESTO DE PESSOAL SI GAFAS FATURAMENTO DE SERVI OS SI GAVEI VE CULOS SI GALOJ
CONTROLE DE LOJAS/ AUTOMAO COMERCI AL SI GATMK CALL CENTER SI GAOFI OFI CI NAS SI GAPON PONTO ELETRNI CO SI GAEI C EASY I MPORT CONTROL SI GATCF TERMI NAL SI GAMNT MANUTENO DE ATI VOS SI GARSP RECRUTAMENTO E SELEO DE PESSOAL SI GAQI E I NSPEO DE ENTRADA QUALI DADE SI GAQMT METODOLOGI A QUALI DADE
O nome de cada t abel a no Pr ot heus const i t udo de sei s dgi t os, os quai s so ut ilizados para for mar a segui nt e represent ao:
F X X E E 0
- 100 -
ADVPL Compl et o
Onde:
F SF X Pri mei ro dgi t o represent a a famli a, o segundo dgi t o pode ser ut ilizado para det al har ai nda mai s a famli a especi fi cada no pri mei ro nvel ( subfamlia) , e o t er cei ro dgit o a numerao seqenci al das t abel as da famli a i ni ci ando em 0 e fi nalizando em Z . E E 0 Os doi s pri mei ros dgi t os i dent i fi cam a que empresa as t abel as est o vi ncul adas, l embrando que a i nformao de fi li al est cont i da nos dados da t abel a. O l t i mo dgi t o fi xo em 0 .
A t abel a a segui r demonst ra al gumas das pri nci pai s famli as de t abel as ut ili zadas pela apli cao ERP Prot heus:
Faml i a Descr i o S - Tabel as pert encent es ao si st ema bsi co, t ambm chamado Cl assi c S A Cadast r os de ent i dades compart il hadas ent re os ambi ent es ( Cli ent es, Fornecedor es, Bancos ent re out r os) . S B Cadast r os dos ambi ent es de Mat eri ai s ( Produt os, Sal dos ent re out ros) . S C Arqui vos de movi ment aes di versas ut ili zados pel os ambi ent es de Mat eri ai s ( Soli ci t ao ao Al moxari fado, Soli cit ao de Compras, Pedi do de Compras, Pedi do de Vendas, Ordens de Produo ent r e out ros) . S D Arqui vos de movi ment aes de est oque ( I t ens de not as fi scai s de ent rada e sada, movi ment os i nt ernos de est oque ent r e out r os) . S E Cadast r os e movi ment aes do ambi ent e Fi nancei ro. S F Cadast r os e movi ment aes Fi scai s ( Cabeal hos das not as fi scai s de ent rada e sada, cadast ro de t i pos de ent rada e sada, li vros fi scai s, ent re out r os) . S G Cadast r os do ambi ent e de Pl anej ament o e Cont rol e de Produo S H Movi ment os do ambi ent e de Pl anej ament o e Cont rol e de Pr oduo S I Cadast r os e movi ment os do ambi ent e Cont bi l ( descont i nuado) S N Cadast r os e movi ment os do ambi ent e At i vo Fi xo S R Cadast r os e movi ment os do ambi ent e Gest o de Pessoal S X Tabel as de confi gurao do si st ema S Z Tabel as li vres para ut ilizao e proj et os especficos em cl i ent es. A - Gest o de Pr oj et os C - Cont abili dade Gerenci al C T Cont abili dade Gerenci al C V Cont abili dade Gerenci al C W Cont abili dade Gerenci al D - Transport adoras e deri vados E - Comrci o ext eri or e deri vados G - Gest o Hospi t al ar J - Gest o Educaci onal N - Ser vi os Pbl i cos P - Reser vado para proj et os da fbri ca de soft war e Q - Quali dade e deri vados R - Recur sos Humanos e deri vados T - Pl ano de Sade W - Workfl ow Z - Tabel as li vres para ut ilizao e proj et os especfi cos em cl i ent es em adi o a famli a SZ.
- 101 -
ADVPL Compl et o
ndi ces
Cada t abel a do si st ema possui seus ndi ces defi ni dos no arqui vo de confi gurao SI X, o qual pode ser at ual i zado at ravs do mdul o Confi gurador.
Os arqui vos de ndi ces das t abel as de si st ema sero cri ados de acordo com o banco de dados ut ili zado ( I SAM ou conexo vi a TOPCONNECT) .
Para bancos de dados I SAM, ser gerados arqui vos com a mesma nomencl at ura da t abel a de dados, mas com uma ext enso di fer enci ada ( at ual ment e .CDX) . No caso da ut i lizao de um banco de dados, cada ndi ce ser uma numer ao seqenci al em funo do nome da t abel a ori gi nal .
As especi fi caes das chaves de ndi ces de cada um das t abel as est di sponvel no arqui vo de si st ema SI X, e a chave ni ca da t abel a ut ili zada para banco de dados est descri t a na t abela SX2.
Menu s
Cada mdul o da apli cao ERP possui um menu padro com t odas as funci onali dades di sponvei s para o ambi ent e, menu est e defi ni do at ravs de si nt axe XML ( arqui vos .XNU) .
Os menus possuem uma est rut ura padro que permi t e ao usuri o l ocali zar e i dent i fi car faci l ment e cada uma das funci onali dades ofer eci das pel o ambi ent e.
9.3.3. Acessando o mdul o Conf i gur ador
Para execut ar o mdul o Confi gurador necessri o que a apli cao Pr ot heus Server est ej a em execuo e at ravs da apli cao Prot heus Remot e dever ser i nformada como programa i ni ci al a opo SI GACFG.
Fi gu r a: Par met r os de i ni ci al i zao do si st ema
- 102 -
ADVPL Compl et o
Aps a confi rmao, a vali dao do acesso fei t a conforme t el a il ust rada a segui r:
Fi gu r a: Val i dao de acesso
Fi gu r a: Con f i r mao do acesso ao mdul o Conf i gu r ador
- 103 -
ADVPL Compl et o
Logo aps a sua confi rmao do usuri o e senha com di rei t o de admi ni st rador , ser apresent ada a t el a i ni cial do confi gurador , conforme most ra a fi gura a segui r:
Fi gu r a: I nt er f ace pr i n ci pal do mdu l o Conf i gur ador
- 104 -
ADVPL Compl et o
9.4. Funci onal i dades do Conf i gur ador
A cust omi zao de um si st ema como o Pr ot heus consi st e em adapt ar o si st ema de forma a mel hor at ender as necessi dades do cl i ent e.
A fl exi bilidade de um si st ema, ou sej a, sua capaci dade de adapt ar- se ( pol i morfi smo, aquel e que assume vri as formas) uma das mai s i mport ant es caract erst i cas de uma sol uo ERP.
As funci onalidades t rat adas pel o Confi gurador defi nem a fl exi bilidade do ERP Pr ot heus. Fl exi bilizar sem despadroni zar, ou sej a, t udo que foi cust omi zado permanece vl i do, mesmo com o desenvol vi ment o de novas verses.
Fi gu r a: Pr i nci pai s f u n ci on al i dades do mdu l o Conf i gu r ador
O Confi gurador o programa bsi co para o pr ocesso de cust omi zao do Prot heus at ravs da al t erao das t abel as da famli a SX. Nel es, o usuri o ou o anali st a de suport e r esponsvel pel a i mpl ant ao confi gura as i nformaes que ser o ut ili zadas pel os demai s ambi ent es do si st ema.
Essas i nformaes vo de si mpl es parmet ros at compl exas expr esses e comandos que so i nt erpr et adas em t empo de execuo.
Nos pr xi mos t pi cos sero abordadas as funci onali dades de cust omi zao di sponvei s no ambi ent e Confi gurador, rel evant es ao obj et i vo de desenvol vi ment o de pequenas cust omi zaes para a apli cao ERP.
- 105 -
ADVPL Compl et o
9.4.1. Di ci onr i o de Dados da apl i cao ERP
A i di a do Di ci onri o de Dados permi t i r que o usuri o possa i nclui r ou ini bi r campos, ou mesmo al t erar as pr opri edades dos campos exi st ent es. Pode, ai nda, cri ar novas t abel as. Ou sej a, os pr ogramas ao invs de t erem os campos defi ni dos em seu cdi go ori ginal , l em o Di ci onri o em t empo de execuo, mont ando ar rays com as pr opri edades de cada um. A part i r da, sua ut ilizao normal , at ravs do uso de funes do ADVPL que t ornam o t rabal ho do desenvol vedor t ranspar ent e a est a arqui t et ura.
O obj et i vo do Di ci onri o de Dados permi t i r que o pr pri o usuri o cri e novas t abel as ou al t ere os campos nas t abel as exi st ent es quant o ao seu uso, sua ordem de apresent ao, l egenda ( nos t r s i di omas) , val i dao, hel p, obri gat ori edade de pr eenchi ment o, i ni ci alizao et c.
9.4.2. Adi o de t abel as ao Di ci onr i o de Dados Fi gu r a: Con j u nt o de pacot es que compe o Di ci onr i o de Dados
Pr ocedi ment o
1. Para adi ci onar uma t abel a ao di ci onri o de dados de uma empr esa, sel eci one a opo Di ci onri o de Dados abai xo da empresa que ser at ualizada. ( rvor e de opes da part e esquerda da i nt erface vi sual do Ger enci ador de Bases de Dados) .
2. Aps a sel eo da opo Di ci onri o de Dados sero exi bi das as t abel as j cadast r adas no arqui vo de si st ema SX2.
- 106 -
ADVPL Compl et o
3. Aps a vi suali zao das t abel as j cadast radas no SX2 da empresa sel eci onada, ut ili ze o bot o I ncl ui r ( Fi gu r a: Con j u nt o de t abel as j cadast r adas no SX2
) . Ao ut ilizar est a opo ser exi bi da a t el a para defi ni o dos dados referent es nova t abel a que ser cri ada:
- 107 -
ADVPL Compl et o
4. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a segui r, e ao t rmi no confi rme o cadast rament o da nova t abel a com o bot o Confi rmar ( Fi gu r a: Cadast r o de u ma nov a t abel a
) .
Or i ent aes par a o cadast r ament o de u ma nov a t abel a
E O domni o SZ1 at SZZ ( consi derando t odos os nmer o e t odas as l et ras no l t i mo byt e) r eser vado par a dados excl usi vos do usuri o poi s esse i nt er val o no ser ut ili zado pel o si st ema. Caso sej a necessri o o domni o Z00 a ZZZ t ambm pode ser empr egado para desenvol vi ment os especfi cos do cl i ent e.
No devem ser cri adas t abel as especfi cas de cl i ent es com quai squer out ras nomencl at uras, o que pode afet ar di ret ament e um processo de at uali zao fut uro.
E O nome da t abel a pr eenchi do aut omat i cament e, adi ci onando 990. Esse dado r efer e- se empr esa 99 ( Test e Mat ri z) a qual est sendo adi ci onado t abel a.
E O Pat h refer e- se past a que cont er efet i vament e os dados das t abel as, quando I SAM, nas verses com banco de dados r el aci onal no so ut ili zadas. Essa past a ser cri ada dent ro da past a i ndi cada na confi gurao do si st ema como ROOTTPATH.
E O modo de acesso compart il hado indi ca que o si st ema possi bilit ar o uso si mul t neo da t abel a por duas ou mai s fi liai s. Se for compart i l hado o campo Fi li al fi ca em branco. Se for excl usi vo, grava- se o cdi go da fi li al at i va e soment e el a t em acesso ao r egi st ro.
E Aps a confi rmao, a t abel a cri ada passa a fazer part e do cadast r o do Di ci onri o de Dados, cont endo soment e o campo FI LI AL, o qual cri ado como padro pel a
- 108 -
ADVPL Compl et o
funci onali dade do mdul o.
9.4.3. Adi o de campos as t abel as do Di ci onr i o de Dados
Pr ocedi ment o
1. Para adi ci onar um campo a uma t abel a do di ci onri o de dados de uma empresa, sel eci one a opo Di ci onri o de Dados abai xo da empr esa que ser at ualizada. ( rvore de opes da part e esquerda da i nt erface vi sual do Gerenci ador de Bases de Dados) .
2. Aps a sel eo da opo Di ci onri o de Dados sero exi bi das as t abel as j cadast r adas no arqui vo de si st ema SX2.
3. Aps a vi suali zao das t abel as j cadast radas no SX2 da empresa sel eci onada, l ocal ize e sel eci one a t abel a que ser at ual izada, e ut ili ze o bot o Edi t ar ( Fi gu r a: Con j u nt o de t abel as j cadast r adas no SX2
) . Ao ut ili zar est a opo ser exi bi da a t ela de manut eno de campos da t abel a sel eci onada:
- 109 -
ADVPL Compl et o
4. Sel eci one a opo Campos ( Fi gu r a: Est r ut ur a de uma t abel a j cadast r ada n o si st ema
) , para que sej am exi bi dos os campos di sponvei s para a t abela no arqui vo de si st ema SX3.
Fi gu r a: Est r ut ur a de campos de uma t abel a j cadast r ada no si st ema
- 110 -
ADVPL Compl et o
5. Aps a vi suali zao dos campos j cadast rados no SX3 da t abel a sel eci onada, ut ili ze a opo I ncl ui r ( ) . Ao ut ilizar est a opo ser exi bi da a t el a para defini o dos dados referent es ao novo campo que ser cri ado:
5. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a segui r, e ao t rmi no confi rme o cadast rament o do novo campo par a a t abel a com o bot o Confi rmar ( Fi gu r a: Dados par a par amet r i zao de u m nov o campo no si st ema
) . 6. Confi rme as at uali zaes para a t abel a sel eci onada com o bot o Confi rmar ( ) . 7. At uali ze as confi guraes do si st ema com o bot o At uali zar ( ) .
Fi gu r a: At u al i zao dos dados do si st ema
- 111 -
ADVPL Compl et o
20
Or i ent aes par a o cadast r ament o de u m n ov o campo
1. As pr opri edades defi ni das no Di ci onri o de Dados ( SX3) so as segui nt es:
E Nome do campo: Todos os campos t m como prefi xo o pr pri o nome da t abel a, sendo que para t abel as da famli a S , o pr efi xo do campo compost o apenas pel os pr xi mos doi s dgi t os. No caso das demai s t abel as, o prefi xo do campo sero os t rs dgi t os i dent i fi cadores da t abel a.
E Ti po do campo: I ndi ca se caract er e, numri co, l gi co, dat a ou memo. cl aro que a mudana do t i po de campo deve ser fei t a com mui t o cui dado, poi s, se t i vermos um campo numri co usado em cl cul os e el e for al t erado para caract er e, cert ament e t er emos um er r o.
E Tamanho do campo: Tambm aqui necessri o cert o cui dado ao al t er- l o, poi s poderemos t er t runcament os em rel at ri os e consul t as em que h espao para cont edos mai or es que o ori ginal .
E For mat o de edi o: Defi ne como o campo aparece nas t el as e nos rel at ri os.
E Cont ex t o: Pode ser r eal ou vi rt ual . O cont ext o vi rt ual cri a o campo soment e na memri a e no na t abel a armazenada no di sco. I sso necessri o porque os programas de cadast rament o e de consul t a genri ca apresent am soment e uma t abel a de cada vez. Assi m, se qui sermos apresent ar um campo de uma out ra t abel a, ou mesmo o resul t ado de um cl cul o, sem que t al i nformao ocupe espao fsi co no HD, ut ili zamos o cont ext o vi rt ual . Campos vi rt uai s normal ment e so ali ment ados por gat ilhos.
E Pr opr i edade: I ndi ca se um campo pode ou no ser al t erado pel o usuri o. Exempl o: sal dos nor mal ment e no podem, poi s quem cuida dessa t ar efa so os programas.
2. Demai s caract erst i cas que devem ser observadas na confi gurao do campo:
E O campo Deci mal ser soli cit ado soment e para os campos de t i po numri co. Gui a: Campo
E O format o ! i ndi ca que o caract ere ser sempre mai scul o, i ndependent e da ao do usuri o. O format o @! i ndi ca que essa caract erst i ca est ende- se por t odo o campo.
E O cont ext o r eal indi ca que o campo exi st i r efet i vament e no banco de dados e o cont ext o vi rt ual si gni fi ca que o campo exi st i r apenas no di ci onri o de dados e no fi si cament e.
E A propri edade al t erar i ndi ca que o campo pode ser al t erado.
E Nest a j anel a, os dados est o cl assi fi cados em sei s past as com obj et i vos de preenchi ment o bem especfi cos:
- 112 -
ADVPL Compl et o
E Cont m as i nformaes a r espei t o dos t t ul os. Gui a: I nf or maes
E Tt ul o: a l egenda que apar ece nas t el as/ rel at ri os. H i ncl usi ve t r s campos para est a fi nali dade: em port ugus, espanhol e i ngl s. Est a pr opri edade pode ser al t erada vont ade, poi s no i nt erfer e em nenhum processament o.
E Descr i o e Hel p: So propri edades que obj et i vam document ar o campo.
E Cont m os dados que facili t am a di gi t ao. Gui a: Opes
E Repr esent am as r egras de val i dao do campo. Gui a: Val i daes
E Val i daes: Nest a propri edade, escr eve- se uma funo de val i dao do campo que est sendo di gi t ado. Exi st e um conj unt o de funes di sponvei s no ADVPL apropri adas para esse caso.
E Todas as val i daes i nformadas sero execut adas no moment o do pr eenchi ment o do prpri o campo. Uma vali dao pode ser uma expresso l gi ca ou uma funo de usuri o que r et orna um val or l gi co Verdadei ro ou Fal so. O si st ema s permi t i r o avano para o pr xi mo campo quando o respect i vo preenchi ment o r esul t ar Verdadei ro sej a na expresso ou no r et orno da funo.
E Descr eve a forma de ut i li zao do campo. Gui a: Uso
E Rel aci ona t odos os mdul os em que o campo ser ut ili zado. Gui a: Mdul os
- 113 -
ADVPL Compl et o
9.4.4. Adi o de ndi ces par a as t abel as do Di ci onr i o de Dados
Conforme menci onado ant eri orment e, no ambi ent e Prot heus uma t abel a pode t er vri os ndi ces, os quai s sero gerados de acordo com o banco de dados confi gurado para o si st ema.
Os ndi ces do si st ema auxili am na sel eo e obt eno de i nformaes da base de dados al m de det er mi nar a ordem de apr esent ao dos r egi st ros de uma t abel a em consul t as e r el at ri os.
Pr ocedi ment o
1. Para adi ci onar um ndice a uma t abel a do di ci onri o de dados de uma empr esa, sel eci one a opo Di ci onri o de Dados abai xo da empr esa que ser at ualizada. ( rvore de opes da part e esquerda da i nt erface vi sual do Gerenci ador de Bases de Dados) .
2. Aps a sel eo da opo Di ci onri o de Dados sero exi bi das as t abel as j cadast r adas no arqui vo de si st ema SX2.
3. Aps a vi suali zao das t abel as j cadast radas no SX2 da empresa sel eci onada, l ocal ize e sel eci one a t abel a que ser at ual izada, e ut ili ze o bot o Edi t ar ( Fi gu r a: Con j u nt o de t abel as j cadast r adas no SX2
) . Ao ut ili zar est a opo ser exi bi da a t ela de manut eno de campos da t abel a sel eci onada:
- 114 -
ADVPL Compl et o
4. Sel eci one a opo ndi ces ( Fi gu r a: Est r ut ur a de uma t abel a j cadast r ada n o si st ema
) , para que sej am exi bi dos os ndices di sponvei s para a t abela no arqui vo de si st ema SI X.
5. Aps a vi suali zao dos ndi ces j cadast rados no SI X para a t abel a sel eci onada, ut ili ze a opo I ncl ui r ( Fi gu r a: n di ces di sponv ei s par a a t abel a n o ar qu i v o de si st ema SI X
) . Ao ut ili zar est a opo ser exi bida a t el a para defi ni o dos dados refer ent es ao novo ndi ce que ser cri ado:
- 115 -
ADVPL Compl et o
6. Reali ze o preenchi ment o das informaes soli ci t adas de acordo com as ori ent aes a segui r, e ao t rmi no confi rme o cadast rament o do novo ndi ce para a t abel a com o bot o Confi rmar ( Fi gu r a: Adi o de um ndi ce par a u ma t abel a
) . 7. Confi rme as at uali zaes para a t abel a sel eci onada com o bot o Confi rmar ( ) . 8. At uali ze as confi guraes do si st ema com o bot o At uali zar ( ) .
Fi gu r a: At u al i zao dos dados do si st ema
- 116 -
ADVPL Compl et o
Or i ent aes par a o cadast r ament o de u m n ov o ndi ce
E O Ni ck name uma i dent i fi cao compl ement ar do ndi ce o qual pode ser ut ilizada para auxili ar o desenvol vedor na ut ili zao dest a or dem em uma apl i cao, a qual pode ser padro do si st ema ou especfi ca de um cli ent e.
E Para sel eci onar os campos j cadast rados na t abel a, pode ser ut ili zado o bot o Campos ( ) . Est a faci li dade preenche, aut omat i cament e, os campos de descri o.
E O campo r el at i vo fili al sempre faz part e dos ndi ces, com exceo do SM2, para que os r egi st ros nas t abel as est ej am agrupados por fi li ai s, i ndependent e dest a t abel a ser compart il hada ent re as fili ai s.
E Uma t abel a poder t er vri os ndi ces cadast rados no Di ci onri o de Dados. Em det ermi nado moment o, por m, apenas um del es ofer ecer acesso ao regi st ro. Essa ordem pode ser al t erada em t empo de execuo pel os pr ogramas da apli cao, at ravs do comando DBSet Order( ) , ou at ravs da defi ni o de uma ordem especfi ca na ut ili zao de queri es para acesso as dados di ret ament e em bancos de dados de ambi ent es TOPCONNECT ( DbAcess) .
9.4.5. Adi o de gat i l hos par a os campos das t abel as do si st ema
Pr ocedi ment o
1. Para adi ci onar um gat ilho a um campo de uma t abel a do di ci onri o de dados de uma empr esa, sel eci one a opo Gat il ho abai xo da empr esa que ser at ual i zada. ( rvor e de opes da part e esquer da da i nt erface vi sual do Gerenci ador de Bases de Dados) .
2. Aps a sel eo da opo Gat il hos sero exi bi dos os i t ens j cadast radas no arqui vo de si st ema SX7.
Fi gu r a: Con j u nt o de gat i l hos j cadast r os n o SX7
- 117 -
ADVPL Compl et o
3. Aps a vi suali zao dos gat ilhos j cadast rados no SX7 da empresa sel eci onada, ut ili ze o bot o I ncl ui r ( ) para r eali zar o cadast r o de um novo gat il ho no si st ema:
4. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a segui r, e ao t rmi no confi rme o cadast rament o do novo gat i lho de si t ema com o bot o Confi rmar ( Fi gu r a: Dados par a o cadast r o de um nov o gat i l ho n o si st ema
) .
Or i ent aes par a o cadast r ament o de u m n ov o gat i l h o
E Pode haver vri os gat i lhos para o mesmo campo. A ordem de execuo det ermi nada pel o campo Seqnci a.
E Os t i pos do Gat i lho Primri o, Est rangei ro e de Posi ci onament o defi nem se o Cont ra Domni o um campo da mesma t abel a, de out ra t abel a ou se o gat ilho deve real i zar um posi ci onament o, respect i vament e.
E A regra pode ser uma expr esso que r esul t a em um val or a ser preenchi do no Cont ra Domni o.
E O posi ci onament o i gual a Si m indi ca que ser execut ado um comando de busca do regi st ro de acordo com a chave i ndi cada.
E O Ali as, a Ordem e a Chave descr evem a t abel a envol vi da no gat ilho, seu ndi ce e a chave para que a funci onalidade se posi ci one no r egi st ro adequado.
- 118 -
ADVPL Compl et o
9.4.6. Cr i ao de Tabel as Genr i cas
Pr ocedi ment o
1. Para adi ci onar uma t abel a genri ca, sel eci one os menus Ambi ent e, Cadast ros, Tabel as.
2. Aps a sel eo da opo Tabel as sero exi bi dos os i t ens j cadast r adas no arqui vo de si st ema SX5.
3. Aps a vi suali zao das t abel as j cadast rados no SX5 da empresa sel eci onada, ut ilize o bot o I ncl ui r ( Fi gu r a: Con j u nt o de Tabel as j cadast r as n o SX5
) para r eali zar o cadast ro de uma nova t abel a no si st ema:
Fi gu r a: Dados par a o cadast r o de uma n ov a t abel a n o si st ema
- 119 -
ADVPL Compl et o
4. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a segui r, e ao t rmi no confi rme o cadast rament o da nova t abel a do si st ema com o bot o Confi rmar ( ) .
9.4.7. Cr i ao de Par met r os
Pr ocedi ment o
1. Para adi ci onar um Parmet r o, sel eci one os menus Ambi ent e, Cadast ros, Parmet r os.
2. Aps a sel eo da opo Tabel as sero exi bi dos os i t ens j cadast r adas no arqui vo de si st ema SX6.
3. Aps a vi sualizao dos Parmet r os j cadast rados no SX6 da empr esa sel eci onada, ut ili ze o bot o I ncl ui r ( Fi gu r a: Con j u nt o de Par met r os j cadast r as no SX6
) para r eal i zar o cadast ro de uma nova t abel a no si st ema:
- 120 -
ADVPL Compl et o
4. Reali ze o preenchi ment o das i nformaes sol i ci t adas de acordo com as ori ent aes a segui r, e ao t rmi no confi rme o cadast rament o do novo Parmet ro do si st ema com o bot o Confi rmar ( Fi gu r a: Dados par a o cadast r o de um nov o par met r o no si st ema
) .
- 121 -
ADVPL Compl et o
10. TOTVS Dev el opment St udi o
A fer rament a TOTVS Devel opment St udi o um programa que faz part e do Prot heus e permi t e o t rabal ho de edi o, compil ao e depurao de pr ogramas escri t os em ADVPL.
Pr oj et o
Um programa para ser compi l ado deve ser vi ncul ado a um proj et o. Normal ment e, pr ogr amas que fazem part e de um det ermi nado mdul o ou ambi ent e est o em um mesmo proj et o.
A vi ncul ao dos progr amas a um pr oj et o fei t a por mei o dos arqui vos do t i po PRW. Na verdade, um proj et o pode ser const i t udo de um ou mai s arqui vos dest e t i po, que por sua vez, podem t er uma ou mai s funes, conforme i lust ra o di agrama a segui r:
Fi gu r a: Repr esent ao da est r ut ur a de um pr oj et o no DEV- St udi o
- 122 -
ADVPL Compl et o
Compi l ao
Uma vez adi ci onado a um proj et o e compil ado sem i nci dnci as de err os de cdi go, o obj et o resul t ant e ser cadast rado no RPO ( Reposi t ri o de Obj et os) e poder ser ut ilizado pel a apli cao ERP.
A compi l ao dos i t ens de um pr oj et o pode ser real i zada i ndi vi dual ment e, por grupo de font es ( past as) ou ai nda sel eci onando- o i nt ei rament e. Cada uma dos font es ser pr ocessado e compi l ado separadament e, permi t i ndo a vi sualizao do pr ogr esso da operao e das mensagens de avi so ( warni ngs) ou er ros ( cri t i cal err or s) na gui a Mensagens.
Ex ecuo
Para que os obj et os compil ados e di sponvei s n RPO sej am ut ili zados, devem ser obser vadas as segui nt es r egras:
E Se o pr ograma no mani pul a arqui vos, pode- se cham- l o di ret ament e do DEV- St udi o ( nome no l ado di rei t o da barr a de fer rament as) ;
E Se o pr ograma mani pula t abel as exi st em duas opes:
. Adi ci onar o programa no menu de um dos ambi ent es e execut a- lo at ravs do Remot e.
. Reali zar a pr eparao do ambi ent e na prpri a r ot i na, permi t i ndo sua execuo di ret ament e pel o DEV- St udi o.
E No se pode compil ar um programa com o Remot e e o Moni t or abert os, t enha est e fi nalizado ou no por er ro.
An l i se e depur ao de er r os
Para i dent i fi car as causas de err os, a ferrament a DEV- St udi o possui di versos r ecursos que auxili am o DEBUG.
A ao de DEBUG necessi t a que o programa sej a execut ado a part ir do DEV- St udi o, sendo necessri o observar as segui nt es r egras:
E Defi ni r e mar car os pont os de parada mai s adequados a anl i se do font e;
E Execut ar a r ot i na at ravs do DEV- St udi o, sel eci onando seu nome di r et ament e, ou o mdul o que cont m a opo ou a ao que i r execut - l a;
E A part i r do moment o em que o DEV- St udi o pausar o processament o em um dos pont os de parada especi fi cados previ ament e podem ser ut ilizadas as j anel as de vi sualizao di sponvei s no DEV- St udi o, que so:
. Vari vei s Locai s . Vari vei s Pri vat es . Vari vei s Publi cs . Vari vei s St at i cs . Janel a da Wat chs . Janel a de Tabel as e Campos . Pil ha de Chamadas
E At ravs da Janel a de Wat chs possvel det ermi nar quai s vari vei s devem ser exi bidas;
- 123 -
ADVPL Compl et o
E Na pil ha de chamadas, veri fi ca- se a seqnci a de chamadas das funes; E Na past a de Comandos, pode- se, enquant o o pr ograma est i ver pausado, escr ever qual quer comando e ao dar Ent er , el e execut ado, permi t indo pesqui sar pal avras e expr esses no pr pri o font e ou em qual quer font e armazenado no HD;
E Ao parar pode- se ou cont i nuar o programa at o prxi mo pont o de parada, caso haj a um out ro defi ni do, ou execut ar l inha a linha da rot i na.
I nt er f ace da apl i cao
Por ser um ambi ent e int egrado de desenvol viment o, o DEV- St udi o propor ci ona t odas essas faci lidades, por mei o de i nt erface ni ca como ilust ra a fi gura a segui r:
E O DEV- St udi o apresent a, no t opo da t el a, um conj unt o de opes de menu e uma sri e de bot es que facili t am a sua mani pul ao. Fi gu r a: I nt er f ace pr i n ci pal do TOTVS Dev el opment St u di o
E Na t el a cent r al , apr esent ado o cdi go das funes em ADVPL. Na part e i nferi or so exi bi das al gumas past as que faci lit am a execuo de comandos, exi bio de cont edos de vari vei s e mensagens, bem como dados sobre o proj et o.
- 124 -
ADVPL Compl et o
Desenvol v i ment o de pequenas cust omi zaes
11. Acesso e mani pul ao de bases de dados em ADVPL
Como a l inguagem ADVPL ut ili zada no desenvol vi ment o de apli cao para o si st ema ERP Prot heus, el a deve possui r recursos que per mit am o acesso e a manipul ao de i nformaes i ndependent ement e da base de dados para o qual o si st ema foi confi gurado.
Dest a forma a l inguagem possui doi s grupos de funes di st i nt os para at uar com os bancos de dados:
E Funes de mani pul ao de dados genri cas E Funes de mani pul ao de dados especfi cas para ambi ent es TOPCONNECT / DBACCESS
Funes de mani pul ao de dados genr i cas
As funes de mani pul ao de dados di t as como genri cas per mi t em que uma apli cao ADVPL sej a escri t a da mesma for ma, i ndependent e se a base de dados confi gurada para o si st ema ERP for do t i po I SAM ou padro SQL.
Mui t as dest as funes foram i ni ci al ment e herdadas da l i nguagem CLI PPER, e medi ant e novas i mpl ement aes da r ea de Tecnol ogi a da Mi crosi ga foram mel horadas e adequadas s necessi dades do ERP. Por est a razo possvel encont rar em document aes da l i nguagem CLI PPER i nformaes sobre funes de mani pulao de dados ut i lizadas na fer rament a ERP.
Dent r e as mel hori as i mpl ement adas pel a rea de Tecnol ogi a da Mi crosi ga, podemos menci onar o desenvol vi ment o de novas funes como por exempl o a funo MsSeek( ) - verso da Mi crosi ga para a funo DbSeek( ) , e a i nt egrao ent re a si nt axe ADVPL convenci onal e a ferrament a de acesso a bancos de dados no padro SQL TOPCONNECT ( DbAcess) .
A i nt egrao ent r e a apli cao ERP e a ferrament a TOPCONNECT permi t e que as funes de acesso e mani pul ao de dados escri t as em ADVPL sej am i nt erpret adas e convert i das par a uma si nt axe compat vel com o padro SQL ANSI e dest a forma apl i cadas aos SGDBs ( Si st emas Gerenci adores de Bancos de Dados) com sua si nt axe nat i va.
Funes de mani pul ao de dados par a ambi ent es TOPCONNECT / DBACCESS
Para i mpl ement ar um acesso mai s ot i mi zado e di sponi bili zar no ambi ent e ERP funci onali dades que ut ili zem de forma mai s adequada os recursos dos SGDBs homol ogados para o si st ema, foram i mpl ement adas funes de acesso e mani pul ao de dados especfi cas para ambi ent es TOPCONNECT/ DBACCESS.
Est as funes permi t em que o desenvol vedor ADVPL execut e comandos em si nt axe SQL di ret ament e de um cdi go font e da apli cao, di sponi bili zando recursos como execuo de queri es de consul t a, chamadas de pr ocedur es e comuni cao com out ros bancos de dados at ravs de ODBCs.
As funes especfi cas para ambi ent es TOPCONNECT sero abordas no mat eri al de ADVPL Avanado.
- 125 -
ADVPL Compl et o
11.1. Di f er enas e compat i bi l i zaes ent r e bases de dados
Como a apli cao ERP pode ser confi gurada para ut ili zar di ferent es t i pos de bases de dados i mport ant e menci onar as pri nci pai s di ferenas ent re est es r ecursos, o que pode det ermi nar a for ma como o desenvol vedor i r opt ar por escr ever sua apl i cao.
Acesso a dados e ndi ces
No acesso a i nformaes em bases de dados do padro I SAM so sempre l i dos os regi st r os i nt ei ros, enquant o no SQL pode- se l er apenas os campos necessri os naquel e processament o.
O acesso di ret o fei t o at ravs de ndi ces que so t abel as paral el as s t abel as de dados e que cont m a chave e o ender eo do r egi st ro, de forma anl oga ao ndi ce de um li vro. Para cada chave, cri ado um ndice prpri o.
Nas bases de dados padro I SAM os ndi ces so armazenados em um ni co arqui vo do t i po CDX, j nos bancos de dados padro SQL cada ndi ce cri ado com uma numerao seqenci al t endo como base o nome da t abel a ao qual el e est rel aci onado.
A cada i ncl uso ou al t erao de um r egi st r o t odos os ndi ces so at uali zados, t ornando necessri o pl anej ar adequadament e quai s e quant os ndi ces sero defi ni dos para uma t abel a, poi s uma quant i dade excessi va pode compr omet er o desempenho dest as operaes.
Deve ser consi derada a possi bilidade de ut ilizao de ndi ces t emporri os para pr ocessos especfi cos, os quai s sero cri ados em t empo de execuo da rot i na. Est e fat or deve l evar em consi derao o esforo do ambi ent e a cada execuo da rot i na e a peri odi ci dade com a qual execut ada.
Est r ut u r a dos r egi st r os ( i nf or maes)
Nas bases de dados padro I SAM, cada r egi st ro possui um ident i fi cador nat i vo ou I D seqenci al e ascendent e que funci ona como o endereo base daquel a informao.
Est e I D, mas conheci do como RECNO ou RECNUMBER ger ado no moment o de i ncl uso do regi st ro na t abel a e soment e ser al t erado caso a est rut ura dos dados dest a t abel a sofr a al guma manut eno. Dent re as manut enes que uma t abel a de dados I SAM pode sofr er pode- se ci t ar a ut ili zao do comando PACK, o qual i r apagar fi si cament e os regi st ros del et ados da t abel a forando uma r enumerao dos i dent i fi cadores de t odos os regi st r os. Est a si t uao t ambm t orna necessri a a r ecri ao de t odos os ndi ces vi nculados quel a t abel a.
I st o ocorr e nas bases de dados I SAM devi do ao concei t o de excl uso l gi ca de regi st ros que as mesmas possuem. J os bancos de dados padr o SQL nat i vament e ut ili zam apenas o concei t o de excl uso fsi ca de r egi st ros, o que para out ras apl i caes seri a t ransparent e, mas no o caso do ERP Prot heus.
Para mant er a compat i bilidade das apli caes desenvol vi das para bases de dados padro I SAM, a rea de Tecnol ogi a e Banco de Dados da Mi crosi ga i mpl ement ou nos bancos de dados padro SQL o concei t o de excl uso l gi ca de regi st ros exi st ent e nas bases de dados I SAM at ravs da cri ao de campos de cont r ole especfi cos: R_E_C_N_O_, D_E_L_E_T_ e R_E_C_D_E_L.
Est es campos permi t em que a apli cao ERP ger enci e as i nformaes do banco de dados da mesma forma que as i nformaes em bases de dados I SAM.
- 126 -
ADVPL Compl et o
Com i sso o campo R_E_C_N_O_ ser um i dent i fi cador ni co do regi st ro dent r o da t abel a, funci onando como o I D ou RECNUMBER de uma t abel a I SAM, mas ut ili zando um recurso adi ci onal di sponvel nos bancos de dados r el aci onai s conheci do com Ch av e Pr i mr i a 11.2. Funes de acesso e mani pul ao de dados .
Para a apli cao ERP Prot heus o campo de cont r ol e R_E_C_N_O_ defi ni do em t odas as t abel as como sendo sua chave pri mri a, o que t ransfere o cont r ol e de sua numerao seqenci al ao banco de dados.
O campo D_E_L_E_T_ t rat ado i nt ernament e pel a apli cao ERP como um fl ag ou marca de excl uso. Dest a forma os r egi st ros que est i ver em com est e campo marcado sero consi derados como excl udos l ogi cament e. A execuo do comando PACK em uma t abel a de um banco de dados padro SQL vi sa excl ui r fi sicament e os regi st r os com o campo D_E_L_E_T_ marcado, mas no causar o efei t o de r enumerao de RECNO ( no caso R_E_C_N_O_) que ocor re nas t abel a de bases de dados I SAM.
As funes de acesso e mani pul ao de dados descri t as nest e t pi co so as cl assi fi cadas ant eri orment e como funes genri cas da li nguagem ADVPL, permi t indo que as mesmas sej am ut ili zadas independent ement e da base de dados para a qual a apli cao ERP est confi gurada.
As funes de acesso e mani pul ao de dados defi nem basi cament e:
E Tabel a que est sendo t rat ada; E Campos que devero ser l i dos ou at uali zados; E Mt odo de acesso di ret o as i nformaes ( r egi st ros e campos) .
Dent r e as funes ADVPL di sponvei s para acesso e mani pul ao de i nformaes, est e mat eri al i r det al har as segui nt es opes:
Si nt ax e DBRLOCK( x I dent i f i cador ) Descr i o Funo de base de dados, que efet ua o l ock ( t ravament o) do r egi st ro i dent i fi cado pel o parmet r o xI dent i fi cador. Est e parmet r o pode ser o Recno( ) para t abel as em formado I SAM, ou a chave pri mri a para bancos de dados rel aci onai s.
Se o parmet ro xI dent i fi cador no for especi fi cado, t odos os l ocks da r ea de t rabal ho sero li berados, e o regi st r o posi ci onado ser t ravado e adi ci onado em uma l i st a de r egi st ros bl oqueados.
DBCLOSEAREA( )
Si nt ax e DbCl oseAr ea( ) Descr i o Per mi t e que um ali as present e na conexo sej a fechado, o que vi abiliza seu reuso em out r o operao. Est e comando t em efei t o apenas no al i as at ivo na conexo, sendo necessri a sua ut ili zao em conj unt o com o comando DbSel ect Ar ea( ) .
DBCOMMI T( )
Si nt ax e DBCOMMI T( ) Descr i o Efet ua t odas as at uali zaes pendent es na r ea de t rabal ho at i va.
DBCOMMI TALL( )
Si nt ax e DBCOMMI TALL( ) Descr i o Efet ua t odas as at uali zaes pendent es em t odas as r ea de t rabal ho em uso pel a t hread ( conexo) at i va.
DBDELETE( )
Si nt ax e DbDel et e( ) Descr i o Efet ua a excl uso l gi ca do regi st ro posi ci onado na r ea de t rabal ho at i va, sendo necessri a sua ut ili zao em conj unt o com as funes RecLock( ) e MsUnLock( ) .
DBGOTO( )
Si nt ax e DbGot o( nRecno) Descr i o Move o cursor da r ea de t rabal ho at i va para o record number ( r ecno) especi fi cado, r eali zando um posi ci onament o di ret o, sem a necessi dade uma busca ( seek) pr vi o.
- 128 -
ADVPL Compl et o
DBGOTOP( )
Si nt ax e DbGoTop( ) Descr i o Move o cursor da r ea de t rabal ho at i va para o pri mei ro r egi st ro l gi co.
DBGOBOTTON( )
Si nt ax e DbGoBot t on ( ) Descr i o Move o cursor da r ea de t rabal ho at i va para o lt i mo regi st r o l gi co.
DBRLOCKLI ST( )
Si nt ax e DBRLOCKLI ST( ) Descr i o Ret orna um ar ray cont endo o r ecord number ( r ecno) de t odos os r egi st ros t ravados da r ea de t rabal ho at i va.
DBSEEK( ) E MSSEEK( )
Si nt ax e DbSeek ( cCh av e, l Sof t Seek , l Last ) Descr i o DbSeek : Permi t e posi cionar o cursor da rea de t rabal ho at i vo no r egist ro com as i nformaes especi fi cadas na chave de busca, fornecendo um r et orno l gi co i ndi cando se o posi ci onament o foi efet uado com sucesso, ou sej a, se a i nformao especi fi cada na chave de busca foi l ocal i zada na rea de t rabal ho.
MsSeek ( ) : Funo desenvol vi da pel a rea de Tecnol ogi a da Mi crosi ga, a qual possui as mesmas funci onali dades bsi cas da funo DbSeek( ) , com a vant agem de no necessi t ar acessar novament e a base de dados para l ocalizar uma i nformao j ut ili zada pel a t hread ( conexo) at i va.
DBSKI P( )
Si nt ax e DbSk i p( nRegi st r os) Descr i o Move o cursor do r egi st ro posi ci onado para o pr xi mo ( ou ant eri or dependendo do parmet r o) , em funo da ordem at i va para a rea de t rabal ho.
DBSELECTAREA( )
Si nt ax e DbSel ect Ar ea( nAr ea | cAr ea) Descr i o Defi ne a r ea de t rabal ho especi fi cada com sendo a r ea at i va. Todas as operaes subseqent es que fi zer em r efernci a a uma rea de t rabal ho a ut ili zao, a menos que a r ea desej ada sej a i nformada expli ci t ament e.
- 129 -
ADVPL Compl et o
DBSETFI LTER( )
Si nt ax e DbSet Fi l t er ( bCon di cao, cCondi cao) Descr i o Defi ne um fi l t ro para a r ea de t rabal ho at i va, o qual pode ser descr i t o na for ma de um bl oco de cdi go ou at ravs de uma expresso si mpl es.
DBSETORDER( )
Si nt ax e DbSet Or der ( nOr dem) Descr i o Defi ne qual ndi ce ser ut ilizada pel a rea de t rabal ho at i va, ou sej a, pel a rea pr evi ament e sel eci onada at ravs do comando DbSel ect Ar ea( ) . As ordens di sponvei s no ambi ent e Prot heus so aquel as defini das no SI NDEX / SI X, ou as ordens di sponi bili zadas por mei o de ndi ces t emporri os.
DBORDERNI CKNAME( )
Si nt ax e DbOr der Ni ck Name( Ni ck Name) Descr i o Defi ne qual ndi ce cri ado pel o usuri o sej a ut ili zado. O usuri o pode i nclui r os seus prpri os ndi ces e no moment o da i ncl uso deve cri ar o NI CKNAME par a o mesmo.
DBUNLOCK( )
Si nt ax e DBUNLOCK( ) Descr i o Mesma funci onali dade da funo UNLOCK( ) , s que r ecomendada para ambi ent es de r ede nos quai s os arqui vos so compart i l hados.
Li bera o t ravament o do regi st ro posi ci onado na rea de t rabal ho at i va e confi rma as at uali zaes efet uadas naquel e r egi st ro.
DBUNLOCKALL( )
Si nt ax e DBUNLOCKALL( ) Descr i o Li bera o t ravament o de t odos os regi st ros de t odas as r eas de t rabal ho di sponvei s na t hread ( conexo) at i va.
DBUSEAREA( )
Si nt ax e DbUseAr ea( l Nov o, cDr i v er , cAr qui v o, cAl i as, l Compar i l h ado, ; l SoLei t u r a) Descr i o Defi ne um arqui vo de base de dados como uma rea de t rabal ho di sponvel na apli cao.
MSUNLOCK( )
Si nt ax e MsUn Lock ( ) Descr i o Li bera o t ravament o ( l ock) do regi st r o posi ci onado confi rmando as at ualizaes efet uadas nest e r egi st ro.
- 130 -
ADVPL Compl et o
RECLOCK( )
Si nt ax e RecLock ( cAl i as, l I ncl u i ) Descr i o Efet ua o t ravament o do r egi st ro posi ci onado na r ea de t rabal ho at i va, permi t i ndo a i ncluso ou al t erao das i nformaes do mesmo.
RLOCK( )
Si nt ax e RLOCK( ) l Sucesso Descr i o Efet ua o t ravament o do regi st ro posi ci onado na rea de t rabal ho at i va.
SELECT( )
Si nt ax e Sel ect ( cAr ea) Descr i o Det ermi na o nmer o de refernci a de um det ermi nado ali as em um ambi ent e de t r abal ho. Caso o al i as especi ficado no est ej a em uso no ambi ent e, ser r et ornado o val or 0 ( zero) .
SOFTLOCK( )
Si nt ax e Sof t Lock ( cAl i as) Descr i o Per mi t e a reserva do r egi st ro posi ci onado na rea de t rabal ho at i va de for ma que out ras operaes, com exceo da at ual , no possam at uali zar est e regi st ro. Di fer e da funo RecLock( ) poi s no gera uma obri gao de at ualizao, e pode ser sucedi do por el e.
Na apli cao ERP Pr ot heus, o Soft Lock( ) ut ili zado nos browses, ant es da confi rmao da operao de al t erao e excl uso, poi s nest e moment o a mesma ai nda no foi efet i vada, mas out ras conexes no podem acessar aquel e regi st ro poi s o mesmo est em manut eno, o que i mpl ement a da i nt egri dade da i nformao.
UNLOCK( )
Si nt ax e UNLOCK( ) Descr i o Li bera o t ravament o do regi st ro posi ci onado na rea de t rabal ho at i va e confi rma as at uali zaes efet uadas naquel e r egi st ro.
- 131 -
ADVPL Compl et o
11.3. Di f er enci ao ent r e var i vei s e nomes de campos
Mui t as vezes uma vari vel pode t er o mesmo nome que um campo de um arqui vo ou de uma t abel a abert a no moment o. Nest e caso, o ADVPL pri vil egi ar o campo, de forma que uma refernci a a um nome que i dent i fi que t ant o uma vari vel como um campo, r esul t ar no cont edo do campo.
Para especi fi car qual deve ser o el ement o referenci ado, deve- se ut ili zar o operador de i dent i fi cao de apel i do ( - > ) e um dos doi s i dent i fi cadores de r efer nci a, MEMVAR ou FI ELD.
cRes : = MEMVAR- > NOME
Est a l i nha de comando i dent i fi ca que o val or at ri budo vari vel cRes deve ser o val or da vari vel de memri a chamada NOME.
cRes : = FI ELD- > NOME
Nest e caso, o val or at ri budo vari vel cRes ser o val or do campo NOME exi st ent e no arqui vo ou t abel a abert o na r ea at ual .
O i dent i fi cador FI ELD pode ser subst i t udo pelo apeli do de um arqui vo ou t abel a abert o, par a evi t ar a necessi dade de sel eci onar a r ea ant es de acessar o cont edo de t ermi nado campo.
cRes : = CLI ENTES- > NOME
As t abel as de dados ut ilizadas pel a apli cao ERP recebem aut omat i cament e do si st ema o apeli do ou ALI AS especi fi cado para as mesmas no arqui vo de si st ema SX2. Assi m se o campo NOME pert ence a uma t abel a da apli cao PROTHEUS, o mesmo poder ser r efer enci ado com a i ndi cao do ALI AS pr - defi ni do dest a t abel a.
cRes : = SA1- > NOME / / SA1 Cadast ro de Cl i ent es
Para mai ores det al hes sobr e abert ura de arqui vos com at ri bui o de apeli dos, consul t e a document ao sobre acesso a banco de dados ou a document ao da funo dbUseAr ea( ) .
Os al i as das t abel as da apli cao ERP so padroni zados em t r s l et ras, que corr espondem as i ni ci ais da t abel a. As confi guraes de cada ALI AS ut ilizado pel o si st ema podem ser vi sualizadas at ravs do mdul o Confi gurador - > Bases de Dados - > Di cionri os - > Bases de Dados.
- 132 -
ADVPL Compl et o
11.4. Cont r ol e de numer ao seqenci al
Al guns campos de numerao do Pr ot heus so forneci dos pel o si st ema em ordem ascendent e. o caso, por exempl o, do nmero do pedi do de venda e out ros que servem como i dent i fi cador das i nformaes das t abel as. pr eci so t er um cont r ol e do forneci ment o desses nmer os, em especi al quando vri os usuri os est o t rabal hando si mult aneament e.
Os campos que r ecebem o t rat ament o de numerao seqenci al pel a apli cao ERP no devem ser consi derados como chave pri mri a das t abel as aos quai s est o vi ncul ados.
No caso especfi co da apli cao ERP Pr ot heus a chave pri mri a em ambi ent es TOPCONNECT ser o campo R_E_C_N_O_, e para bases de dados padro I SAM o concei t o de chave pri mri a i mpl ement ado pel a regra de negci o do si st ema, poi s est e padro de dados no possui o concei t o de uni ci dade de dados.
Semf or os
Para defi ni r o concei t o do que um semforo de numerao deve- se aval i ar a segui nt e seqnci a de event os no si st ema:
E Ao ser forneci do um nmer o, el e permanece reservado at a concl uso da operao que o sol i cit ou;
E Se est a operao for confi rmada, o nmer o i ndi sponi bilizado, mas se a operao for cancel ada, o nmer o vol t ar a ser di sponvel mesmo que naquel e moment o nmeros mai ores j t enham si do ofer eci dos e ut i lizados.
Com i sso, mesmo que t enhamos vri os pr ocessos sol i ci t ando numeraes seqenci ai s para uma mesma t abel a, como por exempl o i ncl uses si mul t neas de pedi dos de vendas, t er emos para cada pedi do um nmer o excl usi vos e sem o i nt erval os e numeraes no ut ili zadas.
Funes de cont r ol e de semf or os e numer ao seqenci al
A linguagem ADVPL per mi t e a ut ilizao das seguint es funes para o cont r ol e das numeraes seqenci ai s ut ili zadas nas t abel as da apl i cao ERP:
GETSXENUM( ) CONFI RMSXE( ) ROLLBACKSXE( )
GETSXENUM( )
Si nt ax e GETSXENUM( cAl i as, cCampo, cAl i asSXE, nOr dem) Descr i o Obt m o nmero seqnci a do ali as especi fi cado no parmet ro, at ravs da refernci a aos arqui vos de si st ema SXE/ SXF ou ao ser vi dor de numerao, quando est a confi gurao est habi lit ada no ambi ent e Prot heus.
- 133 -
ADVPL Compl et o
CONFI RMSXE( )
Si nt ax e CONFI RMSXE( l Ver i f i ca) Descr i o Confi rma o nmer o al ocado at ravs do l t i mo comando GETSXENUM( ) .
ROLLBACKSXE( )
Si nt ax e ROLLBACKSXE( ) Descr i o Descart a o nmer o forneci do pel o l t i mo comando GETSXENUM( ) , ret ornando a numerao di sponvel para out ras conexes.
12. Cust omi zaes par a a apl i cao ERP
Nest e t pi co sero abordas as for mas pel as quai s a apli cao ERP Pr ot heus pode ser cust omi zada com a ut ilizao da l i nguagem ADVPL.
Pel os recursos de confi gurao da apl i cao ERP di sponvei s no mdul o Confi gurador possvel i mpl ement ar as segui nt es cust omi zaes:
E Vali daes de campos e pergunt as do si st ema e de usuri os E I ncl uso de gat i lhos em campos de si st emas e de usuri os E I ncl uso de regras em parmet ros de si st emas e de usuri os E Desenvol vi ment o de pont os de ent rada para i nt eragi r com funes padr es do si st ema
- 134 -
ADVPL Compl et o
12.1. Cust omi zao de campos Di ci onr i o de Dados
12.1.1. Val i daes de campos e per gunt as
As funes de val idao t m como caract erst i ca fundament al um ret orno do t i po l gi co, ou sej a, um cont edo .T. Verdadei ro ou .F. Fal so.
Com base nest a pr emi ssa, a ut i lizao de val i daes no Di ci onri o de Dados ( SX3) ou nas Pergunt as de Pr ocessos e Rel at ri os ( SX1) dever focar sempre na ut ili zao de funes ou expr esses que r esul t em em um r et orno l gi co.
At ravs do mdul o Confi gurador possvel al t erar as propri edades de um campo ou de uma pergunt a de forma a i ncl ui r regras de val i dao para as segui nt es si t uaes:
E SX3 Val i dao de u sur i o ( X3 _VLDUSER) E SX1 Val i dao da per gu nt a ( X1_ VALI D)
Dent r e as funes que a li nguagem ADVPL em conj unt o com os r ecur sos desenvol vi dos pela apli cao ERP para val i dao de campos e pergunt as sero det al hadas:
Si nt ax e Ex i st Ch av ( cAl i as, cCont eudo, nI n di ce) Descr i o Ret orna .T. ou .F. se o cont edo especi fi cado exi st e no ali as especi fi cado. Caso exi st a ser exi bi do um hel p de si st ema com um avi so i nfor mando da ocor rnci a.
Funo ut ili zada normal ment e para veri fi car se um det ermi nado cdi go de cadast r o j exi st e na t abel a na qual a i nformao ser i nseri da, como por exempl o o CNPJ no cadast ro de cl i ent es ou fornecedores.
- 135 -
ADVPL Compl et o
EXI STCPO( )
Si nt ax e Ex i st Cpo( cAl i as, cCon t eudo, n I ndi ce) Descr i o Ret orna .T. ou .F. se o cont edo especi fi cado no exi st e no ali as especi fi cado. Caso no exi st a ser exi bi do um hel p de si st ema com um avi so i nformando da ocor rncia.
Funo ut ili zada normal ment e para veri fi car se a i nformao di gi t ada em um campo, a qual depende de out ra t abel a, real ment e exi st e nest a out ra t abel a, como por exempl o o cdi go de um cl i ent e em um pedi do de venda.
NAOVAZI O( )
Si nt ax e NaoVazi o( ) Descr i o Ret orna .T. ou .F. se o cont edo do campo posi ci onado no moment o no est vazi o.
NEGATI VO( )
Si nt ax e Negat i v o( ) Descr i o Ret orna .T. ou .F. se o cont edo di gi t ado para o campo negat i vo.
PERTENCE( )
Si nt ax e Per t ence( cSt r i ng) Descr i o Ret orna .T. ou .F. se o cont edo di gi t ado para o campo est cont i do na st ri ng defi ni da como parmet ro da funo. Nor mal ment e ut ilizada em campos com a opo de combo, poi s caso cont rri o seri a ut ili zada a funo Exi st Cpo( ) .
POSI TI VO( )
Si nt ax e Posi t i v o( ) Descr i o Ret orna .T. ou .F. se o cont edo di gi t ado para o campo posi t i vo.
TEXTO( )
Si nt ax e Tex t o( ) Descr i o Ret orna .T. ou .F. se o cont edo di gi t ado para o campo cont m apenas nmeros ou al fanumri cos.
VAZI O( )
Si nt ax e Vazi o( ) Descr i o Ret orna .T. ou .F. se o cont edo do campo posi ci onado no moment o est vazi o.
- 136 -
ADVPL Compl et o
12.1.2. Pi ct ur es de f or mao di sponvei s
Com base na document ao di sponvel no DEM Document ao El et r ni ca Mi crosi ga, a linguagem ADVPL e a apli cao ERP Prot heus admi t em as segui nt es pi ct ures:
Di ci onr i o de Dados ( SX3) e GET
Funes Cont edo Funci on al i dade A Per mi t e apenas caract er es al fabt i cos. C Exi be CR depoi s de nmer os posi t i vos. E Exi be numri co com o pont o e vrgul a i nvert i dos ( format o Eur opeu) . R I nser e caract eres di ferent es dos caract er es de t empl at e na exi bi o, mas no os i nsere na vari vel do GET. S< n> Per mi t e rol ament o hori zont al do t ext o dent ro do GET, < n> um nmer o i nt ei ro que i dent i fi ca o t amanho da regi o. X Exi be DB depoi s de nmer os negat i vos. Z Exi be zeros como br ancos. ( Exi be nmeros negat i vos ent re par nt eses com os espaos em branco i ni ci ai s. ) Exi be nmeros negat i vos ent re par nt eses sem os espaos em branco i ni ci ai s. ! Convert e caract er es al fabt i cos para mai scul o.
Templ at es Cont edo Funci on al i dade X Per mi t e qual quer caract er e. 9 Per mi t e apenas dgit os para qual quer t i po de dado, i nclui ndo o si nal para numri cos. # Per mi t e dgi t os, si nai s e espaos em branco par a qual quer t i po de dado. ! Convert e caract er es al fabt i cos para mai scul o. * Exi be um ast eri sco no lugar dos espaos em br anco i ni ci ai s em nmer os. . Exi be o pont o deci mal . , Exi be a posi o do mi l har.
Ex empl o 01 Pi ct u r e campo numr i co
CT2_VALOR Numri co 17,2 Pi ct ure: @E 99,999,999,999,999.99
Ex empl o 02 Pi ct u r e campo t ex t o, com di gi t ao apen as em cai x a al t a
A1_NOME Caract er - 40 Pi ct ure: @!
- 137 -
ADVPL Compl et o
SAY e PSAY
Funes Cont edo Funci on al i dade C Exi be CR depoi s de nmer os posi t i vos E Exi be numri co com o pont o e a vrgul a i nvert i dos ( format o Eur opeu) R I nser e caract er es di ferent es dos caract eres de t empl at e X Exi be DB depoi s de nmer os negat i vos Z Exi be zeros como br ancos ( Envol ve nmer os negat i vos ent r e par nt eses ! Convert e t odos os caract er es al fabt i cos para mai scul o
Templ at es Cont edo Funci on al i dade X Exi be dgi t os para qual quer t i po de dado 9 Exi be dgi t os para qual quer t i po de dado # Exi be dgi t os para qual quer t i po de dado ! Convert e caract er es al fabt i cos para mai scul o * Exi be ast eri sco no l ugar de espaos em branco ini ci as em nmer os . Exi be a posi o do pont o deci mal , Exi be a posi o do mi l har
Ex empl o 01 Pi ct u r e campo numr i co
CT2_VALOR Numri co 17,2 Pi ct ure: @E 99,999,999,999,999.99
- 138 -
ADVPL Compl et o
12.2. Cust omi zao de gat i l hos Conf i gur ador
A apli cao ERP ut iliza o r ecur so de gat il hos em campo com a fi nali dade de auxi liar o usurio no pr eenchi ment o de i nfor maes durant e a di gi t ao de i nformaes. As funes que podem ser ut ili zadas no gat ilho est o di ret ament e r el aci onadas a defi ni o da expr esso de ret orno que ser execut ada na avali ao do gat i l ho do campo.
As regras que devem ser obser vadas na mont agem de um gat il ho e confi gurao de seu ret orno so:
E Na defi ni o da chave de busca do gat il ho deve ser avali ada qual fili al dever ser ut ili zada como part e da chave: a fi li al da t abel a de ori gem do gat il ho ou a fili al da t abel a que ser consul t ada. O que normal ment e det ermi na a fili al que ser ut ili zada como part e da chave j ust ament e a i nformao que ser consul t ada, aonde:
o Consul t as de i nformaes ent r e t abel as com est rut ura de cabeal ho e i t ens devem ut ilizar a fili al da t abel a de ori gem, poi s ambas as t abel as devem possui r o mesmo t rat ament o de fili al ( compart il hado ou excl usi vo) .
Ex empl os:
Pedi do de vendas - > SC5 x SC6 Not a fi scal de ent rada - > SF1 x SD1 Fi cha de i mobili zado - > SN1 x SN3 Or ament o cont bil - > CV1 x CV2
o Consul t a de i nformaes de t abel as de cadast r os devem ut ili zar a fili al da t abel a a ser consul t ada, pois o compart il hament o dos cadast r os normal ment e i ndependent e em r el ao s movi ment aes e out ros cadast ros do si st ema.
Ex empl os:
Cadast r o de cl i ent es - > SA1 ( compart il hado) Cadast r o de fornecedor es - > SA2 ( compart i l hado) Cadast r o de vendedor es - > SA3 ( excl usi vo) Cadast r o de t ransport adoras - > SA4 ( excl usi vo)
o Consul t a a i nformaes de t abel as de movi ment os devem ut ili zar a fi li al da t abel a a ser consul t ada, poi s apesar das movi ment aes de um mdul o segui rem um det ermi nado padro, a consul t a pode ser real i zada ent re t abel as de mdul os di st i nt os, o que poderi a gerar um ret orno i ncor ret o baseado nas di ferent es paramet ri zaes dest es ambi ent es.
Ex empl os:
Cont as a pagar - > SE2 ( compart i l hado) Movi ment os cont bei s - > CT2 ( excl usi vo) Pedi dos de compras - > SC7 ( compart il hado) I t ens da not a fi scal de ent rada - > SD1 ( excl usi vo)
E Na defi ni o da regra de r et orno deve ser consi derado o t i po do campo que ser at ualizado, poi s est e campo que det ermi na qual t i po do r et orno ser consi derado vli do para o gat il ho.
- 139 -
ADVPL Compl et o
12.3. Cust omi zao de par met r os Conf i gur ador
Os parmet r os de si st ema ut ilizados pel a apli cao ERP e defi ni dos at ravs do mdul o confi gurador possuem as segui nt es caract erst i cas fundament ai s:
E Ti po do parmet r o: de forma si mil ar a uma vari vel , um parmet ro t er um t i po de cont edo pr - defi ni do em seu cadast ro. Est a i nformao ut ili zada pel as funes da apli cao ERP na i nt erpr et ao do cont edo do parmet r o e ret orno dest a i nformao a r ot i na que o consult ou.
E I nt erpr et ao do cont edo do parmet r o: di ver sos parmet r os do si st ema t m seu cont edo macr o execut ado durant e a execuo de uma r ot i na do ERP. Est es parmet ros macr o execut vei s t em como nica caract erst i ca em comum seu t i po: caract ere, mas no exi st e nenhum i dent i fi cador expl i ci t o que permi t e a fci l vi suali zao de quai s parmet ros possuem um ret orno si mpl es e de quai s parmet ros t ero seu cont edo macro execut ado par a det er mi nar o r et orno r eal .
A ni ca forma efi caz de aval i ar como um parmet ro t rat ado ( simpl es ret orno ou macr o execuo) at r avs do cdi go font e da rot i na, no qual dever ser aval i ado como t rat ado o ret orno de uma dest as funes:
o GETMV( ) o SUPERGETMV( ) o GETNEWPAR( )
Um r et orno macr o execut ado det ermi nado at ravs do uso do operador & ou de uma das funes de execuo de bl ocos de cdi go em conj unt o com uma das funes ci t adas ant eri orment e.
12.3.1. Funes par a mani pul ao de par met r os
A apli cao ERP di sponibiliza as segui nt es funes par a consul t a e at uali zao de parmet ros:
GETMV( ) SUPERGETMV( ) GETNEWPAR( ) PUTMV( )
GETMV( )
Si nt ax e GETMV( cPar amet r o) Descr i o Ret orna o cont edo do parmet ro especi fi cado no arqui vo SX6, consi derando a fili al paramet ri zada na conexo. Caso o parmet r o no exi st a ser exi bi do um hel p do si st ema i nformando a ocorr nci a.
- 140 -
ADVPL Compl et o
GETNEWPAR( )
Si nt ax e GETNEWPAR( cPar amet r o, cPadr ao, cFi l i al ) Descr i o Ret orna o cont edo do parmet ro especi fi cado no arqui vo SX6, consi derando a fili al paramet ri zada na conexo. Caso o parmet r o no exi st a ser exi bi do um hel p do si st ema i nformando a ocorr nci a.
Di fere do Super Get MV( ) poi s consi dera que o parmet ro pode no exi st i r na verso at ual do si st ema, e por conseqnci a no ser exi bi da a mensagem de hel p.
PUTMV( )
Si nt ax e PUTMV( cPar amet r o, cCont eudo) Descr i o At uali za o cont edo do parmet ro especi fi cado no arqui vo SX6, de acordo com as paramet ri zaes i nformadas.
SUPERGETMV( )
Si nt ax e SUPERGETMV( cPar amet r o , l Hel p , cPadr ao , cFi l i al ) Descr i o Ret orna o cont edo do parmet ro especi fi cado no arqui vo SX6, consi derando a fili al paramet ri zada na conexo. Caso o parmet r o no exi st a ser exi bi do um hel p do si st ema i nformando a ocorr nci a.
Di fere do Get Mv( ) poi s os parmet ros consul t ados so adi ci onados em uma rea de memri a, que permi t e que em uma nova consul t a no sej a necessri o acessar e pesqui sar o parmet ro na base de dados.
12.3.2. Cui dados na ut i l i zao de um par met r o
Um parmet ro de si st ema t em a fi nali dade de pr opi ci ar um ret orno vli do a um cont edo previ ament e defi ni do na confi gurao do mdul o para uma rot i na, processo ou quai squer out ros t i pos de funci onali dades di sponvei s na apli cao.
Apesar de haver par met r os que permi t am a confi gurao de expr esses, e por conseqnci a a ut ili zao de funes para defi ni r o ret orno que ser obt i do com a consul t a dest e parmet ro, ex pr essament e pr oi bi do o uso de f unes em par met r os par a man i pul ar i nf or maes da base de dados do si st ema.
Caso haj a a necessi dade de ser i mpl ement ado um t rat ament o adi ci onal a um processo padro do si st ema, o mesmo dever ut ili zar o r ecur so de pont o de ent r ada.
A razo dest a r est ri o si mpl es:
E As r ot i nas da apli cao ERP no prot egem a consul t a de cont edos de parmet r os quant o a gravaes r eal i zadas dent ro ou fora de uma t ransao.
E Dest a forma, quai squer al t erao na base r eal izada por uma r ot i na confi gurada em um parmet ro pode ocasi onar a perda da i nt egri dade das i nformaes do si st ema.
- 141 -
ADVPL Compl et o
12.4. Pont os de Ent r ada Concei t os, Pr emi ssas e Regr as
Concei t os
Um pont o de ent rada uma User Funct i on desenvol vi da com a fi nalidade de i nt eragi r com uma rot i na padro da apli cao ERP.
A User Funct i on dever t er um nome pr - est abel eci do no desenvol vi ment o da rot i na padro do ERP, e de acordo est a pr- di sposi o e o moment o no qual o pont o de ent rada execut ado durant e um pr ocessament o, el e poder:
E Compl ement ar uma val idao r eali zada pel a apli cao;
E Compl ement ar as at ual i zaes real i zadas pel o processament o em t abel as padres do ERP;
E I mpl ement ar a at uali zao de t abel as especi ficas durant e o pr ocessament o de uma rot i na padro do ERP;
E Execut ar uma ao sem processos de at ualizaes, mas que necessi t e ut ilizar as i nformaes at uai s do ambi ent e durant e o processament o da rot i na padro para det ermi nar as caract erst i cas do pr ocesso;
E Subst i t ui r um processament o padro do si st ema por uma regra especfi ca do cl i ent e no qual o mesmo ser i mplement ado.
Pr emi ssas e Regr as
E Um pont o de ent rada no deve ser ut ili zado para out ras fi nali dades seno para as quai s o mesmo foi pr- defi nido, sob pena de causar a perda da i nt egri dade das i nformaes da base de dados ou pr ovocar event os de er r o durant e a execuo da r ot i na padro.
E Um pont o de ent rada deve ser t ranspar ent e para o pr ocesso padro, de forma que t odas as t abel as acessadas pel o pont o de ent rada e que sej am ut ili zadas pel a rot i na padro, devero t er sua si t uao i medi at ament e ant eri or execuo do pont o rest aurada ao t rmi no do mesmo, e para i st o r ecomenda- se o uso das funes GETAREA( ) e RESTAREA( ) .
E Como um pont o de ent rada no execut ado da forma t radi ci onal , ou sej a, el e no chamado como uma funo, el e no recebe parmet ros. A apli cao ERP di sponi biliza uma vari vel de si st ema denomi nada PARAMI XB, a qual recebe os parmet r os da funo chamadora e os di sponi bili za para serem ut ilizados pel a rot i na cust omi zada.
E A vari vel PARAMI XB no possui um padro de defi ni o nos cdi gos font es da apli cao ERP, dest a for ma seu t i po pode vari ar dest e um cont edo si mpl es ( caract er e, numri co, l gi co e et c.) a um t i po compl exo como um ar ray ou um obj et o. Dest a forma necessri o sempr e avali ar a document ao sobre o pont o bem como prot eger a funo cust omi zada de t i pos de PARAMI XB no t rat ados por el a.
- 142 -
ADVPL Compl et o
13. I nt er f aces v i suai s
A linguagem ADVPL possui duas for mas di st i nt as para defi ni o de i nt erfaces vi suai s no ambi ent e ERP: si nt axe convenci onal , nos padr es da l i nguagem CLI PPER e a si nt axe ori ent ada a obj et os.
Al m das di ferent es si nt axes di sponvei s para defi ni o das i nt erfaces vi suai s o ERP Prot heus possui funci onali dades pr- defi ni das, as quai s j cont m t odos os t rat ament os necessri os a at ender as necessi dades bsi cas de acesso e manut eno das i nformaes do si st ema.
Nest e t pi co sero abordadas as si nt axes convenci onai s para defi ni o das i nt erfaces vi suais da li nguagem ADVPL e as i nt erfaces de manut eno di sponvei s no ambi ent e ERP Pr ot heus.
13.1. Si nt ax e e component es das i nt er f aces v i suai s
A si nt axe convenci onal para defi ni o de component es vi suai s da linguagem ADVPL depende di ret ament e no i ncl ude especi fi cado no cabeal ho do font e. Os doi s i ncl udes di sponvei s para o ambi ent e ADVPL Pr ot heus so:
E RWMAKE. CH: permi t e a ut ili zao da si nt axe CLI PPER na defi ni o dos component es vi suai s.
E PROTHEUS.CH: permi t e a ut ili zao da si nt axe ADVPL convenci onal , a qual um apri morament o da si nt axe CLI PPER, com a incluso de novos at ri but os para os component es vi suai s di sponi bilizados no ERP Pr ot heus.
Para il ust rar a di ferena na ut ilizao dest es doi s i ncl udes, segue abai xo as di ferent es defi ni es para o component es Di al og e MsDi al og:
Ex empl o 01 I ncl ude Rw mak e.ch
# i ncl ude rwmake. ch
@ 0,0 TO 400,600 DI ALOG oDl g TI TLE "Janel a em si nt axe Cl i pper" ACTI VATE DI ALOG oDl g CENTERED
Ex empl o 02 I ncl ude Pr ot heu s.ch
# i ncl ude prot heus.ch
DEFI NE MSDI ALOG oDl g TI TLE "Janel a em si nt axe ADVPL "FROM 000,000 TO 400,600 PI XEL ACTI VATE MSDI ALOG oDl g CENTERED
Ambas as si nt axes produzi ro o mesmo efei t o quando compi ladas e execut adas no ambi ent e Pr ot heus, mas deve ser ut ili zada sempr e a si nt axe ADVPL at ravs do uso do i ncl ude PROTHEUS.CH
- 143 -
ADVPL Compl et o
Os component es da i nt erface vi sual que ser o t rat ados nest e t pico, ut ili zando a si nt axe ADVPL so:
MSDI ALOG( ) MSGET( ) SAY( ) BUTTON( ) SBUTTON( )
BUTTON( )
Si nt ax e @ nLi n ha, nCol un a BUTTON cTex t o SI ZE nLar gur a,n Al t ur a UNI DADE OF oObj et oRef ACTI ON AO Descr i o Defi ne o component e vi sual But t on, o qual per mi t e a i ncl uso de bot es de operao na t el a da i nt erface, os quai s sero vi sualizados soment e com um t ext o si mpl es para sua i dent i fi cao.
MSDI ALOG( )
Si nt ax e DEFI NE MSDI ALOG oObj et oDLG TI TLE cTi t ul o FROM nLi nI n i ,n Col I n i TO nLi Fi m,n Col Fi m OF oObj et oRef UNI DADE Descr i o Defi ne o component e MSDI ALOG( ) , o qual ut ili zado como base para os demai s component es da i nt erface vi sual , poi s um component e MSDI ALOG( ) uma j anel a da apli cao.
MSGET( )
Si nt ax e @ nLi nh a, nCol u na MSGET VARI AVEL SI ZE nLar gu r a,n Al t ur a UNI DADE OF oObj et oRef F3 cF3 VALI D VALI D WHEN WHEN PI CTURE cPi ct ur e Descr i o Defi ne o component e vi sual MSGET, o qual ut ilizado para capt ura de i nformaes di gi t vei s na t el a da i nt erface.
SAY( )
Si nt ax e @ nLi n ha, nCol un a SAY cTex t o SI ZE nLar gur a,n Al t u r a UNI DADE OF oObj et oRef Descr i o Defi ne o component e vi sual SAY, o qual ut ili zado para exi bi o de t ext os em uma t el a de i nt erface.
SBUTTON( )
Si nt ax e DEFI NE SBUTTON FROM nLi nh a, nCol u na TYPE N ACTI ON AO STATUS OF oObj et oRet Descr i o Defi ne o component e vi sual SBut t on, o qual per mi t e a i ncl uso de bot es de operao na t el a da i nt erface, os quai s sero vi sualizados dependendo da i nt erface do si st ema ERP ut ili zada soment e com um t ext o si mpl es para sua i dent i fi cao, ou com uma i magem ( Bi t Map) pr- defi ni do.
- 144 -
ADVPL Compl et o
I nt er f ace v i sual compl et a
Abai xo segue um cdi go compl et o de i nt erface, ut ili zado t odos os el ement os da i nt erface vi sual descri t os ant eri orment e:
DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 000,000 TO 080,300 PI XEL
@ 001,001 TO 040, 150 OF oDl g PI XEL
@ 010,010 SAY cText o SI ZE 55, 07 OF oDl g PI XEL
@ 010,050 MSGET cCGC SI ZE 55, 11 OF oDl g PI XEL PI CTURE " @R 99.999.999/ 9999- 99"; VALI D ! Vazi o( )
DEFI NE SBUTTON FROM 010, 120 TYPE 1 ACTI ON ( nOpca : = 1, oDl g: End( ) ) ; ENABLE OF oDl g
DEFI NE SBUTTON FROM 020, 120 TYPE 2 ACTI ON ( nOpca : = 2, oDl g: End( ) ) ; ENABLE OF oDl g
ACTI VATE MSDI ALOG oDl g CENTERED
O cdi go demonst rado ant eri orment e ut ilizados nos exer cci os de fi xao dest e mat eri al e dever produzi r a segui nt e i nt er face:
- 145 -
ADVPL Compl et o
13.2. I nt er f aces padr es par a at ual i zaes de dados
Os pr ogramas de at ualizao de cadast ros e digi t ao de movi ment os seguem um padro que se api a no Di ci onri o de Dados.
Basi cament e so duas as i nt erfaces quer permi t em a vi suali zao das i nformaes e a mani pul ao dos dados do si st ema.
E Ax Cadast r o E Mbr ow se
Ambos os model os ut ilizam como pr emi ssa que a est rut ura da t abel a a ser ut ilizada est ej a defi ni da no di ci onri o de dados do si st ema ( SX3) .
13.2.1. Ax Cadast r o( )
O AxCadast r o( ) uma funci onali dade de cadast ro si mpl es, com poucas opes de cust omi zao, a qual compost a de:
Browse padro para vi sualizao das i nformaes da base de dados, de acordo com as confi guraes do SX3 Di ci onri o de Dados ( campo br owse) .
Funes de pesqui sa, vi sualizao, i ncl uso, al t erao e excl uso padr es para vi suali zao de regi st r os si mpl es, sem a opo de cabeal ho e i t ens.
E Si nt ax e: Ax Cadast r o( cAl i as, cTi t u l o, cVl dEx c, cVl dAl t )
E Par met r os
cAl i as Ali as padro do si st ema para ut i lizao, o qual deve est ar defi ni do no di ci onri o de dados SX3. cTi t ul o Tt ul o da Janel a cVl dEx c Vali dao para Excl uso cVl dAl t Vali dao para Al t erao
Ex empl o:
# i ncl ude "prot heus.ch"
User Funct i on XCadSA2( )
Local cAl i as : = "SA2" Local cTi t ul o : = "Cadast ro de Fornecedores" Local cVl dExc : = " .T. " Local cVl dAlt : = ".T."
dbSel ect Area( cAli as) dbSet Order( 1) AxCadast r o( cAl i as,cTi t ulo,cVl dExc,cVl dAl t ) Ret urn
- 146 -
ADVPL Compl et o
13.2.2. MBr ow se( )
A Mbrowse( ) uma funci onali dade de cadast ro que permi t e a ut ilizao de r ecursos mai s apri morados na vi suali zao e mani pul ao das i nformaes do si st ema, possui ndo os segui nt es component es:
Browse padro para vi sualizao das i nformaes da base de dados, de acordo com as confi guraes do SX3 Di ci onri o de Dados ( campo br owse) .
Paramet ri zao para funes especfi cas para as aes de vi sualizao, i ncluso, al t erao e excl uso de i nformaes, o que vi abiliza a manut eno de i nformaes com est rut ura de cabeal hos e i t ens.
Recur sos adi ci onai s como i dent i fi cador es de st at us de regi st ros, l egendas e fil t ros para as i nformaes.
E Si nt ax e si mpl i f i cada: MBr ow se( nLi n1 , n Col 1, nLi n2 , n Col 2, cAl i as)
E Par met r os
nLi n 1, nCol 1, nLi n 2, nCol 2 Coordenadas dos cant os aonde o browse ser exi bi do. Para segui r o padro da AXCADASTRO( ) use 6,1,22,75 . cAl i as Ali as padro do si st ema para ut i lizao, o qual deve est ar defi ni do no di ci onri o de dados SX3.
- 147 -
ADVPL Compl et o
E Var i v ei s pr i v at e adi ci on ai s
aRot i n a
Array cont endo as funes que sero execut adas pel a Mbr owse. Est e array pode ser par amet ri zados com as funes bsi cas da AxCadast r o conforme abai xo:
AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} ) AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} ) AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui " ,0,3} ) AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} ) AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} )
cCadast r o Tt ul o do browse que ser exi bido.
Ex empl o:
# i ncl ude "prot heus.ch"
User Funct i on MBrwSA2( )
Local cAl i as : = "SA2" Pri vat e cCadast r o : = "Cadast ro de Fornecedor es" Pri vat e aRot i na : = { }
AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} ) AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} ) AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui ",0,3} ) AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} ) AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} )
1. Ut ilizando a paramet ri zao exempli fi cada, o efei t o obt i do com o uso da Mbr owse( ) ser o mesmo obt i do com o uso da AxCadast ro( ) .
2. A posi o das funes no array aRot i na define o cont edo de uma vari vel de cont rol e que ser r epassada para as funes chamadas a part i r da Mbrowse, convenci onada como nOpc. Dest a forma, para mant er o padr o da apli cao ERP a ordem a ser segui da na defi ni o do aRot i na ;
1 Pesqui sar 2 Vi suali zar 3 I ncl ui r 4 Al t erar 5 Excl ui r 6 Li vre
Ao defi ni r as funes no array aRot i na, se o nome da funo no for especi fi cado com ( ) , a Mbrowse passar como parmet ros as seguint es vari vei s de cont r ol e:
cAl i as: Al i as at i vo defi ni do para a Mbrowse nRecn o: Record number ( recno) do regi st r o posi ci onado no ali as at i vo. nOpc: Posi o da opo ut ili zada na Mbrowse de acordo com a ordem da funo no array a Rot ina.
- 149 -
ADVPL Compl et o
Ex empl o: Funo BI n cl ui ( ) su bst i t ui ndo a f uno Ax I n cl u i ( )
# i ncl ude "prot heus.ch"
User Funct i on MBrwSA2( )
Local cAl i as : = "SA2"
Pri vat e cCadast r o : = "Cadast ro de Fornecedor es" Pri vat e aRot i na : = { }
AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui " ,0,1} ) AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual " ,0,2} ) AADD( aRot i na,{ "I ncl ui r" ,"U_BI ncl ui " ,0,3} ) AADD( aRot i na,{ "Alt erar " ,"AxAl t era" ,0,4} ) AADD( aRot i na,{ "Excl ui r" ,"AxDel et a" ,0,5} )
Local cTudoOk : = "( Al er t ( ' OK' ) ,. T.) " AxI ncl ui ( cAli as,nReg,nOpc,,, ,cTudoOk)
RETURN
- 150 -
ADVPL Compl et o
13.2.3. Ax Funct i ons( )
Conforme menci onado nos t pi cos sobre as i nt erfaces padres AxCadast ro( ) e Mbr owse( ) , exi st em funes padr es da apli cao ERP que permi t em a vi suali zao, i ncl uso, al t erao e excl uso de dados em format o si mpl es.
Est as funes so padres na defi ni o da i nt erface AxCadast ro( ) e podem ser ut i lizadas t ambm da const ruo no array aRot i na ut ilizado pel a Mbr owse( ) , as quai s est o l i st adas a segui r:
Si nt ax e Ax Al t er a( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ; cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed) Descr i o Funo de al t erao padro das i nformaes de um regi st ro, no format o Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .
AXDELETA( )
Si nt ax e AXDELETA( cAl i as, nReg, nOpc, cTr ansact , aCpos, aBut t ons, aPar am, ; aAut o, l Max i mi zed) Descr i o Funo de excl uso padro das i nformaes de um regi st r o, no format o Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .
AXI NCLUI ( )
Si nt ax e Ax I ncl u i ( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ; cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed) Descr i o Funo de i ncl uso padr o das i nformaes de um regi st r o, no format o Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .
AXPESQUI ( )
Si nt ax e AXPESQUI ( ) Descr i o Funo de pesqui sa padro em r egi st ros exi bi dos pel os br owses do si st ema, a qual posi ci ona o br owse no regi st ro pesqui sado. Exi be uma t el a que permi t e a sel eo do ndi ce a ser ut i lizado na pesqui sa e a di gi t ao das i nformaes que compe a chave de busca.
- 151 -
ADVPL Compl et o
AXVI SUAL( )
Si nt ax e AXVI SUAL( cAl i as, n Reg, nOpc, aAch o, nCol Men s, cMensagem, cFunc, ; aBut t ons, l Max i mi zed ) Descr i o Funo de vi suali zao padro das i nformaes de um regi st r o, no for mat o Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .
- 152 -
ADVPL Compl et o
APNDI CES
BOAS PRTI CAS DE PROGRAMAO
14. Ut i l i zao de I dent ao
obri gat ri a a ut ilizao da i dent ao, poi s t orna o cdi go mui t o mai s l egvel . Vej a os exempl os abai xo:
A ut ili zao da i dent ao segui ndo as est rut uras de cont rol e de fl uxo ( whil e, i f, caso et c) t orna a compr eenso do cdi go mui t o mai s fcil :
Para i dent ar o cdi go ut ili ze a t ecl a < TAB> e na ferrament a DEV- St udi o, a qual pode ser confi gurada at ravs da opo Pr efer nci as :
- 153 -
ADVPL Compl et o
15. Capi t ul ao de Pal av r as- Chave
Uma conveno ampl ament e ut i lizada a de capi t ul ar as pal avras chaves, funes, vari vei s e campos ut ili zando uma combi nao de caract er es em mai scul o e mi nscul o, vi sando facili t ar a l ei t ura do cdi go font e. O cdi go a segui r:
l ocal ncnt w hi l e ( ncn t + + < 10 ) nt ot al + = ncnt * 2 en ddo
Fi cari a melhor com as pal avras chaves e vari vei s capi t ul adas:
Local n Cnt Whi l e ( nCnt + + < 1 0 ) nTot al + = nCnt * 2 EndDo
Para funes de mani pul ao de dados que comecem por db , a capi t ulao s ser efet uada aps o db :
E dbSeek ( ) E dbSel ect Ar ea( )
- 154 -
ADVPL Compl et o
15.1. Pal av r as em mai scul o
A regra ut i lizar caract er es em mai scul o para:
E Const ant es: # defi ne NUMLI NES 60 # defi ne NUMPAGES 1000
E Var i v ei s de memr i a: M- > CT2_CRCONV M- > CT2_MCONVER : = Cri aVar( "CT2_CONVER")
E Campos: SC6- > C6_NUMPED
E Quer y s: SELECT * FROM.. .
16. Ut i l i zao da Not ao Hngar a
A not ao hngara consi st e em adi ci onar os prefi xos aos nomes de vari vei s, de modo a faci l ment e se i dent i fi car seu t i po. I st o facili t a na cri ao de cdi gos- font e ext ensos, poi s usando a Not ao Hngara, voc no pr eci sa fi car o t empo t odo vol t ando defi ni o de uma vari vel para se l embrar qual o t i po de dados que deve ser col ocado nel a. Vari vei s devem t er um pr efi xo de Not ao Hngara em mi nscul as, segui do de um nome que i dent i fi que a funo da vari vel , sendo que a i ni ci al de cada pal avra deve ser mai scul a. obri gat ri a a ut ilizao dest a not ao para nomear vari vei s. Not ao Ti po de dado Ex empl o a Array aVal ores b Bl oco de cdi go bSeek c Caract er cNome d Dat a dDat aBase l Lgi co l Cont i nua n Numri co nVal or o Obj et o oMai nWindow x I ndefi ni do xCont eudo
- 155 -
ADVPL Compl et o
17. Pal av r as r eser v adas
AADD DTOS I NKEY REPLI CATE VAL ABS ELSE I NT RLOCK VALTYPE ASC ELSEI F LASTREC ROUND WHI LE AT EMPTY LEN ROW WORD BOF ENDCASE LOCK RTRI M YEAR BREAK ENDDO LOG SECONDS CDOW ENDI F LOWER SELECT CHR EOF LTRI M SETPOS CMONTH EXP MAX SPACE COL FCOUNT MI N SQRT CTOD FI ELDNAME MONTH STR DATE FI LE PCOL SUBSTR DAY FLOCK PCOUNT TI ME DELETED FOUND PROCEDURE TRANSFORM DEVPOS FUNCTI ON PROW TRI M DOW I F RECCOUNT TYPE DTOC I I F RECNO UPPER TRY AS CATCH THROW
E Pal avras reservadas no podem ser ut i lizadas para vari vei s, procedi ment os ou funes;
E Funes r eservadas so pert encent es ao compi l ador e no podem ser redefi nidas por uma aplicao;
E Todos os i dent i fi cadores que comearem com doi s ou mai s caract eres _ so ut ili zados como i dent i fi cadores i nt ernos e so r eservados.
E I dent i fi cadores de escopo PRI VATE ou PUBLI C ut ili zados em apli caes especfi cas desenvol vida por ou para client es devem t er sua i dent i fi cao i ni ci ada por um caract ere _ .
- 156 -
ADVPL Compl et o
LI STAS DE EXERC CI OS
Mdul o 01: I nt r oduo pr ogr amao
01 Apri morar os segui nt es al gori t mos descri t os na apost i l a:
E Usar t el efone pbli co cart o E Fri t ar um ovo E Mascar um chi cl et e E Tr ocar l mpadas E Descascar bat at as E Jogar o Jogo da Forca
02 Mont ar os di agramas de bl ocos para os al gori t mos desenvol vi dos no exercci o ant eri or:
E Usar t el efone pbli co cart o E Fri t ar um ovo E Mascar um chi cl et e E Tr ocar l mpadas E Descascar bat at as E Jogar o Jogo da Forca
- 157 -
ADVPL Compl et o
Mdul o 02: A l i nguagem ADVPL
01
Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as, ut ili zando a est rut ura de r epet i o Whi l e, demonst rando quant as bat at as foram descascadas:
02
Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as, ut ili zando a est rut ura de repet i o FOR, demonst rando quant as bat at as foram descascadas:
03
Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as, ut ili zando a est rut ura de r epet i o FOR, demonst rando quant as bat at as fal t am para serem descascadas:
- 158 -
ADVPL Compl et o
04 Desenvol ver um programa que i mpl ement e o algori t mo do Jogo da For ca:
05 Desenvol ver um programa que i mpl ement e o algori t mo do Jogo da Vel ha:
06 Desenvol ver um pr ogr ama que permi t a ao usuri o pesqui sar um cl i ent e i nformando seu CNPJ e caso o mesmo exi st a na base, exi bi r suas pr i nci pai s i nformaes.
07 Ut ilizando a int erface vi sual desenvol vi da para o exer cci o ant eri or, desenvol ver a funo genri ca Get Text o( ) , par a ser ut ili zada nas apli caes do Jogo da Vel ha e Jogo da For ca.
- 159 -
ADVPL Compl et o
08 Ut ilizando a funo AVI SO( ) desenvol ver um pr ograma que permi t a ao usuri o sel eci onar a opo de busca de CNPJ por cli ent e ou fornecedor, e caso encont re exi ba seus dados pri nci pai s.
09 Desenvol ver uma r ot i na que capt ure vri os CNPJs de cl i ent es i nformados pel o usuri o, e veri fi que para cada um del es se o mesmo exi st e ou no na base de dados. Ao fi nal i nformar quai s CNPJs for am i nfor mados, e de acordo com a sel eo do usuri o, exi bi r os dados pri nci pai s de um dest es cl i ent es.
10 Ut ilizando a funo FORMBATCH( ) desenvol ver uma rot i na que veri fique se para cada i t em de um not a fi scal de ent rada exi st e o r espect i vo cabeal ho, e caso sej a encont rado al gum i t em i nconsi st ent e, comuni que est a ocor rnci a ao usuri o que est real i zando o processament o.
11 Desenvol ver uma rot i na que, at ravs do uso de um bl oco de cdi go, convert a a est rut ura da t abel a SA1 obt i da com a funo DBSTRUCT( ) em uma st ri ng denomi nada cCampo.
- 160 -
ADVPL Compl et o
Mdul o 03: Desenvol vendo pequenas cust omi zaes
01 Desenvol ver uma val i dao para um campo especfi co do t i po caract ere, cuj o cont edo est ej a rel aci onado a out ra t abel a, e que exi ba uma mensagem de avi so caso o cdi go i nformado no exi st a nest a t abel a rel aci onada.
02 Desenvol ver uma vali dao para um campo car act ere exi st ent e na base, para que sej a aval i ado se aquel e cdi go j exi st e cadast rado, e caso posi t i vo exi ba uma mensagem de avi so al ert ando dest a ocorr nci a.
03 Desenvol ver um gat il ho que r et orne uma descri o compl ement ar para um campo vi ncul ado ao campo cdi go ut ilizado nos exercci os ant eri ores.
- 161 -
ADVPL Compl et o
04 Cust omi zar o parmet r o que defi ne o pr efi xo do t t ul o de cont as a pagar gerado pel a int egrao COMPRAS - > FI NANCEI RO at ravs da i ncluso de uma not a fi scal de ent rada, de forma que o pr efi xo do t t ul o sej a gerado com o cdi go da fi li al corr ent e.
05 Prot eger a r ot i na desenvol vi da no exer cci o ant eri or , de forma a garant i r que na ut ili zao da fi li al como pr efi xo do t t ul o no i r ocorr er dupli cidade de dados no cont as a pagar do fi nancei ro.
06 I mpl ement ar uma val idao adi ci onal no cadast ro de cl i ent es, at r avs do pont o de ent rada adequado, de forma que o campo CNPJ ( A1_CGC) sej a obri gat ri o para t odos os t i pos de cl i ent e, excet o os defi nidos como Ext eri or .
- 162 -
ADVPL Compl et o
MDULO 04: Desenv ol vendo apl i caes em ADVPL
18. A l i nguagem ADVPL
A Li nguagem ADVPL t eve seu i nci o em 1994, sendo na verdade uma evol uo na ut i lizao de linguagens no padro xBase pel a Mi crosi ga Soft ware S.A. ( Cl i pper, Vi sual Obj ect s e depoi s Fi veWi n) . Com a cri ao da t ecnol ogi a Prot heus, era necessri o criar uma linguagem que suport asse o padro xBase para a manut eno de t odo o cdi go exi st ent e do si st ema de ERP Si ga Advanced. Foi ent o cri ada a li nguagem chamada Advanced Pr ot heus Language.
O ADVPL uma ext enso do padro xBase de comandos e funes, operador es, est rut uras de cont r ol e de fl uxo e pal avras reservadas, cont ando t ambm com funes e comandos di sponi bili zados pel a Mi crosi ga que a t orna uma linguagem complet a para a cri ao de apli caes ERP pront as para a I nt ernet . Tambm uma l i nguagem ori ent ada a obj et os e event os, permi t indo ao programador desenvol ver apli caes vi suais e cri ar suas prpri as cl asses de obj et os.
Quando compi l ados, t odos os arqui vos de cdi go t ornam- se uni dades de i nt eli gnci a bsi cas, chamados APO s ( de Advanced Prot heus Obj ect s) . Tai s APO s so mant i dos em um reposi t ri o e car regados di nami cament e pel o PROTHEUS Ser ver para a execuo. Como no exi st e a li nkedi o, ou uni o fsi ca do cdigo compi l ado a um det ermi nado mdul o ou apli cao, funes cri adas em ADVPL podem ser execut adas em qual quer pont o do ambi ent e Advanced Pr ot heus.
O compil ador e o i nt erpret ador da li nguagem ADVPL o prpr i o ser vi dor PROTHEUS ( PROTHEUS Ser ver) , e exi st e um ambi ent e vi sual para desenvol vi ment o i nt egrado ( PROTHEUSI DE) onde o cdi go pode ser cri ado, compi l ado e depurado.
Os programas em ADVPL podem cont er comandos ou funes de i nt er face com o usuri o. De acordo com t al caract erst i ca, t ai s programas so subdi vi di dos nas seguint es cat egori as:
Pr ogr amao Com I n t er f ace Pr pr i a com o Usu r i o
Nest a cat egori a ent ram os pr ogramas desenvol vi dos para serem execut ados at ravs do t ermi nal remot o do Prot heus, o Pr ot heus Remot e. O Pr ot heus Remot e a apli cao encar r egada da i nt erface e da i nt erao com o usuri o, sendo que t odo o pr ocessament o do cdi go em ADVPL, o acesso ao banco de dados e o gerenci ament o de conexes efet uado no Prot heus Ser ver. O Pr ot heus Remot e o pri nci pal mei o de acesso a execuo de r ot i nas escri t as em ADVPL no Prot heus Server, e por i sso permi t e execut ar qual quer t i po de cdi go, t enha el e i nt erface com o usuri o ou no. Por m nest a cat egori a so consi derados apenas os programas que real i zem al gum t i po de i nt erface r emot a ut i lizando o prot ocol o de comuni cao do Prot heus.
Podem- se cri ar r ot i nas para a cust omi zao do si st ema ERP Mi cr osi ga Prot heus, desde processos adi ci onai s at mesmo rel at ri os. A grande vant agem apr ovei t ar t odo o ambi ent e mont ado pel os mdul os do ERP Mi crosi ga Prot heus. Por m, com o ADVPL possvel at mesmo cri ar t oda uma apli cao, ou mdul o, do comeo.
Todo o cdi go do si st ema ERP Mi crosi ga Prot heus escri t o em ADVPL.
- 163 -
ADVPL Compl et o
Pr ogr amao Sem I nt er f ace Pr pr i a com o Usu r i o
As rot i nas cri adas sem i nt erface so consi deradas nest a cat egori a porque geral ment e t m uma ut ili zao mai s especfi ca do que um processo adi ci onal ou um rel at ri o novo. Tai s rot i nas no t m i nt erface com o usuri o at ravs do Pr ot heus Remot e, e qual quer t ent at i va nesse sent i do ( como a cri ao de uma j anel a padro) ocasi onar uma exceo em t empo de execuo. Est as rot i nas so apenas processos, ou Jobs, execut ados no Pr ot heus Ser ver. Al gumas vezes, a i nt erface dest as rot i nas fi ca a cargo de apli caes ext ernas, desenvol vi das em out ras linguagens, que so responsvei s por i ni ci ar os pr ocessos no ser vi dor Pr ot heus at ravs dos mei os di sponvei s de i nt egrao e conect i vi dade no Prot heus.
De acordo com a ut ilizao e com o mei o de conect i vi dade ut ili zado, est as rot i nas so subcat egori zadas assi m:
E Pr ogr amao por Pr ocessos
Rot i nas escri t as em ADVPL podem ser i ni ci adas como pr ocessos i ndi viduai s ( sem i nt erface) no Prot heus Server at ravs de duas manei ras: I ni ci adas por out ra r ot i na ADVPL at ravs da chamada de funes como St art Job( ) ou Call Proc( ) ou i ni ci adas aut omat i cament e na i ni ci alizao do Pr ot heus Server ( quando pr opri ament e confi gurado) .
E Pr ogr amao de RPC
At ravs de uma bi bli ot eca de funes di sponvel no Prot heus ( uma API de comuni cao) , podem- se execut ar r ot inas escri t as em ADVPL di ret ament e no Prot heus Server, at r avs de apli caes ext ernas escri t as em out ras l inguagens. I st o o que se chama de RPC ( de Remot e Procedure Call, ou Chamada de Pr ocediment os Remot a) .
O servi dor Prot heus t ambm pode execut ar r ot i nas em ADVPL em out ros servi dores Pr ot heus at ravs de conexo TCP/ I P di r et a ut ilizando o concei t o de RPC. Do mesmo modo, apl i caes ext ernas podem r equi si t ar a execuo de r ot i nas escri t as em ADVPL at ravs de conexo TCP/ I P di ret a. Programao Web
O Pr ot heus Ser ver pode t ambm ser execut ado como um servi dor Web, r espondendo a requi si es HTTP. No moment o dest as r equi si es, pode execut ar r ot inas escri t as em ADVPL como pr ocessos i ndi vi duai s, envi ando o resul t ado das funes como ret orno das requi si es para o cli ent e HTTP ( como por exempl o, um Br owser de I nt ernet ) . Qual quer rot i na escri t a em ADVPL que no cont enha comandos de i nt erface pode ser execut ada at ravs de r equi si es HTTP. O Pr ot heus permi t e a compil ao de arqui vos HTML cont endo cdi go ADVPL embut i do. So os chamados arqui vos ADVPL ASP, para a cri ao de pgi nas di nmi cas.
E Pr ogr amao Tel Net
Tel Net part e da gama de pr ot ocol os TCP/ I P que permi t e a conexo a um comput ador remot o at ravs de uma apl i cao cl i ent e dest e pr ot ocol o. O PROTHEUS Ser ver pode emul ar um t ermi nal Tel Net , at ravs da execuo de r ot i nas escri t as em ADVPL. Ou sej a, pode- se escrever rot i nas ADVPL cuj a i nt erface fi nal ser um t ermi nal Tel Net ou um col et or de dados mvel .
- 164 -
ADVPL Compl et o
19. Est r ut ur a de um Pr ogr ama ADVPL
Um programa de comput ador nada mai s do que um grupo de comandos l ogi cament e di spost os com o obj et i vo de execut ar det ermi nada t arefa. Esses comandos so gravados em um arqui vo t ext o que t ransformado em uma li nguagem execut vel por um comput ador at ravs de um pr ocesso chamado compilao. A compi l ao subst i t ui os comandos de al t o nvel ( que os humanos compr eendem) por inst rues de bai xo nvel ( compreendi da pelo si st ema operaci onal em execuo no comput ador) . No caso do ADVPL, no o si st ema operaci onal de um comput ador que i r execut ar o cdi go compil ado, mas si m o Prot heus Ser ver.
Dent r o de um programa, os comandos e funes ut i lizados devem segui r regras de si nt axe da linguagem ut ili zada, poi s caso cont rri o o pr ograma ser i nt errompi do por er ros. Os er ros podem ser de compi l ao ou de execuo.
Er ros de compi l ao so aquel es encont rados na si nt axe que no per mi t em que o arqui vo de cdi go do programa sej a compi l ado. Podem ser comandos especi fi cados de forma err nea, ut ili zao i nvli da de operador es, et c.
Er ros de execuo so aquel es que acont ecem depoi s da compil ao, quando o programa est sendo execut ado. Podem ocor rer por i nmeras razes, mas geral ment e se refer em as funes no exi st ent es, ou vari vei s no cri adas ou i ni ciali zadas, et c.
Li nh as de Pr ogr ama
As li nhas exi st ent es dent ro de um arqui vo t ext o de cdi go de programa podem ser li nhas de comando, l inhas de coment ri o ou l i nhas mi st as.
E Li nh as de Comando
Li nhas de comando possuem os comandos ou i nst rues que sero execut adas. Por exempl o:
Local nCnt Local nSoma := 0 For nCnt := 1 To 10 nSoma += nCnt Next nCnt
E Li nh as de Coment r i o
Li nhas de coment ri o possuem um t ext o qual quer, mas no so execut adas. Servem apenas para document ao e para t ornar mai s fci l o ent endi ment o do pr ograma. Exi st em t r s formas de se coment ar l i nhas de t ext o. A pri mei ra del as ut ili zar o si nal de * ( ast eri sco) no comeo da li nha:
* Programa para clculo do total * Autor: Microsiga Software S.A. * Data: 2 de outubro de 2001
- 165 -
ADVPL Compl et o
Todas as l inhas i ni ci adas com um si nal de ast eri sco so consi deradas como coment ri o. Pode- se ut ilizar a pal avra NOTE ou doi s smbol os da l et ra "e" comer ci al ( &&) para r eal izar a funo do si nal de ast eri sco. Por m t odas est as for mas de coment ri o de li nhas so obsol et as e exi st em apenas para compat i bili zao com o padro xBase. A mel hor manei ra de coment ar linhas em ADVPL ut ili zar duas barr as t ransver sai s:
// Programa para clculo do total // Autor: Microsiga Software S.A. // Data: 2 de outubro de 2001
Out ra forma de document ar t ext os ut i lizar as barras t ransversai s j unt ament e com o ast eri sco, podendo- se coment ar t odo um bl oco de t ext o sem pr eci sar coment ar l inha a linha:
/* Programa para clculo do total Autor: Microsiga Software S.A. Data: 2 de outubro de 2001 */
Todo o t ext o encont rado ent r e a abert ura ( i ndi cada pel os caract er es / * ) e o fechament o ( indi cada pel os caract er es * / ) consi derado como coment ri o.
E Li nh as Mi st as
O ADVPL t ambm per mi t e que exi st am l inhas de comando com coment ri o. I st o possvel adi ci onando- se as duas barras t ransver sai s ( / / ) ao fi nal da linha de comando e adi ci onando- se o t ext o do coment ri o:
Local nCnt Local nSoma := 0 // Inicializa a varivel com zero para a soma For nCnt := 1 To 10 nSoma += nCnt Next nCnt
E Tamanho da Li n ha
Assi m como a li nha fsica, del i mit ada pel a quant i dade de caract er es que pode ser di gi t ado no edi t or de t ext os ut ili zado, exi st e uma l inha consi derada li nha l gi ca. A li nha l gi ca, aquel a consi derada para a compil ao como uma ni ca li nha de comando.
A pri ncpi o, cada li nha di gi t ada no arqui vo t ext o di ferenci ada aps o pressi onament o da t ecl a < Ent er> . Ou sej a, a l inha l gi ca, a li nha fsi ca no arqui vo. Por m al gumas vezes, por li mi t ao fsi ca do edi t or de t ext o ou por est t i ca, pode- se "quebrar" a linha l gi ca em mai s de uma li nha fsi ca no arqui vo t ext o. I st o efet uado ut ili zando- se o si nal de pont o- e- vrgul a ( ; ) .
Nest e exempl o exi st e uma linha de comando para a checagem das var i vei s ut ilizadas. Como a linha t orna- se mui t o grande, pode- se di vi di- l a em mai s de uma li nha fsi ca ut ilizando o si nal de
- 166 -
ADVPL Compl et o
pont o- e- vrgul a. Se um si nal de pont o- e- vr gul a for esqueci do nas duas pri mei ras li nhas, durant e a execuo do programa ocor rer um err o, poi s a segunda li nha fsi ca ser consi derada como uma segunda li nha de comando na compil ao. E durant e a execuo est a linha no t er sent i do.
19.1. r eas de um Pr ogr ama ADVPL
Apesar de no ser uma li nguagem de padr es rgi dos com rel ao est rut ura do programa, i mport ant e i dent i fi car al gumas de suas part es. Consi der e o pr ograma de exempl o abai xo:
#include protheus.ch
/* +===========================================+ | Programa: Clculo do Fatorial | | Autor : Microsiga Software S.A. | | Data : 02 de outubro de 2001 | +===========================================+ */
User Function CalcFator()
Local nCnt Local nResultado := 1 // Resultado do fatorial Local nFator := 5 // Nmero para o clculo
// Clculo do fatorial For nCnt := nFator To 1 Step -1 nResultado *= nCnt Next nCnt
// Exibe o resultado na tela, atravs da funo alert Alert("O fatorial de " + cValToChar(nFator) + ; " " + cValToChar(nResultado))
// Termina o programa Return
A est rut ura de um pr ogr ama ADVPL compost a pel as segui nt es reas:
E rea de I dent i fi cao - Decl arao dos i ncl udes - Decl arao da funo - I dent i fi cao do pr ogr ama
E rea de Aj ust es I ni ci ai s - Decl arao das vari vei s
E Corpo do Programa - Preparao para o processament o - Processament o
E rea de Encer rament o
- 167 -
ADVPL Compl et o
r ea de I dent i f i cao
Est a uma rea que no obri gat ri a e dedi cada a document ao do programa. Quando exi st ent e, cont m apenas coment ri os expl i cando a sua finali dade, dat a de cri ao, aut or , et c. , e aparece no comeo do programa, ant es de qual quer li nha de comando.
O format o para est a rea no defi ni do. Pode- se col ocar qual quer t i po de i nformao desej ada e escol her a format ao apr opri ada.
#include protheus.ch
/* +==========================================+ | Programa: Clculo do Fatorial | | Autor : Microsiga Software S.A. | | Data : 02 de outubro de 2001 | +==========================================+ */
User Function CalcFator()
Opci onal ment e podem- se i nclui r defi ni es de const ant es ut ili zadas no programa ou i ncluso de arqui vos de cabeal ho nest a r ea.
r ea de Aj u st es I ni ci ai s
Nest a rea geral ment e se fazem os aj ust es i ni ci ai s, i mport ant es para o cor ret o funci onament o do programa. Ent re os aj ust es se encont ram decl araes de vari vei s, i ni ci ali zaes, abert ura de arqui vos, et c. Apesar do ADVPL no ser uma li nguagem rgi da e as vari vei s poderem ser decl aradas em qual quer l ugar do programa, aconsel hvel faz- l o nest a rea vi sando t ornar o cdi go mai s l egvel e facili t ar a i dent i fi cao de vari vei s no ut ili zadas.
Local nCnt Local nResultado := 0 // Resultado do fatorial Local nFator := 10 // Nmero para o clculo
Cor po do Pr ogr ama
nest a r ea que se encont ram as l inhas de cdi go do pr ograma. onde se real i za a t arefa necessri a at ravs da organi zao l gi ca dest as li nhas de comando. Espera- se que as l i nhas de comando est ej am organizadas de t al modo que no fi nal dest a rea o resul t ado esperado sej a obt i do, sej a el e armazenado em um arqui vo ou em vari vei s de memri a, pront o par a ser exi bi do ao usuri o at ravs de um r el at ri o ou na t el a.
// Clculo do fatorial For nCnt := nFator To 1 Step -1 nResultado *= nCnt Next nCnt
- 168 -
ADVPL Compl et o
A preparao para o pr ocessament o formada pel o conj unt o de vali daes e processament os necessri os ant es da r eali zao do pr ocessament o em si .
Avali ando o processament o do cl cul o do fat orial descri t o ant eri orment e, pode- se defi ni r que a vali dao i ni ci al a ser r eali zada o cont edo da vari vel nFat or, poi s a mesma det ermi nar a corr et a execuo do cdi go.
// Clculo do fatorial nFator := GetFator() // GetFator funo ilustrativa na qual a varivel recebe a informao do usurio.
If nFator <= 0 Alert(Informao invlida) Return Endif
For nCnt := nFator To 1 Step -1 nResultado *= nCnt Next nCnt
r ea de Encer r ament o
nest a rea onde as fi nalizaes so efet uadas. onde os arqui vos abert os so fechados, e o resul t ado da execuo do pr ogr ama ut ili zado. Pode- se exi bi r o r esult ado armazenado em uma vari vel ou em um arqui vo ou si mpl esment e fi nali zar, caso a t arefa j t enha si do t oda compl et ada no corpo do programa. nest a rea que se encont r a o encerrament o do programa. Todo programa em ADVPL deve sempre t ermi nar com a pal avra chave r et urn.
// Exibe o resultado na tela, atravs da funo alert Alert("O fatorial de " + cValToChar(nFator) + ; " " + cValToChar(nResultado))
// Termina o programa Return
- 169 -
ADVPL Compl et o
20. Decl ar ao e At r i bui o de Var i vei s
20.1. Ti po de Dados
O ADVPL no uma li nguagem de t i pos rgidos ( st rongl y t yped) , o que si gni fi ca que vari vei s de memri a podem r eceber di fer ent es t i pos de dados durant e a execuo do programa.
As vari vei s podem t ambm cont er obj et os, mas os t i pos pri mri os da l i nguagem so:
Numr i co
O ADVPL no di fer enci a val ores i nt ei ros de val ores com pont o fl ut uant e, port ant o podem- se cri ar vari vei s numri cas com qual quer val or dent ro do i nt erval o permi t i do. Os segui nt es el ement os so do t i po de dado numri co:
2 43.53 0.5 0.00001 1000000
Uma vari vel do t i po de dado numri co pode cont er um nmer o de dezoi t o dgi t os i ncl uindo o pont o fl ut uant e, no i nt erval o de 2.2250738585072014 E308 at 1.7976931348623158 E+ 308.
Lgi co
Val ores l gi cos em ADVPL so i dent i fi cados at r avs de .T. ou .Y. para verdadei ro e .F. ou .N. para fal so ( i ndependent ement e se os caract er es est i ver em em mai scul o ou mi nscul o) .
Car act er e
St ri ngs ou cadei as de caract er es so i dent i fi cadas em ADVPL por bl ocos de t ext o ent r e aspas dupl as ( ") ou aspas si mpl es ( ' ) :
"Ol mundo!" 'Esta uma string' "Esta 'outra' string"
Uma vari vel do t i po caract er e pode cont er st ri ngs com no mxi mo 1 MB, ou sej a, 1048576 caract eres.
Dat a
O ADVPL t em um t i po de dados especfi co para dat as. I nt ernament e as vari vei s dest e t i po de dado so armazenadas como um nmero cor respondent e a dat a Jul i ana.
Vari vei s do t i po de dados Dat a no podem ser decl aradas di ret ament e, e si m at ravs da ut ili zao de funes especfi cas como por exempl o CTOD( ) que convert e uma st ri ng para dat a.
- 170 -
ADVPL Compl et o
Ar r ay
O Ar ray um t i po de dado especi al . a di sposi o de out r os el ement os em col unas e li nhas. O ADVPL suport a ar rays uni di mensi onai s ( vet or es) ou mul t i di mensi onai s ( mat ri zes) . Os el ement os de um arr ay so acessados at r avs de ndi ces numri cos i ni ci ados em 1, i dent i fi cando a li nha e col una para quant as di menses exi st i rem.
Arrays devem ser ut ilizadas com caut el a, poi s se forem mui t o grandes podem exauri r a memri a do servi dor.
Bl oco de Cdi go
O bl oco de cdi go um t i po de dado especi al . ut ilizado para armazenar i nst rues escri t as em ADVPL que podero ser execut adas post eri orment e.
20.2. Decl ar ao de v ar i vei s
Vari vei s de memri a so um dos r ecursos mai s i mport ant es de uma linguagem. So r eas de memri a cri adas para armazenar i nformaes ut ili zadas por um progr ama para a execuo de t arefas. Por exempl o, quando o usuri o di gi t a uma i nformao qual quer , como o nome de um produt o, em uma t el a de um programa est a informao armazenada em uma vari vel de memri a para post eri or ment e ser gravada ou i mpressa.
A part i r do moment o que uma vari vel cri ada, no necessri o mai s se r efer enci ar ao seu cont edo, e si m ao seu nome.
O nome de uma vari vel um i dent i fi cador ni co o qual deve r espei t ar um mx i mo de 1 0 car act er es. O ADVPL no i mpede a cri ao de uma vari vel de memr i a cuj o nome cont enha mai s de 10 caract er es, por m apen as os 10 pr i mei r os ser o consi der ados para a l ocalizao do cont edo armazenado.
Port ant o se forem cri adas duas vari vei s cuj os 10 pri mei ros car act er es for em i guai s, como nTot al Geral Anual e nTot al Geral Mensal , as refer nci as a qual quer uma del as no pr ograma resul t aro o mesmo, ou sej a, sero a mesma vari vel :
Quando o cont edo da vari vel nTot al Geral Mensal exi bi do, o seu val or ser de 300. I sso acont ece porque no moment o que esse val or foi at ri budo vari vel nTot al Geral Anual , o ADVPL consi der ou apenas os 10 pri mei ros caract er es ( assi m como o faz quando deve exi bi r o val or da vari vel nTot alGeral Mensal ) , ou sej a, consi der ou- as como a mesma vari vel . Assi m o val or ori ginal de 100 foi subst i t udo pel o de 300.
- 171 -
ADVPL Compl et o
20.3. Escopo de var i v ei s
O ADVPL no uma linguagem de t i pos rgidos para vari vei s, ou sej a, no necessri o i nformar o t i po de dados que det ermi nada varivel i r cont er no moment o de sua decl arao, e o seu val or pode mudar durant e a execuo do pr ograma.
Tambm no h necessi dade de decl arar vari vei s em uma seo especfi ca do seu cdi go font e, embora sej a aconsel hvel decl arar t odas as vari vei s necessri as no comeo, t ornando a manut eno mai s fci l e evi t ando a decl arao de vari vei s desnecessri as.
Para decl arar uma vari vel deve- se ut ili zar um ident ificador de escopo. Um i dent i fi cador de escopo uma pal avra chave que i ndi ca a que cont ext o do pr ograma a vari vel decl arada pert ence. O cont ext o de vari vei s pode ser l ocal ( vi suali zadas apenas dent r o do pr ograma at ual) , pblico ( vi sualizadas por qual quer out ro programa) , ent r e out r os.
O Cont ex t o de Var i v ei s dent r o de um Pr ogr ama
As vari vei s decl aradas em um programa ou funo, so vi svei s de acordo com o escopo onde so defi nidas. Como t ambm do escopo depende o t empo de exi st nci a das vari vei s. A defi ni o do escopo de uma vari vel efet uada no moment o de sua decl arao.
Local nNumero : = 10
Est a li nha de cdi go decl ara uma vari vel chamada nNumero i ndi cando que pert ence seu escopo l ocal .
Os i dent i fi cador es de escopo so:
E Local E St at i c E Pri vat e E Publi c
O ADVPL no rgi do em rel ao decl arao de vari vei s no comeo do programa. A i ncluso de um i dent i fi cador de escopo no necessri o para a decl arao de uma vari vel , cont ant o que um val or l he sej a at ri budo.
nNumero2 := 15
Quando um val or at r i budo uma vari vel em um programa ou funo, o ADVPL cri ar a vari vel caso el a no t enha si do decl arada ant eri orment e. A vari vel ent o cri ada como se t i vesse si do decl arada como Pri vat e.
Devi do a essa caract erst i ca, quando se pret ende fazer uma at ri bui o a uma vari vel decl arada pr evi ament e mas escr eve- se o nome da vari vel de forma i ncorr et a, o ADVPL no gerar nenhum err o de compil ao ou de execuo. Poi s compr eender o nome da vari vel escri t o de forma i ncorr et a como se fosse a cri ao de uma nova vari vel . I st o al t erar a l gi ca do pr ograma, e um er ro mui t as vezes di fcil de i dent i fi car.
- 172 -
ADVPL Compl et o
Var i v ei s de escopo l ocal
Vari vei s de escopo l ocal so pert encent es apenas ao escopo da funo onde foram decl aradas e devem ser expli ci t ament e decl aradas com o i dent i fi cador LOCAL, como no exempl o:
Function Pai() Local nVar := 10, aMatriz := {0,1,2,3} . <comandos> . Filha() . <mais comandos> . Return(.T.)
Nest e exempl o, a vari vel nVar foi decl arada como l ocal e at ri buda com o val or 10. Quando a funo Fil ha execut ada, nVar ainda exi st e mas no pode ser acessada. Quando a execuo da funo Pai t ermi nar, a vari vel nVar dest r uda. Qual quer vari vel com o mesmo nome no programa que chamou a funo Pai no afet ada.
Vari vei s de escopo l ocal so cri adas aut omat i cament e cada vez que a funo onde for em decl aradas for at i vada. El as cont i nuam a exi st i r e mant m seu val or at o fi m da at i vao da funo ( ou sej a, at que a funo r et orne o cont rol e para o cdi go que a execut ou) . Se uma funo chamada r ecursi vament e ( por exempl o, chama a si mesma) , cada chamada em recurso cri a um novo conj unt o de vari vei s l ocai s.
A vi si bilidade de vari vei s de escopo l ocai s i dnt i ca ao escopo de sua decl arao, ou sej a, a vari vel vi svel em qual quer l ugar do cdi go font e em que foi decl arada. Se uma funo chamada r ecursi vament e, apenas as vari vei s de escopo l ocal cri adas na mai s r ecent e at i vao so vi svei s.
Var i v ei s de escopo st at i c
Vari vei s de escopo st at i c funci onam basi cament e como as vari vei s de escopo l ocal , mas mant m seu val or at ravs da execuo e devem ser decl aradas expl i ci t ament e no cdi go com o i dent i fi cador STATI C.
O escopo das vari vei s st at i c depende de onde so decl aradas. Se for em decl aradas dent r o do corpo de uma funo ou procedi ment o, seu escopo ser l i mit ado quel a rot i na. Se forem decl aradas for a do corpo de qual quer rot i na, seu escopo afet a a t odas as funes decl aradas no font e. Nest e exempl o, a vari vel nVar decl arada como st at i c e i ni ciali zada com o val or 10:
Quando a funo Fil ha execut ada, nVar ai nda exi st e mas no pode ser acessada. Di fer ent e de vari vei s decl aradas como LOCAL ou PRI VATE, nVar cont i nua a exist i r e mant m seu val or at ual quando a execuo da funo Pai t ermina. Ent ret ant o, soment e pode ser acessada por execues subseqent es da funo Pai .
Var i v ei s de escopo pr i v at e
A decl arao opci onal para vari vei s pri vadas. Mas podem ser decl aradas expl i ci t ament e com o i dent i fi cador PRI VATE.
Adi ci onal ment e, a at ri bui o de val or a uma vari vel no cri ada ant eri orment e aut omat i cament e cri a a vari vel como pri vada. Uma vez cri ada, uma vari vel pri vada cont i nua a exi st i r e mant m seu val or at que o programa ou funo onde foi cri ada t ermi ne ( ou sej a, at que a funo onde foi cri ada ret orne para o cdi go que a execut ou) . Nest e moment o, aut omat i cament e dest r uda.
possvel cri ar uma nova vari vel pri vada com o mesmo nome de uma vari vel j exi st ent e. Ent ret ant o, a nova ( dupli cada) vari vel pode apenas ser cri ada em um nvel de at i vao i nferi or ao nvel onde a vari vel foi decl arada pel a pri mei ra vez ( ou sej a, apenas em uma funo chamada pel a funo onde a vari vel j havi a si do cri ada) . A nova vari vel pri vada i r esconder qual quer out r a vari vel pri vada ou pbli ca ( vej a a document ao sobr e vari vei s pbli cas) com o mesmo nome enquant o exi st i r.
Uma vez cri ada, uma vari vel pri vada visvel em t odo o pr ogr ama enquant o no for dest ruda aut omat i cament e quando a rot i na que a cri ou t ermi nar ou uma out ra vari vel pri vada com o mesmo nome for cri ada em uma subfuno chamada ( nest e caso, a vari vel exi st ent e t orna- se i nacessvel at que a nova vari vel pri vada sej a dest r uda) . Em t ermos mai s si mpl es, uma vari vel pri vada vi svel dent ro da funo de cri ao e t odas as funes chamadas por est a, a menos que uma funo chamada cri e sua pr pri a vari vel pri vada com o mesmo nome.
Nest e exempl o, a vari vel nVar cri ada com escopo pri vat e e i ni ci ali zada com o val or 10. Quando a funo Fi lha execut ada, nVar ai nda exi st e e, di ferent e de uma vari vel de escopo l ocal , pode ser acessada pel a funo Fil ha. Quando a funo Pai t erminar, nVar ser dest ruda e qual quer decl arao de nVar ant eri or se t ornar acessvel novament e.
No ambi ent e ERP Pr ot heus, exi st e uma conveno adi ci onal a qual deve ser respei t ada que vari vei s em uso pel a apli cao no sej am i ncorr et ament e mani pul adas. Por est a conveno deve ser adi ci onado o caract er _ ant es do nome de vari vei s PRI VATE e PUBLI C. Mai ores i nformaes avali ar o t pi co: Boas Prt i cas de Pr ogramao.
Ex empl o: Pri vat e _dDat a
- 174 -
ADVPL Compl et o
Var i v ei s de escopo publ i c
Podem- se cri ar vari vei s de escopo publi c di nami cament e no cdi go com o i dent i fi cador PUBLI C. As vari vei s dest e escopo cont i nuam a exi st i r e mant m seu val or at o fi m da execuo da t hread ( conexo) .
possvel cri ar uma vari vel de escopo pri vat e com o mesmo nome de uma vari vel de escopo publi c exi st ent e, ent r et ant o, no permi t ido cri ar uma vari vel de escopo publi c com o mesmo nome de uma vari vel de escopo pri vat e exi st ent e.
Uma vez cri ada, uma vari vel de escopo publi c vi svel em t odo o programa onde foi decl arada at que sej a escondida por uma vari vel de escopo pri vat e cri ada com o mesmo nome. A nova vari vel de escopo pri vat e cri ada esconde a vari vel de escopo publi c exi st ent e, e est a se t ornar i nacessvel at que a nova var i vel pri vat e sej a dest ruda. Por exempl o:
Function Pai() Public nVar := 10 <comandos> . Filha() <mais comandos> . Return(.T.)
Nest e exempl o, nVar cri ada como publi c e i nici ali zada com o val or 10. Quando a funo Fi l ha execut ada, nVar ai nda exi st e e pode ser acessada. Di fer ent e de vari vei s l ocai s ou pri vat es, nVar ai nda exi st e aps o t rmi no da a execuo da funo Pai .
Di ferent ement e dos out ros i dent i fi cadores de escopo, quando uma var i vel decl arada como pbli ca sem ser i ni ci ali zada, o val or assumi do fal so ( .F.) e no nul o ( nil) .
No ambi ent e ERP Pr ot heus, exi st e uma conveno adi ci onal a qual deve ser respei t ada que vari vei s em uso pel a apli cao no sej am i ncorr et ament e mani pul adas. Por est a conveno deve ser adi ci onado o caract er _ ant es do nome de vari vei s PRI VATE e PUBLI C. Mai ores i nformaes avali ar o t pi co: Boas Prt i cas de Pr ogramao.
Ex empl o: Publ i c _cRot ina
- 175 -
ADVPL Compl et o
20.4. Ent endendo a i nf l unci a do escopo das var i v ei s
Consi der e as li nhas de cdi go de exempl o:
nResultado := 250 * (1 + (nPercentual / 100))
Se est a l inha for execut ada em um programa ADVPL, ocorr er um err o de execuo com a mensagem "vari abl e does not exi st : nPercent ual ", poi s est a vari vel est sendo ut ili zada em uma expr esso de cl cul o sem t er si do decl arada. Para sol uci onar est e er ro, deve- se decl arar a vari vel previ ament e:
Nest e exempl o, as vari vei s so decl aradas pr evi ament e ut ilizando o i dent i fi cador de escopo local. Quando a li nha de cl cul o for execut ada, o er ro de vari vel no exi st ent e, no mai s ocor rer. Por m vari vei s no i ni ci alizadas t m sempr e o val or default nul o ( Nil ) e est e val or no pode ser ut ili zado em um cl cul o poi s t ambm gerar err os de execuo ( nul o no pode ser di vi dido por 100) . A resol uo dest e pr obl ema efet uada i nici ali zando- se a vari vel at ravs de uma das for mas:
A di ferena ent re o l t i mo exempl o e os doi s ant eri or es que a vari vel i ni ci ali zada no moment o da decl arao. Em ambos os exempl os, a vari vel pri mei ro decl arada e ent o i ni ci alizada em uma out ra l inha de cdi go.
aconsel hvel opt ar pel o operador de at ri bui o compost o de doi s pont os e si nal de i gual , poi s o operador de at ri bui o ut ilizando soment e o si nal de igual pode ser faci l ment e confundi do com o operador r el aci onal ( para comparao) durant e a cri ao do programa.
- 176 -
ADVPL Compl et o
21. Regr as adi ci onai s da l i nguagem ADVPL
21.1. Pal av r as r eser v adas
AADD DTOS I NKEY REPLI CATE VAL ABS ELSE I NT RLOCK VALTYPE ASC ELSEI F LASTREC ROUND WHI LE AT EMPTY LEN ROW WORD BOF ENDCASE LOCK RTRI M YEAR BREAK ENDDO LOG SECONDS CDOW ENDI F LOWER SELECT CHR EOF LTRI M SETPOS CMONTH EXP MAX SPACE COL FCOUNT MI N SQRT CTOD FI ELDNAME MONTH STR DATE FI LE PCOL SUBSTR DAY FLOCK PCOUNT TI ME DELETED FOUND PROCEDURE TRANSFORM DEVPOS FUNCTI ON PROW TRI M DOW I F RECCOUNT TYPE DTOC I I F RECNO UPPER TRY AS CATCH THROW
E Pal avras reservadas no podem ser ut i lizadas para vari vei s, procedi ment os ou funes;
E Funes r eservadas so pert encent es ao compi l ador e no podem ser redefi nidas por uma aplicao;
E Todos os i dent i fi cadores que comearem com doi s ou mai s caract eres _ so ut ili zados como i dent i fi cadores i nt ernos e so r eservados.
E I dent i fi cadores de escopo PRI VATE ou PUBLI C ut ili zados em apli caes especfi cas desenvol vida por ou para client es devem t er sua i dent i fi cao i ni ci ada por um caract ere _ .
- 177 -
ADVPL Compl et o
21.2. Pi ct ur es de f or mat ao di sponv ei s
Com base na document ao di sponvel no DEM Document ao El et r ni ca Mi crosi ga, a linguagem ADVPL e a apli cao ERP Prot heus admi t em as segui nt es pi ct ures:
Di ci onr i o de Dados ( SX3) e GET
Funes Cont edo Funci on al i dade A Per mi t e apenas caract er es al fabt i cos. C Exi be CR depoi s de nmer os posi t i vos. E Exi be numri co com o pont o e vrgul a i nvert i dos ( format o Eur opeu) . R I nser e caract eres di ferent es dos caract er es de t empl at e na exi bi o, mas no os i nsere na vari vel do GET. S< n> Per mi t e rol ament o hori zont al do t ext o dent ro do GET, < n> um nmer o i nt ei ro que i dent i fi ca o t amanho da regi o. X Exi be DB depoi s de nmer os negat i vos. Z Exi be zeros como br ancos. ( Exi be nmeros negat i vos ent re par nt eses com os espaos em branco i ni ci ai s. ) Exi be nmeros negat i vos ent re par nt eses sem os espaos em branco i ni ci ai s. ! Convert e caract er es al fabt i cos para mai scul o.
Templ at es Cont edo Funci on al i dade X Per mi t e qual quer caract er e. 9 Per mi t e apenas dgit os para qual quer t i po de dado, i nclui ndo o si nal para numri cos. # Per mi t e dgi t os, si nai s e espaos em branco par a qual quer t i po de dado. ! Convert e caract er es al fabt i cos para mai scul o. * Exi be um ast eri sco no lugar dos espaos em br anco i ni ci ai s em nmer os. . Exi be o pont o deci mal . , Exi be a posi o do mi l har.
Exemplo 02 Picture campo texto, com digitao apenas em caixa alta
A1_NOME Caracter - 40 Picture: @!
- 178 -
ADVPL Compl et o
22. Pr ogr amas de At ual i zao
Os pr ogramas de at ualizao de cadast ros e digi t ao de movi ment os seguem um padro que se api a no Di ci onri o de Dados.
Basi cament e so t r s os model os mai s ut ilizados:
E Model o 1 ou Ax Cadast r o: Para cadast rament os em t el a chei a. Exempl o: Cadast r o de Cli ent e.
E Model o 2 : Cadast rament os envol vendo apenas uma t abel a, mas com um cabeal ho e, opci onal ment e, um r odap e um corpo com quant i dade ili mi t ada de li nhas. I deal para casos em que h dados que se r epet em por vri os i t ens e que, por i sso, so col ocados no cabeal ho. Exempl o: Pedi do de Compra.
E Model o 3 : Cadast rament os envol vendo duas t abel as, um com dados de cabeal ho e out ro di gi t ado em l i nhas com os i t ens. Exempl o: Pedi do de Vendas, Orament o et c.
Todos os model os so genri cos, ou sej a, o programa i ndepende da t abel a a ser t rat ada, bast ando prat i cament e que se i nforme apenas o seu Ali as. O rest o obt i do do Di ci onri o de Dados ( SX3) .
- 179 -
ADVPL Compl et o
22.1. Model o1( ) ou Ax Cadast r o( )
O AxCadast r o( ) uma funci onali dade de cadast ro si mpl es, com poucas opes de cust omi zao, a qual compost a de:
Browse padro para vi sualizao das i nformaes da base de dados, de acordo com as confi guraes do SX3 Di ci onri o de Dados ( campo br owse) .
Funes de pesqui sa, vi sualizao, i ncl uso, al t erao e excl uso padr es para vi suali zao de regi st r os si mpl es, sem a opo de cabeal ho e i t ens.
E Si nt ax e: Ax Cadast r o( cAl i as, cTi t u l o, cVl dEx c, cVl dAl t )
E Par met r os:
cAl i as Ali as padro do si st ema para ut i lizao, o qual deve est ar defi ni do no di ci onri o de dados SX3. cTi t ul o Tt ul o da Janel a cVl dEx c Vali dao para Excl uso cVl dAl t Vali dao para Al t erao
Ex empl o: Funo Ax Cadast r o( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | XCADSA2 | Autor | ARNALDO RAYMUNDO JR. | Data | | +----------------------------------------------------------------------------- | Descrio | Exemplo de utilizao da funo AXCADASTRO() | |+---------------------------------------------------------------------------- | Uso | Curso ADVPL | |+---------------------------------------------------------------------------- /*/
User Function XCadSA2()
Local cAlias := "SA2" Local cTitulo := "Cadastro de Fornecedores" Local cVldExc := ".T." Local cVldAlt := ".T."
/*/ +------------------------------------------------------------------------------ | Funo | VLDALT | Autor | ARNALDO RAYMUNDO JR. | Data | | +------------------------------------------------------------------------------ | Descrio | Funo de validao de alterao para a AXCADASTRO() | +------------------------------------------------------------------------------ | Uso | Curso ADVPL | +------------------------------------------------------------------------------ /*/
User Function VldAlt(cAlias,nReg,nOpc)
Local lRet := .T. Local aArea := GetArea() Local nOpcao := 0
nOpcao := AxAltera(cAlias,nReg,nOpc)
If nOpcao == 1 MsgInfo(Aterao concluda com sucesso!) Endif
RestArea(aArea)
Return lRet
Ex empl o: Funo de v al i dao da ex cl u so
/*/ +------------------------------------------------------------------------------ | Funo | VLDEXC | Autor | ARNALDO RAYMUNDO JR. | Data | | +------------------------------------------------------------------------------ | Descrio | Funo de validao de excluso para a AXCADASTRO() | +------------------------------------------------------------------------------ | Uso | Curso ADVPL | +------------------------------------------------------------------------------ /*/
User Function VldExc(cAlias,nReg,nOpc)
Local lRet := .T. Local aArea := GetArea() Local nOpcao := 0
nOpcao := AxExclui(cAlias,nReg,nOpc)
If nOpcao == 1 MsgInfo(Excluso concluda com sucesso!) Endif
RestArea(aArea) Return lRet
- 181 -
ADVPL Compl et o
22.2. Model o2( )
O nome Model o 2 foi concei t uado pel a Mi crosi ga por se t r at ar de um prot t i po de t el a para ent rada de dados. I ni ci al ment e vamos desmi st i ficar doi s pont os:
O Funo Model o2( ) Trat a- se de uma funo pront a que cont empl a o prot t i po Model o 2, porm, est e um assunt o que no i remos t rat ar aqui , vi st o que uma funci onali dade simpl es que quando necessri o i nt ervi r em al go na rot i na no h mui t o recur so para t al .
O Pr ot t i po Model o 2 Trat a- se de uma t el a, como a fi gura abai xo, onde seu obj et i vo efet uar a manut eno em vri os regi st ros de uma s vez. Por exempl o: efet uar o movi ment o i nt erno de vr i os produt os do est oque em um ni co l ot e.
22.2.1. Component es de uma t el a no f or mat o Model o 2
Obj et o MsDi al og( )
Deve ser ut i lizada como j anel a padro para ent rada de dados, um t i po de obj et o modal , ou sej a, no permi t e que out ra j anel a at i va receba dados enquant o est a est i ver at i va.
- 182 -
ADVPL Compl et o
Toda vez que ut ili zar est e comando o ADVPL exi ge que sej a decl arado a di ret i va I ncl ude no cabeal ho do programa o arqui vo Pr ot heus. ch , i st o porque o compil ador preci sar porque est e comando t rat a- se de um pseudo cdi go e sua t raduo ser fei t a na compil ao. Val e l embrar t ambm que est e s ser aci onado depoi s que i nst anci ado e at i vado por out r o comando.
DEFINE MSDIALOG oDlg TITLE "Prottipo Modelo 2" FROM 0,0 TO 280,552 OF; oMainWnd PIXEL
ACTIVATE MSDIALOG oDlg CENTER
Repar em que o comando DEFI NE MSDI ALOG i nst anci ou e o comando ACTI VATE MSDI ALOG at i va t odos os obj et os, ou sej a, t odo ou qual quer out ro obj et o que preci sar col ocar nest a j anel a ser preci so i nfor mar em qual obj et o, para est e caso sempr e ser ut ilizada a vari vel de obj et o export vel oDl g.
Funo Enchoi ceBar ( )
Funo que cri a uma barra de bot es padro de Ok e Cancel ar, per mi t indo a i mpl ement ao de bot es adi ci onai s.
E Si nt ax e: ENCHOI CEBAR( oDl g, bOk , bCancel ar , [ l Men sApag ] , [ aBot oes ] )
E Par met r os:
oDl g Obj et o Janel a onde a barra ser cri ada. bOk Obj et o Bl oco de cdi go execut ado quando cl i cado bot o Ok. bCancel ar Obj et o Bl oco de cdi go execut ado quando cl i cado. l Men sApag Lgi co I ndi ca se ao cl i car no bot o Ok aparecer uma t el a de confi rmao de excl uso. Val or padro fal so. aBot es Vet or Vet or com i nformaes para cri ao de bot es adi ci onai s na barra. Seu format o { bi t map, bl oco de cdi go, mensagem} .
- 183 -
ADVPL Compl et o
Fi gu r a: Pr ot t i po Model o2 Enchoi ce
Obj et o TPanel ( )
Repar e que para faci lit ar o desenvol vi ment o foi ut ilizado o obj et o TPanel para aj udar o ali nhament o dos obj et os TSay e TGet , ou sej a, a ut ili zao dest e recur so per mi t e que o programador no se pr eocupe com coordenadas compl exas para dei xar a uni o dos obj et os si mt ri cos.
Ut ilize o obj et o TPanel quando desej ar cri ar um pai nel est t i co, onde podem ser cri ados out r os cont r ol es com o obj et i vo de organi zar ou agrupar component es vi suai s.
E Si nt ax e: TPanel ( ) : New ( [ anRow ] , [ anCol ] , [ acTex t ] , [ aoWnd] , [ aoFont ] , [ al Cent er ed] , [ l Par 6] , [ anCl r Tex t ] , [ anCl r Back ] , [ anWi dt h] , [ anHei ght ] , [ al Low er ed] , [ al Rai sed] )
E Par met r os:
nRow Numri co vert i cal em pixel . nCol Numri co hori zont al em pi xel . cTex t Text o a ser exi bi do ao fundo. oWnd Obj et o da j anel a ou cont rol e onde ser cri ado o obj et o. oFont Caract erst i cas da font e do t ext o que aparecer ao fundo. l Cent er ed Exi be o t ext o do t t ul o cent ral izado. l Par 6 Reser vado. nCl r Tex t Cor do t ext o de cont r ol e. nCl r Back Cor do fundo de cont r ole. nWi dt h Largura do cont rol e em pi xel . nHei ght Al t ura do cont r ol e em pixel . l Low er ed Exi be o pai nel rebai xado em r el ao ao cont r ol e de fundo. l Rai sed Exi be a borda do cont r ol e rebai xado em rel ao ao cont r ol e de fundo.
- 184 -
ADVPL Compl et o
Comando SAY - Obj et o: TSay ( )
O comando SAY ou obj et o TSay exi be o cont edo de t ext o est t i co sobr e uma j anel a.
E Si nt ax e SAY:
@ 4,6 SAY " Cdi go: " SI ZE 70, 7 PI XEL OF oTPanel 1
E Si nt ax e TSay ( ) : TSay ( ) : New ( [ anRow ] , [ an Col ] , [ abTex t ] , [ aoWnd] , [ acPi ct ur e] , [ aoFont ] , [ l Par 7] , [ l Par 8] , [ l Par 9] , [ al Pi x el s] , [ an Cl r Tex t ] , [ anCl r Back ] , [ anWi dt h ] , [ an Hei ght ] , [ l Par 15] , [ l Par 1 6] , [ l Par 17 ] , [ l Par 18] , [ l Par 1 9] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou caract eres. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. abTex t Code- Bl ock, opci onal . Quando execut ado deve r et ornar uma cadei a de caract eres a ser exi bi da. aoWn d Obj et o, opci onal . Janel a ou di l ogo onde o cont r ol e ser cri ado. acPi ct ur e Caract er e, opci onal . Pi ct ure de format ao do cont edo a ser exi bi do. aoFont Obj et o, opci onal . Obj et o t i po t Font para confi gurao do t i po de font e que ser ut ili zado para exi bi r o cont edo. l Par 7 Reser vado. l Par 8 Reser vado. l Par 9 Reser vado. al Pi x el s Lgi co, opci onal . Se . T. consi dera coordenadas passadas em pi xel s se .F. , padro, consi dera as coordenadas passadas em caract eres. anCl r Tex t Numri co, opci onal . Cor do cont edo do cont rol e. anCl r Back Numri co, opci onal . Cor do fundo do cont rol e. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. l Par 15 Reser vado. l Par 16 Reser vado. l Par 17 Reser vado. l Par 18 Reser vado. l Par 19 Reser vado.
- 185 -
ADVPL Compl et o
Comando MSGET - Obj et o: TGet ( )
O comando MsGet ou o obj et o TGet ut i lizado para cri ar um cont rol e que armazene ou al t ere o cont edo de uma vari vel at ravs de di gi t ao. O cont edo da vari vel s modi fi cado quando o cont r ol e perde o foco de edi o para out ro cont rol e.
E Si nt ax e MSGET:
@ 3,1 92 MSGET dDat a PI CTURE " 9 9/ 9 9/ 9 9" SI ZE 40 ,7 PI XEL OF oTPanel 1
E Si nt ax e TGet ( ) : New ( [ anRow ] , [ anCol ] , [ abSet Get ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] , [ acPi ct ] , [ abVal i d] , [ an Cl r For e] , [ an Cl r Back ] , [ aoFont ] , [ l Par 12 ] , [ oPar 1 3] , [ al Pi x el ] , [ cPar 15 ] , [ l Par 1 6] , [ abWh en] , [ l Par 1 8] , [ l Par 19 ] , [ abCh an ge] , [ al ReadOn l y ] , [ al Passw or d] , [ cPar 2 3] , [ acReadVar ] , [ cPar 25 ] , [ l Par 26 ] , [ nPar 2 7] , [ l Par 28] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou caract eres. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. abSet Get Bl oco de cdi go, opci onal . Bl oco de cdi go no format o { | u| I F( Pcount ( ) > 0, < var> : = u, < var > ) } que o cont rol e ut ili za para at ualizar a vari vel < var> . < var> deve ser t i po caract er, numri co ou dat a. aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e ser cri ado. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. acPi ct Caract er e, opci onal . Mscar a de format ao do cont edo a ser exi bi do. abVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vli do e .F. quando o cont edo for i nvli do. anCl r For e Numri co, opci onal . Cor de fundo do cont rol e. anCl r Back Numri co, opci onal . Cor do t ext o do cont rol e. aoFont Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as caract erst i cas da font e ut ili zada para exi bi r o cont edo do cont r ol e. l Par 12 Reser vado. oPar 13 Reser vado. al Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. cPar 1 5 Reser vado. l Par 16 Reser vado. abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bloco deve r et ornar .T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Par 18 Reser vado.
- 186 -
ADVPL Compl et o
l Par 19 Reser vado. abChange Bl oco de cdi go, opci onal . Execut ado quando o cont r ol e modi fi ca o val or da vari vel associ ada. al ReadOnl y Lgi co, opci onal . Se . T. o cont r ol e no poder ser edi t ado. al Passw or d Lgi co, opci onal . Se . T. o cont r ol e exi bi r ast eri scos * no l ugar dos caract er es exibi dos pel o cont r ol e para si mul ar ent rada de senha. cPar 2 3 Reser vado. acReadVar Caract er e, opci onal . Nome da vari vel que o cont rol e dever mani pul ar, dever ser a mesma vari vel informada no parmet ro abSet Get , e ser o r et orno da funo ReadVar( ) . cPar 2 5 Reser vado. l Par 26 Reser vado. nPar 27 Reser vado. l Par 18 Reser vado.
Obj et o MsGet Dados( )
Obj et o t i po li st a com uma ou mai s col unas para cadast rament o de dados baseado em um vet or. Sua ut ili zao exi ge que sej a ut ilizado t rs vari vei s com seu escopo Pri vat e, so el as: aRot i na, aHeader e aCOLS.
E Obser v aes i mpor t ant es:
O O vet or aHeader deve ser const rudo com base no di ci onri o de dados. O O vet or aCOLS deve ser const rudo com base no vet or aHeader, por m deve- se cri ar uma col una adi ci onal para o cont r ole de excl uso do r egi st ro, ou sej a, quando o usuri o t ecl ar a t ecl a < DELETE> a linha fi car na cor ci nza e est a col una est ar com o seu val or i gual a verdadei ro ( .T.) . O Quando i nst anci ado est e obj et o possvel saber em que li nha o usuri o est porque o obj et o t r abal ha com uma vari vel de escopo Publi c denominada n , seu val or numri co e t er sempr e no cont edo a linha em que o usuri o encont ra- se com o cursor.
- 187 -
ADVPL Compl et o
E Si nt ax e: MSGETDADOS( ) : NEW( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a, nOpc, [ cLi nh aOk ] , [ cTudoOk ] , [ cI n i Cpos ] , [ l Apagar ] , [ aAl t er ] , , [ uPar 1 ] , [ l Vazi o ] , [ nMax ] , [ cCampoOk ] , [ cSuper Apagar ] , [ uPar 2 ] , [ cApagaOk ] , [ oWnd ] )
E Par met r os:
nSuper i or Di st anci a ent re a MsGet Dados e o ext remi dade superi or do obj et o que a cont m. nEsqu er da Di st anci a ent re a MsGet Dados e o ext remi dade esquerda do obj et o que a cont m. nI nf er i or Di st anci a ent re a MsGet Dados e o ext remi dade i nferi or do obj et o que a cont m. nDi r ei t a Di st anci a ent re a MsGet Dados e o ext remi dade di rei t a do obj et o que a cont m. nOpc Posi o do el ement o do vet or aRot i na que a MsGet Dados usar como referenci a. cLi nh aOk Funo execut ada para vali dar o cont ext o da l i nha at ual do aCol s. cTudoOk Funo execut ada para vali dar o cont ext o geral da MsGet Dados ( t odo aCol s) . cI ni Cpos Nome dos campos do t ipo caract er que ut i lizaro i ncrement o aut omt i co. Est e parmet r o deve ser no format o + < nome do pri mei ro campo> + < nome do segundo campo> + . .. . l Apagar Habili t a del et ar li nhas do aCol s. Val or padro fal so. aAl t er Vet or com os campos que podero ser al t erados. uPar 1 Parmet r o r eservado. l Vazi o Habili t a validao da primei ra col una do aCol s para est a no poder est ar vazi a. Val or padro fal so. nMax Nmer o mxi mo de l i nhas permi t idas. Val or padro 99. cCampoOk Funo execut ada na vali dao do campo. cSuper Apagar Funo execut ada quando pr essi onada as t ecl as < Ct rl > + < Del et e> . uPar 2 Parmet r o r eservado. cApagaOk Funo execut ada para vali dar a excl uso de uma li nha do aCol s. oWnd Obj et o no qual a MsGet Dados ser cri ada.
Var i v el Pr i v at e aRot i na
Array com as rot i nas que sero execut adas na MBr owse e que defi ni r o t i po de operao que est sendo execut ada, por exempl o: Pesqui sar, Vi suali zar, I ncl ui r, Al t erar, Excl ui r e out ros.
Est e vet or preci sa ser const rudo no format o:
El ement o Cont edo 1 Tt ul o da opo. 2 Nome da rot i na ( Funct i on) . 3 Reser vado. 4 Operao ( 1- Pesqui sar; 2- Vi sualizar; 3- I ncl ui r; 4- Al t erar; 5- Excl uso) . 5 Acesso r el aci onado a r ot i na, se est opo no for i nformada nenhum acesso ser val i dado.
- 188 -
ADVPL Compl et o
Var i v el Pr i v at e aHeader
Array com i nformaes das col unas, ou sej a, com as caract erst i cas dos campos que est o cont i das no di ci onri o de dados ( SX3) , est e vet or pr eci sa est ar no format o abai xo:
El ement o Cont edo 1 Tt ul o do campo 2 Nome do campo 3 Mscara do campo 4 Tamanho do campo 5 Deci mal do campo 6 Vali dao de usuri o do campo 7 Uso do campo 8 Ti po do campo ( caract er e, numri co, dat a e et c. ) 9 Prefi xo da t abel a 10 Cont ext o do campo ( real ou vi rt ual )
Var i v el Pr i v at e aCol s
Vet or com as l inhas a serem edi t adas. As col unas devem ser const r udas com base no vet or aHeader e mai s uma lt i ma coluna com o val or l gi co que det ermi na se a l i nha foi excl uda, i ni ci al ment e est a dever t er o seu cont edo i gual a fal so ( .F.) .
- 189 -
ADVPL Compl et o
22.2.2. Est r ut ur a de um pr ogr ama ut i l i zando a Model o2( )
O exempl o abai xo demonst ra a mont agem de um programa para a ut ili zao do prot t i po Model o 2. Ant es de i ni ciarmos o exempl o vamos est rut urar o pr ograma.
Est r ut u r a do pr ogr ama
Li nhas Pr ogr ama 1 Funo pr i nci pal ; 2 Declar ao e at r ibuio de variveis; 3 Acesso a t abela pr incipal e sua or dem; 4 Chamada da funo MBrowse; 5 Fi m da f uno pr i nci pal . 6 7 Funo de vi sual i zao, al t er ao e ex cl uso; 8 Declar ao e at r ibuio de variveis; 9 Acesso ao pr imeiro r egist r o da chave em que est posicionado na MBrowse; 10 Mont agem das var iveis est t icas em t ela; 11 Mont agem do vet or aHeader por meio do dicionr io de dados; 12 Mont agem do vet or aCOLS de t odos os regist ros r efer ent e a chave pr incipal em que est posicionado na MBr owse; 13 I nst ncia da MsDialog; 14 I nst ncia dos obj et os TSay e TGet ; 15 I nst ncia do obj et o MsGet Dados; 16 At ivar o obj et o pr incipal que o obj et o da j anela; 17 Se for oper ao difer ent e de visualizao e clicou no bot o OK; 18 A oper ao e de Alt er ao? 19 Chamar a funo par a alt er ar os dados; 20 Caso cont r r io 21 Chamar a funo par a excluir os dados; 22 Fi m da f uno de v i sual i zao, al t er ao e ex cl uso. 23 24 Funo de i ncl uso; 25 Declar ao e at r ibuio de variveis; 26 Mont agem das var iveis est t icas em t ela; 27 Mont agem do vet or aHeader por meio do dicionr io de dados; 28 Mont agem do vet or aCOLS com o seu cont edo confor me o inicializador padr o do campo ou vazio, pois t r at a- se de uma incluso; 29 I nst ncia da MsDialog; 30 I nst ncia dos obj et os TSay e TGet ; 31 I nst ncia do obj et o MsGet Dados; 32 At ivar o obj et o pr incipal que o obj et o da j anela; 33 Se clicou no bot o OK; 34 Chamar a funo par a incluir os dados; 35 Fi m da f uno de i ncl uso.
- 190 -
ADVPL Compl et o
Rot i n a pr i nci pal
#include "protheus.ch"
//+--------------------------------------------------------------------+ //| Rotina | xModelo2 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Funo exemplo do prottipo Modelo2. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ User Function xModelo2() Private cCadastro := "Prottipo Modelo 2" Private aRotina := {}
//+--------------------------------------------------------------------+ //| Rotina | Mod2aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para montar o vetor aCOLS. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ Static Function Mod2aCOLS( cAlias, nReg, nOpc ) Local aArea := GetArea() Local cChave := ZA3->ZA3_CODIGO Local nI := 0
AADD( aCOLS, Array( Len( aHeader ) + 1 ) ) For nI := 1 To Len( aHeader ) If aHeader[nI,10] == "V" aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.) Else aCOLS[Len(aCOLS),nI] := FieldGet(FieldPos(aHeader[nI,2])) Endif Next nI aCOLS[Len(aCOLS),Len(aHeader)+1] := .F. dbSkip() End Else AADD( aCOLS, Array( Len( aHeader ) + 1 ) ) For nI := 1 To Len( aHeader ) aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. ) Next nI aCOLS[1, GdFieldPos("ZA3_ITEM")] := "01" aCOLS[1, Len( aHeader )+1 ] := .F. Endif Restarea( aArea ) Return
Ef et i v ao da i ncl u so
//+--------------------------------------------------------------------+ //| Rotina | Mod2GrvI | Autor | Robson Luiz (rleg) | Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para gravar os dados na incluso. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ Static Function Mod2GrvI() Local aArea := GetArea() Local nI := 0 Local nX := 0
dbSelectArea("ZA3") dbSetOrder(1) For nI := 1 To Len( aCOLS ) If ! aCOLS[nI,Len(aHeader)+1] RecLock("ZA3",.T.) ZA3->ZA3_FILIAL := xFilial("ZA3") ZA3->ZA3_CODIGO := cCodigo ZA3->ZA3_DATA := dData For nX := 1 To Len( aHeader ) FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] ) Next nX MsUnLock() Endif Next nI
RestArea(aArea) Return
- 195 -
ADVPL Compl et o
Ef et i v ao da al t er ao
//+--------------------------------------------------------------------+ //| Rotina | Mod2GrvA | Autor | Robson Luiz (rleg) | Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para gravar os dados na alterao. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ Static Function Mod2GrvA() Local aArea := GetArea() Local nI := 0 Local nX := 0
dbSelectArea("ZA3") For nI := 1 To Len( aREG ) If nI <= Len( aREG ) dbGoTo( aREG[nI] ) RecLock("ZA3",.F.) If aCOLS[nI, Len(aHeader)+1] dbDelete() Endif Else RecLock("ZA3",.T.) Endif
If !aCOLS[nI, Len(aHeader)+1] ZA3->ZA3_FILIAL := xFilial("ZA3") ZA3->ZA3_CODIGO := cCodigo ZA3->ZA3_DATA := dData For nX := 1 To Len( aHeader ) FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] ) Next nX Endif MsUnLock() Next nI RestArea( aArea ) Return
- 196 -
ADVPL Compl et o
Ef et i v ao da ex cl uso
//+--------------------------------------------------------------------+ //| Rotina | Mod2GrvE | Autor | Robson Luiz (rleg) | Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para excluir os registros. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ Static Function Mod2GrvE() Local nI := 0
dbSelectArea("ZA3") For nI := 1 To Len( aCOLS ) dbGoTo(aREG[nI]) RecLock("ZA3",.F.) dbDelete() MsUnLock() Next nI Return
Funo aux i l i ar : Val i dao do cdi go do v endedor
//+--------------------------------------------------------------------+ //| Rotina | Mod2Vend | Autor | Robson Luiz (rleg) | Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para validar o cdigo do vendedor. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ Static Function Mod2Vend( cCodigo, cNome ) If ExistCpo("SA3",cCodigo) .And. ExistChav("ZA3",cCodigo) cNome := Posicione("SA3",1,xFilial("SA3")+cCodigo,"A3_NOME") Endif Return(!Empty(cNome))
Funo aux i l i ar : Val i dao do cdi go do cent r o de cust o n a mudana de l i nh a
//+--------------------------------------------------------------------+ //| Rotina | Mod2LOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para validar a linha de dados. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ User Function Mod2LOk() Local lRet := .T. Local cMensagem := "No ser permitido linhas sem o centro de custo." If !aCOLS[n, Len(aHeader)+1] If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")]) MsgAlert(cMensagem,cCadastro) lRet := .F. Endif Endif Return( lRet )
- 197 -
ADVPL Compl et o
Funo aux i l i ar : Val i dao do cdi go do cent r o de cust o par a t odas as l i nh as
//+--------------------------------------------------------------------+ //| Rotina | Mod2TOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para validar toda as linhas de dados. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+
User Function Mod2TOk() Local lRet := .T. Local nI := 0 Local cMensagem := "No ser permitido linhas sem o centro de custo."
For nI := 1 To Len( aCOLS ) If aCOLS[nI, Len(aHeader)+1] Loop Endif If !aCOLS[nI, Len(aHeader)+1] If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")]) MsgAlert(cMensagem,cCadastro) lRet := .F. Exit Endif Endif Next nI Return( lRet )
22.2.3. Funo Model o2( )
A funo Model o2( ) uma int erface pr - defi ni da pel a Mi crosi ga que i mpl ement a de forma padroni zada os compont es necessri os a mani pul ao de est rut uras de dados nas quai s o cabeal ho e os i t ens da i nformao compart i lham o mesmo r egi st ro fsico.
Seu obj et i vo at uar como um faci li t ador de codi fi cao, per mi t i ndo a ut ili zao dos r ecursos bsi cos dos segui nt es component es vi suai s:
O MsDi al og( ) O TGet ( ) O TSay ( ) O MsNew Get Dados( ) O Enchoi ceBar ( )
O A funo Model o2( ) no i mpl ement a as regras de vi suali zao, i ncl uso, al t erao e excl uso, como uma AxCadast ro( ) ou AxFunct i on( ) .
O A i ni ci ali zao das vari vei s Pri vat e ut i lizada nos cabeal hos e rodaps, bem como a i ni ci ali zao e gravao do aCol s devem ser r eal i zadas pel a rot i na que suport a a execuo da Model o2( ) .
O Da mesma forma, o Browse deve ser t rat ado por est a rot i na, sendo comum a Model o2( ) est ar vi ncul ada ao uso de uma MBr owse( ) .
- 198 -
ADVPL Compl et o
E Si nt ax e: Model o2( [ cTi t ul o] , [ aCab] , [ aRoda] , [ aGr i d] , [ nOpc] , [ cLi n haOk ] , [ cTudoOk ] )
E Par met r os:
cTi t ul o Tt ul o da j anel a aCab Array cont endo as i nformaes que sero exi bidas no cabeal ho na for ma de Enchoi ce( ) aCab[ n] [ 1] ( Caract er e) : = Nome da vari vel pri vat e que ser vi nculada ao campo da Enchoi ce( ) . aCab[ n] [ 2] ( Array) : = Array com as coordenadas do campo na t el a { Li nha, Col una} aCab[ n] [ 3] ( Caract ere) : = Tt ul o do campo na t el a aCab[ n] [ 4] ( Caract ere) : = Pi ct ure de format ao do get ( ) do campo. aCab[ n] [ 5] ( Caract ere) : = Funo de val i dao do get ( ) do campo. aCab[ n] [ 6] ( Caract ere) : = Nome da consul t a padro que ser execut ada para o campo vi a t ecl a F3 aCab[ n] [ 7] ( Lgi co) : = Se o campo est ar l i vre para di gi t ao.
aRoda Array cont endo as i nformaes que sero exi bidas no cabeal ho na for ma de Enchoi ce( ) , no mesmo format o que o aCab. aGr i d Array cont endo as coordenadas da Get Dados( ) na t el a. Padro : = { 44,5,118,315} nOpc Opo sel eci onada na MBr owse, ou que desej e ser passada para cont rol e da Model o2, aonde: 2 Vi suali zar 3 - I ncl ui r 4 - Al t erar 5 - Excl ui r cLi nh aOk Funo para val i dao da li nha na Get Dados( ) cTudoOk Funo para val i dao na confi rmao da t el a de i nt erface da Model o2( ) .
E Ret or no:
Lgi co I ndi ca se a t el a da i nt er face Model o2( ) foi confi rmada ou cancel ada pel o usuri o.
- 199 -
ADVPL Compl et o
Ex empl o: Ut i l i zao da Model o2( ) par a v i sual i zao do Cadast r o de Tabel as ( SX5 )
#include "protheus.ch"
//+--------------------------------------------------------------------+ //| Rotina | MBRW2SX5| Autor | ARNALDO RAYMUNDO JR. | Data |01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | UTILIZACAO DA MODELO2() PARA VISUALIZAO DO SX5. | //+--------------------------------------------------------------------+ //| Uso | CURSO DE ADVPL | //+--------------------------------------------------------------------+
USER FUNCTION MBrw2Sx5()
Local cAlias := "SX5"
Private cCadastro := "Arquivo de Tabelas" Private aRotina := {} Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar ExecBlock
//Local nUsado := 0 Local cTitulo := "Inclusao de itens - Arquivo de Tabelas" Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo 2 Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2 Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no modelo2 - Padrao: {44,5,118,315} // Linha Inicial - Coluna Inicial - +Qts Linhas - +Qts Colunas : {080,005,050,300} Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da Modelo 2 Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2 Local lRetMod2 := .F. // Retorno da funo Modelo2 - .T. Confirmou / .F. Cancelou Local nColuna := 0
aCols[1][Len(aHeader)+1] := .F. // Linha no deletada lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)
IF lRetMod2 //MsgInfo("Voc confirmou a operao","MBRW2SX5") For nLinha := 1 to len(aCols) // Campos de Cabealho Reclock("SX5",.T.) SX5->X5_FILIAL := cX5Filial SX5->X5_TABELA := cX5Tabela // Campos do aCols //SX5->X5_CHAVE := aCols[nLinha][1] //SX5->X5_DESCRI := aCols[nLinha][2] For nColuna := 1 to Len(aHeader) SX5->&(aHeader[nColuna][2]) := aCols[nLinha][nColuna] Next nColuna MsUnLock() Next nLinha ELSE MsgAlert("Voc cancelou a operao","MBRW2SX5") ENDIF Return
- 201 -
ADVPL Compl et o
22.3. Model o3( )
O nome Model o 3, assi m como a Model o 2 foi concei t uado pel a Mi crosi ga por se t rat ar de um prot t i po de t el a para ent rada de dados. I ni ci alment e vamos desmi st i fica doi s pont os:
O Funo Model o3( ) Trat a- se de uma funo pront a que cont empl a o prot t i po Model o 3, porm, est e um assunt o que no i remos t rat ar aqui , vi st o que uma funci onali dade simpl es que quando necessri o i nt ervi r em al go na rot i na no h mui t o recur so para t al .
O Pr ot t i po Model o 3 Trat a- se de uma t el a, como a fi gura abai xo, onde seu obj et i vo efet uar a manut eno em vri os regi st ros de uma s vez r el aci onada a out r o regi st r o de out ra t abel a, ou sej a, aqui t eremos o rel aci onament o de regi st ros pai e fi lho , ent o pr eci so se pr eocupar com est e r el acionament o. Por exempl o: efet uar a manut eno em um pedi do de vendas, onde t er um regi st ro em uma t abela referent e cabea do pedi do e out ra t abela com os regi st ros refer ent es aos i t ens dest e pedi do de vendas.
Para ganharmos t empo no ser apr esent ado aqui t oda a expl i cao e mont agens para a funo Enchoi ceBar , comando MsDi al og, Say e MsGet e para os vet ores aHeader e aCOLS, ent r et ant o t odos est es est aro na codi fi cao do cdi go font e. A fi gura abai xo most ra exat ament e o que a t el a prot t i po Model o 3:
Fi gu r a: Pr ot t i po Model o 3
- 202 -
ADVPL Compl et o
Est e pr ot t i po const i t udo de MsDi al og, Enchoi ceBar , Enchoi ce, MsGet Dados, Say e Get .
Di ant e dos expost os at o moment o houve um novo nome para ns, el e a funo Enchoi ce, o que ?
Funo Enchoi ce( ) Obj et o MsMGet ( )
A funo Enchoi ce ou o obj et o MsMGet so r ecur sos baseados no di ci onri o de dados para veri fi car campos obrigatrios, vali daes, gat i l hos, consul t a padro e et c. Assi m t ambm par a cri ar past as de cadast r os. Est es podem ser usados t ant o com vari vei s de memri as com o escopo Pri vat e como di ret ament e os campos da t abel a que se r efer e. A diferena entre a funo Enchoi ce e o obj et o MsMGet que a funo no ret orna o nome da vari vel de obj et o export vel cri ado.
A est rut ura par a mont ar um pr ograma com o prot t i po model o 3 semel hant e ao pr ot t i po model o 2, porm a di ferena real a ut ili zao da funo Enchoi ce ou o obj et o MsMGet , para est e document o i remos t rabal har com a funo.
E Si nt ax e: Ench oi ce( cAl i as, nReg, nOpc, aAc, cOpc, cTex t Ex cl u i , aAcho, aPos, aCpos, nNum, nCol Mens, cMen sagem, cTudOk , oObj , l Vi r t u al )
E Par met r os:
cAl i as Ali as do dados a ser em cadast rados. nReg Nmer o do regi st ro da t abel a a ser edi t ado. uPar 1 Parmet r o r eservado. uPar 2 Parmet r o r eservado. uPar 3 Parmet r o r eservado. aAcho Vet or com os campos que sero apresent ados pel a MsMGet . aPos Vet or com as coordenadas onde a MsMGet ser cri ada no for mat o { coord. superi or, coord. esquerda, coor d. di rei t a, coord. i nferi or} .Funo execut ada par a val i dar o cont ext o da linha at ual do aCol s. aCpos Vet or com os campos que podero ser al t erados. uPar 4 Parmet r o r eservado. Nome dos campos do t i po caract er que ut ili zaro i ncrement o aut omt i co. Est e parmet r o deve ser no for mat o + < nome do pr i mei ro campo> + < nome do segundo campo> + ... . uPar 5 Parmet r o r eservado. uPar 6 Parmet r o r eservado. uPar 7 Parmet r o r eservado. oWnd Obj et o no qual a MsMGet ser cri ada. uPar 8 Parmet r o r eservado. l Memor i a I ndi ca se ser usado vari vei s de memri a ou os campos da t abel a para cadast rament o dos dados. Val or padro fal so. l Col un a I ndi ca se a MsMGet ser apr esent ada com um obj et o por l inha ( uma col una) . Val or padro fal so. Parmet r o reser vado. uPar 9 Parmet r o r eservado. l SemPast as I ndi ca se no ser usado as Past as de Cadast ro na MsMGet . Funo execut ada para vali dar a excl uso de uma li nha do aCol s.
- 203 -
ADVPL Compl et o
Val e l embrar que ns programador es reapr ovei t amos mui t o o que j exi st e, i st o para si mpl esment e ganharmos t empo, e no caso da ut ili zao da funo Enchoi ce preci so cri ar as vari vei s de memri as que l evam o mesmo nome dos campos da t abel a em quest o. Por exempl o o campo A2_NOME da t abel a SA2 ( cadast r o de fornecedores) quando quer emos referenci ar o campo usa- se o prefi xo da t abel a e o campo em quest o, dest a forma:
SA2->A2_NOME
Agora quando queremos r efer enci ar a uma vari vel que est com o cont edo do mesmo campo cri amos out r o recurso, dest a forma:
M->A2_NOME
E para cri ar vari vei s com o nome do campo ut ili zamos um cdi go de bl oco ( code- bl ock) e mai s um l ao de l eit ura para at ri bui r val ores ini ci ai s a cada uma del a. Ent o fi ca assi m o procedi ment o:
Private bCampo := { |nField| Field(nField) }
E em out ro moment o aprovei t amos est vari vel bCampo para faci li t ar a at ri bui o, vej a o exempl o abai xo :
For nX := 1 To FCount() M->&( Eval( bCampo, nX ) ) := Atribuio inicial ou atribuio de valor Next nX
Ou sej a, fazer para t odos os campos, e a cada campo cri ar a vari vel com a at ri bui o ini cial ou at ri bui o de val or.
- 204 -
ADVPL Compl et o
22.3.1. Est r ut ur a de um pr ogr ama ut i l i zando a Model o3( )
O exempl o abai xo demonst ra a mont agem de um programa para a ut ili zao do prot t i po Model o 3. Ant es de i ni ciarmos o exempl o vamos est rut urar o pr ograma.
Est r ut u r a do pr ogr ama
Li nhas Pr ogr ama 1 Funo pr i nci pal ; 2 Declar ao e at r ibuio de variveis; 3 Acesso a t abela pr incipal e sua or dem; 4 Chamada da funo MBrowse; 5 Fi m da f uno pr i nci pal . 6 7 Funo de vi sual i zao, al t er ao e ex cl uso; 8 Declar ao e at r ibuio de variveis; 9 Acesso ao pr imeiro r egist r o da chave em que est posicionado na MBrowse; 10 Const r uo das var iveis de memr ia M- > ???; 11 Mont agem do vet or aHeader por meio do dicionr io de dados; 12 Mont agem do vet or aCOLS de t odos os r egist r os refer ent e a chave pr incipal em que est posicionado na MBr owse; 13 I nst ncia da MsDialog; 14 Execuo da funo Enchoice; 15 I nst ncia do obj et o MsGet Dados; 16 At ivar o obj et o pr incipal que o obj et o da j anela; 17 Se for oper ao difer ent e de visualizao e clicou no bot o OK; 18 A oper ao e de Alt er ao? 19 Chamar a funo par a alt er ar os dados; 20 Caso cont r r io 21 Chamar a funo par a excluir os dados; 22 Fi m da f uno de v i sual i zao, al t er ao e ex cl uso. 23 24 Funo de i ncl uso; 25 Declar ao e at r ibuio de variveis; 26 Const r uo das var iveis de memr ia M- > ???; 27 Mont agem do vet or aHeader por meio do dicionr io de dados; 28 Mont agem do vet or aCOLS com o seu cont edo confor me o inicializador padr o do campo ou vazio, pois t r at a- se de uma incluso; 29 I nst ncia da MsDialog; 30 I nst ncia dos obj et os TSay e TGet ; 31 I nst ncia do obj et o MsGet Dados; 32 At ivar o obj et o pr incipal que o obj et o da j anela; 33 Se clicou no bot o OK; 34 Chamar a funo par a incluir os dados; 35 Fi m da f uno de i ncl uso.
- 205 -
ADVPL Compl et o
Rot i n a pr i nci pal
//+--------------------------------------------------------------------+ //| Rotina | xModelo3 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Funo exemplo do prottipo Modelo3. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ #Include "Protheus.ch"
// Retorna a rea til das janelas Protheus aSize := MsAdvSize()
// Ser utilizado trs reas na janela // 1 - Enchoice, sendo 80 pontos pixel // 2 - MsGetDados, o que sobrar em pontos pixel para este objeto // 3 - Rodap que a prpria janela, sendo 15 pontos pixel AADD( aObj, { 100, 080, .T., .F. }) AADD( aObj, { 100, 100, .T., .T. }) AADD( aObj, { 100, 015, .T., .F. })
// Clculo automtico da dimenses dos objetos (altura/largura) em pixel aInfo := { aSize[1], aSize[2], aSize[3], aSize[4], 3, 3 } aPObj := MsObjSize( aInfo, aObj )
//+--------------------------------------------------------------------+ //| Rotina | Mod3Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para incluir dados. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ User Function Mod3Inc( cAlias, nReg, nOpc ) Local oDlg Local oGet Local nX := 0 Local nOpcA := 0
For nX := 1 To FCount() M->&( Eval( bCampo, nX ) ) := CriaVar( FieldName( nX ), .T. ) Next nX
Mod3aHeader() Mod3aCOLS( nOpc )
DEFINE MSDIALOG oDlg TITLE cCadastro FROM ; aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])
// Atualizao do nome do cliente @ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL @ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL
// Atualizao do total @ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL @ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal ; PICT "@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL
//+--------------------------------------------------------------------+ //| Rotina | Mod3Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para Visualizar, Alterar e Excluir dados. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ User Function Mod3Mnt( cAlias, nReg, nOpc ) Local oDlg Local oGet Local nX := 0 Local nOpcA := 0 Private aHeader := {} Private aCOLS := {} Private aGets := {} Private aTela := {} Private aREG := {}
dbSelectArea( cAlias ) dbSetOrder(1)
For nX := 1 To FCount() M->&( Eval( bCampo, nX ) ) := FieldGet( nX ) Next nX
Mod3aHeader() Mod3aCOLS( nOpc ) DEFINE MSDIALOG oDlg TITLE cCadastro FROM ; aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])
// Atualizao do nome do cliente @ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL @ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL
// Atualizao do total @ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL @ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal PICTURE ; "@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL
//+--------------------------------------------------------------------+ //| Rotina | Mod3aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para montar o vetor aCOLS. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ Static Function Mod3aCOLS( nOpc ) Local aArea := GetArea() Local cChave := "" Local cAlias := "ZA2" Local nI := 0
While !EOF() .And. ZA2->( ZA2_FILIAL + ZA2_NUM ) == xFilial( cAlias ) + cChave AADD( aREG, ZA2->( RecNo() ) ) AADD( aCOLS, Array( Len( aHeader ) + 1 ) ) For nI := 1 To Len( aHeader ) If aHeader[nI,10] == "V" aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.) Else aCOLS[Len(aCOLS),nI] := FieldGet(FieldPos(aHeader[nI,2])) Endif Next nI aCOLS[Len(aCOLS),Len(aHeader)+1] := .F. dbSkip() End Else AADD( aCOLS, Array( Len( aHeader ) + 1 ) ) For nI := 1 To Len( aHeader ) aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. ) Next nI aCOLS[1, GdFieldPos("ZA2_ITEM")] := "01" aCOLS[1, Len( aHeader )+1 ] := .F. Endif Restarea( aArea ) Return
Funo par a at r i bu i r o nome do cl i ent e a v ar i v el
//+--------------------------------------------------------------------+ //| Rotina | Mod3Cli | Autor | Robson Luiz (rleg) |Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para atualizar a varivel com o nome do cliente. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+
User Function Mod3Cli() cCliente := Posicione( "SA1", 1, xFilial("SA1") + M->(ZA1_CLIENT + ZA1_LOJA), "A1_NREDUZ" ) oCliente:Refresh() Return(.T.)
- 210 -
ADVPL Compl et o
Funo par a v al i dar a mudana de l i nh a n a MsGet Dados( )
//+--------------------------------------------------------------------+ //| Rotina | Mod3LOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para atualizar a varivel com o total dos itens. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ User Function Mod3LOk() Local nI := 0 nTotal := 0 For nI := 1 To Len( aCOLS ) If aCOLS[nI,Len(aHeader)+1] Loop Endif nTotal+=Round(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]*; aCOLS[nI,GdFieldPos("ZA2_PRCVEN")],2) Next nI oTotal:Refresh() Return(.T.)
Funo par a v al i dar se t odas as l i nh as est o pr eenchi das
//+--------------------------------------------------------------------+ //| Rotina | Mod3TOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para validar os itens se foram preenchidos. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ Static Function Mod3TOk() Local nI := 0 Local lRet := .T.
For nI := 1 To Len(aCOLS) If aCOLS[nI, Len(aHeader)+1] Loop Endif If Empty(aCOLS[nI,GdFieldPos("ZA2_PRODUT")]) .And. lRet MsgAlert("Campo PRODUTO preenchimento obrigatorio",cCadastro) lRet := .F. Endif If Empty(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]) .And. lRet MsgAlert("Campo QUANTIDADE preenchimento obrigatorio",cCadastro) lRet := .F. Endif If Empty(aCOLS[nI,GdFieldPos("ZA2_PRCVEN")]) .And. lRet MsgAlert("Campo PRECO UNITARIO preenchimento obrigatorio",cCadastro) lRet := .F. Endif
If !lRet Exit Endif Next i Return( lRet )
- 211 -
ADVPL Compl et o
Funo par a ef et u ar a gr av ao dos dados em ZA1 e ZA2 na i ncl u so, al t er ao e ex cl uso.
//+--------------------------------------------------------------------+ //| Rotina | Mod3Grv | Autor | Robson Luiz (rleg) |Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | Rotina para efetuar a gravao nas tabelas. | //+--------------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+--------------------------------------------------------------------+ Static Function Mod3Grv( nOpc, aAltera ) Local nX := 0 Local nI := 0
// Se for incluso If nOpc == 3 // Grava os itens dbSelectArea("ZA2") dbSetOrder(1) For nX := 1 To Len( aCOLS ) If !aCOLS[ nX, Len( aCOLS ) + 1 ] RecLock( "ZA2", .T. ) For nI := 1 To Len( aHeader ) FieldPut( FieldPos( Trim( aHeader[nI, 2] ) ), aCOLS[nX,nI] ) Next nI ZA2->ZA2_FILIAL := xFilial("ZA2") ZA2->ZA2_NUM := M->ZA1_NUM MsUnLock() Endif Next nX
// Grava o Cabealho dbSelectArea( "ZA1" ) RecLock( "ZA1", .T. ) For nX := 1 To FCount() If "FILIAL" $ FieldName( nX ) FieldPut( nX, xFilial( "ZA1" ) ) Else FieldPut( nX, M->&( Eval( bCampo, nX ) ) ) Endif Next nX MsUnLock() Endif
// Se for alterao If nOpc == 4 // Grava os itens conforme as alteraes dbSelectArea("ZA2") dbSetOrder(1) For nX := 1 To Len( aCOLS ) If nX <= Len( aREG ) dbGoto( aREG[nX] ) RecLock("ZA2",.F.) If aCOLS[ nX, Len( aHeader ) + 1 ] dbDelete() Endif Else
If !aCOLS[ nX, Len(aHeader)+1 ] For nI := 1 To Len( aHeader ) FieldPut( FieldPos( Trim( aHeader[ nI, 2] ) ),; aCOLS[ nX, nI ] ) Next nI ZA2->ZA2_FILIAL := xFilial("ZA2") ZA2->ZA2_NUM := M->ZA1_NUM Endif MsUnLock() Next nX
// Grava o Cabealho dbSelectArea("ZA1") RecLock( "ZA1", .F. ) For nX := 1 To FCount() If "FILIAL" $ FieldName( nX ) FieldPut( nX, xFilial("ZA1")) Else FieldPut( nX, M->&( Eval( bCampo, nX ) ) ) Endif Next MsUnLock() Endif
// Se for excluso If nOpc == 5 // Deleta os Itens dbSelectArea("ZA2") dbSetOrder(1) dbSeek(xFilial("ZA2") + M->ZA1_NUM) While !EOF() .And. ZA2->(ZA2_FILIAL + ZA2_NUM) == xFilial("ZA2") +; M->ZA1_NUM RecLock("ZA2") dbDelete() MsUnLock() dbSkip() End
// Deleta o Cabealho dbSelectArea("ZA1") RecLock("ZA1",.F.) dbDelete() MsUnLock() Endif Return
- 213 -
ADVPL Compl et o
22.3.2. Funo Model o3( )
A funo Model o3) uma i nt erface pr- defi ni da pel a Mi crosi ga que i mpl ement a de forma padroni zada os compont es necessri os a mani pul ao de est rut uras de dados nas quai s o cabeal ho e os i t ens da i nformao est o em t abel as separadas.
Seu obj et i vo at uar como um faci li t ador de codi fi cao, per mi t i ndo a ut ili zao dos r ecursos bsi cos dos segui nt es component es vi suai s:
O MsDi al og( ) O Enchoi ce( ) O Enchoi ceBar ( ) O MsNew Get Dados( )
O A funo Model o3( ) no i mpl ement a as regras de vi suali zao, i ncl uso, al t erao e excl uso, como uma AxCadast ro( ) ou AxFunct i on( ) .
O A i ni ci ali zao dos campos ut i lizados na Enchoi ce( ) deve ser r eali zadas pel a rot i na que suport a a execuo da Model o3( ) , normal ment e at ravs do uso da funo RegToMemor y( ) .
O Da mesma forma, o Browse deve ser t rat ado por est a rot i na, sendo comum a Model o3( ) est ar vi ncul ada ao uso de uma MBr owse( ) .
E Si nt ax e: Model o3 ( [ cTi t ul o] , [ cAl i asE] , [ cAl i asGet D] , [ aCposE] , [ cLi nOk ] , [ cTudOk ] , [ nOpcE] , [ nOpcG] , [ cFi el dOk ] )
E Par met r os:
cTi t ul o Tt ul o da j anel a cAl i asE Ali as da t abel a que ser ut ilizada na Enchoi ce cAl i asGet D Ali as da t abel a que ser ut ilizada na Get Dados aCposE Nome dos campos, pert encent es ao Al i as especi fi cado o parmet r o cAl i asE, que devero ser exi bi dos na Enchoi ce: AADD( aCposE,{ nome_campo } ) cLi nh aOk Funo para val i dao da li nha na Get Dados( ) cTudoOk Funo para val i dao na confi rmao da t el a de i nt erface da Model o2( ) . nOpcE Opo sel eci onada na MBrowse, ou que desej e ser passada para cont r ol e da Enchoi ce da Model o3, aonde: 2 Vi suali zar 3 - I ncl ui r 4 - Al t erar 5 - Excl ui r nOpcG Opo sel eci onada na MBrowse, ou que desej e ser passada para cont r ol e da Get Dados da Model o3, aonde: 2 Vi suali zar 3 - I ncl ui r 4 - Al t erar 5 - Excl ui r cFi el dOk Vali dao dos campos da Enchoi ce( )
- 214 -
ADVPL Compl et o
E Ret or no:
Lgi co I ndi ca se a t el a da i nt er face Model o2( ) foi confi rmada ou cancel ada pel o usuri o.
Ex empl o: Ut i l i zao da Model o3( ) par a Pedi dos de Ven das ( SC5, SC6)
#INCLUDE "protheus.ch"
//+--------------------------------------------------------------------+ //| Rotina | MBRWMOD3| Autor | ARNALDO RAYMUNDO JR. |Data | 01.01.2007 | //+--------------------------------------------------------------------+ //| Descr. | EXEMPLO DE UTILIZACAO DA MODELO3(). | //+--------------------------------------------------------------------+ //| Uso | CURSO DE ADVPL | //+--------------------------------------------------------------------+
User Function MbrwMod3()
Private cCadastro := "Pedidos de Venda" Private aRotina := {} Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar ExecBlock Private cAlias := "SC5"
Local cTitulo := "Cadastro de Pedidos de Venda" Local cAliasE := "SC5" Local cAliasG := "SC6" Local cLinOk := "AllwaysTrue()" Local cTudOk := "AllwaysTrue()" Local cFieldOk:= "AllwaysTrue()" Local aCposE := {} Local nUsado, nX := 0
- 215 -
ADVPL Compl et o
Exemplo (continuao):
// // Opcoes de acesso para a Modelo 3 // Do Case Case nOpcx==3; nOpcE:=3 ; nOpcG:=3 // 3 - "INCLUIR" Case nOpcx==4; nOpcE:=3 ; nOpcG:=3 // 4 - "ALTERAR" Case nOpcx==2; nOpcE:=2 ; nOpcG:=2 // 2 - "VISUALIZAR" Case nOpcx==5; nOpcE:=2 ; nOpcG:=2 // 5 - "EXCLUIR" EndCase
// // Cria variaveis M->????? da Enchoice // RegToMemory("SC5",(nOpcx==3 .or. nOpcx==4 )) // Se for inclusao ou alteracao permite alterar o conteudo das variaveis de memoria
// // Cria aHeader e aCols da GetDados // nUsado:=0 dbSelectArea("SX3") dbSeek("SC6") aHeader:={} While !Eof().And.(x3_arquivo=="SC6") If Alltrim(x3_campo)=="C6_ITEM" dbSkip() Loop Endif If X3USO(x3_usado).And.cNivel>=x3_nivel nUsado:=nUsado+1 Aadd(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,; x3_tamanho, x3_decimal,"AllwaysTrue()",; x3_usado, x3_tipo, x3_arquivo, x3_context } ) Endif dbSkip() End
If nOpcx==3 // Incluir aCols:={Array(nUsado+1)} aCols[1,nUsado+1]:=.F. For nX:=1 to nUsado aCols[1,nX]:=CriaVar(aHeader[nX,2]) Next Else aCols:={} dbSelectArea("SC6") dbSetOrder(1) dbSeek(xFilial()+M->C5_NUM) While !eof().and.C6_NUM==M->C5_NUM AADD(aCols,Array(nUsado+1)) For nX:=1 to nUsado aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2])) Next aCols[Len(aCols),nUsado+1]:=.F. dbSkip() End Endif
- 216 -
ADVPL Compl et o
Exemplo (continuao):
If Len(aCols)>0 // // Executa a Modelo 3 // aCposE := {"C5_CLIENTE"}
A Mbrowse( ) uma funci onali dade de cadast ro que permi t e a ut ilizao de r ecursos mai s apri morados na vi suali zao e mani pul ao das i nformaes do si st ema, possui ndo os segui nt es component es:
Browse padro para vi sualizao das i nformaes da base de dados, de acordo com as confi guraes do SX3 Di ci onri o de Dados ( campo br owse) .
Paramet ri zao para funes especfi cas para as aes de vi sualizao, i ncluso, al t erao e excl uso de i nformaes, o que vi abiliza a manut eno de i nformaes com est rut ura de cabeal hos e i t ens.
Recur sos adi ci onai s como i dent i fi cador es de st at us de regi st ros, l egendas e fil t ros para as i nformaes.
E Si nt ax e: MBr ow se( n Li n1, nCol 1, nLi n2 , nCol 2, cAl i as, aFi x e, cCpo, nPar 08, cFun, nCl i ck Def , aCol or s, cTopFun, cBot Fun, nPar 14, bI n i t Bl oc, l NoMnuFi l t er , l SeeAl l , l ChgAl l )
E Par met r os:
nLi n 1 Nmer o da Li nha I ni ci al nCol 1 Nmer o da Col una I ni cial nLi n 2 Nmer o da Li nha Fi nal nCol 2 Nmer o da Col una Final cAl i as Ali as do arqui vo que ser vi sualizado no br owse. Para ut i lizar a funo MBrowse com arqui vos de t rabal ho, o al i as do arqui vo de t rabal ho deve ser obri gat ori ament e ' TRB' e o par met ro aFi xe t orna- se obri gat r i o. aFi x e Array bi - di mensi onal cont endo os nomes dos campos fi xos pr- defi ni dos, obri gando a exi bi o de uma ou mai s col unas ou a defi ni o das col unas quando a funo ut ili zada com ar qui vos de t rabal ho. A est rut ura do ar ray di ferent e para arqui vos que fazem part e do di ci onri o de dados e para arqui vos de t rabal ho.
Arqui vos que fazem par t e do di ci onri os de dados
[ n] [ 1] = > Descri o do campo [ n] [ 2] = > Nome do campo
Arqui vos de t rabal ho
[ n] [ 1] = > Descri o do campo [ n] [ 2] = > Nome do campo [ n] [ 3] = > Ti po [ n] [ 4] = > Tamanho [ n] [ 5] = > Deci mal [ n] [ 6] = > Pi ct ure
- 218 -
ADVPL Compl et o
E Par met r os:
cCpo Campo a ser val idado se est vazi o ou no par a exi bi o do bi t map de st at us. Quando esse par met r o ut ili zado, a pri mei ra col una do br owse ser um bi t map i ndi cando o st at us do regi st r o, conforme as condi es confi guradas nos par met r os cCpo, cFu n e aCol or s. nPar 08 Parmet r o r eservado. cFun Funo que r et ornar um val or l gi co para exi bi o do bi t map de st at us. Quando esse parmet r o ut i lizado, o parmet r o cCpo aut omat i cament e desconsi derado. nCl i ck Def Nmer o da opo do aRot i na que ser execut ada quando for efet uado um dupl o cli que em um regi st ro do br owse. O defaul t execut ar a rot i na de vi suali zao. aCol or s Array bi - di mensi onal para possi bili t ar o uso de di ferent es bi t maps de st at us. [ n] [ 1] = > Funo que r et ornar um val or l gi co para a exi bi o do bi t map [ n] [ 2] = > Nome do bi t map que ser exi bi do quando a funo ret ornar .T. ( True) . O nome do bi t map deve ser um r esource do reposi t ri o e quando esse parmet ro ut ili zado os parmet r os cCpo e cFun so aut omat i cament e desconsi derados. cTopFun Funo que r et orna o limi t e superi or do fi l t ro baseado na chave de ndi ce sel eci onada. Esse parmet r o deve ser ut ili zado em conj unt o com o parmet r o cBot Fu n. cBot Fu n Funo que r et orna o limi t e inferi or do fi l t ro baseado na chave de ndi ce sel eci onada. Esse parmet r o deve ser ut ili zado em conj unt o com o parmet r o cTopFun. nPar 14 Parmet r o r eservado. bI n i t Bl oc Bl oco de cdi go que ser execut ado no ON I NI T da j anel a do br owse. O bl oco de cdi go receber como parmet r o o obj et o da j anel a do browse. l NoMnuFi l t er Val or l gi co que defi ne se a opo de fil t ro ser exi bi da no menu da MBr owse. .T. = > No exi be a opo no menu .F. = > ( defaul t ) Exi be a opo no menu. A opo de fi l t ro na MBr owse est di sponvel apenas para TopConnect . l SeeAl l I dent i fi ca se o Br owse dever most rar t odas as fili ai s. O val or defaul t .F. ( Fal se ) , no most ra t odas as fi liai s. Caso os parmet ros cTopFun ou cBot Fu n sej am i nfor mados esse parmet r o ser confi gurado aut omat i cament e para .F. ( Fal se ) Parmet r o vl i do part ir da v er so 8.1 1. A funo Set Br w SeeAl l muda o val or defaul t desse parmet r o. l ChgAl l I dent i fi ca se o regi st r o de out ra fi li al est aut or i zado para al t eraes. O val or defaul t .F. ( Fal se ) , no permi t e al t erar r egi st ros de out ras fili ai s. Quando esse par met r o est confi gurado para .T. ( True ) , o parmet ro l SeeAl l confi gurado aut omat i cament e para . T. ( True ) . Caso os parmet ros cTopFun ou cBot Fun sej am i nformados esse parmet ro ser confi gurado aut omat i cament e para .F. ( Fal se ) . Parmet r o vl i do part ir da v er so 8.1 1. A funo Set Br w ChgAl l muda o val or defaul t desse parmet r o.
- 219 -
ADVPL Compl et o
E Var i v ei s pr i v at e adi ci on ai s
aRot i n a Array cont endo as funes que sero execut adas pel a Mbrowse, nel e ser defi ni do o t i po de operao a ser execut ada ( incl uso, al t erao, excl uso, vi suali zao, pesqui sa, et c. ) , e sua est rut ura compost a de 5 ( ci nco) di menses:
[ n] [ 1] - Tt ul o; [ n] [ 2] Rot i na; [ n] [ 3] Reservado; [ n] [ 4] Operao ( 1 - pesqui sa; 2 - vi suali zao; 3 - i ncl uso; 4 - al t erao; 5 - excl uso) ;
El e ai nda pode ser paramet ri zado com as funes bsi cas da AxCadast r o conforme abai xo:
AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} ) AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} ) AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui ",0,3} ) AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} ) AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} ) cCadast r o Tt ul o do browse que ser exi bido.
E I nf or maes passadas par a f unes do aRot i n a:
Ao defi ni r as funes no ar ray aRot i na, se o nome da funo no for especi fi cado com ( ) , a Mbrowse passar como parmet ros as segui nt es vari vei s de cont r ol e:
cAl i as Nome da rea de t rabal ho defi ni da para a Mbr owse nReg Recno do r egi st ro posi cionado no Br owse nOpc Posi o da opo ut ili zada na Mbr owse de acor do com a ordem da funo no ar ray a Rot i na.
A posi o das funes no array aRot i na defi ne o cont edo de uma vari vel de cont r ol e que ser repassada para as funes chamadas a part i r da Mbrowse, convenci onada como nOpc. Dest a forma, para mant er o padro da apli cao ERP a ordem a ser segui da na defi ni o do aRot i na :
1. Pesqui sar 2. Vi suali zar 3. I ncl ui r 4. Al t erar 5. Excl ui r 6. Li vre
- 220 -
ADVPL Compl et o
Ex empl o: Funo Mbr ow se( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | | +----------------------------------------------------------------------------- | Descrio | Exemplo de utilizao da funo MBROWSE() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function MBrwSA1()
Local cAlias := "SA1" Private cCadastro := "Cadastro de Clientes" Private aRotina := {}
Ex empl o: Funo I ncl ui ( ) subst i t u i ndo a f u no Ax I ncl ui ( ) Fun o I ncl u i ( )
/*/ +----------------------------------------------------------------------------- | Funo | INCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | | +----------------------------------------------------------------------------- | Descrio | Funo de incluso especfica chamando a AXINCLUI() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function Inclui(cAlias, nReg, nOpc)
Local cTudoOk := "(Alert('OK'),.T.)" Local nOpcao := 0
nOpcao := AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)
If nOpcao == 1 MsgInfo(Incluso concluda com sucesso!) ElseIf == 2 MsgInfo(Incluso cancelada!) Endif
Return Nil
- 222 -
ADVPL Compl et o
Ex empl o: Det er mi n an do a opo do aRot i n a pel a i nf or mao r ecebi da em nOpc
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | EXCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | | +----------------------------------------------------------------------------- | Descrio | Funo de excluso especifica chamando a AxDeleta | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function Exclui(cAlias, nReg, nOpc)
Local cTudoOk := "(Alert('OK'),.T.)" Local nOpcao := 0
nOpcao := AxDeleta(cAlias,nReg,aRotina[nOpc,4]) // Identifica corretamente a opo definida para o funo em aRotinas com mais // do que os 5 elementos padres.
If nOpcao == 1 MsgInfo(Excluso realizada com sucesso!) ElseIf == 2 MsgInfo(Excluso cancelada!) Endif
Return Nil
22.4.1. Ax Funct i ons( )
Conforme menci onado nos t pi cos sobre as i nt erfaces padres AxCadast ro( ) e Mbr owse( ) , exi st em funes padr es da apli cao ERP que permi t em a vi suali zao, i ncl uso, al t erao e excl uso de dados em format o si mpl es.
Est as funes so padres na defi ni o da i nt erface AxCadast ro( ) e podem ser ut i lizadas t ambm da const ruo no array aRot i na ut ilizado pel a Mbr owse( ) , as quai s est o l i st adas a segui r:
Si nt ax e AXPESQUI ( ) Descr i o Funo de pesqui sa padro em r egi st ros exi bi dos pel os br owses do si st ema, a qual posi ci ona o br owse no regi st ro pesqui sado. Exi be uma t el a que permi t e a sel eo do ndi ce a ser ut i lizado na pesqui sa e a di gi t ao das i nformaes que compe a chave de busca.
AXVI SUAL( )
Si nt ax e AXVI SUAL( cAl i as, n Reg, nOpc, aAch o, nCol Men s, cMensagem, cFunc, ; aBut t ons, l Max i mi zed ) Descr i o Funo de vi suali zao padro das i nformaes de um regi st r o, no for mat o Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .
AXI NCLUI ( )
Si nt ax e Ax I ncl u i ( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ; cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed) Descr i o Funo de i ncl uso padr o das i nformaes de um regi st r o, no format o Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .
AXALTERA( )
Si nt ax e Ax Al t er a( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ; cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed) Descr i o Funo de al t erao padro das i nformaes de um regi st ro, no format o Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .
AXDELETA( )
Si nt ax e AXDELETA( cAl i as, nReg, nOpc, cTr ansact , aCpos, aBut t ons, aPar am, ; aAut o, l Max i mi zed) Descr i o Funo de excl uso padro das i nformaes de um regi st r o, no format o Enchoi ce, conforme demonst rado no t pi co sobre a i nt erface AxCadast ro( ) .
- 224 -
ADVPL Compl et o
22.4.2. Fi l Br ow se( )
A Fil Browse( ) uma funci onalidade que permi t e a ut ili zao de fi l t ros na MBr owse( ) .
E Si nt ax e: Fi l Br ow se( cAl i as, aQu er y , cFi l t r o, l Show Pr oc)
E Par met r os:
cAl i as Ali as at i vo defi ni do para a Mbr owse( ) aQuer y Est e parmet ro dever ser i ni ci alizado sempre vazi o e sua passagem obri gat ori ament e por r efernci a, poi s, seu r et or no ser envi ado para a funo EndFil Brw( ) .
[ 1] = > Nome do Arqui vo Fsi co [ 2] = > Ordem corr espondent e ao Si ndex cFi l t r o Condi o de fi lt ro para a MBr owse( ) l Show Pr oc
Habili t a ( .T.) ou desabi li t a ( .F.) a apresent ao da mensagem Sel eci onando r egi st ros ... , no pr ocessament o.
22.4.3. EndFi l Br w ( )
A EndFil Brw( ) uma funci onali dade que per mi t e eli minar o fil t ro e o arqui vo t emporri o cri ados pel a Fil Browse( ) .
E Si nt ax e: EndFi l Br w ( cAl i as, aQu er y )
E Par met r os:
cAl i as Ali as at i vo defi ni do para a Mbr owse( ) aQuer y Array de r et orno passado por refer nci a para a Fil Browse( ) .
[ 1] = > Nome do Arqui vo Fsi co [ 2] = > Ordem corr espondent e ao Si ndex
- 225 -
ADVPL Compl et o
22.4.4. PesqBr w ( )
A PesqBrw( ) uma funci onalidade que permi t e a pesqui sa dent r o da MBr owse( ) . Est a funo dever obri gat ori ament e subst i t ui r a funo AxPesqui , no array do aRot i na, sempr e que for ut ili zada a funo Fil Browse( ) .
E Si nt ax e: PesqBr w ( cAl i as , nReg, bBr w Fi l t er )
E Par met r os:
cAl i as Ali as at i vo defi ni do para a Mbr owse( ) nReg Nmer o do regi st ro bBr w Fi l t er Bl oco de Cdi go que cont m a Fi l Browse( )
Ex: bBrwFi lt er : = { | | Fil Browse( cAli as, aQuery, cFil t ro, l ShowPr oc) }
22.4.5. Br w Legenda ( )
A BrwLegenda( ) uma funci onali dade que per mi t e a i ncl uso de l egendas na MBrowse( ) .
E Si nt ax e: Br w Legenda( cCadast r o , cTi t u l o, aLegenda)
E Par met r os:
cCadast r o Mesma vari vel ut ili zada para a MBrowse, que ident i fi ca o cadast r o que est em uso no moment o cTi t ul o Tt ul o ( i dent i fi cao) da Legenda aLegenda
Array cont endo de defi ni o da cor e do t ext o, expli cat i vo sobr e o que el a represent a na MBr owse
Ex: { { Cor , Text o } }
Li st a de cor es di spon v ei s n o Pr ot heus
O BR_AMARELO O BR_AZUL O BR_BRANCO O BR_CI NZA O BR_LARANJA O BR_MARRON O BR_VERDE O BR_VERMELHO O BR_PI NK O BR_PRETO
- 226 -
ADVPL Compl et o
Ex empl o: Mbr ow se( ) ut i l i zando as f unes acessr i as
#Include "Protheus.ch"
/*/ +----------------------------------------------------------------------------- | Programa | MBrwSA2 | Autor | SERGIO FUZINAKA | Data | | +----------------------------------------------------------------------------- | Descrio | Exemplo da MBrowse utilizando a tabela de Cadastro de | | | Fornecedores | +----------------------------------------------------------------------------- | Uso | Curso de ADVPL | +----------------------------------------------------------------------------- /*/
User Function MBrwSA2()
Local cAlias := "SA2" Local aCores := {} Local cFiltra := "A2_FILIAL == '"+xFilial('SA2')+"' .And. A2_EST == 'SP'"
//+------------------------------------------------------------ //| Cria o filtro na MBrowse utilizando a funo FilBrowse //+------------------------------------------------------------ Eval(bFiltraBrw)
//+------------------------------------------------ //| Deleta o filtro utilizado na funo FilBrowse //+------------------------------------------------ EndFilBrw(cAlias,aIndexSA2)
Return Nil
//+--------------------------------------- //|Funo: BInclui - Rotina de Incluso //+--------------------------------------- User Function BInclui(cAlias,nReg,nOpc)
Local nOpcao := 0
nOpcao := AxInclui(cAlias,nReg,nOpc)
If nOpcao == 1 MsgInfo("Incluso efetuada com sucesso!") Else MsgInfo("Incluso cancelada!") Endif
Return Nil
//+----------------------------------------- //|Funo: BAltera - Rotina de Alterao //+----------------------------------------- User Function BAltera(cAlias,nReg,nOpc)
Local nOpcao := 0
nOpcao := AxAltera(cAlias,nReg,nOpc)
If nOpcao == 1 MsgInfo("Alterao efetuada com sucesso!") Else MsgInfo("Alterao cancelada!") Endif
Return Nil
- 228 -
ADVPL Compl et o
Exemplo (continuao):
//+----------------------------------------- //|Funo: BDeleta - Rotina de Excluso //+----------------------------------------- User Function BDeleta(cAlias,nReg,nOpc)
Local nOpcao := 0
nOpcao := AxDeleta(cAlias,nReg,nOpc)
If nOpcao == 1 MsgInfo("Excluso efetuada com sucesso!") Else MsgInfo("Excluso cancelada!") Endif
Return Nil
//+------------------------------------------- //|Funo: BLegenda - Rotina de Legenda //+------------------------------------------- User Function BLegenda()
A funo MarkBrow( ) permi t e que os el ement os de um br owse, sej am mar cados ou desmarcados. Para ut ilizao da MarkBrow( ) necessri o decl arar as vari vei s cCadast ro e aRot i na como Pri vat e, ant es da chamada da funo.
E Si nt ax e: Mar k Br ow ( cAl i as, cCampo, cCpo, aCampos, l I nv er t , cMar ca, cCt r l M, uPar 8, cEx pI n i , cEx pFi m, cAv al , bPar Bl oco)
E Par met r os:
cAl i as Ali as at i vo defi ni do para a Mbr owse( ) cCampo Campo do arqui vo onde ser fei t o o cont rol e ( gravao) da mar ca. cCpo Campo onde ser fei t a a vali dao para mar cao e exi bi o do bi t map de st at us. aCampos Vet or de col unas a ser em exi bi das no browse, deve cont er as segui nt es di menses:
[ n] [ 1] nome do campo; [ n] [ 2] - Nul o ( Nil ) ; [ n] [ 3] - Tt ul o do campo; [ n] [ 4] - Mscara ( pi ct ure) . l I n v er t I nvert e a mar cao. cMar ca St ri ng a ser gravada no campo especi fi cado par a marcao. cCt r l M Funo a ser execut ada caso desej e marcar t odos el ement os. uPar 8 Parmet r o r eservado. cEx pI ni Funo que r et orna o cont edo i ni ci al do filt ro baseada na chave de ndi ce sel eci onada. cEx pFi m Funo que r et orna o cont edo fi nal do fil t ro baseada na chave de ndi ce sel eci onada. cAv al Funo a ser execut ada no dupl o cli que em um el ement o no br owse. bPar Bl oco Bl oco de cdi go a ser execut ado na i ni ci ali zao da j anel a
E I nf or maes passadas par a f unes do aRot i n a:
Ao defi ni r as funes no ar ray aRot i na, se o nome da funo no for especi fi cado com ( ) , a MarkBrowse passar como par met ros as seguint es vari vei s de cont r ol e:
cAl i as Nome da rea de t rabal ho defi ni da para a Mbr owse nReg Recno do r egi st ro posi cionado no Br owse nOpc Posi o da opo ut ili zada na Mbr owse de acor do com a ordem da funo no ar ray a Rot i na. cMar ca Marca em uso pel a Mar kBrw( ) l I n v er t e I ndi ca se foi ut ili zada a inver so da sel eo dos i t ens no br owse.
- 230 -
ADVPL Compl et o
Ex empl o: Funo Mar k Br ow ( ) e acessr i as
#include "protheus.ch" /*/ +----------------------------------------------------------------------------- | Programa | MkBrwSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | | +----------------------------------------------------------------------------- | Desc. | MarkBrowse Genrico | +----------------------------------------------------------------------------- | Uso | Curso de ADVPL | +----------------------------------------------------------------------------- /*/
USER FUNCTION MkBrwSA1()
Local aCpos := {} Local aCampos := {} Local nI := 0 Local cAlias := "SA1"
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
Ex empl o: Funo Vi sLot e( ) ut i l i zao das f unes acessr i as da Mar k Br ow ( )
/*/ +----------------------------------------------------------------------------- | Programa | VisLote() | Autor | ARNALDO RAYMUNDO JR. | Data | | +----------------------------------------------------------------------------- | Desc. | Funo utilizada para demonstrar o uso do recurso da MarkBrowse| +----------------------------------------------------------------------------- | Uso | Curso de ADVPL | +----------------------------------------------------------------------------- /*/ USER FUNCTION VisLote() Local cMarca := ThisMark() Local nX := 0 Local lInvert := ThisInv() Local cTexto := "" Local cEOL := CHR(10)+CHR(13) Local oDlg Local oMemo
DEFINE MSDIALOG oDlg TITLE "Clientes Selecionados" From 000,000 TO 350,400 PIXEL @ 005,005 GET oMemo VAR cTexto MEMO SIZE 150,150 OF oDlg PIXEL oMemo:bRClicked := {||AllwaysTrue()} DEFINE SBUTTON FROM 005,165 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg PIXEL ACTIVATE MSDIALOG oDlg CENTER LimpaMarca() ENDIF
RETURN
- 232 -
ADVPL Compl et o
Ex empl o: Funo Li mpaMar ca( ) ut i l i zao das f u nes acessr i as da Mar k Br ow ( )
/*/ +----------------------------------------------------------------------------- | Programa | LimpaMarca | Autor | ARNALDO RAYMUNDO JR. | Data | | +----------------------------------------------------------------------------- | Desc. | Funo utilizada para demonstrar o uso do recurso da MarkBrowse| +----------------------------------------------------------------------------- | Uso | Curso de ADVPL | +----------------------------------------------------------------------------- /*/
STATIC FUNCTION LimpaMarca()
Local nX := 0
For nX := 1 to Len(aRecSel) SA1->(DbGoto(aRecSel[nX][1])) RecLock("SA1",.F.) SA1->A1_OK := SPACE(2) MsUnLock() Next nX
RETURN
- 233 -
ADVPL Compl et o
23. Ar qui v os e ndi ces Tempor r i os
23.1. Ut i l i zao de ar qui vos e ndi ces t empor r i os
Os arqui vos e ndi ces t emporri os ou de t rabal ho, so geral ment e ut ilizados em ambi ent e CodeBase, poi s, nest e ambi ent e no h os recursos de Joi n e Order By , como exi st e nos bancos de dados rel aci onai s. Por est e mot ivo quando necessi t ar gerar uma i nformao ordenada e consol i dada, ou sej a, de vri as t abel as, dever emos recorr er ao uso dos arqui vos e dos ndi ces t emporri os.
23.2. Funes par a mani pul ao de ar qui vos e ndi ces t empor r i os
23.2.1. Cr i aTr ab( )
A Cri aTrab( ) uma funci onali dade que permi t e cri ar um arqui vo fsi co ou ger ar um nome al eat ri o.
E Si nt ax e: Cr i aTr ab( aCampo, l Cr i ar , cEx t )
E Par met r os
aCampo Array com o nome, t i po, t amanho e deci mal do campo a ser cri ado no arqui vo l Cr i ar Se verdadei ro ( . T.) cri ar o arqui vo, ou fal so ( .F. ) soment e r et orna um nome al eat ri o cEx t Qual ext enso dever ser cri ado o arqui vo de t r abal ho
Os arqui vos cri ados com a funo CRI ATRAB( ) sero gerados no di ret ri o especi fi cado como St ar t Pat h , de acordo com o Root Pat h confi gurado no .ini da apli cao.
- 234 -
ADVPL Compl et o
23.2.2. dbUseAr ea( )
A dbUseAr ea( ) uma funci onali dade que permi t e defi ni r um arqui vo de base de dados, com uma rea de t rabal ho disponvel na apli cao.
E Si nt ax e: dbUseAr ea( l New Ar ea, cDr i v er , cName, cAl i as, l Sh ar ed, l ReadOn l y )
E Par met r os
l New Ar ea I ndi ca se e um novo al ias no conj unt o de al i as abert o cDr i v er Dri ve ( RddName( ) ) do arqui vo - > DBFCDX / TOPCONN / DBFNTX cName Nome fsi co da t abel a que ser usado cAl i as Ali as que ser usado enquant o est i ve abert o l Sh ar ed A t abel a t er acesso excl usi vo ou compart i l hado l ReadOn l y Se verdadei ro a t abel a ser soment e l ei t ura
23.2.3. I ndRegua( )
A I ndRegua( ) uma funci onali dade que per mi t e cri ar ndi ces t emporri os para o al i as especi fi cado, podendo ou no t er um fi l t ro.
E Si nt ax e: I ndRegua( cAl i as, cNI ndex , cEx pr ess, x Or dem, cFor , cMens, l Show )
E Par met r os
cAl i as Ali as da t abel a onde ser efet uada o ndi ce/ fil t ro t empor ri o cNI n dex Nome do arqui vo de t rabal ho ret ornado pel a funo Cri aTrab( ) cEx pr ess Expresso utilizada na chave do novo ndice x Or dem Parmet r o nul o cFor Expresso utilizada para filtro cMens Parmet r o nul o l Show Apresent ar a t el a de pr ogresso do ndi ce/ fil t ro t emporri o
- 235 -
ADVPL Compl et o
Ex empl o 01 : Ger ao de ar qui v o e ndi ce t empor r i os
#include protheus.ch
/*/ +----------------------------------------------------------------------------- | Programa | GeraTrab | Autor | ROBSON LUIZ | Data | | +----------------------------------------------------------------------------- | Desc. | Utilizao de arquivos e ndices temporrios | +----------------------------------------------------------------------------- | Uso | Curso de ADVPL | +----------------------------------------------------------------------------- /*/
User Function GeraTrab()
Local aStru := {} Local aArqTRB := {} Local nI := 0 Local cIndTRB := "" Local cNomArq := ""
dbSelectArea("SX3") dbSetOrder(2) For nI := 1 To Len( aStru ) dbSeek( aStru[nI,2] ) AADD( aArqTRB, { aStru[nI,1], X3_TIPO, X3_TAMANHO, X3_DECIMAL } ) Next nI
- 236 -
ADVPL Compl et o
Exemplo (continuao):
// ndice que ser criado cIndTRB := "PRODUTO+DTOS(EMISSAO)"
If MsgYesNo("Apagar o arquivo gerado \system\"+cNomArq+".dbf ?",FunName()) Ferase(cNomArq+".dbf") Ferase(cNomArq+OrdBagExt()) Endif
Return Nil
Quando cri amos um arqui vo ou um ndi ce t empor ri o ( t rabal ho) , ut ili zando a funo I ndr egua, obri gat ri o apag- l os no fi nal do r ot i na.
A ut ili zao de arqui vo ou ndi ce t emporri o, dever ser bem anali sada a fi m de evi t ar l ent i do no pr ocessament os da r ot i na.
O arr ay aSt r u foi cri ado com base nos campos exi st ent es no si st ema, ao i nvs de cri armos novas est rut uras dos campos, ut i lizamos as j exi st ent es no di ci onri os de dados ( SX3) .
- 237 -
ADVPL Compl et o
Ex empl o 02 : Ut i l i zando doi s n di ces t empor r i os com RDD DBFCDX
/*/ +----------------------------------------------------------------------------- | Programa | IndTwoReg | Autor | MICHEL DANTAS | Data | | +----------------------------------------------------------------------------- | Desc. | Utilizao de dois ndices temporrios com DBFCDX | +----------------------------------------------------------------------------- | Uso | Curso de ADVPL | +----------------------------------------------------------------------------- /*/
User Function IndTwoReg()
LOCAL nOrder := 0 LOCAL cArq1 := CriaTrab(NIL,.F.) LOCAL cChave1 := "A1_FILIAL+A1_EST" LOCAL cArq2 := CriaTrab(NIL,.F.) LOCAL cChave2 := "A1_FILIAL+A1_NOME"
Os rel at ri os desenvol vi dos em ADVPL possuem um padro de desenvol vi ment o que mai s depende de l ayout e t i pos de parmet r os do que qual quer out ro t i po de i nformao, vi st o que at o moment o percebemos que a li nguagem padro da Mi crosi ga muit o mai s compost a de funes genri cas do que de comandos.
Est e t i po de r el at ri o caract eri zado por um format o de i mpresso t i po Post Scri pt , e permi t e a gerao de um arqui vo em format o t ext o ( .t xt ) , com uma ext enso prpri a da apli cao ERP ( .# # R) .
A est rut ura de um r el at ri o no grfi co baseada no uso da f uno Set Pri nt ( ) , compl ement ada pel o uso de out r as funes acessri as, as quai s est o det al hadas no Gui a de Refer nci a Rpi da que acompanha est e mat eri al .
24.1.1. Est r ut ur a de r el at r i os baseados na Set Pr i nt ( )
Nest e t pi co ser demonst rada a const ruo de r el at ri o no grfi co baseado no uso da funo Set Pri nt ( ) o qual at ende os format os de base de dados I SAM e Topconnect , por m no cont empl ando a t ecnol ogi a Prot heus Embedded SQL.
Est r ut u r a do pr ogr ama
Li nhas Pr ogr ama 1 Funo pr i nci pal ; 2 Declar ao e at r ibuio de variveis; 3 At ualizao do ar quivo de pergunt as at r avs da funo especfica Cr iaSX1( ) ; 4 Definio as pergunt as at r avs da funo Per gunt e( ) ; 5 Definio das ordens disponveis par a impr esso do r elat r io; 6 Chamada da funo Set Pr int ; 7 At ualizao das configur aes de impr esso com a funo Set Default ( ) ; 8 Execuo da r ot ina de impr esso at r avs da funo Rpt St at us( ) 9 Fi m da f uno pr i nci pal .
10 Funo de pr ocessament o e i mpr esso do r el at r i o 11 Declar ao e at r ibuio de variveis; 12 Definio dos filt ros de impr esso, avaliando o bando de dados em uso pela aplicao; 13 At ualizao da r gua de processament o com a quant idade de regist ros que ser processada; 14 Est r ut ur a pr incipal de r epet io par a impresso dos dados do r elat r io; 15 Cont role da impr esso do cabealho ut ilizando a funo Cabec( ) ; 16 I mpr esso dos t ot ais do relat r io; 17 I mpr esso do rodap da lt ima pgina do r elat r io ut ilizando a funo Roda( ) ; 18 Limpeza dos arquivos e ndices t empor r ios cr iados par a o processament o( ) ; 19 Tr at ament o da visualizao do r elat r io ( impr esso em disco) at r avs da funo Our Spool( ) 20 Tr at ament os adicionais ao r elat r io, de acor do com necessidades especficas; 21 Liber ao do buffer de impr esso, sej a par a impr essor a, sej a par a limpeza do cont edo visualizado em t ela, ut ilizando a funo MS_FLUSH( )
22 Fi m da f uno de pr ocessament o e i mpr esso do r el at r i o
23 Funo de at ual i zao do ar qui v o de per gunt as 24 Declar ao e at r ibuio de variveis; 25 Opo 01: Adio individual de cada pergunt a no SX1 ut ilizando a funo PUTSX1( )
Cr iao de um ar r ay individual no for mat o ut ilizado pela PUTSX1( ) cont endo apenas as infor maes da pergunt a que ser adicionada no SX1. 25 Opo 02: Adio de um gr upo de per gunt as no SX1 ut ilizando a funo AJUSTASX1( )
Cr iao de um arr ay no format o ut ilizado pela AJUSTASX1( ) cont endo t odas as pergunt as que ser o at ualizadas.
26 Fi m da f uno de at ual i zao do ar qui v o de per gunt as
- 239 -
ADVPL Compl et o
Funo Pr i nci pal
//+-----------------------------------------------------------------+ //| Rotina | Inform | Autor | Robson Luiz (rleg) | Data | 01.01.07 | //+-----------------------------------------------------------------+ //| Descr. | Rotina para gerar relatrio utilizando as funes | //| | SetPrint() e SetDefault(). | //+-----------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+-----------------------------------------------------------------+
User Function INFORM() //+------------------------- //| Declaraes de variveis //+-------------------------
Local cDesc1 := "Este relatrio ir imprimir informaes do contas a pagar conforme" Local cDesc2 := "parmetros informado. Ser gerado um arquivo no diretrio " Local cDesc3 := "Spool - INFORM_????.XLS, onde ???? e o nome do usurio."
Private cString := "SE2" Private Tamanho := "M" Private aReturn := { "Zebrado",2,"Administrao",2,2,1,"",1 } Private wnrel := "INFORM" Private NomeProg := "INFORM" Private nLastKey := 0 Private Limite := 132 Private Titulo := "Ttulo a Pagar - Ordem de " Private cPerg := "INFORM" Private nTipo := 0 Private cbCont := 0 Private cbTxt := "registro(s) lido(s)" Private Li := 80 Private m_pag := 1 Private aOrd := {} Private Cabec1 := "PREFIXO TITULO PARCELA TIP EMISSAO VENCTO VENCTO" Private Cabec1 += "REAL VLR. ORIGINAL PAGO SALDO " Private Cabec2 := "" /* +---------------------- | Parmetros do aReturn +---------------------- aReturn - Preenchido pelo SetPrint() aReturn[1] - Reservado para formulrio aReturn[2] - Reservado para numero de vias aReturn[3] - Destinatrio aReturn[4] - Formato 1=Paisagem 2=Retrato aReturn[5] - Mdia 1-Disco 2=Impressora aReturn[6] Porta ou arquivo 1-Lpt1... 4-Com1... aReturn[7] - Expresso do filtro aReturn[8] - Ordem a ser selecionada aReturn[9] [10] [n] - Campos a processar se houver */
//Parmetros de perguntas para o relatrio //+-------------------------------------------------------------+ //| mv_par01 - Fornecedor de ? 999999 | //| mv_par02 - Fornecedor ate ? 999999 | //| mv_par03 - Tipo de ? XXX | //| mv_par04 - Tipo ate ? XXX | //| mv_par05 - Vencimento de ? 99/99/99 | //| mv_par06 - Vencimento ate ? 99/99/99 | //| mv_par07 - Aglut.Fornecedor ? Sim/No | //+-------------------------------------------------------------+ CriaSx1()
//+------------------------------------------------- //| Disponibiliza para usurio digitar os parmetros //+------------------------------------------------- Pergunte(cPerg,.F.) //cPerg -> Nome do grupo de perguntas, .T. mostra a tela,; // .F. somente carrega as variveis
//+--------------------------------------------------- //| Solicita ao usurio a parametrizao do relatrio. //+--------------------------------------------------- wnrel := SetPrint(cString,wnrel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F., ; Tamanho,.F.,.F.) //SetPrint(cAlias,cNome,cPerg,cDesc,cCnt1,cCnt2,cCnt3,lDic,aOrd,lCompres,; //cSize,aFilter,lFiltro,lCrystal,cNameDrv,lNoAsk,lServer,cPortToPrint)
//+-------------------- //| Se teclar ESC, sair //+-------------------- If nLastKey == 27 Return Endif
//+------------------------------------------------------------------ //| Estabelece os padres para impresso, conforme escolha do usurio //+------------------------------------------------------------------ SetDefault(aReturn,cString)
//+------------------------------------- //| Verificar se ser reduzido ou normal //+------------------------------------- nTipo := IIF(aReturn[4] == 1, 15, 18)
//+-------------------- //| Se teclar ESC, sair //+-------------------- If nLastKey == 27 Return Endif
Continuao:
- 241 -
ADVPL Compl et o
//+----------------------------------- //| Chama funo que processa os dados //+----------------------------------- RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo dados,; aguarde...", .T. )
Return
Funo de pr ocessament o e i mpr esso
//+-----------------------------------------------------------------+ //| Rotina | ImpRel | Autor | Robson Luiz (rleg) | Data | 01.01.07 | //+-----------------------------------------------------------------+ //| Descr. | Rotina de processamento e impresso. | //+-----------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+-----------------------------------------------------------------+
Static Function ImpRel(lEnd)
Local nIndice := 0 Local cArq := "" Local cIndice := "" Local cFiltro := "" Local aCol := {} Local cFornec := "" Local nValor := 0 Local nPago := 0 Local nSaldo := 0 Local nT_Valor := 0 Local nT_Pago := 0 Local nT_Saldo := 0 Local cArqExcel := "" Local cAliasImp Local oExcelApp
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
//+---------------------------------------------------------------------- //| Gera arquivo do tipo .DBF com extenso .XLS p/ usurio abrir no Excel //+---------------------------------------------------------------------- cArqExcel := __RELDIR+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS" Copy To &cArqExcel
#IFNDEF TOP dbSelectArea(cAliasImp) RetIndex(cAliasImp) Set Filter To #ELSE dbSelectArea(cAliasImp) dbCloseArea() #ENDIF dbSetOrder(1) dbGoTop()
If aReturn[5] == 1 Set Printer TO dbCommitAll() OurSpool(wnrel) EndIf
//+------------------------ //| Abrir planilha MS-Excel //+------------------------ If mv_par08 == 1 __CopyFile(cArqExcel,"c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS") If ! ApOleClient("MsExcel") MsgAlert("MsExcel no instalado") Return Endif oExcelApp := MsExcel():New() oExcelApp:WorkBooks:Open( "c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS" ) oExcelApp:SetVisible(.T.) Endif
Ms_Flush()
Return
- 246 -
ADVPL Compl et o
Funo par a ger ar o gr upo de par met r os no SX1
//+-----------------------------------------------------------------+ //| Rotina | CriaSX1 | Autor | Robson Luiz (rleg)| Data | 01.01.07 | //+-----------------------------------------------------------------+ //| Descr. | Rotina para criar o grupo de parmetros. | //+-----------------------------------------------------------------+ //| Uso | Para treinamento e capacitao. | //+-----------------------------------------------------------------+ Static Function CriaSx1() Local aP := {} Local i := 0 Local cSeq Local cMvCh Local cMvPar Local aHelp := {}
AADD(aHelp,{"Informe o cdigo do fornecedor.","inicial."}) AADD(aHelp,{"Informe o cdigo do fornecedor.","final."}) AADD(aHelp,{"Tipo de ttulo inicial."}) AADD(aHelp,{"Tipo de ttulo final."}) AADD(aHelp,{"Digite a data do vencimento inicial."}) AADD(aHelp,{"Digite a data do vencimento final."}) AADD(aHelp,{"Aglutinar os ttulos do mesmo forne-",; "cedor totalizando seus valores."}) AADD(aHelp,{"Ser gerada uma planilha para ",; "MS-Excel, abrir esta planilha?"})
For i:=1 To Len(aP) cSeq := StrZero(i,2,0) cMvPar := "mv_par"+cSeq cMvCh := "mv_ch"+IIF(i<=9,Chr(i+48),Chr(i+87))
25.1. Ger ao e l ei t ur a de ar qui vos em f or mat o t ex t o
Arqui vos do t i po t ext o ( t ambm conheci dos como padro TXT) so ar qui vos com regi st ros de t amanho vari vel . A indi cao do fi nal de cada regi st ro repr esent ada por doi s byt es, 0D 0A em hexadeci mal ou 13 10 em deci mal ou, ai nda, CR LF para padro ASCI I .
Apesar do t amanho dos regi st ros ser vari vel , a mai ori a dos si st emas gera est e t i po de arqui vo com r egi st ros de t amanho fi xo, de acordo com um l ayout especfi co que i ndi ca quai s so os dados gravados.
Para i l ust rar est es procedi ment os, sero ger ados arqui vos t ext os, com duas famli as de funes:
1 ) Faml i a: nest a famli a sero ut i lizadas as funes: FCr eat e( ) , FWri t e( ) , FCl ose( ) , FSeek( ) , FOpen( ) e FRead( ) .
2 ) Faml i a: nest a famli a sero ut ili zadas as funes: FT_FUse( ) , FT_FGoTop( ) , FT_FLast Rec( ) , FT_FEof( ) , FT_FReadLn( ) , FT_FSki p( ) , FT_FGot o( ) , FT_FRecno( ) .
A di ferena ent re as duas famli as, est na l ei t ura do arqui vo t ext o. Quando se t rat ar de arqui vo t ext o com t amanho fi xo das linhas, poder o ser ut ilizadas as duas famli as para l ei t ura do arqui vo, por m, quando se t rat ar de arqui vo t ext o com t amanho vari vel das li nhas, soment e poder ser ut ili za a segunda famli a, repr esent ada pel as funes: FT_FUse( ) , FT_FGoTo( ) , FT_FRecno( ) , FT_FGoTop( ) , FT_FLast Rec( ) , FT_FEof( ) , FT_FReadLn( ) e FT_FSki p( ) .
- 249 -
ADVPL Compl et o
1 . Faml i a de f unes de gr av ao e l ei t u r a de ar qui v os t ex t o
Ex empl o: Ger ao de ar qui v o TXT, ut i l i zan do a pr i mei r a f aml i a de f unes
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Programa | GeraTXT | Autor | SERGIO FUZINAKA | Data | | +----------------------------------------------------------------------------- | Descrio | Gera o arquivo TXT, a partir do Cadastro de Clientes | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function GeraTXT()
//+--------------------------------+ //| Declarao de Variveis | //+--------------------------------+ Local oGeraTxt Private cPerg := "EXPSA1" Private cAlias := "SA1"
//+-----------------------------------+ //| Montagem da tela de processamento.| //+-----------------------------------+
DEFINE MSDIALOG oGeraTxt TITLE OemToAnsi("Gerao de Arquivo Texto") ; FROM 000,000 TO 200,400 PIXEL
@ 005,005 TO 095,195 OF oGeraTxt PIXEL @ 010,020 Say " Este programa ira gerar um arquivo texto, conforme os parame- "; OF oGeraTxt PIXEL @ 018,020 Say " tros definidos pelo usurio, com os registros do arquivo de "; OF oGeraTxt PIXEL @ 026,020 Say " SA1 " OF oGeraTxt PIXEL
DEFINE SBUTTON FROM 070, 030 TYPE 1 ; ACTION (OkGeraTxt(),oGeraTxt:End()) ENABLE OF oGeraTxt
DEFINE SBUTTON FROM 070, 070 TYPE 2 ; ACTION (oGeraTxt:End()) ENABLE OF oGeraTxt
DEFINE SBUTTON FROM 070, 110 TYPE 5 ; ACTION (Pergunte(cPerg,.T.)) ENABLE OF oGeraTxt
ACTIVATE DIALOG oGeraTxt CENTERED
Return Nil
- 250 -
ADVPL Compl et o
Exemplo (continuao):
/*/ +----------------------------------------------------------------------------- | Funo | OKGERATXT | Autor | SERGIO FUZINAKA | Data | | +----------------------------------------------------------------------------- | Descrio | Funo chamada pelo boto OK na tela inicial de processamento. | | | Executa a gerao do arquivo texto. | +----------------------------------------------------------------------------- /*/
If nHdl == -1 MsgAlert("O arquivo de nome "+cArqTxt+" no pode ser executado! Verifique os parmetros.","Ateno!") Return Endif
// Inicializa a rgua de processamento Processa({|| RunCont() },"Processando...")
Return Nil
/*/ +----------------------------------------------------------------------------- | Funo | RUNCONT | Autor | SERGIO FUZINAKA | Data | | +----------------------------------------------------------------------------- | Descrio | Funo auxiliar chamada pela PROCESSA. A funo PROCESSA | | | monta a janela com a rgua de processamento. | +----------------------------------------------------------------------------- /*/
Static Function RunCont
Local cLin
dbSelectArea(cAlias) dbGoTop() ProcRegua(RecCount()) // Numero de registros a processar
While (cAlias)->(!EOF()) //Incrementa a rgua IncProc()
//+-------------------------------------------------------------------+ //| Gravao no arquivo texto. Testa por erros durante a gravao da | //| linha montada. | //+-------------------------------------------------------------------+
If fWrite(nHdl,cLin,Len(cLin)) != Len(cLin) If !MsgAlert("Ocorreu um erro na gravao do arquivo."+; "Continua?","Ateno!") Exit Endif Endif
(cAlias)->(dbSkip()) EndDo
// O arquivo texto deve ser fechado, bem como o dialogo criado na funo anterior fClose(nHdl)
Return Nil
Not e que para a gerao do arqui vo TXT foram ut ili zadas, basi cament e, as funes FCreat e, FWri t e e FCl ose que, respect i vament e, gera o arqui vo, adi ci ona dados e fecha o arqui vo. No exempl o, o format o est abel eci do pel a concat enao dos dados na vari vel cLi n a qual ut ili zada na gravao dos dados. Para a l ei t ura de dados TXT sero ut ili zada as funes FOpen e FRead.
Ex empl o: Lei t u r a de ar qu i v o TXT, ut i l i zando a pr i mei r a f aml i a de f u nes
#Include "protheus.ch"
/*/ +----------------------------------------------------------------------- | Programa | LeTXT | Autor | SERGIO FUZINAKA | Data | | +----------------------------------------------------------------------- | Descrio | Leitura de arquivo TXT | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/ User Function LeTXT()
//+-------------------------------------------------------------------+ //| Declarao de Variveis | //+-------------------------------------------------------------------+
Local cPerg := "IMPSA1" Local oLeTxt
Private cAlias := "SA1"
//CriaSx1(cPerg) //Pergunte(cPerg,.F.)
- 252 -
ADVPL Compl et o
Exemplo (continuao):
dbSelectArea(cAlias) dbSetOrder(1)
//+-------------------------------------------------------------------+ // Montagem da tela de processamento | //+-------------------------------------------------------------------+
DEFINE MSDIALOG oLeTxt TITLE OemToAnsi("Leitura de Arquivo Texto"); FROM 000,000 TO 200,400 PIXEL @ 005,005 TO 095,195 OF oLeTxt PIXEL @ 10,020 Say " Este programa ira ler o contedo de um arquivo texto, conforme"; OF oLeTxt PIXEL @ 18,020 Say " os parmetros definidos pelo usurio, com os registros do arquivo"; OF oLeTxt PIXEL @ 26,020 Say " SA1" OF oLeTxt PIXEL
DEFINE SBUTTON FROM 070, 030 TYPE 1 ; ACTION (OkLeTxt(),oLeTxt:End()) ENABLE OF oLeTxt
DEFINE SBUTTON FROM 070, 070 TYPE 2 ; ACTION (oLeTxt:End()) ENABLE OF oLeTxt
DEFINE SBUTTON FROM 070, 110 TYPE 5 ; ACTION (Pergunte(cPerg,.T.)) ENABLE OF oLeTxt ACTIVATE DIALOG oLeTxt CENTERED
Return Nil
/*/ +----------------------------------------------------------------------------- | Funo | OKLETXT | Autor | SERGIO FUZINAKA | Data | | +----------------------------------------------------------------------------- | Descrio | Funo chamada pelo boto OK na tela inicial de processamento | | | Executa a leitura do arquivo texto | +----------------------------------------------------------------------------- /*/
Static Function OkLeTxt()
//+-------------------------------------------------------------------+ //| Abertura do arquivo texto | //+-------------------------------------------------------------------+
If nHdl == -1 MsgAlert("O arquivo de nome "+cArqTxt+" no pode ser aberto! Verifique os parmetros.","Ateno!") Return Endif
// Inicializa a rgua de processamento Processa({|| RunCont() },"Processando...") Return Nil
- 253 -
ADVPL Compl et o
Exemplo (continuao):
/*/ +----------------------------------------------------------------------------- | Funo | RUNCONT | Autor | SERGIO FUZINAKA | Data | | +----------------------------------------------------------------------------- | Descrio | Funo auxiliar chamada pela PROCESSA. A funo PROCESSA | | | monta a janela com a rgua de processamento. | +----------------------------------------------------------------------------- /*/
Static Function RunCont
Local nTamFile := 0 Local nTamLin := 56 Local cBuffer := "" Local nBtLidos := 0 Local cFilSA1 := "" Local cCodSA1 := "" Local cLojaSA1 := ""
//+------------------------------------------- //| Funo - Import() //+------------------------------------------- Static Function Import()
Local cBuffer := "" Local cFileOpen := "" Local cTitulo1 := "Selecione o arquivo" Local cExtens := "Arquivo TXT | *.txt"
/*** * _________________________________________________________ * cGetFile(<ExpC1>,<ExpC2>,<ExpN1>,<ExpC3>,<ExpL1>,<ExpN2>) * * <ExpC1> - Expresso de filtro * <ExpC2> - Titulo da janela * <ExpN1> - Numero de mascara default 1 para *.Exe * <ExpC3> - Diretrio inicial se necessrio * <ExpL1> - .F. boto salvar - .T. boto abrir * <ExpN2> - Mascara de bits para escolher as opes de visualizao do objeto * (prconst.ch) */ cFileOpen := cGetFile(cExtens,cTitulo1,,cMainPath,.T.)
If !File(cFileOpen) MsgAlert("Arquivo texto: "+cFileOpen+" no localizado",cCadastro) Return Endif
FT_FUSE(cFileOpen) //ABRIR FT_FGOTOP() //PONTO NO TOPO ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER
While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO IncProc()
// Capturar dados cBuffer := FT_FREADLN() //LENDO LINHA
FT_FUSE() //fecha o arquivo txt MsgInfo("Processo finalizada") Return Nil
- 256 -
ADVPL Compl et o
26. Of i ci na de pr ogr amao I
26.1. I nt er f aces com si nt ax e cl ssi ca
A si nt axe convenci onal para defi ni o de component es vi suai s da linguagem ADVPL depende di ret ament e no i ncl ude especi fi cado no cabeal ho do font e. Os doi s i ncl udes di sponvei s para o ambi ent e ADVPL Pr ot heus so:
E RWMAKE. CH: permi t e a ut ili zao da si nt axe CLI PPER na defi ni o dos component es vi suai s.
E PROTHEUS.CH: permi t e a ut ili zao da si nt axe ADVPL convenci onal , a qual um apri morament o da si nt axe CLI PPER, com a incluso de novos at ri but os para os component es vi suai s di sponi bilizados no ERP Pr ot heus.
Para il ust rar a di ferena na ut ilizao dest es doi s i ncl udes, segue abai xo as di ferent es defi ni es para o component es Di al og e MsDi al og:
Exemplo 01 Include Rwmake.ch
#include rwmake.ch
@ 0,0 TO 400,600 DIALOG oDlg TITLE "Janela em sintaxe Clipper" ACTIVATE DIALOG oDlg CENTERED
Exemplo 02 Include Protheus.ch
#include protheus.ch
DEFINE MSDIALOG oDlg TITLE "Janela em sintaxe ADVPL "FROM 000,000 TO 400,600 PIXEL ACTIVATE MSDIALOG oDlg CENTERED
Ambas as si nt axes produzi ro o mesmo efei t o quando compi ladas e execut adas no ambi ent e Pr ot heus, mas deve ser ut ili zada sempr e a si nt axe ADVPL at ravs do uso do i ncl ude PROTHEUS.CH
Os component es da i nt erface vi sual que ser o t rat ados nest e t pico, ut ili zando a si nt axe cl ssi ca da li nguagem ADVPL so:
Si nt ax e @ nLi n ha, nCol un a BUTTON cTex t o SI ZE nLar gur a,n Al t ur a UNI DADE OF oObj et oRef ACTI ON AO Descr i o Defi ne o component e vi sual But t on, o qual permi t e a i ncl uso de bot es de operao na t el a da int er face, os quai s ser o vi suali zados soment e com um t ext o si mpl es para sua i dent i fi cao.
CHECKBOX( )
Si nt ax e @ nLi n ha, nCol un a CHECKBOX oCheck Box VAR VARI AVEL PROMPT cTex t o WHEN WHEN UNI DADE OF oObj et oRef SI ZE nLar gu r a, nAl t ur a MESSAGE cMensagem Descr i o Defi ne o component e vi sual CheckBox, o qual permi t e a ut ili zao da uma marca para habi li t ar ou no uma opo escol hi da, sendo est a marca acompanhada de um t ext o expl i cat i vo. Di fere do Radi oMenu poi s cada el ement o do check ni co, mas o Radi o per mi t e a ut ili zao de uma li st a j unt o com um cont r ol e de sel eo.
COMBOBOX( )
Si nt ax e @ nLi n ha, nCol una COMBOBOX VARI AVEL I TEMS AI TENS SI ZE nLar gu r a, nAl t u r a UNI DADE OF oObj et oRef Descr i o Defi ne o component e vi sual ComboBox, o qual permi t e sel eo de um i t em dent ro de uma li st a de opes de t ext os si mpl es no format o de um vet or.
FOLDER( )
Si nt ax e @ nLi n ha, nCol un a FOLDER oFol der OF oObj et oRef PROMPT &cTex t o1,,&cTex t oX PI XEL SI ZE nLar gur a,n Al t ur a Descr i o Defi ne o component e vi sual Folder, o qual permi t e a i ncl uso de di ver sos Di al ogs dent ro de uma mesma i nt erface vi sual . Um Fol der pode ser ent endi do como um array de Di al ogs, aonde cada pai nel recebe seus component es e t em seus at ri but os defi ni dos i ndependent ement e dos demai s.
MSDI ALOG( )
Si nt ax e DEFI NE MSDI ALOG oObj et oDLG TI TLE cTi t ul o FROM nLi nI n i ,n Col I n i TO nLi Fi m,n Col Fi m OF oObj et oRef UNI DADE Descr i o Defi ne o component e MSDI ALOG( ) , o qual ut ilizado como base para os demai s component es da i nt erface vi sual , poi s um component e MSDI ALOG( ) uma j anel a da apli cao.
- 258 -
ADVPL Compl et o
MSGET( )
Si nt ax e @ nLi nh a, nCol u na MSGET VARI AVEL SI ZE nLar gu r a,n Al t ur a UNI DADE OF oObj et oRef F3 cF3 VALI D VALI D WHEN WHEN PI CTURE cPi ct ur e Descr i o Defi ne o component e vi sual MSGET, o qual ut ili zado para capt ura de i nformaes di gi t vei s na t el a da i nt erface.
RADI O( )
Si nt ax e @ nLi n ha, nCol un a RADI O oRadi o VAR nRadi o 3D SI ZE nLar gu r a, nAl t u r a < I TEMS PROMPT> cI t em1,cI t em2,...,cI t emX OF oObj et oRef UNI DADE ON CHANGE CHANGE ON CLI CK CLI CK Descr i o Defi ne o component e vi sual Radi o, t ambm conheci do como Radi oMenu, o qual sel eo de uma opo ou de ml t i pl as opes at ravs de uma mar ca para os i t ens exi bi dos de uma li st a. Di fere do component e CheckBox, poi s cada el ement o de check sempr e ni co, e o Radi o pode cont er um ou mai s el ement os.
SAY( )
Si nt ax e @ nLi n ha, nCol un a SAY cTex t o SI ZE nLar gur a,n Al t u r a UNI DADE OF oObj et oRef Descr i o Defi ne o component e vi sual SAY, o qual ut ilizado para exi bi o de t ext os em uma t el a de i nt erface.
SBUTTON( )
Si nt ax e DEFI NE SBUTTON FROM nLi nh a, nCol u na TYPE N ACTI ON AO STATUS OF oObj et oRef Descr i o Defi ne o component e vi sual SBut t on, o qual permi t e a i ncl uso de bot es de operao na t el a da i nt erface, os quai s sero vi suali zados dependendo da i nt erface do si st ema ERP ut ili zada soment e com um t ext o si mpl es para sua i dent i fi cao, ou com uma i magem ( Bi t Map) pr- defi ni do.
- 259 -
ADVPL Compl et o
26.2. Rguas de pr ocessament o
Os i ndi cadores de progr esso ou r guas de processament o di sponvei s na li nguagem ADVPL que sero abordados nest e mat eri al so:
Rgua de pr ocessament o si mpl es, com apenas um i ndi cador de progresso, ut i lizada no processament o de rel at ri os do padro Set Pri nt ( ) .
E Si nt ax e: Rpt St at u s( bAcao, cMensagem)
E Ret or no: Ni l
E Par met r os:
bAcao Bl oco de cdi go que especi fi ca a ao que ser execut ada com o acompanhament o da rgua de processament o. cMensagem Mensagem que ser exibi da na rgua de processament o durant e a execuo. Apar nci a
- 260 -
ADVPL Compl et o
Ex empl o: Funo RPTSt at u s( ) e acessr i as
/*/ +--------------------------------------------------------------------------- | Funo | GRPTSTATUS | Autor | ROBSON LUIZ | Data | | +--------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao das funes RPTSTATUS() | | | SETREGUA() E INCREGUA() | +--------------------------------------------------------------------------- | Uso | Curso ADVPL | +--------------------------------------------------------------------------- /*/
User Function GRptStatus() Local aSay := {} Local aButton := {} Local nOpc := 0 Local cTitulo := "Exemplo de Funes" Local cDesc1 := "Este programa exemplifica a utilizao da funo Processa() em conjunto" Local cDesc2 := "com as funes de incremento ProcRegua() e IncProc()"
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02 nCnt++ dbSkip() End
dbSeek(xFilial("SX5")+mv_par01,.T.)
SetRegua(nCnt) While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02 IncRegua() If lEnd MsgInfo(cCancel,"Fim") Exit Endif dbSkip() End Return .T.
SETREGUA( )
A funo Set Regua( ) ut ili zada para defi ni r o val or mxi mo da rgua de progr esso cri ada at ravs da funo Rpt St at us( ) .
E Si nt ax e: Set Regua( n Max Pr oc)
E Par met r os:
nMax Pr oc Vari vel que i ndi ca o val or mxi mo de pr ocessament o ( passos) que sero i ndi cados pel a rgua.
E Ret or no:
Nen hum .
- 262 -
ADVPL Compl et o
Ex empl o:
...
dbSel ect Area( "SA1") dbGoTop( ) Set Regua( Last Rec( ) ) Whil e ! Eof( ) I ncRegua( ) I f Li > 60 ...
I NCREGUA( )
A funo I ncRegua( ) ut ili zada para i ncrement ar val or na rgua de progresso cri ada at ravs da funo Rpt St at us( )
E Si nt ax e: I ncRegu a( cMensagem)
E Par met r os:
cMensagem Mensagem que ser exi bi da e at uali zada na rgua de processament o a cada execuo da funo I ncRegua( ) , sendo que a t axa de at uali zao da i nt erface cont r ol ada pel o Bi nri o.
E Ret or no:
Nen hum .
Ex empl o:
...
dbSel ect Area( "SA1") dbGoTop( ) Set Regua( Last Rec( ) ) Whil e ! Eof( ) I ncRegua( Aval i ando cli ent e: + SA1- > A1_COD) I f Li > 60 ...
- 263 -
ADVPL Compl et o
26.2.2. Pr ocessa( )
Rgua de pr ocessament o si mpl es, com apenas um i ndi cador de progresso, ut i lizada no processament o de rot i nas.
E Si nt ax e: Pr ocessa( bAcao, cMen sagem)
E Ret or no: Ni l
E Par met r os:
bAcao Bl oco de cdi go que especi fi ca a ao que ser execut ada com o acompanhament o da rgua de processament o. cMensagem Mensagem que ser exibi da na rgua de processament o durant e a execuo. Apar nci a
Ex empl o: Funo PROCESSA( ) e acessr i as
/*/ +----------------------------------------------------------------------------- | Funo | GPROCES1 | Autor | ROBSON LUIZ | Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao das funes PROCESSA() | | | PROCREGUA() E INCPROC() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function GProces1() Local aSay := {} Local aButton := {} Local nOpc := 0 Local cTitulo := "Exemplo de Funes" Local cDesc1 := "Este programa exemplifica a utilizao da funo Processa()" Local cDesc2 := " em conjunto com as funes de incremento ProcRegua() e" Local cDesc3 := " IncProc()"
ProcRegua(nCnt) While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02 IncProc("Processando tabela: "+SX5->X5_CHAVE) If lEnd MsgInfo(cCancela,"Fim") Exit Endif dbSkip() End Return .T.
- 265 -
ADVPL Compl et o
SETPROC( )
A funo Set Pr oc( ) ut ili zada para defi ni r o val or mxi mo da rgua de progr esso cri ada at ravs da funo Pr ocessa( ) .
E Si nt ax e: Pr ocessa( nMax Pr oc)
E Par met r os:
nMax Pr oc Vari vel que i ndi ca o val or mxi mo de pr ocessament o ( passos) que sero i ndi cados pel a rgua.
E Ret or no:
Nen hum .
Ex empl o: ... dbSel ect Area( "SA1") dbGoTop( ) Set Pr oc( Last Rec( ) ) Whil e ! Eof( ) I ncPr oc( ) I f Li > 60 ...
I NCPROC( )
A funo I ncProc( ) ut ili zada para i ncrement ar val or na rgua de progr esso cri ada at ravs da funo Pr ocessa( )
E Si nt ax e: I ncPr oc( cMensagem)
E Par met r os:
cMensagem Mensagem que ser exi bi da e at uali zada na rgua de processament o a cada execuo da funo I ncProc( ) , sendo que a t axa de at ual izao da i nt erface cont r ol ada pel o Bi nri o.
E Ret or no:
Nen hum .
Ex empl o: ... dbSel ect Area( "SA1") dbGoTop( ) Set Pr oc( Last Rec( ) ) Whil e ! Eof( ) I ncPr oc( Avali ando cli ent e: + SA1- > A1_COD) I f Li > 60 ...
- 266 -
ADVPL Compl et o
26.2.3. MsNew Pr ocess( ) .
Rgua de pr ocessament o dupl a, possui ndo doi s i ndi cadores de pr ogr esso i ndependent es, ut ili zada no processament o de rot i nas.
E Si nt ax e: MsNew Pr ocess( ) : New ( bAcao, cMensagem)
E Ret or no: oPr ocess obj et o do t i po MsNew Pr ocess( )
E Par met r os:
bAcao Bl oco de cdi go que especi fi ca a ao que ser execut ada com o acompanhament o da rgua de processament o. cMensagem Mensagem que ser exibi da na rgua de processament o durant e a execuo. Apar nci a
E Mt odos:
Act i v at e( ) I ni ci a a execuo do obj et o MsNewPr ocess i nst anci ado. Set Regua1( ) Defi ne a quant i dade de i nformaes que sero demonst radas pel o i ndi cador de pr ogr esso superi or. Par met r o: nMaxPr oc I ncRegu a1( ) I ncrement a em uma uni dade o i ndi cador de pr ogresso superi or , o qual i r demonst rar a evol uo do processament o de acordo com a quant idade defi ni da pel o mt odo Set Regua1( ) . Par met r o: cMensagem Set Regua2( ) Defi ne a quant i dade de i nformaes que sero demonst radas pel o i ndi cador de pr ogr esso i nferi or. Par met r o: nMaxPr oc I ncRegu a2( ) I ncrement a em uma uni dade o i ndi cador de pr ogresso i nferi or, o qual i r demonst rar a evol uo do processament o de acordo com a quant i dade defi nida pel o mt odo Set Regua2( ) . Par met r o: cMensagem
- 267 -
ADVPL Compl et o
Ex empl o: Obj et o MsNew Pr ocess( ) e mt odos acessr i os
/*/ +----------------------------------------------------------------------------- | Funo | GPROCES2 | Autor | ROBSON LUIZ | Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto MsNewProcess() | | | e seus mtodos IncReguaX() e SetReguaX() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
/*/ +----------------------------------------------------------------------------- | Funo | RUNPROC | Autor | ROBSON LUIZ | Data | | +----------------------------------------------------------------------------- | Descrio | Funo de processamento executada atravs da MsNewProcess() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
Static Function RunProc(lEnd,oObj) Local i := 0 Local aTabela := {} Local nCnt := 0
aTabela := {{"00",0},{"13",0},{"35",0},{"T3",0}}
dbSelectArea("SX5") cFilialSX5 := xFilial("SX5") dbSetOrder(1) For i:=1 To Len(aTabela) dbSeek(cFilialSX5+aTabela[i,1]) While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1] If lEnd Exit Endif nCnt++ dbSkip() End aTabela[i,2] := nCnt nCnt := 0 Next i
- 268 -
ADVPL Compl et o
Exemplo (continuao):
oObj:SetRegua1(Len(aTabela)) For i:=1 To Len(aTabela) If lEnd Exit Endif oObj:IncRegua1("Lendo Tabela: "+aTabela[i,1]) dbSelectArea("SX5") dbSeek(cFilialSX5+aTabela[i,1]) oObj:SetRegua2(aTabela[i,2]) While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1] oObj:IncRegua2("Lendo chave: "+X5_CHAVE) If lEnd Exit Endif dbSkip() End Next i Return
26.2.4. MsAguar de( ) .
I ndi cador de processament o sem i ncrement o.
E Si nt ax e: Pr ocessa( bAcao, cMen sagem, cTi t ul o)
E Ret or no: Ni l
E Par met r os:
bAcao Bl oco de cdi go que especi fi ca a ao que ser execut ada com o acompanhament o da rgua de processament o. cMensagem Mensagem que ser exibi da na rgua de processament o durant e a execuo. cTi t ul o Tt ul o da j anel a da rgua de processament o. Apar nci a
- 269 -
ADVPL Compl et o
Ex empl o: MSAguar de( )
/*/ +----------------------------------------------------------------------------- | Funo | GMSAGUARDE | Autor | ROBSON LUIZ | Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao das funes MSAGUARDE() | | | e MSPROCTXT() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
/*/ +----------------------------------------------------------------------------- | Funo | RUNPROC | Autor | ROBSON LUIZ | Data | | +----------------------------------------------------------------------------- | Descrio | Funo de processamento | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
STATIC FUNCTION RunProc(lEnd)
dbSelectArea("SX5") dbSetOrder(1) dbGoTop()
While !Eof() If lEnd MsgInfo(cCancel,"Fim") Exit Endif MsProcTxt("Tabela: "+SX5->X5_TABELA+" Chave: "+SX5->X5_CHAVE) dbSkip() End
RETURN
- 270 -
ADVPL Compl et o
26.2.5. MsgRun( ) .
I ndi cador de processament o sem i ncrement o.
E Si nt ax e: Pr ocessa( cMensagem, cTi t ul o, bAcao)
E Ret or no: Ni l
E Par met r os:
cMensagem Mensagem que ser exibi da na rgua de processament o durant e a execuo. cTi t ul o Tt ul o da j anel a da rgua de processament o. bAcao Bl oco de cdi go que especi fi ca a ao que ser execut ada com o acompanhament o da rgua de processament o. Apar nci a
Ex empl o: MSGRun( )
/*/ +----------------------------------------------------------------------------- | Funo | GMSGRUN | Autor | ROBSON LUIZ |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao das funes MSGRUN() | | | e DBEVAL() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
MsgInfo("Ufa!!!, li "+AllTrim(Str(nCnt))+" registros",FunName())
RETURN
- 271 -
ADVPL Compl et o
26.3. Li st Box ( )
A si nt axe cl ssi ca da linguagem ADVPL permi t e que o component e vi sual Li st Box i mpl ement e doi s t i pos di st i nt os de obj et os:
E Li st a si mpl es: l i st a de apenas uma col una no format o de um vet or, a qual no necessi t a da especi fi cao de um cabeal ho.
E Li st a com col un as: l ist a com di ver sas col unas que necessi t a de um cabeal ho no for mat o de um aHeader ( array de cabeal ho) .
26.3.1. Li st Box si mpl es
E Si nt ax e:
@ nLi nh a,n Col un a LI STBOX oLi st box VAR nLi st a I TEMS aLi st a SI ZE nLar gur a,n Al t ur a OF oObj et oRef UNI DADE ON CHANGE CHANGE
E Par met r os:
nLi n ha, nCol u na Posi o do obj et o Li st Box em funo da j anel a em que el e ser defi ni do. oLi st Box Obj et o Li st Box que ser cri ado. nLi st a Vari vel numri ca que cont m o nmero do i t em sel eci onado no Li st Box. aLi st a Vet or si mpl es cont endo as st ri ngs que sero exi bi das no Li st Box. nLar gu r a, nAl t u r a Di menses do obj et o Li st Box. oObj et oRef Obj et o di al og no qual o component e ser defi nido. UNI DADE Uni dade de medi da das di menses: PI XEL. CHANGE Funo ou l i st a de expr esses que ser execut ada na sel eo de um i t em do Li st Box.
E Apar nci a:
- 272 -
ADVPL Compl et o
Ex empl o: LI STBOX como l i st a si mpl es
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | LISTBOXITE | Autor | ROBSON LUIZ |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do LISTBOX() como lista | | | simples. | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/ User Function ListBoxIte()
Local aVetor := {} Local oDlg := Nil Local oLbx := Nil Local cTitulo := "Consulta Tabela" Local nChave := 0 Local cChave := ""
//+-----------------------------------------+ //| Carrega o vetor conforme a condio | //+-----------------------------------------+ While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA=="00" AADD( aVetor, Trim(X5_CHAVE)+" - "+Capital(Trim(X5_DESCRI)) ) dbSkip() End
CursorArrow()
If Len( aVetor ) == 0 Aviso( cTitulo, "No existe dados a consultar", {"Ok"} ) Return Endif
//+-----------------------------------------------+ //| Monta a tela para usurio visualizar consulta | //+-----------------------------------------------+ DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL @ 10,10 LISTBOX oLbx VAR nChave ITEMS aVetor SIZE 230,95 OF oDlg PIXEL oLbx:bChange := {|| cChave := SubStr(aVetor[nChave],1,2) } DEFINE SBUTTON FROM 107,183 TYPE 14 ACTION LoadTable(cChave) ENABLE OF oDlg DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg CENTER
Return
- 273 -
ADVPL Compl et o
Ex empl o: LI STBOX como l i st a si mpl es f u nes acessr i as
/*/ +----------------------------------------------------------------------------- | Funo | LISTBOXITE | Autor | ROBSON LUIZ |Data | | +----------------------------------------------------------------------------- | Descrio | Funo que carrega os dados da tabela selecionada em um | | | listbox. | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
STATIC FUNCTION LoadTable(cTabela)
LOCAL aTabela := {} LOCAL oDlg := NIL LOCAL oLbx := NIL
//+------------------------------------------------------------- //| O vetor pode receber carga de duas maneiras, acompanhe... | //+------------------------------------------------------------- //| Utilizando While/End | //+-------------------------------------------------------------
If Len(aTabela)==0 Aviso( "FIM", "Necessrio selecionar um item", {"Ok"} ) Return Endif
DEFINE MSDIALOG oDlg TITLE "Dados da tabela selecionada" FROM 300,400 TO 540,900 PIXEL @ 10,10 LISTBOX oLbx FIELDS HEADER "Tabela", "Descrio" SIZE 230,095 OF oDlg PIXEL oLbx:SetArray( aTabela ) oLbx:bLine := {|| {aTabela[oLbx:nAt,1],aTabela[oLbx:nAt,2]} } DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg ACTIVATE MSDIALOG oDlg
RETURN
- 274 -
ADVPL Compl et o
26.3.2. Li st Box ml t i pl as col unas
E Si nt ax e:
@ nLi nh a,nCol u n a LI STBOX oLi st box FI ELDS HEADER Header 1 , , Header X SI ZE nLar gu r a, nAl t u r a OF oObj et oRef UNI DADE
E Par met r os:
nLi n ha, nCol u na Posi o do obj et o Li st Box em funo da j anel a em que el e ser defi ni do. oLi st Box Obj et o Li st Box que ser cri ado. nLi st a Vari vel numri ca que cont m o nmero do i t em sel eci onado no Li st Box. Header 1 ,... , Header X St ri ngs i dent i fi cando os t t ul os das col unas do Gri d. nLar gu r a, nAl t u r a Di menses do obj et o Li st Box. oObj et oRef Obj et o di al og no qual o component e ser defi ni do. UNI DADE Uni dade de medi da das di menses: PI XEL. CHANGE Funo ou l i st a de expr esses que ser execut ada na sel eo de um i t em do Li st Box.
E Mt odos:
Set Ar r ay ( ) Mt odo o obj et o Li st Box que defi ne qual o array cont m os dados que sero exi bi dos no gri d.
E At r i but os:
bLi n e At ri but o do obj et o Li st Box que vi ncul a cada linha,col una do array, com cada cabeal ho do gri d.
E Apar nci a:
- 275 -
ADVPL Compl et o
Ex empl o: LI STBOX com gr i d
#include protheus.ch
/*/ +----------------------------------------------------------------------------- | Funo | LIST_BOX | Autor | ROBSON LUIZ |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao de um LISTBOX() com | | | grid. | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function List_Box()
Local aVetor := {} Local oDlg Local oLbx Local cTitulo := "Cadastro de Bancos" Local cFilSA6
// Carrega o vetor conforme a condio. While !Eof() .And. A6_FILIAL == cFilSA6 AADD( aVetor, { A6_COD, A6_AGENCIA, A6_NUMCON, A6_NOME, A6_NREDUZ, A6_BAIRRO, A6_MUN } ) dbSkip() End
// Se no houver dados no vetor, avisar usurio e abandonar rotina. If Len( aVetor ) == 0 Aviso( cTitulo, "No existe dados a consultar", {"Ok"} ) Return Endif
// Monta a tela para usurio visualizar consulta. DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL
// Primeira opo para montar o listbox. @ 10,10 LISTBOX oLbx FIELDS HEADER ; "Banco", "Agencia", "C/C", "Nome Banco", "Fantasia", "Bairro", "Municpio" ; SIZE 230,95 OF oDlg PIXEL
// Segunda opo para monta o listbox /* oLbx := TWBrowse():New(10,10,230,95,,aCabecalho,,oDlg,,,,,,,,,,,,.F.,,.T.,,.F.,,,) oLbx:SetArray( aVetor ) oLbx:bLine := {|| aEval(aVetor[oLbx:nAt],{|z,w| aVetor[oLbx:nAt,w] } ) } */
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg ACTIVATE MSDIALOG oDlg CENTER
Return
26.4. Scr ol l Box ( )
O Scr ol l Box o obj et o ut ili zado para permi t i r a um Di al og exi bi r barras de r ol agem vert i cai s e Hori zont ai s. Al gumas apli caes com obj et os defi nem aut omat i cament e o Scr oll Box, t ai s como:
E Enchoi ce( ) ou MsMGet ( ) E NewGet Dados( ) E Li st Box( )
Quando defi ni do um obj et o Scrol l Box, os demai s component es da j anel a devero refer enci ar est e obj et o e no mai s o obj et o Di al og.
Dest a forma o Scr oll Box at ri budo a um obj et o Di al og, e os component es ao Scr ol l Box.
O MsDi al og( ) Scr oll Box( ) O Scr oll Box( ) Component es Vi suai s
E Si nt ax e:
@ nLi n ha, nCol u na SCROLLBOX oScr ol l Box HORI ZONTAL VERTI CAL SI ZE nLar gu r a, nAl t u r a OF oObj et oRef BORDER
E Par met r os:
nLi n ha, nCol u na Posi o do obj et o Scrol lBox em funo da j anel a em que el e ser defi ni do. oScr ol l Box Obj et o Scrol l Box que ser cri ado. HORI ZONTAL Parmet r o que quando defi ni do habilit a a rgua de rol agem hori zont al . VERTI CAL Parmet r o que quando defi ni do habilit a a rgua de rol agem vert i cal . nLar gu r a, nAl t u r a Di menses do obj et o Scrol l Box. oObj et oRef Obj et o di al og no qual o component e ser defi ni do. BORDER
Parmet r o que quando defi ni do habilit a a exi bi o de uma borda de del i mi t ao do Scr oll Box em r el ao a out ros obj et os.
- 277 -
ADVPL Compl et o
E Apar nci a:
Ex empl o: Ut i l i zao de m l t i pl os Scr ol l Box es
#INCLUDE "PROTHEUS.CH"
/*/ +------------------------------------------------------------------------ | Funo | SCROLL() | Autor | ROBSON LUIZ |Data | | +------------------------------------------------------------------------ | Descrio | Programa que demonstra como montar uma enchoice apenas | | | com variveis, incluindo o recurso de rolagem. | +------------------------------------------------------------------------ | Uso | Curso ADVPL | +------------------------------------------------------------------------ /*/
USER FUNCTION Scroll()
LOCAL oDlg := NIL LOCAL oScroll := NIL LOCAL oLbx1 := NIL LOCAL oLbx2 := NIL LOCAL bGet := NIL LOCAL oGet := NIL LOCAL aAIIPM := {} LOCAL aTitulo := {} LOCAL nTop := 5 LOCAL nWidth := 0 LOCAL cGet := "" LOCAL cPict := "" LOCAL cVar := "" LOCAL n := 0
// Vetor para List Box AADD(aAIIPM,{"1234","DCD9815","26/03/03"}) AADD(aAIIPM,{"1234","DCD9815","26/03/03"}) AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
// Vetor para List Box AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"}) AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"}) AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
DEFINE MSDIALOG oDlg TITLE cTitulo FROM 122,0 TO 432,600 OF oDlg PIXEL @ 013,002 TO 154,192 LABEL "Parcelamento" OF oDlg PIXEL @ 013,195 TO 082,298 LABEL "Ttulos" OF oDlg PIXEL @ 083,195 TO 154,298 LABEL "AIIPM" OF oDlg PIXEL
//scrollbox @ 019,006 SCROLLBOX oScroll HORIZONTAL VERTICAL SIZE 131,182 OF oDlg BORDER For n:=1 TO Len(aSay)
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
ACTIVATE MSDIALOG oDlg CENTER ON INIT EnchoiceBar(oDlg,{||oDlg:End()},{||oDlg:End()})
RETURN
- 280 -
ADVPL Compl et o
26.5. Par amBox ( )
I mpl ement a uma t el a de parmet r os, que no necessi t a da cri ao de um grupo de pergunt as no SX1, e com funci onalidades que a Pergunt e( ) no di sponi biliza, t ai s como CheckBox e Radi oBut t ons.
Cada component e da ParamBox ser associ ado a um parmet r o Pri vat e denomi nado MV_PARxx, de acordo com a ordem do component e na t el a. Os par met r os da ParamBox podem ser ut ili zados de forma i ndependent e em uma r ot i na especfica, ou compl ement ando opes de uma r ot i na padro.
Cui dados
A PARAMBOX defi ne os parmet ros segui ndo o pri ncpi o das vari vei s MV_PARxx. Caso el a sej a ut ilizada em uma rot i na em conj unt o com parmet ros padres ( SX1 + Pergunt e( ) ) necessrio sal var os parmet r os padres, chamar a Parambox( ) , sal var o ret orno da Parambox( ) em vari vei s Pri vat e especfi cas ( MVPARBOXxx) e depoi s rest aurar os parmet ros padres, conforme o exempl o dest a document ao.
O obj et o COMBO( ) da PARAMBOX( ) possui um probl ema em seu r et orno: Caso o combo no sej a sel eci onado, el e mant er seu cont edo como numri co, caso sej a el e receber o t ext o da opo e no o nmero da opo. O exempl o dest a document ao i lust ra o t rat ament o de cdi go necessri o par a pr ot eger a apli cao.
Ao ut ilizar a ParamBox em uma funo que t ambm ut ili ze parmet ros defi ni dos pel a funo Pergunt e( ) deve- se:
E Sal var e rest aurar os MV_PARs da Pergunt e( ) E Defi ni r vari vei s Pri vat e prpri as para a Par amBox, as quai s i ro armazenar o cont edo das MV_PARs que est a r et orna.
E Si nt ax e: Par amBox ( aPar amBox , cTi t ul o, aRet , bOk , aBut t ons, l Cent er ed, ; nPosx , nPosy , oMai n Dl g, cLoad, l CanSav e, l User Sav e)
E Ret or no: l OK i ndi ca se a t el a de par met r os f oi cancel ada ou conf i r mada
E Par met r os:
aPar amBox Array de parmet r os de acordo com a r egra da ParamBox cTi t ul o Ti t ul o da j anel a de parmet r os aRet Array que ser passado por r efer enci a e ret ornado com o cont edo de cada parmet r o bOk Bl oco de cdi go para vali dao do OK da t el a de parmet r os aBut t ons Array cont endo a r egra para adi o de novos bot es ( al m do OK e Cancel ar) / / AADD( aBut t ons,{ nType,bAct i on,cText o} ) l Cent er ed Se a t el a ser exi bi da cent ral izada, quando a mesma no est i ver vi ncul ada a out ra j anel a nPosx Posi o i ni ci al - > linha ( Li nha fi nal : nPosX+ 274) nPosy Posi o i ni ci al - > col una ( Col una fi nal: nPosY+ 445) oMai nDl g Caso o ParamBox deva ser vi ncul ado a uma out ra t el a cLoad Nome do arqui vo aonde as respost as do usuri o sero sal vas / li das l CanSav e Se as r espost as para as pergunt as podem ser sal vas l User Sav e Se o usuri o pode sal var sua prpri a confi gurao.
- 281 -
ADVPL Compl et o
E Apar nci a:
E Regr as do ar r ay aPar amBox :
[ 1] Ti po do par met r o: Para cada t i po de parmet r o as demai s posi es do array vari am de cont edo conforme abai xo:
1 - MsGet [ 2] : Descri o [ 3] : St ri ng cont endo o i ni ci alizador do campo [ 4] : St ri ng cont endo a Pi ct ure do campo [ 5] : St ri ng cont endo a vali dao [ 6] : Consul t a F3 [ 7] : St ri ng cont endo a vali dao When [ 8] : Tamanho do MsGet [ 9] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?
2 - Combo [ 2] : Descri o [ 3] : Numri co cont endo a opo i ni ci al do combo [ 4] : Array cont endo as opes do Combo [ 5] : Tamanho do Combo [ 6] : Vali dao [ 7] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?
- 282 -
ADVPL Compl et o
3 - Radi o [ 2] : Descri o [ 3] : Numri co cont endo a opo i ni ci al do Radio [ 4] : Array cont endo as opes do Radi o [ 5] : Tamanho do Radi o [ 6] : Vali dao [ 7] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?
4 - Check Box ( Com Say ) [ 2] : Descri o [ 3] : I ndi cador Lgi co cont endo o i ni ci al do Check [ 4] : Text o do CheckBox [ 5] : Tamanho do Radi o [ 6] : Vali dao [ 7] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?
5 - Check Box ( l i n ha i nt ei r a ) [ 2] : Descri o [ 3] : I ndi cador Lgi co cont endo o i ni ci al do Check [ 4] : Tamanho do Radi o [ 5] : Vali dao [ 6] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?
6 - Fi l e [ 2] : Descri o [ 3] : St ri ng cont endo o i ni ci alizador do campo [ 4] : St ri ng cont endo a Pi ct ure do campo [ 5] : St ri ng cont endo a vali dao [ 6] : St ri ng cont endo a vali dao When [ 7] : Tamanho do MsGet [ 8] : Fl ag . T./ .F. Parmet r o Obri gat ri o ? [ 9] : Text o cont endo os t i pos de arqui vo Ex.: "Arqui vos .CSV | * . CSV" [ 10] : Di ret ri o i ni ci al do CGETFI LE( ) [ 11] : Parmet ros do CGETFI LE( )
7 - Mont agem de ex pr esso de f i l t r o [ 2] : Descri o [ 3] : Ali as da t abel a [ 4] : Fil t ro i ni ci al [ 5] : Opci onal - Cl ausula When Bot o Edi t ar Fi lt ro
8 - MsGet Passw or d [ 2] : Descri o [ 3] : St ri ng cont endo o i ni ci alizador do campo [ 4] : St ri ng cont endo a Pi ct ure do campo [ 5] : St ri ng cont endo a vali dao [ 6] : Consul t a F3 [ 7] : St ri ng cont endo a vali dao When [ 8] : Tamanho do MsGet [ 9] : Fl ag .T./ .F. Parmet r o Obri gat ri o ?
- 283 -
ADVPL Compl et o
9 - MsGet Say [ 2] : St ri ng Cont endo o Text o a ser apr esent ado [ 3] : Tamanho da St ri ng [ 4] : Al t ura da St ri ng [ 5] : Negri t o ( l gi co)
Ex empl o: Ut i l i zao da Par amBox ( )
#include protheus.ch
/*/ +----------------------------------------------------------------------- | Funo | xParamBox | Autor | ROBSON LUIZ |Data | | +----------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao da PARAMBOX como | | | forma alternativa de disponibilizar parmetros em um | | | processamento. | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
User Function xParamBox()
Local aRet := {} Local aParamBox := {} Local aCombo := {"Janeiro","Fevereiro","Maro","Abril","Maio","Junho","Julho","Agosto","Setembro ","Outubro","Novembro","Dezembro"} Local i := 0 Private cCadastro := "xParambox"
AADD(aParamBox,{1,"Produto",Space(15),"","","SB1","",0,.F.}) AADD(aParamBox,{2,"Tipo de cliente",1,aCombo,50,"",.F.})
AADD(aParamBox,{7,"Monte o filtro","SX5","X5_FILIAL==xFilial('SX5')"}) AADD(aParamBox,{8,"Digite a senha",Space(15),"","","","",80,.F.})
If ParamBox(aParamBox,"Teste Parmetros...",@aRet) For i:=1 To Len(aRet) MsgInfo(aRet[i],"Opo escolhida") Next Endif
Return
- 284 -
ADVPL Compl et o
Ex empl o: Pr ot egendo os par met r os MV_PARs da Per gunt e( ) em uso.
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | XPARBOX() | Autor | ARNALDO RAYMUNDO JR.|Data | | +----------------------------------------------------------------------------- | Descrio | Funo utilizando a PARAMBOX() e protegendo os MV_PARs | | | ativos do programa principal. | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/ Static Function XPARBOX(cPerg)
Local aParamBox := {} Local cTitulo := "Transferncia para Operao" Local bOk := {|| .T.} Local aButtons := {}; Local aRet := {} Local nPosx; Local nPosy; Local nX := 0 Local cLoad := "" Local lCentered := .T.; Local lCanSave := .F.; Local lUserSave := .F. Local aParamAtu := Array(4)
// Salva as perguntas padres antes da chamada da ParamBox For nX := 1 to Len(aParamAtu) aParamAtu [nX] := &("Mv_Par"+StrZero(nX,2)) Next nX
AADD(aParamBox,{2,"Atualiza taxa de depreciao?", 2, {"Sim","No"}, 100,; "AllwaysTrue()",.T.})
IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox) For nX := 1 to Len(aParamBox) If aParamBox[nX][1] == 1 &("MvParBox"+StrZero(nX,2)) := aRet[nX] ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C" &("MvParBox"+StrZero(nX,2)) := aScan(aParamBox[nX][4],; {|x| Alltrim(x) == aRet[nX]}) ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N" &("MvParBox"+StrZero(nX,2)) := aRet[nX] Endif Next nX ENDIF
// Restaura as perguntas padres apos a chamada da ParamBox For nX := 1 to Len(aParamAtu) &("Mv_Par"+StrZero(nX,2)) := aParamAtu[nX] Next nX
Return
- 285 -
ADVPL Compl et o
MDULO 05: I nt r oduo a or i ent ao obj et os
27. Concei t os de or i ent ao obj et os
O t ermo ori ent ao a obj et os pressupe uma organi zao de soft war e em t ermos de col eo de obj et os di scret os i ncorporando est rut ura e comport ament o prpri os. Est a abordagem de organi zao essenci al ment e di ferent e do desenvol vi ment o t radi ci onal de soft war e, onde est rut uras de dados e r ot i nas so desenvol vi das de forma apenas fracament e acopl adas.
Nest e t pi co sero os concei t os de programao ori ent ada a obj et os l i st ados abai xo. Est a breve vi so geral do paradi gma permi t i r ent ender mel hor os concei t os associ ados programao ori ent ada a obj et os e, em part i cul ar, s const rues i mpl ement adas at ravs da linguagem ADVPL.
E Obj et os E Her ana E At r i but os E Mt odos E Cl asses E Abst r ao E Gen er al i zao E Encapsu l ament o E Pol i mor f i smo
27.1. Def i ni es
Obj et o
Um obj et o uma ent i dade do mundo real que t em uma i dent idade. Obj et os podem represent ar ent i dades concr et as ( um arqui vo no meu comput ador, uma bi ci cl et a) ou ent i dades concei t uai s ( uma est r at gi a de j ogo, uma polt i ca de escal onament o em um si st ema operaci onal ) . Cada obj et o t er sua i dent i dade si gni fi ca que doi s obj et os so di st int os mesmo que el es apr esent em exat ament e as mesmas caract erst i cas.
Embora obj et os t enham exi st nci a prpri a no mundo r eal , em t ermos de l i nguagem de programao um obj et o necessi t a um mecani smo de i dent i fi cao. Est a i dent i fi cao de obj et o deve ser ni ca, uni forme e i ndependent e do cont edo do obj et o. Est e um dos mecani smos que permi t e a cri ao de col ees de obj et os, as quai s so t ambm obj et os em si .
A est rut ura de um obj et o r epr esent ada em t er mos de at ri but os. O comport ament o de um obj et o r epr esent ado pel o conj unt o de operaes que podem ser execut adas sobr e o obj et o.
- 286 -
ADVPL Compl et o
Cl asse
Obj et os com a mesma est rut ura e o mesmo comport ament o so agr upados em cl asses. Uma cl asse uma abst rao que descreve pr opri edades i mport ant es para uma apl i cao e si mpl esment e i gnora o r est o.
Cada cl asse descr eve um conj unt o ( possi vel ment e i nfi nit o) de obj et os i ndi vi duai s. Cada obj et o di t o ser uma i nst nci a de uma cl asse. Assi m, cada i nst nci a de uma cl asse t em seus prpri os val ores para cada at ri but o, mas di vi dem os nomes dos at ri but os e mt odos com as out ras i nst nci as da cl asse. I mpli ci t ament e, cada obj et o cont m uma r efer nci a para sua pr pri a cl asse, em out ras pal avras, el e sabe o que el e .
Fi gu r a: Represent ao de uma cl asse de obj et os
Fi gu r a: Represent ao de um obj et o i nst anci ado de uma cl asse
- 287 -
ADVPL Compl et o
Pol i mor f i smo
Pol i morfi smo si gni fi ca que a mesma operao pode se comport ar de forma di fer ent e em cl asses di fer ent es. Por exempl o, a oper ao move quando apl i cada a uma j anel a de um si st ema de i nt erfaces t em um comport ament o di st i nt o do que quando apli cada a uma pea de um j ogo de xadr ez. Um mt odo uma i mpl ement ao especfi ca de uma oper ao para uma cert a cl asse.
Pol i morfi smo t ambm i mpli ca que uma operao de uma mesma cl asse pode ser i mpl ement ada por mai s de um mt odo. O usuri o no pr eci sa saber quant as i mpl ement aes exi st em para uma operao, ou expli ci t ar qual mt odo deve ser ut ili zado: a li nguagem de programao deve ser capaz de sel eci onar o mt odo corr et o a part i r do nome da operao, cl asse do obj et o e ar gument os para a oper ao. Dest a for ma, novas cl asses podem ser adi ci onadas sem necessi dade de modi fi cao de cdi go j exi st ent e, poi s cada cl asse apenas defi ne os seus mt odos e at ri but os.
No mundo r eal , al guns obj et os e cl asses podem ser descri t os como casos especi ai s, ou especi ali zaes, de out r os obj et os e cl asses. Por exempl o, a cl asse de comput adores pessoai s com pr ocessador da linha 80x86 uma especi ali zao de comput ador es pessoai s, que por sua vez uma especi ali zao de comput adores. No desej vel que t udo que j foi descri t o para comput adores t enha de ser repet i do para comput ador es pessoai s ou para comput ador es pessoai s com pr ocessador da li nha 80x86.
Her ana
Herana o mecani smo do paradi gma de ori ent ao a obj et os que permi t e compart i lhar at ri but os e operaes ent re cl asses baseada em um r el aci onament o hi errqui co. Uma cl asse pode ser defi ni da de forma genri ca e depoi s refi nada sucessi vament e em t ermos de subcl asses ou cl asses deri vadas. Cada subcl asse i ncorpora, or herda, t odas as pr opri edades de sua super cl asse ( ou cl asse base) e adi ci ona suas propri edades ni cas e part i cul ares. As propri edades da cl asse base no pr eci sam ser r epet i das em cada cl asse deri vada. Est a capaci dade de fat orar as propri edades comuns de di versas cl asses em uma supercl asse pode reduzi r dramat i cament e a r epet i o de cdi go em um proj et o ou pr ograma, sendo uma das pri nci pai s vant agens da abordagem de ori ent ao a obj et os.
- 288 -
ADVPL Compl et o
27.2. Concei t os Bsi cos
A abordagem de ori ent ao a obj et os favor ece a apl i cao de di versos concei t os consi der ados fundament ai s para o desenvol vi ment o de bons programas, t ai s como abst rao e encapsul ament o.
Tai s concei t os no so excl usi vos dest a abordagem, mas so suport ados de forma mel hor no desenvol vi ment o ori ent ado a obj et os do que em out ras met odol ogi as.
Abst r ao
Abst rao consi st e de focal i zar nos aspect os essenci ai s i nerent es a uma ent i dade e i gnorar propri edades aci dent ai s . Em t ermos de desenvol vi ment o de si st emas, i st o si gni fi ca concent rar- se no que um obj et o e faz ant es de se deci di r como el e ser i mpl ement ado. O uso de abst rao pr eserva a li berdade par a t omar deci ses de desenvol vi ment o ou de i mpl ement ao apenas quando h um mel hor ent endi ment o do pr obl ema a ser r esol vi do.
Mui t as linguagens de programao modernas suport am o concei t o de abst rao de dados; por m, o uso de abst r ao j unt ament e com poli morfi smo e herana, como suport ado em ori ent ao a obj et os, um mecani smo mui t o mai s poder oso.
O uso apr opri ado de abst rao permi t e que um mesmo model o concei t ual ( ori ent ao a obj et os) sej a ut ilizado para t odas as fases de desenvol vi ment o de um si st ema, desde sua anli se at sua document ao.
Encapsu l ament o
Encapsul ament o, t ambm r eferi do como esconder i nformao, consi st e em separar os aspect os ext ernos de um obj et o, os quai s so acessvei s a out ros obj et os, dos det al hes i nt ernos de i mpl ement ao do obj et o, os quai s permanecem escondi dos dos out r os obj et os. O uso de encapsul ament o evi t a que um pr ogr ama t orne- se t o i nt erdependent e que uma pequena mudana t enha grandes efei t os col at erai s.
O uso de encapsul ament o permi t e que a i mplement ao de um obj et o possa ser modi fi cada sem afet ar as apl i caes que usam est e obj et o. Mot i vos para modi ficar a i mpl ement ao de um obj et o podem ser , por exempl o, mel hori a de desempenho, corr eo de er ros e mudana de pl at aforma de execuo.
Assi m como abst rao, o concei t o de Encapsul ament o no excl usi vo da abordagem de ori ent ao a obj et os. Ent ret ant o, a habili dade de se combi nar est rut ura de dados e comport ament o em uma ni ca ent i dade t or na a Encapsul ament o mai s el egant e e mai s poderosa do que em linguagens convenci onai s que separam est rut uras de dados e comport ament o.
Compar t i l h ament o
Tcni cas de ori ent ao a obj et os pr omovem compart il hament o em di versos nvei s di st i nt os. Herana de est rut ura de dados e comport ament o permi t e que est rut uras comuns sej am compart il hadas ent re di versas cl asses deri vadas si mil ares sem r edundnci a. O compart il hament o de cdi go usando herana uma das grandes vant agens da ori ent ao a obj et os. Ai nda mai s i mport ant e que a economi a de cdi go a cl areza concei t ual de reconhecer que operaes di fer ent es so na verdade a mesma coi sa, o que reduz o nmero de casos di st i nt os que devem ser ent endi dos e anali sados.
- 289 -
ADVPL Compl et o
O desenvol vi ment o ori ent ado a obj et os no apenas permi t e que a i nformao dent r o de um proj et o sej a compart il hada como t ambm ofer ece a possi bili dade de reaprovei t ar pr oj et os e cdi go em proj et os fut uros. As ferrament as para al canar est e compart il hament o, t ai s como abst rao, Encapsul ament o e herana, est o present es na met odol ogi a; uma est rat gi a de reuso ent re pr oj et os a defi ni o de bi bli ot ecas de el ement os reusvei s. Ent r et ant o, ori ent ao a obj et os no uma frmul a mgi ca para al canar reusabilidade; para t ant o, preci so pl anej ament o e di sci pli na para pensar em t ermos genri cos, no vol t ados si mpl esment e para a apli cao cor rent e.
27.3. O Model o de Obj et os ( OMT)
Um model o de obj et os busca capt urar a est r ut ura est t i ca de um si st ema most rando os obj et os exi st ent es, seus r el aci onament os, e at ri but os e operaes que caract eri zam cada cl asse de obj et os. at ravs do uso dest e model o que se enfat i za o desenvol vi ment o em t ermos de obj et os ao i nvs de mecani smos t radi ci onai s de desenvol vi ment o baseado em funci onali dades, permi t indo uma r epr esent ao mai s prxi ma do mundo r eal .
Uma vez que as pri nci pai s defi ni es e concei t os da abordagem de ori ent ao a obj et os est o defi ni dos, possvel i nt roduzi r o model o de obj et os que ser adot ado ao l ongo dest e t ext o. O model o apr esent ado um subconj unt o do model o OMT ( Obj ect Model i ng Technique) , propost o por Rumbaugh ent r e out ros. Est e model o t ambm i nt roduz uma repr esent ao di agramt i ca para est e model o, a qual ser t ambm apresent ada aqui .
27.3.1. Obj et os e Cl asses
Obj et o defi ni do nest e model o como um concei t o, abst rao ou coi sa com li mi t es e si gni fi cados bem defi ni dos para a apli cao em quest o. Obj et os t m doi s propsi t os: promover o ent endi ment o do mundo r eal e suport ar uma base prt i ca para uma i mpl ement ao comput aci onal . No exi st e uma manei ra corr et a de decompor um probl ema em obj et os; est a decomposi o depende do j ul gament o do proj et i st a e da nat ureza do probl ema. Todos os obj et os t m i dent idade prpri a e so di st i nguvei s.
Uma cl asse de obj et os descr eve um grupo de obj et os com propri edades ( at ri but os) si mil ares, comport ament os ( oper aes) si mil ares, rel acionament os comuns com out ros obj et os e uma semnt i ca comum. Por exempl o, Pessoa e Companhi a so cl asses de obj et os. Cada pessoa t em um nome e uma i dade; est es seri am os at ri but os comuns da cl asse. Companhi as t ambm podem t er os mesmos at ri but os nome e i dade defi ni dos. Ent ret ant o, devi do di st i no semnt i ca el as provavel ment e est ari am agrupados em out ra cl asse que no Pessoa. Como se pode obser var , o agrupament o em cl asses no l eva em cont a apenas o compart i l hament o de propri edades.
Todo obj et o sabe a que cl asse el e pert ence, ou sej a, a cl asse de um obj et o um at ri but o i mplci t o do obj et o. Est e concei t o suport ado na mai or part e das l inguagens de programao ori ent ada a obj et os, i nclusi ve em ADVPL.
OMT defi ne doi s t i pos de di agramas de obj et os, di agramas de cl asses e di agramas de i nst nci as. Um di agrama de cl asse um esquema, ou sej a, um padro ou gabari t o que descr eve as mui t as possvei s inst nci as de dados. Um di agrama de i nst nci as descr eve como um conj unt o part i cul ar de obj et os est r el acionado. Di agramas de i nst nci as so t ei s para apresent ar exempl os e document ar casos de t est es; di agramas de cl asses t m uso mai s ampl os. A Fi gura abai xo apresent a a not ao adot ada para est es di agramas.
- 290 -
ADVPL Compl et o
Fi gu r a: Represent ao di agramt i ca de OMT para cl asses e obj et os
O agrupament o de obj et os em cl asses um poder oso mecani smo de abst rao. Dest a forma, possvel general i zar defi ni es comuns para uma cl asse de obj et os, ao i nvs de repet - l as para cada obj et o em part i cul ar. Est a uma das formas de r eut ili zao e economi a que a abordagem de ori ent ao a obj et os suport a.
27.3.2. At r i but os
Um at ri but o um val or de dado assumi do pelos obj et os de uma cl asse. Nome, i dade e peso so exempl os de at ri but os de obj et os Pessoa. Cor , peso e model o so possvei s at ri but os de obj et os Car ro. Cada at ri but o t em um val or para cada i nst nci a de obj et o. Por exempl o, o at ri but o i dade t em val or ` ` 29' ' no obj et o Pedro Y. Em out ras pal avras, Pedr o Y t em 29 anos de i dade. Di ferent es i nst nci as de obj et os podem t er o mesmo val or para um dado at ri but o. Cada nome de at ri but o ni co para uma dada cl asse, mas no necessari ament e ni co ent r e t odas as cl asses. Por exempl o, ambos Pessoa e Companhi a podem t er um at ri but o chamado endereo.
No di agrama de cl asses, at ri but os so li st ados no segundo segment o da cai xa que r epr esent a a cl asse. O nome do at ri but o pode ser segui do por det al hes opci onais, t ai s como o t i po de dado assumi do e val or defaul t . A Fi gura abai xo most ra est a r epr esent ao.
Fi gu r a: Represent ao di agramt i ca de OMT para cl asses e obj et os com at ri but os
No se deve confundi r i dent i fi cadores i nt ernos de obj et os com at ri but os do mundo r eal . I dent i fi cadores de obj et os so uma conveni nci a de i mpl ement ao, e no t m nenhum si gni fi cado para o domni o da apli cao. Por exempl o, CI C e RG no so i dent i fi cador es de obj et os, mas si m verdadei ros at ri but os do mundo r eal .
- 291 -
ADVPL Compl et o
27.3.3. Oper aes e Mt odos
Uma operao uma funo ou t ransformao que pode ser apli cada a ou por obj et os em uma cl asse. Por exempl o, abri r, sal var e i mpri mi r so operaes que podem ser apl i cadas a obj et os da cl asse Arqui vo. Todos os obj et os em uma cl asse compart i l ham as mesmas operaes.
Toda operao t em um obj et o- al vo como um argument o i mplci t o. O comport ament o de uma operao depende da cl asse de seu al vo. Como um obj et o sabe qual sua cl asse, possvel escol her a i mpl ement ao corr et a da operao. Al m di st o, out ros ar gument os ( parmet ros) podem ser necessri os para uma operao.
Uma mesma operao pode se apl i car a di ver sas cl asses di fer ent es. Uma operao como est a di t a ser pol i mrfi ca, ou sej a, el a pode assumir di st i nt as formas em cl asses di ferent es.
Um mt odo a i mpl ement ao de uma operao para uma cl asse. Por exempl o, a operao i mpri mi r pode ser i mplement ada de forma di st int a, dependendo se o arqui vo a ser i mpresso cont m apenas t ext o ASCI I , um arqui vo de um processador de t ext o ou bi nri o. Todos est es mt odos execut am a mesma operao: i mpri mi r o arqui vo; por m, cada mt odo ser i mpl ement ado por um di ferent e cdi go.
A assi nat ura de um mt odo dada pel o nmer o e t i pos de argument os do mt odo, assi m como por seu val or de ret orno. Uma est rat gi a de desenvol vi ment o recomendvel mant er assi nat uras coerent es para mt odos i mpl ement ando uma dada operao, assi m como um comport ament o consi st ent e ent r e as i mpl ement aes.
Em t ermos de di agramas OMT, operaes so li st adas na t er cei ra part e da cai xa de uma cl asse. Cada nome de operao pode ser segui da por det al hes opci onai s, t ai s como l i st a de argument os e t i po de r et orno. A l i st a de argument os apr esent ada ent re par nt eses aps o nome da operao. Uma li st a de argument os vazi a i ndi ca que a operao no t em argument os; da ausnci a da li st a de argument os no se pode concl ui r nada. O t i po de resul t ado vem aps a li st a de argument os, sendo precedi do por doi s pont os ( : ) . Caso a operao r et orne r esul t ado, est e no deve ser omi t i do, poi s est a a for ma de di st i ngui - l a de operaes que no ret ornam r esul t ado. Exempl os de r epr esent ao de operaes em OMT so apresent ados na Fi gura abai xo:
Fi gu r a: Represent ao di agramt i ca de OMT para cl asses com at ri but os e operaes
- 292 -
ADVPL Compl et o
27.3.4. Sugest es de desenvol v i ment o
Na const ruo de um model o para uma apli cao, as segui nt es sugest es devem ser observadas a fi m de se obt er r esul t ados cl aros e consi st ent es:
E No comece a const r ui r um model o de obj et os si mpl esment e defi ni ndo cl asses, associ aes e heranas. A pri mei ra coi sa a se fazer ent ender o probl ema a ser resol vi do. E Tent e mant er seu model o si mpl es. Evi t e compl icaes desnecessri as. E Escol ha nomes cui dadosament e. Nomes so i mport ant es e carr egam conot aes poderosas. Nomes devem ser descri t i vos, cl aros e no dei xar ambi gidades. A escol ha de bons nomes um dos aspect os mai s di fcei s da model agem. E No ent er re apont ador es ou out ras r efer nci as a obj et os dent ro de obj et os como at ri but os. Ao i nvs di st o, model e est as refer nci as como associ aes. I st o t orna o model o mai s cl aro e i ndependent e da i mpl ement ao. E Tent e evi t ar associ aes que envol vam t rs ou mai s cl asses de obj et os. Mui t as vezes, est es t i pos de associ aes podem ser decompost os em t ermos de associ aes bi nri as, t ornando o model o mai s cl aro. E No t ransfi ra os at ri but os de l i gao para dent r o de uma das cl asses. E Tent e evi t ar hi erarqui as de generali zao mui t o profundas. E No se surpr eenda se o seu model o necessi t ar vri as revi ses; i st o o normal . E Sempr e document e seus model os de obj et os. O di agrama pode especi fi car a est rut ur a do model o, mas nem sempre sufi ci ent e para descr ever as razes por t rs da defi ni o do model o. Uma expl icao escri t a pode cl ari fi car pont os t ai s como si gni fi cado de nomes e expli car a razo para cada cl asse e r el aci onament o. E Nem sempr e t odas as const rues OMT so necessri as para descrever uma apli cao. Use apenas aquel as que forem adequadas para o pr obl ema anali sado.
- 293 -
ADVPL Compl et o
28. Or i ent ao a obj et os em ADVPL
Nest e t pi co ser det al hada a forma com a qual a li nguagem ADVPL impl ement a os concei t os de ori ent ao a obj et os e a si nt axe ut ilizada no desenvol vi ment o de apl icaes.
28.1. Si nt ax e e oper ador es par a or i ent ao a obj et os
Pal av r as r eser v adas
CLASS CONSTRUCTOR DATA ENDCLASS FROM METHOD SELF
CLASS
Descr i o Ut ilizada na decl arao de uma cl asse de obj et os, e para i dent i fi car a qual cl asse um det ermi nado mt odo est rel aci onado. Si nt ax e 1 CLASS < nome_da_cl asse> Si nt ax e 2 METHOD < nome_do_mt odo> CLASS < nome_da_cl asse>
CONSTRUCTOR
Descr i o Ut ilizada na especi fi cao de um mt odo especi al , defi ni do como const r ut or, o qual t em a funo de ret ornar um novo obj et o com os at ri but os e mt odos defi ni dos na cl asse. Si nt ax e METHOD < nome_do_mt odo( ) > CONSTRUCTOR
DATA
Descr i o Ut ilizada na decl arao de um at ri but o da cl asse de obj et os. Si nt ax e DATA < nome_do_at ri but o>
ENDCLASS
Descr i o Ut ilizada na fi nalizao da decl arao da cl asse. Si nt ax e ENDCLASS
- 294 -
ADVPL Compl et o
FROM
Descr i o Ut ilizada na decl arao de uma cl asse, a qual ser uma i nst nci a de uma super cl asse, r ecebendo os at ri but os e mt odos nel a defi ni dos, i mpl ement ando a herana ent re cl asses. Si nt ax e CLASS < nome_da_cl asse> FROM < nome_da_supercl asse>
METHOD
Descr i o Ut ilizada na decl arao do pr ot t i po do mt odo de uma cl asse de obj et os, e na decl arao do mt odo efet i vament e desenvol vi do. Si nt ax e 1 METHOD < nome_do_mt odo( ) > Si nt ax e 2 METHOD < nome_do_mt odo( < parmet r os> ) > CLASS < nome_da_cl asse>
SELF
Descr i o Ut ilizada pri nci pal ment e pel o mt odo const rut or para ret ornar o obj et o cri ado para a apl i cao. Si nt ax e Ret urn SELF
Oper ador es especf i cos
: Ut ilizado para referenci ar um mt odo ou um at ri but o de um obj et o j i nst anci ado. Ex empl o 1 cNome : = oAl uno: sNome Ex empl o 2 cNot a : = oAl uno: Get Not a( cCur so)
: : Ut ilizado pel os mt odos de uma cl asse para r efer enci ar os at ri but os di sponvei s para o obj et o. Ex empl o
28.2. Est r ut ur a de uma cl asse de obj et os em ADVPL
Decl ar ao da cl asse
A decl arao de uma cl asse da li nguagem ADVPL real i zada de forma si mil ar a decl arao de uma funo, com a diferena de que uma cl asse no possui di fer enci ao quant o a sua procednci a, como uma Funct i on( ) e uma User Funct i on( ) , e no possui vi si bili dade li mi t ada como uma St at i c Funct ion( ) .
Exemplo:
#include protheus.ch CLASS Pessoa()
Def i ni o dos at r i but os
Segui ndo o mesmo pri ncpi o de vari vei s no t ipadas, os at ri but os das cl asses em ADVPL no preci sam t er seu t i po especi fi cado, sendo necessri o apenas det ermi nar seus nomes.
Dest a forma recomendado o uso da not ao Hngara t ambm para a defi ni o dos at ri but os de forma a faci lit ar a anli se, i nt erpret ao e ut i li zao da cl asse e seus obj et os i nst anci ados.
Exemplo:
#include protheus.ch CLASS Pessoa()
DATA cNome DATA nIdade
Pr ot ot i pao dos mt odos
A prot ot i pao dos mt odos uma r egra ut ili zada pel as li nguagens ori ent adas a obj et os, at ravs da qual so especi fi cadas as operaes que podem ser real i zadas pel o obj et o, di ferenci ando os mt odos de out ras funes i nt ernas de uso da cl asse, e para especi fi car quai s so os mt odos const rut or es.
Em li nguagens t i padas, na prot ot i pao dos mt odos necessrio defi ni r quai s so os parmet ros r ecebi dos e seus r espect i vos t i pos, al m de defi ni r o t ipo do ret orno que ser forneci do. Em ADVPL necessri o apenas descrever a chamada do mt odo e caso necessri o se o mesmo um const rut or .
28.3. I mpl ement ao dos mt odos de uma cl asse em ADVPL
Mt odo Con st r ut or
O mt odo const rut or possui a caract erst i ca de ret ornar um obj et o com o t i po da cl asse da qual o mesmo foi i nst anci ado. Por est a razo di z- se que o t i po do obj et o i nst anci ado a cl asse daquel e obj et o.
Para produzi r est e efei t o, o mt odo const rut or ut ili za a pal avra r eservada SELF , a qual ut ili zada pel a li nguagem ADVPL para r efer nci a a prpri a cl asse daquel e obj et o.
Os at ri but os defi ni dos para uma cl asse com a ut ili zao da pal avra r eservada DATA em sua decl arao podem ser mani pul ados por seus mt odos ut i lizando o operador : : .
A ut ilizao dest e operador permi t e ao i nt erpret ador ADVPL di ferenci ar vari vei s comuns cri adas pel as funes e mt odos que ut ili zam est e obj et o dos at ri but os propri ament e di t os.
Ut i l i zao de f unes em u ma cl asse de obj et os
Conforme menci onado ant eri orment e, a ut i lizao da pal avra reservada METHOD permi t e ao i nt erpr et ador ADVPL di fer enci ar os mt odos que podem ser ut ili zados at ravs da refernci a do obj et o de funes i nt ernas descri t as i nt ernament e na cl asse.
I st o permi t e a ut ili zao de funes t radi cionai s da li nguagem ADVPL, como as St at i c Funct i ons( ) as quai s sero vi svei s apenas a cl asse, e no podero ser r efer enci adas di ret ament e pel o obj et o.
Exemplo parte 01: Funo CadPessoa (usuria da classe Pessoa)
#include protheus.ch
USER FUNCTION CadPessoa()
Local oPessoa Local cNome := Local dNascimento:= CTOD() Local aDados := {}
STATIC FUNCTION CalcIdade(dNascimento) Local nIdade nIdade := dDataBase - dNascimento RETURN nIdade
Her ana ent r e cl asses
Segui ndo o principi o da ori ent ao a obj et os, a li nguagem ADVPL permi t e que uma cl asse receba por herana os mt odos e at ri but os defi ni dos em uma out ra cl asse, a qual t ornasse a super cl asse dest a i nst nci a.
Para ut ili zar est e r ecur so deve ser ut ili zada a pal avra reservada FROM na decl arao da cl asse, especi fi cando a super cl asse que ser refer enci ada.
Em ADVPL o exempl o prt i co dest a si t uao a supercl asse TSr vObj ect , a qual ut ilizada pela mai ori a das cl asses e component es da i nt erface vi sual , como demonst rado no mdul o 06.
// Os objetos da classe Aluno, possuem todos os mtodos e atributos da classe Pessoa, alm // dos mtodos e atributos declarados na prpria classe.
Const r ut or par a cl asses com her ana
Quant o ut ili zado o r ecurso de herana ent re cl asses, o const rut or da cl asse i nst anci ada deve receber um t rat ament o adi ci onal , para que o obj et o i nst anci ado sej a cri ado com os at ri but os e mt odos defi ni dos na super cl asse.
Nest es casos, l ogo aps a defi ni o do mt odo const rut or da cl asse, dever ser execut ado o mt odo const rut or da supercl asse.
Exemplo parte 03: Mtodo Construtor da classe Aluno
METHOD Create(cNome,dNascimento,nID) :Create(cNome,dNascimento) // Chamada do mtodo construtor da classe Pessoa.
::nID := ID
Return SELF
- 300 -
ADVPL Compl et o
MDULO 06: ADVPL Or i ent ado obj et os I
Nest e mdul o sero t r at ados os component es e obj et os da i nt erface vi sual da li nguagem ADVPL, permi t i ndo o desenvol vi ment o de apli caes com i nt erfaces grfi cas com si nt axe ori ent ada a obj et os.
29. Component es da i nt er f ace vi sual do ADVPL
A linguagem ADVPL possui di versos component es vi suai s e auxiliares, os quai s podem ser represent ados ut i lizando a est rut ura abai xo:
. Cl asses da I nt er f ace Vi sual
Tsr vobj ect . Cl asses Aux i l i ar es
Tfont
. Cl asses de Janel as
Msdialog Tdialog Twindow
. Cl asses de Component es
Tcont r ol
. Cl asses de Component es Vi suai s Br get ddb Mscalend Mscalendgr id Msselbr Msworkt ime Sbut t on Tbar Tbit map Tbr owsebut t on Tbt nbmp Tbt nbmp2 Tbut t on Tcbr owse Tcheckbox Tcolor t r iangle Tcombobox Tfolder Tfont Tget Tgr oup Thbut t on Tibrowser Tlist box Tmenu Tmenubar Tmet er Tmsgr aphic Tmsgbar Tmult ibt n Tmult iget Tolecont ainer Tpageview Tpanel Tr admenu Tsbr owse Tsay Tscr ollbox Tsimpleedit or Tslider
- 301 -
ADVPL Compl et o
. Cl asses de Component es Vi suai s Tsplit t er Tt abs Tt oolbox Twbrowse Vcbrowse
Cl asses da i nt er f ace v i su al
TSRVOBJECT( )
Descr i o Cl asse abst rat a i ni ci al de t odas as cl asses de i nt erface do ADVPL. No deve ser i nst anci ada di ret ament e.
Cl asses aux i l i ar es
TFONT( )
Descr i o Cl asse de obj et os que defi ne a font e do t ext o ut ilizado nos cont r ol es vi suai s.
Cl asses de j an el as
MSDI ALOG( )
Descr i o Cl asse de obj et os que deve ser ut ili zada como padro de j anel a para ent rada de dados. MSDi al og um t i po de j anel a di l ogo modal , i st o , no permi t e que out ra j anel a at i va receba dados enquant o est a est i ver at i va.
TDI ALOG( )
Descr i o Cl asse de obj et os do t i po di l ogo de ent rada de dados, sendo seu uso reservado. Recomenda- se ut i lizar a cl asse MSDi al og que herdada dest a cl asse.
TWI NDOW( )
Descr i o Cl asse de obj et os do t i po di l ogo pri nci pal de pr ograma. Dever exi st i r apenas uma i nst nci a dest e obj et o na execuo do programa.
Cl asses de componen t es
TCONTROL( )
Descr i o Cl asse abst rat a comum ent re t odos os component es vi suai s edi t vei s. No deve ser i nst anci ada di ret ament e.
- 302 -
ADVPL Compl et o
Cl asses de componen t es v i suai s
BRGETDDB( )
Descr i o Cl asse de obj et os vi suais do t i po Gri d.
MSCALEND( )
Descr i o Cl asse de obj et os vi suais do t i po Cal endri o.
MSCALENDGRI D( )
Descr i o Cl asse de obj et os vi suais do t i po Grade de Perodos.
MSSELBR( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Gri d
MSWORKTI ME( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Bar r a de Perodo.
SBUTTON( )
Descr i o Cl asse de obj et os vi suais do t i po bot o, o qual pode possui r i magens padres associ adas ao seu t i po.
TBAR( )
Descr i o Cl asse de obj et os vi suais do t i po Barra Superi or .
TBI TMAP( )
Descr i o Cl asse de obj et os vi suais que per mi t e a exi bi o de uma i magem.
TBROWSEBUTTON( )
Descr i o Cl asse de obj et os vi suais do t i po bot o no format o padro ut ili zado em br owses da apl i cao.
TBTNBMP( )
Descr i o Cl asse de obj et os vi suais do t i po bot o, o qual permi t e que sej a vi ncul ada uma i magem ao cont r ol e.
- 303 -
ADVPL Compl et o
TBTNBMP2 ( )
Descr i o Cl asse de obj et os vi suais do t i po bot o, o qual permi t e a exi bi o de uma i magem ou de um popup.
TBUTTON( )
Descr i o Cl asse de obj et os vi suais do t i po bot o, o qual permi t e a ut i lizao de t ext o para sua i dent i fi cao.
TCBROWSE( )
Descr i o Cl asse de obj et os vi suais do t i po Gri d.
TCHECKBOX( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - CheckBox.
TCOLORTRI ANGLE( )
Descr i o Cl asse de obj et os vi suais do t i po Pal et a de Cor es.
TCOMBOBOX( )
Descr i o Cl asse de obj et os vi suais do t i po t ComboBox, a qual cri a uma ent rada de dados com ml t ipla escol ha com i t em defi ni do em uma l i st a vert i cal , aci onada por F4 ou pel o bot o esquer do l ocali zado na part e di rei t a do cont rol e. A vari vel associ ada ao cont rol e t er o val or de um dos i t ens sel eci onados ou no caso de uma li st a i ndexada, o val or de seu ndi ce.
TFOLDER( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Fol der .
TGET( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Get , a qual cri a um cont r ol e que armazena ou al t era o cont edo de uma vari vel at ravs de di gi t ao. O cont edo da vari vel s modi fi cado quando o cont r ol e perde o foco de edi o para out ro cont r ol e.
TGROUP( )
Descr i o Cl asse de obj et os vi suais do t i po pai nel t Group, a qual cri a um pai nel onde cont rol es vi suai s podem ser agrupados ou cl assi fi cados. Nest e pai nel cri ada uma borda com t t ul o em vol t a dos cont rol es agrupados.
- 304 -
ADVPL Compl et o
THBUTTON( )
Descr i o Cl asse de obj et os vi suais do t i po bot o com hi perl i nk.
TI BROWSER( )
Descr i o Cl asse de obj et os vi suais do t i po Pgi na de I nt ernet , sendo necessri o i ncl ui r a cl ausul a Browser Enabl ed= 1 no Confi g do Remot e. I NI
TLI STBOX( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Li st box, a qual cri a uma j anel a com i t ens sel eci onvei s e barra de r ol agem. Ao sel eci onar um i t em, uma vari vel at ualizada com o cont edo do i t em sel eci onado.
TMENU( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Menu.
TMENUBAR( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Bar r a de Menu.
TMETER( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Met er, a qual exi be uma rgua ( gauge) de processament o, descr evendo o andament o de um processo at ravs da exi bi o de uma barra horizont al .
TMSGRAPHI C( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Grfi co.
TMSGBAR( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Rodap.
TMULTI BTN( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - Ml t i pl os bot es.
TMULTI GET( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e - edi o de t ext o de ml t ipl as linhas.
- 305 -
ADVPL Compl et o
TOLECONTAI NER( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e, a qual permi t e a cri ao de um bot o vi ncul ado a um obj et o OLE.
TPAGEVI EW( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e, que permi t e a vi suali zao de arqui vos no format o gerado pel o spool de i mpresso do Prot heus.
TPANEL( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Panel , a qual permi t e cri ar um pai nel est t i co, onde podem ser cri ados out r os cont rol es com o obj et i vo de organi zar ou agrupar component es vi suai s.
TRADMENU( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e TRadMenu, a qual permi t e cri ar um cont r ol e vi sual no format o Radi o But t on.
TSBROWSE( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e TSBrowse, a qual permi t e cri ar um cont r ol e vi sual do t i po Gri d.
TSAY( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Say, a qual exi be o cont edo de t ext o est t i co sobre uma j anel a ou cont r ol e pr evi ament e defi ni dos.
TSCROLLBOX( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Scr oll box, a qual permi t e cri ar um pai nel com scr oll desli zant es nas l at er ai s ( hori zont ai s e vert i cai s) do cont r ol e.
TSI MPLEEDI TOR( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Si mpl eEdi t or, a qual permi t e cri ar um cont rol e vi sual para edi o de t ext os com r ecur sos si mpl es, como o Not ePad
TSLI DER( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Slider, a qual permi t e cri ar um cont r ol e vi sual do t i po bot o desli zant e.
TSPLI TTER( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Spli t t er, a qual permi t e cri ar um cont r ol e vi sual do t i po di vi sor.
- 306 -
ADVPL Compl et o
TTABS( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e TTabs, a qual permi t e cri ar um cont r ol e vi sual do t i po past a.
TTOOLBOX( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e t Tool box, a qual permi t e cri ar um cont r ol e vi sual para agrupar di fer ent es obj et os.
TWBROWSE( )
Descr i o Cl asse de obj et os vi suais do t i po cont r ol e TWBrowse, a qual permi t e cri ar um cont r ol e vi sual do t i po Gri d.
VCBROWSE( ) Descr i o Cl asse de obj et os vi suais do t i po cont r ol e VCBrowse, a qual permi t e cri ar um cont r ol e vi sual do t i po Gri d.
Document ao dos component es da i nt er f ace v i su al
Os component es da i nt er face vi sual da linguagem ADVPL ut ili zados nest e t r ei nament o est o document ados na seo Gui a de Refernci a, ao fi nal dest e mat eri al .
Para vi sualizar a document ao compl et a de t odos os component es menci onados nest e capt ul o deve ser acesso o si t e DEM Document ao El et r ni ca Mi crosi ga ( dem.mi crosi ga.com.br) confor me abai xo:
- 307 -
ADVPL Compl et o
29.1. Par t i cul ar i dades dos component es v i suai s
29.1.1. Conf i gur ando as cor es par a os component es
Os component es vi suai s da li nguagem ADVPL ut ilizam o padro de cores RGB.
As cor es dest e padro so defi ni das pel a seguint e fr mul a, a qual deve ser aval i ada t endo como base a pal et a de cor es no format o RGB:
nCor : = n Ver mel ho + ( nVer de * 25 6) + ( n Azul * 65 536)
Fi gu r a: Pal et a de cor es no f or mat o RGB
Com base nest a pal et a, podemos defi ni r os val ores das segui nt es cores bsi cas:
Cor R G B Val or Pret o 0 0 0 0 Azul 0 0 255 16711680 Verde 0 255 0 65280 Ci ano 0 255 255 16776960 Vermel ho 255 0 0 255 Rosa 255 0 255 16711935 Amarel o 255 255 0 65535 Branco 255 255 255 16777215
- 308 -
ADVPL Compl et o
Para at ri bui r as cor es aos obj et os vi suai s devem ser obser vados os at r i but os ut ili zados para est es fi ns em cada obj et o, como por exempl o:
MSDI ALOG( )
nCl r Pane Cor de fundo do pai nel nCl r Tex t Cor da font e das l et ras do pai nel
TSAY( )
nCl r Pane Cor de fundo do pai nel nCl r Tex t Cor da font e das l et ras do pai nel
Funo RGB( )
A li nguagem ADVPL possui a funo RGB( ) a qual ret orna o val or da cor a ser defi ni do, de acordo com a paramet ri zao de cada um dos el ement os da pal et a RGB.
RGB( nRed, nGr een, n Bl u e)
nRed Val or de 0- 255 para o el ement o vermel ho da pal et a RGB nGr een Val or de 0- 255 para o el ement o verde da pal et a RGB nBl ue Val or de 0- 255 para o el ement o azul da pal et a RGB Ret or no Val or a ser defi ni do para o at ri but o cor do component e
- 309 -
ADVPL Compl et o
30. Apl i caes com a i nt er f ace vi sual do ADVPL
A li nguagem ADVPL possui int erfaces vi suai s pr- defi ni das que auxiliam no desenvol vi ment o de apl i caes mai s compl et as, combi nando est as i nt erfaces com os component es vi suais demonst rados ant eri or ment e.
Di dat i cament e as i nt erfaces vi suai s pr- defi ni das da li nguagem ADVPL podem ser di vidi das em t rs grupos:
E Capt ur a de i nf or maes si mpl es ou Mul t i - Get s; E Capt ur a de ml t i pl as i nf or maes ou Mu l t i - Li nes; E Bar r as de bot es
30.1. Capt ur a de i nf or maes si mpl es ( Mul t i - Get s)
Em ADVPL, as t el as de capt ura de i nformaes compost as por ml t i pl os campos di gi t vei s acompanhados de seus r espect i vos t ext os expl i cat i vos so comument e chamados de Enchoi ces.
Um Enchoi ce pode ser facil ment e ent endi da como di versos conj unt os de obj et os TSay e TGet ali nhados de forma a vi suali zar ou capt urar i nformaes, nor mal ment e vi ncul adas a arqui vos de cadast r os ou movi ment aes si mpl es.
Abai xo t emos a vi sualizao de uma Enchoi ce para o arqui vo padr o do ERP Pr ot heus de Cadast r o de Cl i ent es ( SA1 ) :
Fi gu r a: Enchoi ce do Cadast r o de Cl i ent es do ERP Pr ot h eu s
- 310 -
ADVPL Compl et o
A li nguagem ADVPL per mi t e a i mpl ement ao da Enchoi ce de duas for mas si mil ares:
E Funo Enchoi ce: Si nt axe t radi ci onal ment e ut ili zada em ADVPL, a qual no ret orna um obj et o para a apl i cao chamadora;
E Cl asse MsMGet : Cl asse do obj et o Enchoi ce, a qual permit e a i nst anci ao di ret a de um obj et o, t ornando- o di sponvel na apli cao chamadora.
A ut ili zao de um ou out ro obj et o depende unicament e da escol ha do desenvol vedor j que os parmet ros para a funo Enchoi ce e para o mt odo New( ) da cl asse MsMGet so os mesmos, l embrando que para mant er a coernci a com uma apli cao escri t a em ori ent ao a obj et os dever ser ut i lizada a classe MsMGet ( ) .
30.1.1. Enchoi ce( )
E Si nt ax e: Enchoi ce( cAl i as, n Reg, nOpc, aCRA, cLet r a, cTex t o, aAcho, aPos, aCpos, nModel o, n Col Mens, cMen sagem, cTudoOk , oWnd, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y )
E Ret or no: Ni l E Par met r os:
cAl i as Tabel a cadast r ada no Di ci onri o de Tabel as ( SX2) que ser edi t ada nReg Parmet r o no ut ili zado nOpc Nmer o da li nha do aRot ina que defi ni r o t i po de edi o ( I ncl uso, Al t erao, Excl uso, Vi sualizao) aCRA Parmet r o no ut ili zado cLet r a Parmet r o no ut ili zado cTex t o Parmet r o no ut ili zado aAcho Vet or com nome dos campos que sero exi bi dos. Os campos de usuri o sempre sero exi bidos se no exi st i r no par met ro um el ement o com a expresso " NOUSER" aPos Vet or com coordenadas para cri ao da enchoi ce no format o { < t op> , < l eft > , < bot t om> , < ri ght > } aCpos Vet or com nome dos campos que podero ser edi t ados nModel o Se for di fer ent e de 1 desabili t a execuo de gat ilhos est r angei ros nCol Men s Parmet r o no ut ili zado cMensagem Parmet r o no ut ili zado cTudoOk Expresso par a val i dao da Enchoi ce oWnd Obj et o ( j anel a, pai nel , et c.) onde a enchoi ce ser cri ada. l F3 I ndi ca se a enchoi ce est a sendo cri ada em uma consul t a F3 para ut ili zar vari vei s de memri a l Memor i a I ndi ca se a enchoi ce ut i li zar vari vei s de memri a ou os campos da t abel a na edi o l Col umn I ndi ca se a apresent ao dos campos ser em forma de col una caTel a Nome da vari vel t i po "pri vat e" que a enchoi ce ut ili zar no l ugar da propri edade aTel a l NoFol der I ndi ca se a enchoi ce no i r ut ili zar as Past as de Cadast r o ( SXA) l Pr oper t y I ndi ca se a enchoi ce no ut ili zar as vari vei s aTel a e aGet s, soment e suas propri edades com os mesmos nomes
- 311 -
ADVPL Compl et o
Ex empl o: Ut i l i zao da f uno Enchoi ce( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao da funo Enchoice() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
Local cAliasE := cAlias Local aAlterEnch := {} Local aPos := {000,000,400,600} Local nModelo := 3 Local lF3 := .F. Local lMemoria := .T. Local lColumn := .F. Local caTela := "" Local lNoFolder := .F. Local lProperty := .F. Private oDlg Private oGetD Private oEnch Private aTELA[0][0] Private aGETS[0]
DbSelectArea("SX3") DbSetOrder(1) DbSeek(cAliasE)
- 312 -
ADVPL Compl et o
Exemplo (continuao):
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.; X3Uso(SX3->X3_USADO) AADD(aCpoEnch,SX3->X3_CAMPO) EndIf DbSkip() End
aAlterEnch := aClone(aCpoEnch)
DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL RegToMemory("SA1", If(nOpc==3,.T.,.F.))
E Si nt ax e: MsMGet ( ) : New ( cAl i as, nReg, nOpc, aCRA, cLet r a, cTex t o, aAcho, aPos, aCpos, nModel o, n Col Mens, cMen sagem, cTudoOk , oWnd, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y )
E Ret or no: oMsMGet obj et o do t i po MsMGet ( ) E Par met r os:
cAl i as Tabel a cadast r ada no Di ci onri o de Tabel as ( SX2) que ser edi t ada nReg Parmet r o no ut ili zado nOpc Nmer o da li nha do aRot ina que defi ni r o t i po de edi o ( I ncl uso, Al t erao, Excl uso, Vi sualizao) aCRA Parmet r o no ut ili zado cLet r a Parmet r o no ut ili zado cTex t o Parmet r o no ut ili zado aAcho Vet or com nome dos campos que sero exi bi dos. Os campos de usuri o sempre sero exi bidos se no exi st i r no par met ro um el ement o com a expresso " NOUSER" aPos Vet or com coordenadas para cri ao da enchoi ce no format o { < t op> , < l eft > , < bot t om> , < ri ght > } aCpos Vet or com nome dos campos que podero ser edi t ados nModel o Se for di fer ent e de 1 desabili t a execuo de gat ilhos est r angei ros nCol Men s Parmet r o no ut ili zado cMensagem Parmet r o no ut ili zado cTudoOk Expresso par a val i dao da Enchoi ce oWnd Obj et o ( j anel a, pai nel , et c.) onde a enchoi ce ser cri ada. l F3 I ndi ca se a enchoi ce est a sendo cri ada em uma consul t a F3 para ut ili zar vari vei s de memri a
- 313 -
ADVPL Compl et o
l Memor i a I ndi ca se a enchoi ce ut i li zar vari vei s de memri a ou os campos da t abel a na edi o l Col umn I ndi ca se a apresent ao dos campos ser em forma de col una caTel a Nome da vari vel t i po "pri vat e" que a enchoi ce ut ili zar no l ugar da propri edade aTel a l NoFol der I ndi ca se a enchoi ce no i r ut ili zar as Past as de Cadast r o ( SXA) l Pr oper t y I ndi ca se a enchoi ce no ut ili zar as vari vei s aTel a e aGet s, soment e suas propri edades com os mesmos nomes
Ex empl o: Ut i l i zao do obj et o MsMGet ( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto MsMget() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function ModEnc(cAlias,nReg,nOpc) Local aCpoEnch := {} Local aAlter := {}
Local cAliasE := cAlias Local aAlterEnch := {} Local aPos := {000,000,400,600} Local nModelo := 3 Local lF3 := .F. Local lMemoria := .T. Local lColumn := .F. Local caTela := "" Local lNoFolder := .F. Local lProperty := .F. Private oDlg Private oGetD Private oEnch Private aTELA[0][0] Private aGETS[0]
- 314 -
ADVPL Compl et o
Exemplo (continuao):
DbSelectArea("SX3") DbSetOrder(1) DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO) AADD(aCpoEnch,SX3->X3_CAMPO) EndIf DbSkip() End
30.2. Capt ur a de ml t i pl as i nf or maes ( Mul t i - Li nes)
A li nguagem ADVPL permi t e a ut ili zao de basi cament e doi s t i pos de obj et os do t i po gri d, ou como t ambm so conheci dos: mul t i - li ne:
E Gr i ds di gi t v ei s: per mi t em a vi sualizao e capt ura de i nformaes, comument e ut ili zados em i nt erfaces de cadast r o e manut eno, t ai s como:
MSGETDB( ) MSGETDADOS( ) MSNEWGETDADOS( )
E Gr i ds n o di gi t v ei s: permi t em soment e a vi suali zao de i nformaes, comument e ut ili zados como browses do ERP Pr ot heus, t ai s como:
TWBROWSE( ) MAWNDBROWSE( ) MBROWSE( )
Nest e t pi co sero t rat adas as gri ds di gi t vei s di sponvei s na li nguagem ADVPL para o desenvol vi ment o de i nt er faces de cadast r os e manut eno de i nformaes.
- 315 -
ADVPL Compl et o
30.2.1. MsGet DB( )
A cl asse de obj et os vi suai s MsGet DB( ) permi t e a cri ao de um gri d di gi t vel com uma ou mai s col unas, baseado em uma t abel a t emporri a.
E Si nt ax e: MsGet DB( ) : New ( nTop, nLef t , n Bot t om, nRi ght , nOpc, cLi nh aOk , cTudoOk , cI n i Cpos, l Del et e, aAl t er , nFr eeze, l Empt y , u Par 1, cTRB, cFi el dOk , l Condi ci on al , l Append, oWnd, l Di spar os, uPar 2, cDel Ok , cSuper Del )
E Ret or no: oMsGet DB obj et o do t i po MsGet DB( )
E Par met r os:
nTop Di st anci a ent re a MsGet DB e o ext r emi dade superi or do obj et o que a cont m. nLef t Di st anci a ent re a MsGet DB e o ext r emi dade esquerda do obj et o que a cont m. nBot t om Di st anci a ent re a MsGet DB e o ext r emi dade inferi or do obj et o que a cont m. nRi ght
Di st anci a ent re a MsGet DB e o ext r emi dade di rei t a do obj et o que a cont m. nOpc Posi o do el ement o do vet or aRot i na que a MsGet DB usar como refernci a. cLi nh aOk Funo execut ada para vali dar o cont ext o da linha at ual do aCol s. cTudoOk Funo execut ada para vali dar o cont ext o ger al da MsGet DB ( t odo aCol s) . cI ni Cpos Nome dos campos do t ipo caract er que ut ili zaro i ncrement o aut omt i co. Est e parmet r o deve ser no for mat o + < nome do pri mei ro campo> + < nome do segundo campo> + . .. . l Del et e Habili t a a opo de excl ui r li nhas do aCol s. Val or padro fal so. aAl t er Vet or com os campos que podero ser al t erados. nFr eeze I ndi ca qual col una no fi cara congel ada na exi bio. l Empt y Habili t a validao da pr i mei ra col una do aCol s para est a no poder est ar vazi a. Val or padro fal so. uPar 1 Parmet r o r eservado. cFi el dOk Funo execut ada na vali dao do campo. cTRB Ali as da t abel a t emporri a. l Con di ci on al Reser vado l Appen d I ndi ca se a MsGet DB i ra cri ar uma linha em branco aut omat i cament e quando for i ncluso. cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do aCol s. l Di spar os I ndi ca se ser ut ili zado o Di ci onri o de Dados para consul t a padro, i ni ci ali zao padro e gat i l hos. uPar 2 Parmet r o r eservado. cSuper Del - Funo execut ada quando pressi onada as t ecl as < Ct rl > + < Del et e> . oWnd Obj et o no qual a MsGet DB ser cri ada.
- 316 -
ADVPL Compl et o
E Apar nci a:
E Var i v ei s pr i v at e:
aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e que defi ni ra o t i po de operao que est a sendo execut ada ( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no for mat o: { cTi t ul o, cRot i na, nOpo, nAcesso} , aonde: nOpo segue o padro do ERP Prot heus para: 1- Pesqui sar 2- Vi suali zar 3- I ncl ui r 4- Al t erar 5- Excl ui r aHeader Vet or com i nformaes das col unas no format o:
{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,; cVali dao, cReservado, cTi po, xReservado1, xReser vado2}
A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada com base no aHeader mai s um l t i mo campo t i po l gi co que det ermi na se a l i nha foi excl uda.
l Ref r esh Vari vel t i po l gi ca para uso r eser vado.
- 317 -
ADVPL Compl et o
E Var i v ei s p bl i cas:
nBr Li n I ndi ca qual a li nha posi ci onada do aCol s.
E Funes de v al i dao:
cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No pode ser defi ni da como St at i c Funct i on. cTudoOk Funo de val idao da confi rmao da operao com o gri d. No pode ser defi ni da como St at i c Funct i on.
E Mt odos adi ci on ai s:
For ceRef r esh( ) At uali za a MsGet DB com a t abel a e posi ci ona na pri mei ra linha.
Ex empl o: Ut i l i zao do obj et o MsGet DB( )
#include protheus.ch
/*/ +----------------------------------------------------------------------------- | Funo | GETDBSA1 | Autor | MICROSIGA |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto MsGetDB() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function GetDbSA1()
Local nI Local oDlg Local oGetDB Local nUsado := 0 Local aStruct := {}
User Function LINHAOK() ApMsgStop("LINHAOK") Return .T.
User Function TUDOOK() ApMsgStop("LINHAOK") Return .T.
User Function DELOK() ApMsgStop("DELOK") Return .T.
User Function SUPERDEL() ApMsgStop("SUPERDEL") Return .T.
User Function FIELDOK() ApMsgStop("FIELDOK") Return .T.
- 319 -
ADVPL Compl et o
30.2.2. MsGet Dados( )
A cl asse de obj et os vi suai s MsGet Dados( ) per mi t e a cri ao de um gri d di git vel com uma ou mai s col unas, baseado em um array.
E Si nt ax e: MsGet Dados( ) : New ( nTop, nLef t , nBot t om, nRi ght , n Opc, cLi nh aOk , cTudoOk , cI ni Cpos, l Del et e, aAl t er , uPar 1, l Empt y , nMax , cFi el dOk , cSuper Del , uPar 2, cDel Ok , oWnd)
E Ret or no: oMsGet Dados obj et o do t i po MsGet Dados( )
E Par met r os:
nTop Di st anci a ent re a MsGet Dados e o ext r emi dade superi or do obj et o que a cont m. nLef t Di st anci a ent re a MsGet Dados e o ext r emi dade esquerda do obj et o que a cont m. nBot t om Di st anci a ent re a MsGet Dados e o ext r emi dade i nferi or do obj et o que a cont m. nRi ght
Di st anci a ent re a MsGet Dados e o ext remi dade di rei t a do obj et o que a cont m. nOpc Posi o do el ement o do vet or aRot i na que a MsGet Dados usar como referenci a. cLi nh aOk Funo execut ada par a vali dar o cont ext o da linha at ual do aCol s. cTudoOk Funo execut ada para val i dar o cont ext o geral da MsGet Dados ( t odo aCol s) . cI ni Cpos Nome dos campos do t i po caract er que ut ili zaro i ncrement o aut omt i co. Est e parmet r o deve ser no for mat o + < nome do pri mei ro campo> + < nome do segundo campo> + . .. . l Del et e Habili t a excl ui r li nhas do aCol s. Val or padro fal so. aAl t er Vet or com os campos que podero ser al t erados. uPar 1 Parmet r o r eservado. l Empt y Habili t a validao da pr i mei ra col una do aCol s para est a no poder est ar vazi a. Val or padro fal so. nMax Nmer o mxi mo de l i nhas permi t idas. Val or padro 99. cFi el dOk Funo execut ada na vali dao do campo. cSuper Del Funo execut ada quando pressi onada as t ecl as < Ct rl > + < Del et e> . uPar 2 Parmet r o r eservado. cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do aCol s. oWnd Obj et o no qual a MsGet Dados ser cri ada.
- 320 -
ADVPL Compl et o
E Apar nci a:
E Var i v ei s pr i v at e:
aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e que defi ni ra o t i po de operao que est a sendo execut ada ( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no for mat o: { cTi t ul o, cRot i na, nOpo, nAcesso} , aonde: nOpo segue o padro do ERP Prot heus para: 6- Pesqui sar 7- Vi suali zar 8- I ncl ui r 9- Al t erar 10- Excl ui r aHeader Vet or com i nformaes das col unas no format o:
{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,; cVali dao, cReservado, cTi po, xReservado1, xReser vado2}
A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada com base no aHeader mai s um l t i mo campo t i po l gi co que det ermi na se a l i nha foi excl uda.
l Ref r esh Vari vel t i po l gi ca para uso r eser vado.
- 321 -
ADVPL Compl et o
E Var i v ei s p bl i cas:
N I ndi ca qual a li nha posi ci onada do aCol s.
E Funes de v al i dao:
cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No pode ser defi ni da como St at i c Funct i on. cTudoOk Funo de val idao da confi rmao da operao com o gri d. No pode ser defi ni da como St at i c Funct i on.
E Mt odos adi ci on ai s:
For ceRef r esh( ) At uali za a MsGet Dados com a t abel a e posi ci ona na pri mei ra linha. Hi de( ) Ocul t a a MsGet Dados. Show ( ) Most ra a MsGet Dados.
Ex empl o: Ut i l i zao do obj et o MsGet Dados( )
#include protheus.ch
/*/ +----------------------------------------------------------------------------- | Funo | GETDADOSA1 | Autor | MICROSIGA |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto MSGETADOS() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function GetDadoSA1()
Local nI Local oDlg Local oGetDados Local nUsado := 0 Private lRefresh := .T. Private aHeader := {} Private aCols := {}
User Function LINHAOK() ApMsgStop("LINHAOK") Return .T.
User Function TUDOOK() ApMsgStop("LINHAOK") Return .T.
User Function DELOK() ApMsgStop("DELOK") Return .T.
User Function SUPERDEL() ApMsgStop("SUPERDEL") Return .T.
User Function FIELDOK() ApMsgStop("FIELDOK") Return .T.
- 323 -
ADVPL Compl et o
30.2.3. MsNew Get Dados( )
A cl asse de obj et os vi suai s MsNewGet Dados( ) permi t e a cri ao de um gri d di git vel com uma ou mai s col unas, baseado em um array.
E Si nt ax e: MsNew Get Dados( ) : New ( nSuper i or , nEsqu er da ,n I n f er i or , nDi r ei t a, nOpc, cLi nOk , cTu doOk , cI ni Cpos, aAl t er GDa, nFr eeze, nMax , cFi el dOk , cSuper Del , cDel Ok , oDLG, aHeader , aCol s)
E Ret or no: oMsGet Dados obj et o do t i po MsNew Get Dados( )
E Par met r os:
nSuper i or Di st anci a ent re a MsNewGet Dados e o ext r emi dade superi or do obj et o que a cont em nEsqu er da Di st anci a ent re a MsNewGet Dados e o ext r emi dade esquerda do obj et o que a cont em nI nf er i or Di st anci a ent re a MsNewGet Dados e o ext r emi dade i nferi or do obj et o que a cont em nDi r ei t a Di st anci a ent re a MsNewGet Dados e o ext r emi dade di rei t a do obj et o que a cont em nOpc Operao em execuo: 2- Vi suali zar, 3- I ncl ui r, 4- Al t erar , 5- Excl ui r cLi nOk Funo execut ada para vali dar o cont ext o da l i nha at ual do aCol s cTudoOk Funo execut ada para vali dar o cont ext o geral da MsNewGet Dados ( t odo aCol s) cI ni Cpos Nome dos campos do t ipo caract er que ut i lizaro i ncrement o aut omt i co. aAl t er GDa Campos al t ervei s da Get Dados nFr eeze Campos est t i cos na Get Dados, part i ndo sempr e da posi o i ni ci al da get dados aonde: 1- Pri mei ro campo congel ado 2- Pri mei ro e segundo campos congel ados... nMax Nmer o mxi mo de l i nhas permi t idas. Val or padro 99 cFi el dOk Funo execut ada na vali dao do campo cSuper Del Funo execut ada quando pr essi onada as t ecl as < Ct rl > + < Del et e> cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do aCol s oDLG Obj et o no qual a MsNewGet Dados ser cri ada aHeader Array a ser t r at ado i nt er nament e na MsNewGet Dados como aHeader aCol s Array a ser t r at ado i nt er nament e na MsNewGet Dados como aCol s
- 324 -
ADVPL Compl et o
E Apar nci a:
E Var i v ei s pr i v at e:
aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e que defi ni ra o t i po de operao que est a sendo execut ada ( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no for mat o: { cTi t ul o, cRot i na, nOpo, nAcesso} , aonde:
nOpo segue o padro do ERP Prot heus para: 1- Pesqui sar 2- Vi suali zar 3- I ncl ui r 4- Al t erar 5- Excl ui r aHeader Vet or com i nformaes das col unas no format o:
{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,; cVali dao, cReservado, cTi po, xReservado1, xReser vado2}
A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada com base no aHeader mai s um l t i mo campo t i po l gi co que det ermi na se a l i nha foi excl uda.
l Ref r esh Vari vel t i po l gi ca para uso r eser vado.
- 325 -
ADVPL Compl et o
E Var i v ei s p bl i cas:
N I ndi ca qual a li nha posi ci onada do aCol s.
E Funes de v al i dao:
cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No pode ser defi ni da como St at i c Funct i on. cTudoOk Funo de val idao da confi rmao da operao com o gri d. No pode ser defi ni da como St at i c Funct i on.
E Mt odos adi ci on ai s:
For ceRef r esh( ) At uali za a MsNewGet Dados com a t abel a e posi ci ona na pri mei ra linha. Hi de( ) Ocul t a a MsNewGet Dados. Show ( ) Most ra a MsNewGet Dados.
Ex empl o: Ut i l i zao dos obj et os MsNew Get Dados( ) e MsMGet ( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao dos objetos | | | MsNewGetDados() e MsMGet() combinados | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
Local nX := 0 Local nUsado := 0 Local aButtons := {} Local aCpoEnch := {} Local cAliasE := cAlias Local aAlterEnch := {}
- 326 -
ADVPL Compl et o
Exemplo (continuao):
Local aPos := {000,000,080,400} Local nModelo := 3 Local lF3 := .F. Local lMemoria := .T. Local lColumn := .F. Local caTela := "" Local lNoFolder := .F. Local lProperty := .F. Local aCpoGDa := {} Local cAliasGD := "SC6" Local nSuperior := 081 Local nEsquerda := 000 Local nInferior := 250 Local nDireita := 400 Local cLinOk := "AllwaysTrue" Local cTudoOk := "AllwaysTrue" Local cIniCpos := "C6_ITEM" Local nFreeze := 000 Local nMax := 999 Local cFieldOk := "AllwaysTrue" Local cSuperDel := "" Local cDelOk := "AllwaysFalse" Local aHeader := {} Local aCols := {} Local aAlterGDa := {}
While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.; cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO) AADD(aCpoGDa,SX3->X3_CAMPO) EndIf DbSkip() End
- 327 -
ADVPL Compl et o
Exemplo (continuao):
aAlterGDa := aClone(aCpoGDa)
nUsado:=0 dbSelectArea("SX3") dbSeek("SC6") aHeader:={} While !Eof().And.(x3_arquivo=="SC6") If X3USO(x3_usado).And.cNivel>=x3_nivel nUsado:=nUsado+1 AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,; x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } ) Endif dbSkip() End
If nOpc==3 // Incluir aCols:={Array(nUsado+1)} aCols[1,nUsado+1]:=.F. For nX:=1 to nUsado IF aHeader[nX,2] == "C6_ITEM" aCols[1,nX]:= "0001" ELSE aCols[1,nX]:=CriaVar(aHeader[nX,2]) ENDIF Next Else aCols:={} dbSelectArea("SC6") dbSetOrder(1) dbSeek(xFilial()+M->C5_NUM) While !eof().and.C6_NUM==M->C5_NUM AADD(aCols,Array(nUsado+1)) For nX:=1 to nUsado aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2])) Next aCols[Len(aCols),nUsado+1]:=.F. dbSkip() End Endif
30.2.3. 1. Def i ni n do cor es per sonal i zadas par a o obj et o MsNew Get Dados( )
Conforme vi st o no t pico sobr e defi ni o das propri edades de cor es para os component es vi suai s, cada obj et o possui caract erst i cas que devem ser respei t adas para corr et a ut i lizao dest e r ecurso.
E At r i but os adi ci on ai s:
l UseDef aul t Col or s At ri but o que dever ser defi ni do como .F. par a que as al t eraes nas cor es sej am permi t i das.
E Mt odos adi ci on ai s:
Set Bl k Back Col or Mt odo que defi ne a cor que ser ut ili zada para cada li nha do gri d. No necessri o ut ilizar o mt odo Refr esh( ) aps a defi ni o da cor por est e mt odo.
E Apar nci a:
- 329 -
ADVPL Compl et o
Ex empl o: Def i ni ndo cor es per son al i zadas par a o obj et o MsNew Get Dados( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao dos objetos | | | MsNewGetDados() e MsMGet() combinados e tratamento de cores | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
Local aButtons := {} Local aCpoEnch := {} Local cAliasE := cAlias Local aAlterEnch := {} Local aPos := {000,000,080,400} Local nModelo := 3 Local lF3 := .F. Local lMemoria := .T. Local lColumn := .F. Local caTela := "" Local lNoFolder := .F. Local lProperty := .F. Local aCpoGDa := {} Local cAliasGD := "SC6" Local nSuperior := 081 Local nEsquerda := 000 Local nInferior := 250 Local nDireita := 400 Local cLinOk := "AllwaysTrue" Local cTudoOk := "AllwaysTrue" Local cIniCpos := "C6_ITEM" Local nFreeze := 000 Local nMax := 999
- 330 -
ADVPL Compl et o
Exemplo (continuao):
Local cFieldOk := "AllwaysTrue" Local cSuperDel := "" Local cDelOk := "AllwaysFalse" Local aHeader := {} Local aCols := {} Local aAlterGDa := {}
While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3- >X3_NIVEL .And. X3Uso(SX3->X3_USADO) AADD(aCpoGDa,SX3->X3_CAMPO) EndIf DbSkip() End
aAlterGDa := aClone(aCpoGDa)
nUsado:=0 dbSelectArea("SX3") dbSeek("SC6") aHeader:={} While !Eof().And.(x3_arquivo=="SC6") If X3USO(x3_usado).And.cNivel>=x3_nivel nUsado:=nUsado+1 AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,; x3_tamanho, x3_decimal,"AllwaysTrue()",; x3_usado, x3_tipo, x3_arquivo, x3_context } ) Endif dbSkip() End
- 331 -
ADVPL Compl et o
Exemplo (continuao):
If nOpc==3 // Incluir aCols:={Array(nUsado+1)} aCols[1,nUsado+1]:=.F. For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM" aCols[1,nX]:= "0001" ELSE aCols[1,nX]:=CriaVar(aHeader[nX,2]) ENDIF
Next Else aCols:={} dbSelectArea("SC6") dbSetOrder(1) dbSeek(xFilial()+M->C5_NUM) While !eof().and.C6_NUM==M->C5_NUM AADD(aCols,Array(nUsado+1)) For nX:=1 to nUsado aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2])) Next aCols[Len(aCols),nUsado+1]:=.F. dbSkip() End Endif
A linguagem ADVPL permi t e a i mpl ement ao de bar ras de bot es ut ili zando funes pr- defi ni das desenvol vi das com o obj et i vo de facili t ar sua ut ilizao, ou at ravs da ut ili zao di ret a dos component es vi suai s di sponvei s. Dent re os r ecur sos da li nguagem que podem ser ut ili zados com est a fi nali dade sero abordados:
E Funo Ench oi ceBar : Sint axe t radi ci onal ment e ut ili zada em ADVPL, a qual no ret orna um obj et o par a a apli cao chamadora;
E Cl asse TBar : Cl asse do obj et o TBar( ) , a qual permi t e a i nst anci ao di ret a de um obj et o do t i po bar ra de bot es superi or, t ornando- o di sponvel na apli cao chamadora.
E Cl asse But t onBar : Cl asse do obj et o But t onBar( ) , a qual permi t e a i nst anci ao di ret a de um obj et o bar ra de bot es genri co, o qual pode ser ut ili zado em qual quer posi o da t el a, t ornando- o di sponvel na apli cao chamadora.
30.3.1. Enchoi ceBar ( )
Funo que cri a uma barra de bot es no format o padro ut ili zado pel as i nt erfaces de cadast r o da apli cao Prot heus.
Est a bar ra possui os bot es padres para confirmar ou cancel ar a i nt erface e ai nda permi t e a adi o de bot es adi ci onai s com a ut ili zao do parmet r o aBut t ons.
E Si nt ax e:
Enchoi ceBar ( oDl g, bOk , bCancel , l MsgDel , aBut t ons, nRecno, cAl i as)
E Par met r os:
oDl g Di al og onde i r cri ar a barra de bot es bOk Bl oco de cdi go a ser execut ado no bot o Ok bCancel Bl oco de cdi go a ser execut ado no bot o Cancel ar l MsgDel Exi be di al og para confi r mar a excl uso aBut t ons Array cont endo bot es adi ci onai s. aArray[ n] [ 1] - > I magem do bot o aArray[ n] [ 2] - > bl oco de cdi go cont endo a ao do bot o aArray[ n] [ 3] - > t t ul o do bot o nRecn o Regi st ro a ser posi ci onado aps a execuo do bot o Ok. cAl i as Ali as do regi st r o a ser posi ci onado aps a execuo do bot o Ok. Se o parmet r o nRecno for i nformado, o cAl i as passa ser obri gat ri o.
E Apar nci a:
- 334 -
ADVPL Compl et o
Ex empl o: Ut i l i zao da f uno Enchoi ceBar ( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao da funo | | | EnchoiceBar() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function DEnchBar() Local oDlg, oBtn Local aButtons := {}
DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF; oMainWnd
ACTIVATE MSDIALOG oDlg ; ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))
Return
- 335 -
ADVPL Compl et o
30.3.2. TBar ( )
Cl asse de obj et os vi suai s que permi t e a i mpl ement ao de um component e do t i po barr a de bot es para a part e superi or de uma j anel a previ ament e defi ni da.
E Si nt ax e: New ( oWnd, nBt nWi dt h, nBt nHei ght , l 3D, cMode, oCur sor , cResour ce, l NoAut oAdj u st )
E Ret or no: oTBar obj et o do t i po TBar ( )
E Par met r os:
oWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. nBt nWi dt h Numri co, opci onal . Lar gura do bot o cont i do na barr a nBt nHei ght Numri co, opci onal . Al t ura do bot o cont i do na barra l 3D Lgi co, opci onal . Defi ne t i po da barra cMode No ut i lizado. oCur sor Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e a barra. cResour ce Caract er , opci onal . I magem do r ecurso a ser i nseri do como fundo da bar ra. l NoAut oAdj u st Lgi co.
E Apar nci a:
Ex empl o: Ut i l i zao da f uno Enchoi ceBar ( )
#include 'protheus.ch'
/*/ +----------------------------------------------------------------------------- | Funo | TSTBAR | Autor | MICROSIGA |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto TBar() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
A si nt axe But t on Bar a forma cl ssi ca ut ili zada na li nguagem ADVPL para i mpl ement ar um obj et o da cl asse TBar( ) , o qual possui as caract erst i cas menci onadas no t pi co ant eri or .
E Si nt ax e:
DEFI NE BUTTONBAR oBar SI ZE nWi dt h, nHei ght 3D MODE OF oDl g CURSOR
E Ret or no: ( ) .
E Par met r os:
oBar Obj et o do t i po TBar( ) que ser cri ado com a ut i li zao da si nt axe But t onBar( ) . nWi dt h Numri co, opci onal . Lar gura do bot o cont i do na barr a. nHei ght Numri co, opci onal . Al t ura do bot o cont i do na barra. 3D Se defi ni do habilit a a visuali zao em 3D da barra de bot es. oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. MODE Defi ne a forma de ori ent ao do obj et o But t onBar ut ili zando os segui nt es t ermos pr- defi ni dos: TOP, BOTTOM, FLOAT
CURSOR Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e a barr a.
- 337 -
ADVPL Compl et o
A si nt axe But t onBar requer a adi o dos bot es como recur sos adi ci onai s da barr a previ ament e defi ni da ut ilizando a si nt axe abai xo:
E Bot es: BUTTON RESOURCE
E Si nt ax e adi ci onal :
DEFI NE BUTTON RESOURCE cBi t Map OF oBar ACTI ON cAcao TOOLTI P cTex t o
E Par met r os:
cBi t Map Nome da i magem di sponvel na apli cao. oBar Obj et o do t i po TBar( ) no qual o bot o ser adi ci onado. cAcao Funo ou l i st a de expr esses que det ermi na a ao que ser real i zada pel o bot o. cTex t o Text o no est il o t ool t i p t ext que ser exi bi do quando o cursor do mouse for posi ci onado sobre o bot o na barra de ferrament as.
E Apar nci a:
Ex empl o: Ut i l i zao da si nt ax e But t on Bar
#include 'protheus.ch'
/*/ +----------------------------------------------------------------------- | Funo | TstBBar | Autor | MICROSIGA |Data | | +----------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto TBar() | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
30.3.4. I magens pr - def i ni das par a as bar r as de bot es
Conforme menci onado nos t pi cos ant eri ores, os bot es vi suai s do t i po bar ra de bot es permi t em a defi ni o de i t ens com aes e i magens vi ncul adas.
Dent r e os obj et os e funes menci onados, foi cit ada a Enchoi ceBar( ) , a qual permi t e a adi o de bot es adi ci onai s at ravs do parmet r o aBu t t on, sendo que os i t ens dest e ar ray devem possui r o segui nt e format o:
E Si nt ax e: AADD( aBut t ons,{ cBi t Map, bAcao, cText o} )
E Est r ut u r a:
cBi t Map Nome da i magem pr- defi ni da exi st ent e na apl icao ERP que ser vi ncul ada ao bot o. bAcao Bl oco de cdi go que defi ne a ao que ser execut ada com a ut ili zao do bot o. cTex t o Text o no est il o t ool t i p t ext que ser exi bi do quando o cursor do mouse for posi ci onado sobr e o bot o na bar ra de ferrament as.
Al gumas operaes numri cas podem causar di ferenas de ar r edondament o. I sso ocor r e devi do a di ferenas no armazenament o de vari vei s numri cas nos di versos pr ocessadores, di ferena est a, i ncl usi ve, pr esent e no ADVPL, mesmo ant es do surgi ment o do Pr ot heus.
Para evi t ar esses probl emas de arr edondament o, deve ser ut ili zada a funo Round( ) , pri nci pal ment e ant es de r eali zar uma comparao e ant es de se ut ili zar a funo I nt ( ) .
Desse modo, assegura- se que o resul t ado ser cor r et o i ndependent ement e do pr ocessador ou pl at aforma.
Ex empl o 01 :
If (Valor/30) == 50 // pode ser falso ou invlido If Round(Valor/30, 0) == 50 // correto
Ex empl o 02 :
M->EE8_QTDEM1 := Int(M->EE8_SLDINI/M->EE8_QE) // pode ser falso ou invlido M->EE8_QTDEM1 := Int(Round(M->EE8_SLDINI/M->EE8_QE,10)) // correto
32. Ut i l i zao de I dent ao
obri gat ri a a ut ilizao da i dent ao, poi s t orna o cdi go mui t o mai s l egvel . Vej a os exempl os abai xo:
While !SB1->(Eof()) If mv_par01 == SB1->B1_COD dbSkip() Loop Endif Do Case Case SB1->B1_LOCAL == 01 .OR. SB1->B1_LOCAL == 02 TrataLocal(SB1->B1_COD, SB1->B1_LOCAL) Case SB1->B1_LOCAL == 03 TrataDefeito(SB1->B1_COD) OtherWise TrataCompra(SB1->B1_COD, SB1->B1_LOCAL) EndCase dbSkip() EndDo
- 341 -
ADVPL Compl et o
A ut ili zao da i dent ao segui ndo as est rut uras de cont r ol e de fl uxo ( whil e, I F, caso et c.) t orna a compr eenso do cdi go mui t o mai s fci l:
While !SB1->(Eof())
If mv_par01 == SB1->B1_COD dbSkip() Loop Endif
Do Case Case SB1->B1_LOCAL == 01 .OR. SB1->B1_LOCAL == 02 TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)
Case SB1->B1_LOCAL == 03 TrataDefeito(SB1->B1_COD)
Para i dent ar o cdi go ut ili ze a t ecl a < TAB> e na ferrament a DEV- St udi o, a qual pode ser confi gurada at ravs da opo Pr efer nci as :
- 342 -
ADVPL Compl et o
33. Capi t ul ao de Pal av r as- Chave
Uma conveno ampl ament e ut i lizada a de capi t ul ar as pal avras chaves, funes, vari vei s e campos ut ili zando uma combi nao de caract er es em mai scul o e mi nscul o, vi sando facili t ar a l ei t ura do cdi go font e. O cdi go a segui r:
Local ncnt w h i l e ( ncnt + + < 1 0 ) nt ot al + = ncnt * 2 enddo
Fi cari a melhor com as pal avras chaves e vari vei s capi t ul adas:
Local n Cnt Whi l e ( nCnt + + < 1 0 ) nTot al + = nCnt * 2 EndDo
Para funes de mani pul ao de dados que comecem por db , a capi t ulao s ser efet uada aps o db :
E dbSeek ( ) E dbSel ect Ar ea( )
33.1. Pal av r as em mai scul o
A regra ut i lizar caract er es em mai scul o para:
A not ao hngara consi st e em adi ci onar os prefi xos aos nomes de vari vei s, de modo a faci l ment e se i dent i fi car seu t i po. I st o facili t a na cri ao de cdi gos- font e ext ensos, poi s usando a Not ao Hngara, voc no pr eci sa fi car o t empo t odo vol t ando defi ni o de uma vari vel para se l embrar qual o t i po de dados que deve ser col ocado nel a. Vari vei s devem t er um pr efi xo de Not ao Hngara em mi nscul as, segui do de um nome que i dent i fi que a funo da vari vel , sendo que a i ni ci al de cada pal avra deve ser mai scul a. obri gat ri a a ut ilizao dest a not ao para nomear vari vei s. Not ao Ti po de dado Ex empl o a Array aVal ores b Bl oco de cdi go bSeek c Caract er cNome d Dat a dDat aBase l Lgi co l Cont i nua n Numri co nVal or o Obj et o oMai nWindow x I ndefi ni do xCont eudo
35. Tcni cas de pr ogr amao ef i ci ent e
Para o desenvol vi ment o de si st emas e a pr ogramao de r ot i nas, sempr e esperado que qual quer cdi go escri t o sej a:
O Funci on al ment e cor r et o O Ef i ci ent e O Legv el O Reut i l i zv el O Ex t ensv el O Por t v el
Aps anos de experi nci a na ut ili zao de li nguagens padro xBase e do desenvol vi ment o da linguagem ADVPL, al gumas t cni cas para uma progr amao ot i mizada e efi ci ent e foram reconheci das. A ut ili zao das t cni cas a segui r, vi sa buscar o mxi mo apr ovei t ament o dos recursos da l inguagem com o obj et i vo de cri ar programas com est as car act erst i cas.
Cr i ao de f unes segundo a necessi dade
Observe o cdi go de exempl o:
User Function GetAnswer(lDefault) Local lOk lOk := GetOk(lDefault) If lOk Return .T. Else Return .F. Endif Return nil
- 344 -
ADVPL Compl et o
Ut ilizando- se apenas o cri t ri o "a funo funci ona corr et ament e?", a funo Get Answer perfei t a. Recebe um parmet ro l gi co com a respost a padro e r et orna um val or l gi co dependent e da opo escol hi da pel o usuri o em uma funo de di l ogo "si m/ no" desi gnada para i sso. Pode ent r et ant o ser mel horada, part i cul arment e se efi ci ncia for consi derada como um cri t ri o para um cdi go mel hor. Efi ci ncia t i pi cament e envol ve a ut ili zao de poucos recursos de mqui na, poucos chamadas de funes ou t ornar mai s rpi do um pr ocesso.
Segundo esse raci ocni o, poderi a se pr oduzi r o segui nt e cdi go:
User Function GetAnswer(lDefault) Return If( GetOk(lDefault), .T., .F.)
O cdi go aci ma ai nda pode ser apri morado confor me abai xo:
User Function GetAnswer(lDefault) Return GetOk(lDefault)
Com a ot i mi zao do cdi go da funo Get Answer( ) , pode faci l ment e veri fi car que a mesma no r eal iza nada adi ci onal chamada de Get Ok( ) , podendo ser subst i t uda por uma chamada di ret a dest a, cont i nuando a funci onar cor ret ament e.
Codi f i cao aut o- document v el
Nenhum coment ri o subst i t ui um cdi go cl arament e escri t o, e est e no um aci dent e. Consi der e o exempl o:
cVar := " " // 11 espaos
O t amanho da vari vel cVar no evi dent e por si s e no faci lment e veri fi cado. Est es mesmos 10 espaos est ari am mai s bvi os e ai nda assi m garant i dos se a inst ruo fosse escri t a como:
cVar := Space(11)
O mesmo pri ncpi o pode ser apli cado para qual quer st ri ng l onga de caract eres r epet i dos. A funo Repli cat e pode ser ut ilizada como a segui r:
cVar := Replicate( "*", 80 )
Est e t i po de programao dei xa o cdi go fci l de di git ar, fci l de l er e mai s fl exvel .
- 345 -
ADVPL Compl et o
Ut i l i zao de sol ues si mpl es
Si mpli ci dade na cri ao de i nst rues t orna a programao e at mesmo a execuo mai s rpi da. Consi der e a l i nha de cdi go:
If nVar > 0 .Or. nVar < 0
Se o val or da vari vel nVar for i gual a zero ( 0) no moment o da execuo dest a l inha de cdi go, ambas as comparaes separadas pel o operador l gi co .Or. sero efet uadas: Aps ser avali ada, a pri mei ra comparao i r fal har. A segunda comparao ser ent o avali ada e fal har t ambm. Como resul t ado, o cdi go exi st ent e dent ro da est rut ura de fl uxo I f no ser execut ado. Tal cdi go soment e ser execut ado quando o val or dest a vari vel for mai or OU menor do que zero. Ou sej a, sempr e que for DI FERENTE de zero, o que t orna a li nha a segui r mai s efi ci ent e:
If nVar != 0
Est e t i po de al t erao t orna o cdi go mai s l egvel e o pr ocessament o mai s rpi do, evi t ando a avali ao de i nst rues desnecessari ament e.
Exi st em out ras si t uaes onde a si mpli fi cao pode ser ut ili zada. A expresso de aval i ao a segui r:
If cVar == "A" .Or. cVar == "B" .Or cVar == "C" .Or. cVar == "D"
Pode ser subst i t udo pel o operador de cont eno:
If cVar $ "ABCD"
Opo por f l ex i bi l i dade
A mel hor sol uo aquel a que envol ve o probl ema i medi at o e previ ne probl emas no fut ur o. Consi der e o exempl o:
Excet o cont ando- se os caract eres, no exi st e manei ra de saber se o nmero de car act er es de excl amao o esperado. Enquant o i st o um probl ema, exi st em al go mai s grave. A expresso de pi ct ure est t i ca. Se no fut ur o for necessri o aj ust ar o t amanho da vari vel cVar, ser necessri o l ocali zar t odos os l ugares no cdi go onde est a mscara de pi ct ure est sendo ut ili zada para aj ust e manual .
- 346 -
ADVPL Compl et o
Exi st e uma opo de sol uo de aut o- aj ust e di sponvel que fcil de di git ar e t em a garant i a de execut ar a t ar efa i gual ment e ( t ornar t odos os caract er es mai scul os) :
@nRow,nCol PSAY cVar Picture "@!"
Opo da pr at i ci dade ao dr ama
Se a sol uo par ece compl exa, pr ovavel ment e porque o cami nho escol hi do est l evando a i sso. Deve- se sempr e se pergunt ar porque al gum desenvol veri a uma linguagem que requi si t e t ant os comandos compli cados para fazer al go si mpl es. Na grande mai ori a dos casos, exi st e uma sol uo mai s si mples. O exempl o abai xo dei xa i sso bem cl aro:
@ 10,25 Say Substr(cCep,1,5) + "-" + Substr(cCep,6,3) Picture "!!!!!!!!!"
Est e cdi go pode ser escri t o de uma forma muit o mai s si mpl es, confor me demonst rado abai xo:
@ 10,25 Say cCep Picture "@R 99999-999"
Ut i l i zao de oper ador es de i ncr ement o/ decr ement o
Ut ilizados devi dament e, os operador es de i ncrement o e decrement o t ornam o cdi go mai s fcil de l er e possi vel ment e um pouco mai s rpi dos. Ao cont rri o de escrever adi es si mpl es como:
nVar := nVar + 1 nVar := nVar -1
Pode- se escrev- l as assi m:
++nVar --nVar
Deve- se apenas t omar cui dado com a precednci a dest es operador es, poi s o "+ + " ou o " - - " podem aparecer ant es ou depoi s de uma varivel , e em al guns casos quando a vari vel for ut ili zada dent ro de uma expresso, a prefi xao ou sufi xao dest es operador es afet ar o resul t ado. Para mai ores det al hes, consul t e a document ao de operador es da l i nguagem ADVPL.
- 347 -
ADVPL Compl et o
Ev i t ar passos desnecessr i os
Exi st e uma di ferena ent re um bom hbi t o e perda de t empo. Al gumas vezes est es concei t os podem est ar mui t o pr xi mos, mas um modo de di fer enci - l os bal ancear os benefci os de real i zar al guma ao cont ra o pr obl ema que resul t ari a se no fosse execut ada. Obser ve o exempl o:
Local nCnt := 0 For nCnt := 1 To 10 <cdigo> Next nCnt
I ni ci ali zar a vari vel no moment o da decl arao no um probl ema. Se o 0 fosse necessri o no exempl o, t eri a sido t il a i ni ci alizao na decl arao. Mas nest e caso a est rut ura de repet i o For .. .Nex t at ri bui o seu val or i medi at ament e com 1, port ant o no houve ganho em at ri bui r a vari vel com 0 no comeo.
Nest e exempl o no h nenhum pont o negat i vo e nada er rado ocorr er se a vari vel no for i ni ci alizada, port ant o aconsel hvel evi t ar est e t i po de i ni ci ali zao, poi s no t orna o cdi go mai s segur o e t ambm no expr essa a i nt eno do cdi go mai s cl arament e.
Por m not e est e exempl o, onde a vari vel no i ni ci ali zada:
Local nCnt While ( nCnt++ < 10 ) <cdigo> EndDo
Em ADVPL, vari vei s no i ni ci ali zadas sempre t em seu val or cont endo nul o ( nil ) a princpi o, o que far com que uma exceo em t empo de execuo acont ea quando a i nst ruo de repet i o whi l e for execut ada.
Di ferent ement e do pri mei ro exempl o, onde a i ni ci ali zao da vari vel no fazi a di ferena al guma, nest e segundo exempl o a i ni ci alizao absol ut ament e necessri a. Deve- se pr ocurar i ni ci alizar vari vei s numri cas com zer o ( 0) e vari vei s caract er com st ri ng nul a ( "") apenas quando real ment e necessri o.
- 348 -
ADVPL Compl et o
Ut i l i zao de al t er n at i v as
Quando se est t rabal hando em uma si mples r ot i na, deve- se t omar al gum t empo par a expl orar duas ou t r s di ferent es abordagens. Quando se est t r abal hando em al go mai s compl exo, deve- se pl anej ar prot ot i par al gumas a mai s. Consi der e o seguint e cdi go:
If cHair = "A" Replace hair With "Loira" Else If cHair = "B" Replace hair With "Morena" Else If cHair = "C" Replace hair With "Ruiva" Else If cHair = "D" Replace hair With "Grisalho" Else Replace hair With "Preto" Endif Endif Endif Endif
Um cdi go de uma nica l et ra, ( A at E) , foi i nformado para i ndi car a cor de cabel o. Est e cdi go foi ent o conver t i do e ar mazenado como uma st ri ng. Pode- se not ar que a cor "Pret o" ser at ri buda se nenhuma out ra opo for verdadei ra.
Uma alt ernat i va que reduz o nvel de i dent ao t orna o cdi go mai s fcil de l er enquant o reduz o nmero de comandos repl ace:
Do Case Case cHair == "A" cColor := "Loira" Case cHair == "B" cColor := "Morena" Case cHair == "C" cColor := "Ruiva" Case cHair == "D" cColor := "Grisalho" OtherWise cColor := "Preto" EndCase
Replace hair With cColor
- 349 -
ADVPL Compl et o
Ut i l i zao de ar qui v os de cabeal ho qu an do necessr i o
Se um arqui vo de cdi go cri ado se refer enci a a comandos para i nt erpr et ao e t rat ament o de arqui vos XML, est e deve se i ncl ui r o arqui vo de cabeal ho prpri o para t ai s comandos ( XMLXFUN.CH no exempl o) . Por m no deve- se i nclui r arqui vos de cabeal ho apenas por segurana. Se no se est r efer enci ando nenhuma das const ant es ou ut ilizando nenhum dos comandos cont i dos em um dest es arqui vos, a i ncl uso apenas t ornar a compi l ao mai s demorada.
Const ant es em mai scul o
I st o uma conveno que faz sent i do. Em ADVPL, como em C por exempl o, a regra ut i lizar t odos os caract eres de uma const ant e em mai scul o, a fi m de que possam ser cl arament e reconheci dos como const ant es no cdi go, e que no sej a necessri os l embrar onde for am decl arados.
Ut i l i zao de i dent ao
Est e um hbi t o que t odo programador deve desenvol ver. No consome mui t o esforo para mant er o cdi go ali nhado durant e o t r abal ho, porm quando necessri o pode- se ut ilizar a ferrament a TOTVS DevSt udi o para a re- i dent ao de cdi go. Para mai or es det al hes, consul t e a document ao sobre a i dent ao de cdi gos font es di sponvel nos demai s t pi cos dest e mat eri al .
Ut i l i zao de espaos em br anco
Espaos em branco ext r as t ornam o cdi go mais fci l para a l ei t ura. No necessri o i mensas reas em br anco, mas agrupar pedaos de cdi go at ravs da ut ili zao de espaos em branco funci ona mui t o bem. Cost uma- se separar parmet r os com espaos em branco.
Quebr a de l i nh as mu i t o l ongas
Com o obj et i vo de t ornar o cdi go mai s fcil de l er e i mpri mi r, as li nhas do cdi go no devem est ender o li mi t e da t ela ou do papel . Podem ser "quebradas" em mai s de uma li nha de t ext o ut ili zando o pont o- e- vrgul a ( ; ) .
Capi t u l ao de pal av r as- chav e
Uma conveno ampl ament e ut i lizada a de capi t ul ar as pal avras chaves, f unes, vari vei s e campos ut i lizando uma combi nao de caract er es em mai scul o e mi nscul o, vi sando facili t ar a l ei t ura do cdi go font e.
Avali ando o cdi go a segui r:
local ncnt while ( ncnt++ < 10 ) ntotal += ncnt * 2 enddo
- 350 -
ADVPL Compl et o
O mesmo fi cari a mui t o mai s cl aro se r e- escri t o conforme abai xo:
Local nCnt
While ( nCnt++ < 10 ) nTotal += nCnt * 2 EndDo
Ut i l i zao da Not ao Hngar a
A Not ao Hngara mui t o comum ent re pr ogramador es xBase e de out ras li nguagens. A document ao do ADVPL ut ili za est a not ao para a descri o das funes e comandos e aconsel hvel sua ut ilizao na cri ao de rot i nas, poi s aj uda a evi t ar pequenos err os e facili t a a l ei t ura do cdi go. Para mai ores det al hes, consul t e a document ao sobr e a ut ili zao da Not ao Hngara de cdi gos font es di sponvel nos demai s t pi cos dest e mat eri al .
Ut i l i zao de n omes si gn i f i cant es par a v ar i v ei s
A pri nci pal vant agem da li berdade na cri ao dos nomes de vari vei s a facili dade de i dent i fi cao da sua ut ili dade. Port ant o deve- se ut ili zar essa facili dade o mxi mo possvel . Nomes sem sent i do apenas t ornaro di fcil a ident i fi cao da ut ili dade de uma det ermi nada vari vel , assi m como nomes ext r emament e curt os. Nem sempr e a ut ili zao de uma vari vel chamada i a mel hor sada. Cl aro, no convm cri ar uma vari vel com um nome mui t o l ongo que ser ut ili zada como um cont ador, e r efer enci ada mui t as vezes no cdi go. O bom senso deve ser ut ili zado.
Cri ar vari vei s como nNumer o ou dDat a t ambm no aj udam na ident i fi cao. A Not ao Hngara j est sendo ut ilizada para i sso e o obj et i vo do nome da vari vel deveri a ser i dent i fi car sua ut ili zao, no o t i po de dado ut ili zado. Deve- se procurar subst i t ui r t ai s vari vei s por al go como nTot al ou dCompra.
O mesmo vli do para nomes de funes, que devem descrever um pouco sobr e o que a funo faz. Novament e nomes ext r emament e curt os no so aconsel hvei s.
Ut i l i zao de coment r i os
Coment ri os so mui t o t ei s na document ao de pr ogramas cri ados e para faci li t ar a i dent i fi cao de pr ocessos i mport ant es no fut ur o e devem sempr e ser ut ilizados.
Sempr e que possvel , funes cri adas devem t er uma breve descri o do seu obj et i vo, parmet ros e ret orno. Al m de servi r como document ao, os coment ri os embel ezam o cdi go ao separar as funes umas das out ras. Os coment ri os devem ser ut ilizados com bom senso, poi s r eescrever a si nt axe ADVPL em port ugus t orna- se apenas perda de t empo:
If nLastKey == 27 // Se o nLastKey for igual a 27
- 351 -
ADVPL Compl et o
Cr i ao de men sagen s si st mi cas si gn i f i cant es e con si st ent es
Sej a oferecendo assi st nci a, exi bi ndo mensagens de avi so ou mant endo o usuri o i nformado do est ado de al gum processo, as mensagens devem r efl et i r o t om geral e a i mport nci a da apli cao. Em t ermos gerai s, deve- se evi t ar ser mui t o i nformal e ao mesmo t empo mui t o t cni co.
"Aguarde. Reindexando (FILIAL+COD+ LOCAL) do arquivo: \DADOSADV\SB1990.DBF"
Esse t i po de mensagem pode dar i nformaes demai s para o usurio e dei x- l o sent i ndo- se desconfort vel se no souber o que si gni fi ca "rei ndexando", et c. E de fat o, o usuri o no devi a ser i ncomodado com t ai s det al hes. Apenas a frase "Aguarde, i ndexando." funci onaria corr et ament e, assi m como pal avras "pr ocessando" ou "r eorgani zando".
Out ra boa i di a evi t ar a r efer enci a a um i t em corr ent e de uma t abel a como um " r egi st ro":
"Deletar este registro?"
Se a operao est i ver sendo efet uada em um arqui vo de cli ent es, o usuri o deve ser quest i onado sobre a remoo do cli ent e cor rent e, se possvel informando val ores de i dent i fi cao como o cdi go ou o nome.
Ev i t ar abr ev i ao de coman dos em 4 l et r as
Apesar do ADVPL supor t ar a abr evi ao de comandos em quat r o l et r as ( por exempl o, r epl no l ugar de r epl ace) no h necessi dade de ut ili zar t al funci onali dade. I st o apenas t orna o cdi go mai s di fcil de l er e no t orna a compi l ao mai s rpi da ou si mpl es.
Ev i t ar " di sf ar ces" no cdi go
No deve- se cri ar const ant es para expr esses compl exas. I st o t ornar o cdi go mui t o di fcil de compreender e poder causar er r os pri mri os, poi s pode- se i magi nar que uma at ri bui o efet uada a uma vari vel quando na verdade h t oda uma expr esso di sfarada:
A i mpresso que se t em aps uma l ei t ura dest e cdi go de que val or es est o sendo at ri budos s vari vei s ou que const ant es est o sendo ut ilizadas. Se o obj et i vo fl exi bilidade, o cdi go ant eri or deve ser subst i t udo por:
If aReturn[ISDISK] == 1 aPrintDefs[ NUMLINES ] := 55 Endif
aPrintDefs[ NUMPAGES ] += 1
Ev i t ar cdi go de segu r an a desnecessr i o
Dada sua nat ur eza bi nri a, t udo pode ou no acont ecer dent r o de um comput ador . Adi ci onar pedaos de cdi go apenas para "garant i r a segurana" fr eqent ement e ut ilizado como uma descul pa para evi t ar cor ri gi r o pr obl ema r eal . I st o pode i nclui r a checagem para val i dar i nt erval os de dat as ou para t i pos de dados corr et os, o que comument e ut ilizando em funes:
Static Function MultMalor( nVal ) If ValType( nVal ) != "N" nVal := 0 Endif Return ( nVal * nVal )
O ganho i rri sri o na checagem do t i po de dado do parmet ro j que nenhum pr ograma corr et ament e escri t o em execuo poderi a envi ar uma st ring ou uma dat a para a funo. De fat o, est e t i po de "capt ura" o que t orna a depurao di fcil , j que o ret orno ser sempr e um val or vl i do ( mesmo que o par met ro r ecebi do sej a de t i po de dado i ncor ret o) . Se est a capt ura no t i ver si do efet uada quando um possvel er r o de t i po de dado i nvli do ocor rer, o cdi go pode ser cor ri gi do para que est e er r o no mai s acont ea.
I sol ament o de st r i ngs de t ex t o
No caso de mensagens e st ri ngs de t ext o, a cent rali zao um bom negci o. Pode- se col ocar mensagens, cami nhos para arqui vos, e mesmo out ros val or es em um l ocal especfi co. I st o os t orna acessvei s de qual quer l ugar no programa e fcei s de ger enci ar.
Por exempl o, se exi st e uma mensagem comum como " I mpr i mi n do, por f av or aguar de.. . " em mui t as part es do cdi go, corr e- se o ri sco de no segui r um padro para uma das mensagens em al gum lugar do cdi go. E mant - l as em um ni co l ugar, como um arqui vo de cabeal ho, t orna fci l a produo de document ao e a i nt ernaci onalizao em out r os i di omas.
- 353 -
ADVPL Compl et o
LI STAS DE EXERC CI OS
Mdul o 04.1.: Desenvol vendo apl i caes em ADVPL
01
Desenvol ver um progr ama que i mpl ement e a funo AxCadast ro( ) para a t abel a padro do si st ema SA2 Cadast ro de Fornecedor es.
02
I mpl ement ar no AxCadast ro( ) desenvol vi do no i t em ant eri or as funes de vali dao de al t erao e vali dao de excl uso.
03
Desenvol ver um programa que i mpl ement e a funo Mbrowse( ) ut ili zando as funes padres de cadast ro, para a t abel a padro do si st ema SA2 Cadast ro de Fornecedor es.
- 354 -
ADVPL Compl et o
04
I mpl ement ar no Mbr owse( ) desenvol vi do no i t em ant eri or a funo de l egenda.
05
I mpl ement ar no Mbrowse( ) desenvol vi do no i t em ant eri or uma funo especfi ca de i ncluso ut ilizando os r ecur sos adi ci onai s da funo AxI ncl ui( ) .
06
Desenvol ver um pr ogr ama que i mpl ement e uma MarkBr owse ut i lizando as funes padres de cadast ro, para a t abel a padro do si st ema SA2 Cadast ro de Fornecedor es.
07
I mpl ement ar na Mar kBr owse( ) desenvol vi da no i t em ant eri or uma funo para excl uso de ml t i pl os regi st ros da t abel a padro do si st ema SA2 Cadast ro de Fornecedor es.
- 355 -
ADVPL Compl et o
08
Desenvol ver um programa que i mpl ement e uma Mar kBr owse( ) para a t abel a padro do si st ema SA1 Cadast r o de Cli ent e, cont empl ando uma funo que permi t a a vi suali zao dos dados pri nci pai s de ml t ipl os cl i ent es sel eci onados.
09
Desenvol ver um progr ama que i mpl ement e uma Model o2( ) para a t abel a padro do si st ema SX5 Cadast r o de t abel as, cont empl ando a funci onali dade de i ncl uso.
10
I mpl ement ar na Model o2( ) desenvol vi da no it em ant eri or as funci onali dades de Vi sualizao, Al t erao e Excl uso.
11 Desenvol ver um programa que i mpl ement e uma Model o3( ) para as t abel as padres do si st ema SF1 Cabeal ho do Document o de Ent r ada e SD1 I t ens do document o de ent rada, cont empl ando as funci onali dades de Vi sualizao e I ncl uso.
- 356 -
ADVPL Compl et o
12
I mpl ement ar na Model o3( ) desenvol vi da no i t em ant eri or as funci onalidades e Al t erao e Excl uso.
13
Desenvol ver um progr ama que cri e um arqui vo de t rabal ho com est rut ura si mil ar ao SA1 e receba as i nformaes dest a t abel a.
14
I mpl ement ar na r ot i na desenvol vi da no i t em ant eri or, um Mar kBr owse que permi t e a sel eo e vi suali zao de apenas um r egi st ro sel eci onado.
15
Desenvol ver um progr ama que i mpl ement e um r el at ri o que permi t a a i mpresso de uma li st agem si mpl es dos dados da t abel a padro SA1 Cadast r o de cl i ent es.
- 357 -
ADVPL Compl et o
16
Desenvol ver um progr ama que i mpl ement e um r el at ri o que permi t a a i mpresso de uma l i st agem si mpl es das not as fi scai s e seus r espect i vos i t ens.
17
Desenvol ver um programa que real i ze a export ao dos i t ens marcados no SA1 Cadast ro de Cli ent es para um arqui vo no format o .TXT em um di ret ri o especi fi cado pel o usuri o.
18
Desenvol ver um programa que r eal i ze a i mport ao das i nformaes cont i das em um arqui vo no format o .TXT sel eci onado pel o usuri o e as at ual ize no SA1 Cadast r o de Cl i ent es.
19
Desenvol ver o mesmo programa do i t em ant eri or ut ili zando as funes da famli a FT.
- 358 -
ADVPL Compl et o
Mdul o 04.2.: Of i ci na de Pr ogr amao I
20
Desenvol ver uma apli cao vi sual que i mpl ement e cada um dos component es di sponvei s no font e DI ALOG_OBJETOS.PRW.
21
I mpl ement ar as r ot i nas de i mport ao e expor t ao desenvol vi das nos i t ens ant eri or as r guas de pr ocessament o mai s adequadas.
22
Subst i t ui r em uma das r ot i nas desenvol vidas ant eri orment e a funo Pergunt e( ) pel a funo ParamBox( ) .
- 359 -
ADVPL Compl et o
23
Desenvol ver uma rot i na que i mpl ement ar um Li st Box si mpl es que permi t a vi suali zar as t abel as cadast radas no SX5 Cadast ro de Tabel as.
25
I mpl ement ar na r ot i na desenvol vi da no i t em ant eri or a opo de vi suali zao dos i t ens de uma das t abel as sel eci onadas, demonst rando- os em uma Li st Box Gri d.
26
Desenvol ver uma r ot i na que i mpl ement e uma Model o2( ) ut ilizando os component es vi suai s necessri os, compl ement ados com os r ecur sos de rol agem do obj et o Scr ol l Box( ) .
- 360 -
ADVPL Compl et o
Mdul o 05: I nt r oduo a or i ent ao obj et os
27
I mpl ement ar a cl asse Al uno( ) com os mt odos New( ) , BuscaAl uno( ) e Sal vaAl uno( ) .
28
Desenvol ver a i nt erface vi sual para int eragi r com a cl asse Al uno( ) i mpl ement ada ant eri or ment e.
29
I mpl ement ar na rot i na desenvol vi da no i t em ant eri or os r ecursos necessri os para persi st i r as i nfor maes e r ecuperar os dados de i t ens pr evi ament e sal vos.
- 361 -
ADVPL Compl et o
Mdul o 06: ADVPL or i ent ado obj et os I
30
Desenvol ver uma rot i na que i mpl ement e uma Enchoi ce( ) para o SA1 Cadast r o de cl i ent es.
31
Adequar a r ot i na desenvol vi da no i t em ant eri or para permi t i r o uso da cl asse de obj et os MsMGet ( ) .
32
Desenvol ver uma i nt erface de cadast ro combi nando os r ecursos de um obj et o MsMGet ( ) e um obj et o MsNewGet Dados( ) causando o mesmo efei t o de uma i nt erface no padr o da Model o3( ) .
- 362 -
ADVPL Compl et o
33
I mpl ement ar na r ot i na desenvol vi da no it em ant eri or o uso da funo Enchoi ceBar( ) com um bot o que permi t a ao usuri o vi suali zar um dos i t ens exi bi dos na i nt erface.
34
Adequar a r ot i na desenvol vi da no it em ant eri or de for ma a subst i t ui r o uso da funo Enchoi ceBar( ) pel a cl asse de obj et o TBar( ) .
35
Convert er a si nt axe cl ssi ca ut ili zada no font e DI ALOG_OBJETOS. PRW para a si nt axe ori ent ada a obj et os.
36
Convert er a si nt axe cl ssi ca dos font es Li st Box para a si nt axe ori ent ada a obj et os.
- 363 -
ADVPL Compl et o
Pr oj et o: Av al i ao pr t i ca do t r ei nament o de ADVPL I nt er medi r i o
Obj et ivos do proj et o
E Contemplar o contedo do curso e estimular a prtica da programao utilizando a linguagem ADVPL;
E Acrescentar um grau de desafio ao treinamento;
Regras para ent rega e apresent ao
E Dever ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos necessrios. A avaliao do projeto ser realizada aps a entrega, no prazo estabelecido pelo instrutor;
E Pode ser realizado em grupos de at 03 pessoas. Caso existam alunos sem grupos, estes podero integrar equipes j formadas com o total de membros estabelecido, mediante aprovao do instrutor;
Avaliao do proj et o
E Mesmo peso da prova terica, podendo substitu-la integralmente. E Sero considerados os quesitos: O Funcionalidades O Clareza da programao O Apresentao O Otimizao de tcnicas e recursos apresentados no treinamento
Funcionalidades que compe o proj et o
Desenvolver uma aplicao utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:
01
Efet ue a l ei t ura de um arqui vo em format o . TXT com os dados necessri os para real i zar o cadast ro de fornecedor es no si st ema Pr ot heus, e grave est as i nformaes em um arqui vo int ermedi ri o.
02 A part i r da sel eo dos r egi st ros di sponvei s nest e arqui vo i nt ermedi ri o, o usuri o poder:
O I mpri mi r os i t ens sel eci onados; O Efet i var os i t ens sel eci onados, gravando- os no SA2 Cadast r o de Fornecedores; O Est ornar i t ens j efet i vados, el i mi nando- os do SA2 - Cadast r o de Fornecedores; O Excl ui r os regi st ros sel eci onados do arqui vo i nt ermedi ri o; O Excl ui r t odos os r egi st r os i mport ados de um arqui vo em for mat o .TXT especi fi cado. O Vi suali zar as i nformaes do r egi st ro gerado no arqui vo i nt ermedi ri o; O Vi suali zar o r egi st ro gerado no SA2 Cadast ro de Fornecedor es a part i r de um i t em sel eci onado no arqui vo i nt er medi ri o.
- 364 -
ADVPL Compl et o
MDULO 07: ADVPL Or i ent ado obj et os I I
Nest e mdul o sero t r at ados os component es e obj et os da i nt erface vi sual da li nguagem ADVPL, permi t i ndo o desenvol vi ment o de apli caes com i nt erfaces grfi cas com si nt axe ori ent ada a obj et os.
36. Component es da i nt er f ace vi sual do ADVPL
A linguagem ADVPL possui di versos component es vi suai s e auxiliares, os quai s podem ser represent ados ut i lizando a est rut ura abai xo:
. Cl asses da I nt er f ace Vi sual
Tsr vobj ect . Cl asses Aux i l i ar es
Tfont
. Cl asses de Janel as
Msdialog Tdialog Twindow
. Cl asses de Component es
Tcont r ol
. Cl asses de Component es Vi suai s Br get ddb Mscalend Mscalendgr id Msselbr Msworkt ime Sbut t on Tbar Tbit map Tbr owsebut t on Tbt nbmp Tbt nbmp2 Tbut t on Tcbr owse Tcheckbox Tcolor t r iangle Tcombobox Tfolder Tfont Tget Tgr oup Thbut t on Tibrowser Tlist box Tmenu Tmenubar Tmet er Tmsgr aphic Tmsgbar Tmult ibt n Tmult iget Tolecont ainer Tpageview Tpanel Tr admenu Tsbr owse Tsay Tscr ollbox Tsimpleedit or Tslider
- 365 -
ADVPL Compl et o
. Cl asses de Component es Vi suai s Tsplit t er Tt abs Tt oolbox Twbrowse Vcbrowse
At r i but os comu ns as cl asses de componen t es v i suai s
cCapt i on Tt ul o ou cont edo do obj et o. cF3 Consul t a F3 ao qual o obj et o est vi ncul ado, quando o mesmo do t i po get . cMsg Mensagem exi bi da na barra de st at us da j anel a pri nci pal quando o obj et o ganha foco. cName Nome do obj et o cTool t i p Mensagem exi bi da quando obj et o exi be seu t ool t i p. cVar i abl e Vari vel que receber o cont edo sel eci onado ou di git ado no obj et o, quando o mesmo for t o t i po get ou si milar. l Passw or d I ndi ca se o t ext o di gi t ado no obj et o ser exi bi do no f ormat o de password, quando o mesmo do t i po get . l ReadOn l y Fl ag que indi ca se o obj et o pode ou no ser edit ado. l Show Hi nt Fl ag que at i va .T. ou desat i va .F. a exi bi o do t ool t i p do obj et o. l Vi si bl eCont r ol Se . T. o obj et o vi svel , se .F. o obj et o i nvi svel . nHei ght Al t ura em pi xel s. nLef t Coordenada hori zont al em pi xel s. nTop Coordenada vert i cal em pi xel s. nWi dt h Largura em pi xel s. Pi ct ur e Pi ct ure de di gi t ao do obj et o, quando o mesmo do t i po get .
Ev ent os comun s as cl asses de compon ent es v i su ai s
bAct i on Bl oco de cdi go execut ado quando o obj et o ut ilizado, quando o mesmo do t i po bot o ou si mil ar. bCh ange Bl oco de cdi go execut ado quando ocor re uma mundana na sel eo de i t ens que compe o obj et o, como por exempl o em l i st as ou gri ds. bF3 Bl oco de cdi go execut ado quando ut ili zado o r ecurso de consul t a F3 vi ncul ado ao obj et o. bGot Focus Execut ado quando obj et o ganha foco. bl Cl i ck ed Execut ado quando aci onado cl i ck do bot o esquerdo do mouse sobr e o obj et o. bl Dbl Cl i ck Execut ado quando aci onado dupl o cli ck do bot o esquerdo do mouse sobr e o obj et o. bLost Focus Execut ado quando obj et o perde foco. br Cl i ck ed Execut ado quando aci onado cl i ck do bot o di rei t o do mouse sobr e o obj et o. bVal i d Execut ado quando o cont edo do obj et o modi fi cado e dever ser vali dado. Deve ret ornar . T. se o cont edo vli do e .F. se cont edo i nvli do. bWhen Execut ado quando h movi ment ao de foco na j anel a.Se ret ornar . T. o obj et o cont i nua habilit ado, se ret ornar .F. o obj et o ser desabili t ado.
- 366 -
ADVPL Compl et o
Cl asses da i nt er f ace v i su al
TSRVOBJECT( )
E Descr i o: Cl asse abst rat a i ni ci al de t odas as cl asses de i nt erface do ADVPL. No deve ser i nst anci ada di ret ament e.
E Pr opr i edades:
nLef t Coordenada hori zont al em pi xel s. nTop Coordenada vert i cal em pi xel s. nWi dt h Largura em pi xel s. nHei ght Al t ura em pi xel s. cCapt i on Tt ul o ou cont edo do obj et o. cTool t i p Mensagem exi bi da quando obj et o exi be seu t ool t i p. l Show Hi nt Fl ag que at i va .T. ou desat i va .F. a exi bi o do t ool t i p do obj et o. cMsg Mensagem exi bi da na barra de st at us da j anel a pri nci pal quando o obj et o ganha foco. nCl r Tex t Cor do t ext o do obj et o. nCl r Pane Cor do fundo do obj et o. bWhen Execut ado quando h movi ment ao de foco na j anel a.Se ret ornar . T. o obj et o cont i nua habilit ado, se ret ornar .F. o obj et o ser desabili t ado. bVal i d Execut ado quando o cont edo do obj et o modi fi cado e dever ser vali dado. Deve ret ornar . T. se o cont edo vli do e .F. se cont edo i nvli do. bl Cl i ck ed Execut ado quando aci onado cl i ck do bot o esquerdo do mouse sobr e o obj et o. br Cl i ck ed Execut ado quando aci onado cl i ck do bot o di rei t o do mouse sobr e o obj et o. bl Dbl Cl i ck Execut ado quando aci onado dupl o cli ck do bot o esquerdo do mouse sobr e o obj et o. oWnd Janel a onde o obj et o foi cri ado. l Vi si bl e Se . T. o obj et o vi svel , se .F. o obj et o i nvi svel . Car go Cont edo associ ado ao obj et o. bLost Focus Execut ado quando obj et o perde foco. bGot Focus Execut ado quando obj et o ganha foco.
E Const r ut or : No pode ser i nst an ci ada.
E Par met r os:
Nen hum -
- 367 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
Set Focu s
O Descr i o: Fora mudana do foco de ent rada de dados para o cont r ole. O Si nt ax e: Set Focus( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
Hi de
O Descr i o: Torna obj et o i nvi svel . O Si nt ax e: Hi de( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
Show
O Descr i o: Torna obj et o vi svel . O Si nt ax e: Show( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
Enabl e
O Descr i o: Habili t a o obj et o. O Si nt ax e: En abl e( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
- 368 -
ADVPL Compl et o
Di sabl e
O Descr i o: Desabi li t a o obj et o. O Si nt ax e: Di sabl e( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
Ref r esh
O Descr i o: Fora at ualizao ( si ncr oni a) de pr opri edades ent re o programa e o Prot heus Remot e. O Si nt ax e: Ref r esh( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
Ex empl o:
CLASS TCONTROL FROM TSRVOBJECT
- 369 -
ADVPL Compl et o
Cl asses aux i l i ar es
TFONT( )
E Descr i o: Cl asse de obj et os que defi ne a font e do t ext o ut ili zado nos cont rol es vi suai s.
E Pr opr i edades:
- Herdadas as cl asses superi or es
E Const r ut or : New( [ acName] , [ nPar2] , [ anHeight ] , [ l Par4] , [ al Bol d] , [ nPar6] , [ l Par7] , [ nPar8] , [ al I t alic] , [ al Underli ne] )
E Par met r os:
acName Caract er e, opci onal . Nome da font e, o padro Ari al . nPar 2 Reser vado. anHei ght Numri co, opci onal . Tamanho da font e. O padr o - 11. l Par 4 Reser vado. al Bol d Lgi co, opci onal . Se . T. o est i l o da font e ser negri t o. nPar 6 Reser vado. l Par 7 Reser vado. nPar 8 Reser vado. al I t al i c Lgi co, opci onal . Se . T. o est i l o da font e ser i t li co. al Under l i ne Lgi co, opci onal . Se . T. o est i l o da font e ser sublinhado.
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg, oSay DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE 'My dialog' PIXEL // Cria font para uso oFont:= TFont():New('Courier New',,-14,.T.) // Apresenta o tSay com a fonte Courier New oSay := TSay():New( 10, 10, {|| 'Mensagem'},oDlg,, oFont,,,, .T., CLR_WHITE,CLR_RED ) oSay:lTransparent:= .F. ACTIVATE MSDIALOG oDlg CENTERED Return
- 370 -
ADVPL Compl et o
Cl asses de j an el as
MSDI ALOG( )
E Descr i o: Cl asse de obj et os que deve ser ut ilizada como padr o de j anel a para ent rada de dados. MSDi al og um t i po de j anel a di l ogo modal , i st o , no permi t e que out ra j anel a at i va receba dados enquant o est a est i ver at i va.
E Pr opr i edades:
- Herdadas as cl asses superi or es
E Const r ut or : New( [ anTop] , [ anLeft ] , [ anBot t om] , [ anRi ght ] , [ acCapt i on] , [ cPar6] , [ nPar7] , [ l Par8] , [ nPar9] , [ anCl rText ] , [ anCl rBack] , [ oPar12] , [ aoWnd] , [ al Pi xel ] , [ oPar15] , [ oPar16] , [ l Par17] )
E Par met r os:
anTop Numri co, opci onal . Coordenada vert i cal superi or em pi xel s ou caract er es. anLef t Numri co, opci onal . Coordenada hori zont al esquerda em pi xel s ou caract eres. an Bot om Numri co, opci onal . Coordenada vert i cal i nferi or em pi xel s ou caract er es. anRi ght Numri co, opci onal . Coordenada hori zont al di reit a em pi xel s ou caract er es. acCapt i on Caract er e, opci onal . Tt ul o da j anel a. cPar 6 Reser vado. nPar 7 Reser vado. l Par 8 Reser vado. nPar 9 Reser vado. anCl r Tex t Numri co,opci onal . Cor do t ext o. anCl r Back Numri co,opci onal . Cor de fundo. oPar 12 Reser vado. aoWn d Obj et o, opci onal . Janel a me da j anel a a ser cri ada, padro a j anel a pri nci pal do programa. al Pi x el Lgi co, opci onal . Se . T. consi dera as coordenadas passadas em pi xel s, se .F. consi dera caract er es. oPar 15 Reser vado. oPar 16 Reser vado. nPar 17 Reser vado.
- 371 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() // cria dilogo Local oDlg := MSDialog():New(10,10,300,300,'Meu dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)
E Descr i o: Cl asse de obj et os do t i po di l ogo de ent rada de dados, sendo seu uso reservado. Recomenda- se ut ili zar a cl asse MSDi al og que herdada dest a cl asse.
E Pr opr i edades:
- Herdadas as cl asses superi or es
E Const r ut or : New( [ anTop] , [ anLeft ] , [ anBot t om] , [ anRi ght ] , [ acCapt i on] , [ cPar6] , [ nPar7] , [ l Par8] , [ nPar9] , [ anCl rText ] , [ anCl rBack] , [ oPar12] , [ aoWnd] , [ al Pi xel ] , [ oPar15] , [ oPar16] , [ nPar17] , [ anWi dt h] , [ anHei ght ] )
E Par met r os:
anTop Numri co, opci onal . Coordenada vert i cal superi or em pi xel s ou caract er es. anLef t Numri co, opci onal . Coordenada hori zont al esquerda em pi xel s ou caract eres. an Bot om Numri co, opci onal . Coordenada vert i cal i nferi or em pi xel s ou caract er es. anRi ght Numri co, opci onal . Coordenada hori zont al di reit a em pi xel s
- 372 -
ADVPL Compl et o
ou caract er es. acCapt i on Caract er e, opci onal . Tt ul o da j anel a. cPar 6 Reser vado. nPar 7 Reser vado. l Par 8 Reser vado. nPar 9 Reser vado. anCl r Tex t Numri co,opci onal . Cor do t ext o. anCl r Back Numri co,opci onal . Cor de fundo. oPar 12 Reser vado. aoWn d Obj et o, opci onal . Janel a me da j anel a a ser cri ada, padro a j anel a pri nci pal do programa. al Pi x el Lgi co, opci onal . Se . T. consi dera as coordenadas passadas em pi xel s, se .F. consi dera caract er es. oPar 15 Reser vado. oPar 16 Reser vado. nPar 17 Reser vado. anWi dt h Numri co, opci onal . Lar gura da j anel a em pi xel s. anHei ght Numri co, opci onal . Al t ura da j anel a em pi xel s.
E Mt odos aux i l i ar es:
Act i v at e
O Descr i o: At i va ( exi be) o di l ogo. Chamar soment e uma vez est e mt odo. O Si nt ax e: Act i vat e( [ bPar1] , [ bPar2] , [ bPar3] , [ al Cent er ed] , [ abValid] , [ l Par6] , [ abI ni t ] , [ bPar8] , [ bPar9] ) O Par met r os:
bPar 1 Reser vado. bPar 2 Reser vado. bPar 3 Reser vado. al Cent er ed Lgi co, opci onal . Se .T. exi be a j anel a cent ralizada, .F. padro. abVal i d Bl oco de cdi go, opci onal . Deve ret ornar .T. se cont edo do di l ogo vl i do, se ret ornar .F. o di l ogo no fechar quando sol i ci t ada de encerrar. l Par 6 Reser vado. abI ni t Bl oco de cdi go, opci onal . Execut ado quando o di l ogo i ni ci a exi bi o. bPar 8 Reser vado. bPar 9 Reser vado.
O Ret or no:
Nen hum -
- 373 -
ADVPL Compl et o
End
O Descr i o: Encerr a ( fecha) o di l ogo. O Si nt ax e: End( ) O Par met r os:
Nen hum -
O Ret or no: Lgi co .T. se o di l ogo foi encer rado.
Lgi co I ndi ca se o di l ogo foi encer rado.
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg // cria dilogo oDlg := MSDialog():New(10,10,300,300,'Meu dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.) // ativa dilogo centralizado oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando.. .')} )
/* os comandos abaixo proporcionam o mesmo resultado // cria dilogo DEFINE DIALOG oDlg TITLE 'Meu dialogo' FROM 10,10 TO 300,300 COLOR CLR_BLACK,CLR_WHITE PIXEL // ativa dilogo centralizado ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop('iniciando...')) VALID (msgstop('validou!'),.T.) */ Return Nil
- 374 -
ADVPL Compl et o
TWI NDOW( )
E Descr i o: Cl asse de obj et os do t i po di l ogo pri nci pal de programa. Dever exi st i r apenas uma i nst nci a dest e obj et o na execuo do programa.
E Pr opr i edades:
- Herdadas das cl asses superi or es
E Const r ut or : New( [ anTop] , [ anLeft ] ,[ anBot t om] , [ anRi ght ] , [ acTi t l e] , [ nPar6] , [ oPar7] ,[ oPar8] ,[ oPar9] , [ aoPar ent ] , [ l Par11] , [ l Par12] , [ anCl rFore] , [ anCl rBack] , [ oPar15] , [ cPar16] , [ l Par17] , [ l Par18] , [ l Par19] , [ l Par20] , [ al Pi xel ] ) ;
E Par met r os:
nTop Numri co, opci onal . Coordenada vert i cal superi or em pi xel s ou caract er es. nLef t Numri co, opci onal . Coordenada hori zont al esquerda em pi xel s ou caract eres. nBot t om Numri co, opci onal . Coordenada vert i cal i nferi or em pi xel s ou caract er es. nRi ght Numri co, opci onal . Coordenada hori zont al i nferi or em pi xel s ou caract er es. cTi t l e Caract er e, opci onal . Tt ul o da j anel a. nPar 6 Reser vado. oPar 7 Reser vado. oPar 8 Reser vado. oPar 9 Reser vado. oPar ent Obj et o, opci onal . Janel a me da j anel a corr ent e. l Par 11 Reser vado. l Par 12 Reser vado. nCl r For e Numri co, opci onal . Cor de fundo da j anel a. nCl r Tex t Numri co, opci onal . Cor do t ext o da j anel a. oPar 15 Reser vado. cPar 1 6 Reser vado. l Par 17 Reser vado. l Par 18 Reser vado. l Par 19 Reser vado. l Par 20 Reser vado. l Pi x el Lgi co, opci onal . Se . T. ( padro) consi dera coor denadas passadas em pi xel s, se .F. consi dera caract er es.
- 375 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
Act i v at e
O Descr i o: At i va ( exi be) a j anel a. Chamar esse mt odo apenas uma vez. O Si nt ax e: Act i vat e( [ acShow] , [ bPar2] , [ bPar3] , [ bPar4] , [ bPar5] , [ bPar 6] , [ abI ni t ] , [ bPar8] , [ bPar9] , [ bPar10] , [ bPar11] , [ bPar12] ,[ bPar13] , [ bPar14] , [ bPar15] , [ abVali d] , [ bPar17] , [ bPar18] ) . O Par met r os:
acShow Caract er , opci onal . I CONI ZED para j anel a i coni zada ou MAXI MI ZED para j anel a maxi mizada. bPar 2 Reser vado. bPar 3 Reser vado. bPar 4 Reser vado. bPar 5 Reser vado. bPar 6 Reser vado. abI ni t Bl oco de cdi go. Execut ado quando j anel a est sendo exi bi da. bPar 8 Reser vado. bPar 9 Reser vado. bPar 10 Reser vado. bPar 11 Reser vado. bPar 12 Reser vado. bPar 13 Reser vado. bPar 14 Reser vado. bPar 15 Reser vado. abVal i d Bl oco de cdi go. Execut ado quando a j anel a for sol i ci t ada de fechar. Dever ret or nar .T. se o cont edo da j anel a for vli do, ou .F. se no. Se o bl oco r et ornar .F. a j anel a no fechar. bPar 17 Reser vado. bPar 18 Reser vado.
O Ret or no:
Nen hum -
End
O Descr i o: Sol i ci t a encer rament o da j anel a. O Si nt ax e: End( ) O Par met r os:
Nen hum -
O Ret or no: Lgi co .T. se o di l ogo foi encer rado.
Lgi co I ndi ca se a j anel a foi encerrada.
- 376 -
ADVPL Compl et o
Cent er
O Descr i o: Cent ral iza a j anel a. O Si nt ax e: Cent er( ) O Par met r os:
Nen hum -
O Ret or no: Lgi co .T. se o di l ogo foi encer rado.
Nen hum -
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oWindow Local abInit:= {||conout('ativando!')} Local abValid:= {||conout('encerrando!'),.T.} oWindow:= tWindow():New( 10, 10, 200, 200, 'Meu programa',,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. ) oWindow:Activate('MAXIMIZED',,,,,,abInit,,,,,,,,,abValid,,)
/* os comandos abaixo proporcionam o mesmo resultado DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE 'Meu programa' COLOR CLR_WHITE,CLR_BLACK ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid */ Return .
- 377 -
ADVPL Compl et o
Cl asses de componen t es
TCONTROL( )
E Descr i o: Cl asse abst rat a comum ent r e t odos os component es vi suai s edi t vei s. No deve ser i nst anci ada di ret ament e.
E Pr opr i edades:
Al i gn Numri co. Al inhament o do cont r ol e no espao di sponi bili zado pel o seu obj et o par ent e. 0 = Nenhum ( padro) , 1= no t opo, 2 = no r odap, 3= a esquerda, 4 = a di rei t a e 5 = em t odo o parent e. l Modi f i ed Lgi co. Se .T. i ndi ca que o cont edo da vari vel associ ada ao cont r ol e foi modi fi cado. l ReadOn l y Lgi co. Se .T. o cont edo da vari vel associ ada ao cont r ol e permanecer apenas para l ei t ura. hPar ent Numri co. Handl e ( i dent i fi cador) do obj et o sobr e o qual o cont r ol e foi cri ado. bCh ange Bl oco de cdi go. Execut ado quando o est ado ou cont edo do cont r ol e modi fi cado pel a ao sobre o cont rol e.
E Const r ut or : No pode ser i nst an ci ada.
E Par met r os:
Nen hum -
E Mt odos aux i l i ar es:
Set Focu s
O Descr i o: Fora mudana do foco de ent rada de dados para o cont r ole. O Si nt ax e: Set Focus( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
Ex empl o:
CLASS TSay FROM Tcontrol
- 378 -
ADVPL Compl et o
Cl asses de componen t es v i suai s
BRGETDDB( )
E Descr i o: Cl asse de obj et os vi suai s do t i po Gr i d.
E Pr opr i edades:
+ Herdadas da cl asse superi or nAt Li nha at ual ment e sel eci onada / posi ci onada no obj et o nLen Nmer o t ot al de li nhas do obj et o
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al nWi dt h Numri co, opci onal . Lar gura do obj et o nHei ght Numri co, opci onal . Al t ura do obj et o bFi el ds Bl oco de cdi go, Li st a de Campos aHeader s Vet or, Descri o dos campos para no cabeal ho aCol Si zes Vet or, Largur a das col unas oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. cFi el d Caract er , opci onal . Campos necessri os ao fil t ro uVal ue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro uVal ue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro bCh ange Bl oco de cdi go, opci onal . Execut ado quando o i t em sel eci onado al t erado. bLDbl Cl i ck Bl oco de cdi go, opci onal . Execut ado quando aci onado dupl o cli ck do bot o esquerdo do mouse sobr e o cont r ol e. bRCl i ck No ut i lizado oFont Obj et o, opci onal . Font e oCur sor Obj et o, opci onal . Ti po do Cur sor nCl r For e Numri co, opci onal . Cor do t ext o da j anel a. nCl r Back Numri co, opci onal . Cor de fundo da j anel a. cMsg Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o obj et o l Updat e No ut i lizado cAl i as Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o se ut i lizado com Tabel a l Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Desi gn No Ut i li zado
- 379 -
ADVPL Compl et o
bVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. aAl t er No Ut i li zado oMot her No Ut i li zado
E Mt odos aux i l i ar es:
GoUp
O Descr i o: Sal t a uma linha para ci ma. O Si nt ax e: GoUp( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoDow n
O Descr i o: Sal t a uma linha para bai xo. O Si nt ax e: GoDow n( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoTop
O Descr i o: Sal t a para pri mei ra linha. O Si nt ax e: GoTop( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoBot t om
O Descr i o: Sal t a para ult i ma linha. O Si nt ax e: GoBot t om( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
- 380 -
ADVPL Compl et o
Row Count
O Descr i o: Ret orna numer o de l i nhas vi si vei s. O Si nt ax e: Row Count ( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
E Apar nci a:
- 381 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'
E Descr i o: Cl asse de obj et os vi suai s do t i po Cal endri o.
E Pr opr i edades:
+ Herdadas da cl asse superi or bCh ange Bl oco de cdi go execut ado na mudana de sel eo de um di a. bCh angeMes Bl oco de cdi go execut ado na mundaa de sel eo de um ms. dDi aAt u Di a at ual ment e sel eci onado
E Const r ut or : New( [ nRow] , [ nCol ] , [ oDl g] , [ l CanMult Sel ] )
- 382 -
ADVPL Compl et o
E Par met r os:
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado.
l CanMul t Sel Logi co, opci onal . Permi t e sel eo de mul t i pl os di as
E Apar nci a:
Ex empl o:
#include 'protheus.ch' user function Calend_Ex() DEFINE MSDIALOG oDlg FROM 0,0 TO 1000,1000 PIXEL TITLE 'Exemplo de MsCalend' // Cria objeto oCalend:=MsCalend():New(01,01,oDlg,.T.) // Code-Block para mudana de Dia oCalend:bChange := {|| Alert('Dia Selecionado: ' + dtoc(oCalend:dDiaAtu)) } // Code-Block para mudana de mes oCalend:bChangeMes := {|| alert('Mes alterado') } ACTIVATE MSDIALOG oDlg CENTERED Return
- 383 -
ADVPL Compl et o
MSCALENDGRI D( )
E Descr i o: Cl asse de obj et os vi suai s do t i po Grade de Perodos.
E Pr opr i edades:
bAct i on Bl oco de cdi go. Execut ado quando o bot o esquerdo do mouse pr essi onado. bRCl i ck Bl oco de cdi go. Execut ado quando o bot o di r ei t o do mouse pr essi onado.
E Const r ut or : New( [ aoWnd] , [ anRow] , [ anCol ] , [ anHei ght ] , [ anWi dt h] , [ dDat eI ni ] , [ nResol ut ion] , [ abWhen] , [ abAct i on] , [ nDefCol or] , [ bRCli ck] , [ lFill All ] )
E Par met r os:
aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado.
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. anHei ght Numri co, opci onal . Al t ura do bot o em pi xel s. anWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s.
dDat eI n i Dat a, Dat a i ni ci al do Calendri o nResol ut i on Numri co, Resol uo a ser apl i cada na gri d do Cal endri o abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no.
abAct i on Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado quando o bot o for pressi onado.
nDef Col or Numri co, opci onal . Cor do Fundo da Gri d. bRCl i ck Bl oco de cdi go, opci onal . Execut ado quando aci onado o bot o di rei t o do mouse sobr e o cont r ol e. l Fi l l Al l Lgi co, opci onal . Pr eenche t odo o peri odo
E Mt odos aux i l i ar es:
Add
O Descr i o: Adi ci ona peri odo na Gri d. O Si nt ax e: Add( cCapt i on, nLi n, nI ni t i al , nFi nal , nCol or, cDescri ) O Par met r os:
cCapt i on Caract er . Descri o a ser i nseri da a esquerda da Gri d nLi n Numeri co. Numer o da l inha a ser i nseri do o i t em nI n i t i al Numeri co. Di a i ni ci al nFi n al Numeri co. Di a Fi nal
- 384 -
ADVPL Compl et o
nCol or Numeri co. Cor que dest acara o i t em cDescr i Caract er , Opi ci onal . Descri o do t i po t ool t i p( hint ) do i t em
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Gri d
E Pr opr i edades:
+ Herdadas da cl asse superi or nAt Li nha at ual ment e sel eci onada / posi ci onada no obj et o nLen Nmer o t ot al de li nhas do obj et o
E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ aHeader s] , [ aCol Si zes] , [ oDl g] , [ cFi eld] , [ uVal ue1] , [ uValue2] , [ uChange] , [ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCur sor] , [ nCl rFore] , [ nCl rBack] , [ cMsg] , [ l Updat e] , [ cAl ias] , [ l Pi xel] , [ bWhen] , [ l Desi gn] , [ bVali d] )
E Par met r os:
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al nWi dt h Numri co, opci onal . Lar gura do obj et o nHei ght Numri co, opci onal . Al t ura do obj et o bFi el ds Bl oco de cdi go, Li st a de Campos aHeader s Vet or, Descri o dos campos para no cabeal ho aCol Si zes Vet or, Largur a das col unas oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. cFi el d Caract er , opci onal . Campos necessri os ao fil t ro uVal ue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro uVal ue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro bCh ange Bl oco de cdi go, opci onal . Execut ado quando o i t em sel eci onado al t erado. bLDbl Cl i ck Bl oco de cdi go, opci onal . Execut ado quando aci onado dupl o cli ck do bot o esquerdo do mouse sobr e o cont r ol e. bRCl i ck No ut i lizado oFont Obj et o, opci onal . Font e oCur sor Obj et o, opci onal . Ti po do Cur sor nCl r For e Numri co, opci onal . Cor do t ext o da j anel a. nCl r Back Numri co, opci onal . Cor de fundo da j anel a. cMsg Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o obj et o l Updat e No ut i lizado cAl i as Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o se ut i lizado com Tabel a l Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Desi gn No Ut i li zado bVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do.
- 386 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
GoUp
O Descr i o: Sal t a uma linha para ci ma. O Si nt ax e: GoUp( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoDow n
O Descr i o: Sal t a uma linha para bai xo. O Si nt ax e: GoDow n( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoTop
O Descr i o: Sal t a para pri mei ra linha. O Si nt ax e: GoTop( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoBot t om
O Descr i o: Sal t a para ult i ma linha. O Si nt ax e: GoBot t om( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
- 387 -
ADVPL Compl et o
Row Count
O Descr i o: Ret orna numer o de l i nhas vi si vei s. O Si nt ax e: Row Count ( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
E Apar nci a:
- 388 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'
// 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 .
MSWORKTI ME( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Bar ra de Perodo.
E Pr opr i edades:
bCh ange Bl oco de cdi go. Execut ado ao di sparar qual quer ao sobre o obj et o.
E Const r ut or : New( [ aoWnd] , [ anRow] , [ anCol ] , [ anHei ght ] , [ anWi dt h] , [ nResol ut i on] , [ cVal ue] , [ abWhen] , [ abChange] )
E Par met r os:
aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou
- 389 -
ADVPL Compl et o
caract eres. anHei ght Numri co, opci onal . Al t ura do bot o em pi xel s. anWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s. nResol ut i on Numri co, Resol uo a ser apl i cada na gri d do Cal endri o cVal u e Caract er , opci onal . Descri t i vo abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. abChange Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado quando o bot o for pressi onado.
E Mt odos aux i l i ar es:
Get Val ue
O Descr i o: Ret orna os i t em sel eci onados no for mat o XX X XX . O Si nt ax e: Get Val ue( ) O Par met r os:
Nen hum -
O Ret or no:
Car act er Ret orna os i t em sel eci onados no format o XX X XX .
Get I nt er Ti me
O Descr i o: Ret orna per i odo sel eci onado. O Si nt ax e: Get I nt erTi me( ) O Par met r os:
Nen hum -
O Ret or no:
Car act er Ret orna o perodo sel eci onada no format o HH: MM: SS
Set Resol
O Descr i o: Defi ne a r esol uo da demonst rao da bar ra de perodos. O Si nt ax e: Set Resol ( nResol ut i on) O Par met r os:
nResol ut i on Resol uo
O Ret or no:
Ni l
- 390 -
ADVPL Compl et o
Set Val ue
O Descr i o: At ri bui um det ermi ndo cont edo para um obj et o ou at ri but o de um obj et o. O Si nt ax e: Set Val ue( xVal ue, cPi ct ure) O Par met r os:
xVal ue Val or que ser at ri budo ao obj et o ou at ri but o do obj et o. cPi ct ure Pi ct ure de formao opci onal para o cont edo at ri budo.
O Ret or no:
Nen hum
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo' oMsWorkTime := MsWorkTime():New(oDlg,04,04,280,133,0,'',{||.T.},; {|oWorkTime|Alert('GetValue(): '+oWorkTime:GetValue()+chr(13)+; 'GetInterTime(): '+oWorkTime:GetInterTime())} ) oMsWorkTime:SetValue('X X XX X') ACTIVATE MSDIALOG oDlg CENTERED Return NIL
- 391 -
ADVPL Compl et o
SBUTTON( )
E Descr i o: Cl asse de obj et os vi suai s do t i po bot o que Defi ne o component e vi sual SBut t on, o qual permi t e a i ncl uso de bot es de operao na t el a da int erface, os quai s sero vi suali zados dependendo da i nt erface do si st ema ERP ut ili zada soment e com um t ext o si mpl es para sua i dent i fi cao, ou com uma i magem ( Bi t Map) pr- defi ni do.
E Pr opr i edades:
bAct i on Bl oco de cdi go. Execut ado ao pr eci onar o bot o esquerdo do mouse.
E Const r ut or : New( [ nTop] , [ nLeft ] , [ nType] , [ bAct i on] , [ oWnd] , [ l Enabl e] , [ cMsg] , [ bWhen] )
E Par met r os:
Par met r o Ti po / Descri o nTop Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. nLef t Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. nTy pe Numri co. Ti po do Bot o bAct i on Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado quando o bot o for pressi onado. oWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. l Enabl e Logi co, opci onal . Habili t a/ Desabi li t a bot o cMsg Caract er , Opi ci onal . Descri o do t i po t ool t i p( hint ) do i t em abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no.
E Mt odos aux i l i ar es:
Cr eat e
O Descr i o: Ret orna Mt odo const rut or opci onal da cl asse. O Si nt ax e: Creat e( ) O Par met r os:
Nen hum -
O Ret or no:
Obj et o Obj et o da cl asse Sbut t on com t odos os at ri but os com cont edos padres.
- 392 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo' oSButton1 := SButton():New( 01,01,1,{||Alert('SButton 01')},oDlg,.T.,,) oSButton2 := SButton():New( 21,01,2,{||Alert('SButton 02')},oDlg,.T.,,) oSButton3 := SButton():New( 41,01,3,{||Alert('SButton 03')},oDlg,.T.,,) oSButton4 := SButton():New( 61,01,4,{||Alert('SButton 04')},oDlg,.T.,,) ACTIVATE MSDIALOG oDlg CENTERED Return NIL
- 393 -
ADVPL Compl et o
TBAR( )
E Descr i o: Cl asse de obj et os vi suai s que permi t e a i mpl ement ao de um component e do t i po barra de bot es para a part e superi or de uma j anel a previ ament e defi ni da.
E Pr opr i edades:
- Herdados das cl asses superi or es.
E Const r ut or :
E Par met r os:
oWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. nBt nWi dt h Numri co, opci onal . Lar gura do bot o cont i do na barr a nBt nHei ght Numri co, opci onal . Al t ura do bot o cont i do na barra l 3D Lgi co, opci onal . Defi ne t i po da barra cMode No ut i lizado. oCur sor Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e a barra. cResour ce Caract er , opci onal . I magem do r ecurso a ser i nseri do como fundo da bar ra. l NoAut oAdj u st Lgi co.
E Apar nci a:
- 394 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch'
/*/ +------------------------------------------------------------------------ | Funo | TSTBAR | Autor | MICROSIGA |Data | | +------------------------------------------------------------------------ | Descrio | Programa que demonstra a utilizao do objeto TBar() | +------------------------------------------------------------------------ | Uso | Curso ADVPL | +------------------------------------------------------------------------ /*/
E Descr i o: Cl asse de obj et os vi suai s que permi t e a exi bi o de uma i magem.
E Pr opr i edades:
cResName Caract er e, Nome do r esource cBmpFil e Caract er e, Nome do arqui vo l St ret ch Lgi co, opci onal . St rech da i magem l Aut oSi ze Lgi co, opci onal . Tamanho aut omt i co l Transparent Lgi co, opci onal . Transparent e
E Const r ut or : New( [ anTop] , [ anLeft ] , [ anWi dt h] , [ anHei ght ] , [ acResName] , [ acBmpFil e] , [ al NoBor der] , [ aoWnd] , [ abLCl i cked] , [ abRCli cked] , [ al Scroll ] , [ alSt ret ch] , [ aoCursor] , [ acMsg] , [ al Updat e] , [ abWhen] , [ al Pi xel ] , [ abVali d] , [ al Desi gn] , [ al I sI con] , [ al I sJpeg] )
E Par met r os:
anTop Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anLef t Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. anWi dt h Numri co, opci onal . Lar gura em pi xel s. anHei ght Numri co, opci onal . Al t ura em pi xel s. acResName Caract er e, Nome do r esource. acBmpFi l e Caract er e, Nome do arqui vo. al NoBor der Lgi co, opci onal . Exi be borda aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde a i magem dever ser cri ada. abLCl i ck ed Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado bot o esquerdo do mouse for pressi onado. abRCl i ck ed Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado bot o di rei t o do mouse for pr essi onado. al Scr ol l Lgi co, opci onal . At i va o scrol l al St r et ch Lgi co, opci onal . St rech da i magem aoCur sor Obj et o, opci onal . Cursor a ser exi bi do acMsg No ut i lizado al Updat e No ut i lizado abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. al Pi x el Lgi co, opci onal . Ut iliza coordenadas em pi xel abVal i d Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado na vali dao. al Desi gn No ut i lizado al I sI con Lgi co, opci onal . cone. No ut i lizado a part i r da verso Prot heus 8 al I sJpeg Lgi co, opci onal . Jpeg. No ut i lizado a part i r da verso Prot heus 8
- 396 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
Cr eat e
O Descr i o: Ret orna Mt odo const rut or opci onal da cl asse. O Si nt ax e: Creat e( ) O Par met r os:
Nenhum -
O Ret or no:
Obj et o Obj et o da cl asse TBar com t odos os at r i but os com cont edos padres.
Set Bmp
O Descr i o: Mt odo par a car r egar uma i magem do reposi t ri o. O Si nt ax e: Set Bmp( acResName ) O Par met r os:
acResName Caract er e, Nome do r esource
O Ret or no:
Nen hum -
Load
O Descr i o: Mt odo par a car r egar uma i magem do reposi t ri o ou l ocal . O Si nt ax e: Load( acResName, acBmpFi l e ) O Par met r os:
acResName Caract er e, Nome do r esource. acBmpFil e Caract er e, Nome do arqui vo.
O Ret or no:
Nen hum -
E Apar nci a:
- 397 -
ADVPL Compl et o
Ex empl o:
#include protheus.ch
User Function tBitmapTst() Local oDlg Local oBmp
DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 280,330 PIXEL
E Descr i o: Cl asse de obj et os vi suai s do t i po bot o no format o padro ut ili zado em br owses da apl i cao.
E Pr opr i edades:
bAct i on Bl oco de cdi go. Execut ado ao pr eci onar o bot o esquerdo do mouse.
E Const r ut or : New( [ nRow] , [ nCol ] , [ cCapt i on] , [ oWnd] , [ bAct i on] , [ nWi dt h] , [ nHei ght ] , [ nHel pI d] , [ oFont ] , [ l Defaul t ] , [ l Pi xel ] , [ l Desi gn] , [ cMsg] , [ l Updat e] , [ bWhen] , [ bVali d] , [ l Cancel ] )
E Par met r os:
nRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. nCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. cCapt i on Caract er e, opci onal . Ti t ul o do bot o. oWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. bAct i on Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado quando o bot o for pressi onado. nWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s nHei ght Numri co, opci onal . Al t ura do bot o em pi xel s.
nHel pI d Reser vado oFont Obj et o, opci onal . Obj et o t i po t Font com propri edades da font e ut i lizada para o t t ul o do bot o. l Def au l t Reser vado l Pi x el Lgi co, opci onal . Se . T. consi dera as coordenadas passadas em pi xel s, se .F. ( padro) consi dera em caract eres.
- 398 -
ADVPL Compl et o
l Desi gn Reser vado cMsg Reser vado l Updat e Reser vado bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. bVal i d Reser vado l Cancel Reser vado
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo' oTBrowseButton := TBrowseButton():New( 01,01,'TBrowseButton',oDlg,;
E Descr i o: Cl asse de obj et os vi suai s do t i po bot o, o qual permi t e que sej a vi ncul ada uma i magem ao cont r ol e.
E Pr opr i edades:
bAct i on Bl oco de cdi go. Execut ado ao pr eci onar o bot o esquerdo do mouse.
E Const r ut or : NewBar( [ cResName1] , [ cResName2] , [ cBmpFil e1] , [ cBmpFil e2] , [ cMsg] , [ bAct i on] , [ l Group] , [ oWnd] , [ l Adj ust ] , [ bWhen] , [ cTool Ti p] , [ l Pressed] , [ bDr op] , [ cAct i on] , [ nPos] , [ cPr ompt ] , [ oFont ] , [ cResName3] , [ cBmpFi le3] , [ l Border] )
E Par met r os:
cResName1 Caract er e, Nome do r esource cResName2 Caract er e, Nome do r esource cBmpFi l e1 Caract er e, NO UTI LI ZADO cBmpFi l e2 Caract er e, NO UTI LI ZADO cMsg Caract er e, Mensagem de Hi nt bAct i on Bl oco de cdi go. Ao execut ada l Gr oup Lgi co. Defi ne grupo oWnd Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado l Adj u st Lgi co, NO UTI LI ZADO bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. cTool Ti p Mensagem exi bi da quando obj et o exi be seu t ool t i p. l Pr essed No ut i lizado bDr op No ut i lizado cAct i on No ut i lizado nPos No ut i lizado cPr ompt Caract er , opci onal . Capt i on do bot o. oFont Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as caract erst i cas da font e ut ili zada para exi bi r o cont edo do cont r ol e. cResName3 No ut i lizado cBmpFi l e3 No ut i lizado l Bor der No ut i lizado
- 400 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
LoadBi t maps
O Descr i o: At ri bui ao bot o os bi t maps ou r ecursos para exi bi o. O Si nt ax e: LoadBi t maps( [ cResName1] , [ cResName2] , [ cBmpFi l e1] , [ cBmpFil e2] , [ cResName3] , [ cBmpFil e3] )
O Par met r os:
cResName1 Caract er e, Nome do r esource cResName2 Caract er e, Nome do r esource cBmpFil e1 Caract er e, Nome do arqui vo BMP cBmpFil e2 Caract er e, Nome do arqui vo BMP cResName3 Caract er e, Nome do r esource cBmpFil e3 Caract er e, Nome do r esource
O Ret or no:
Nen hum
Set PopUpMenu
O Descr i o: Set a o obj et o do t i po TMenu referent e ao bot o. O Si nt ax e: Set PopupMenu( oMenu) O Par met r os:
Nenhum -
O Ret or no:
Nen hum -
E Apar nci a:
- 401 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo' oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. ) // Orig: 25,45 oTBtnBmp1 := TBtnBmp() :NewBar('RPMNEW',,,,'Msg 01',; {||Alert('TBtnBmp 01')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. ) oTBtnBmp2 := TBtnBmp() :NewBar('copyuser',,,,'Msg 02',; {||Alert('TBtnBmp 02')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
ACTIVATE MSDIALOG oDlg CENTERED Return NIL
TBTNBMP2 ( )
E Descr i o: Cl asse de obj et os vi suai s do t i po bot o, o qual permi t e a exi bi o de uma i magem ou de um popup.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New( [ anTop] , [ anLeft ] , [ anWi dt h] , [ anHei ght ] , [ acResName1] , [ acResName2] , [ acBmpFil e1] , [ acBmpFil e2] ,[ abAct i on] , [ aoWnd] , [ acMsg] , [ abWhen] , [ l Adj ust e] , [ l Updat e] )
E Par met r os:
anTop Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anLef t Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. anWi dt h Numri co, opci onal . Lar gura em pi xel s. anHei ght Numri co, opci onal . Al t ura em pi xel s. acResName1 Caract er e, Nome do r esource acResName2 Caract er e, NO UTI LI ZADO acBmpFi l e1 Caract er e, NO UTI LI ZADO acBmpFi l e2 Caract er e, NO UTI LI ZADO abAct i on Bl oco de cdi go. Ao execut ada aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado acMsg Caract er e, Mensagem de Hi nt abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Adj u st Lgi co, NO UTI LI ZADO l Updat e Lgi co, NO UTI LI ZADO
E Mt odos aux i l i ar es:
- 402 -
ADVPL Compl et o
LoadBi t maps
O Descr i o: At ri bui ao bot o os bi t maps ou r ecursos para exi bi o. O Si nt ax e: LoadBi t maps( [ cResName1] , [ cResName2] , [ cBmpFi l e1] , [ cBmpFil e2] , [ cResName3] , [ cBmpFil e3] )
O Par met r os:
cResName1 Caract er e, Nome do r esource cResName2 Caract er e, Nome do r esource cBmpFi l e1 Caract er e, Nome do arqui vo BMP cBmpFi l e2 Caract er e, Nome do arqui vo BMP cResName3 Caract er e, Nome do r esource cBmpFi l e3 Caract er e, Nome do r esource
O Ret or no:
Nen hum
Set PopUpMenu
O Descr i o: Set a o obj et o do t i po TMenu referent e ao bot o. O Si nt ax e: Set PopupMenu( oMenu) O Par met r os:
Nenhum -
O Ret or no:
Nen hum -
E Apar nci a:
- 403 -
ADVPL Compl et o
Ex empl o:
Local oBtn := TBtnBmp2():New( 10, 10, 25, 25, 'printer_r2' , , , , , oDlg, , , ) Exemplo 2 (Popup) #INCLUDE 'PROTHEUS.CH' User Function BtnBmpPopUp Local oDlg Local oBtn DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 100,200 PIXEL oBtn := TBtnBmp2():New( 10, 10, 13, 13, 'IBF-MENU.BMP' , 'IBF-MENU.BMP' , , , , oDlg, , , .T.) oBtn:SetPopupmenu(TShowMenu()) ACTIVATE MSDIALOG oDlg CENTERED Return
/**************************/ Static Function TShowMenu() Local oMenu oMenu := TMenu():New(0,0,0,0,.T.) oMenu:Add(TMenuItem():New(,'Detalhes', 'Detalhes',,, ,,,,,,,,,.T.)) oMenu:Add(TMenuItem():New(,'Add Info', 'Add Info',,, ,,,,,,,,,.T.)) Return oMenu
TBUTTON( )
E Descr i o: Cl asse de obj et os vi suai s do t i po bot o, o qual permi t e a ut ili zao de t ext o para sua i dent ifi cao.
E Pr opr i edades:
l Pr ocessi n g Lgi co. Se .T. i ndi ca o bot o est efet uando uma ao. bAct i on Bl oco de cdi go. Execut ado quando o bot o pressi onado.
E Const r ut or : New( [ anRow] , [ anCol ] , [ acCapt i on] , [ aoWnd] , [ abAct i on] , [ anWi dt h] , [ anHei ght ] , [ nPar8] , [ aoFont ] , [ l Par10] , [ al Pi xel ] ,[ l Par12] ,[ cPar13] , [ l Par14] , [ abWhen] , [ bPar16] , [ l Par17] )
E Par met r os:
Par met r o Ti po / Descri o anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. acCapt i on Caract er e, opci onal . Ti t ul o do bot o. aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. abAct i on Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado quando o bot o for pressi onado. anWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s. anHei ght Numri co, opci onal . Al t ura do bot o em pi xel s. nPar 8 Reser vado. aoFont Obj et o, opci onal . Obj et o t i po t Font com propri edades da font e ut i lizada para o t t ul o do bot o.
- 404 -
ADVPL Compl et o
l Par 10 Reser vado. al Pi x el Lgi co, opci onal . Se . T. consi dera as coordenadas passadas em pi xel s, se .F. ( padro) consi dera em caract eres. l Par 12 Reser vado. cPar 1 3 Reser vado. l Par 14 Reser vado. abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. bPar 16 Reser vado. l Par 17 Reser vado.
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function TesteGet() Local oDlg, oButton, oCombo, cCombo aItems:= {'item1','item2','item3'} cCombo:= aItems[2] DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Combo' oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},; aItems,100,20,oDlg,,{||MsgStop('Mudou item')},,,,.T.,,,,,,,,,'cCombo')
// Boto para fechar a janela oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.) ACTIVATE MSDIALOG oDlg CENTERED MsgStop( 'O valor '+cCombo ) Return NIL
- 405 -
ADVPL Compl et o
TCBROWSE( )
E Descr i o: Cl asse de obj et os vi suai s do t i po Gr i d.
E Pr opr i edades:
+ Herdadas da cl asse superi or nAt Li nha at ual ment e sel eci onada / posi ci onada no obj et o nLen Nmer o t ot al de li nhas do obj et o
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al nWi dt h Numri co, opci onal . Lar gura do obj et o nHei ght Numri co, opci onal . Al t ura do obj et o bFi el ds Bl oco de cdi go, Li st a de Campos aHeader s Vet or, Descri o dos campos para no cabeal ho aCol Si zes Vet or, Largur a das col unas oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. cFi el d Caract er , opci onal . Campos necessri os ao fil t ro uVal ue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro uVal ue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro bCh ange Bl oco de cdi go, opci onal . Execut ado quando o i t em sel eci onado al t erado. bLDbl Cl i ck Bl oco de cdi go, opci onal . Execut ado quando aci onado dupl o cli ck do bot o esquerdo do mouse sobr e o cont r ol e. bRCl i ck No ut i lizado oFont Obj et o, opci onal . Font e oCur sor Obj et o, opci onal . Ti po do Cur sor nCl r For e Numri co, opci onal . Cor do t ext o da j anel a. nCl r Back Numri co, opci onal . Cor de fundo da j anel a. cMsg Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o obj et o l Updat e No ut i lizado cAl i as Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o se ut i lizado com Tabel a l Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Desi gn No Ut i li zado bVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo
- 406 -
ADVPL Compl et o
for vl i do e .F. quando o cont edo for i nvli do. l HScr ol l Lgi co, opci onal . Se . T., habilit a barra de rol agem hori zont al . l VScr ol l Lgi co, opci onal . Se . T., habilit a barra de rol agem vert i cal .
E Mt odos aux i l i ar es:
GoUp
O Descr i o: Sal t a uma linha para ci ma. O Si nt ax e: GoUp( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
GoDow n
O Descr i o: Sal t a uma linha para bai xo. O Si nt ax e: GoDow n( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
GoTop
O Descr i o: Sal t a para pri mei ra linha. O Si nt ax e: GoTop( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
GoBot t om
O Descr i o: Sal t a para ult i ma linha. O Si nt ax e: GoBot t om( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
- 407 -
ADVPL Compl et o
Row Count
O Descr i o: Ret orna numer o de l i nhas vi si vei s. O Si nt ax e: Row Count ( ) O Par met r os:
Nen hum -
O Ret or no:
Ni l
E Apar nci a:
- 408 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' user function TcBrowse_EX() Local oOK := LoadBitmap(GetResources(),'br_verde') Local oNO := LoadBitmap(GetResources(),'br_vermelho') Local aList := {} // Vetor com elementos do Browse Local nX // Cria Vetor para teste for nX := 1 to 100 aListAux := {.T., strzero(nX,10), 'Descrio do Produto '+; strzero(nX,3), 1000.22+nX} aadd(aList, aListAux) next
DEFINE MSDIALOG oDlg FROM 0,0 TO 520,600 PIXEL TITLE 'Exemplo da TCBrowse' // Cria objeto de fonte que sera usado na Browse Define Font oFont Name 'Courier New' Size 0, -12 // Cria Browse oList := TCBrowse():New( 01 , 01, 300, 200,,; '','Codigo','Descrio','Valor'},{20,50,50,50},; oDlg,,,,,{||},,oFont,,,,,.F.,,.T.,,.F.,,, ) // Seta o vetor a ser utilizado oList:SetArray(aList) // Monta a linha a ser exibina no Browse oList:bLine := {||{ If(aList[oList:nAt,01],oOK,oNO),; aList[oList:nAt,02],; aList[oList:nAt,03],; Transform(aList[oList:nAT,04],'@E 99,999,999,999.99') } } // Evento de DuploClick (troca o valor do primeiro elemento do Vetor) oList:bLDblClick := {|| aList[oList:nAt][1] :=; !aList[oList:nAt][1],oList:DrawSelect() } // Principais commandos oBtn := TButton():New( 210, 001,'GoUp()' , oDlg,{||oList:GoUp()},; 40, 010,,,.F.,.T.,.F.,,.F.,,,.F. ) oBtn := TButton():New( 220, 001,'GoDown()', oDlg,{||oList:GoDown()},; 40, 010,,,.F.,.T.,.F.,,.F.,,,.F. ) oBtn := TButton():New( 230, 001,'GoTop()' , oDlg,{||oList:GoTop()}, ; 40, 010,,,.F.,.T.,.F.,,.F.,,,.F. ) oBtn := TButton():New( 240, 001,'GoBottom()', oDlg,{||oList:GoBottom()},; 40, 010,,,.F.,.T.,.F.,,.F.,,,.F. ) oBtn := TButton():New( 210, 060, 'nAt (Linha selecionada)' ,; oDlg,{|| Alert(oList:nAt)},; 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. ) oBtn := TButton():New( 220, 060, 'nRowCount (Nr de linhas visiveis)', oDlg,;{|| Alert(oList:nRowCount()) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 230, 060, 'nLen (Numero total de linhas)', oDlg,; {|| Alert(oList:nLen) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - CheckBox.
E Pr opr i edades:
bLCl i ck ed Bl oco de cdi go di sparado ao cl i que do mouse no obj et o bSet Get Bl oco de cdi go di sparado na mudana de i t em sel eci onado, responsavel pel a mudana de val or da vari avel numeri ca que i ndi ca o i t em sel eci onado. bWhen Bl oco de cdi go r ecebe um l gi co e de True per mi t e al t erao, se Fal se no permi t e. bVal i d Bl oco de cdi go execut ado na sai da do obj et o.
E Const r ut or : New( [ nRow] , [ nCol ] , [ cCapt i on] , [ bSet Get ] , [ oDl g] , [ nWi dt h] , [ nHei ght ] , [ aHel pI ds] , [ bLCl i cked] , [ oFont ] , [ bVali d] , [ nCl rText ] , [ nCl rPane] , [ l Desi gn] , [ lPi xel ] , [ cMsg] , [ l Updat e] , [ bWhen] )
E Par met r os:
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al cCapt i on Caract er , Text o descri t ivo bSet Get Code- bl ock, opci onal , Responsvel pel a set agem de val or oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. nWi dt h Numri co, opci onal . Lar gura do obj et o nHei ght Numri co, opci onal . Al t ura do obj et o aHel pI ds No ut i lizado bLCl i ck ed Bl oco de cdi go, opci onal . Execut ado ao cl i que do mouse. oFont Obj et o, opci onal . Font e bVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. nCl r Tex t Numri co, opci onal . Cor do t ext o da j anel a. nCl r Pane Numri co, opci onal . Cor de fundo da j anel a. l Desi gn No ut i lizado l Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. cMsg Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o obj et o l Updat e No ut i lizado bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no.
- 410 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#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.,,,)
// Seta Eventos do primeiro Check oCheck1:bSetGet := {|| lCheck1 } oCheck1:bLClicked := {|| lCheck1:=!lCheck1 } oCheck1:bWhen := {|| .T. } oCheck1:bValid := {|| Alert('bValid') } // Principais comandos oBtn := TButton():New( 060, 001, 'Retorna estado do CheckBox 001',; oDlg,{|| Alert(lCheck1) }, 120, 010,,,.F.,.T.,.F.,,.F.,,,.F. ) ACTIVATE MSDIALOG oDlg CENTERED return
- 411 -
ADVPL Compl et o
TCOLORTRI ANGLE( )
E Descr i o: Cl asse de obj et os vi suai s do t i po Pal et a de Cor es.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New( [ anRow] , [ anCol ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde a pal et a dever ser cri ada. anWi dt h Numri co, opci onal . Lar gura da pal et a em pi xels. anHei ght Numri co, opci onal . Al t ura da pal et a em pi xel s.
E Mt odos aux i l i ar es:
Cr eat e
O Descr i o: Mt odo const rut or opci onal da cl asse. O Si nt ax e: Creat e( aoWnd) O Par met r os:
aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde a pal et a dever ser cri ada.
O Ret or no:
Obj et o Obj et o do t i po TCol orTr i angul e com os at ri but os defi ni dos com cont edo padro.
Ret Col or
O Descr i o: Ret orna o RGB da cor sel eci onada O Si nt ax e: Ret Col or ( ) O Par met r os:
Nenhum -
O Ret or no:
Numr i co Val or que represent a do RGB da cor.
- 412 -
ADVPL Compl et o
Set Col or I n i
O Descr i o: Defi ne a cor i ni ci al sel eci onada para o cont r ol e. O Si nt ax e: Set Col or I ni ( nCol or ) O Par met r os:
nCol or Val or da cor i ni ci al no padro RGB.
O Ret or no:
Nen hum -
Set Col or
O Descr i o: Defi ne a cor corr ent e. O Si nt ax e: Set Col or ( nCol or ) O Par met r os:
nCol or Val or da cor i ni ci al no padro RGB.
O Ret or no:
Nen hum -
Set Si zeTr i angul e
O Descr i o: Defi ne o t amanho do t ri ngul o de confi gurao das cores. O Si nt ax e: Set Si zeTr i an gul e ( nWi dh, nHei ght ) O Par met r os:
nWi dt h Numri co. Largura nHei ght Numri co.Al t ura
O Ret or no:
Nen hum -
E Apar nci a:
- 413 -
ADVPL Compl et o
Ex empl o:
#include protheus.ch
User Function tColor() Local oDlg, oColorT DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Cores // Usando o mtodo create oColorT := tColorTriangle():Create( oDlg ) oColorT:SetColorIni( nColorIni ) ACTIVATE MSDIALOG oDlg CENTERED Return Nil
TCOMBOBOX( )
E Descr i o: Cl asse de obj et os vi suai s do t ipo t ComboBox, a qual cri a uma ent rada de dados com ml t ipl a escol ha com i t em defi ni do em uma li st a vert i cal , aci onada por F4 ou pel o bot o esquerdo l ocali zado na part e di rei t a do cont rol e. A vari vel associ ada ao cont rol e t er o val or de um dos i t ens sel eci onados ou no caso de uma li st a i ndexada, o val or de seu ndi ce.
E Pr opr i edades:
aI t ems Array. Li st a de i t ens, caract er es, a serem exi bi dos. Pode t er os segui nt es format os: a) Seqenci al , exempl o: { i t em1 , i t em2 ,... , i t emN } ou b) I ndexada, exempl o: { a= i t em1 , b= i t em2 , ..., n= i t emN } . nAt Numri co. Posi o do i t em sel eci onado.
E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ anI t ems] , [ anWi dt h] , [ anHei ght ] , [ aoWnd] , [ nPar8] , [ abChange] , [ abVali d] , [ anCl rText ] , [ anCl rBack] , [ al Pi xel ] , [ aoFont ] , [ cPar15] , [ l Par16] , [ abWhen] , [ l Par18] , [ aPar19] , [ bPar20] , [ cPar21] , [ acReadVar] )
E Par met r os:
Par met r o anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou caract eres. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. abSet Get Bl oco de cdi go, opci onal . Bl oco de cdi go no format o { | u| i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za para at uali zar a vari vel < var > . < var > deve ser t i po caract er. Se a l i st a for seqenci al , o cont rol e at ualizar < var> com o cont edo do i t em sel eci onado, se a li st a for i ndexada, < var> ser at ualizada com o val or do ndi ce do i t em sel eci onado. an I t ems Array, opci onal . Li st a de i t ems, caract er es, a ser em exi bi dos. Pode t er os segui nt es format os: a) Seqenci al , exempl o: { i t em1 , i t em2 ,... , i t emN } ou b) I ndexada, exempl o: { a= i t em1 , b= i t em2 , ..., n= i t emN } . anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s.
- 414 -
ADVPL Compl et o
anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e ser cri ado. nPar 8 Reser vado. abChange Bl oco de cdi go, opci onal . Execut ado quando o cont r ol e modi fi ca o i t em sel eci onado. abVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. anCl r Back Numri co, opci onal . Cor de fundo do cont rol e. anCl r Tex t Numri co, opci onal . Cor do t ext o do cont rol e. al Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. aoFont Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as caract erst i cas da font e ut ili zada para exi bi r o cont edo do cont r ol e. cPar 1 5 Reser vado. l Par 16 Reser vado. abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Par 18 Reser vado. aPar 19 Reser vado. bPar 20 Reser vado. cPar 2 1 Reser vado. acReadVar Caract er e, opci onal . Nome da vari vel que o cont rol e dever mani pul ar, dever ser a mesma vari vel informada no parmet ro abSet Get , e ser o r et orno da funo ReadVar( ) .
E Mt odos aux i l i ar es:
Sel ect
O Descr i o: Muda o i t em sel eci onado no combobox. O Si nt ax e: Sel ect ( [ anI t em] ) O Par met r os:
anI t em Numri co, opci onal . Posi o do i t em a ser sel eci onado.
O Ret or no:
Nen hum -
- 415 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function TesteGet() Local oDlg, oButton, oCombo, cCombo aItems:= {'item1','item2','item3'} cCombo:= aItems[2] DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Combo' oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},; aItems,100,20,oDlg,,{||MsgStop('Mudou item')},,,,.T.,,,,,,,,,'cCombo')
// Boto para fechar a janela oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.) ACTIVATE MSDIALOG oDlg CENTERED MsgStop( 'O valor '+cCombo ) Return NIL
- 416 -
ADVPL Compl et o
TFOLDER( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Fol der.
E Pr opr i edades:
aPr ompt s Array, Ti t ul o dos fol ders aDi al ogs Array, Nome dos di l ogos nOpt i on Numri co, Fol der sel ecionado bSet Opt i on Bl oco de cdi go, Execut ado na sel eo do fol der
E Const r ut or : New( [ anTop] , [ anLeft ] , [ aPr ompt s] , [ aDi al ogs] , [ aoWnd] , [ anOpt i on] , [ anCl rFore] , [ anCl rBack] , [ al Pi xel ] , [ al Desi gn] , [ anWi dt h] , [ anHei ght ] , [ acMsg] , [ al All Wi dt h] )
E Par met r os:
anTop Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anLef t Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. aPr ompt s Array, Ti t ul o dos fol ders aDi al ogs Array, Nome dos di l ogos aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado anOpt i on Numri co, opci onal . Folder sel eci onado anCl r For e Numri co, opci onal . Cor de fr ent e anCl r Back Numri co, opci onal . Cor de fundo al Pi x el Lgi co, opci onal . Ut iliza coordenadas em pi xel al Desi gn Lgi co, opci onal . NO USADO anWi dt h Numri co, opci onal . Lar gura em pi xel s. anHei ght Numri co, opci onal . Al t ura em pi xel s. acMsg Caract er e, Mensagem de Hi nt al Al l Wi dt h Lgi co, opci onal . NO USADO
E Mt odos aux i l i ar es:
Set Opt i on
O Descr i o: Sel eci ona fol der desej ado O Si nt ax e: Set Opt i on( nOpt i on ) O Par met r os:
nOpt i on Numri co. Fol der a ser sel eci onado
O Ret or no:
Nen hum -
- 417 -
ADVPL Compl et o
AddI t em
O Descr i o: I nser e um fol der O Si nt ax e: AddI t em ( cI t em, l Vi si bl e ) O Par met r os:
cI t em Caract er e. Tt ul o do Fol der l Vi si bl e Lgi co. Vi svel
O Ret or no:
Nen hum -
aEn abl e
O Descr i o: Habili t a/ Desabili t a um fol der O Si nt ax e: aEnabl e( nI t em, l Enabl e ) O Par met r os:
nI t em Numri co. Fol der para habilit ar/ desabi lit ar l Enabl e Lgi co. Habi lit a/ Desabilit a
O Ret or no:
Nen hum -
E Apar nci a:
- 418 -
ADVPL Compl et o
Ex empl o:
Local oFolder Local aFolder := { 'Folder 1', 'Folder 2', 'Folder 3' }
E Descr i o: Cl asse de obj et os vi suai s do t i po cont r ol e t Get , a qual cri a um cont r ol e que armazena ou al t era o cont edo de uma vari vel at ravs de di gi t ao. O cont edo da vari vel s modi fi cado quando o cont r ol e perde o foco de edi o para out ro cont r ol e.
E Pr opr i edades:
l Password Lgi co. Se .T. o cont rol e se comport a como ent r ada de dados de senha, exi bi ndo ast eri scos * para esconder o cont edo di gi t ado. Pi ct ure Caract er e. Mscara de format ao do cont edo a ser exi bi do.
E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] , [ acPi ct ] , [ abVali d] , [ anCl rFore] , [ anCl rBack] , [ aoFont ] , [ l Par12] , [ oPar13] , [ al Pi xel ] , [ cPar15] , [ l Par16] , [ abWhen] , [ l Par18] , [ l Par19] , [ abChange] , [ al ReadOnl y] , [ alPassword] , [ cPar23] , [ acReadVar] , [ cPar25] , [ l Par26] , [ nPar27] , [ l Par28] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou caract eres. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. abSet Get Bl oco de cdi go, opci onal . Bl oco de cdi go no format o { | u| i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za para at uali zar a vari vel < var > . < var > deve ser t i po caract er, numri co ou dat a. aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e ser cri ado. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. acPi ct Caract er e, opci onal . Mscar a de format ao do cont edo a ser exi bido. abVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. anCl r For e Numri co, opci onal . Cor de fundo do cont rol e. anCl r Back Numri co, opci onal . Cor do t ext o do cont rol e. aoFont Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as caract erst i cas da font e ut ili zada para exi bi r o cont edo do
- 419 -
ADVPL Compl et o
cont r ol e. l Par 12 Reser vado. oPar 13 Reser vado. al Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. cPar 1 5 Reser vado. l Par 16 Reser vado. abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Par 18 Reser vado. l Par 19 Reser vado. abChange Bl oco de cdi go, opci onal . Execut ado quando o cont r ol e modi fi ca o val or da vari vel associ ada. al ReadOnl y Lgi co, opci onal . Se . T. o cont r ol e no poder ser edi t ado. al Passw or d Lgi co, opci onal . Se . T. o cont r ol e exi bi r ast eri scos * no l ugar dos caract er es exibi dos pel o cont r ol e para si mul ar ent rada de senha. cPar 2 3 Reser vado. acReadVar Caract er e, opci onal . Nome da vari vel que o cont rol e dever mani pul ar, dever ser a mesma vari vel informada no parmet ro abSet Get , e ser o r et orno da funo ReadVar( ) . cPar 2 5 Reser vado. l Par 26 Reser vado. nPar 27 Reser vado. l Par 28 Reser vado.
E Apar nci a:
- 420 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' User Function TesteGet() Local oDlg, oButton, oCombo, cCombo, nGet1:=0 DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Get' oGet1:= TGet():New(10,10,{|u| if(PCount()>0,nGet1:=u,nGet1)}, oDlg,; 100,20,'@E 999,999.99',; {|o|nGet1>1000.00},,,,,,.T.,,,,,,,,,,'nGet1')
// Boto para fechar a janela oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.) ACTIVATE MSDIALOG oDlg CENTERED MsgStop( 'O valor '+Transform(nGet1,'@E 999,999.00') )
Return NIL
TGROUP( )
E Descr i o: Cl asse de obj et os vi suai s do t i po painel t Group, a qual cri a um pai nel onde cont r ol es vi suai s podem ser agrupados ou cl assi fi cados. Nest e pai nel cri ada uma borda com t t ul o em vol t a dos cont r ol es agrupados.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New( [ anTop] , [ anLeft ] , [ anBot t om] , [ anRi ght ] , [ acCapt i on] , [ aoWnd] , [ anCl rText ] , [ anCl rPane] , [ al Pi xel ] , [ lPar10] )
E Par met r os:
anTop Numri co, opci onal . Coordenada vert i cal superi or em pi xel s ou caract er es. anLef t Numri co, opci onal . Coordenada hori zont al esquerda em pi xel s ou caract eres. an Bot t om Numri co, opci onal . Coordenada vert i cal i nferi or em pi xel s ou caract er es. anRi ght Numri co, opci onal . Coordenada hori zont al di reit a em pi xel s ou caract er es. acCapt i on Caract er e, opci onal . Tt ul o do grupo. aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e ser cri ado. anCl r Tex t Numri co, opci onal . Cor do t ext o. anCl r Pan e Numri co, opci onal . Cor do fundo. al Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. l Par 10 Reser vado.
- 421 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste' DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test' oGroup:= tGroup():New(10,10,130,130,'grupo de gets',oDlg,,,.T.) @ 18,16 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oGroup PIXEL @ 38,16 MSGET oGet2 VAR cGet1 SIZE 100,10 OF oGroup PIXEL ACTIVATE MSDIALOG oDlg CENTERED
- 422 -
ADVPL Compl et o
THBUTTON( )
E Descr i o: Cl asse de obj et os vi suai s do t i po bot o com hi perl ink.
E Pr opr i edades:
bAct i on Bl oco de cdi go. Execut ado quando o bot o pressi onado.
E Const r ut or : New( [ anRow] , [ anCol ] , [ acCapt i on] , [ aoWnd] , [ abAct i on] , [ anWi dt h] , [ anHei ght ] , [ aoFont ] , [ abWhen] )
E Par met r os:
Par met r o Ti po / Descri o anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. acCapt i on Caract er e, opci onal . Ti t ul o do bot o. aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. abAct i on Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado quando o bot o for pressi onado. anWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s. anHei ght Numri co, opci onal . Al t ura do bot o em pi xel s. aoFont Obj et o, opci onal . Obj et o t i po t Font com propri edades da font e ut i lizada para o t t ul o do bot o. abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no.
E Mt odos aux i l i ar es:
Cr eat e
O Descr i o: Mt odo const rut or opci onal da cl asse. O Si nt ax e: Creat e( aoWnd) O Par met r os:
aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde a pal et a dever ser cri ada.
O Ret or no:
Obj et o Obj et o do t i po THBut t on com os at ri but os defi nidos com cont edo padro.
- 423 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include protheus.ch #include hbutton.ch User Function MyhBtn() Local oDlg, ohBtn DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu hButton // Usando o mtodo create ohBtn:= tHButton():Create( oDlg ) ohBtn:nTop := 100 ohBtn:nLeft := 10 ohBtn:nWidth := 100 ohBtn:nHeight := 30 ohBtn:cCaption := 'hButton' ohBtn:blClicked := { || MsgStop( 'Cliquei' ) } // Usando o command @ 200,100 HBUTTON ohBtn PROMPT 'Exemplo hButton' SIZE 100,30 ACTION MsgStop('Cliquei') OF oDlg MESSAGE 'hButton' ACTIVATE MSDIALOG oDlg CENTERED Return Nil
TI BROWSER( )
E Descr i o: Cl asse de obj et os vi suai s do t i po Pgi na de I nt ernet , sendo necessri o i ncl ui r a cl ausul a Browser Enabl ed= 1 no Confi g do Remot e. I NI
E Pr opr i edades:
- Herdadas da cl asse superi or
E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei ght ] , [ cPager] , [ oWnd] )
E Par met r os:
nRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. nCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres nWi dt h Numri co, opci onal . Lar gura em pi xel s nHei gt h Numri co, opci onal . Al t ura em pi xel s. cPage Caract er . Enr edeo URL da pgi na de I nt ernet oWnd Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado
E Apar nci a:
- 424 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
// Habilitar no Remote(Config) -> BrowserEnabled=1 oTIBrowser:= TIBrowser():New(0,0,306,134,'http://www.microsiga.com.br',oDlg )
ACTIVATE MSDIALOG oDlg CENTERED Return NIL
- 425 -
ADVPL Compl et o
TLI STBOX( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e t Li st box, a qual cri a uma j anel a com i t ens sel eci onvei s e barra de rol agem. Ao sel eci onar um i t em, uma vari vel at ualizada com o cont edo do i t em sel eci onado.
E Pr opr i edades:
nAt Numri co. Posi o do i t em sel eci onado. aI t ems Array de i t ems caract er es. Li st a do i t ens sel eci onvei s.
E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ aaI t ems] , [ anWi dt h] , [ anHei gt h] , [ abChange] , [ aoWnd] , [ abVali d] , [ anCl rFor e] , [ anCl rBack] , [ al Pi xel ] , [ l Par13] , [ abLDBLCl i ck] , [ aoFont ] , [ cPar16] , [ l Par17] , [ abWhen] , [ aPar19] , [ bPar20] , [ l Par21] , [ l Par22] , [ abRi ght Cli ck] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou caract eres. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. abSet Get Bl oco de cdi go, opci onal . Bl oco de cdi go no format o { | u| i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za para at uali zar a vari vel < var > . < var > deve ser t i po caract er ou numri ca. aaI t ems Array de i t ems caract er es, opci onal . Li st a de i t ems sel eci onvei s. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. abChange Bl oco de cdi go, opci onal . Execut ado quando o i t em sel eci onado al t erado. aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e ser cri ado. abVal i d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. anCl r For e Numri co, opci onal . Cor de fundo do cont rol e. anCl r Back Numri co, opci onal . Cor do t ext o do cont rol e. al Pi x el Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. l Par 13 Reser vado. abLDBLCl i ck Bl oco de cdi go, opci onal . Execut ado quando aci onado dupl o cli ck do bot o esquerdo do mouse sobr e o cont r ol e. aoFont Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as caract erst i cas da font e ut ili zada para exi bi r o cont edo do cont r ol e. cPar 1 6 Reser vado. l Par 17 Reser vado. abWh en Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no.
- 426 -
ADVPL Compl et o
aPar 19 Reser vado. bPar 20 Reser vado. l Par 21 Reser vado. l Par 22 Reser vado. abRi ght Cl i ck Bl oco de cdi go, opci onal . Execut ado quando aci onado cl i ck do bot o di rei t o do mouse sobr e o cont rol e.
E Mt odos aux i l i ar es:
Sel ect
O Descr i o: Fora a sel eo de um i t em. O Si nt ax e: Sel ect ( [ anI t em] ) O Par met r os:
nI t em Numri co, opci onal . Posi o do i t em a ser sel eci onado.
O Ret or no:
Nen hum -
Add
O Descr i o: Adi ci ona novo i t em. O Si nt ax e: Add( cText , nPos ) O Par met r os:
cText Caract er e, obri gat ri o. Text o do i t em. nPos Numri co, obri gat ri o. Se 0 ou mai or que o nmer o de i t ens, i nsere o i t em no fi nal da li st a. Se val or ent re 1 e nmero de i t ens, i nser e o i t em na posi o i nfor mada, empur rando o i t em ant eri or para bai xo.
O Ret or no:
Nen hum -
Modi f y
O Descr i o: Modi fi ca o t ext o de um i t em. O Si nt ax e: Modi fy( cText , nPos ) O Par met r os:
cText Caract er e, obri gat ri o. Novo t ext o do i t em. nPos Numri co, obri gat ri o. Posi o a ser modi fi cada deve ser mai or que 0 e menor ou i gual que o nmer o de i t ens.
O Ret or no:
Nen hum -
- 427 -
ADVPL Compl et o
Del
O Descr i o: Remove um i t em. O Si nt ax e: Del ( nPos ) O Par met r os:
nPos Numri co, obri gat ri o. Posi o a ser excl ui da, deve ser mai or que 0 e menor ou i gual que o nmer o de i t ens.
O Ret or no:
Nen hum -
Len
O Descr i o: Ret orna o nmer o de i t ens. O Si nt ax e: Len( ) O Par met r os:
Nenhum -
O Ret or no:
Numri co Nmer o de i t ens.
Reset
O Descr i o: Apaga t odos os i t ens. O Si nt ax e: Reset ( ) O Par met r os:
Nenhum -
O Ret or no:
Nen hum -
- 428 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg, oList, nList:= 1 Local aItems:={} Aadd(aItems,'Item 1') Aadd(aItems,'Item 2') Aadd(aItems,'Item 3') Aadd(aItems,'Item 4') DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE 'Teste' oList:= tListBox():New(10,10,{|u|if(Pcount()>0,nList:=u,nList)}; ,aItems,100,100,,oDlg,,,,.T.) ACTIVATE MSDIALOG oDlg CENTERED Return NIL
- 429 -
ADVPL Compl et o
TMENU( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Menu.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New ( [ nTop] , [ nLeft ] , [ nHei ght ] , [ nWi dt h] , [ l PopUp] , [ cBmpName] , [ oWnd] , [ nCl rNoSel ect ] , [ nCl rSel ect ] , [ cArr owUpNoSel ] , [ cArr owUpSel ] , [ cArr owDownNoSel ] , [ cAr r owDownSel ] )
E Par met r os:
nTop Numri co, opci onal . Coordenada vert i cal em pi xel s. nLef t Numri co, opci onal . Coordenada hori zont al em pi xel s. nHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. nWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. l PopUp Lgi co. Defi ne se o obj et o ser um PoPup cBmpName Caract er opci onal . Fi gura do Menu oWnd Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado nCl r NoSel ect Numeri co opci onal . Cor quando no sel eci onado nCl r Sel ect Numeri co opci onal . Cor quando sel eci onado cAr r ow UpNoSel Caract er opci onal , Defi ne a fi gura da set a para ci ma quando no sel eci onado o i t em. cAr r ow UpSel Caract er opci onal , Defi ne a fi gura da set a para ci ma quando sel eci onado o i t em. cAr r ow Dow nNoSel Caract er opci onal , Defi ne a fi gura da set a para bai xo quando no sel eci onado o i t em. cAr r ow Dow nSel Caract er opci onal , Defi ne a fi gura da set a para bai xo quando sel eci onado o i t em.
E Apar nci a:
- 430 -
ADVPL Compl et o
Ex empl o:
#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 )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Bar ra de Menu.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New( [ oWnd] )
E Par met r os:
oWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado.
E Apar nci a:
- 431 -
ADVPL Compl et o
Ex empl o:
#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.)
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e t Met er, a qual exi be uma rgua ( gauge) de pr ocessament o, descr evendo o andament o de um processo at ravs da exi bi o de uma barra horizont al .
E Pr opr i edades:
nTot al Numri co. Nmer o t ot al de passos at o pr eenchi ment o da rgua de processo. l Percent age Lgi co. Se .T. consi dera o passo de movi ment ao em porcent agem. nCl rBar Numri co. Cor da bar ra de andament o.
E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ anTot al ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] , [ l Par8] , [ al Pi xel ] , [ oPar10] , [ cPar11] , [ al NoPerc] , [ anCl rPane] , [ nPar14] , [ anCl rBar] , [ nPar16] , [ l Par17] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou caract eres. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. abSet Get Bl oco de cdi go, opci onal . Bl oco de cdi go no format o { | u| i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za para at uali zar a vari vel < var > . < var > deve ser t i po numri co. anTot al Numri co, opci onal . Numer o t ot al de passos at o preenchi ment o da rgua de processo.
- 432 -
ADVPL Compl et o
aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e sera cri ado. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. l Par8 Reser vado. al Pi xel Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. oPar10 Reser vado. cPar11 Reser vado. al NoPer c Lgi co, opci onal . Se . T. ( padro) no consi dera os passos de at ualizao em porcent agem. anCl rPane Numri co, opci onal . Cor de fundo do cont rol e. nPar14 Reser vado. anCl rBar Numri co, opci onal . Cor da bar ra de andament o. nPar16 Reser vado. l Par17 Reser vado.
E Mt odos aux i l i ar es:
Set
O Descr i o: At uali za a posi o da r gua de pr ocessament o. O Si nt ax e: Set ( [ nVal ] ) O Par met r os:
nVal Numri co, opci onal . Novo val or da posi o da r gua de processament o.
O Ret or no:
Nen hum -
E Apar nci a:
- 433 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' STATIC lRunning:=.F., lStop:=.F. User Function Teste() Local oDlg, oMeter, nMeter:=0, oBtn1, oBtn2 DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE 'Teste' Pixel oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)}; ,100,oDlg,100,16,,.T.) // cria a rgua // boto para ativar andamento da rgua @ 30,10 BUTTON oBtn1 PROMPT 'Run ' OF oDlg PIXEL ACTION RunMeter(oMeter) @ 50,10 BUTTON oBtn2 PROMPT 'Stop' OF oDlg PIXEL ACTION lStop:=.T. ACTIVATE MSDIALOG oDlg CENTERED Return NIL STATIC Function RunMeter(oMeter) If lRunning Return Endif lRunning:= .T.
oMeter:Set(0) // inicia a rgua While .T. .and. !lStop Sleep(1000) // pra 1 segundo ProcessMessages() // atualiza a pintura da janela, processa mensagens do windows nCurrent:= Eval(oMeter:bSetGet) // pega valor corrente da rgua nCurrent+=10 // atualiza rgua
oMeter:Set(nCurrent) if nCurrent==oMeter:nTotal Return endif Enddo
lRunning:= .F. lStop:= .F. Return
- 434 -
ADVPL Compl et o
TMSGRAPHI C( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Grfi co.
E Pr opr i edades:
l 3D Lgi co, opci onal Grfi co em 3D l Axi sVi si b Lgi co, opci onal Most ra ei xos do grfi co
E Const r ut or : New( [ anRow] , [ anCol ] , [ aoWnd] , [ aoFont ] , [ anCl rText ] , [ anCl rBack] , [ anWi dt h] , [ anHei ght ] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s. aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde a i magem dever ser cri ada. aoFont Obj et o, opci onal . Font e ut ili zada no grfi co. anCl rText Caract er e, Nome do r esource. anCl rBack Caract er e, Nome do arqui vo. anWi dt h Lgi co, opci onal . Exi be borda anHei ght Obj et o, opci onal . Janel a ou cont r ol e onde a i magem dever ser cri ada.
E Mt odos aux i l i ar es:
Cr eat eSer i e
O Descr i o: Mt odo par a cri ao de uma seri e para o grfi co. O Si nt ax e: Creat eSeri e( [ nSeri eType] , [ cLegend] , [ nDeci mal s] , [ l ShowVal ues] ) O Par met r os:
nSeri eType Numri co. I ndi ca o t i po do grfi co GRP_LI NE 1 GRP_AREA 2 GRP_POI NT 3 GRP_BAR 4 GRP_PI E 10 cLegend Caract er e, opci onal . Legenda da sri e. nDeci mal s Numri co, opci onal . Numer o de casas deci mai s dos val ores. l ShowVal ues Lgi co, opci onal . Most ra val ores
O Ret or no:
Numri co Numer o da sri e cri ada.
- 435 -
ADVPL Compl et o
Add
O Descr i o: Mt odo par a adi ci onar um i t em ao grfi co. O Si nt ax e: Add( nSeri e, nVal , cLegend, nCol or ) O Par met r os:
nSeri e Numri co. Seri e a ser i nseri do o i t em. nVal Numri co. Val or do i t em. cLegend Caract er e. Legenda do i t em. nCol or Numri co, Cor do i t em.
O Ret or no:
Nen hum -
Set Gr adi ent e
O Descr i o: Mt odo par a set ar o fundo do grfi co com uma cor gradi ent e em det ermi nada di reo. O Si nt ax e: Set Gr adi ent ( nDi rect i on, St art Col or , EndCol or ) O Par met r os:
nDi rect i on Numri co. I ndi ca di reo do gradi ent e. GDTOPBOTTOM 1 GDBOTTOMTOP 2 GDLEFTRI GHT 3 GDRI GHTLEFT 4 St art Col or Numri co. Cor i ni ci al . EndCol or Numri co. Cor fi nal .
O Ret or no:
Nen hum -
Set Ti t l e
O Descr i o: Defi ne o t i t ul o do grfi co. O Si nt ax e: Set Ti t l e( cTi t l e, cTi t l e2, Col or, Ali gment , l Foot ) O Par met r os:
cTi t l e Caract er e. Pri mei ro t i t ulo. cTi t l e2 Caract er e. Segundo t i t ul o. Col or Numri co. Cor do t i t ul o. Ali gment Numri co. Al inhament o do t i t ul o. A_LEFTJUST 1 A_RI GHTJUS 2 A_CENTER 3 l Foot Lgi co. I ndi ca t i t ul o no r odap do grfi co.
O Ret or no:
Nen hum -
- 436 -
ADVPL Compl et o
Set LegenPr op
O Descr i o: Mt odo par a set ar propri edades da l egenda. O Si nt ax e: Set LegenPr op( Align, Col or, St yl e, Vi sibl e ) O Par met r os:
Ali gn Numeri co. Al inhament o da l egenda. GRP_SCRTOP 1 GRP_SCRLEFT 2 GRP_SCRBOTTOM 3 GRP_SCRRI GHT 4 Col or Numri co. Cor da l egenda. St yl e Numri co. Est i l o da l egenda. GRP_AUTO 1 GRP_SERI ES 2 GRP_VALUES 3 GRPLASTVAL 4 Vi si bl e Lgi co. I ndi ca de o t i t ulo ser vi svel .
O Ret or no:
Nen hum -
Set Mar gi ns
O Descr i o: Mt odo par a set ar as margens superi or , i nferi or e l at erai s do grfi co. O Si nt ax e: Set Margi ns( nTop, nLeft , nBot t om, nRi ght ) O Par met r os:
nTop Numri co. Posi o em r el ao ao t opo do grfi co. nLeft Numri co. Posi o em r el ao a esquerda. nBot t om Numri co. Posi o em r el ao ao r odap. nRight Numri co. Posi o em r el ao a di rei t a.
O Ret or no:
Nen hum -
Set RangeY
O Descr i o: Def i n e a escal a dos v al or es do ei x o Y O Si nt ax e: Set RangeY ( mi n, max, del t a) . O Par met r os:
Mi n val or i ni ci al Max val or fi nal del t a i nt erval o ent re os val or es [ opci onal , cal cul ado aut omat i cament e ]
O Ret or no:
Nen hum -
- 437 -
ADVPL Compl et o
Sav eToBMP
O Descr i o: Mt odo para sal var o grfi co at ual em um bit map no server( Obsol et o, v er Sav eToI mage) . O Si nt ax e: SaveToBMP( BmpName, Pat hToWri t e ) O Par met r os:
BmpName Caract er e, Nome do da fi gura a ser sal va. Pat hToWri t e Caract er e. Pat h no Server onde ser sal va a fi gura.
O Ret or no:
Lgi co I ndi ca se a i magem foi sal va corr et ament e.
Sav eToI mage
O Descr i o: Mt odo par a sal var o grfi co at ual em um format o de pr - det ermi nado no ser ver. O Si nt ax e: SaveToI mage( BmpName, Pat hToWri t e, TypeI mage) O Par met r os:
BmpName Caract er e, Nome do da fi gura a ser sal va. Pat hToWri t e Caract er e. Pat h no Server onde ser sal va a fi gura. TypeI mage Caract er e. Ti po da Fi gura ( Defaul t ' JPEG' ) Ti pos suport ados: JPEG, PNG, BMP
O Ret or no:
Lgi co I ndi ca se a i magem foi sal va corr et ament e.
Del Ser i e
O Descr i o: Mt odo par a del et ar uma sri e do grafi co. O Si nt ax e: Del Seri e ( nSeri e ) O Par met r os:
nSeri e Numri co. Seri e a ser del et ada.
O Ret or no:
Lgi co I ndi ca se a sri a foi removi da do grfi co
ZoomI n
O Descr i o: Mt odo par a efet uar zoom i nt erno ( + ) . O Si nt ax e: ZoomI n( ) O Par met r os:
Nen hum -
O Ret or no:
Nen hum -
- 438 -
ADVPL Compl et o
ZoomOut
O Descr i o: Mt odo par a efet uar zoom ext erno ( - ) . O Si nt ax e: ZoomOut ( ) O Par met r os:
Nen hum -
O Ret or no:
Nen hum -
E Apar nci a:
- 439 -
ADVPL Compl et o
Ex empl o:
#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
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Rodap.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New ( [ oWnd] , [ cPr ompt ,] , [ l Cent ered] , [ l Cl ock] , [ l Dat e] , [ l Kbd] , [ nCl rFore] , [ nCl rBack] , [ oFont ] , [ l I nset ] , [ i mageName] )
E Par met r os:
oWnd Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado cPr ompt Caract er . Descri o na Barra l Cent ered Logi co. Defi ne cent ral i zao do t ext o l Cl ock Nao ut i lizado l Dat e Nao ut i lizado l Kbd Nao ut i lizado nCl rFore Numeri co, opci onal . Defi ne cor da font e da barr a nCl rBack Numeri co, opci onal . Defi ne cor do fundo da barr a oFont Obj et o, opci onal . Obj et o t i po t Font com propri edades da font e ut i lizada para o t t ul o do bot o. l I nset Nao ut i lizado i mageName Caract er , opci onal . I nsere fi gura l at eral esquerda
E Mt odos aux i l i ar es:
AddI t em
O Descr i o: Mt odo i nsere um subi t em no rodap O Si nt ax e: AddI t em( oTMsgI t em ) O Par met r os:
oTMsgI t em Obj et o do t i po TMsgI t em que ser i nseri do como subi t em do r odap.
O Ret or no:
Nen hum -
- 441 -
ADVPL Compl et o
Set Msg
O Descr i o: Defi ne a descri o da bar ra de rodap O Si nt ax e: Set Msg( cText o ) O Par met r os:
cText o Text o a ser i nseri do na barra
O Ret or no:
Nen hum -
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo' oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software', .F.,.F.,.F.,.F., RGB(116,116,116),,,.F.) oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T., {||}) oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T., {||Alert('Item da Barra Acionado')} )
ACTIVATE MSDIALOG oDlg CENTERED Return NIL
- 442 -
ADVPL Compl et o
TMSGI TEM( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e ut ili zado para adi ci onar mensagens em out ros obj et os, como bar ras e menus.
E Pr opr i edades:
- Herdadas das cl asses superi or es
E Const r ut or : New ( < oMsgBar > , < cMsg> , < nSi ze> , < oFont > , < n Cl r For e> , < nCl r Back > , l Enabl e , [ < { bAct i on } > ] , cI magem )
E Par met r os:
oMsgBar Obj et o do t i po bar ra ou menu no qual ser adi cionado o i t em de mensagem. cMsg Mensagem que ser exibi da pel o obj et o nSi ze Tamanho da font e do t ext o oFont Font e do t ext o nCl r For e Cor da font e do t ext o nCl r Back Cor do fundo do obj et o l Enabl e I ndi ca se o obj et o est habilit ado. bAct i on Bl oco de cdi go execut ado quando o obj et o at i vado cI magem I magem a ser vi ncul ada no obj et o.
E Apar nci a:
- 443 -
ADVPL Compl et o
Ex empl o:
#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
.
TMULTI BTN( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - Ml t i pl os bot es.
E Pr opr i edades:
bAct i on Bl oco de cdi go. Execut ado ao pr eci onar o bot o esquerdo do mouse.
E Const r ut or : New( [ nRow] , [ nCol ] , [ cTi t l e] , [ oWnd] , [ bAct i on] , [ nWidt h] , [ nHei ght ] , [ i mgName] , [ ori ] , [ cMsg] , [ bt nPer Li ne] )
E Par met r os:
nRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. nCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres oWnd Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado bAct i on Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado quando o bot o for pressi onado. nWi dt h Numri co, opci onal . Lar gura em pi xel s nHei gt h Numri co, opci onal . Al t ura em pi xel s. i mgName Caract er . I magem a ser i nseri da ao l ado esquer do do component e ori Numeri co, opci onal . Ori ent ao dos bot es. cMsg Caract er , Opi ci onal . Descri o do t i po t ool t i p( hint ) do i t em bt nPerLi ne Numeri co, opci onal . Quant idade de bot es por l i nha
- 444 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
LoadI mage O Descr i o: Muda a fi gura a esquerda do component e O Si nt ax e: LoadI mage( cI magem) O Par met r os:
cI magem Nome da i magem que ser car regada pel o obj et o
O Ret or no:
Nen hum -
AddBut t on O Descr i o: I nser e um bot o O Si nt ax e: AddBut t on( cText o) O Par met r os:
cText o Text o para exi bi o no bot o i nseri do.
O Ret or no:
Nen hum -
Set Ti t l e O Descr i o: Muda o t i t ulo e o numer o de bot es por li nha O Si nt ax e: Set Ti t l e( cText o, nBot oes) O Par met r os:
cText o Text o que ser at ri budo aos bot es nBot oes Nmer o de bot es por l inha
O Ret or no:
Nen hum -
Set Font s O Descr i o: Muda a font do t i t ul o e dos bot es O Si nt ax e: Set Ti t l e( cFont Ti t , nSi zeTi t , nFont But , nSizeBut ) O Par met r os:
cFont Ti t Nome da font e que ser at ri buda ao t t ul o nSizeTi t Tamanho da font e do t t ul o nFont But Nome da font e que ser at ri buda aos bot es nSizeBut Tamanho da font e dos bot es
O Ret or no:
Nen hum -
- 445 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e - edi o de t ext o de ml t ipl as linhas.
E Pr opr i edades:
l WordWrap Lgi co. Se .T. , faz quebra aut omt i ca de li nhas.
E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] , [ aoFont ] , [ al HScrol l ] , [ anCl rFore] , [ anCl rBack] , [ oPar11] , [ al Pi xel ] , [ cPar13] , [ l Par14] , [ abWhen] , [ l Par16] , [ l Par17] , [ al ReadOnl y] , [ abVali d] , [ bPar20] , [ l Par21] , [ al NoBorder] , [ al NoVScrol l ] )
E Par met r os:
Parmet r o anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou caract eres. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. abSet Get Bl oco de cdi go, opci onal . Bl oco de cdi go no format o { | u| i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za para at uali zar a vari vel < var > . < var > deve ser t i po caract er. aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e ser cri ado. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. aoFont Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as caract erst i cas da font e ut ili zada para exi bi r o cont edo do cont r ol e. al HScrol l Lgi co, opci onal . Se . T., habilit a barra de rol agem hori zont al . anCl rFore Numri co, opci onal . Cor de fundo do cont rol e. anCl rBack Numri co, opci onal . Cor do t ext o do cont rol e. oPar11 Reser vado. al Pi xel Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. cPar13 Reser vado. l Par14 Reser vado. abWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Par16 Reser vado. l Par17 Reser vado. al ReadOnl y Lgi co, opci onal . Se . T. o cont r ol e so permi t i ra lei t ura. abVali d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. bPar20 Reser vado. l Par21 Reser vado.
- 447 -
ADVPL Compl et o
al NoBorder Lgi co, opci onal . Se . T. cri a cont r ol e sem borda. al NoVScrol l Lgi co, opci onal . Se . T., habilit a barra de rol agem vert i cal .
E Mt odos aux i l i ar es:
Enabl eVScr ol l
O Descr i o: Habi li t a a barra de r ol agem vert i cal. O Si nt ax e: Enabl eVScrol l ( l Enabl e ) O Par met r os:
l Enabl e Lgi co, obri gat ri o. Se . T. habili t a se .F. desabilit a a bar ra de r ol agem.
O Ret or no:
Nen hum -
Enabl eHScr ol l
O Descr i o: Habi li t a a barra de r ol agem hori zont al . O Si nt ax e: Enabl eHScr ol l( l Enabl e ) O Par met r os:
l Enabl e Lgi co, obri gat ri o. Se . T. habili t a se .F. desabilit a a bar ra de r ol agem.
O Ret or no:
Nen hum -
E Apar nci a:
- 448 -
ADVPL Compl et o
Ex empl o:
#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
@ 200,10 BUTTON oBtn PROMPT Fecha OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop(cMemo)
Return NIL
TOLECONTAI NER( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e, a qual permi t e a cri ao de um bot o vi ncul ado a um obj et o OLE.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei ght ] , [ oWnd] , [ l Aut oAct i vat e] , [ cFil eName] )
E Par met r os:
nRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. nCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. nWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s nHei ght Numri co, opci onal . Al t ura do bot o em pi xel s.
oWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. l Aut oAct i vat e Nao ut i lizado cFil eName Caract er . Endereo do arqui vo Ol e a ser abert o
- 449 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
OpenFr omFi l e
O Descr i o: Abr e arqui vo do t i po OLE. O Si nt ax e: New( [ cFi l eName, [ l AsI con] , [ all owI nPl ace] ) O Par met r os:
cFil eName Caract er . Endereo do arqui vo Ol e a ser abert o l AsI con Logi co. Defi ne obj et o Ol e como I cone all owI nPl ace Logi co opci onal . Permi t e abert ura de arqui vo l ocal
O Ret or no:
Nen hum -
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e, que permi t e a vi suali zao de arqui vos no format o ger ado pel o spool de i mpresso do Prot heus.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New( [ nCol ] , [ nRow] , [ nWi dt h] , [ nHei ght ] , [ oPri nt er] , [ oWnd] , [ nPageWi dt h] , [ nPageHei ght ] )
E Par met r os:
nCol Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. nRow Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres nWi dt h Numri co, opci onal . Lar gura em pi xel s nHei gt h Numri co, opci onal . Al t ura em pi xel s.
oPri nt er Obj et o do t i po TMsPri nt er( ) oWnd Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado nPageWi dt h Numri co, opci onal . Lar gura em pi xel s da pagi na nPageHei ght Numri co, opci onal . Al t ura em pi xel s da pagi na
E Mt odos aux i l i ar es:
PageSi ze
O Descr i o: Defi ne o t amanho da pagi na. O Si nt ax e: AddI t em( nLar gura, nAl t ura) O Par met r os:
nLargura Lagura da pgi na nAlt ura Al t ura da pgi na
O Ret or no:
Nen hum -
Pr i nt Page
O Descr i o: I mpri me uma det ermi nada pgi na. O Si nt ax e: Pr i nt Page( nNrPagi na) O Par met r os:
nNrPagi na Pgi na que ser i mpressa
O Ret or no:
Nen hum -
- 451 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
E Descr i o: Cl asse de obj et os vi suai s do t i po cont r ol e t Panel , a qual permi t e cri ar um painel est t i co, onde podem ser cri ados out ros cont r ol es com o obj et i vo de organi zar ou agrupar component es vi suai s.
E Pr opr i edades:
- Herdadas das cl asses superi or es
E Const r ut or : New( [ anRow] , [ anCol ] , [ acText ] , [ aoWnd] , [ aoFont ] , [ alCent ered] , [ l Par6] , [ anCl rText ] , [ anCl rBack] , [ anWi dt h] , [ anHei ght ] , [ al Lower ed] , [ al Rai sed] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s. acText Caract er e, opci onal . Text o a ser exi bi do ao fundo. aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde ser cri ado o obj et o. al Cent ered Lgi co, opci onal . Se . T. exi be o t ext o de t t ul o ao cent r o do cont r ol e. l Par6 Reser vado. anCl rText Numri co, opci onal . Cor do t ext o do cont rol e. anCl rBack Numri co, opci onal . Cor do fundo do cont rol e. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. al Lower ed Lgi co, opci onal . Se . T. exi be o pai nel rebai xado em r el ao ao cont r ol e de fundo. al Rai sed Lgi co, opci onal . Se . T. exi be a borda do cont r ol e rebai xada em rel ao ao cont rol e de fundo.
E Apar nci a:
- 453 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste' DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test' oPanel:= tPanel():New(10,10,,oDlg,,,,,CLR_BLUE,100,100) // cria o painel @ 10,10 BUTTON oBtn1 PROMPT 'hide' OF oPanel ACTION oPanel:Hide() // cria boto sobre o painel @ 200,10 BUTTON oBtn2 PROMPT 'show' OF oDlg ACTION oPanel:Show() // cria boto fora o painel ACTIVATE MSDIALOG oDlg CENTERED Return
TRADMENU( )
E Descr i o: Cl asse de obj et os vi suai s do t ipo cont r ol e TRadMenu, a qual permi t e cri ar um cont rol e vi sual no format o Radi o But t on.
E Pr opr i edades:
bCh ange Bl oco de cdi go di sparado na mudana de i t em sel eci onado bSet Get Bl oco de cdi go di sparado na mudana de i t em sel eci onado, responsavel pel a mudana de val or da vari avel numeri ca que i ndi ca o i t em sel eci onado. bWhen Bl oco de cdi go que per mi t e ou no a al t erao do obj et o bVal i d Bl oco de cdi go execut ado na sai da do obj et o.
E Const r ut or : New( [ nRow] , [ nCol ] , [ aI t ems] , [ bSet Get ] , [ oDl g] , [ aHel pI ds] , [ bChange] , [ nCl rText ] , [ nCl rPane] , [ cMsg] , [ l Updat e] , [ bWhen] , [ nWi dt h] , [ nHei ght ] , [ bVali d] , [ l Desi gn] , [ l 3d] , [ l Pi xel ] )
E Par met r os:
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al aI t ems Vet or, el ement os do Radi o bSet Get Code- bl ock, Responsvel pel a set agem de val or oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. aHel pI ds No ut i lizado bChange Bl oco de cdi go, opci onal . Execut ado quando o i t em sel eci onado al t erado. nCl rText Numri co, opci onal . Cor do t ext o da j anel a. nCl rPane Numri co, opci onal . Cor de fundo da j anel a. cMsg Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o obj et o l Updat e No ut i lizado bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no.
- 454 -
ADVPL Compl et o
nWi dt h Numri co, opci onal . Lar gura do obj et o nHei ght Numri co, opci onal . Al t ura do obj et o bVali d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. l Desi gn No ut i lizado l 3d No ut i lizado l Pi xel Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres.
E Mt odos aux i l i ar es:
Set Opt i on
O Descr i o: Sel eci ona um i t em. O Si nt ax e: Set Opt i on ( n I t em) O Par met r os:
nI t em I t em que ser sel eci onado
O Ret or no:
Nen hum -
Enabl eI t em
O Descr i o: Habi li t a/ Desabili t a um I t em O Si nt ax e: En abl eI t em( nI t em, l St at us) O Par met r os:
nI t em I t em que ser modi fi cado l St at us St at us que ser at ri budo ( . T. Enabl e , .F. Di sabl e)
O Ret or no:
Nen hum -
Enabl e
O Descr i o: Habi li t a um i t em. O Si nt ax e: En abl e( nI t em) O Par met r os:
nI t em I t em que ser habili t ado
O Ret or no:
Nen hum -
- 455 -
ADVPL Compl et o
Di sabl e
O Descr i o: Desabi lit a um i t em O Si nt ax e: Di sabl e( n I t em) O Par met r os:
nI t em I t em que ser desabili t ado
O Ret or no:
Nen hum -
E Apar nci a:
- 456 -
ADVPL Compl et o
Ex empl o:
#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'},;
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al nWi dt h Numri co, opci onal . Lar gura do obj et o nHei ght Numri co, opci onal . Al t ura do obj et o oWnd Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. bChange Bl oco de cdi go, na mudana de l i nha nHWi dt h No ut i lizado oFont Obj et o, opci onal . Font e nLi nes Nmeri co. Nr de l inhas por cl ul a
E Mt odos aux i l i ar es:
GoUp
O Descr i o: Sal t a uma linha para ci ma. O Si nt ax e: GoUp( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoDow n
O Descr i o: Sal t a uma linha para bai xo. O Si nt ax e: GoDow n( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
- 458 -
ADVPL Compl et o
GoTop
O Descr i o: Sal t a para pri mei ra linha. O Si nt ax e: GoTop( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoBot t om
O Descr i o: Sal t a para ult i ma linha. O Si nt ax e: GoBot t om( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
Row Count
O Descr i o: Ret orna numer o de l i nhas vi si vei s. O Si nt ax e: Row Count ( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
LEdi t Cel l
O Descr i o: Edi t a o val or de uma col una. O Si nt ax e: l Edi t Cell( aLi st , oLi st , cPi ct ure, nCol ) O Par met r os:
aLi st Vet or da Browse onde est o os val or es da mesma oLi st Obj et o, Browse a ser edi t ado cPi ct ure Caract er , pi ct ure necessri a para edi o do campo nCol Numri co, col una a ser edi t ada.
O Ret or no:
Ni l
- 459 -
ADVPL Compl et o
E Apar nci a:
- 460 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e t Say, a qual exi be o cont edo de t ext o est t i co sobr e uma j anel a ou cont rol e previ ament e defi ni dos.
E Pr opr i edades:
l WordWrap Lgi co. Se .T. quebra o t ext o em vri as l i nhas de manei ra a enquadrar o cont edo na r ea det ermi nada para o cont r ol e, sendo o padro .F. l Transparent Lgi co. Se .T. a cor de fundo do cont r ol e i gnorada assumi ndo o cont edo ou cor do cont rol e ou j anel a ao fundo, sendo o padro . T.
E Const r ut or : New( [ anRow] , [ anCol ] , [ abText ] , [ aoWnd] , [ acPi ct ure] , [ aoFont ] , [ l Par7] , [ l Par8] , [ l Par9] , [ al Pi xel s] , [ anClrText ] , [ anCl rBack] , [ anWi dt h] , [ anHei ght ] , [ l Par15] , [ l Par16] , [ l Par17] , [ l Par18] , [ l Par19] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou caract eres. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. abText Codebl ock, opci onal . Quando execut ado deve r et ornar uma cadei a de caract eres a ser exi bi da. aoWnd Obj et o, opci onal . Janel a ou di l ogo onde o cont r ol e ser cri ado. acPi ct ure Caract er e, opci onal . Pi ct ure de format ao do cont edo a ser exi bido. aoFont Obj et o, opci onal . Obj et o t i po t Font para confi gurao do t i po de font e que ser ut ili zado para exi bi r o cont edo. l Par7 Reser vado. l Par8 Reser vado. l Par9 Reser vado. al Pi xel s Lgi co, opci onal . Se . T. consi dera coordenadas passadas em pi xel s se .F. , padro, consi dera as coordenadas passadas em caract eres. anCl rText Numri co, opci onal . Cor do cont edo do cont rol e. anCl rBack Numri co, opci onal . Cor do fundo do cont rol e. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. l Par15 Reser vado. l Par16 Reser vado. l Par17 Reser vado. l Par18 Reser vado. l Par19 Reser vado.
- 462 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste' DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test' oSay:= tSay():New(01,01,{||'para exibir'},oDlg,,,,; ,,.T.,CLR_RED,CLR_WHITE,100,20) ACTIVATE MSDIALOG oDlg CENTERED Return
- 463 -
ADVPL Compl et o
TSCROLLBOX( )
E Descr i o: Cl asse de obj et os vi suai s do t ipo cont rol e t Scrol l box, a qual permi t e cri ar um pai nel com scrol l deslizant es nas l at erai s ( hori zont ai s e vert i cai s) do cont r ol e.
E Pr opr i edades:
- Herdadas das cl asses superi or es
E Const r ut or : New( [ aoWnd] , [ anTop] , [ anLeft ] , [ anHei ght ] , [ anWi dt h] , [ al Vert i cal ] , [ al Hori zont al ] , [ al Border] )
E Par met r os:
aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e ser cri ado. anTop Numri co, opci onal . Coordenada vert i cal em pi xel s. anLeft Numri co, opci onal . Coordenada hori zont al em pi xel s. anHei ght Numri co, opci onal . Al t ura do cont rol e em pi xel s. anWi dt h Numri co, opci onal . Lar gura do cont rol e em pi xel s. al Vert i cal Lgi co, opci onal . Se . T. exi be a barra de scrol l vert i cal . al Hori zont al Lgi co, opci onal . Se . T. exi be a barra de scrol l hori zont al . al Border Lgi co, opci onal . Se . T. exi be a borda do cont r ol e.
E Apar nci a:
- 464 -
ADVPL Compl et o
Ex empl o:
#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 MPLEEDI TOR( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e t Si mpl eEdi t or, a qual permi t e cri ar um cont r ol e vi sual para edi o de t ext os com recursos si mpl es, como o Not ePad
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New( [ anRow] , [ anCol ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] ,[ acText ] , [ al ReadOnl y] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. aoWnd Janel a ou cont r ol e onde o edi t or dever ser cri ado. anWi dt h Numri co, opci onal . Lar gura do edi t or em pi xel s. anHei ght Numri co, opci onal . Al t ura do edi t or em pi xel s. acText Text o, opci onal . I nseri do na i ni ci alizao do obj et o. al ReadOnl y Lgi co, opci onal . Permi t e ou no a edi o do t ext o
E Mt odos aux i l i ar es:
Cr eat e
O Descr i o: Mt odo const rut or opci onal da cl asse. O Si nt ax e: Creat e( aoWnd ) O Par met r os:
aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o edi t or dever ser cri ado.
- 465 -
ADVPL Compl et o
O Ret or no:
Obj et o Obj et o do t i po Tsi mpl eEdi t or.
Load
O Descr i o: Carr ega um t ext o para o edi t or. O Si nt ax e: Load( acText o ) O Par met r os:
acText o Text o. Text o que i ni ci alizar o edi t or.
O Ret or no:
Nen hum -
Tex t Bol d
O Descr i o: Text o em Negri t o. O Si nt ax e: Text Bol d( al Bol d ) O Par met r os:
al Bold Lgi co. Habi lit a ou Desabilit a a sesso do t ext o como Negri t o.
O Ret or no:
Nen hum -
Tex t Under l i n e
O Descr i o: Text o Sublinhado. O Si nt ax e: Text Underl ine( al Underline ) O Par met r os:
al Underline Lgi co. Habi lit a ou Desabilit a a sesso do t ext o Sublinhado.
O Ret or no:
Nen hum -
Tex t I t al i c
O Descr i o: Text o I t l i co. O Si nt ax e: Text I t al i c( al I t ali c ) O Par met r os:
al I t ali c Lgi co. Habi lit a ou Desabilit a a sesso do t ext o I t l i co.
O Ret or no:
Nen hum -
- 466 -
ADVPL Compl et o
Tex t Fami l y
O Descr i o: Famli a de font es. O Si nt ax e: Text Fami l y( acFamil y ) O Par met r os:
acFamil y Text o. Nome da famli a da font e a ser usada na sesso do t ext o.
O Ret or no:
Nen hum -
Tex t Si ze
O Descr i o: Tamanho da font e. O Si nt ax e: Text Si ze( anSize ) O Par met r os:
anSize Numri co. Tamanho da font e ut i lizada na sesso do t ext o.
O Ret or no:
Nen hum -
Tex t St y l e
O Descr i o: Est i l o do pargrafo. O Si nt ax e: Text St yl e( anSt yl e ) O Par met r os:
anSt yl e Numri co. Est i l o do par grafo a ser ut ili zada na sesso do t ext o.
1 Normal 2 Di sco ( Bul l et ) 3 Ci rcul o ( Bull et ) 4 Quadrado ( Bul l et ) 5 Ordem deci mal 6 Ordem al fanumri ca mi nscul o 7 Ordem al fanumri ca mai scul o
O Ret or no:
Nen hum -
- 467 -
ADVPL Compl et o
Tex t Al i gn
O Descr i o: Al inhament o do t ext o. O Si nt ax e: Text Al i gn( anAli gn ) O Par met r os:
anAlign Numri co. Ti po do ali nhament o do pargrafo. 1 Esquerda 2 Di rei t a 3 Cent rali zado 4 Just i fi cado
O Ret or no:
Nen hum -
Tex t For mat
O Descr i o: Format o do t ext o. O Si nt ax e: Text Format ( anFormat ) O Par met r os:
anFormat Numri co. Format o do t ext o 1 Ht ml 2 Pl ain Text
O Ret or no:
Nen hum -
Ret Tex t
O Descr i o: Ret orna o t ext o em format o st ri ng. O Si nt ax e: Ret Text ( voi d ) O Par met r os:
voi d Ret orna uma st ri ng com o cont edo do edi t or
O Ret or no:
Nen hum -
Ret Tex t Sel
O Descr i o: Ret orna o t ext o sel eci onado em for mat o st ri ng.. O Si nt ax e: Ret Text ( ) O Par met r os:
Nenhum -
O Ret or no:
St r i n g Text o sel eci onado.
- 468 -
ADVPL Compl et o
Tex t St at us
O Descr i o: Ret orna um arr ay com as propri edades do t ext o posi ci onado. O Si nt ax e: Text St at us( ) O Par met r os:
Nenhum -
O Ret or no:
Ar r ay Ret orna um ar ray com as segui nt es propri edades :
1 Lgi co Negri t o 2 Lgi co I t l i co 3 Lgi co Subli nhado 4 Caract er RGB da cor 5 Caract er Tamanho da font e 6 Caract er Font e
E Apar nci a:
- 469 -
ADVPL Compl et o
Ex empl o:
#include protheus.ch
User Function MyEditor() Local oDlg, oEditor DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu Editor // Usando o mtodo create oEdit := tSimpleEditor():Create( oDlg ) oEdit:nTop := 10 oEdit:nLeft := 10 oEdit:nWidth := 600 oEdit:nHeight := 500
// Usando o mtodo new oEdit := tSimpEdit():New( 0, 0, oDlg, 500, 600 )
ACTIVATE MSDIALOG oDlg CENTERED Return Nil
TSLI DER( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont r ol e t Sli der, a qual permi t e cri ar um cont r ol e vi sual do t i po bot o desli zant e.
E Pr opr i edades:
bChange Bl oco de cdi go. Execut ado t oda vez que o val or al t erado ret ornando o novo val or .
E Const r ut or : New( [ anRow] , [ anCol ] , [ aoWnd] , [ abChange] , [ anWi dt h] , [ anHei ght ] , [ acMsg] , [ abWhen] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s anCol Numri co, opci onal . Coordenada hori zont al em pi xel s aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. abChange Bl oco de cdi go, opci onal . Bl oco que dever ser aci onado quando o bot o for movi ment ado. anWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s. anHei ght Numri co, opci onal . Al t ura do bot o em pi xel s. acMsg Caract er , opci onal . Mensagem de hi nt do bot o abWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no.
E Mt odos aux i l i ar es:
- 470 -
ADVPL Compl et o
Cr eat e
O Descr i o: Mt odo const rut or da cl asse. O Si nt ax e: Creat e( aoWnd ) O Par met r os:
aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado.
O Ret or no:
Obj et o Obj et o do t i po TSl i de cri ado.
set Range
O Descr i o: Especi fi ca a fai xa de val or es. O Si nt ax e: set Range( mi n, max ) O Par met r os:
Mi n Nmri co. Val or mni mo do bot o. Max Nmri co. Val or mxi mo do bot o.
O Ret or no:
Nen hum -
set Mar k s
O Descr i o: Especi fi ca o t i po de mar cao do bot o. O Si nt ax e: set Marks( nTipo ) O Par met r os:
nTi po Nmri co. Ti po de mar cao do bot o. 1 - Max Nmri co. Val or mxi mo do bot o. 0 Sem mar cao 1 Aci ma ( esquerda se vert i cal) 2 Abai xo ( di rei t a se vert i cal ) 3 Ambos os l ados
O Ret or no:
Nen hum -
- 471 -
ADVPL Compl et o
set I nt er v al
O Descr i o: Especi fi ca a di st nci a ent re um mar cador e out ro. O Si nt ax e: set I nt erval ( nI nt erval ) O Par met r os:
nI nt erval Nmri co. Val or ent r e os mar cador es
O Ret or no:
Nen hum -
set Val ue
O Descr i o: Especi fi ca um val or para o bot o. O Si nt ax e: set Val ue( nVal ) O Par met r os:
nVal Nmri co. Val or do bot o
O Ret or no:
Nen hum -
set St ep
O Descr i o: Especi fi ca o val or dos passos do bot o. O Si nt ax e: set St ep( nSt ep ) O Par met r os:
nSt ep Nmri co. Val or do passo do bot o
O Ret or no:
Nen hum -
set Or i ent
O Descr i o: Especi fi ca a ori ent ao do bot o, hori zont al ou vert i cal . O Si nt ax e: set Ori ent ( nOr i ent ) O Par met r os:
nOri ent Nmri co. Ori ent ao do bot o 0 Hori zont al 1 Vert i cal
O Ret or no:
Nen hum -
- 472 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include protheus.ch #include hbutton.ch User Function MytSlider() Local oDlg, oSlider DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu tSlider // Usando o mtodo create oSlider:= tSlider():Create( oDlg ) oSlider:nTop := 100 oSlider:nLeft := 10 oSlider:nWidth := 100 oSlider:nHeight := 30
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e t Spli t t er, a qual permi t e cri ar um cont r ol e vi sual do t i po di vi sor.
E Pr opr i edades:
- Herdadas as cl asses superi or es.
E Const r ut or : New( [ anRow] , [ anCol ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] , [ anOri ent at i on] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal anCol Numri co, opci onal . Coordenada hori zont al aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. anWi dt h Numri co, opci onal . Lar gura do obj et o anHei ght Numri co, opci onal . Al t ura do obj et o anOri ent at i on Numri co, opci onal . Sent i do no qual devero ser cri ado os di vi sores. 0 Hori zont al 1 Vert i cal
- 473 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
Cr eat e
O Descr i o: Mt odo const rut or da cl asse. O Si nt ax e: Creat e( aoWnd ) O Par met r os:
aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado.
O Ret or no:
Obj et o Obj et o do t i po Tspli t t er gerado.
set Or i ent
O Descr i o: Especi fi ca a ori ent ao do di vi sor, hori zont al ou vert i cal . O Si nt ax e: set Ori ent ( nOr i ent ) O Par met r os:
nOri ent Nmri co. Ori ent ao do bot o 0 Hori zont al 1 Vert i cal
O Ret or no:
Nen hum -
set Ch i l dCol l apse
O Descr i o: Especi fi ca se os el ement os podem ser col l apsi bl es . O Si nt ax e: set Chil dColl pse( l Coll ) O Par met r os:
l Coll Lgi co. At i va / Desat i va
O Ret or no:
Nen hum -
- 474 -
ADVPL Compl et o
set Col l apse
O Descr i o: Especi fi ca o obj et o que pode ser coll apsi bl e . O Si nt ax e: set Col l apse( oObj , l Coll ) O Par met r os:
oObj Obj et o. Cont rol e a ser col l apsed l Coll Lgi co. At i va / Desat i va
O Ret or no:
Nen hum -
mov ToLast
O Descr i o: Col oca o obj et o como ul t i mo das di vi ses. O Si nt ax e: movToLast ( oObj ) O Par met r os:
oObj Obj et o. Cont rol e a posi ci onado
O Ret or no:
Nen hum -
mov ToFi r st
O Descr i o: Col oca o obj et o como pri mei ro das di vi ses. O Si nt ax e: movToFi rst ( oObj ) O Par met r os:
oObj Obj et o. Cont rol e a ser posi ci onado
O Ret or no:
Nen hum -
set Opaqu eResi ze
O Descr i o: Especi fi ca se o r esi ze deve ser opaco. O Si nt ax e: set OpaqueResi ze( l Opaq ) O Par met r os:
l Opaq Lgi co. At i va / Desat i va
O Ret or no:
Nen hum -
- 475 -
ADVPL Compl et o
set Resi zeMode
O Descr i o: Especi fi ca o mode de r esi ze do obj et o.. O Si nt ax e: set Resi zeMode ( oObj , nMode ) O Par met r os:
oObj Obj et o. Cont rol e a ser resi zed nMode Numri co. Modo do r esi ze 0 St r et ch 1- KeepSi ze 2 Fol l owSi zeHi nt 3 Aut o
O Ret or no:
Nen hum -
E Apar nci a:
- 476 -
ADVPL Compl et o
Ex empl o:
#include protheus.ch #include hbutton.ch
User Function MytSplitter() Local oDlg, oSplitter, oPanel1, oPanel2, oPanel3
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu tSplitter
// Usando o mtodo create oSplitter := tSplitter():Create( oDlg ) @ 1, 1 MSPANEL oPanel1 OF oSplitter @ 1, 2 MSPANEL oPanel2 OF oSplitter @ 1, 3 MSPANEL oPanel3 OF oSplitter
// Usando o command @ 1, 1 SPLITTER oSplitter SIZE 100, 100 OF oDlg @ 1, 1 MSPANEL oPanel1 OF oSplitter @ 1, 2 MSPANEL oPanel2 OF oSplitter @ 1, 3 MSPANEL oPanel3 OF oSplitter
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil
TTABS( )
E Descr i o: Cl asse de obj et os vi suai s do t i po cont r ol e TTabs, a qual permi t e cri ar um cont r ol e vi sual do t i po past a.
E Pr opr i edades:
- Herdadas das cl asses superi or es.
E Const r ut or : New( [ anTop] , [ anLeft ] , [ aPr ompt s] , [ bAct i on] , [ oWnd] , [ nOpt i on] , [ nCl rFore] , [ nCl rBack] , [ l Pi xel ] , [ l Desi gn] , [ nWi dt h] , [ nHei gt h] , [ cMsg] )
E Par met r os:
anTop Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anLeft Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres aPrompt s Array, Ti t ul o dos fol ders bAct i on Bl oco de codi go, Di spar ado na t r oca da aba.
oWnd Obj et o, opci onal . Janel a ou cont r ol e onde a bot o dever ser cri ado nOpt i on Numri co, opci onal . Folder sel eci onado nCl rFore Numri co, opci onal . Cor de fr ent e nCl rBack Numri co, opci onal . Cor de fundo l Pi xel Lgi co, opci onal . Ut iliza coordenadas em pi xel
- 477 -
ADVPL Compl et o
l Desi gn Lgi co, opci onal . NO USADO nWi dt h Numri co, opci onal . Lar gura em pi xel s nHei gt h Numri co, opci onal . Al t ura em pi xel s. cMsg Caract er e, Mensagem de Hi nt
E Mt odos aux i l i ar es:
AddI t em
O Descr i o: Adi ci ona uma aba na past a O Si nt ax e: AddI t em( cTt ul o) O Par met r os:
cTt ul o Tt ul o da aba que ser adi ci onada
O Ret or no:
Nen hum -
Set Opt i on
O Descr i o: Sel eci ona a Aba O Si nt ax e: Set Opt i on( nNrAba ) O Par met r os:
nNrAba Nmer o que i dent i fi ca a posi o da aba que ser sel eci onada.
O Ret or no:
Nen hum -
E Apar nci a:
- 478 -
ADVPL Compl et o
Ex empl o:
#include 'protheus.ch' User Function Teste() Local oDlg DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
E Descr i o: Cl asse de obj et os vi suai s do t i po cont rol e t Tool box, a qual permi t e cri ar um cont r ol e vi sual para agrupar di fer ent es obj et os.
E Pr opr i edades:
bChangeGrp Bl oco de cdi go. Execut ado na t r oca ent r e os grupos exi st ent es.
E Const r ut or : New( [ anRow] , [ anCol ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] , [ aoFont ] , [ acMsg] ] , [ abWhen] )
E Par met r os:
anRow Numri co, opci onal . Coordenada vert i cal em pi xel s ou carat er es. anCol Numri co, opci onal . Coordenada hori zont al em pi xel s ou caract eres. aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. anWi dt h Numri co, opci onal . Lar gura do bot o em pi xel s. anHei ght Numri co, opci onal . Al t ura do bot o em pi xel s. aoFont Obj et o, opci onal . Obj et o t i po t Font com propri edades da font e ut i lizada para o t t ul o do bot o. acMsg Mensagem, opci onal . Tool t i p/ Hi nt do component e. abWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no.
- 479 -
ADVPL Compl et o
E Mt odos aux i l i ar es:
Cr eat e
O Descr i o: Mt odo const rut or opci onal da cl asse. O Si nt ax e: Creat e( aoWnd ) O Par met r os:
aoWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado.
O Ret or no:
Obj et o Obj et o do t i po Tt ool Box gerado.
addGr oup
O Descr i o: Adi ci ona um grupo O Si nt ax e: addGroup( aoObj , acName, aoI con ) O Par met r os:
aoObj Obj et o. Obj et o Pai que vai ser i nseri do no grupo. acName Caract er e. Descri o do grupo aoI con Obj et o, opci onal . cone para o grupo
O Ret or no:
Nen hum -
r emov eGr ou p
O Descr i o: Remove um grupo O Si nt ax e: r emoveGroup( aoObj ) O Par met r os:
aoObj Obj et o. Obj et o Pai que vai ser r emovi do do grupo.
O Ret or no:
Nen hum -
set Cu r r ent Gr oup
O Descr i o: Defi ne o gr upo cor rent e O Si nt ax e: set Cur rent Gr oup( aoObj ) O Par met r os:
aoObj Obj et o. Obj et o Pai que ser defi ni do como grupo cor r ent e.
O Ret or no:
Nen hum -
- 480 -
ADVPL Compl et o
E Apar nci a:
Ex empl o:
#include protheus.ch
User Function MytToolbox() Local oDlg, oTb
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu Toolbox
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al nWi dt h Numri co, opci onal . Lar gura do obj et o nHei ght Numri co, opci onal . Al t ura do obj et o bFi el ds Bl oco de cdi go, Li st a de Campos aHeaders Vet or, Descri o dos campos para no cabeal ho aCol Sizes Vet or, Largur a das col unas oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. cFi el d Caract er , opci onal . Campos necessri os ao fil t ro uValue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro uValue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro bChange Bl oco de cdi go, opci onal . Execut ado quando o i t em sel eci onado al t erado. bLDbl Cli ck Bl oco de cdi go, opci onal . Execut ado quando aci onado dupl o cli ck do bot o esquerdo do mouse sobr e o cont r ol e. bRCli ck No ut i lizado oFont Obj et o, opci onal . Font e oCursor Obj et o, opci onal . Ti po do Cur sor nCl rFore Numri co, opci onal . Cor do t ext o da j anel a. nCl rBack Numri co, opci onal . Cor de fundo da j anel a. cMsg Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o obj et o l Updat e No ut i lizado cAli as Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o se ut i lizado com Tabel a l Pi xel Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Desi gn No Ut i li zado bVali d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do
- 482 -
ADVPL Compl et o
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. l HScrol l Lgi co, opci onal . Se . T., habilit a barra de rol agem hori zont al . l VScroll Lgi co, opci onal . Se . T., habilit a barra de rol agem vert i cal .
E Mt odos aux i l i ar es:
GoUp
O Descr i o: Sal t a uma linha para ci ma. O Si nt ax e: GoUp( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoDow n
O Descr i o: Sal t a uma linha para bai xo. O Si nt ax e: GoDow n( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoTop
O Descr i o: Sal t a para pri mei ra linha. O Si nt ax e: GoTop( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoBot t om
O Descr i o: Sal t a para ult i ma linha. O Si nt ax e: GoBot t om( ) O Par met r os:
Nenhum -
O Ret or no:
- 483 -
ADVPL Compl et o
Ni l
Row Count
O Descr i o: Ret orna numer o de l i nhas vi si vei s. O Si nt ax e: Row Count ( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
LEdi t Cel l
O Descr i o: Edi t a o val or de uma col una. O Si nt ax e: l Edi t Cell( aLi st , oLi st , cPi ct ure, nCol ) O Par met r os:
aLi st Vet or da Browse onde est o os val or es da mesma oLi st Obj et o, Browse a ser edi t ado cPi ct ure Caract er , pi ct ure necessri a para edi o do campo nCol Numri co, col una a ser edi t ada.
O Ret or no:
Ni l
E Apar nci a:
- 484 -
ADVPL Compl et o
Ex empl o:
#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'
nRow Numri co, opci onal . Coordenada vert i cal nCol Numri co, opci onal . Coordenada hori zont al nWi dt h Numri co, opci onal . Lar gura do obj et o nHei ght Numri co, opci onal . Al t ura do obj et o bFi el ds Bl oco de cdi go, Li st a de Campos aHeaders Vet or, Descri o dos campos para no cabeal ho aCol Sizes Vet or, Largur a das col unas oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o di visor dever ser cri ado. cFi el d Caract er , opci onal . Campos necessri os ao fil t ro uValue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro uValue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro bChange Bl oco de cdi go, opci onal . Execut ado quando o i t em sel eci onado al t erado. bLDbl Cli ck Bl oco de cdi go, opci onal . Execut ado quando aci onado dupl o cli ck do bot o esquerdo do mouse sobr e o cont r ol e. bRCli ck No ut i lizado oFont Obj et o, opci onal . Font e oCursor Obj et o, opci onal . Ti po do Cur sor nCl rFore Numri co, opci onal . Cor do t ext o da j anel a. nCl rBack Numri co, opci onal . Cor de fundo da j anel a. cMsg Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o obj et o l Updat e No ut i lizado cAli as Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o se ut i lizado com Tabel a l Pi xel Lgi co, opci onal . Se . T. as coordenadas i nformadas so em pi xel s, se .F. so em car act eres. bWhen Bl oco de cdi go, opci onal . Execut ado quando mudana de foco de ent rada de dados est sendo efet uada na j anel a onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o cont r ol e deve permanecer habili t ado ou .F. se no. l Desi gn No Ut i li zado
- 486 -
ADVPL Compl et o
bVali d Bl oco de cdi go, opci onal . Execut ado quando o cont edo do cont r ol e deve ser vali dado, deve ret ornar .T. se o cont edo for vl i do e .F. quando o cont edo for i nvli do. l HScrol l Lgi co, opci onal . Se . T., habilit a barra de rol agem hori zont al . l VScroll Lgi co, opci onal . Se . T., habilit a barra de rol agem vert i cal .
E Mt odos aux i l i ar es:
GoUp
O Descr i o: Sal t a uma linha para ci ma. O Si nt ax e: GoUp( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoDow n
O Descr i o: Sal t a uma linha para bai xo. O Si nt ax e: GoDow n( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
GoTop
O Descr i o: Sal t a para pri mei ra linha. O Si nt ax e: GoTop( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
- 487 -
ADVPL Compl et o
GoBot t om
O Descr i o: Sal t a para ult i ma linha. O Si nt ax e: GoBot t om( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
Row Count
O Descr i o: Ret orna numer o de l i nhas vi si vei s. O Si nt ax e: Row Count ( ) O Par met r os:
Nenhum -
O Ret or no:
Ni l
LEdi t Cel l
O Descr i o: Edi t a o val or de uma col una. O Si nt ax e: l Edi t Cell( aLi st , oLi st , cPi ct ure, nCol ) O Par met r os:
aLi st Vet or da Browse onde est o os val or es da mesma oLi st Obj et o, Browse a ser edi t ado cPi ct ure Caract er , pi ct ure necessri a para edi o do campo nCol Numri co, col una a ser edi t ada.
O Ret or no:
Ni l
- 488 -
ADVPL Compl et o
E Apar nci a:
- 489 -
ADVPL Compl et o
Ex empl o:
#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'
// Principais commandos TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp() },40,10,,,,.T.) TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown() },40,10,,,,.T.) TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop() },40,10,,,,.T.) TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom() },40,10,,,,.T.) TButton():New(160,060,'nAt (Linha selecionada)',oDlg,; {|| Alert (oBrowse:nAt)},80,10,,,,.T.) TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,; {|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.) TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,; {|| Alert(oBrowse:nLen) },80,10,,,,.T.) TButton():New(190,060, 'lEditCell (Edita a celula)', oDlg,; {|| lEditCell(@aBrowse,oBrowse,'@!',3) },40,10,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED Return NIL
- 490 -
ADVPL Compl et o
Document ao dos component es da i nt er f ace v i su al
Os component es da i nt er face vi sual da linguagem ADVPL ut ili zados nest e t r ei nament o est o document ados na seo Gui a de Refernci a, ao fi nal dest e mat eri al .
Para vi sualizar a document ao compl et a de t odos os component es menci onados nest e capt ul o deve ser acesso o si t e DEM Document ao El et r ni ca Mi crosi ga ( dem.mi crosi ga.com.br) confor me abai xo:
- 491 -
ADVPL Compl et o
36.1. Par t i cul ar i dades dos component es v i suai s
36.1.1. Conf i gur ando as cor es par a os component es
Os component es vi suai s da li nguagem ADVPL ut ilizam o padro de cores RGB.
As cor es dest e padro so defi ni das pel a seguint e fr mul a, a qual deve ser aval i ada t endo como base a pal et a de cor es no format o RGB:
nCor : = n Ver mel ho + ( nVer de * 25 6) + ( n Azul * 65 536)
Fi gu r a: Pal et a de cor es no f or mat o RGB
Com base nest a pal et a, podemos defi ni r os val ores das segui nt es cores bsi cas:
Cor R G B Val or Pret o 0 0 0 0 Azul 0 0 255 16711680 Verde 0 255 0 65280 Ci ano 0 255 255 16776960 Vermel ho 255 0 0 255 Rosa 255 0 255 16711935 Amarel o 255 255 0 65535 Branco 255 255 255 16777215
- 492 -
ADVPL Compl et o
Para at ri bui r as cor es aos obj et os vi suai s devem ser obser vados os at r i but os ut ili zados para est es fi ns em cada obj et o, como por exempl o:
MSDI ALOG( )
nCl r Pane Cor de fundo do pai nel nCl r Tex t Cor da font e das l et ras do pai nel
TSAY( )
nCl r Pane Cor de fundo do pai nel nCl r Tex t Cor da font e das l et ras do pai nel
Funo RGB( )
A li nguagem ADVPL possui a funo RGB( ) a qual ret orna o val or da cor a ser defi ni do, de acordo com a paramet ri zao de cada um dos el ement os da pal et a RGB.
RGB( nRed, nGr een, n Bl u e)
nRed Val or de 0- 255 para o el ement o vermel ho da pal et a RGB nGr een Val or de 0- 255 para o el ement o verde da pal et a RGB nBl ue Val or de 0- 255 para o el ement o azul da pal et a RGB Ret or no Val or a ser defi ni do para o at ri but o cor do component e
- 493 -
ADVPL Compl et o
37. Apl i caes com a i nt er f ace vi sual do ADVPL
A li nguagem ADVPL possui int erfaces vi suai s pr- defi ni das que auxiliam no desenvol vi ment o de apl i caes mai s compl et as, combi nando est as i nt erfaces com os component es vi suais demonst rados ant eri or ment e.
Di dat i cament e as i nt erfaces vi suai s pr- defi ni das da li nguagem ADVPL podem ser di vidi das em t rs grupos:
E Capt ur a de i nf or maes si mpl es ou Mul t i - Get s; E Capt ur a de ml t i pl as i nf or maes ou Mu l t i - Li nes; E Bar r as de bot es
37.1. Capt ur a de i nf or maes si mpl es ( Mul t i - Get s)
Em ADVPL, as t el as de capt ura de i nformaes compost as por ml t i pl os campos di gi t vei s acompanhados de seus r espect i vos t ext os expl i cat i vos so comument e chamados de Enchoi ces.
Um Enchoi ce pode ser facil ment e ent endi da como di versos conj unt os de obj et os TSay e TGet ali nhados de forma a vi suali zar ou capt urar i nformaes, nor mal ment e vi ncul adas a arqui vos de cadast r os ou movi ment aes si mpl es.
Abai xo t emos a vi sualizao de uma Enchoi ce para o arqui vo padr o do ERP Pr ot heus de Cadast r o de Cl i ent es ( SA1 ) :
Fi gu r a: Enchoi ce do Cadast r o de Cl i ent es do ERP Pr ot h eu s
- 494 -
ADVPL Compl et o
A li nguagem ADVPL per mi t e a i mpl ement ao da Enchoi ce de duas for mas si mil ares:
E Funo Enchoi ce: Si nt axe t radi ci onal ment e ut ili zada em ADVPL, a qual no ret orna um obj et o para a apl i cao chamadora;
E Cl asse MsMGet : Cl asse do obj et o Enchoi ce, a qual permit e a i nst anci ao di ret a de um obj et o, t ornando- o di sponvel na apli cao chamadora.
A ut ili zao de um ou out ro obj et o depende unicament e da escol ha do desenvol vedor j que os parmet ros para a funo Enchoi ce e para o mt odo New( ) da cl asse MsMGet so os mesmos, l embrando que para mant er a coernci a com uma apli cao escri t a em ori ent ao a obj et os dever ser ut i lizada a classe MsMGet ( ) .
37.1.1. Enchoi ce( )
E Si nt ax e: Enchoi ce( cAl i as, n Reg, nOpc, aCRA, cLet r a, cTex t o, aAcho, aPos, aCpos, nModel o, n Col Mens, cMen sagem, cTudoOk , oWn d, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y )
E Ret or no: Ni l E Par met r os:
cAl i as Tabel a cadast r ada no Di ci onri o de Tabel as ( SX2) que ser edi t ada nReg Parmet r o no ut ili zado nOpc Nmer o da li nha do aRot ina que defi ni r o t i po de edi o ( I ncl uso, Al t erao, Excl uso, Vi sualizao) aCRA Parmet r o no ut ili zado cLet r a Parmet r o no ut ili zado cTex t o Parmet r o no ut ili zado aAcho Vet or com nome dos campos que sero exi bi dos. Os campos de usuri o sempre sero exi bidos se no exi st i r no par met ro um el ement o com a expresso " NOUSER" aPos Vet or com coordenadas para cri ao da enchoi ce no format o { < t op> , < l eft > , < bot t om> , < ri ght > } aCpos Vet or com nome dos campos que podero ser edi t ados nModel o Se for di fer ent e de 1 desabili t a execuo de gat ilhos est r angei ros nCol Men s Parmet r o no ut ili zado cMensagem Parmet r o no ut ili zado cTudoOk Expresso par a val i dao da Enchoi ce oWnd Obj et o ( j anel a, pai nel , et c.) onde a enchoi ce ser cri ada. l F3 I ndi ca se a enchoi ce est a sendo cri ada em uma consul t a F3 para ut ili zar vari vei s de memri a l Memor i a I ndi ca se a enchoi ce ut i li zar vari vei s de memri a ou os campos da t abel a na edi o l Col umn I ndi ca se a apresent ao dos campos ser em forma de col una caTel a Nome da vari vel t i po "pri vat e" que a enchoi ce ut ili zar no l ugar da propri edade aTel a l NoFol der I ndi ca se a enchoi ce no i r ut ili zar as Past as de Cadast r o ( SXA) l Pr oper t y I ndi ca se a enchoi ce no ut ili zar as vari vei s aTel a e aGet s, soment e suas propri edades com os mesmos nomes
- 495 -
ADVPL Compl et o
Ex empl o: Ut i l i zao da f uno Enchoi ce( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao da funo Enchoice() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
Local cAliasE := cAlias Local aAlterEnch := {} Local aPos := {000,000,400,600} Local nModelo := 3 Local lF3 := .F. Local lMemoria := .T. Local lColumn := .F. Local caTela := "" Local lNoFolder := .F. Local lProperty := .F. Private oDlg Private oGetD Private oEnch Private aTELA[0][0] Private aGETS[0]
DbSelectArea("SX3") DbSetOrder(1) DbSeek(cAliasE)
- 496 -
ADVPL Compl et o
Exemplo (continuao):
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.; X3Uso(SX3->X3_USADO) AADD(aCpoEnch,SX3->X3_CAMPO) EndIf DbSkip() End
aAlterEnch := aClone(aCpoEnch)
DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL RegToMemory("SA1", If(nOpc==3,.T.,.F.))
E Si nt ax e: MsMGet ( ) : New ( cAl i as, nReg, nOpc, aCRA, cLet r a, cTex t o, aAcho, aPos, aCpos, nModel o, n Col Mens, cMen sagem, cTudoOk , oWnd, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y )
E Ret or no: oMsMGet obj et o do t i po MsMGet ( ) E Par met r os:
cAl i as Tabel a cadast r ada no Di ci onri o de Tabel as ( SX2) que ser edi t ada nReg Parmet r o no ut ili zado nOpc Nmer o da li nha do aRot ina que defi ni r o t i po de edi o ( I ncl uso, Al t erao, Excl uso, Vi sualizao) aCRA Parmet r o no ut ili zado cLet r a Parmet r o no ut ili zado cTex t o Parmet r o no ut ili zado aAcho Vet or com nome dos campos que sero exi bi dos. Os campos de usuri o sempre sero exi bidos se no exi st i r no par met ro um el ement o com a expresso " NOUSER" aPos Vet or com coordenadas para cri ao da enchoi ce no format o { < t op> , < l eft > , < bot t om> , < ri ght > } aCpos Vet or com nome dos campos que podero ser edi t ados nModel o Se for di fer ent e de 1 desabili t a execuo de gat ilhos est r angei ros nCol Men s Parmet r o no ut ili zado cMensagem Parmet r o no ut ili zado cTudoOk Expresso par a val i dao da Enchoi ce oWnd Obj et o ( j anel a, pai nel , et c.) onde a enchoi ce ser cri ada. l F3 I ndi ca se a enchoi ce est a sendo cri ada em uma consul t a F3 para ut ili zar vari vei s de memri a
- 497 -
ADVPL Compl et o
l Memor i a I ndi ca se a enchoi ce ut i li zar vari vei s de memri a ou os campos da t abel a na edi o l Col umn I ndi ca se a apresent ao dos campos ser em forma de col una caTel a Nome da vari vel t i po "pri vat e" que a enchoi ce ut ili zar no l ugar da propri edade aTel a l NoFol der I ndi ca se a enchoi ce no i r ut ili zar as Past as de Cadast r o ( SXA) l Pr oper t y I ndi ca se a enchoi ce no ut ili zar as vari vei s aTel a e aGet s, soment e suas propri edades com os mesmos nomes
Ex empl o: Ut i l i zao do obj et o MsMGet ( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto MsMget() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function ModEnc(cAlias,nReg,nOpc) Local aCpoEnch := {} Local aAlter := {}
Local cAliasE := cAlias Local aAlterEnch := {} Local aPos := {000,000,400,600} Local nModelo := 3 Local lF3 := .F. Local lMemoria := .T. Local lColumn := .F. Local caTela := "" Local lNoFolder := .F. Local lProperty := .F. Private oDlg Private oGetD Private oEnch Private aTELA[0][0] Private aGETS[0]
- 498 -
ADVPL Compl et o
Exemplo (continuao):
DbSelectArea("SX3") DbSetOrder(1) DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO) AADD(aCpoEnch,SX3->X3_CAMPO) EndIf DbSkip() End
37.2. Capt ur a de ml t i pl as i nf or maes ( Mul t i - Li nes)
A li nguagem ADVPL permi t e a ut ili zao de basi cament e doi s t i pos de obj et os do t i po gri d, ou como t ambm so conheci dos: mul t i - li ne:
E Gr i ds di gi t v ei s: per mi t em a vi sualizao e capt ura de i nformaes, comument e ut ili zados em i nt erfaces de cadast r o e manut eno, t ai s como:
MSGETDB( ) MSGETDADOS( ) MSNEWGETDADOS( )
E Gr i ds n o di gi t v ei s: permi t em soment e a vi suali zao de i nformaes, comument e ut ili zados como browses do ERP Pr ot heus, t ai s como:
TWBROWSE( ) MAWNDBROWSE( ) MBROWSE( )
Nest e t pi co sero t rat adas as gri ds di gi t vei s di sponvei s na li nguagem ADVPL para o desenvol vi ment o de i nt er faces de cadast r os e manut eno de i nformaes.
- 499 -
ADVPL Compl et o
37.2.1. MsGet DB( )
A cl asse de obj et os vi suai s MsGet DB( ) permi t e a cri ao de um gri d di gi t vel com uma ou mai s col unas, baseado em uma t abel a t emporri a.
E Si nt ax e: MsGet DB( ) : New ( nTop, nLef t , n Bot t om, nRi ght , nOpc, cLi nh aOk , cTudoOk , cI n i Cpos, l Del et e, aAl t er , nFr eeze, l Empt y , u Par 1, cTRB, cFi el dOk , l Condi ci on al , l Append, oWnd, l Di spar os, uPar 2, cDel Ok , cSuper Del )
E Ret or no: oMsGet DB obj et o do t i po MsGet DB( )
E Par met r os:
nTop Di st anci a ent re a MsGet DB e o ext r emi dade superi or do obj et o que a cont m. nLef t Di st anci a ent re a MsGet DB e o ext r emi dade esquerda do obj et o que a cont m. nBot t om Di st anci a ent re a MsGet DB e o ext r emi dade inferi or do obj et o que a cont m. nRi ght
Di st anci a ent re a MsGet DB e o ext r emi dade di rei t a do obj et o que a cont m. nOpc Posi o do el ement o do vet or aRot i na que a MsGet DB usar como refernci a. cLi nh aOk Funo execut ada para vali dar o cont ext o da linha at ual do aCol s. cTudoOk Funo execut ada para vali dar o cont ext o ger al da MsGet DB ( t odo aCol s) . cI ni Cpos Nome dos campos do t ipo caract er que ut ili zaro i ncrement o aut omt i co. Est e parmet r o deve ser no for mat o + < nome do pri mei ro campo> + < nome do segundo campo> + . .. . l Del et e Habili t a a opo de excl ui r li nhas do aCol s. Val or padro fal so. aAl t er Vet or com os campos que podero ser al t erados. nFr eeze I ndi ca qual col una no fi cara congel ada na exi bio. l Empt y Habili t a validao da pr i mei ra col una do aCol s para est a no poder est ar vazi a. Val or padro fal so. uPar 1 Parmet r o r eservado. cFi el dOk Funo execut ada na vali dao do campo. cTRB Ali as da t abel a t emporri a. l Con di ci on al Reser vado l Appen d I ndi ca se a MsGet DB i ra cri ar uma linha em branco aut omat i cament e quando for i ncluso. cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do aCol s. l Di spar os I ndi ca se ser ut ili zado o Di ci onri o de Dados para consul t a padro, i ni ci ali zao padro e gat i l hos. uPar 2 Parmet r o r eservado. cSuper Del - Funo execut ada quando pressi onada as t ecl as < Ct rl > + < Del et e> . oWnd Obj et o no qual a MsGet DB ser cri ada.
- 500 -
ADVPL Compl et o
E Apar nci a:
E Var i v ei s pr i v at e:
aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e que defi ni ra o t i po de operao que est a sendo execut ada ( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no for mat o: { cTi t ul o, cRot i na, nOpo, nAcesso} , aonde: nOpo segue o padro do ERP Prot heus para: 11- Pesqui sar 12- Vi suali zar 13- I ncl ui r 14- Al t erar 15- Excl ui r aHeader Vet or com i nformaes das col unas no format o:
{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,; cVali dao, cReservado, cTi po, xReservado1, xReser vado2}
A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada com base no aHeader mai s um l t i mo campo t i po l gi co que det ermi na se a l i nha foi excl uda.
l Ref r esh Vari vel t i po l gi ca para uso r eser vado.
- 501 -
ADVPL Compl et o
E Var i v ei s p bl i cas:
nBr Li n I ndi ca qual a li nha posi ci onada do aCol s.
E Funes de v al i dao:
cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No pode ser defi ni da como St at i c Funct i on. cTudoOk Funo de val idao da confi rmao da operao com o gri d. No pode ser defi ni da como St at i c Funct i on.
E Mt odos adi ci on ai s:
For ceRef r esh( ) At uali za a MsGet DB com a t abel a e posi ci ona na pri mei ra linha.
Ex empl o: Ut i l i zao do obj et o MsGet DB( )
#include protheus.ch
/*/ +----------------------------------------------------------------------------- | Funo | GETDBSA1 | Autor | MICROSIGA |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto MsGetDB() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function GetDbSA1()
Local nI Local oDlg Local oGetDB Local nUsado := 0 Local aStruct := {}
User Function LINHAOK() ApMsgStop("LINHAOK") Return .T.
User Function TUDOOK() ApMsgStop("LINHAOK") Return .T.
User Function DELOK() ApMsgStop("DELOK") Return .T.
User Function SUPERDEL() ApMsgStop("SUPERDEL") Return .T.
User Function FIELDOK() ApMsgStop("FIELDOK") Return .T.
- 503 -
ADVPL Compl et o
37.2.2. MsGet Dados( )
A cl asse de obj et os vi suai s MsGet Dados( ) per mi t e a cri ao de um gri d di git vel com uma ou mai s col unas, baseado em um array.
E Si nt ax e: MsGet Dados( ) : New ( nTop, nLef t , nBot t om, nRi ght , n Opc, cLi nh aOk , cTudoOk , cI ni Cpos, l Del et e, aAl t er , uPar 1, l Empt y , nMax , cFi el dOk , cSuper Del , uPar 2, cDel Ok , oWnd)
E Ret or no: oMsGet Dados obj et o do t i po MsGet Dados( )
E Par met r os:
nTop Di st anci a ent re a MsGet Dados e o ext r emi dade superi or do obj et o que a cont m. nLef t Di st anci a ent re a MsGet Dados e o ext r emi dade esquerda do obj et o que a cont m. nBot t om Di st anci a ent re a MsGet Dados e o ext r emi dade i nferi or do obj et o que a cont m. nRi ght
Di st anci a ent re a MsGet Dados e o ext remi dade di rei t a do obj et o que a cont m. nOpc Posi o do el ement o do vet or aRot i na que a MsGet Dados usar como referenci a. cLi nh aOk Funo execut ada par a vali dar o cont ext o da linha at ual do aCol s. cTudoOk Funo execut ada para val i dar o cont ext o geral da MsGet Dados ( t odo aCol s) . cI ni Cpos Nome dos campos do t i po caract er que ut ili zaro i ncrement o aut omt i co. Est e parmet r o deve ser no for mat o + < nome do pri mei ro campo> + < nome do segundo campo> + . .. . l Del et e Habili t a excl ui r li nhas do aCol s. Val or padro fal so. aAl t er Vet or com os campos que podero ser al t erados. uPar 1 Parmet r o r eservado. l Empt y Habili t a validao da pr i mei ra col una do aCol s para est a no poder est ar vazi a. Val or padro fal so. nMax Nmer o mxi mo de l i nhas permi t idas. Val or padro 99. cFi el dOk Funo execut ada na vali dao do campo. cSuper Del Funo execut ada quando pressi onada as t ecl as < Ct rl > + < Del et e> . uPar 2 Parmet r o r eservado. cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do aCol s. oWnd Obj et o no qual a MsGet Dados ser cri ada.
- 504 -
ADVPL Compl et o
E Apar nci a:
E Var i v ei s pr i v at e:
aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e que defi ni ra o t i po de operao que est a sendo execut ada ( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no for mat o: { cTi t ul o, cRot i na, nOpo, nAcesso} , aonde: nOpo segue o padro do ERP Prot heus para: 16- Pesqui sar 17- Vi suali zar 18- I ncl ui r 19- Al t erar 20- Excl ui r aHeader Vet or com i nformaes das col unas no format o:
{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,; cVali dao, cReservado, cTi po, xReservado1, xReser vado2}
A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada com base no aHeader mai s um l t i mo campo t i po l gi co que det ermi na se a l i nha foi excl uda.
l Ref r esh Vari vel t i po l gi ca para uso r eser vado.
- 505 -
ADVPL Compl et o
E Var i v ei s p bl i cas:
N I ndi ca qual a li nha posi ci onada do aCol s.
E Funes de v al i dao:
cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No pode ser defi ni da como St at i c Funct i on. cTudoOk Funo de val idao da confi rmao da operao com o gri d. No pode ser defi ni da como St at i c Funct i on.
E Mt odos adi ci on ai s:
For ceRef r esh( ) At uali za a MsGet Dados com a t abel a e posi ci ona na pri mei ra linha. Hi de( ) Ocul t a a MsGet Dados. Show ( ) Most ra a MsGet Dados.
Ex empl o: Ut i l i zao do obj et o MsGet Dados( )
#include protheus.ch
/*/ +----------------------------------------------------------------------------- | Funo | GETDADOSA1 | Autor | MICROSIGA |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto MSGETADOS() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function GetDadoSA1()
Local nI Local oDlg Local oGetDados Local nUsado := 0 Private lRefresh := .T. Private aHeader := {} Private aCols := {}
User Function LINHAOK() ApMsgStop("LINHAOK") Return .T.
User Function TUDOOK() ApMsgStop("LINHAOK") Return .T.
User Function DELOK() ApMsgStop("DELOK") Return .T.
User Function SUPERDEL() ApMsgStop("SUPERDEL") Return .T.
User Function FIELDOK() ApMsgStop("FIELDOK") Return .T.
- 507 -
ADVPL Compl et o
37.2.3. MsNew Get Dados( )
A cl asse de obj et os vi suai s MsNewGet Dados( ) permi t e a cri ao de um gri d di git vel com uma ou mai s col unas, baseado em um array.
E Si nt ax e: MsNew Get Dados( ) : New ( nSuper i or , nEsqu er da ,n I n f er i or , nDi r ei t a, nOpc, cLi nOk , cTu doOk , cI ni Cpos, aAl t er GDa, nFr eeze, nMax , cFi el dOk , cSuper Del , cDel Ok , oDLG, aHeader , aCol s)
E Ret or no: oMsGet Dados obj et o do t i po MsNew Get Dados( )
E Par met r os:
nSuper i or Di st anci a ent re a MsNewGet Dados e o ext r emi dade superi or do obj et o que a cont em nEsqu er da Di st anci a ent re a MsNewGet Dados e o ext r emi dade esquerda do obj et o que a cont em nI nf er i or Di st anci a ent re a MsNewGet Dados e o ext r emi dade i nferi or do obj et o que a cont em nDi r ei t a Di st anci a ent re a MsNewGet Dados e o ext r emi dade di rei t a do obj et o que a cont em nOpc Operao em execuo: 2- Vi suali zar, 3- I ncl ui r, 4- Al t erar , 5- Excl ui r cLi nOk Funo execut ada para vali dar o cont ext o da l i nha at ual do aCol s cTudoOk Funo execut ada para vali dar o cont ext o geral da MsNewGet Dados ( t odo aCol s) cI ni Cpos Nome dos campos do t ipo caract er que ut i lizaro i ncrement o aut omt i co. aAl t er GDa Campos al t ervei s da Get Dados nFr eeze Campos est t i cos na Get Dados, part i ndo sempr e da posi o i ni ci al da get dados aonde: 3- Pri mei ro campo congel ado 4- Pri mei ro e segundo campos congel ados... nMax Nmer o mxi mo de l i nhas permi t idas. Val or padro 99 cFi el dOk Funo execut ada na vali dao do campo cSuper Del Funo execut ada quando pr essi onada as t ecl as < Ct rl > + < Del et e> cDel Ok Funo execut ada para vali dar a excl uso de uma li nha do aCol s oDLG Obj et o no qual a MsNewGet Dados ser cri ada aHeader Array a ser t r at ado i nt er nament e na MsNewGet Dados como aHeader aCol s Array a ser t r at ado i nt er nament e na MsNewGet Dados como aCol s
- 508 -
ADVPL Compl et o
E Apar nci a:
E Var i v ei s pr i v at e:
aRot i n a Vet or com as r ot i nas que ser o execut adas na MBrowse e que defi ni ra o t i po de operao que est a sendo execut ada ( incluso, al t erao, excl uso, vi suali zao, pesqui sa, ...) no for mat o: { cTi t ul o, cRot i na, nOpo, nAcesso} , aonde:
nOpo segue o padro do ERP Prot heus para: 6- Pesqui sar 7- Vi suali zar 8- I ncl ui r 9- Al t erar 10- Excl ui r aHeader Vet or com i nformaes das col unas no format o:
{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,; cVali dao, cReservado, cTi po, xReservado1, xReser vado2}
A t abel a t emporri a ut ili zada pel a MsGet DB dever ser cri ada com base no aHeader mai s um l t i mo campo t i po l gi co que det ermi na se a l i nha foi excl uda.
l Ref r esh Vari vel t i po l gi ca para uso r eser vado.
- 509 -
ADVPL Compl et o
E Var i v ei s p bl i cas:
N I ndi ca qual a li nha posi ci onada do aCol s.
E Funes de v al i dao:
cLi nh aOk Funo de val i dao na mudana das li nhas da gri d. No pode ser defi ni da como St at i c Funct i on. cTudoOk Funo de val idao da confi rmao da operao com o gri d. No pode ser defi ni da como St at i c Funct i on.
E Mt odos adi ci on ai s:
For ceRef r esh( ) At uali za a MsNewGet Dados com a t abel a e posi ci ona na pri mei ra linha. Hi de( ) Ocul t a a MsNewGet Dados. Show ( ) Most ra a MsNewGet Dados.
Ex empl o: Ut i l i zao dos obj et os MsNew Get Dados( ) e MsMGet ( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao dos objetos | | | MsNewGetDados() e MsMGet() combinados | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
Local nX := 0 Local nUsado := 0 Local aButtons := {} Local aCpoEnch := {} Local cAliasE := cAlias Local aAlterEnch := {}
- 510 -
ADVPL Compl et o
Exemplo (continuao):
Local aPos := {000,000,080,400} Local nModelo := 3 Local lF3 := .F. Local lMemoria := .T. Local lColumn := .F. Local caTela := "" Local lNoFolder := .F. Local lProperty := .F. Local aCpoGDa := {} Local cAliasGD := "SC6" Local nSuperior := 081 Local nEsquerda := 000 Local nInferior := 250 Local nDireita := 400 Local cLinOk := "AllwaysTrue" Local cTudoOk := "AllwaysTrue" Local cIniCpos := "C6_ITEM" Local nFreeze := 000 Local nMax := 999 Local cFieldOk := "AllwaysTrue" Local cSuperDel := "" Local cDelOk := "AllwaysFalse" Local aHeader := {} Local aCols := {} Local aAlterGDa := {}
While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.; cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO) AADD(aCpoGDa,SX3->X3_CAMPO) EndIf DbSkip() End
- 511 -
ADVPL Compl et o
Exemplo (continuao):
aAlterGDa := aClone(aCpoGDa)
nUsado:=0 dbSelectArea("SX3") dbSeek("SC6") aHeader:={} While !Eof().And.(x3_arquivo=="SC6") If X3USO(x3_usado).And.cNivel>=x3_nivel nUsado:=nUsado+1 AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,; x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } ) Endif dbSkip() End
If nOpc==3 // Incluir aCols:={Array(nUsado+1)} aCols[1,nUsado+1]:=.F. For nX:=1 to nUsado IF aHeader[nX,2] == "C6_ITEM" aCols[1,nX]:= "0001" ELSE aCols[1,nX]:=CriaVar(aHeader[nX,2]) ENDIF Next Else aCols:={} dbSelectArea("SC6") dbSetOrder(1) dbSeek(xFilial()+M->C5_NUM) While !eof().and.C6_NUM==M->C5_NUM AADD(aCols,Array(nUsado+1)) For nX:=1 to nUsado aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2])) Next aCols[Len(aCols),nUsado+1]:=.F. dbSkip() End Endif
37.2.3. 1. Def i ni n do cor es per sonal i zadas par a o obj et o MsNew Get Dados( )
Conforme vi st o no t pico sobr e defi ni o das propri edades de cor es para os component es vi suai s, cada obj et o possui caract erst i cas que devem ser respei t adas para corr et a ut i lizao dest e r ecurso.
E At r i but os adi ci on ai s:
l UseDef aul t Col or s At ri but o que dever ser defi ni do como .F. par a que as al t eraes nas cor es sej am permi t i das.
E Mt odos adi ci on ai s:
Set Bl k Back Col or Mt odo que defi ne a cor que ser ut ili zada para cada li nha do gri d. No necessri o ut ilizar o mt odo Refr esh( ) aps a defi ni o da cor por est e mt odo.
E Apar nci a:
- 513 -
ADVPL Compl et o
Ex empl o: Def i ni ndo cor es per son al i zadas par a o obj et o MsNew Get Dados( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao dos objetos | | | MsNewGetDados() e MsMGet() combinados e tratamento de cores | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
Local aButtons := {} Local aCpoEnch := {} Local cAliasE := cAlias Local aAlterEnch := {} Local aPos := {000,000,080,400} Local nModelo := 3 Local lF3 := .F. Local lMemoria := .T. Local lColumn := .F. Local caTela := "" Local lNoFolder := .F. Local lProperty := .F. Local aCpoGDa := {} Local cAliasGD := "SC6" Local nSuperior := 081 Local nEsquerda := 000 Local nInferior := 250 Local nDireita := 400 Local cLinOk := "AllwaysTrue" Local cTudoOk := "AllwaysTrue" Local cIniCpos := "C6_ITEM" Local nFreeze := 000 Local nMax := 999
- 514 -
ADVPL Compl et o
Exemplo (continuao):
Local cFieldOk := "AllwaysTrue" Local cSuperDel := "" Local cDelOk := "AllwaysFalse" Local aHeader := {} Local aCols := {} Local aAlterGDa := {}
While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3- >X3_NIVEL .And. X3Uso(SX3->X3_USADO) AADD(aCpoGDa,SX3->X3_CAMPO) EndIf DbSkip() End
aAlterGDa := aClone(aCpoGDa)
nUsado:=0 dbSelectArea("SX3") dbSeek("SC6") aHeader:={} While !Eof().And.(x3_arquivo=="SC6") If X3USO(x3_usado).And.cNivel>=x3_nivel nUsado:=nUsado+1 AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,; x3_tamanho, x3_decimal,"AllwaysTrue()",; x3_usado, x3_tipo, x3_arquivo, x3_context } ) Endif dbSkip() End
- 515 -
ADVPL Compl et o
Exemplo (continuao):
If nOpc==3 // Incluir aCols:={Array(nUsado+1)} aCols[1,nUsado+1]:=.F. For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM" aCols[1,nX]:= "0001" ELSE aCols[1,nX]:=CriaVar(aHeader[nX,2]) ENDIF
Next Else aCols:={} dbSelectArea("SC6") dbSetOrder(1) dbSeek(xFilial()+M->C5_NUM) While !eof().and.C6_NUM==M->C5_NUM AADD(aCols,Array(nUsado+1)) For nX:=1 to nUsado aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2])) Next aCols[Len(aCols),nUsado+1]:=.F. dbSkip() End Endif
A linguagem ADVPL permi t e a i mpl ement ao de bar ras de bot es ut ili zando funes pr- defi ni das desenvol vi das com o obj et i vo de facili t ar sua ut ilizao, ou at ravs da ut ili zao di ret a dos component es vi suai s di sponvei s. Dent re os r ecur sos da li nguagem que podem ser ut ili zados com est a fi nali dade sero abordados:
E Funo Ench oi ceBar : Sint axe t radi ci onal ment e ut ili zada em ADVPL, a qual no ret orna um obj et o par a a apli cao chamadora;
E Cl asse TBar : Cl asse do obj et o TBar( ) , a qual permi t e a i nst anci ao di ret a de um obj et o do t i po bar ra de bot es superi or, t ornando- o di sponvel na apli cao chamadora.
E Cl asse But t onBar : Cl asse do obj et o But t onBar( ) , a qual permi t e a i nst anci ao di ret a de um obj et o bar ra de bot es genri co, o qual pode ser ut ili zado em qual quer posi o da t el a, t ornando- o di sponvel na apli cao chamadora.
37.3.1. Enchoi ceBar ( )
Funo que cri a uma barra de bot es no format o padro ut ili zado pel as i nt erfaces de cadast r o da apli cao Prot heus.
Est a bar ra possui os bot es padres para confirmar ou cancel ar a i nt erface e ai nda permi t e a adi o de bot es adi ci onai s com a ut ili zao do parmet r o aBut t ons.
E Si nt ax e:
Enchoi ceBar ( oDl g, bOk , bCancel , l MsgDel , aBut t ons, nRecno, cAl i as)
E Par met r os:
oDl g Di al og onde i r cri ar a barra de bot es bOk Bl oco de cdi go a ser execut ado no bot o Ok bCancel Bl oco de cdi go a ser execut ado no bot o Cancel ar l MsgDel Exi be di al og para confi r mar a excl uso aBut t ons Array cont endo bot es adi ci onai s. aArray[ n] [ 1] - > I magem do bot o aArray[ n] [ 2] - > bl oco de cdi go cont endo a ao do bot o aArray[ n] [ 3] - > t t ul o do bot o nRecn o Regi st ro a ser posi ci onado aps a execuo do bot o Ok. cAl i as Ali as do regi st r o a ser posi ci onado aps a execuo do bot o Ok. Se o parmet r o nRecno for i nformado, o cAl i as passa ser obri gat ri o.
E Apar nci a:
- 518 -
ADVPL Compl et o
Ex empl o: Ut i l i zao da f uno Enchoi ceBar ( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------------- | Funo | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao da funo | | | EnchoiceBar() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
User Function DEnchBar() Local oDlg, oBtn Local aButtons := {}
DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF; oMainWnd
ACTIVATE MSDIALOG oDlg ; ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))
Return
- 519 -
ADVPL Compl et o
37.3.2. TBar ( )
Cl asse de obj et os vi suai s que permi t e a i mpl ement ao de um component e do t i po barr a de bot es para a part e superi or de uma j anel a previ ament e defi ni da.
E Si nt ax e: New ( oWnd, nBt nWi dt h, nBt nHei ght , l 3D, cMode, oCur sor , cResour ce, l NoAut oAdj u st )
E Ret or no: oTBar obj et o do t i po TBar ( )
E Par met r os:
oWnd Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. nBt nWi dt h Numri co, opci onal . Lar gura do bot o cont i do na barr a nBt nHei ght Numri co, opci onal . Al t ura do bot o cont i do na barra l 3D Lgi co, opci onal . Defi ne t i po da barra cMode No ut i lizado. oCur sor Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e a barra. cResour ce Caract er , opci onal . I magem do r ecurso a ser i nseri do como fundo da bar ra. l NoAut oAdj u st Lgi co.
E Apar nci a:
Ex empl o: Ut i l i zao da f uno Enchoi ceBar ( )
#include 'protheus.ch'
/*/ +----------------------------------------------------------------------------- | Funo | TSTBAR | Autor | MICROSIGA |Data | | +----------------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto TBar() | +----------------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------------- /*/
A si nt axe But t on Bar a forma cl ssi ca ut ili zada na li nguagem ADVPL para i mpl ement ar um obj et o da cl asse TBar( ) , o qual possui as caract erst i cas menci onadas no t pi co ant eri or .
E Si nt ax e:
DEFI NE BUTTONBAR oBar SI ZE nWi dt h, nHei ght 3D MODE OF oDl g CURSOR
E Ret or no: ( ) .
E Par met r os:
oBar Obj et o do t i po TBar( ) que ser cri ado com a ut i li zao da si nt axe But t onBar( ) . nWi dt h Numri co, opci onal . Lar gura do bot o cont i do na barr a. nHei ght Numri co, opci onal . Al t ura do bot o cont i do na barra. 3D Se defi ni do habilit a a visuali zao em 3D da barra de bot es. oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o bot o dever ser cri ado. MODE Defi ne a forma de ori ent ao do obj et o But t onBar ut ili zando os segui nt es t ermos pr- defi ni dos: TOP, BOTTOM, FLOAT
CURSOR Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e a barr a.
- 521 -
ADVPL Compl et o
A si nt axe But t onBar requer a adi o dos bot es como recur sos adi ci onai s da barr a previ ament e defi ni da ut ilizando a si nt axe abai xo:
E Bot es: BUTTON RESOURCE
E Si nt ax e adi ci onal :
DEFI NE BUTTON RESOURCE cBi t Map OF oBar ACTI ON cAcao TOOLTI P cTex t o
E Par met r os:
cBi t Map Nome da i magem di sponvel na apli cao. oBar Obj et o do t i po TBar( ) no qual o bot o ser adi ci onado. cAcao Funo ou l i st a de expr esses que det ermi na a ao que ser real i zada pel o bot o. cTex t o Text o no est il o t ool t i p t ext que ser exi bi do quando o cursor do mouse for posi ci onado sobre o bot o na barra de ferrament as.
E Apar nci a:
Ex empl o: Ut i l i zao da si nt ax e But t on Bar
#include 'protheus.ch'
/*/ +----------------------------------------------------------------------- | Funo | TstBBar | Autor | MICROSIGA |Data | | +----------------------------------------------------------------------- | Descrio | Programa que demonstra a utilizao do objeto TBar() | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
37.3.4. I magens pr - def i ni das par a as bar r as de bot es
Conforme menci onado nos t pi cos ant eri ores, os bot es vi suai s do t i po bar ra de bot es permi t em a defi ni o de i t ens com aes e i magens vi ncul adas.
Dent r e os obj et os e funes menci onados, foi cit ada a Enchoi ceBar( ) , a qual permi t e a adi o de bot es adi ci onai s at ravs do parmet r o aBu t t on, sendo que os i t ens dest e ar ray devem possui r o segui nt e format o:
E Si nt ax e: AADD( aBut t ons,{ cBi t Map, bAcao, cText o} )
E Est r ut u r a:
cBi t Map Nome da i magem pr- defi ni da exi st ent e na apl icao ERP que ser vi ncul ada ao bot o. bAcao Bl oco de cdi go que defi ne a ao que ser execut ada com a ut ili zao do bot o. cTex t o Text o no est il o t ool t i p t ext que ser exi bi do quando o cursor do mouse for posi ci onado sobr e o bot o na bar ra de ferrament as.
38. Out r as apl i caes da i nt er f ace v i sual do ADVPL
38.1. MaWndBr ow se( )
E Descr i o: Br owse que permi t e a vi sualizao de r egi st ros para arqui vos / t abel as que no possuem est rut ura defi ni da no Di ci onri o de Dados do si st ema.
E Si nt ax e: MaWndBr owse ( nLi n1, nCol 1, nLin2, nCol 2, cTi t l e, cAli as, aCampos, aRot i na, cFunLeg, cTopFun, cBot Fun, l Cent ered, aResource, nMod, aPesqui , cSeek, l Di c, l SavOrd)
E Par met r os:
nLi n 1 Li nha i ni ci al do browse nCol 1 Col una i ni ci al do browse nLi n 2 Li nha fi nal do browse nCol 2 Col una final do browse cTi t l e Tt ul o do browse ( obri gat ri o) cAl i as Ali as da t abel a cor rent e podendo ser um t empor ri o aCampos Se l Di c= .T. ut ili zar o SX3, do cont rri o o aCampos i nformado aRot i n a I dnt i co ao aRot i na para mBr owse cFunLeg Funo que dever r et ornar um val or l gi co e com i sso ser at ri budo semafr o na pri mei ra col una do br owse cTopFun Most rar os r egi st ros com a chave de cBot Fu n Most rar os r egi st ros com a chave at e l Cent er ed Val or verdadei ro cent ral i za aResou r ce aAdd( aResource,{ " I MAGEM"," Text o si gni fi cat i vo"} ) nModel o Posi o do Menu: 1- Hori zont al ( superi or) 2- Vert i cal ( esquerda) 3- Hori zont al ( inferi or) aPesqu i aAdd( aPesqui { "Tt ul o",nOrdem} ) , se no passado ser ut ili zado o AxPesqui cSeek Chave pri nci pal para a busca, exempl o: xFili al ( "???") l Di c Parmet r o em conj unt o com aCampos l Sav Or d Est abel ecer a ordem aps pesqui sas.
Ex empl o: MaWn dBr ow se par a ar qu i v o t empor r i o
#include "protheus.ch"
/*/ +----------------------------------------------------------------------- | Funo | WndBrwTRB | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Demonstra a utilizao da MaWndBrowse com Temporrio | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
User Function WndBrwTRB()
// Variveis para o Arquivo Temporario Local cChave := "" Local cArqTrb := "" Local aStruTRB := {}
// Variveis para o MaWndBrowse Local cTitulo := "Cadastro Temporario"// Ttulo obrigatrio Local cAlias := "TRB" // Alias da tabela corrente podendo ser TRB Local cFunLeg := "" // Funo que dever retornar um valor lgico e com isso ser atribudo semafro na primeira coluna do browse Local cTopFun := "" // Mostrar os registros com a chave de Local cBotFun := "" // Mostrar os registros com a chave ate Local lCentered := .T. // Valor verdadeiro centraliza Local aResource := {} // aAdd(aResource,{"IMAGEM","Texto significativo"}) Local nModelo := 1 // 1- Menu do aRotina Local aPesqui := {} // aAdd(aPesqui{"Ttulo",nOrdem}), se no passado ser utilizado o AxPesqui Local cSeek := "" // Chave principal para a busca, exemplo: xFilial("???") Local lDic := .F. // Parmetro em conjunto com aCampos Local lSavOrd := .T. // Estabelecer a ordem aps pesquisas.
- 526 -
ADVPL Compl et o
// Variaveis para a MsAdvSize Local lEnchBar := .F. // Se a janela de dilogo possuir enchoicebar (.T.) Local lPadrao := .F. // Se a janela deve respeitar as medidas padres do //Protheus (.T.) ou usar o mximo disponvel (.F.) Local nMinY := 400 // Altura mnima da janela
Local aSize := MsAdvSize(lEnchBar, lPadrao, nMinY)
Private cCadastro := " " Private aCampos := {} // Se lDic=.T. utilizar o SX3, do contrrio o aCampos //informado -> aAdd(aCampo,{X3_CAMPO,X3_PICTURE,X3_TITULO,X3_TAMANHO}) Private aRotina := {} // Idntico ao aRotina para mBrowse
// Estrutura do Arquivo: Nome do campo / tipo, tamanho, decimais (SX3 para //temporrio) AADD(aStruTRB,{"TRB_FILIAL" ,"C",02,0}) // Nome_Campo , Tipo_Campo, //Tamanho, Decimal AADD(aStruTRB,{"TRB_ID" ,"C",14,0}) AADD(aStruTRB,{"TRB_NOME" ,"C",20,0}) AADD(aStruTRB,{"TRB_IDADE" ,"N",03,0}) AADD(aStruTRB,{"TRB_STATUS" ,"C",01,0})
// aCampos padro para a MaWndBrowse //AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>})
// aCampos melhorado para a WndBrwTRB //AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>,<Tipo>,<cWhen>,<lObrig //atorio>}) // Nota: lObrigatorio deve ser sempre a ultima informacao do aCampos
Para apr ovei t ar i nt ei rament e o recur so da MaWndBrowse ut ili zada com arqui vos t emporri os, necessri o i mpl ement ar uma funo do t i po Enchoi ce para real izar as operaes de Vi suali zar, I ncl ui r, Al t erar e Excl uir os regi st r os dest e arqui vo / t abel a.
Com foco nest a necessi dade, foi desenvol vida para o curso de ADVPL a funo TEnchoi ce.
E Descr i o: Funo par a mani pul ao de r egi st ros de um arqui vo t emporri o si mul ar a Enchoi ce do ambi ent e Prot heus.
E Si nt ax e: TEnchoi ce( oDl g, aCampos, nLeft E, nTopE, nHei ght E, nWi dt hE, l EnchBar)
E Par met r os:
oDl g Obj et o Di al og no qual a TEnchoi ce ser vi ncul ada aCampos Est rut ura de campos para exi bi o da t el a da TEnchoi ce nLef t E Coordenada hori zont al em pi xel s. nTopE Coordenada vert i cal em pi xel s. nHei ght E Al t ura em pi xel s nWi dt hE Largura em pi xel s. l Ench Bar Se a enchoi ce ser mont ada em conj unt o com uma barra de bot es do t i po Enchoi cebar( )
E Pr - r equ i si t os da f un o chamador a:
Para cor r et a ut ili zao da funo TEnchoi ce so necessri os os segui nt es t rat ament os / defi ni es na funo chamadora:
E Tr at ament o 0 1: Mont agem do ar r ay aCampos
O ar ray aCampos ut ili zado pel a TEnchoi ce possui basi cament e o mesmo format o do array ut ili zado pel a funo Model o2( ) .
" < Var i av el > " Nome da vari vel Pri vat e que est vi ncul ada ao campo di git vel . { nLi nh a,nCol u n a} Posi o em pi xel s do campo na Enchoi ce. " < Ti t ul o> " Tt ul o do campo. " < Pi ct u r e> " Pi ct ure de format ao do campo. " < Val i dacao> " Vali dao do campo di git vel . " < F3> " Consul t a F3 vi ncul ada ao campo.
- 528 -
ADVPL Compl et o
" < l When> " Se o campo est edi t vel . < Tamanh o> Tamanho do campo par a vi sualizao.
E Tr at ament o 0 2: Def i ni o das di menses da TEnchoi ce
Os parmet ros de di menso da TEnchoi ce no preci sam se i nformados, poi s el a i r se aj ust ar ao t amanho do obj et o Di al og ao qual for vi ncul ado, caso o obj et i vo sej a que a TEnchoi ce ocupe t oda a rea di sponvel do obj et o.
i mport ant e especi fi car se o Di al og i r cont er uma Enchoi ceBar( ) para que a TEnchoi ce( ) sej a posi ci onada adequadament e no obj et o.
E Apar nci a:
E Det al h ament o da f u n o TEnchoi ce:
- 529 -
ADVPL Compl et o
/*/ +----------------------------------------------------------------------- | Funo | TEnchoice | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
Static Function TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE,; lEnchBar)
Local aSays := {} Local aGets := {} Local cCaption := "" Local cPict := "" Local cValid := "" Local cF3 := "" Local cWhen := "" Local cBlKSay := "" Local cBlkGet := "" Local cBlKVld := "" Local cBlKWhen := "" Local nLeft := 0 Local nTop := 0 Local nI := 0
Ex empl o: Funo TVi sual ( MaWn dBr ow se com TEnch oi ce)
/*/ +----------------------------------------------------------------------- | Funo | TVisual | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TVisual(cAlias,nReg,nOpc)
LOCAL aCposEnch := {} LOCAL nLinha := 15 LOCAL nColuna := 10 LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade LOCAL bOk := {||oDlg:End()} LOCAL bCancel := {||oDlg:End()} LOCAL nX
Ex empl o: Funo TI n cl ui ( MaWndBr ow se com TEnch oi ce)
/*/ +----------------------------------------------------------------------- | Funo | TInclui | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TInclui(cAlias,nReg,nOpc)
LOCAL aCposEnch := {} LOCAL nLinha := 15 LOCAL nColuna := 10 LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade LOCAL bOk LOCAL bCancel := {||oDlg:End()} LOCAL aArea := GetArea() LOCAL nX
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
Ex empl o: Funo TAl t er a ( MaWndBr ow se com TEnch oi ce)
/*/ +----------------------------------------------------------------------- | Funo | TAltera | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TAltera(cAlias,nReg,nOpc)
LOCAL aCposEnch := {} LOCAL nLinha := 15 LOCAL nColuna := 10 LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade LOCAL bOk LOCAL bCancel := {||oDlg:End()} LOCAL aArea := GetArea() LOCAL nX
Ex empl o: Funo TEx cl ui ( MaWndBr ow se com TEnch oi ce)
/*/ +----------------------------------------------------------------------- | Funo | TExclui | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TExclui(cAlias, nReg, nOpc)
LOCAL aCposEnch := {} LOCAL nLinha := 15 LOCAL nColuna := 10 LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade LOCAL bOk LOCAL bCancel := {||oDlg:End()} LOCAL nX
Ex empl o: Funo TVal i d ( MaWndBr ow se com TEnch oi ce)
/*/ +----------------------------------------------------------------------- | Funo | TValid | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TValid(cAlias,nReg,nOpc,aCampos) LOCAL lRet LOCAL nX LOCAL nPosObrig := Len(aCampos[1])
For nX := 1 to Len(aCampos) IF aCampos[nX,nPosObrig] == .T. IF !(lRet := !Empty(&("_"+aCampos[nX,1]))) Help("TEnchoice",1,"HELP","OBRIGATORIO","Existem campos obrigatorios nao preenchidos",1,0) RETURN lRet // EXIT ENDIF ENDIF Next nX
IF nOpc == 3 IF !(lRet := !((cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID)))) Help("TEnchoice",1,"HELP","INCLUSAO","Ja existe um registro com esta chave",1,0) ENDIF ELSE IF !(lRet := (cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID))) Help("TEnchoice",1,"HELP","ALTERACAO","Nao existe um registro com esta chave",1,0) ENDIF ENDIF
RETURN lRet
- 536 -
ADVPL Compl et o
Ex empl o: Funo TGr av ar ( MaWn dBr ow se com TEnchoi ce)
/*/ +----------------------------------------------------------------------- | Funo | TGravar | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TGravar(cAlias,nReg,nOpc,aCampos) LOCAL nX
RecLock(cAlias,nOpc==3) IF nOpc == 5 DbDelete() ELSE For nX := 1 to Len(aCampos) (cAlias)->&(aCampos[nX][1]) := &("_"+aCampos[nX][1]) Next nX ENDIF Msunlock()
RETURN
- 537 -
ADVPL Compl et o
38.2. DbTr ee( )
E Descr i o: Cl asse Advpl que permi t e a cri ao de um obj et o vi sual do t i po Tree.
E Pr opr i edades:
bCh ange Armazena o code- bl ock execut ado quando da mudana de foco ent r e el ement os do Tr ee at ual .
E Mt odos pr i n ci pai s:
New Cont rut or da Cl asse DbTr ee. Ret orna uma nova i nst nci a do Obj et o da Cl asse DbTr ee. AddTr ee At ravs do mt odo AddTr ee, possvel acr escent ar um ' n' na rvor e at ual . Uma vez acrescent ado o n, as pr xi mas i ncluses de i t ens na parvor e sero r eal izadas nest e n, at que o mesmo sej a fechado at ravs do mt odo EndTree. AddTr eeI t em At ravs del e, podemos acr escent ar i t ens na r vor e at ual ou lt i mo n acr escent ado em abert o. EndTr ee Deve ser ut ili zado aps t odos os el ement os e i t ens serem acr escent ados a um n da rvor e, abert o com o mt odo AddTree( ) .
E Apar nci a:
- 538 -
ADVPL Compl et o
Mt odo: New ( )
E Si nt ax e: DbTr ee( ) : New ( [ nTop ] , [ nLeft ] , [ nBot t om ] , [ nRi ght ] , [ oWnd] , [ bchange ] , [ bRCl i ck ] , [ l Cargo ] , [ l Di sabl e ] )
E Par met r os:
nTop Coordenada vert i cal superi or do Obj et o. nLef t Coordenada hori zont al esquerda do Obj et o. nBot t om Coordenada vert i cal i nferi or do Obj et o. nRi ght Coordenada hori zont al di rei t a do Obj et o. oWnd Janel a pai do Obj et o Tr ee bchange Code- Bl ock cont endo a ao a ser edxecut ada na mudana de foco enrt e os el ement os da rvore. bRCl i ck Code- Bl ock a ser execut ado quando pressi onado o bot o di rei t o do Mouse sobre um el ement o da r voew. l Car go Se . T., i ndi ca que os el ement os do Tr ee ut ili zaro a propri edade CARGO, capaz de armazenar uma st ri ng i dent i fi cadora, forneci da na mont agem para cada el ement o e i t em da rvor e. l Di sabl e Se . T., cri a o obj et o do Tr ee desabili t ado, no permi t i ndo foco e navegao no mesmo qneuando el e no sej a habilit ado.
E Ret or no:
Obj et o Ret orna uma nova i nst nci a do Obj et o da Cl asse DbTr ee.
Mt odo: AddTr ee( )
E Si nt ax e: oObj : AddTree ( < cLabel > , [ l Par02 ] , [ cResOpen ] , [ cResCl ose ] , [ cBMPOpen ] , [ cBMPCl ose ] , [ cCargo ] )
E Par met r os:
cLabel Tt ul o do "n" da r vore a ser acrescent ado. l Par 02 ( reservado) cResOpen Resource do RPO a ser ut ili zado quando o n est i ver abert o. cResCl ose Resource do RPO ( bi t map) a ser ut i lizado quando o n est i ver fechado. cBMPOpen Pat h + I magem bi t map a ser ut i lizada quando o n[ o est i ver abert o.
A especi fi cao de i magens a part i r dos paramet ros cBMPOpen e cBMPCl ose apenas ser consi derada caso os parmet ros cResOpen e cResCl ose no for em especi fi cados. cBMPCl ose Pat h + I magem bi t map a ser ut i lizada quando o n est i ver fechado.
A especi fi cao de i magens a part i r dos paramet ros cBMPOpen e cBMPCl ose apenas ser consi derada caso os
- 539 -
ADVPL Compl et o
parmet ros cResOpen e cResCl ose no for em especi fi cados. cCar go St ri ng com val or ni co, forneci do par a i dent i fi car o n at ual . Pode ser r ecuper ado post eri orment e dur ant e a navegao.
E Ret or no:
Nen hum -
Mt odo: AddTr eeI t em( )
E Si nt ax e: oObj : AddTr eeI t em ( < cLabel > , [ cResource] , [ cBi t Map] , [ cCargo] )
E Par met r os:
cLabel Tt ul o do i t em da rvor e. cResour ce Resource ( BMP) do r eposi t ri o, a ser most rado esquerda do t t ul o do i t em. cBi t Map Arqui vo de i magem ( bi t map) a ser most rado esquerda do t t ul o do i t em.
Est e parm, et r o apenas ser consi der ado caso o parmet ro cResour ce no for i nfor mado. cCar go at ravs del e, podemos especi fi car uma st ri ng de i dent i fi cao para est e it em na rvor e.
E Ret or no:
Nen hum -
Mt odo: En dTr ee( )
E Si nt ax e: oObj : EndTree ( )
E Par met r os:
Nen hum
E Ret or no:
Nen hum
- 540 -
ADVPL Compl et o
Ex empl o:
#include "Protheus.ch"
/*/ +----------------------------------------------------------------------- | Funo | TDBTree | Autor | MICROSIGA | Data | | +----------------------------------------------------------------------- | Descrio | Exemplo de utilizao da funo DbTree | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
User Function TDBTree() Local cBmp1 := "PMSEDT3" Local cBmp2 := "PMSDOC" Private cCadastro := "Meu Computador" Private oDlg Private oDBTree
DEFINE MSDIALOG oDlg TITLE cCadastro FROM 0,0 TO 240,500 PIXEL
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg ACTIVATE MSDIALOG oDlg CENTER
Return
- 541 -
ADVPL Compl et o
User Function Proc(cCargo) Local cRet := ""
If cCargo == "1.1" MsgInfo("Gabinete Torre com 4 baias - Preto, com unidade de leitura e+; gravao de CD/DVD",cCadastro) Elseif cCargo == "1.2" MsgInfo("Monitor LCD 17' - LG",cCadastro) Elseif cCargo == "1.3" MsgInfo("Teclado multimdia com funes de internet e e-mail",cCadastro) Elseif cCargo == "1.4" MsgInfo("Mouse Optico sem fio",cCadastro) Elseif cCargo == "1.5" MsgInfo("2 Caixas de Som - 50W RMS Cada",cCadastro) Elseif cCargo == "2.1" MsgInfo("Processador Pentium 4 - 3.8 Ghz",cCadastro) Elseif cCargo == "2.2" MsgInfo("1 Pente de Memria de 1Gb - DDR 500",cCadastro) Elseif cCargo == "2.3" MsgInfo("Placa de Vdeo GeoForce 5000 com 256Mb",cCadastro) Elseif cCargo == "2.4" MsgInfo("Fonte de Alimentao de 500W",cCadastro) Endif
Return
- 542 -
ADVPL Compl et o
38.3. MsSel ect ( )
E Descr i o: A cl asse MsSel ect cri a um obj et o browse ( ou gri d) , com a pri mei ra col una sendo do t i po marcao.
E Pr opr i edades:
oWnd Obj et o pai da MsSel ect ( MSDI ALOG, MSWI NDOW, MSPANEL) oBr owse Obj et o br owse ( ou gri d) da MsSel ect , herdado da cl asse TCBROWSE
E Mt odos pr i n ci pai s:
New Cont rut or da Cl asse MsSel ect . Ret orna uma nova i nst nci a do Obj et o da Cl asse MsSel ect .
E Apar nci a:
- 543 -
ADVPL Compl et o
Mt odo: New ( )
E Si nt ax e: MsSel ect ( ) : NEW ( < cAli as > , [ cCampo ] , [ cCpo ] , [ aCampos ] , [ l I nv ] , [ cMar ] , [ aCord ] , [ cTopFun ] , [ cBot Fun ] , [ oWnd ] , [ reserved ] , [ aCol ors ] ) E Par met r os:
cAl i as Tabel a que ser ut ili zada pel a MsSel ect cCampo Campo que ser ut ili zado na col una de mar cao cCpo Campo da t abel a i nformada pel o paramet r o cAlias ou funo que ser execut ada na apr esent ao da col una que i ndi ca se a l inha da MsSel ect est a habili t ada ou no aCampos Vet or com i nformaes dos campos para cri ao das col unas da MsSel ect . Se no for i nformado, a MsSel ect i r cri ar as col unas baseado no Di ci onri o de Campos ( SX3) da t abel a informada no par amet r o cAl i as. Format o: 1 - campo ou bl oc de cdi go com cont edo que ser apresent ado na col una pel a MsSel ect 2 - no ut ili zado 3 - cabeal ho 4 - mcara de apr esent ao ( pi ct ure) l I n v I ndi ca se MsSel ect i r ut ilizar marcao i nvert i da cMar Marca que ser ut i lizada pel a MsSel ect para cont rol e do campo i nformado pel o paramet ro cCampo. Para ut ilizar o paramet ro cMar, ut i lize a funo Get Mar k para r et ornar a prxi ma mar ca. aCor d Coordenadas para cri ao da MsSel ect . Format o: 1 - Li nha i ni ci al 2 - Col una i ni ci al 3 - Li nha final 4 - Col una fi nal cTopFun Funo que r et ornar o cont edo i ni ci al que a MsSel ect ut ili zar para apr esent ar a pri mei ra li nha da t abel a, como um range, j unt o com o paramet ro cBot Fun. O cont edo r et ornado ser ut ili zado para fazer o posi ci onament o da t abel a i nformada pel o paramet r o cAl i as, baseado na chave de ndi ce posi ci onada para a mesma. cBot Fu n Funo que r et ornar o cont edo fi nal que a MsSel ect ut ili zar para apr esent ar a l t i ma linha da t abela, como um range, j unt o com o paramet r o cTopFun. O cont edo r et ornado ser ut ili zado para o posi ci onament o fi nal da t abel a i nformada pel o paramet r o cAli as, baseado na chave de ndi ce posi ci onada para a mesma oWnd Obj et o pai da MsSel ect ( MSDI ALOG, MSWI NDOW, MSPANEL, et c.) r eser v ed Paramet r o r eservado aCol or s Vet or com regras para a apresent ao da col una de l egenda. Format o: 1 - Expr esso ADVPL com r et orno l gi co que i ndi ca se a cor ser ut ili zada pel a col una 2 - cor da col una:
Obj et o Ret orna uma nova i nst nci a do Obj et o da Cl asse MsSel ect .
Ex empl o:
DEFINE MSDIALOG oDlg1 TITLE "Selecao para Transferencia" From 9,0 To 32,80; OF oMainWnd @1.4,.8 Say "Valor Total:" @1.4, 7 Say oValor VAR nValor Picture "@E 999,999,999,999.99" @1.9,.8 Say "Quantidade:" @1.9, 9 Say oQtda VAR nQtdBem Picture "@E 99999" SIZE 50,10 @1.4,15 Say Iif(MVParBox01==1,; "Somente grupos de ["+MVParBox02+"] ate ["+MVParBox03+"]","") If cTipoDet == "D" @12.4,01 Say "Qtde. a Detalhar" @158,60 MSGET nQtde Picture "@E 999" SIZE 036, 10 OF oDlg PIXEL; VALID nQtde > 0 ElseIf cTipoDet == "P" @12.4,01 Say oLabel Var cLabel := "Tipo de Projeto" oRad := TRadMenu():New(169,005,{"Industrial","Florestal"},; bSetGet(nOpcRad),oDlg,,{|| AF250RAD(nOpcRad)},,,,,,100,12,,,,.T.) @15.5,01 Say oLabel2 Var cLabel2 := "Detalhamento:" oRad2 := TRadMenu():New(210,005,{"Manter","Alterar"},; bSetGet(nOpcRad2),oDlg,,{|| AF250RAD2(nOpcRad2)},,,,,,; 100,12,,,,.T.) @16.4,01 Say oLabel3 Var cLabel3 := "Percentual" oGet := TGet():New(210,043,bSetGet(nPerc),oDlg,030,010,; "@E 999.99",,,,,,,.T.) @18.2,01 Say oLabel4 Var cLabel4 := "Qtde. Det." oGet2 := TGet():New(235,040,bSetGet(nQtde),oDlg,030,010,; "@E 999",,,,,,,.T.) oGet:Hide() oGet2:Hide() oLabel3:Hide() oLabel4:Hide() EndIf oMark := MsSelect():New("SN3","N3_OK","!N3_BAIXA",,@lInverte,; @cMarca,{35,1,143,315}) oMark:bMark := {| | a250Display(cMarca,lInverte,oValor,oQtda)}
ACTIVATE MSDIALOG oDlg1 ON INIT EnchoiceBar(oDlg1,; {|| nOpct:=1,iif(DeParaEnt(),oDlg1:End(),.f.)},{|| nOpct:=2,oDlg1:End()})
- 545 -
ADVPL Compl et o
39. I nt r oduo r el at r i os gr f i cos
39.1. TRepor t ( )
39.1.1. I nt r oduo
Fi n al i dade
O Pr ot heus ofer ece o r ecur so per sonal i zao para al guns rel at ri os de cadast r os e movi ment aes do si st ema. El e t em como pr i nci pai s funci onali dades a defi ni o de cores, est i l os, t amanho, font es, quebras, mscara das cl ul as para cada seo, cri ao de frmul as e funes ( Soma, Mdi a, et c.) , possi bili dade de sal var as confi guraes por usuri o e cri ao de grfi cos. Com a funci onali dade de Rel at ri os Per sonal izvei s, o usuri o pode modi fi car os r el at ri os padres, cri ando seu pr pri o l ayout .
Val e l embrar que nem t odos os r el at ri os so per sonal i zvei s. Por exempl o, rel at ri os que t enham l ayout pr- defi ni dos por l ei e formul ri os ( bol et os, not as- fi scai s, et c) no podero ser al t erados. Os rel at ri os per sonal izados so gravados com ext enso .PRT, di ferenci ando- se dos r el at ri os padres que recebem a ext enso .# # R.
- 546 -
ADVPL Compl et o
Descr i o O TReport uma cl asse de i mpresso que subst i t ui as funes Set Pri nt , Set Defaul t , Rpt St at us e Cabec. A cl asse TReport permi t e que o usuri o personali ze as informaes que sero apresent adas no rel at ri o, al t erando font e ( t i po, t amanho, et c) , cor, t i po de li nhas, cabeal ho, rodap, et c. Est rut ura do component e TReport : O r el at ri o ( TReport ) cont m 1 ou mai s sees ( TRSect i on) ; Uma seo ( TRSect i on) pode cont er 1 ou mai s sees; A seo ( TRSect i on) cont m cl ul as pr- defi ni das e cl ul as sel eci onadas pel o usuri o; A seo ( TRSect i on) t ambm cont m as quebras ( TRBr eak) par a i mpresso de t ot ali zadores ( TRFunct i on) ; Os t ot ali zadores so i ncl udos pel a seo que aut omat i cament e i ncl ui no rel at ri o ( TReport ) . Pr - Requ i si t os Para ut i lizar o TReport , veri fique se o seu r eposi t ri o est com o Rel ease 4 do Pr ot heus- 8, ou verso superi or . A funo TRepI nUse( ) veri fi ca se a lib do TReport est li berada no reposi t ri o em uso. O ret orno uma vari vel lgi ca. #include "protheus.ch"
User Function MyReport() Local oReport
If TRepInUse() //verifica se a opo relatrios personalizveis est disponvel Pergunte("MTR025",.F.)
Veri fi que t ambm o parmet ro MV_TReport . Para ut ili zar os r el at ri os personali zvei s, o parmet ro MV_TREPORT ( t i po numri co) deve ser al t erado no ambi ent e Confi gurador , conforme uma das opes que seguem: 1 = ut ili za rel at ri o no format o t radi ci onal ( ant igo) ; 2 = ut ili za rel at ri o per sonali zvel ; 3 = pergunt a qual rel at ri o ser ut ili zado: t radici onal ( ant i go) ou personalizvel .
- 547 -
ADVPL Compl et o
39.1.2. I mpr esso do r el at r i o per sonal i zvel
Cada component e da t el a de i mpresso do TReport , deve ser confi gurado no programa, par a que o usuri o t enha acesso s personali zaes:
39.1.2. 1. Par met r os de i mpr esso
A cai xa de l i st agem apr esent ada deve ser ut i lizada conforme o mei o de sada do r el at ri o. Vej a a segui r.
I mpr esso
Ar qui v o
O r el at ri o ser gravado em di sco com o nome apr esent ado. Caso sej a escol hida a opo "Ser vi dor" el e ser gr avado no di ret ri o det ermi nado na senha do usuri o, at ravs do confi gurador , sendo est e sempre no ser vi dor ( padro \ SPOOL\ ) . Na escol ha da opo " Local " ser abert a uma j anela para que sej a escol hi do o l ocal onde o rel at ri o ser gravado na mquina do usuri o. O r el at ri o gerado a part i r dest a opo pode ser i mpresso ou envi ado por e- mai l aps ser apresent ado na t el a.
- 548 -
ADVPL Compl et o
Spool
Di reci ona o r el at ri o para i mpresso vi a confi gurao do Wi ndows das i mpressoras i nst al adas. E- mai l
Envi a o r el at ri o por e- mail ( I nt ernet ) . Para i st o, devem ser confi gurados os segui nt es parmet ros no Ambi ent e Confi gurador: E MV_RELACNT Defi ne a cont a de e- mai l para i dent ifi car a proveni nci a dos r el at ri os. Exempl o: rel prot heus@mi crosi ga.com.br E MV_RELPSW Defi ne a senha da cont a de e- mai l para envi o dos r el at ri os. E MV_RELSERV Defi ne o servi dor da cont a de e- mail para o envi o do rel at ri o. Exempl o: smt p.mi crosi ga.com.br
Quando sel eci onada est a opo, deve- se i nfor mar, no campo em dest aque na fi gura abai xo, o e- mail para o qual o rel at ri o deve ser r emet i do.
- 549 -
ADVPL Compl et o
O Pr ot heus Ser ver pode t ambm ser execut ado como um servi dor Web, r espondendo a requi si es HTTP. No moment o dest as r equi si es, pode execut ar r ot inas escri t as em ADVPL como pr ocessos i ndi vi duai s, envi ando o resul t ado das funes como ret orno das requi si es para o cli ent e HTTP ( como por exempl o, um Br owser de I nt ernet ) . Qual quer rot i na escri t a em ADVPL que no cont enha comandos de i nt erface pode ser execut ada at ravs de r equi si es HTTP. O Pr ot heus permi t e a compil ao de arqui vos HTML cont endo cdi go ADVPL embut i do. So os chamados arqui vos ADVPL ASP, para a cri ao de pgi nas di nmi cas.
E Pr ogr amao Tel Net
Tel Net part e da gama de pr ot ocol os TCP/ I P que permi t e a conexo a um comput ador remot o at ravs de uma apl i cao cl i ent e dest e pr ot ocol o. O PROTHEUS Ser ver pode emul ar um t ermi nal Tel Net , at ravs da execuo de r ot i nas escri t as em ADVPL. Ou sej a, pode- se escrever rot i nas ADVPL cuj a i nt erface fi nal ser um t ermi nal Tel Net ou um col et or de dados mvel .
Papel
Tamanho do papel Sel eci one o t amanho do papel em que o r el at ri o ser i mpresso. As especificaes de t amanho do papel so as do padro do mercado, conforme o format o escolhido, o Prot heus ir aj ust ar a impresso. For mat o da i mpr esso Sel eci one o for mat o de i mpresso, cl i cando nos bot es de opo Ret rat o ou Pai sagem , fazendo assi m que o r el at ri o sej a i mpresso na ori ent ao vert i cal ou hori zont al, respect i vament e.
Conf i gu r aes
Tt ul o
Caso quei ra al t erar a opo sugeri da pel o si st ema, di gi t e o cabeal ho do r el at ri o.
Or dem
Escol ha a ordem em que as i nformaes sero apresent adas no rel at ri o, cli cando em uma das chaves di sponvei s.
Lay out
Per mi t e sel eci onar o model o de rel at ri o para i mpresso, medi da que novos l ei aut es forem gravados para um rel at ri o, seus nomes sero li st ados nessa cai xa.
Pr ev i ew
Faz a exi bi o do rel at ri o ger ado na t el a, possi bilit ando, na seqnci a, o seu envi o para i mpressora ou a cancel ament o da i mpr esso.
- 550 -
ADVPL Compl et o
Ex ecut ar em segu ndo pl ano
Essa opo permi t e que o rel at ri o sej a gerado e envi ado para a fi l a de i mpresso, enquant o o usuri o pode execut ar out ras t ar efas no si st ema.
39.1.3. Per sonal i zao
possvel confi gurar- se as col unas do l ay- out do rel at ri o, bem como os acumul adores, cabeal hos e l i nhas. Est o di sponvei s para per sonal i zao t ambm a font e, t amanho, cor es, e et c.
39.1.3. 1. Edi t ando o l ay out do r el at r i o
O pri mei ro passo ent ender a nova est rut ura dos r el at ri os desenvol vi dos com a fer rament a TReport . O Rel at ri o possui Sees e Cl ul as. chamada de Seo, cada um dos grupos de i nformaes, e de Cl ula, cada um dos campos que sero i mpressos.
- 551 -
ADVPL Compl et o
Nov a est r ut ur a do r el at r i o TRepor t :
O r el at ri o mai s si mpl es que se consegue emi t i r em TReport , uma l i st agem.
39.1.4. Def i ni ndo a Funo Repor t Def ( )
A funo Report Def( ) responsvel pel a const ruo do l ay- out do rel at ri o ( oReport ) . el a quem defi ne as col unas, os campos e as i nformaes que sero i mpressas. Os comandos que far essa const ruo so:
1. DEFI NE REPORT 2. DEFI NE SECTI ON 3. DEFI NE CELL
- 552 -
ADVPL Compl et o
DEFI NE REPORT
A funo DEFI NE REPORT r esponsvel pel a cri ao do obj et o Report , ou sej a, o r el at ri o. I nt ernament e, o DEFI NE REPORT i r execut ar o mt odo TReport ( ) : New( ) . Est rut ura do component e TReport :
O r el at ri o ( TReport ) cont m 1 ou mai s sees ( TRSect i on) ; Uma seo ( TRSect i on) pode cont er 1 ou mai s sees; A seo ( TRSect i on) cont m cl ul as pr- defi ni das e cl ul as sel eci onadas pel o usuri o; A seo ( TRSect i on) t ambm cont m as quebras ( TRBr eak) par a i mpresso de t ot ali zadores ( TRFunct i on) ; Os t ot ali zadores so i ncl udos pel a seo que aut omat i cament e i ncl ui no rel at ri o ( TReport ) .
DEFI NE SECTI ON
Ai nda no Report Def( ) , so defi ni das as sees ( oSect i on) do r el at ri o. As sees do r el at ri o r epr esent am os di fer ent es grupos de i nformaes exi bi dos. H a seo pri nci pal e as especfi cas. I nt ernament e, o DEFI NE SECTI ON i r execut ar o mt odo TRSect i on( ) : New( ) . A cl asse TRSect i on pode ser ent endi da como um l ayout do rel at ri o, por cont er cl ul as, quebras e t ot al izadores que daro um format o para sua i mpresso. Com a cl asse TRSect i on possvel defi ni r uma query, fil t ro ou ndi ce com fil t ro ( I ndRegua) que ser ut ili zada por el a para pr ocessament o do r el at ri o, at ravs do mt odo Pri nt e ut ilizando as cl ul as de posi ci onament o ( TRPosi t i on) .
DEFI NE CELL
Para cada seo, devem ser defi ni das as clul as. Clul a cada i nformao que dever ser i mpressa. Pode ser um campo do cadast r o, ou um resul t ado de uma operao. uma Cl ul a de i mpresso de uma seo ( TRSect i on) de um r el at ri o que ut ili za a classe TReport I nt ernament e, o DEFI NE CELL i r execut ar o mt odo TRCel l ( ) : New ( ) .
- 553 -
ADVPL Compl et o
MDULO 08: Apl i caes ADVPL par a o ERP
40. Pr ot heus e o TOPCONNECT / TOTVS DbAccess
O TOTVSDBAccess uma ferrament a de conect i vi dade a bases de dados, permi t i ndo que apli cat i vos acessem uma ampl a vari edade de ser vi dores de banco de dados sem a necessi dade de gerao de cdi gos especfi cos para cada uma del as.
Os bancos de dados hoj e suport ados pel o TOTVSDBAccess so:
E Mi crosoft SQL7 ou superi or E Oracl e 8 ou superi or E I BM Uni versal Dat abase ( DB2) E I nformi x E Sybase Adapt i ve Server E Post gres 7.1.1 ou superi or E MySQL
O TOTVSDBAccess per mi t e gerenci ar as i nfor maes pert i nent es ut ilizao do banco de dados, r egi st rando e apresent ado dados, como:
E Dados est at st i cos de forma gr fi ca com r el ao : E Quant i dade de usuri os conect ados E Quant i dade de t abel as em ut ilizao E I Os por segundo E Mxi mo de I Os por segundo E Rel ao dos usuri os conect ados E Checagem das querys geradas pel os usuri os conect ados E Quebr a de conexo do usuri o E Mensagens de ut ili zao do TOTVSDBAccess E Confi guraes Gerai s quant o a: Banco de dados em ut i lizao Rel ao de usuri os e senhas por banco de dados Logi ns de usuri o Confi gurao de " Tabl e Spaces" para det ermi nados bancos de dados Defi ni o dos parmet r os de cri ao de t abel as para det ermi nados bancos de dados Vali dao de conexo, checando os parmet r os de conexo com o banco de dados Moni t orament o de ndi ces gerados
- 554 -
ADVPL Compl et o
40.1. Car act er st i cas t cni cas com o uso do TOTVS DbAccess
Compor t ament o de Quer i es Col un as Cal cul adas
Aps envi ar ao Banco de Dados uma sol i cit ao de abert ura de Quer y, em caso de sucesso na operao, o TOPConnect obt m do Banco de Dados a quant i dade de col unas que sero ret ornadas, e qual o t amanho e t i po e especi fi caes de cada uma das col unas, para r et ornar ao Pr ot heus uma est rut ura defi ni da de i nformaes, e o cursor aber t o li do conforme so sol i ci t ados os pr xi mos r egi st ros ( DBSki p( ) no Advpl ) , e a cada requi si o, uma li nha do cursor r et ornada, at no haver mai s li nhas no cursor , at i ngi ndo o fi nal do arqui vo no Advpl ( EOF( ) ) .
Quando especi fi camos uma col una de ret orno na Query, que cor responde a informaes li das di ret ament e de uma ou mai s col una( s) da t abel a, cada col una ret ornada pel a Query cont m uma defi ni o de t i po e t amanho corr espondent e ao campo de ori gem do dado de r et orno. Dest e modo, se consi derarmos, por exempl o, a Query : SELECT A1_FI LI AL FROM SA1990 , onde o campo A1_FI LI AL na t abel a SA1990 um campo do t i po varchar , com 2 byt es de t amanho, quando o cur sor for abert o no Banco de Dados, o TOPConnect i r obt er do banco que o r esul t - set gerado possui apenas uma col una, e est a col una do t i po varchar , com no mxi mo 2 byt es de t amanho.
Os Bancos de Dados no apenas permi t em r ecuperar ret ornos di ret ament e l i dos de uma ou mai s t abel as, mas t ambm possvel abri r um cursor onde uma ou mai s col unas cont enham um resul t ado cal cul ado, ut ilizando- se de expresses e/ ou funes nat i vas do Banco de Dados. Para est es t i pos de ret orno, cada banco de dados pode apresent ar comport ament os di ferenci ados ao descr ever o t amanho de ret or no da( s) col una( s) .
Est e comport ament o pode vari ar de acordo com o Banco de Dados, a expr esso e/ ou funes ut ili zadas para ger ar a col una de r et orno, e i ncl usi ve podem t er di fer enas ent r e verses e Buil ds do mesmo Banco de Dados e/ ou paramet ri zaes especfi cas do Banco de Dados e/ ou da apli cao Cl i ent / ODBC / API ut ili zada para acesso ao Banco.
Para il ust rar mel hor est as di ferenas, vej amos abai xo os resul t ados obt i dos com queri es, em bancos di st i nt os, onde foi cri ada uma t abel a com a mesma est rut ura, e 10 li nhas de dados, e nel a foram execut adas al gumas querys, onde t emos como r et orno uma col una cal cul ada. A t abel a possui os campos CPOC, t i po Caract er e, t amanho 10 byt es, numerados de 0000000001 a 0000000010 e um campo numri co CPON, ali ment ado com val or es posi t i vos. Para cada Query, most ramos o val or r et ornado ao Advpl , cont endo o t i po de dado ret ornado e o t amanho ( l en) da col una, no format o . ( Ti po ( t amanho ) ) .
Quer y : SELECT MI N( CPOC) CPOTESTE FROM TESTRET
E Ret or no: Todos os bancos r et ornaram uma col una com t amanho de 10 byt es.
E Bancos:
Dat abase Ti po Tamanho Cont edo MSSQL 20 00 Caract er 10 0000000001 I NFORMI X Caract er 10 0000000001 ORACLE Caract er 10 0000000001 MYSQL Caract er 10 0000000001 DB2 Caract er 10 0000000001
- 555 -
ADVPL Compl et o
Quer y : SELECT MI N( CPOC) CPOTESTE FROM TESTRET WHERE CPON < 0
E Ret or no: Todos os bancos r et ornaram uma col una vazi a.
E Bancos:
Dat abase Ti po Tamanho Cont edo MSSQL 20 00 Caract er 10 Vazi o POSTGRES Car act er 0 Vazi o I NFORMI X Caract er 10 Vazi o ORACLE Caract er 10 Vazi o MYSQL Caract er 10 Vazi o DB2 Caract er 10 Vazi o
Quer y : SELECT LEFT( CPOC,5) CPOTESTE FROM TESTRET
E Ret or no: Todos os bancos que suport am a funo LEFT( ) ret ornaram uma col una de i nformaes, onde os 5 pri mei ros byt es er am ' 00000' .
E Obser v aes: Os bancos r et ornaram que a col una t em 5 byt es de t amanho. Por m, o BAnco DB2 i nforma que a col una t m t amanho de 4000 Byt es. Est e mesmo r et orno foi obt i do no DB2 quando ut ilizadas funes RI GHT( ) , REPLACE( ) e REPEAT( ) , no banco DB2, e para o BAnco Post gres, foi r et ornado o t amanho de 2000 byt es para est as funes.
E Bancos:
Dat abase Ti po Tamanho Cont edo MSSQL 20 00 Caract er 5 00000 MYSQL Caract er 5 00000 DB2 Car act er 4000 00000
Quer y : SELECT SUBSTRI NG( CPOC,2,4) CPOTESTE FROM TESTRET
E Ret or no: Todos os bancos r et ornaram uma col una de t amanho 4 byt es, excet o o POSTGRES, que r et ornou t amanho de 2000 byt es.
E Bancos:
Dat abase Ti po Tamanho Cont edo MSSQL 20 00 Caract er 4 0000 POSTGRES Caract er 2000 0000 I NFORMI X Caract er 4 0000 ORACLE Caract er 4 0000 MYSQL Caract er 4 0000 DB2 Caract er 4 0000
- 556 -
ADVPL Compl et o
Devi do a est as di ferenas de comport ament o, devemos t omar al guns cui dados ao desenvol ver apli caes que ut ili zam col unas cal cul adas em queri es. Nest es casos, deve ser ut ili zada uma funo do banco de dados, para assegurar que o banco de dados r et or ne o t amanho de col una adequado ao TOPConnect / Tot vsDBAccess.
Por exempl o, vej amos a query abai xo :
SELECT REPLACE(CPOC,'0','_') AS CPOTESTE FROM TESTRET
Se j de conheci ment o do pr ogramador que o campo da base de dados CPOC dest a t abel a t em 10 byt es de t amanho, devemos fazer um cast dest e r et orno, par a char ou var char, com t amanho de 10 byt es. Dessa forma, o banco ret orna o t amanho esperado da col una para o TOPConnect quando da abert ura da quer y. I st o evi t a que espaos desnecessri os t rafeguem pel a rede para at ender r equi si o, e que est e val or excedent e sej a usado para al i ment ar uma vari vel do Advpl . Vej amos como usar est e r ecurso na query aci ma descri t a, ut ilizando uma si nt axe acei t a pel a mai ori a dos Bancos de Dados homol ogados :
SELECT CAST( REPLACE(CPOC,'0','_') AS VARCHAR(10)) CPOTESTE FROM TESTRET
Val e a pena sali ent ar que, cada banco de dados possui , com pequenas vari aes, uma si nt axe para permi t i r o CAST de um ret orno. Para maior es det al hes, a document ao do banco deve ser consul t ada.
Compor t ament o di f er enci ado com Ban dos de Dados Post Gr es
O Banco de Dados Post gres possuem um comport ament o di ferenciado ent r e os Buil ds do Ser ver do Banco, e possui uma paramet ri zao na confi gurao do ODBC que pode i nt erferi r na manei ra como os at ri but os das col unas de r et orno de uma query so r et ornados.
Em verses i nferi or es o Post gr es 8.x, as di ferenas de comport ament o em rel ao os demai s Bancos de Dados possuem um di fer enci al mui t o si gni fi cat i vo, em prat i cament e t odas as funes de r et orno cal cul ado. Para est es casos, em se t rat ando de Post gres verses i nferi ores a 8.x, a pr eci so de r et orno da col una corr esponde ao t amanho mxi mo de r et orno do t i po VarChar. ( Est e t amanho mxi mo pode ser confi gurado na conexo ODBC do Post gr eSql , e o val or defaul t 65536 byt es. )
Na funo Subst ri ng( ) , mesmo que est ej a especi fi cado no 3. parmet ro da funo, a quant i dade fi nal li mi t ada de Byt es, o Banco de Dados descr eve est a col una de r et orno como sendo um VarChar( ) com a pr eci so do mai or val or VARCHAR( ) a ser r et ornado pel o cl i ent . Na funo Max( ) , quando especi fi cado um campo da base do t i po Char ou Varchar, t emos um comport ament o semel hant e.
Quando foram homol ogados os Bancos Post gr es para uso com o ERP Mi crosi ga e TOPConnect 4, prat i cament e no er am ut ilizadas queri es com col unas cal cul adas nas apli caes Advpl , e est e comport ament o diferenci ado no foi percebi do. Confor me as r ot i nas foram evol uindo, buscando mai s per formance at ravs do uso de Queri es, t ornou- se per cept vel est as di fer enas operaci onai s.
- 557 -
ADVPL Compl et o
Al gumas dest as di ferenas operaci onai s foram assi mil adas pel as funes do ERP, por exempl o a ChangeQuery, que em ver so at uali zada ( * * Prot heus 8 e P10, font e apli b070.prw com dat a i gual ou superi or a 08/ 03/ 2008) , apli cam o CAST( ) aut omat i cament e para SELECT MAX( CAMPO) , quando o banco Post gr es, e o campo sel eci onado for um campo da base de dados, pr esent e no Di cionri o de Campos ( SX3 ) .
Para t odos os efei t os, para ut ili zao com as verses homol ogadas de Post gr es i nferi ores a 8.x, necessri o al t erar a confi gurao de ODBC do Post gr es, para l imi t ar o r et orno do t i po VarChar par a 2000 Byt es, poi s o r et orno do val or defaul t ( 65536 byt es ) no suport ado pel o TOPConnect / TOTVSDBAccess. Al t eramos est a confi gurao no arqui vo .odbc.i ni no li nux, e/ ou no arqui vo de confi gurao do ODBC do Post gres ut ilizado, inseri ndo na seo da conexo / i dent i fi cao do banco a chave abai xo :
MaxLongVarcharSize=2000
At ual ment e est em processo de homol ogao as ver ses mai s recent es ( 8.x) do banco Posgres. Quando homol ogado, a i nformao est ar di sponi vel na DEM, em Pri nci pal - > Gui a de Refer nci a - > Gui a de Pl at aformas Homol ogadas - > Bancos de Dados Rel aci onal X S.O.
Concei t o de n di ces Per manent es e Di f er en as das RDDs
Na RDD TOPCONN, no t emos o concei t o de cri ao de ndi ce t emporri o, apenas ndi ce permanent e. Um ndi ce permanent e cri ado fi si cament e no Banco de Dados r el aci onal ut ili zado, at ravs do TOPConnect / DbAccess, onde devemos especi ficar um ou mai s campos para compor a chave / expr esso de ndi ce.
Quando ut ilizamos CodeBase/ DBF, podemos especi fi car como campos de chave de ndi ce o ret orno de funes, como por exempl o STR( ) , DTOS( ) , SUBSTR( ) , ent re out ras suport adas de modo nat i vo pel a apli cao provedor a de acesso, no caso ADS Local e/ ou ADS Ser ver.
Quando usamos um Banco Rel aci onal SGDB at ravs do TOPConnect / DbAccess, devemos especi fi car uma expr esso de chave que sempre ret orne um val or Caract er e, e as ni cas funes permi t i das para adequaes de t i po de dado no Advpl para est as expr esses de ndi ce so : DTOS( ) e STR( ) .
Funci on ament o I nt er no
A expr esso ut ili zada para a cri ao de um ndi ce permanent e em Advpl , por exempl o : CPOC + DTOS( CPOD) + STR( CPON,10 ) , quando ut ili zamos o RDD TOPCONN, ser aj ust ada para o Banco de Dados r el aci onal ut ilizado para uma expr esso cont endo apenas a li st a de campos desej ada, na sequnci a em que foi especi fi cada, e as funes DTOS( ) e STR( ) nao so passadas ao banco de dados, poi s no exi st e a necessi dade de converso de dados para o Banco.
Um campo do t i po ' D' Dat a t rat ado pel o TOPConnect e gravado na t abel a em quest o como um campo ' C' Caract ere, de 10 byt es, no for mat o AAAAMMDD, e os nmer os so gravados em um campo DOUBLE* .
- 558 -
ADVPL Compl et o
Quebr a de Compat i bi l i dade com CodeBase/ DBF
Os Bancos r el aci onai s, em sua grande mai ori a, seno t odos, suport am apenas a cri ao de ndi ces onde sej am especi fi cados campos fsi cos da base de dados. No so suport adas funes de converso ou t ransformao de dados na cri ao de ndices, como por exempl o subst ri ng( ) , l eft ( ) , ent re out ras. Embora al guns bancos permi t am a cri ao de col unas cal cul adas, as mesmas so ' vi rt uai s' , i st o , no exi st em fi si cament e na t abel a, e t ambm no permi t i do o uso de col unas vi rt uai s para a cri ao de ndi ces.
Ent endemos que o RDD CodeBase / DBF, onde ori gi nal ment e foi desenvol vi do o ERP, nos dava cert a fl exi bili dade ao permi t i r operaes como est as, por m a um cust o de processament o mai s al t o, poi s para cada inser o ou al t erao, o RDD t em que execut ar funes de conversao e concat enao de st ri ngs para at uali zao dos ndi ces que usam est e r ecur so.
Mant er o suport e a t odos os i ndi ces permanent es, cri ados a part i r de resul t ados de expr esses, nas verses ant eri ores do ERP, t eramos um cust o mui t o al t o de compl exi dade, performance e dupl i ci dade de i nformaes nas t abel as. Seri a necessri o cri ar col unas fsi cas nas t abel as, t ranspar ent es ao usuari o, para mant er copi as em dupl i ci dade de part es de col unas agrupadas, com gat il hos do banco de dados di sparados i nt ernament e em operaes de i nsert e updat e, um mecani smo r el at i vament e compl exo de se mant er, i nst vel para dar manut eno, e cust oso em per formance para o Banco de Dados.
Part i ndo da premi ssa que, se uma det ermi nada i nformao deve ser i ndexada para busca, el a deve ser uma i nformao que ocupa excl usi vament e um campo fsi co da base de dados, so evi t adas as operaes const ant es de concat enao e desmembrament o de uma i nformao agrupada, col ocando cada part e da i nfor mao em seu devi do espao ( campo ) defi ni do, mesmo com o i mpact o gerado para al t erar as apl i caes que usavam est es t i pos de ndi ces, os ganhos obt i dos em organi zao e per formance foram mui t o si gni fi cat i vos.
- 559 -
ADVPL Compl et o
Li st a dos cdi gos de er r o do TOPCon nect / DbAccess
Quant o ut ili zado o TOPConnect / DbAccess para conexo e operaes com Bancos de Dados, as ocorr nci as de err o so r eport adas ao Prot heus i nformando em conj unt o com o er r o um nmero menor que zer o, cor respondendo a um t i po de err o.
Para a mai ori a das ocor rnci as, r el aci onadas ao Banco de Dados, deve- se ol har o l og de er r o gravado pel o TOPConnect / DbAccess ( arqui vo t opconn.l og ) para obt er mai ores det al hes sobr e a ocor rnci a.
TC_NO_ERROR 0 COMM_I NI TPGM_ERROR - 81 NO_ROUTER_I NSTALLED - 1 COMM_PARAM_ERROR - 86 NO_CONNECTI ON - 2 COMM_PROGRAM_ERROR - 88 NO_USER_SECURI TY - 4 COMM_I NSMEM_ERROR - 90 PASSTHRU_FAI LED - 5 I NVALI D_ BUI LD - 99 NO_MORE_CONNECTI ONS - 6 I NVALI D_TOPAPI - 100 I NVALI D_TOP_ KEY - 8 I NVALI D_ENVI RONMENT - 9 I NVALI D_ FI LE - 10 UNKNOWN_FI LE - 11 EXCLUSI VE_REQUI RED - 11 I NVALI D_OPERATI ON - 13 I NVALI D_ KEY_ NUM - 14 FI LE_I N_ USE - 15 TOO_MANY_FI LES - 16 I NVALI D_ NUMRECS - 17 CALL_ FAI LED - 18 COMMAND_FAI LED - 19 OVERRI DE_FAI LED - 20 QUERY_FAI LED - 21 CREATI ON_FAI LED - 22 OPEN_FAI LED - 23 NOT_OPENED - 24 NO_RECORD_FOUND - 25 END_OF_RECORDS - 26 NO_WRI TE_POSI BLE - 27 NO_RECORD_EQUAL - 28 UPDATE_FAI LED - 29 DELETE_FAI LED - 30 RECORD_LOCKED - 31 FI LE_LOCKED - 32 NO_AUTORI ZATI ON - 33 TOO_MANY_USERS - 34 NO_DB_CONNECTI ON - 35 NO_CONN_ ALLOWED - 36 I NTEGRI TY_FAI LURE - 37 BUFFER_OVERFLOW - 40 I NVALI D_ PARAMETERS - 41 NO_AUDI T_CONNECTI ON - 50 COMM_DOSMEM_ERROR - 58 COMM_PARTNER_ERROR - 67 COMM_SNDSTAT_ERROR - 76 COMM_RCVSTAT_ERROR - 76
- 560 -
ADVPL Compl et o
40.2. Funes ADVPL par a TOPCONNECT / TOTVS DbAccess
Nest e t pi co sero descri t as as funes da l i nguagem ADVPL que per mi t em a int erao com a apli cao TopConnect / DbAccess.
Li st a das f unes de i nt er ao com a apl i cao TopConnect / DbAccess:
TCCANOPEN TCCONTYPE TCDELFI LE TCGENQRY TCGETDB TCLI NK TCQUERY TCQUI T TCSETCONN TCSETFI ELD TCSPEXEC TCSPEXI ST TCSQLERROR TCSQLEXEC TCSRVTYPE TCUNLI NK TCCHKOBJ TCEXEERROR TCPGMEXE TCSYSEXE
Li st a das f unes acessr i as ut i l i zadas nos f ont es como f aci l i t ador as:
Veri fi ca a exi st nci a de t abel as e ndi ces no ser vi dor.
E Si nt ax e: TCCanOpen( cTabl e , cI ndi ce)
E Par met r os:
cTabl e Nome compl et o da t abel a no banco de dados. cI ndi ce Opci onal , indi ca o nome compl et o do ndi ce referent e a t abel a especi fi cada.
E Ret or no:
Lgi co I ndi ca a exi st nci a da t abel a e/ ou do ndi ce especi fi cado.
E Ex empl o:
//Verifica a existncia da tabela customer IF !TCCanOpen("CUSTOMER") dbCreate("CUSTOMER", aStru, "TOPCONN") ENDIF USE CUSTOMER SHARED NEW VIA "TOPCONN"
//Verifica a existncia do ndice IF !TCCanOpen("CUSTOMER","CUSTCOD") INDEX ON CODIGO TO CUSTCOD ELSE SET INDEX TO CUSTCOD ENDIF
TCCONTYPE( )
Especi fi ca o pr ot ocol o de comuni cao a ser ut i li zado pel o TOPConnect .
E Si nt ax e: TCConTy pe( cTy pe)
E Par met r os:
cTy pe Ti po de pr ot ocol o de comuni cao a ser ut ilizado pel o TopConnect , aonde:
TCPI P: Ut i li za o prot ocol o TCP/ I P. NPI PE: Ut ili za o prot ocol o Named Pi pes. APPC: Ut ili za o prot ocol o APPC. BRI DGE: Ut ili za o ut ili t ri o TOPBri gde para comuni cao de est aes DOS NPI PE com servi dor AS/ 400 ut ilizando TCP/ I P.
//Conecta-se ao ambiente SIGAADV no Microsoft SQL-Server TCLink("MSSQL/SIGAADV")
TCDELFI LE( )
Excl ui uma t abel a no servi dor.
E Si nt ax e: TCDel Fi l e( cTabl e)
E Par met r os:
cTabl e Nome compl et o da t abel a a ser excl uda.
E Ret or no:
Nen hum .
E Ex empl o:
TCDel Fil e( "CUSTOMER")
- 563 -
ADVPL Compl et o
TCGENQRY( )
Per mi t e a execuo de uma query de sel eo no banco de dados e r et orna um recordset com o resul t ado.
E Si nt ax e: TCGENQRY( x Par am1,x Par am2,cQuer y )
E Par met r os:
x Par am1 Parmet r o r eservado. x Par am2 Parmet r o r eservado. cQuer y Query de sel eo com si nt axe no padro SQL ANSI a ser execut ada no banco de dados.
E Ret or no:
Recor dSet RecordSet cont endo o r esul t ado da execuo da quer y de sel eo.
Para que os dados cont i dos no RecordSet r et or nado pel a funo TCGenQry( ) sej am ut ili zados pel a apli cao ADVPL necessri o di sponi biliz- l os em uma WorkAr ea.
Dest a forma a funo TCGenQry( ) dever ser ut ili zada em conj unt o com a funo DbUseAr ea( ) , para que a mesma di sponi bilize o RecordSet como uma rea de t rabal ho do ADVPL.
E Ex empl o:
cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8") cQuery += " WHERE " cQuery += "CV8_FILIAL = '"+MV_PAR01+"' AND " cQuery += "D_E_L_E_T_ = '' " cQuery += "ORDER BY CV8_PROC" cQuery := ChangeQuery(cQuery) dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)
TCGETDB( )
Ret orna o t i po de Banco de Dados cor rent e.
E Si nt ax e: TCGETDB( )
E Par met r os:
Nen hum .
- 564 -
ADVPL Compl et o
E Ret or no:
Car act er Descri o r efer ent e ao t i po do banco de dados cor rent e, aonde:
ANYWHERE - Sybase SQL Anywher e ANYSYBASE - Sybase SQL Anywher e ( Emul ando Sybase SQL- Ser ver) DB2 - I BM Uni versal Dat abase I NFORMI X I nformi x MSSQL - Mi crosoft SQL- Ser ver 6.5 MSSQL7 - Mi crosoft SQL- Server 7.0 ou superi or ORACLE - Oracl e POSTGRES - Post Gr es SYBASE - Sybase SQL- Ser ver
Not a: O r et orno da funo pode vari ar de acordo com a homol ogao de novos dat abases para ut ilizao com a ferr rament a TopConnect / DbAccess.
E Ex empl o:
cDataBase := TCGETDB() // MSSQL7
TCLI NK( )
Abre uma conexo com o Servi dor TOPConnect .
E Si nt ax e: TCLi nk ( cCon ect St r i ng,cSer v er )
E Par met r os:
cConect St r i ng St ri ng compost a confor me a r egra: Para TOPConnect NT : Nome do Banco de Dados / Nome do Ambi ent e
Para TOPConnect / 400: Nome do Ambi ent e
cSer v er Nome do ser vi dor conforme a r egra: Para conexes NamedPi pe, APPC e Bri gde : O nome do servi dor TOPConnect .
Para conexes TCP/ I P : O ender eo I P do ser vi dor TOPConnect
E Obser v aes:
Para o TOPConnect NT acessando Oracl e, um ambi ent e o nome do Al i as cri ado com o ut i lit ri o SQL- Net .
Para o TOPConnect NT acessando os demai s SGDB' s um ambi ent e um Syst em DSN cri ado at ravs do ODBC Dat a Source Admi ni st rat or.
Para o TOPConnect AS/ 400 um ambi ent e uma Li brary cri ada at ravs do comando CRTTOPENV do TOPConnect .
- 565 -
ADVPL Compl et o
Para i nformaes sobr e a cri ao de ambi ent es consul t e o manual de i nst al ao do TOPConnect .
A li st a dos t i pos de bancos de dados supor t ados pel a apli cao TopConnect / DbAccess a mesma das possi bili dades de ret orno da funo TCGETDB conforme abai xo:
ANYWHERE - Sybase SQL Anywher e ANYSYBASE - Sybase SQL Anywher e ( Emul ando Sybase SQL- Server) DB2 - I BM Uni versal Dat abase I NFORMI X I nformi x MSSQL - Mi crosoft SQL- Ser ver 6.5 MSSQL7 - Mi crosoft SQL- Ser ver 7.0 ou superi or ORACLE - Oracl e POSTGRES - Post Gr es SYBASE - Sybase SQL- Server
E Ret or no:
Numr i co A funo TCLi nk r et orna ou o nmero da conexo ou um val or negat i vo cont endo o cdi go do er ro.
A rel aes dos cdi gos de er ros ocor ri dos durant e uma t ent at i va de conexo est di sponvel no t pi co 8.1. dest e mat eri al .
E Ex empl o:
//Conecta-se ao Microsoft SQL-Server no ambiente SIGAADV //Protocolo Named Pipes TCConType("NPIPE")
nCon := TCLink("MSSQL/SIGAADV","TOPSRV") if nCon < 0 //Conexes com retorno < 0 significam erro Alert("Falha de conexo com o TOPConnect") endif //Protocolo TCP/IP TCConType("TCPIP") //Conecta-se ao Oracle no ambiente TESTES nCon := TCLink("ORACLE/TESTES",172.16.1.2)
//Protocolo APPC //Conecta-se ao AS/400 no ambiente PRODUCAO nCon := TCLink("PRODUCAO","TOP400")
- 566 -
ADVPL Compl et o
TCQUERY( )
Execut a uma Query no servi dor e col oca seu r et orno em uma Wor kAr ea.
Durant e o processo de compil ao, a si nt axe TCQUERY( ) subst i t uda pel as expr esso:
dbUseAr ea( . T., "TOPCONN",TcGenQry( , ,cQuery) , ALI AS ,.T.,.F.)
Est a subst i t ui o realizada conforme as defi nies do i ncl ude TOPCONN.CH.
Dest a forma r ecomendvel a ut ilizao di ret a da si nt axe DbUseArea( ) + TcGeQr y( ) .
E Si nt ax e: TCQUERY cSQLEx pr ALI AS cAl i as NEW VI A " TOPCONN"
E Par met r os:
cSQLEx pr Expresso SQL a ser envi ada ao servi dor . ALI AS cAl i as Especi fi ca um nome par a a Wor k Ar ea a ser abert a. NEW Abre a t abel a < cTabl e> na prxi ma Work Ar ea di sponvel . Se est a cl ausul a no for especi ficada, < cTabl e> ser na Work Ar ea corr ent e. VI A " TOPCONN" Est e parmet r o i ndi ca ao ADVPL que est a Work Area ser ger enci ada pel o TOPconnect .
E Obser v aes:
A Work Ar ea cri ada com o comando TCQUERY READ- ONLY, port ant o no permi t i do 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 segui nt es comandos so suport ados em uma Work Area cri ada com TCQUERY:
o GO TOP - DbGoTop( ) o GO BOTTOM - DbGoBot t om( ) o SKI P - DbSki p( ) o Eof( ) o Bof( )
Ao execut ar uma Query que r et orne um ou mais val or es cal cul ados, o nome dos campos da WorkAr ea sero COLUMN1, COLUMN2... COLUMNn.
E Ret or no:
Nen hum .
- 567 -
ADVPL Compl et o
E Ex empl o:
//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 conexes com o TOPConnect .
E Si nt ax e: TCQu i t ( )
E Par met r os:
Nen hum .
E Ret or no:
Nen hum .
TCSETCONN( )
Sel eci ona a conexo at i va.
E Si nt ax e: TCSETCONN( nCon n)
E Par met r os:
nConn Nmer o da conexo
E Ret or no:
Nen hum .
- 568 -
ADVPL Compl et o
E Ex empl o:
// Abre conexo com o ambiente de Produo nCon1 := TCLink("MSSQL/PRODUCAO") if nCon1 < 0 Alert("Falha conectando ambiente de Produo") QUIT endif
// Abre conexo com o ambiente de Testes nCon2 := TCLink("MSSQL/TESTES")
if nCon2 < 0 then Alert("falha conectando ambiente de Testes") QUIT endif
TCSetConn(nCon1)
//Abre tabela de Clientes no ambiente de produo USE CUSTOMER ALIAS PROD SHARED NEW VIA "TOPCONN"
TCSetConn(nCon2)
//Abre tabela de Clientes no ambiente de testes USE CUSTOMER ALIAS TEST SHARED NEW VIA "TOPCONN" ...
TCSETFI ELD( )
Est a funo serve como apoi o ao comando TCQUERY, na recuperao de campos t i po NUMERI C, DATE e LOGI CAL, poi s os mesmos so gravados fi si cament e no Banco de Dados como caract eres, e no caso dos numri cos como fl oat .
E Si nt ax e: TCSet Fi el d( cAl i as, cFi el d ,cTy pe, n Tam, nDec )
E Par met r os:
cAl i as Ali as da Wor kAr ea gerada pel a execuo da quer y. cFi el d Nome do campo a ser t r at ado cTy pe Ti po desej ado para o campo nTam Tamanho t ot al desej ado para o campo nDec Nmer o de deci mai s desej ado para o campo
E Ret or no:
Nen hum .
- 569 -
ADVPL Compl et o
E Ex empl o 01 :
TCQUERY "SELECT NOME, DATA, MARRIED, VALOR FROM CUSTOMER" ALIAS QUERY VIA "TOPCONN"
Dent r o de um programa ADVPL j podemos consi derar como um campo dat a no mai s um campo car act er como o seu armazenament o.
O campo Dat a s r et ornado como um campo caract er por que est amos ut ili zando a funo TCQUERY, se no o t rat ament o aut omt i co.
A est rut ura dos parmet r os da funo TCSETFI ELD( ) a mesma ret ornada pel a funo DbSt ruct ( ) e que ut ili zada em diversas funes que mani pul am arqui vos de dados.
Dest a forma mui t o comum a mont agem de queri es em t abel as do si st ema part i ndo da est rut ura de campos ret ornada pel a funo DbSt ruct ( ) sendo que aps a execuo dos campos Tcquer y( ) ou DbUseAr ea( ) normal ment e ut ili zado o campo TcSet Fi el d com base no cont edo dest e mesmo array de est rut ura.
E Ex empl o 02 :
Local cQuery := "" Local cCampos := "" Local aStruSA1 := SA1->(DbStruct()) Local nX := 0 Local nMax := Len(aStruSA1)
// Monta a String cCampos de acordo com o contedo de aStruSA1
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( )
Execut a uma St or ed Procedur e no Banco de Dados.
Devi do a uma l i mi t ao em al guns dos Bancos de Dados suport ados na obt eno dos t i pos de parmet ros ( se so de I NPUT e/ ou OUTPUT) t odos as St or ed Procedures a ser em execut adas at ravs do TOPConnect devero obedecer o segui nt e padro de nomencl at ura de seus parmet r os :
Parmet r os de I NPUT devem comear com I N_... Ex. I N_VALOR. Parmet r os de OUTPUT devem comear com OUT_... Ex. OUT_CODI GO
Aps a execuo de uma St ored Procedure o TOPConnect r et ornar ao ADVPL um array com ' n' el ement os, onde n o nmer o de parmet r os de OUTPUT da St or ed Procedure.
E Si nt ax e: TCSPEx ec( cSPName,x Par am1,x Par am2...x Par amN)
E Par met r os:
cSPName Nome compl et o da St or ed Procedure no banco de dados. x Par amN Parmet r os de i nput da St or ed Procedure.
As pr ocedur es padr es da apli cao ERP Pr ot heus possuem concat enadas em seus nomes o cdi go da empr esa par a a qual foram apl i cadas.
Dest a forma ao execut ar uma pr ocedure padr o do ERP at r avs do comando TCSPEXEC necessri o ut ilizar a funo xPr ocedur es( ) , poi s a mesma i r concat enar ao nome da procedur e que ser execut ada o cdi go da empresa.
Por exempl o: Procedure MAT001
Se for execut ada com a si nt axe: TCSPExec( MAT001 ,. ..) ocor rer um er ro na apl i cao poi s est a pr ocedur e no exi st e.
Ut ilizando a funo xPr ocedur es( ) t emos:
TCSPExec( xPr ocedur es( MAT001 ) , ...) , onde caso a empr esa em uso sej a a 01, ser execut ada a MAT001_01, a qual vli da.
- 571 -
ADVPL Compl et o
E Ret or no:
Ar r ay Array com os parmet r os de r et orno da St or ed Procedure e < cSPName> o nome da St or ed Procedure a ser execut ada e os demai s parmet r os vari am conforme a defi ni o da St or ed Pr ocedure.
E Ex empl o:
//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
A funo TCSPExi st ( ) deve ser ut i lizada apenas para veri fi cao da exi st ncia de St or ed Procedures padres da apl i cao ERP, ou que possuam concat e nadas no nome a i nfor mao da empr esa para qual est o habili t adas.
Para veri fi cao de pr ocedur es sem est a caract erst i ca deve ser ut ilizada a funo Exi st Pr oc( ) .
- 572 -
ADVPL Compl et o
TCSPEXI ST( )
Veri fi ca a exi st nci a de uma det ermi nada St ored Pr ocedur e no servi dor .
E Si nt ax e: TCSPEx i st ( cSPName)
E Par met r os:
CSPName Nome da procedure a ser veri fi cada no banco de dados.
E Ret or no:
Lgi co I ndi ca se a St or ed Pr ocedur e exi st e ou no e < cSPName> o nome da St or ed Procedure pr ocurada.
E Ex empl o:
If TCSPExist("MAT001_01") TCSPExec("MAT001_01",...) Endif
A funo TCSPExi st ( ) deve ser ut i lizada apenas para veri fi cao da exi st ncia de St or ed Procedures padres da apl i cao ERP, ou que possuam concat e nadas no nome a i nfor mao da empr esa para qual est o habili t adas.
Para veri fi cao de pr ocedur es sem est a caract erst i ca deve ser ut ilizada a funo Exi st Pr oc( ) .
TCSQLERROR( )
Ret orna o l t i mo er ro r egi st rado pel o TOPConnect durant e a execuo de uma Query.
E Si nt ax e: TCSQLEr r or ( )
E Par met r os:
Nen hum .
E Ret or no:
St r i n g Mensagem de er ro r egi st rada no TopConnect para a ocor r nci a.
E Ex empl o:
If TCSQLExec("UPDATE CUSTOMER SET VALUE=0") < 0 then ALERT(TCSQLError()) Endif
- 573 -
ADVPL Compl et o
Est a a mesma mensagem que est a r egi st rada no l og de event os do TopConnect / TOTVS DbAccess Manager.
TCSQLEXEC( )
Per mi t e a execuo de comandos de at uali zao no servi dor de banco de dados.
E Si nt ax e: TCSQLEx ec( cCommand)
E Par met r os:
cCommand Comando SQL a ser execut ado.
E Ret or no:
Numr i co Ret orna um val or negat i vo em caso de er ros.
E Ex empl o:
nRet : = TCSQLExec( "UPDATE CUSTOMER SET VALUE= 0)
TCSRVTYPE( )
Ret orna o t i po do servi dor no qual TOPConnect / TOTVS DbAccess est em execuo.
E Si nt ax e: TCSr v Ty pe( )
E Par met r os:
Nen hum .
E Ret or no:
St r i n g Ti po do ser vi dor, como por exempl o: "Wi nNT" ou "AS/ 400".
E Ex empl o:
TCLink("MSSQL/TESTE","TOPSRV") ALERT(TCSrvtype())
- 574 -
ADVPL Compl et o
Devi do aos t rat ament os especfi cos necessri os nas queri es que sero execut adas em bancos de dados DB2 com si st emas operaci onai s AS/ 400 normal a segui nt e veri ficao:
# I FDEF TOP I f TcSrvType( ) ! = "AS/ 400"
< Trat ament o SQL convenci onal >
El se
# ENDI F
< Trat ament o padro CODBASE>
# I FDEF TOP Endi f # ENDI F
TCUNLI NK( )
Encer ra uma conexo com o TOPConnect .
E Si nt ax e: TCUnl i nk ( nConn)
E Par met r os:
nCon n Nmer o da conexo previ ament e r et ornado pel a funo TCLi nk( )
Veri fi ca a exi st nci a de um obj et o no servi dor AS/ 400
E Si nt ax e: TCChk Obj ( cObj ,cLi br ar y ,cTy pe)
E Par met r os:
cObj Nome do obj et o a ser veri fi cado. cLi br ar y Nome da bi bli ot eca que deve cont er o obj et o cTy pe Ti po do de obj et o AS/ 400, como por exempl o: * FI LE ou * PGM.
E Ret or no:
Numr i co 0 quando o obj et o exi st e ou o nmer o do er ro no AS/ 400.
E Ex empl o:
nError := TCChkObj("CALCCUST","PRODUCAO","*PGM")
Funo par a u so apenas com o TOPCon nect em ser v i dor es AS/ 400.
TCEXEERROR( )
Ret orna uma st ri ng com a mensagem de er r o r et ornada pel a execuo das funes TCPGMEXE( ) e TCSYSEXE( ) .
E Si nt ax e: TCEx eEr r or ( )
E Par met r os:
Nen hum .
E Ret or no:
St r i n g Mensagem de er ro.
E Ex empl o:
If TCPGMEXE("CALCCUST") != 0 ALERT(TCExeError()) Endif
- 576 -
ADVPL Compl et o
Funo par a u so apenas com o TOPCon nect em ser v i dor es AS/ 400.
TCPGMEXE( )
Execut a um programa no servi dor AS/ 400.
E Si nt ax e: TCPGMEXE( cPr ogr am)
E Par met r os:
cPr ogram Nome do pr ograma a ser execut ado.
E Ret or no:
Numr i co 0 quando o obj et o exi st e ou o nmer o do er ro no AS/ 400.
E Ex empl o:
If TCPGMEXE("CALCCUST") != 0 ALERT(TCExeError()) Endif
Funo par a u so apenas com o TOPCon nect em ser v i dor es AS/ 400.
TCSYSEXE( )
Per mi t e a execuo de um comando ut i lizando a si nt axe e r ecur sos nat i vos do DB2/ 400, di ret ament e no ser vi dor do banco de dados.
E Si nt ax e: TCSy sEx e( cCommand)
E Par met r os:
cCommand Comando a ser execut ado no servi dor de banco de dados ut i lizando sint axe DB2/ 400.
E Ret or no:
Numr i co 0 quando o obj et o exi st e ou o nmer o do er ro no AS/ 400.
If TCSysExe( cCommand )!= 0 ALERT(TCExeError()) Endif
Funo par a u so apenas com o TOPCon nect em ser v i dor es AS/ 400.
Funes acessr i as par a uso em f ont es com i nt er ao com o TOTVS DbAccess
CHANGEQUERY( )
Funo que efet ua as adequaes necessri as a query par a que a mesma possa ser execut ada adequadament e no banco de dados em uso pel a apli cao ERP at ravs do TopConnect .
Est a funo necessria poi s a apl i cao ERP Prot heus pode ser ut i lizada com di ver sos bancos de dados, e cada banco possui part i cul aridades em sua si nt axe, de for ma que mesmo uma query escri t a respei t ando o padro SQL ANSI pode necessi t ar de adequaes.
E Si nt ax e: Ch angeQu er y ( cQuer y )
E Par met r os:
cQuer y St ri ng cont endo a quer y escri t a em si nt axe SQL ANSI .
E Ret or no:
St r i n g Query adequada em funo do banco em uso pel a conexo at i va com a apli cao TopConnect .
E Ex empl o:
cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8") cQuery += " WHERE " cQuery += "CV8_FILIAL = '"+MV_PAR01+"' AND " cQuery += "D_E_L_E_T_ = '' " cQuery += "ORDER BY CV8_PROC" cQuery := ChangeQuery(cQuery) dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)
- 578 -
ADVPL Compl et o
A funo ChangeQuery( ) deve obri gat ori ament e ser ut ili zada pel os font es da apli cao ERP, poi s a mesma pode ser i nst al ada em di versos ambi ent es, ut ili zando os vri os bancos de dados homol ogados, mas para desenvol vi ment os especfi cos de cl i ent es, o anali st a pode opt ar por no ut ili zar a funo ChangeQuery( ) .
A razo di st o permi t i r ao anali st a, que t enha conheci ment os mai s apurados do banco de dados em uso pel o cli ent e, ut ili zar uma si nt axe focada em ut ilizar mel hor os recursos do banco, ot i mizando a performance da apli cao.
RETFULLNAME( )
Ret orna o nome r eal da t abel a no banco de dados para ut i lizao dest a na sel eo da query.
A funo Ret Full Name( ) no excl usi va para uso em queri es, sendo ut ilizada pel a apli cao ERP par a veri fi car o nome da t abel a para o ali as, especi fi cado no SX2 da empr esa i ndicada.
E Si nt ax e: Ret Ful l Name( cAl i as, cEmp)
E Par met r os:
cAl i as Nome da rea de t rabalho da apli cao para i dent i fi cao da t abel a no banco de dados. cEmp Cdi go da empresa a ser aval i ada.
E Ret or no:
St r i n g Nome compl et o / r eal da t abel a no banco de dados.
Ret orna uma st ri ng com as condi es padr es de uso em uma query.
E Si nt ax e: Ret Sql Cond( cAl i as)
E Par met r os:
cAl i as Nome do al i as para composi o a st ri ng de condi es.
E Ret or no:
St r i n g Condi es de sel eo padres para o al i as indi cado. As condi es padr es so: ALI AS_FI LI AL = xFi li al ( ALI AS) .AND. ALI AS.D_E_L_E_T_ = .
E Ex empl o:
cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8") cQuery += " WHERE " cQuery += RetSqlCond("CV8") cQuery += "ORDER BY CV8_PROC" cQuery := ChangeQuery(cQuery) dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)
RETSQLNAME( )
Ret orna o nome padro da t abel a para sel eo no banco de dados at ravs da query.
E Si nt ax e: Ret Sql Name( cAl i as)
E Par met r os:
cAl i as Ali as para ser avali ado o nome padro da t abel a.
E Ret or no:
St r i n g Nome compl et o da t abel a para sel eo at ravs da query.
E Ex empl o:
cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLNAME("CV8") cQuery += " WHERE " cQuery += RetSqlCond("CV8") cQuery += "ORDER BY CV8_PROC" cQuery := ChangeQuery(cQuery) dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)
- 580 -
ADVPL Compl et o
RETSQLTABLE( )
Ret orna o nome r eal da t abel a para sel eo no banco de dados at ravs da quer y.
E Si nt ax e: Ret Sql Tabl e( cAl i as)
E Par met r os:
cAl i as Ali as para ser avali ado o nome real da t abel a.
E Ret or no:
St r i n g Nome r eal da t abel a no banco de dados.
E Ex empl o:
cQuery := "SELECT DISTINCT CV8_PROC FROM "+RETSQLTABLE("CV8") cQuery += " WHERE " cQuery += RetSqlCond("CV8") cQuery += "ORDER BY CV8_PROC" cQuery := ChangeQuery(cQuery) dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), "CV8QRY", .F., .T.)
SQLCOPY( )
Cri a um arqui vo no for mat o especi fi cado pel a confi gurao LOCALFI LES do ambi ent e com o ret orno da query.
E Si nt ax e: Sql Copy ( cFi l e, cWh er e, aSt r u, cAl i as, aDat es, l Recno)
E Par met r os:
cFi l e Nome do arqui vo t emporari o dest i no a ser gerado cWher e Condi cao "Wher e" da quer y aSt r u Array com os Campos a ser em sel eci onados pel a quer y cAl i as Ali as ori gem dos dados aDat es Array com os nomes dos campos que devero t er o t rat ament o da funo TCSet Fi el d( ) para o for mat o de dat a. l Recn o Se copi a o cont edo da col una R_E_C_N_O_ para o arqui vo gerado.
E Ret or no:
Nen hum .
- 581 -
ADVPL Compl et o
SQLORDER( )
Convert e a si nt axe de um i ndce em format o I SAM ( CODEBASE) para o for mat o SQL ANSI
E Si nt ax e: Sql Or dem( cOr der )
E Par met r os:
cOr der Si nt axe de ndi ce em for mat o I SAM.
E Ret or no:
St r i n g ndi ce convert i do para si nt axe SQL ANSI
Preenche um arqui vo t emporri o com o cont edo do r et orno da query.
E Si nt ax e: Sql ToTr b( cQuer y , aSt r u, cAl i as)
E Par met r os:
cQuer y Query para sel eo dos regi st ros no banco de dados. aSt r u Array cont endo a est rut ura do arqui vo t empor ri o a ser pr eenchi do com os dados de ret orno da quer y. cAl i as Ali as do arqui vo t emporri o a ser pr eenchi do com os dados de r et or no da query.
Para cor r et a ut ili zao da funo SQLTOTRB( ) o arqui vo t emporri o deve est ar cri ado e com a r ea de t rabal ho ( ALI AS) defi ni do.
E Ret or no:
Nen hum .
E Ex empl o:
// Arquivo de trabalho que ser utilizado pela MaWndBrowse
40.3. Apl i caes com cont r ol e de comuni o com o Banco de Dados
Ut ilizando as funo de i nt erao com a apl i cao TopConnect / TOTVS DbAccess t m- se um grande nmero de apli caes que podem ser desenvol vi das, combi nando- se r ecur sos previ ament e est udados nos mdul os Bsi co, I nt ermedi ri o e ut ili zando os concei t os de ori ent ao obj et os e as cl asses de obj et os di sponvei s na linguagem ADVPL, t ai s como:
E Rot i nas de pr ocessament o ut ili zando queri es par a sel eo dos r egi st ros; E Rel at ri os para sel eo dos regi st r os; E Rot i nas de at uali zao para execuo dos comando de at uali zao di ret ament e no banco de dados.
Em r esumo, qual quer apli cao do ambi ent e ERP pode ser escri t a ut ilizando os recursos de i nt erao com a apli cao TopConnect / TOTVS DbAccess, para obt er, mani pul ar e at uali zar os dados do banco do banco de dados.
Nest e t pi co sero det al hadas duas apli caes ut i lizando est as funes, cuj o grau de compl exi dade il ust ra bem o pot enci al dest a fer r ament a.
E MaWndBr ow se com Al i as Tempor r i o ger ado por Quer y
E Banco de dados de i n t er f ace
40.3.1. MaWndBr ow se com Al i as Tempor r i o ger ado por Quer y
Conforme descri t o no t pi co 6.1. MaWndBr owse, est a funo permi t e a mont agem de um browse cuj a est rut ura do arqui vo no necessi t a est ar defi ni da no dici onri o de dados da apli cao ERP.
Ut ilizando est a part i culari dade da MaWndBrowse possvel ent o compor um ali as t emporri o cont endo o r et orno de uma query e exi bi- l o em um browse.
A vant agem dest e Br owseSQL em r el ao ao br owse de uma t abel a normal a possi bili dade de combi nar i nformaes de vri as t abel as at ravs de uma query e exi bi - l as em t el a.
Al gumas apli caes i nt eressant es para est e r ecurso seri am:
E Consul t a Kardex em t el a, poi s est e r el at ri o combi na dados das t abel as de i t ens dos document os de ent rada ( SD1) , i t ens dos document os de sada ( SD2) e movi ment aes i nt ernas ( SD3) .
E Conci li ao de cont abi lizaes, poi s uma cont abilizao compost a por uma ori gem, a qual pode ser prat i cament e de qual quer t abel a de movi ment os da apl i cao ERP, e de um ou mai s l anament os cont bei s ( CT2) gerados por est a ori gem.
E Demonst rao em t el a das depr eci aes dos bens do i mobili zado por perodo, compondo di nami cament e as col unas de depreci ao de acordo com o i nt erval o de meses sel eci onados. Est e recurso i nt eressant e poi s eli mi na a li mit ao de espao da i mpresso e pode ser combi nado com a funci onali dade de expor t ao de gri ds de dados para o Mi cr osoft Excel .
- 584 -
ADVPL Compl et o
Ex empl o: MaWn dBr ow se com Al i as Tempor r i o ger ado por Quer y
Est e exempl o de uso da MaWndBrowse com ali as de t emporri o ut ilizando queri es deri vado do exempl o de ut ili zao da MaWndBr owse com arqui vo t emporri o descri t o no i t em 6.1. MaWndBrowse.
#include "protheus.ch"
/*/ +----------------------------------------------------------------------- | Funo | WndSQLTRB | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Demonstra a utilizao da MaWndBrowse com SQL | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
User Function WndSQLTRB()
// Variveis para o Arquivo Temporario Local cChave := "" Local cArqTrb := "" Local aStruTRB := {} Local aStruSQL := SA1->(DbStruct())
// Variveis para o MaWndBrowse Local cTitulo := "Cadastro Temporario"// Ttulo obrigatrio Local cAlias := "SA1" // Alias da tabela corrente podendo ser TRB Local cFunLeg := "" // Funo que dever retornar um valor lgico e com isso ser atribudo semafro na primeira coluna do browse Local cTopFun := "" // Mostrar os registros com a chave de Local cBotFun := "" // Mostrar os registros com a chave ate Local lCentered := .T. // Valor verdadeiro centraliza Local aResource := {} // aAdd(aResource,{"IMAGEM","Texto significativo"}) Local nModelo := 1 // 1- Menu do aRotina Local aPesqui := {} // aAdd(aPesqui{"Ttulo",nOrdem}), se no passado ser utilizado o AxPesqui Local cSeek := "" // Chave principal para a busca, exemplo: xFilial("???") Local lDic := .T. // Parmetro em conjunto com aCampos Local lSavOrd := .T. // Estabelecer a ordem aps pesquisas.
// Variaveis para a MsAdvSize Local lEnchBar := .F. // Se a janela de dilogo possuir enchoicebar (.T.) Local lPadrao := .F. // Se a janela deve respeitar as medidas padres do Protheus (.T.) ou usar o mximo disponvel (.F.) Local nMinY := 400 // Altura mnima da janela
Local aSize := MsAdvSize(lEnchBar, lPadrao, nMinY)
Private cCadastro := " " Private aCampos := {} // Se lDic=.T. utilizar o SX3, do contrrio o aCampos informado -> aAdd(aCampo,{X3_CAMPO,X3_PICTURE,X3_TITULO,X3_TAMANHO}) Private aRotina := {} // Idntico ao aRotina para mBrowse
- 585 -
ADVPL Compl et o
Continuao:
aAdd(aRotina,{"Visualizar","U_TcVisual",0,2}) // Desenvolver Enchoice para campos de arquivo temporrio aAdd(aRotina,{"Incluir" ,"U_TcInclui",0,3}) // Desenvolver Enchoice para campos de arquivo temporrio aAdd(aRotina,{"Alterar" ,"U_TcAltera",0,4}) // Desenvolver Enchoice para campos de arquivo temporrio
aAdd(aRotina,{"Excluir" ,"U_TcExclui",0,5}) // Desenvolver Enchoice para campos de arquivo temporrio
// Estrutura do Arquivo: Nome do campo / tipo, tamanho, decimais (SX3 para temporrio) /* AADD(aStruTRB,{"TRB_FILIAL" ,"C",02,0}) // Nome_Campo , Tipo_Campo, Tamanho, Decimal AADD(aStruTRB,{"TRB_ID" ,"C",14,0}) AADD(aStruTRB,{"TRB_NOME" ,"C",20,0}) AADD(aStruTRB,{"TRB_IDADE" ,"N",03,0}) AADD(aStruTRB,{"TRB_STATUS" ,"C",01,0}) */ // aCampos padro para a MaWndBrowse //AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>})
// aCampos melhorado para a WndBrwTRB //AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>,<Tipo>,<cWhen>,; //<lObrigatorio>}) // Nota: lObrigatorio deve ser sempre a ultima informacao do aCampos /* AADD(aCampos,{"TRB_FILIAL" ,"@!" ,"Filial" ,02,"C",".F.",.T.}) AADD(aCampos,{"TRB_ID" ,"@!" ,"Matricula" ,14,"C",".F.",.T.}) AADD(aCampos,{"TRB_NOME" ,"@!" ,"Nome" ,20,"C",".T.",.F.}) AADD(aCampos,{"TRB_IDADE" ,"@E 999","Idade" ,03,"N",".T.",.F.}) AADD(aCampos,{"TRB_STATUS" ,"@!" ,"Status" ,01,"C",".T.",.T.}) */
If File(cArqInd+OrdBagExt()) FErase(cArqInd+OrdBagExt()) ENDIF
DbSelectArea("SA1") DbSetOrder(1)
Return
/*/ +----------------------------------------------------------------------- | Funo | TcVisual | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TcVisual(cAlias,nReg,nOpc)
LOCAL aCposEnch := {} LOCAL nLinha := 15 LOCAL nColuna := 10 LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade LOCAL bOk := {||oDlg:End()} LOCAL bCancel := {||oDlg:End()} LOCAL nX
/*/ +----------------------------------------------------------------------- | Funo | TcInclui | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TcInclui(cAlias,nReg,nOpc)
LOCAL aCposEnch := {} LOCAL nLinha := 15 LOCAL nColuna := 10 LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade LOCAL bOk LOCAL bCancel := {||oDlg:End()} LOCAL aArea := GetArea() LOCAL nX
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
/*/ +----------------------------------------------------------------------- | Funo | TcAltera | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TcAltera(cAlias,nReg,nOpc)
LOCAL aCposEnch := {} LOCAL nLinha := 15 LOCAL nColuna := 10 LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade LOCAL bOk LOCAL bCancel := {||oDlg:End()} LOCAL aArea := GetArea() LOCAL nX
/*/ +----------------------------------------------------------------------- | Funo | TcExclui | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TcExclui(cAlias, nReg, nOpc)
LOCAL aCposEnch := {} LOCAL nLinha := 15 LOCAL nColuna := 10 LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade LOCAL bOk LOCAL bCancel := {||oDlg:End()} LOCAL nX
/*/ +----------------------------------------------------------------------- | Funo | TcValid | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TcValid(cAlias,nReg,nOpc,aCampos) LOCAL lRet LOCAL nX LOCAL nPosObrig := Len(aCampos[1])
For nX := 1 to Len(aCampos) IF aCampos[nX,nPosObrig] == .T. IF !(lRet := !Empty(&("_"+aCampos[nX,1]))) Help("TEnchoice",1,"HELP","OBRIGATORIO","Existem campos obrigatorios nao preenchidos",1,0) RETURN lRet // EXIT ENDIF ENDIF Next nX
IF nOpc == 3 IF !(lRet := !((cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID)))) Help("TEnchoice",1,"HELP","INCLUSAO","Ja existe um registro com esta chave",1,0) ENDIF ELSE IF !(lRet := (cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID))) Help("TEnchoice",1,"HELP","ALTERACAO","Nao existe um registro com esta chave",1,0) ENDIF ENDIF
RETURN lRet
- 592 -
ADVPL Compl et o
Continuao:
/*/ +----------------------------------------------------------------------- | Funo | TcGravar | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION TcGravar(cAlias,nReg,nOpc,aCampos) LOCAL nX
RecLock(cAlias,nOpc==3) IF nOpc == 5 DbDelete() ELSE For nX := 1 to Len(aCampos) (cAlias)->&(aCampos[nX][1]) := &("_"+aCampos[nX][1]) Next nX ENDIF Msunlock()
RETURN
- 593 -
ADVPL Compl et o
Continuao:
/*/ +----------------------------------------------------------------------- | Funo | TEnchoice | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | Enchoice para arquivos temporarios | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
Static Function TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE,; lEnchBar)
Local aSays := {} Local aGets := {} Local cCaption := "" Local cPict := "" Local cValid := "" Local cF3 := "" Local cWhen := "" Local cBlKSay := "" Local cBlkGet := "" Local cBlKVld := "" Local cBlKWhen := "" Local nLeft := 0 Local nTop := 0 Local nI := 0
O t ermo Banco de dados de i nt erface ut ilizado para cl assi fi car uma apli cao ADVPL escri t a com funes de i nt erao com a apl i cao TopConnect / TOTVS DbAccess para r eal izar a i nt egrao ent r e a apli cao ERP Prot heus e out ro si st ema, ut ilizando como mei o de comuni cao um banco de dados e no mai s i mport ao de arqui vos em N format os, t ai s como . TXT, .DBF e si milares.
Est e t i po de i nt egrao no vi sa subst i t ui r format os de i nt egraes padres j exi st ent es como o padr o CNAB e o padro Web XML. Sua apli cao i nt egr ao di ret a ent re si st emas at ravs de um banco de dados com format o e padres comuns ent r e el as.
As vant agens da ut ili zao do concei t o de Banco de Dados de I nt erface em comparao da i nt egrao por i mport ao / export ao de arqui vos so:
E Mai or cont rol e da i nt egrao das i nformaes ent re os si st emas, permi t indo um t rat ament o adequado de event os de err os;
E Transparnci a e rast r eabili dade das i nformaes i nt egradas, i mpl ement ando confi abilidade no pr ocesso;
E Possi bili dade de ut ili zao de um t i po de banco de dados pel a aplicao ERP Prot heus e de out ro t i po de banco de dados par a i nt egrao ent r e os si st emas.
E Possi bili dade de desenvol vi ment o de ferrament as para moni t orar e gerenci ar a i nt egrao ent r e os si st emas at ravs do cont r ol e da rea de i nt erface no banco de dados, i ncl usi ve com a ut ili zao de St or ed Pr ocedur es par a aument ar a performance da apl i cao de i nt erface.
Consi der aes r el ev ant es sobr e as f unes TCLi nk ( ) e TCSet Con n( )
E A funo TCLi nk( ) permi t e a abert ura de uma conexo com um banco de dados, desde que haj a o OBDC confi gurado no ambient e da apli cao e na apli cao TOPConnect / TOTVS DBAccess;
E Cada abert ura de conexo at ravs da funo TcLi nk( ) consome uma li censa de usuri o do TOPConnect / TOTVS DBAccess. Aps a abert ura de uma conexo a mesma deve ser sel eci onada pel a funo TcSet Conn( ) para se t ornar a conexo at i va;
E Podem ser ut i lizadas di versas conexes em uma mesma apli cao ADVPL, e podem ser ut ili zadas as i nformaes das t abel as j abert as e vi ncul adas a uma rea de t rabal ho independent e da conexo que est at i va. Soment e deve ser veri fi cado que para abert ura de uma t abel a e vncul o dest a com uma rea de t rabal ho obri gat ori ament e deve est ar at i va a conexo com o banco de dados que cont m est a t abel a.
E A conexo abert a ent r e o ERP Prot heus e o TopConnect / DbAccess possu o nmero de refernci a 0. Dest a forma, aps fi nali zar uma conexo abert a com o comando TCLi nk( ) deve ser efet uado um TCSet Conn( 0) para rest aurar como conexo at i va a conexo padro do Prot heus com o TopConnec.
- 596 -
ADVPL Compl et o
A fi gura abai xo il ust ra a est rut ura t pi ca de uma apli cao ut ili zando o concei t o de Banco de Dados de I nt er face, com foco na apli cao ERP Pr ot heus e seus r ecursos pr- di sponvei s:
Tar ef a Descr i o Det al h ament o 01 Ex por t ao Pr ot heu s - > DbI nt er f ace Ut ilizao de queri es ou st or ed procedur es para at ualizao das t abel as do banco DBI nt erface no for mat o necessri o ao ERP X, execut adas a part i r do ERP Pr ot heus. 02 I mpor t ao DbI nt er f ace - > ERP X Fer rament as propri et r i as do ERP X para l ei t ura do DBI nt erface e t rat ament o das i nfor maes para at ualizao do banco de dados dest a apli cao. 03 Ex t r ao ERP X - > DbI nt er f ace Pode ser uma fer rament a propri et ri a da apli cao ERP X, ou pode ser um conj unt o de queri es e st or ed procedur es desenvol vi das em conj unt o com a equi pe do ERP X e a equi pe TOTVS, permi t indo o cont r ol e de execuo da ext rao pel o ERP Prot heus. 04 I mpor t ao DbI nt er f ace - > Pr ot h eu s Ut ilizao de queri es ou st or ed procedur es para l ei t ura das i nformaes do DBI nt erface e at ualizao de t abel as i nt ermedi ri as no banco de dados do ERP Pr ot heus, execut adas a part i r do ERP Pr ot heus. 05 Ef et i v ao Pr ot h eus - > Pr ot heus Ut ilizao de funes prpri as para est a fi nalidade no ERP Prot heus para efet i vao das i nformaes i mport adas em i nfor maes vli das no ERP. Est as funes nor mal ment e so compat vei s com a execuo at ravs do r ecurso de MsExecAut o( ) .
Consi der aes compl ement ar es sobr e o concei t o de Banco de Dados de I nt er f ace
- 597 -
ADVPL Compl et o
E A ut ilizao de t abel as i nt ermedi ri as no banco de dados Pr ot heus apesar de no ser obri gat ri a recomendada para per mi t ir um t rat ament o adequado das ocor rnci as de efet i vao das i nformaes, pr i nci pal ment e quando ut ilizada a funo MsExecAut o( ) para execut ao das r ot i nas de efet i vao dos dados;
E Para ext rao das i nformaes t ant o do banco de dados Prot heus para export ao, quant o do banco de dados do si st ema ERP X r ecomendvel o uso de St or ed Procedures para aument ar a performance do processo como um t odo. i mport ant e l embrar que se o si st ema ERP X possui r pr ocedur es de export ao as mesmas podero ser execut adas di ret ament e pel o Pr ot heus at ravs da funo TCSpExec( ) ;
E recomendvel que as funci onalidades de Export ao, Ext rao, I mport ao e Efet i vao sej am t rat adas t ant o com i nt erfaces de execuo di ret a quant o at ravs de execuo vi a Job.
- 598 -
ADVPL Compl et o
40.4. Embedded SQL Faci l i t ador de Quer y s
O obj et i vo do Embedded SQL facili t ar a escri t a e l ei t ura de query' s. Foi defi ni da uma si nt axe para que se possa escr ever a query di ret ament e no cdi go ADVPL, sem a necessi dade de fi car concat enando pedaos de st ri ng para compor a st ri ng fi nal .
Di sponi bi l i dade do Recur so
Est e recur so est di sponvel apenas no Prot heus 8. A ut ilizao do Embedded SQL di vi de- se em : compi l ao do font e, e execuo do font e. Para ser possvel compil ar um font e com o cdi go escri t o no format o Embedded, deve ser ut i lizado um Prot heus, com Buil d i gual ou superi or a 7.00.050721p, em um ambi ent e com r eposi t ri o para TopConnect ( RPODB= TOP ) .
A ut ili ao dest e r ecurso t ambm depende da at ualizao da LI B 811, superi or a ' Li b 20050902 - 811' .
BeginSql alias 'E2TEMP' column E2_EMISSAO as Date %noparser% SELECT SE2.E2_PREFIXO,SE2.E2_NUM FROM %table:SE2% SE2,%table:QEK% QEK WHERE SE2.E2_FILIAL= %xfilial:SE2% AND SE2.E2_PREFIXO<> %exp:cPrefixo% AND SE2.%notDel% ORDER BY %Order:SE2% EndSql
- 599 -
ADVPL Compl et o
Car act er st i cas oper aci on ai s - Si nt ax e
O bl oco onde ser escri t o o Sel ect deve sempr e ser i ni ci ado com ' Begi nSql al i as' e fi nali zado com ' En dSql ' .
Part es do cdi go que devem ser subst i t udas aparecem ent r e os si nai s de %. Est as expresses possuem t r at ament o especi al em moment o de execuo.
Qual quer i nst ruo col ocada ent r e BEGI NSQL. .. ENDSQL, que no sej a uma expr esso %. .. % , ser i nseri da na quer y a ser envi ada para o banco, de forma l i t eral .
Vari vei s, expresses, funes apar ecem i ni ci ando com % ex p: % .
Em col umn, especi fi car campos da query que so do t i po dat a, l gi co ou numri co ( DATE, LOGI C, NUMBER) . Est a li nha t r ocada por chamadas funo TCSet Fi el d.
% nopar ser % i ndi ca que a query no deve passar pel a funo ' ChangeQu er y ' ant es de ser envi ada ao banco de dados. Caso no especi ficado, o defaul t a st ri ng da query ser passada aut omat i cament e pel a funo ChangeQuery.
% t abl e: < al i as> % subst i t uda por Ret Sql Name( < al i as> )
% not Del % subst i t uda por D_E_L_E_T_= ' '
% Or der : < al i as> % subst i t uda por Sql Or der ( < al i as> - > ( I ndex Key ( ) ) )
H 3 opes par a o %Order: 1. % Or der : < cAl i as> % t raduzi do para Sql Order( < cAlias> - > ( I ndexKey( ) ) ) 2. % Or der : < cAl i as> , < nI ndi ce> % t raduzi do para Sql Order( < cAlias> - > ( I ndexKey( < nI ndice> ) ) ) 3. % Or der : < cAl i as> , < cNi ck > % t raduzi do para Sql Order( < alias> - > ( DBNi ckI ndexKey( < cNick> ) ) )
Li mi t ao:
No permi t i do inclui r funes no mei o do cdi go ' embedded' . Se pr eci sar, o val or deve ser guardado em uma vari vel ant es do i nci o do Begi nSql .
tam_cp := GetE2ValorSize()
BeginSql alias 'E2TEMP' column E2_EMISSAO as Date, E2_VALOR as Numeric(tam_cp,2) . . . EndSql
- 600 -
ADVPL Compl et o
Er r os de Compi l ao
Caso sej a ut ilizado al gum argument o i nvli do para especi fi car as col unas, ou err os de si nt axe nas expresses a ser em t ransformadas para a mont agem da query, a compi l ao do font e i nt err ompi da com a ocor rnci a ' Synt ax Err or ' , informando a li nha onde a pri mei ra ocor rnci a foi encont rada.
ENDSQL (Error C2001 Syntax error:)
Caso a ocorr nci a de compil ao apont e di ret ament e para a li nha do cdi go- font e, onde est escri t a a i nst ruo EndSql , veri fi que se exi st e al gum espao em branco ou t abul ao, a part i r do i nci o da li nha, ant es da i nst ruo EndSql . A ver so at ual desde ambi ent e no suport a est a decl arao, exi gindo que a i nst ruo EndSql sej a alinhada esquerda do font e, sem espaos ou t abul aes.
Er r os de Ex ecuo
E ' Quer y Ar gument Er r or : Al i as [ XXX] al r eady i n use.'
Caso a i nst ruo Begi nSQL especi fi que um alias que j est ej a abert o ( em uso) , a apli cao abort ada com a ocor r nci a de er ro fat al aci ma, i nformando em XXX o al i as ut ilizado.
E ' Quer y Ar gument Er r or : I nv al i d Val ue Ty pe [ X] '
Caso al guma expr esso i nformada na Quer y, at ravs da t ag %exp: ... %, r et orne um val or de t i po di fer ent e de ' C' Cat act er, ' D' Dat a, ' N' Numri co, ou ' L' Lgi co, a apli cao abort ada com a ocorr nci a de er ro aci ma, onde o t i po do argument o i nesperado most rado em [ X] .
E ' Ty pe Mi smach on + '
Est a ocorr nci a, se repr oduzi da, i nformar na pilha de chamadas o nmer o da li nha do cdi go- font e cor r espondent e i nst ruo EndSQL. Ocor re caso al guma funo int ermedi ri a do engi ne do Embedded SQL, excl uindo- se as funes especi fi cadas na quer y com a si nt axe %exp: .. . % , r et ornar um cont edo no- caract er e a ser acr escent ado na Query. Est a ocor rnci a de mai s di fcil l ocalizao, sendo t il nest es casos a anl i se do arqui vo t empor r i o gerado pel o Pr ot heus I DE, no moment o da compil ao.
E Hel p NOFUNCW - Fun o __EXECSQL
Caso um font e com o Embedded SQL sej a execut ado em um r eposi t ri o que no t enha si do at ualizado, OU que no sej a um Reposi t ri o para o ambi ent e TOPConnect ( RPODB= TOP) , a apli cao exi bi r a ocorr nci a aci ma, i ndi cando que a funo i nt erna de execuo da Quer y no est pr esent e no ambi ent e. Veri fi que se a li b est at ualizada, e se o RPO em uso de um ambi ent e TOPConnect .
- 601 -
ADVPL Compl et o
Car act er st i cas oper aci on ai s - depur ao
Dada a mont agem da Query, no possvel depurar o bl oco do cdi go- font e compr eendi do ent re as i nst rues Begi nSql e EndSql , no sendo consi derados pont os de parada de depurao ( BreakPoint s ) , caso col ocados nest e i nt ervalo do cdi go. A col ocao de pont os de parada deve ser r eal i zada ant es ou depoi s dest e bl oco.
Funo aux i l i ar - GETLast Qu er y ( )
Aps a abert ura do cur sor, no al i as especi fi cado, a funo Get Last Quer y( ) r et orna um ar ray, com 5 el ement os, onde est o di sponvei s as seguint es i nformaes sobr e a Query execut ada :
[ 1] cAli as - Ali as usado para abri r o Cursor. [ 2] cQuery - Quer y execut ada. [ 3] aCampos - Ar ray de campos com cri t ri o de converso especi fi cados. [ 4] l NoParser - Caso .T. , no foi ut ilizada ChangeQuer y( ) na St ri ng ori ginal . [ 5] nTi meSpend - Tempo, em segundos, ut i lizado para a abert ura do Cursor.
E Ex empl o mai s compl et o: Cdi go ADVPL
BeginSql alias 'E2TEMP' column E2_EMISSAO as Date, E2_VALOR as Numeric(tam_cp,2) column QEK_SKLDOC As Logical
%noparser%
SELECT SE2.E2_PREFIXO,SE2.E2_NUM, SE2.E2_FORNECE, SE2.E2_LOJA,SE2.E2_VALOR, SE2.D_E_L_E_T_ DEL1, QEK.D_E_L_E_T_ DEL2 , QEK.QEK_SKLDOC, SE2.R_E_C_N_O_ SE2RECNO FROM %table:SE2% SE2,%table:qeK% QEK WHERE SE2.E2_FILIAL= %xfilial:SE2% AND qek.%notDel% and SE2.E2_PREFIXO<> %exp:cPrefixo% AND SE2.E2_NUM<> %exp:(cAlias)->M0_CODIGO% AND SE2.E2_NUM<>45 AND SE2.E2_FORNECE=%exp:Space(Len(SE2->E2_FORNECE))% AND SE2.E2_EMISSAO<>%exp:MV_PAR06% AND SE2.E2_LOJA<>%exp:MV_PAR05% AND SE2.E2_VALOR<>%exp:MV_PAR04% AND qek.QEK_SKLDOC<>%exp:MV_PAR03% And SE2.%notDel% ORDER BY %Order:SE2,1% EndSql
- 602 -
ADVPL Compl et o
E Ex empl o mai s compl et o: Font e ger ado pel o pr - compi l ador ( PPO)
__execSql( 'E2TEMP', ' SELECT SE2.E2_PREFIXO,SE2.E2_NUM, SE2.E2_FORNECE, SE2.E2_LOJA,SE2.E2_VALOR, SE2.D_E_L_E_T_ DEL1, QEK.D_E_L_E_T_ DEL2 , QEK.QEK_SKLDOC, SE2.R_E_C_N_O_ SE2RECNO FROM '+RetSqlName('SE2')+' SE2, '+RetSqlName('QEK')+' QEK WHERE SE2.E2_FILIAL= '' +xFilial('SE2')+'' AND qek.D_E_L_E_T_= ' ' AND SE2.E2_PREFIXO<> '+___SQLGetValue(CPREFIXO)+' AND SE2.E2_NUM <> '+ ___SQLGetValue((CALIAS)->M0_CODIGO)+' AND SE2.E2_NUM<>45 AND SE2.E2_FORNECE= '+ ___SQLGetValue(SPACE(LEN(SE2->E2_FORNECE)))+' AND SE2.E2_EMISSAO<> '+ ___SQLGetValue(MV_PAR06)+' AND SE2.E2_LOJA<> '+___SQLGetValue(MV_PAR05) +' AND SE2.E2_VALOR<> '+___SQLGetValue(MV_PAR04)+' AND qek.QEK_SKLDOC<> '+ ___SQLGetValue(MV_PAR03)+' And SE2.D_E_L_E_T_= ' ' ORDER BY '+ SqlOrder(SE2->(IndexKey(1))), {{'E2_EMISSAO','D',8,0}, {'E2_VALOR','N',tam_cp,2}, {'QEK_SKLDOC','L',1,0}},.T.) )
- 603 -
ADVPL Compl et o
41. Funci onal i dade MsEx ecAut o
Sobr e a MsEx ecAut o e Rot i n as Aut omt i cas
A funci onali dade MsExecAut o, ou t ambm conheci da como Rot i na Aut omt i ca, permi t e a execuo de r ot i nas do ambi ent e ERP Pr ot heus por funes especfi cas, o que confere ao desenvol vedor a possi bili dade de efet uar t r at ament os especfi cos ant es da execuo da r ot i na padro, e mai s i mport ant e, no perder nenhuma funci onalidade que a r ot i na padro ofer ece.
Avali ando est a funci onali dade apenas pel o pargrafo aci ma, t em- se a i mpresso de ser um recurso si mpl es e at mesmo desnecessri o, poi s um desenvol vedor experi ent e poderi a reproduzi r t odas as val idaes e t rat ament os exi st ent es em sua r ot i na, ent o porque t er de t rat ar a r ot i na padro?
Para responder a est a pergunt a devemos fazer as segui nt es consi der aes:
E A apl i cao ERP est em const ant e ev ol uo:
No moment o de desenvol vi ment o da rot i na especfi ca era necessri o apenas o t rat ament o de um conj unt o i sol ado de i nformaes, mas com o apri morament o do ERP como um t odo, agora so necessri os out ros conj unt os de dados, os quai s no foram t rat ados pel o desenvol vedor naquel e moment o, mas que est o cont empl ados na rot i na padro do si st ema.
Como o desenvol vedor opt ou por r eal i zar t odo o t rat ament o de forma especfi ca, em uma at ualizao do ERP est e desenvol vi ment o pr eci sar ser r evi st o ou at mesmo refei t o, o que i mpl acar em cust o para o cl i ent e ou par a o desenvol vedor.
Se o desenvol vedor t i vesse opt ado por ut ili zar a rot i na padro encapsul ada em seu desenvol vi ment o el e no t eri a probl emas em adapt ar sua rot i na as novas necessi dades do si st ema, poi s a r ot i na padro j se preocupada com a compat i bilidade ent re as verses, possi bilit ando que uma si mpl es manut eno at ualize t oda a r ot i na especfi ca, i st o se est a manut eno for necessri a, poi s a rot i na padro poder t rat ar a novas i nfor maes com cont edos padres dependendo da si t uao em que est as no forem i nformadas.
E A apl i cao ERP pode ser per son al i dada at r av s de pont os de ent r ada e do di ci on r i o de dados:
A part i r do moment o que uma apli cao padro desenvol vi da e di sponi bilizada a mesma pode sofr er di versas per sonal izaes em campo, as quai s podem ser i mpl ement adas em paral el o ou aps o desenvol vi ment o da rot i na especfi ca di sponi bili zada pel o desenvol vedor .
Se est a si t uao no for previ st a, a i ncl uso de i nformaes ut ili zando a rot i na padro do si st ema poder sofr er di versas vali daes ou at mesmo efet uar a gravao de i nformaes adi ci onai s, as quai s no est o vi svei s na r ot ina especfi ca, gerando graves i nconi st nci as na base de dados.
Avali ando est as consi deraes per cebesse o fat or de sucesso que um desenvol vi ment o especfi co pode t er ao opt ar por refazer t odos os t rat ament os do si st ema em det ri ment o de ut ili zar a funci onali dade MsExecAut o, ou sej a, qual quer modi fi cao no ambi ent e, i ndependent e do quo si mpl es pode t ornar a r ot i na especfi ca inadequada.
- 604 -
ADVPL Compl et o
Quan do ut i l i zar a f un ci on al i dade MsEx ecAut o ?
Tendo em vi st a est e cenri o fi ca a pergunt a: Quando ut ili zar a funci onalidade MsExecAut o ?
A respost a pode ser bvi a e at conser vadora, mas Sempre que a funci onalidade est i ver di sponvel naquel e processo .
Em r esumo, qual quer funci onali dade de i nt erface, sej a el a de carga ou cont nua, qual quer funci onali dade de at ualizao, ou sej a, qual quer manut eno na base de dados do si st ema, sempre que possvel , deve ut i lizar a funci onali dade MsExecAut o.
Pr ocessos da apl i cao ERP com t r at ament os par a ex ecuo por MsEx ecAut o
Pode- se di zer que as pr i nci pai s rot i nas de at uali zao do ERP Pr ot heus at ual ment e possuem o t rat ament o necessri o para sua execuo por MsExecAut o, e com base nas necessi dades de desenvol vi ment o i nt ernas da TOTVS e nas mel hori as sol i ci t adas por cl i ent es e anali st as de i mpl ant ao as demai s rot i nas necessri as so at ualizadas para cont empl ar est e t rat ament o.
O quadr o abai xo i lust ra um dos l t i mos cenri os de t rat ament o de MsExecAut o pel as rot i nas da apli cao ERP Prot heus.
Rot i n a Par met r os ATFA010 ( xAut oCab, xAut oI t ens, nOpcAut o) ATFA030 ( xAut oCab, nOpc) ATFA035 ( xAut oCab, nOpc) CFGX016 ( xAut oCab, xAut oI t ens) CTBA015 ( nOpcAut o, aAut o) CTBA016 ( nOpcAut o, aAut o) CTBA020 ( aRot Aut o, nOpcAut o, aRot I t em) CTBA102 ( xAut oCab, xAut oI t ens, nOpcAut o) CTBA270 ( xAut oCab, xAut oI t ens, nOpcAut o) FATA140 ( nOpcAut o, aAut o) FATA220 ( nOpcAut o, aAut oCab) FATA300 ( nOpcAut o, xAut oCab, xAut oAD2, xAut oAD3, xAut oAD4, xAut oAD9) FATA310 ( xAut oCab, xAut oI t ens, nOpcAut o) FATA320 ( xAut oVend, xAut oTask, xAut oCal end) FI NA01 0 ( aRot Aut o, nOpcAut o) FI NA04 0 ( aRot Aut o, nOpcAut o) FI NA05 0 ( aRot Aut o, nOpci on, nOpcAut o) FI NA07 0 ( xAut oCab, nOpc) FI NA08 0 ( xAut oCab, nOpc) FI NA39 0 ( nPosAr ot i na, xAut oCab, nOpcAut o) MATA0 40 ( aAut o, nOpcAut o) MATA0 80 ( aRot aut o, nOpcAut o) MATA1 03 ( xAut oCab, xAut oI t ens, nOpcAut o, l WhenGet , xAut oI mp) MATA1 05 ( xReser vCab, xReservI t ens, nOpcAut o) MATA1 10 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA1 16 A ( xAut oCab, xAut oI t ens, l I ncl ui) MATA1 20 ( nFuncao, xAut oCab, xAut oI t ens, nOpcAut o, ) MATA1 25 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA1 40 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA1 45 ( xAut oCab, xAut oI t , xAut oI t 2, nOpcAut o) MATA1 50 ( xAut oCab, xAut oI t ens, nOpcAut o)
- 605 -
ADVPL Compl et o
Rot i n a Par met r os MATA1 75 ( xRot Aut o, xOpcAut o) MATA1 85 ( xAut oSCP, xAut oSD3, nOpcAut o, xPerg) MATA2 00 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA2 30 ( aAut o, nOpcAut o) MATA2 41 ( xAut oCab, xAut oI t ens, nCall Opcx) MATA2 42 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA2 61 ( aAut oI t ens, nOpcAut o) MATA2 65 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA2 66 ( aAut oI t ens) MATA2 67 ( aAut oI t ens) MATA3 60 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA4 10 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA4 15 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA4 16 ( xAut oCab, xAut oI t ens) MATA4 90 ( xAut o, nOpcAut o) MATA6 85 ( xAut oCab, xAut oI t ens, nOpcAut o) MATA7 00 ( xAut o, nOpcAut o) MATA9 20 ( xAut oCab, xAut oI t ens, nOpcAut o) TMKA061 ( xAut oCab, xAut oI t ens, nOpcAut o) TMKA062 ( xAut oCab, xAut oI t ens, nOpcAut o) TMKA271 ( xAut oCab, xAut oI t ens, nOpcAut o) TMSA040 ( xAut oCab, xAut oI t ens, nOpcAut o) TMSA050 ( xAut oCab, xAut oI t ens, xI t ensPesM3, xI t ensEnder , nOpcAut o) TMSA170 ( xAut oCab, nOpcAut o) TMSA360 ( xAut oCab, xAut oI t ens, xAut oNFAva, nOpcAut o) TMSA430 ( cAli as, xAut oCab, xAut oVei , xAut oMot , nOpcAut o) TMSA440 ( xAut oCab, xAut oI t ens, nOpcAut o)
Quan do no ut i l i zar a f unci onal i dade MsEx ecAut o
Apesar de t odas as or i ent aes dos t pi cos ant eri or es exi st em si t uaes nas quai s no recomendado ut ili zar a funci onali dade MsExecAut o, no caso, em si t uaes para as quai s exi st em r ot i nas padres da apli cao ERP par a processament os de i nt egraes e at uali zaes que possuem t rat ament o para execuo di ret a ou execuo vi a Job.
Para est es casos a r ot i na j est pr- di spost a a execuo di ret a, no havendo a necessi dade de t rat ament o vi a MsExecAut o, ou o t rat ament o r eal i zado pel a rot i na o mai s adequado par a aquel e vol ume de dados.
O exempl o cl ssi co dest a si t uao para i mport ao de l anament os ou sal dos cont bei s. A apli cao ERP possui uma rot i na de int egrao denomi nada Cont abili zao TXT ( CTBA500) mas a rot i na de l anament os cont bei s ( CTBA102) pode ser execut ada at ravs da MsExecAut o.
Para i mport aes de sal dos e l anament os deve- se opt ar pel a ut ili zao da r ot i na de Cont abili zao TXT , devi do aos t rat ament os que a mesma permi t e at ravs das confi guraes da prpri a rot i na em conj unt o com as paramet ri zaes do mdul o. O uso da CTBA102 Laament os Cont bei s vi a MsExecAut o r ecomendado para r ot inas de manut eno ou funci onali dades especficas / mel hori as, com por exempl o o est orno de l anament os cont bei s sem a necessi dade de avali ar regras de cont abi li zao.
- 606 -
ADVPL Compl et o
41.1. Desenv ol v endo apl i caes com MsEx ecAut o
Est r ut u r a de uma r ot i na com ex ecuo de MsEx ecAut o
E Defi ni o das vari vei s de cont r ol e da MsExecAut o E Mont agem dos ar rays de par met ros E Defi ni o dos parmet r os especfi cos da r ot i na que ser execut ada E Cont rol e de t ransao E Trat ament o do sucesso ou no da operao
Var i v ei s de cont r ol e
E Pr i v at e l MsEr r oAut o I ndi ca de se houve er ro no fat al durant e a execuo.
E Pr i v at e l MsHel pAut o Habili t a a capt ura das mensagens de er ro.
E Pr i v at e l Aut oEr r NoFi l e Desabi li t a a gerao do arqui vo de l og padro do si st ema.
Mont agem dos ar r ay s de par met r os
E Ti pos de ar r ay s de par met r os:
Basi cament e uma MsExecAut o possui doi s t ipos de arrays de parmet r os: Array de Dados de Cabeal ho e Array de Dados de I t ens.
Os exempl os a segui r visam i lust rar a ut i lizao de cada uma dos t i pos de ar rays:
Cadast r o de cli ent es ( MATA030) : Est a rot i na at ualiza apenas os dados da t abel a SA1 Cadast r o de Cl i ent es, port ant o ser necessri o apenas um ar ray de dados cont endo as i nformaes que devero ser gravadas na t abel a SA1.
Document os de ent rada ( MATA103) : Est a r ot i na at uali za basi cament e os dados das t abel as SF1 Cabeal ho do Document o de Ent rada e SD1 I t ens do Document o de ent rada, port ant o ser o necessri os doi s arrays de dados cont endo as i nformaes do cabeal ho do document o de ent rada e dos i t ens do document o de ent rada, sendo que est e l t i mo t er sua est rut ura de cont edo repet i da para cada i t em do document o.
Avi so de Recebi ment o de Carga ( MATA145) : Est a rot i na at uali za basi cament e os dados das t abel as DB1 Avi so de Recebi ment o de Carga, DB2 Cabeal ho do document o recebi do e DB3 I t ens do document o recebi do, port ant o so necessri os t rs arr ay de dados cont endo as respect i vas informaes para as t abel as DB1, DB2 e DB3, sendo que as duas lt i mas t ero suas est r ut uras de cont edo r epet i das para cada document o r ecebi do.
- 607 -
ADVPL Compl et o
E Est r ut u r a dos ar r ay s de par met r os:
Ar r ay de dados do cabeal ho ( x Aut oCab) :
O ar ray cont endo os dados do cabeal ho compost o por: Campo, Cont edo e Vali dao.
Cada i t em dest e ar ray um dos campos da t abel a de cabeal ho das i nformaes que sero processadas pel a MsExecAut o. Com base nos exempl os ant eri or es, a MsExecAut o da MATA030 possui apenas um array de parmet ros no format o xAut oCab, sendo que a MATA103 ut ili zar o xAut oCab para a t abel a SF1 e a MATA145 para a t abel a DB1.
O array cont endo os dados dos i t ens t ambm compost o por: Campo, Cont edo e Vali dao; sendo que a di ferena est no fat o de que para cada i t em a ser t rat ado pel a MsExecAut o dever ser r epet i da e preenchi da a est rut ura do ar ray com as i nformaes do mesmo.
Com base nos exempl os ant eri or es, a MsExecAut o da MATA030 no possui um array de par met ros no format o xAut oI t ens, j a MATA103 ut ilizar o xAut oI t ens para a t abel a SD1 e a MATA145 ut ilizar doi s xAut oI t ens, sendo o pri mei ro para a t abel a DB2 e o segundo para a t abel a DB3.
E Mt odo de at r i bui o de cont e do Di r et o: O mt odo di ret o consi st e em at ri bui r di ret ament e na mont agem do arr ay de parmet r os o cont edo de cada campo que ser t rat ado pel a MsExecAut o.
Est e mt odo o mai s comum de ser ut ili zado dado sua prat i ci dade, e pel a possi bili dade do desenvol vedor especi fi car soment e os campos obri gat ri os para a t abel a e aquel es que cont ero as i nformaes geradas por sua apli cao.
E Mt odo de at r i bui o de cont e do pel a est r ut ur a: O mt odo de at ri bui o pel a est rut ura recomendvel em r ot i nas que efet uam a i mport ao das i nformaes at ravs da l ei t ura de arqui vos de dados, sej am el es CODEBASE ou vi a banco de dados.
Est e mt odo consi st e em comparar a est rut ura do arqui vo de ori gem ( a ser i mport ado) cont ra a do arqui vo de dest i no ( t rat ado pel a MsExecAut o) . Dest a forma os campos que for em coi nci dent es ent r e o arqui vo de ori gem e o arqui vo de dest i no sero pr eenchi dos com as i nformaes do arqui vo i mport ado, caso cont rri o os mesmos podero ser desconsi derados ou ser em pr eenchi dos com um cont edo padro.
Ex empl o:
// Captura a estrutura da tabela padro do sistema DbSelectArea("SN1") DbSetOrder(1) aStruSN1 := SN1->(DbStruct())
// Efetua a abertura do arquivo SN1 que ser importado cArqSN1:= cDirArq+"SN1IMP" IF File(cArqSN1+cFileExt) dbUseArea(.T.,,cArqSN1+cFileExt,"SN1IMP",.F.,.F.) IndRegua("SN1IMP",cArqSN1+OrdBagExt(),"N1_FILIAL+N1_CBASE+N1_ITEM",; ,,"Selecionando Registros...") ELSE HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN1IMP no existe."+; CRLF+"Verifique caminho informado.",1,0) RETURN ENDIF
// Efetua a leitura do arquivo a ser importado DbSelectArea("SN1IMP") DbGotop() WHILE SN1IMP->(!Eof())
// Efetua a montagem do xAutoCab com base nas estruturas dos // arquivos
FOR nX := 1 TO LEN(aStruSN1) IF SN1IMP->(FieldPos(aStruSN1[nX][1]))>0 DO CASE CASE EMPTY(SN1IMP->&(aStruSN1[nX][1])) AADD(xAutoCab,{aStruSN1[nX][1],; CRIAVAR(aStruSN1[nX][1]), NIL})
CASE aStruSN1[nX][2] == "C" AADD(xAutoCab,{aStruSN1[nX][1],; SN1IMP->&(aStruSN1[nX][1]),; "",aStruSN1[nX][3]), NIL})
CASE aStruSN1[nX][2] == "N" AADD(xAutoCab,{aStruSN1[nX][1],; ABS(SN1IMP->&(aStruSN1[nX][1])), NIL})
Def i ni o dos par met r os especf i cos da r ot i na que ser ex ecut ada
Est e pont o no qual o desenvol vedor i ncl ui os t rat ament os necessri os a cor r et a execuo da rot i na, al m de seus t rat ament os especfi cos, os quai s j ust i fi caram o desenvol vi ment o.
Ut ilizando o mesmo exempl o ant eri or da ATFA010 Cadast r o de At i vos podemos ci t ar doi s t rat ament os especfi cos necessri os para a corr et a execuo da MsExecAut o:
Chamada das per gu n t as da ATFA010 :
A execuo da funo Per gu nt e( ATFA01 0 , .F.) permi t e que sej a defi ni dos os cont edos desej ados para os parmet r os da rot i na de cadast r o conforme a necessi dade da apli cao, como por exempl o permi t i r a i ncl uso de uma chapa de bem em branco ou no efet uar a cont abi lizao da i ncl uso.
At u al i zao das v ar i av i s de memr i a do ALI AS M- > par a o SN1:
A execuo da funo RegToMemor y ( SN1 ,. T.) necessri a para a ut ili zao da funo CRI AVAR( ) no mt odo de at ri bui o pel a est rut ura.
Mui t as vezes uma est r ut ura que funci ona para um MsExecAut o pode no funci onar para out r o do mesmo t i po, devi do as car act erst i cas indi viduai s de cada r ot i na. Podemos ci t ar os segui nt es exempl os:
MATA1 03 ( Document o de Ent rada) : Para t rat ament o do t t ulo fi nancei ro a ser gerado pel a not a fi scal quando o parmet r o de at ualizao de fi nancei ro da TES est at i vado, deve ser i ncl udo o segui nt e i t em no ar ray xAut oCab:
{ " E2_NATUREZ " ,"NAT01" ,NI L} )
MATA6 50 ( Abert ura de ordem de produo) : Para que sej am geradas as ordens de produo i nt ermedi ri as na abert ura de uma ordem de pr oduo pri nci pal deve ser i ncl udo o segui nt e i t em no ar ray xAut oCab:
{ "AUTEXPLODE" ,"S" ,NI L} )
- 611 -
ADVPL Compl et o
Cont r ol e de t r an sao
A ut ili zao do cont rol e de t ransao permi t e garant i r a int egri dade das i nformaes gravadas pel o processament o.
Para ut ilizao do cont r ol e de t ransao na aplicao podem ser ut ili zados os segui nt es bl ocos de cont r ol e:
E Begi n Tr ansact i on . .. Di sar mTr ansact i on( ) ... End Tr an sact i on
Um bl oco de cdi go det ermi nado pel os comandos Begi n Transact i on ... End Transact i on t er suas i nformaes at ualizadas soment e se ant es do execuo do comando End Transact i on no for execut ada a funo Di sarmTransact i on( ) .
Dest a forma pode- se i mpl ement ar um cont rol e de t ransao por i t em processado, sendo execut ado o Di sarmTransact i on( ) para aquel e el ement o em que houve al gum probl ema de pr ocessament o.
Segui ndo est e mesmo r aci ocni o, caso ocorra um er ro fat al na apli cao, soment e o i t em que est em pr ocessament o ser desconsi derado, poi s a apl i cao ERP efet ua um Di sarTransact i on( ) aut omat i cament e, fechament o as t ransaes pendent es e rest aurando as si t uaes ant eri or es, mas apenas para aquel es processament o pr ot egi dos pel o bl oco de cont r ol e de t ransao.
O comando END TRANSACTI ON no pode t er sua i nt erpr et ao vi ncul ada a uma condi o. Nest es casos ocor rer um err o de compi l ao i ndi cando que o bl oco abert o pel o comando BEGI N TRANSACTI ON no foi cor r et ament e fechado.
E Begi nTr an ( ) . .. Di sar mTr an sact i on( ) ... En dTr an( )
As funes Begi nTran( ) e EndTran( ) vi sam permi t i r que o t rmi no da t ransao sej a condi ci onal , elimi nando a li mit ao da est rut ura BEGI N TRANSACTI ON ... END TRANSACTI ON.
IF lMsErroAuto DisarmTransaction() ELSE EndTran() ENDIF
MsUnlockAll()
Nest e model o de cont r ol e de t ransao r ecomendvel a ut ili zao da funo MsUnl ockAll ( ) para dest ravar t odos os regi st r os que est ej am event ual ment e t ravados.
- 613 -
ADVPL Compl et o
Tr at ament o de men sagens de er r o
Com a ut ili zao da funci onalidade MsExecAut o a apli cao ERP di sponi biliza di ver sos mt odos para vi suali zao e t rat ament o das mensagens de er ro ocor ri das durant e a execuo da r ot i na, sendo est es:
Vi suali zao do event o de er ro; Gravao do event o de er ro em arqui vo t ext o; Per sonal i zao da gravao do event o de er ro.
E Vi su al i zao do ev ent o de er r o
Para vi suali zao em t el a do event o de er ro ocor ri do durant e o pr ocessament o da rot i na vi a MsExecAut o deve- se ut ili zar a funo Most raEr ro( ) , conforme o exempl o:
IF lMsErroAuto MostraErro() DisarmTransaction() ENDIF
END TRANSACTION
O cont edo das vari vei s PRI VATE de cont rol e da MsExecAut o deve ser confi gurado conforme abai xo:
Pri vat e l MsHel pAut o : = .T. Pri vat e l Aut oEr rNoFil e : = .F.
- 614 -
ADVPL Compl et o
E Gr av ao do ev ent o de er r o em ar qu i v o t ex t o
Para gravao em arqui vo no format o t ext o do event o de er ro ocor r i do durant e o processament o da rot i na vi a MsExecAut o deve- se ut ili zar a funo Most raEr ro( ) , conforme o exempl o:
IF lMsErroAuto MostraErro(\system\) DisarmTransaction() ENDIF
END TRANSACTION
A funo Most raEr ro( ) possui o par met ro cPat h o qual pode ser i nfor mado de duas formas:
Apenas o di ret ri o: Se for i nformado apenas o di ret ri o ser gerado um arqui vo com denomi nao no format o SCxxxxxx.l og, aonde xxxxxx ser um nmero sequenci al gerado i nt ernament e pel o si st ema.
I nformando o di ret ri o e o nome do arqui vo: A funo i r respei t ar o nome do arqui vo i nformado, sobr escrendo o cont edo ant eri or.
Caso sej a necessri o gerar um ni co arqui vo t ext o cont endo t odos os event os de err o gerados pel os sucessi vos pr ocessament os da MsExecAut o, a funo Most raErr o( cPat h) dever ser chamada apenas uma vez, ao t rmi no do processament o da r ot i na.
I st o ocor re poi s a funo Most raErr o( ) li mpa o cache de event os de er ros cont r ol ado pel a MsExecAut o.
- 615 -
ADVPL Compl et o
E Per son al i zao da gr av ao do ev ent o de er r o
Para processament os mai s vol umosos, a ger ao de di ver sos arqui vos de t ext os ou at mesmo a gerao de um ni co arqui vo t ext o cont endo t odos os event os de er ro pode di fi cul t ar a anli se e cor r eo dos probl emas encont rados durant e o processament o.
Dest a forma possvel per sonal i zar a gravao do event o de err o, de forma que o mesmo sej a gerado em um arqui vo no format o .DBF, permi t i ndo o vncul o do regi st r o processado com a mensagem de er ro gerada.
/*/ +----------------------------------------------------------------------- | Funo | PROCATIVO | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | PROCESSAMENTO DA IMPORTACAO DO CADASTRO DE IMOBILIZADO | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
STATIC FUNCTION PROCATIVO(lEnd,oProcess)
Local aArea := GetArea() Local aDadosSN1 := {} Local aDadosSN3 := {} Local aDadosSF9 := {} Local aDadosTN1 := {} Local aDadosTN2 := {} Local aDadosTN3 := {} Local aItemSN3 := {} Local cArqSN1 := "" Local cArqSN2 := "" Local cArqSN3 := "" Local cArqSA2 := "" Local aStruSN1 := {} Local aStruSN2 := {} Local aStruSN3 := {} Local aStruSF9 := {} Local nX := 0 Local nTotRegs := 0 Local nProcRegs := 0 Local nPosDados := 0 Local cCodFor := "" Local cLojaFor := "" Local cDescFor := "" Local cFilAtu := cFilAnt Local cDirArq := Alltrim(MVParBox03) Local cHistorico := "" Local nX := 0 Local cFileExt := aTiposFile[MvParBox01] Local lImpSF9 := MvParBox07==1 Local lImpSNG := .F. // Ainda nao implementado Local cKeyImp := "" Local aAutoErro := {}
// Tratamentos adicionais - arquivos especificos do cliente Local cArqCTA := "" Local cArqSM2 := "" Local cIndSNG Local nIndex := 0 Local cGrupo := "" Local cContab := "" Local aEntSNG := {} Local cChapa := "000000"
// Compatibilizao para utilizao do CRIAVAR() REGTOMEMORY("SN1",.T.)
//Monstagem do array com dados sem tratamento e com as informao da IMP
FOR nX := 1 TO LEN(aStruSN1) IF SN1IMP->(FieldPos(aStruSN1[nX][1]))>0 DO CASE CASE EMPTY(SN1IMP->&(aStruSN1[nX][1])) AADD(aDadosSN1,{aStruSN1[nX][1],; CRIAVAR(aStruSN1[nX][1]), NIL}) CASE aStruSN1[nX][2] == "C" AADD(aDadosSN1,{aStruSN1[nX][1],; SN1IMP->&(aStruSN1[nX][1]),; "",aStruSN1[nX][3]), NIL}) CASE aStruSN1[nX][2] == "N" AADD(aDadosSN1,{aStruSN1[nX][1],; ABS(SN1IMP->&(aStruSN1[nX][1])), NIL}) OTHERWISE AADD(aDadosSN1,{aStruSN1[nX][1],; SN1IMP->&(aStruSN1[nX][1]), NIL}) ENDCASE ELSE AADD(aDadosSN1,{aStruSN1[nX][1], CRIAVAR(aStruSN1[nX][1]),; NIL}) ENDIF NEXT nX
// Alterao das informaes do array de acordo com a necessidade // AADD(aDadosTN1,{"CAMPO",CONTEUDO,"VALIDACAO"}) aDadosTN1 := {}
// ALTERACAO DO ARRAY ADADOSSN1 COM AS INFORMACOES TRABALHADAS E // ARMAZENADAS EM ADADOSTN1 // AADD(aDadosTN1,{"N1_XXXXXX" ,xConteudo ,Nil})
For nX := 1 TO LEN(aDadosTN1) IF (nPosField := aScan(aDadosSN1,{|aDadoSN1| aDadosSN1[1] ==; aDadosTN1[nX][1]})) > 0 aDadosSN1[nPosField][2] := aDadosTN1[nX][2] aDadosSN1[nPosField][3] := aDadosTN1[nX][3] ENDIF Next nX
- 622 -
ADVPL Compl et o
Continuao:
IF SN1->(DbSeek(aDadosSN1[1][2]+aDadosSN1[2][2]+aDadosSN1[3][2])) ConOut("Registro j importado: "+; aDadosSN1[1][2]+"/"+aDadosSN1[2][2]+"/"+aDadosSN1[3][2]) ConOut("Registros importados com sucesso: "+CValToChar(nProcRegs)) SN1IMP->(dbSkip()) Loop ENDIF
SN3IMP->(DbSeek(SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM))) While SN3IMP->(!Eof()) .AND. SN3IMP->(N3_FILIAL+N3_CBASE+N3_ITEM) ==; SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)
aItensSN3 := {}
// Monstagem do array com dados sem tratamento e com as informaes
FOR nX := 1 TO LEN(aStruSN3) IF SN3IMP->(FieldPos(aStruSN3[nX][1]))>0 DO CASE CASE EMPTY(SN3IMP->&(aStruSN3[nX][1])) AADD(aItensSN3,{aStruSN3[nX][1],; CRIAVAR(aStruSN3[nX][1]), NIL}) CASE aStruSN3[nX][2] == "C" AADD(aItensSN3,{aStruSN3[nX][1],; SN3IMP->&(aStruSN3[nX][1]),; aStruSN3[nX][3]), NIL}) CASE aStruSN3[nX][2] == "N" AADD(aItensSN3,{aStruSN3[nX][1],; ABS(SN3IMP->&(aStruSN3[nX][1])),; ".T."})
// TRATAMENTO DA CARGA DO CIAP IF lImpSF9 IATFCIAP(aStruSF9,aDadosSF9) ENDIF
ConOut("Registros importados com sucesso: "+; CValToChar(nProcRegs))
ENDIF End Transaction
- 624 -
ADVPL Compl et o
Continuao:
ENDIF
SN1IMP->(DbSkip()) Enddo
oProcess:IncRegua1("Processamento finalizado")
DbSelectArea("SN1IMP") DbCloseArea() IF File(cArqSN1+OrdBagExt()) FErase(cArqSN1+OrdBagExt()) ENDIF
DbSelectArea("SN2IMP") DbCloseArea() IF File(cArqSN2+OrdBagExt()) FErase(cArqSN2+OrdBagExt()) ENDIF
DbSelectArea("SN3IMP") DbCloseArea() IF File(cArqSN3+OrdBagExt()) FErase(cArqSN3+OrdBagExt()) ENDIF
IF lImpSF9 DbSelectArea("SF9IMP") DbCloseArea() IF File(cArqSF9+OrdBagExt()) FErase(cArqSF9+OrdBagExt()) ENDIF ENDIF
IF lImpSNG DbSelectArea("SNGIMP") DbCloseArea() IF File(cIndSNG+OrdBagExt()) FErase(cIndSNG+OrdBagExt()) ENDIF ENDIF
DbSelectArea("CTAIMP") DbCloseArea() IF File(cArqCTA+OrdBagExt()) FErase(cArqCTA+OrdBagExt()) ENDIF
DbSelectArea("SM2IMP") DbCloseArea() IF File(cArqSM2+OrdBagExt()) FErase(cArqSM2+OrdBagExt()) ENDIF
- 625 -
ADVPL Compl et o
Continuao:
DbSelectArea("LOGIMP") DbCloseArea()
ConOut("Total de registros importados: "+CValToChar(nProcRegs)) ConOut("Trmino da importao: "+Time())
cFilAnt := cFilAtu RestArea(aArea) RETURN
/*/ +----------------------------------------------------------------------- | Funo | CT001PARBX | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | TELA DE PARAMETROS ESPECIFICOS DA ROTINA CUSTOMIZADA | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
STATIC FUNCTION IC001PARBX()
LOCAL aParamBox := {} LOCAL cTitulo := "Importacao de cadastros" LOCAL aRet := {} LOCAL bOk := {|| .T.} LOCAL aButtons := {} LOCAL lCentered := .T. LOCAL nPosx LOCAL nPosy LOCAL cLoad := "" LOCAL lCanSave := .T. LOCAL lUserSave := .T. LOCAL nX := 0 LOCAL lRet := .F.
IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox) For nX := 1 to Len(aParamBox) If aParamBox[nX][1] == 1 &("MvParBox"+StrZero(nX,2)) := aRet[nX] ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C" &("MvParBox"+StrZero(nX,2)) := aScan(aParamBox[nX][4],; {|x| Alltrim(x) == aRet[nX]}) ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N" &("MvParBox"+StrZero(nX,2)) := aRet[nX] Endif Next nX ENDIF
RETURN lRet
/*/ +----------------------------------------------------------------------- | Funo | IATFCIAP | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | IMPORTACAO DO LIVRO FISCAL CIAP | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/ STATIC FUNCTION IATFCIAP(aStruSF9,aDadosSF9) Local aDadosCIAP := {} Local nX := 0 Local nPosSF9 := 0
// Monta array com dados padres do SF9 de acordo com o SX3 FOR nX := 1 to Len(aStruSF9) AADD(aDadosCIAP,{aStruSF9[nX][1],CRIAVAR(aStruSF9[nX][1]),NIL}) NEXT nX
// Atualiza dados do array com as informaes presentes no SN1 FOR nX := 1 to Len(aDadosSF9) IF (nPosSF9 := aScan(aDadosCIAP,{|aLinhaCIAP| aLinhaCIAP[1] == aDadosSF9[nX][1]})) > 0 aDadosCIAP[nPosSF9][2] := aDadosSF9[nX][2] ENDIF NEXT nX
ConOut("Iniciando MsExecAuto - ATFCIAP: "+Time()) lMsErroAuto := .F. MSExecAuto({|x,y| U_ATFCIAP(x,y)},aDadosCIAP,3) // Dados e Opo ConOut("Finalizada MsExecAuto - ATFCIAP: "+Time())
RETURN lMsErroAuto
- 627 -
ADVPL Compl et o
Continuao:
/*/ +----------------------------------------------------------------------- | Funo | XDBFLOG | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | CRIACAO DO ARQUIVO DBF PARA TRATAMENTO DOS EVENTOS DE ERR| +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/ STATIC FUNCTION XDBFLOG() LOCAL aCampos := {} LOCAL cArqLog := MVParBox06+"LOGIMP"+GetDbExtension()
/*/ +----------------------------------------------------------------------- | Funo | XCONVERRLOG | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | CONVERTE O ARRAY AAUTOERRO EM TEXTO CONTINUO. | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
STATIC FUNCTION XCONVERRLOG(aAutoErro)
LOCAL cRet := "" LOCAL nX := 1
FOR nX := 1 to Len(aAutoErro) cRet += aAutoErro[nX]+CHR(13)+CHR(10) NEXT nX
RETURN cRet
- 629 -
ADVPL Compl et o
42. Recur sos de env i o de e- mai l
Nest e t pi co ser o descri t as as funes da l i nguagem ADVPL que per mi t em o envi o e o recebi ment o de mensagens at ravs de e- mai l s.
Funes par a man i pu l ao de e- mai l s
CALLPROC MAI LSMTPON MAI LPOPON MAI LSMTPOFF MAI LPOPOFF MAI LRECEI VE MAI LAUTH POPMSGCOUNT MAI LSEND MAI LGETERR
Det al h ament o das f u nes de man i pu l ao de e- mai l s
CALLPROC( )
Mt odo do obj et o oRpcSrv que permi t e a ut ilizao de t odas as funes de envi o e recebi ment o de e- mail descri t as nest e t pi co.
E Si nt ax e: Cal l Pr oc( cFu ncao, x Par am1, ..., x Par amN)
E Par met r os:
cFuncao Nome da funo ou mt odo do obj et o oRpcSrv que ser execut ado. x Par amN Parmet r os da funo ou mt odo que ser execut ado.
E Ret or no:
Nen hum .
- 630 -
ADVPL Compl et o
MAI LSMTPON( )
At i va uma conexo com o servi o de SMTP para a t hread at i va.
E Si nt ax e: Mai l Smt pOn ( cSer v er , cUser , cPass, nTi meOut )
E Si nt ax e cl ssi ca:
CONNECT SMTP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN SERVER oRpcSrv RESULT lResult
E Par met r os:
Cser v er Endereo do servi dor para conexo Cuser Nome do usuri o para aut ent i cao no servi dor. CPass Senha do usuri o para aut ent i cao no servi dor. NTi meOut Tempo de espera para operao de aut ent i cao.
E Ret or no:
Lgi co I ndi ca se foi real i zada com sucesso a conexo com o ser vi dor i ndi cado.
MAI LPOPON( )
At i va uma conexo com o servi o de POP para a t hread at i va. - > l Ret urn
E Si nt ax e: Mai l PopOn ( cSer v er , cUser , cPass, nTi meOut )
E Si nt ax e cl ssi ca:
CONNECT POP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN SERVER oRpcSrv RESULT lResult
E Par met r os:
Cser v er Endereo do servi dor para conexo Cuser Nome do usuri o para aut ent i cao no servi dor. CPass Senha do usuri o para aut ent i cao no servi dor. NTi meOut Tempo de espera para operao de aut ent i cao.
E Ret or no:
Lgi co I ndi ca se foi real i zada com sucesso a conexo com o ser vi dor i ndi cado.
- 631 -
ADVPL Compl et o
MAI LSMTPOFF( )
Encer ra a conexo com o servi o de SMTP.
E Si nt ax e: Mai l Smt pOf f ( )
E Si nt ax e cl ssi ca:
DISCONNECT SMTP SERVER IN SERVER oRpcSrv RESULT lResult
E Par met r os:
Nen hum .
E Ret or no:
Lgi co I ndi ca se a operao foi r eali zada com sucesso.
MAI LPOPOFF( )
Encer ra a conexo com o servi o de POP
E Si nt ax e: Mai l PopOf f ( )
E Si nt ax e cl ssi ca:
DISCONNECT POP SERVER IN SERVER oRpcSrv RESULT lResult
E Par met r os:
Nen hum .
E Ret or no:
Lgi co I ndi ca se a operao foi r eali zada com sucesso.
- 632 -
ADVPL Compl et o
MAI LRECEI VE( )
Efet ua o r ecebi ment o de um e- mail , sal vando- o no l ocal defi ni do.
E Si nt ax e: Mai l Recei v e( nNumber , @cFr om, @cTo, @cCc, @cBcc, @cSubj ect , @cBody , @aFi l es, cPat h, l Del et e)
E Si nt ax e cl ssi ca:
RECEIVE MAIL MESSAGE nNumber FROM cFrom TO cTo CC cCc BCC cBcc SUBJECT cSubject BODY cBody ATTACHMENT aFiles SAVE IN cPath DELETE IN SERVER oRpcSrv RESULT lResult
E Par met r os:
nNumber Nmer o da mensagem que dever ser recebi da. Est e nmer o em funo da quant i dade de mensagens na cai xa de e- mai l s. cFr om Vari vel l ocal do font e que ser at uali zada com o r emet ent e da mensagem. cTo Vari vel l ocal do font e que ser at uali zada com o dest i nat ri o da mensagem. cCc Vari vel l ocal do font e que ser at uali zada com a cont a copi ada na mensagem. cBcc Vari vel l ocal do font e que ser at uali zada com a cont a copi ada em cpi a ocul t a na mensagem. cSubj ect Vari vel l ocal do font e que ser at uali zada com o assunt o da mensagem. cBody Vari vel l ocal do font e que ser at uali zada com corpo da mensagem. aFi l es Vari vel l ocal do font e que ser at uali zada os nomes dos anexos da mensagem. cPat h Di ret ri o no qual sero sal vos os anexos da mensagem. l Del et e I ndi ca se a mensagem dever ser apagada do servi dor de e- mai l s aps sua recepo pel a apli cao.
E Ret or no:
Lgi co I ndi ca se a oper ao de recebi ment o de mensagens foi real i zada com sucesso.
- 633 -
ADVPL Compl et o
MAI LAUTH( )
Funo que execut a a aut ent i cao do usuri o no ser vi o at i vo.
E Si nt ax e: Mai l Aut h( cUser , cPassw or d)
E Par met r os:
cUser Nome do usuri o para vali dao da conexo com o servi dor. cPassw or d Senha do usuri o para vali dao da conexo com o servi dor.
E Ret or no:
Lgi co I ndi ca se foi real i zada a aut ent i cao do usuri o com sucesso.
A funo Mail Aut h( ) dever ser ut ilizada obri gat ori ament e aps a abert ura da conexo com o servi dor , sej a el e de envi o ou recebi ment o de mensagens.
Para val i dao da conexo sempr e efet ue a veri fi cao com o usuri o cont endo o ender eo compl et o do e- mai l , e caso necessri o soment e com o usuri o, eli mi nando o r est ant e do ender eo aps o caract er e @ .
l Resul t : = Mail Aut h( All t ri m( cEmail ) , All t ri m( cPass) ) / / Se nao consegui u fazer a Aut ent i cacao usando o E- mai l compl et o, t ent a / / fazer a aut ent i cacao usando apenas o nome de usuari o do E- mail . I f ! l Resul t nA : = At ( "@", cEmai l ) cUser : = I f( nA> 0,Subs( cEmai l,1,nA- 1) ,cEmail ) l Resul t : = Mail Aut h( All t ri m( cUser) , Al l t ri m( cPass) ) Endi f
- 634 -
ADVPL Compl et o
POPMSGCOUNT( )
Veri fi ca quant as mensagens exi st em na cai xa de ent rada do servi o POP at i vo.
E Si nt ax e: PopMsgCoun t ( @nMsgCount )
E Si nt ax e cl ssi ca:
POP MESSAGE COUNT nMsgCount IN SERVER oRpcSrv RESULT lResult
E Par met r os:
nMsgCount Vari vel l ocal do font e que ser at uali zada com a quant i dade de mensagens di sponvei s para r ecebi ment o na cai xa de e- mail s.
E Ret or no:
Lgi co I ndi ca se foi real i zado o acesso a cai xa de mensagens.
MAI LSEND( )
Envi a um e- mail ut ili zando a servi o de SMTP at i vo.
E Si nt ax e: Mai l Sen d( cFr om, aTo, aCc, aBcc, cSubj ect , cBody , aFi l es, l Tex t )
E Si nt ax e cl ssi ca:
SEND MAIL FROM cFrom TO aTo,... CC aCc,... BCC aBcc,... SUBJECT cSubject BODY cBody FORMAT TEXT ATTACHMENT aFiles,... IN SERVER oRpcSrv RESULT lResult
E Par met r os:
cFr om Endereo de e- mai l do rement e da mensagem. aTo Array cont endo os endereos de e- mai l s dos dest i nat ri os da mensagem. aCc Array cont endo os endereos de e- mai l s dos copi ados na mensagem. aBcc Array cont endo os ender eos de e- mai l s dos copi ados de forma ocult a na mensagem. cSubj ect Text o de assunt o do e- mail . cBody Text o da mensagem do e- mail . aFi l es Array cont endo os nomes dos arqui vos que ser o anexados a mensagem. l Tex t I ndi ca se o corpo do e- mail est em format o t ext o.
E Ret or no:
Lgi co I ndi ca se a operao de envi o de mensagens foi r eali zada com sucesso.
- 635 -
ADVPL Compl et o
MAI LGETERR( )
Ret orna o err o que ocor reu no envi o do e- mail .
E Si nt ax e: Mai l Get Er r ( )
E Si nt ax e cl ssi ca:
GET MAIL ERROR cErrorMsg IN SERVER oRpcSrv
E Par met r os:
Nen hum .
E Ret or no:
Car act er Mensagem de er r o ocor ri da no pr ocessament o do envi o ou r ecebi ment o dos e- mail s.
Ex empl os de ut i l i zao das f u nci onal i dades de env i o e r ecebi ment o de e- mai l
Env i o de mensagens ut i l i zando si nt ax e cl ssi ca
/*/ +----------------------------------------------------------------------- | Funo | SENDMAIL | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | ENVIO DE E-MAIL GENERICO | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION SendMail(_lJob)
Local lResulConn := .T. Local lResulSend := .T. Local cError := ""
Local cServer := AllTrim(GetMV("MV_RELSERV")) Local cEmail := AllTrim(GetMV("MV_RELACNT")) Local cPass := AllTrim(GetMV("MV_RELPSW")) Local lRelauth := GetMv("MV_RELAUTH")
Local cDe := cEmail Local cPara := "arnaldojr@microsiga.com.br"
- 636 -
ADVPL Compl et o
Continuao:
Local cCc := "" Local cAssunto := "Teste de envio de e-mail: Curso ADVPL" Local cAnexo := "\SYSTEM\lgrl99.bmp" Local cMsg := Space(200)
Default _lJob := .T.
cMsg := "--------------------------------------------------" cMsg += "CURSO DE ADVPL " cMsg += "--------------------------------------------------" cMsg += "Voc est recebendo um e-mail do curso de ADVPL avanado"
CONNECT SMTP SERVER cServer ACCOUNT cEmail PASSWORD cPass RESULT lResulConn
If !lResulConn GET MAIL ERROR cError If _lJob ConOut(Padc("Falha na conexao "+cError,80)) Else MsgAlert("Falha na conexao "+cError) Endif Return(.F.) Endif
// Sintaxe: SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg ATTACHMENT cAnexo RESULT lResulSend // Todos os e-mail tero: De, Para, Assunto e Mensagem, porm precisa analisar se tem: Com Cpia e/ou Anexo
If lRelauth lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass)) //Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta fazer a autenticacao usando apenas o nome de usuario do E-mail If !lResult nA := At("@",cEmail) cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail) lResult := MailAuth(Alltrim(cUser), Alltrim(cPass)) Endif
Endif
If lResult If Empty(cCc) .And. Empty(cAnexo) SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg RESULT lResulSend Else If Empty(cCc) .And. !Empty(cAnexo) SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg ATTACHMENT cAnexo RESULT lResulSend ElseIf !Empty(cCc) .And. !Empty(cAnexo) SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg ATTACHMENT cAnexo RESULT lResulSend ElseIf Empty(cCc) .And. Empty(cAnexo) SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg RESULT lResulSend Endif Endif
- 637 -
ADVPL Compl et o
Continuao:
If !lResulSend GET MAIL ERROR cError If _lJob ConOut(Padc("Falha no Envio do e-mail "+cError,80)) Else MsgAlert("Falha no Envio do e-mail " + cError) Endif Endif
Else
If _lJob ConOut(Padc("Falha na autenticao do e-mail: "+cError,80)) Else MsgAlert("Falha na autenticao do e-mail:" + cError) Endif
Endif
DISCONNECT SMTP SERVER
IF lResulSend If _lJob ConOut(Padc("E-mail enviado com sucesso",80)) Else MsgInfo("E-mail enviado com sucesso" + cError) Endif ENDIF
/*/ +----------------------------------------------------------------------- | Funo | SENDMAIL | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | ENVIO DE E-MAIL GENERICO | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION FSendMail(_lJob)
Local lResulConn := .T. Local lResulSend := .T. Local lResult := .T. Local cError := ""
Local cServer := AllTrim(GetMV("MV_RELSERV")) Local cEmail := AllTrim(GetMV("MV_RELACNT")) Local cPass := AllTrim(GetMV("MV_RELPSW")) Local lRelauth := GetMv("MV_RELAUTH")
Local cDe := cEmail Local cPara := "arnaldojr@microsiga.com.br" Local cCc := "" Local cBcc := "" Local cAssunto := "Teste de envio de e-mail: Curso ADVPL" Local cAnexo := "\SYSTEM\lgrl99.bmp" Local cMsg := Space(200)
Default _lJob := .F.
cMsg := "--------------------------------------------------" cMsg += "CURSO DE ADVPL " cMsg += "--------------------------------------------------" cMsg += "Voc est recebendo um e-mail do curso de ADVPL avanado"
//CONNECT SMTP SERVER cServer ACCOUNT cEmail PASSWORD cPass RESULT lResulConn lResulConn := MailSmtpOn( cServer, cEmail, cPass)
If !lResulConn //GET MAIL ERROR cError cError := MailGetErr() If _lJob ConOut(Padc("Falha na conexao "+cError,80)) Else MsgAlert("Falha na conexao "+cError) Endif Return(.F.) Endif
- 639 -
ADVPL Compl et o
Continuao:
// Sintaxe: SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg ATTACHMENT cAnexo RESULT lResulSend // Todos os e-mail tero: De, Para, Assunto e Mensagem, porm precisa analisar se tem: Com Cpia e/ou Anexo
If lRelauth lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass)) //Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta fazer a autenticacao usando apenas o nome de usuario do E-mail If !lResult nA := At("@",cEmail) cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail) lResult := MailAuth(Alltrim(cUser), Alltrim(cPass)) Endif
Endif
If lResult
/* If Empty(cCc) .And. Empty(cAnexo) SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg RESULT lResulSend Else If Empty(cCc) .And. !Empty(cAnexo) SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg ATTACHMENT cAnexo RESULT lResulSend ElseIf !Empty(cCc) .And. !Empty(cAnexo) SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg ATTACHMENT cAnexo RESULT lResulSend ElseIf Empty(cCc) .And. Empty(cAnexo) SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg RESULT lResulSend Endif Endif */
If !lResulSend //GET MAIL ERROR cError cError := MailGetErr() If _lJob ConOut(Padc("Falha no Envio do e-mail "+cError,80)) Else MsgAlert("Falha no Envio do e-mail " + cError) Endif Endif
Else If _lJob ConOut(Padc("Falha na autenticao do e-mail: "+cError,80)) Else MsgAlert("Falha na autenticao do e-mail:" + cError) Endif Endif
Continuao:
- 640 -
ADVPL Compl et o
//DISCONNECT SMTP SERVER MailSmtpOff()
IF lResulSend If _lJob ConOut(Padc("E-mail enviado com sucesso",80)) Else MsgInfo("E-mail enviado com sucesso" + cError) Endif ENDIF
RETURN lResulSend
- 641 -
ADVPL Compl et o
Recebi ment o de men sagen s ut i l i zando f u n es
/*/ +----------------------------------------------------------------------- | Funo | POPMAIL | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | RECEBIMENTO DE E-MAIL GENERICO | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
USER FUNCTION FPopMail(_lJob)
Local lResulConn := .T. Local lResulPop := .T. Local lResult := .T. Local cError := ""
Local cServer := AllTrim(GetMV("MV_RELSERV")) Local cEmail := AllTrim(GetMV("MV_RELACNT")) Local cPass := AllTrim(GetMV("MV_RELPSW")) Local lRelauth := GetMv("MV_RELAUTH")
Local cDe := "" Local cPara := "" Local cCc := "" Local cBcc := "" Local cAssunto := "" Local aAnexo := {} Local cMsg := "" Local cPath := "\MailBox" Local nMsgCount:= 0 Local nNumber := 0
If !lResulConn cError := MailGetErr() If _lJob ConOut(Padc("Falha na conexao "+cError,80)) Else MsgAlert("Falha na conexao "+cError) Endif Return(.F.) Endif
- 642 -
ADVPL Compl et o
Continuao:
/*If lRelauth lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass)) // Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta // fazer a autenticacao usando apenas o nome de usuario do E-mail If !lResult nA := At("@",cEmail) cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail) lResult := MailAuth(Alltrim(cUser), Alltrim(cPass)) Endif
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
If _lJob ConOut(Padc("Falha na autenticao do e-mail: "+cError,80)) Else MsgAlert("Falha na autenticao do e-mail:" + cError) Endif
Endif
MailPopOff()
- 643 -
ADVPL Compl et o
Continuao:
IF lResulPop If _lJob ConOut(Padc("E-mails recebidos com sucesso",80)) Else MsgInfo("E-mail recebidos com sucesso" + cError) Endif ENDIF
RETURN lResulPop
43. I nt egr ao bsi ca com MsOf f i ce
43.1. Ex por t ao par a EXCEL
A funci onali dade bsi ca de export ao de i nfor maes para o Mi cr osoft Excel ut ili za a funo Dl gToExcel ( ) , a qual permi t e que as informaes em format os de ar ray sej am geradas em uma pl anilha.
DLGTOEXCEL( )
Reali za a export ao das i nformaes do ambi ent e Prot heus em format o de ar rays para uma pl anilha do Mi crosoft Excel .
E Si nt ax e: Dl gToEx cel ( cOr i gem, cTi t ul o, aDadosCab, aDadosI t en s)
E Par met r os:
cOr i gem Cont edo fi xo defi ni do como: GETDADOS cTi t ul o Nome par a exi bi o da pl anilha aDadosCab Array cont endo os nomes dos campos que sero exi bidos na pl anil ha. aDadosI t ens Array cont endo as i nformaes dos campos, de acordo com a ordem do array de cabeal ho.
E Ret or no:
Nen hum .
Na export ao das i nfor maes par a o Mi crosoft Excel deve- se at ent ar para as col unas que possurem informaes al fanumri cas mas que cont m apenas nmeros. Para que est as col unas sej am exi bi das cor ret ament e deve ser acr escent ado um caract er especi al no i nci o da st ri ng de forma que o Mi crosoft Excel as reconhea como t ext o e no como numri cas.
- 644 -
ADVPL Compl et o
Ex empl o de ex por t ao par a o Mi cr osof t Ex cel ut i l i zando a f u no Dl gToEx cel ( )
#include "protheus.ch"
/*/ +----------------------------------------------------------------------- | Funo | GExpExcel | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Descrio | EXPORTACAO PARA EXCEL GENERICO | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
MsgRun("Favor Aguardar.....", "Selecionando os Registros",; {|| GProcItens(aCabExcel, @aItensExcel)})
MsgRun("Favor Aguardar.....", "Exportando os Registros para o Excel",; {||DlgToExcel({{"GETDADOS",; "POSIO DE TTULOS DE VENDOR NO PERODO",; aCabExcel,aItensExcel}})})
Return
/*/ +----------------------------------------------------------------------- | Funo | GProcItens | Autor | Arnaldo R. Junior | Data | | +----------------------------------------------------------------------- | Uso | Curso ADVPL | +----------------------------------------------------------------------- /*/
Static Function GProcItens(aHeader, aCols)
Local aItem Local nX
DbSelectArea("SA1") DbSetOrder(1) DbGotop()
- 645 -
ADVPL Compl et o
Continuao:
While SA1->(!EOF())
aItem := Array(Len(aHeader))
For nX := 1 to Len(aHeader) IF aHeader[nX][2] == "C" aItem[nX] := CHR(160)+SA1->&(aHeader[nX][1]) ELSE aItem[nX] := SA1->&(aHeader[nX][1]) ENDIF Next nX
AADD(aCols,aItem) aItem := {} SA1->(dbSkip())
End
Return
- 646 -
ADVPL Compl et o
APNDI CES
Rel ao de i magens par a apl i caes vi suai s
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
- 647 -
ADVPL Compl et o
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
- 648 -
ADVPL Compl et o
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
- 649 -
ADVPL Compl et o
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
FRI 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
- 650 -
ADVPL Compl et o
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
- 651 -
ADVPL Compl et o
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
- 652 -
ADVPL Compl et o
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
- 653 -
ADVPL Compl et o
DOWN
GOTOP
I NVERTSELECTI ON
GOBOTTOM
- 654 -
ADVPL Compl et o
LI STAS DE EXERC CI OS
01 I mpl ement ar a cl asse Al uno com os mt odos New( ) , I nscrever( ) e Aval iar( ) .
02 Desenvol ver um di l ogo para i nt eragi r com a cl asse Al uno desenvol vi da no exer cci o ant eri or.
03 I mpl ement ar uma Enchoi ce para o cadast ro de produt os ( SB1) .
- 655 -
ADVPL Compl et o
04 Convert er o cadast ro desenvol vi do no exer ccio ant eri or para que o mesmo ut ili ze o obj et o MsMGet ( ) .
05 Desenvol ver uma i nt erface de cadast r o que combi ne os obj et os MsMGet e MsNewGet Dados causando o efei t o de uma Model o3( ) .
06 Adi ci onar na i nt erface de cadast r o desenvol vida no exer cci o ant erior uma Enchoi ceBar( ) com um bot o defi ni do pel o usuri o que exi ba o AxCadast ro de um i t em ut ili zado na int er face.
07 Convert er o font e DI ALOG_OBJETOS.PRW para si nt axe ori ent ada obj et os.
- 656 -
ADVPL Compl et o
08 Desenvol ver uma MaWndBrowse ut ili zando um arqui vo t emporri o.
09 I mpl ement ar uma funci onalidade com ml t ipl os TwBr owses que permi t a pesqui sar cl i ent es e vi sualizar os t t ul os a r eceber dos mesmos.
10 I mpl ement ar um obj et o TFol der para mont ar um r odap para uma i nt er face que cont enha MsMGet ( ) e MsNewGet Dados( ) .
11 I mpl ement ar a MsAdvSi ze( ) e MsObj Si ze( ) no font e desenvol vi do no exercci o ant eri or.
- 657 -
ADVPL Compl et o
12 Desenvol ver uma MaWndBrowse ut ilizando um Ali as gerado pel a funo TcGenQry( ) .
13 Desenvol ver uma MaWndBrowse ut ilizando um Ali as gerado pel a funo TcGenQry( ) para um banco de dados ext erno a apli cao ERP.
14 Desenvol ver uma aplicao que execut e a St ored Procedure padro de reprocessament o de sal dos cont bei s.
15 I mpl ement ar no font e WndSql Conn desenvol vi do ant eri orment e as funes TcI ncl ui ( ) , TcAl t era( ) , TcExcl ui ( ) com o uso das funes TEnchoi ce( ) e TcSql Exec( ) .
- 658 -
ADVPL Compl et o
16 I mpl ement ar uma funo que real i ze o envi o de um t ext o si mpl es para uma cont a de e- mai l @t ot vs, que permi t a sua fci l i dent i fi cao.
17 I mpl ement ar uma rot i na que r eal i ze o r ecebi ment o do e- mai l envi ado ant eri orment e para a cont a de e- mai l @t ot vs.
18 I mpl ement ar uma rot i na aut omt i ca para gravar as i nformaes no cadast ro de cl i ent es ( MATA030) .
- 659 -
ADVPL Compl et o
Pr oj et o: Av al i ao pr t i ca do t r ei nament o de ADVPL Avanado
Obj et ivos do proj et o
E Contemplar o contedo do curso e estimular a prtica da programao utilizando a linguagem ADVPL;
E Acrescentar um grau de desafio ao treinamento;
Regras para ent rega e apresent ao
E Dever ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos necessrios. A avaliao do projeto ser realizada aps a entrega, no prazo estabelecido pelo instrutor;
E Pode ser realizado em grupos de at 03 pessoas. Caso existam alunos sem grupos, estes podero integrar equipes j formadas com o total de membros estabelecido, mediante aprovao do instrutor;
Avaliao do proj et o
E Mesmo peso da prova terica, podendo substitu-la integralmente. E Sero considerados os quesitos: O Funcionalidades O Clareza da programao O Apresentao O Otimizao de tcnicas e recursos apresentados no treinamento
Funcionalidades que compe o proj et o
Desenvolver uma aplicao utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:
Pr oj et o 01
Desenvol ver uma apli cao de cadast ro ut ili zando a cl asse Al uno e os mt odos di sponvei s para a mesma.
Pr oj et o 02
Convert er os font es do pacot e de ofi ci na de programao para ori ent ao a obj et os.
Pr oj et o 03
I mpl ement ar uma apl icao ADVPL que consult e e at uali ze dados em um banco de i nt erface ext er no ao Pr ot heus.
- 660 -
ADVPL Compl et o
REFERNCI AS BI BLI OGRFI CAS
Ref er nci as bi bl i ogr f i cas
Gest o empresarial com ERP Ernesto Haberkorn, 2006
Pr ogr amao Or i ent ada a Obj et os com C + + I van Lui z Marques Ri car t e, 1996
Modelagem e Proj et os baseados em obj et os James Rumbaugh, 1994 11. Edio
Programao or ient ada obj et os no FiveWin Gilmer FiveWin Brasil
Oficina de Progr amao Robson Luiz Estefani Gonalves
Apost ila de Treinament o - TReport Tnia Bronzeri
Apost ila de Treinament o - ADVPL Educao corporativa
Apost ila de Treinament o Boas Prt icas de Progr amao Inteligncia Protheus e Fbrica de Software
DEM Document ao Elet rnica Microsiga Microsiga Software S.A.
Mat eriais diversos de colaboradores Microsiga Colaboradores Microsiga
Col abor ador es
Reviso 01 Dat a: 04.2008 Arnal do Raymundo Junior CSA Lui s Aki ra Tamura Educao Corporat i va Mrci a Sat i ko Sasaki Tokura ACR- N1_FRAMEW1 Pat ri ci a Lopes Legas Educao Corporat i va Robson Lui z Est efani Gonal ves Fbri ca de Soft war e Srgi o Sueo Fuzi naka I nt el i gnci a Prot heus
Modelagem Numérica e Computacional com Similitude e Elementos Finitos: Desenvolvimento de Equação Preditiva para o Cálculo da Força de Retenção em Freios de Estampagem