Amm advpl - 01 básico-rev01 2

225
Educação Corporativa Introdução à programação e ADVPL básico (Capacitação Interna) Matriz – Av. Braz Leme, 1.717 – 02511-000 – São Paulo – SP – Brasil. Tel.: 55 (11) 3981-7001 www.microsiga.com.br

description

Apostila de introducao a programacao ADVPL

Transcript of Amm advpl - 01 básico-rev01 2

  • 1. Educao Corporativa Introduo programao e ADVPL bsico (Capacitao Interna) Matriz Av. Braz Leme, 1.717 02511-000 So Paulo SP Brasil. Tel.: 55 (11) 3981-7001 www.microsiga.com.br

2. - 2 - Introduo programao e ADVPL Bsico ESTRUTURA DO TREINAMENTO OBJETIVOS DO CURSO................................................................................................................................. 6 MDULO 01: Introduo programao...................................................................................................... 7 1. Lgica de Programao e Algoritmos .................................................................................................. 7 1.1. Lgica de Programao............................................................................................................... 7 1.2. Desenvolvendo algoritmos.......................................................................................................... 8 1.2.1. Estudando algoritmos..................................................................................................................9 1.2.2. Teste de mesa..........................................................................................................................11 2. Estruturas de programao ............................................................................................................... 12 2.1. Diagrama de bloco .................................................................................................................... 12 2.2. Estruturas de deciso e repetio ............................................................................................. 15 2.2.1. Estruturas de deciso................................................................................................................15 2.2.2. Estruturas de repetio .............................................................................................................18 MDULO 02: A linguagem ADVPL .............................................................................................................. 20 3. Estrutura de um Programa ADVPL..................................................................................................... 22 3.1. reas de um Programa ADVPL .................................................................................................. 24 4. Declarao e Atribuio de Variveis ................................................................................................ 27 4.1. Tipo de Dados ........................................................................................................................... 27 4.2. Declarao de variveis ............................................................................................................ 28 4.3. Escopo de variveis................................................................................................................... 29 4.4. Entendendo a influncia do escopo das variveis...................................................................... 33 4.5. Operaes com Variveis .......................................................................................................... 34 4.5.1. Atribuio de variveis ..............................................................................................................34 4.5.2. Operadores da linguagem ADVPL................................................................................................35 4.5.3. Operao de Macro Substituio .................................................................................................40 4.5.4. Funes de manipulao de variveis ..........................................................................................41 5. Estruturas bsicas de programao................................................................................................... 47 5.1. Estruturas de repetio............................................................................................................. 47 5.1.1. Influenciando o fluxo de repetio ..............................................................................................50 5.2. Estruturas de deciso ............................................................................................................... 52 6. Arrays e Blocos de Cdigo ................................................................................................................. 56 6.1. Arrays ....................................................................................................................................... 56 6.1.1. Inicializando arrays...................................................................................................................58 6.1.2. Funes de manipulao de arrays..............................................................................................59 6.1.3. Cpia de arrays ........................................................................................................................61 6.2. Listas de Expresses e Blocos de Cdigo................................................................................... 63 6.2.1. Premissas para utilizao de Blocos de Cdigo..............................................................................63 6.2.2. Lista de expresses...................................................................................................................64 6.2.3. Blocos de Cdigo ......................................................................................................................66 6.2.4. Funes para manipulao de blocos de cdigo ............................................................................68 7. Funes............................................................................................................................................. 69 7.1. Tipos e escopos de funes....................................................................................................... 70 7.2. Passagem de parmetros entre funes ................................................................................... 73 8. Diretivas de compilao .................................................................................................................... 79 MDULO 03: Desenvolvendo pequenas customizaes.............................................................................. 84 9. ADVPL e o ERP Microsiga Protheus.................................................................................................... 84 9.1. O Ambiente Protheus ................................................................................................................ 84 9.2. Organizao e configurao inicial do ambiente Protheus ........................................................ 88 3. - 3 - Introduo programao e ADVPL Bsico 9.3. O Configurador do Protheus...................................................................................................... 94 9.3.1. Funcionalidades Abordadas ........................................................................................................94 9.3.2. Estruturas bsicas da aplicao ERP Protheus...............................................................................94 9.3.3. Acessando o mdulo Configurador ..............................................................................................97 9.4. Funcionalidades do Configurador............................................................................................ 100 9.4.1. Dicionrio de Dados da aplicao ERP........................................................................................ 101 9.4.2. Adio de tabelas ao Dicionrio de Dados .................................................................................. 101 9.4.3. Adio de campos as tabelas do Dicionrio de Dados................................................................... 104 9.4.4. Adio de ndices para as tabelas do Dicionrio de Dados ............................................................ 109 9.4.5. Adio de gatilhos para os campos das tabelas do sistema........................................................... 112 9.4.6. Criao de Tabelas Genricas ................................................................................................... 114 9.4.7. Criao de Parmetros ............................................................................................................ 115 10. TOTVS Development Studio......................................................................................................... 117 Desenvolvimento de pequenas customizaes .................................................................................... 120 11. Acesso e manipulao de bases de dados em ADVPL .................................................................. 120 11.1. Diferenas e compatibilizaes entre bases de dados............................................................. 121 11.2. Funes de acesso e manipulao de dados............................................................................ 122 11.3. Diferenciao entre variveis e nomes de campos.................................................................. 127 11.4. Controle de numerao seqencial ......................................................................................... 128 12. Customizaes para a aplicao ERP........................................................................................... 129 12.1. Customizao de campos Dicionrio de Dados..................................................................... 130 12.1.1. Validaes de campos e perguntas........................................................................................ 130 12.1.2. Pictures de formao disponveis .......................................................................................... 132 12.2. Customizao de gatilhos Configurador ............................................................................... 134 12.3. Customizao de parmetros Configurador.......................................................................... 135 12.3.1. Funes para manipulao de parmetros ............................................................................. 135 12.3.2. Cuidados na utilizao de um parmetro ............................................................................... 136 12.4. Pontos de Entrada Conceitos, Premissas e Regras ............................................................... 137 13. Interfaces visuais ....................................................................................................................... 138 13.1. Sintaxe e componentes das interfaces visuais ........................................................................ 138 13.2. Interfaces padres para atualizaes de dados ...................................................................... 141 13.2.1. AxCadastro() ..................................................................................................................... 141 13.2.2. MBrowse()......................................................................................................................... 142 13.2.3. AxFunctions()..................................................................................................................... 146 APNDICES.............................................................................................................................................. 148 BOAS PRTICAS DE PROGRAMAO........................................................................................................ 148 14. Utilizao de Identao............................................................................................................... 148 15. Capitulao de Palavras-Chave ................................................................................................... 149 15.1. Palavras em maisculo ........................................................................................................... 150 16. Utilizao da Notao Hngara ................................................................................................... 150 17. Palavras reservadas.................................................................................................................... 151 LISTAS DE EXERCCIOS ........................................................................................................................... 152 Mdulo 01: Introduo programao................................................................................................ 152 Mdulo 02: A linguagem ADVPL........................................................................................................... 153 Mdulo 03: Desenvolvendo pequenas customizaes.......................................................................... 156 REFERNCIAS BIBLIOGRFICAS.............................................................................................................. 158 GUIA DE REFERNCIA RPIDA: Funes e Comandos ADVPL .................................................................. 160 Converso entre tipos de dados........................................................................................................... 160 CTOD()...................................................................................................................................... 160 CVALTOCHAR()........................................................................................................................... 160 DTOC()...................................................................................................................................... 161 DTOS()...................................................................................................................................... 161 4. - 4 - Introduo programao e ADVPL Bsico STOD()...................................................................................................................................... 161 STR() ........................................................................................................................................ 162 STRZERO() ................................................................................................................................ 162 VAL() ........................................................................................................................................ 163 Matemticas ........................................................................................................................................ 164 ACOS()...................................................................................................................................... 164 CEILING().................................................................................................................................. 164 COS()........................................................................................................................................ 164 LOG10() .................................................................................................................................... 165 SIN()......................................................................................................................................... 165 SQRT()...................................................................................................................................... 166 TAN() ........................................................................................................................................ 166 Verificao de tipos de variveis ......................................................................................................... 167 TYPE()....................................................................................................................................... 167 VALTYPE().................................................................................................................................. 167 Manipulao de arrays......................................................................................................................... 168 ARRAY() .................................................................................................................................... 168 AADD()...................................................................................................................................... 169 ACLONE() .................................................................................................................................. 170 ADEL() ...................................................................................................................................... 170 ASIZE() ..................................................................................................................................... 171 ASORT() .................................................................................................................................... 171 ASCAN().................................................................................................................................... 173 AINS()....................................................................................................................................... 174 Manipulao de blocos de cdigo......................................................................................................... 175 EVAL()....................................................................................................................................... 175 DBEVAL()................................................................................................................................... 175 AEVAL()..................................................................................................................................... 177 Manipulao de strings........................................................................................................................ 178 ALLTRIM().................................................................................................................................. 178 ASC() ........................................................................................................................................ 178 AT() .......................................................................................................................................... 179 BITON()..................................................................................................................................... 180 CHR()........................................................................................................................................ 180 DESCEND() ................................................................................................................................ 180 GETDTOVAL()............................................................................................................................. 181 ISALPHA().................................................................................................................................. 182 ISDIGIT() .................................................................................................................................. 182 ISLOWER() ................................................................................................................................ 182 ISUPPER().................................................................................................................................. 183 LEN() ........................................................................................................................................ 183 LOWER().................................................................................................................................... 184 LTRIM() ..................................................................................................................................... 184 MATHC().................................................................................................................................... 185 OEMTOANSI() ............................................................................................................................ 185 PADL() / PADR() / PADC()............................................................................................................ 186 RAT() ........................................................................................................................................ 186 RTRIM()..................................................................................................................................... 187 SPACE()..................................................................................................................................... 187 STRTOKARR()............................................................................................................................. 188 STRTRAN()................................................................................................................................. 188 STUFF()..................................................................................................................................... 189 SUBSTR() .................................................................................................................................. 189 TRANSFORM() ............................................................................................................................ 190 UPPER()..................................................................................................................................... 190 Manipulao de data / hora................................................................................................................. 191 CDOW()..................................................................................................................................... 191 CMONTH() ................................................................................................................................. 191 DATE() ...................................................................................................................................... 192 DAY()........................................................................................................................................ 192 DOW()....................................................................................................................................... 193 DTOC()...................................................................................................................................... 193 DTOS()...................................................................................................................................... 194 ELAPTIME()................................................................................................................................ 194 MONTH() ................................................................................................................................... 195 SECONDS()................................................................................................................................ 195 5. - 5 - Introduo programao e ADVPL Bsico TIME()....................................................................................................................................... 196 YEAR() ...................................................................................................................................... 196 Manipulao de variveis numricas ................................................................................................... 197 ABS() ........................................................................................................................................ 197 INT()......................................................................................................................................... 197 NOROUND() ............................................................................................................................... 198 ROUND() ................................................................................................................................... 198 Manipulao de arquivos ..................................................................................................................... 199 SELECT() ................................................................................................................................... 199 DBGOTO() ................................................................................................................................. 199 DBGOTOP()................................................................................................................................ 200 DBGOBOTTON().......................................................................................................................... 200 DBSELECTAREA()........................................................................................................................ 201 DBSETORDER() .......................................................................................................................... 201 DBSEEK() E MSSEEK()................................................................................................................. 202 DBSKIP() ................................................................................................................................... 203 DBSETFILTER()........................................................................................................................... 204 DBSTRUCT() .............................................................................................................................. 205 RECLOCK() ................................................................................................................................ 205 MSUNLOCK().............................................................................................................................. 206 SOFTLOCK()............................................................................................................................... 207 DBDELETE()............................................................................................................................... 208 DBUSEAREA() ............................................................................................................................ 208 DBCLOSEAREA()......................................................................................................................... 209 Controle de numerao seqencial...................................................................................................... 209 GETSXENUM() ............................................................................................................................ 209 CONFIRMSXE()........................................................................................................................... 209 ROLLBACKSXE() ......................................................................................................................... 210 Validao............................................................................................................................................. 210 EXISTCHAV() ............................................................................................................................. 210 EXISTCPO() ............................................................................................................................... 210 NAOVAZIO() .............................................................................................................................. 211 NEGATIVO()............................................................................................................................... 211 PERTENCE() ............................................................................................................................... 211 POSITIVO()................................................................................................................................ 211 TEXTO() .................................................................................................................................... 211 VAZIO()..................................................................................................................................... 212 Parmetros.......................................................................................................................................... 212 GETMV().................................................................................................................................... 212 GETNEWPAR()............................................................................................................................ 212 PUTMV() .................................................................................................................................... 213 SUPERGETMV()........................................................................................................................... 213 Componentes da interface visual......................................................................................................... 214 MSDIALOG() .............................................................................................................................. 214 MSGET().................................................................................................................................... 215 SAY() ........................................................................................................................................ 216 BUTTON() .................................................................................................................................. 216 SBUTTON() ................................................................................................................................ 217 Interfaces de cadastro ........................................................................................................................ 218 AXCADASTRO() .......................................................................................................................... 218 MBROWSE()............................................................................................................................... 218 AXPESQUI() ............................................................................................................................... 218 AXVISUAL() ............................................................................................................................... 219 AXINCLUI() ................................................................................................................................ 219 AXALTERA() ............................................................................................................................... 220 AXDELETA() ............................................................................................................................... 221 Funes visuais para aplicaes .......................................................................................................... 222 ALERT()..................................................................................................................................... 222 AVISO()..................................................................................................................................... 222 FORMBACTH() ............................................................................................................................ 223 MSGFUNCTIONS()....................................................................................................................... 224 Funes ADVPL para aplicaes .......................................................................................................... 225 GETAREA()................................................................................................................................. 225 RESTAREA()............................................................................................................................... 225 6. - 6 - Introduo programao e ADVPL Bsico OBJETIVOS DO CURSO Objetivos especficos do curso: Ao final do curso o treinando dever ter desenvolvido os seguintes conceitos, habilidades e atitudes: a) Conceitos a serem aprendidos fundamentos e tcnicas de programao; princpios bsicos da linguagem ADVPL; comandos e funes especficas da Microsiga. b) Habilidades e tcnicas a serem aprendidas resoluo de algoritmos atravs de sintaxes orientadas a linguagem ADVPL; anlise de fontes de baixa complexidade da aplicao ERP Protheus; desenvolvimento de pequenas customizaes para o ERP Protheus. c) Atitudes a serem desenvolvidas adquirir conhecimentos atravs da anlise dos funcionalidades disponveis no ERP Protheus; embasar a realizao de outros cursos relativos a linguagem ADVPL. 7. - 7 - Introduo programao e ADVPL Bsico MDULO 01: Introduo programao 1. Lgica de Programao e Algoritmos No aprendizado de qualquer linguagem de programao essencial desenvolver os conceitos relacionados a lgica e a tcnica da escrita de um programa. Com foco nesta necessidade, este tpico ir descrever resumidamente os conceitos envolvidos no processo de desenvolvimento de um programa atravs dos conceitos relacionados : Lgica de programao Algoritmos Diagramas de blocos 1.1. Lgica de Programao Lgica A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqncia lgica para o desenvolvimento. Ento o que lgica? Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo. Seqncia Lgica Estes pensamentos, podem ser descritos como uma seqncia de instrues, que devem ser seguidas para se cumprir uma determinada tarefa. Seqncia Lgica so passos executados at atingir um objetivo ou soluo de um problema. Instrues Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, porm, instruo a informao que indica a um computador uma ao elementar a executar. Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem seqencial lgica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc. evidente que essas instrues tm que ser executadas em uma ordem adequada no se pode descascar as batatas depois de frit-las. 8. - 8 - Introduo programao e ADVPL Bsico Dessa maneira, uma instruo tomada em separado no tem muito sentido; para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta. Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma ao elementar a executar. Algoritmo Um algoritmo formalmente uma seqncia finita de passos que levam a execuo de uma tarefa. Podemos pensar em algoritmo como uma receita, uma seqncia de instrues que do cabo de uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua definio, devem ser claras e precisas. Como exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os manuais de aparelhos eletrnicos, como um videocassete, que explicam passo-a-passo como, por exemplo, gravar um evento. At mesmo as coisas mais simples, podem ser descritas por seqncias lgicas, tais como: Chupar uma bala 1. Pegar a bala; 2. Retirar o papel; 3. Chupar a bala; 4. Jogar o papel no lixo. Somar dois nmeros quaisquer 1. Escreva o primeiro nmero no retngulo A; 2. Escreva o segundo nmero no retngulo B; 3. Some o nmero do retngulo A com nmero do retngulo B e coloque o resultado no retngulo C. 1.2. Desenvolvendo algoritmos Pseudocdigo Os algoritmos so descritos em uma linguagem chamada pseudocdigo. Este nome uma aluso posterior implementao em uma linguagem de programao, ou seja, quando for utilizada a linguagem a de programao propriamente dita como, por exemplo, ADVPL. Por isso os algoritmos so independentes das linguagens de programao, sendo que ao contrrio de uma linguagem de programao no existe um formalismo rgido de como deve ser escrito o algoritmo. O algoritmo deve ser fcil de interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio entre a linguagem falada e a linguagem de programao. 9. - 9 - Introduo programao e ADVPL Bsico Regras para construo do Algoritmo Para escrever um algoritmo precisamos descrever a seqncia de instrues, de maneira simples e objetiva. Para isso utilizaremos algumas tcnicas: 1. Usar somente um verbo por frase; 2. Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica; 3. Usar frases curtas e simples; 4. Ser objetivo; 5. Procurar usar palavras que no tenham sentido dbio. Fases Para implementar de um algoritmo de simples interpretao e codificao necessrio inicialmente dividir o problema apresentado em trs fases fundamentais, as quais so: ENTRADA: So os dados de entrada do algoritmo; PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final; SADA: So os dados j processados. 1.2.1. Estudando algoritmos Neste tpico sero demonstrados alguns algoritmos do cotidiano, os quais foram implementados utilizando os princpios descritos nos tpicos anteriores. Mascar um chiclete Utilizar um telefone pblico carto Fritar um ovo Trocar lmpadas Descascar batatas Jogar o jogo da forca Calcular a mdia de notas Jogar o jogo da velha contra o algoritmo Mascar um chiclete 1. Pegar o chiclete 2. Retirar o papel 3. Mastigar 4. Jogar o papel no lixo Utilizar um telefone pblico - carto 1. Retirar o telefone do gancho 2. Esperar o sinal 3. Colocar o carto 4. Discar o nmero 5. Falar no telefone 6. Colocar o telefone no ganho 10. - 10 - Introduo programao e ADVPL Bsico Fritar um ovo 1. Pegar frigideira, ovo, leo e sal 2. Colocar leo na frigideira 3. Ascender o fogo 4. Colocar a frigideira no fogo 5. Esperar o leo esquentar 6. Quebrar o ovo na frigideira 7. Jogar a casca no lixo 8. Retirar a frigideira do fogo quando o ovo estiver no ponto 9. Desligar o fogo 10. Colocar sal a gosto Trocar lmpadas 1. Se a lmpada estiver fora do alcance, pegar uma escada 2. Pegar a lmpada nova 3. Se a lmpada queimada estiver quente, pegar um pano 4. Tirar lmpada queimada 5. Colocar lmpada nova Descascar batatas 1. Pegar faca, bacia e batatas 2. Colocar gua na bacia 3. Enquanto houver batatas, descascar as batatas 3.1. Colocar as batatas descascadas na bacia Jogar o jogo da forca 1. Escolher a palavra 2. Montar o diagrama do jogo 3. Enquanto houver lacunas vazias e o corpo estiver incompleto: 3.1. Se acertar a letra: escrever na lacuna correspondente 3.2. Se errar a letra: desenhar uma parte do corpo na forca Calcular a mdia de notas 1. Enquanto houver notas a serem recebidas: 1.1. Receber a nota; 2. Some todas as notas recebidas; 3. Divida o total obtido pela quantidade de notas recebidas; 4. Exiba a mdia das notas. Jogar o jogo da velha contra o algoritmo 1. Enquanto existir um quadrado livre e ningum ganhou ou perdeu o jogo: 1.1. Espere a jogada do adversrio, continue depois 1.2. Se centro estiver livre: jogue no centro 1.3. Seno, se o adversrio possuir 2 quadrados em linha com um quadrado livre, jogue neste quadrado 1.4. Seno, se h algum canto livre, jogue neste canto 11. - 11 - Introduo programao e ADVPL Bsico 1.2.2. Teste de mesa Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado de TESTE DE MESA, que significa seguir as instrues do algoritmo de maneira precisa para verificar se o procedimento utilizado est correto ou no. Para avaliar a aplicao do teste de mesa, utilizaremos o algoritmo de calcular a mdia de notas: Algoritmo: Calcular a mdia de notas 1. Enquanto houver notas a serem recebidas: a. Receber a nota; 2. Some todas as notas recebidas; 3. Divida o total obtido pela quantidade de notas recebidas; 4. Exiba a mdia das notas. Teste de mesa: 1. Para cada nota informada, receber e registrar na tabela abaixo: ID Nota 2. Ao trmino das notas, a tabela dever conter todas as notas informadas, como abaixo: ID Nota 1 8.0 2 7.0 3 8.0 4 8.0 5 7.0 6 7.0 3. Somar todas as notas: 45 4. Dividir a soma das notas, pelo total de notas informado: 45/6 7.5 5. Exibir a mdia obtida: Mensagem(Mdia: 7.5) 12. - 12 - Introduo programao e ADVPL Bsico 2. Estruturas de programao 2.1. Diagrama de bloco O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de um determinado processamento. Com o diagrama podemos definir uma seqncia de smbolos, com significado bem definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento. Simbologia Existem diversos smbolos em um diagrama de bloco. No quadro abaixo esto representados alguns dos smbolos mais utilizados: Smbolo Funo Terminador Indica o incio e o fim de um processamento. Processamento Processamento em geral. Entrada Manual Indica a entrada de dados atravs do teclado. Deciso Indica um ponto no qual dever ser efetuada uma escolha entre duas situaes possveis. Exibio Mostra os resultados obtidos com um processamento. Documento Indica um documento utilizado pelo processamento, seja para entrada de informaes ou para exibio dos dados disponveis aps um processamento. Cada smbolo ir conter uma descrio pertinente a forma com o qual o mesmo foi utilizado no fluxo, indicando o processamento ou a informao que o mesmo representa. 13. - 13 - Introduo programao e ADVPL Bsico Representao de algoritmos atravs de diagramas de bloco Algoritmo 01: Fritar um ovo 1. Pegar frigideira, ovo, leo e sal 2. Colocar leo na frigideira 3. Ascender o fogo 4. Colocar a frigideira no fogo 5. Esperar o leo esquentar 6. Quebrar o ovo na frigideira 7. Jogar a casca no lixo 8. Retirar a frigideira do fogo quando o ovo estiver no ponto 9. Desligar o fogo 10. Colocar sal a gosto 14. - 14 - Introduo programao e ADVPL Bsico Algoritmo 02: Calcular a mdia de notas 1. Enquanto houver notas a serem recebidas: a. Receber a nota; 2. Some todas as notas recebidas; 3. Divida o total obtido pela quantidade de notas recebidas; 4. Exiba a mdia das notas. 15. - 15 - Introduo programao e ADVPL Bsico 2.2. Estruturas de deciso e repetio A utilizao de estruturas de deciso e repetio em um algoritmo permite a realizao de aes relacionadas a situaes que influenciam na execuo e soluo do problema. Como foco na utilizao da linguagem ADVPL sero ilustradas as seguintes estruturas: Estruturas de deciso o IF...ELSE o DO CASE ... CASE Estruturas de repetio o WHILE...END o FOR...NEXT 2.2.1. Estruturas de deciso Os comandos de deciso so utilizados em algoritmos cuja soluo no obtida atravs da utilizao de aes meramente seqenciais, permitindo que este avalie as condies necessrias para optar por uma ou outra maneira de continuar seu fluxo. As estruturas de deciso que sero analisadas so: IF...ELSE DO CASE ... CASE IF...ELSE A estrutura IF...ELSE (Se/Seno) permite a anlise de uma condio e a partir da qual ser executada uma de duas aes possveis: se a anlise da condio resultar em um valor verdadeiro ou se a anlise da condio resultar em um valor falso. Representao 01: IF...ELSE com aes para ambas as situaes 16. - 16 - Introduo programao e ADVPL Bsico Esta estrutura permite ainda que seja executada apenas uma ao, na situao em que a a anlise da condio resultar em um valor verdadeiro. Representao 02: IF...ELSE somente com ao para situao verdadeira Ao vinculada ao resultado verdadeiro Anlise da condio Verdadeiro Falso Aes anteriores ... Continuao do fluxo aps a tomada da deciso Apesar das linguagens de programao possurem variaes para a estrutura IF...ELSE, conceitualmente todas as representaes podem ser descritas com base no modelo apresentado. A linguagem ADVPL possui uma variao para a estrutura IF...ELSE, descrita como IF...ELSEIF...ELSE. Com esta estrutura possvel realizar a anlise de diversas condies em seqncia, para as quais ser avaliada somente a ao da primeira expresso cujo anlise resultar em um valor verdadeiro. 17. - 17 - Introduo programao e ADVPL Bsico DO CASE...CASE A estrutura DO CASE...ENDCASE (Caso) permite a anlise de diversas condies consecutivas, para as quais somente a condio a primeira condio verdadeira ser sua ao vinculada executada. O recurso de anlise de mltiplas condies necessrio para soluo de problemas mais complexos, nos quais as possibilidades de soluo superam a mera anlise de um nico resultado verdadeiro ou falso. Anlise da condio 1 Verdadeiro Falso Aes anteriores ... Continuao do fluxo aps a tomada da deciso Ao vinculada a condio 1 Anlise da condio 2 Verdadeiro Ao vinculada a condio 2 Anlise da condio N Verdadeiro Ao vinculada a condio N Falso Falso Falso Apesar das linguagens de programao possurem variaes para a estrutura DO CASE...CASE, conceitualmente todas as representaes podem ser descritas com base no modelo apresentado. 18. - 18 - Introduo programao e ADVPL Bsico 2.2.2. Estruturas de repetio Os comandos de repetio so utilizados em algoritmos nas situaes em que necessrio realizar uma determinada ao ou um conjunto de aes para um nmero definido ou indefinido de vezes, ou ainda enquanto uma determinada condio for verdadeira. As estruturas de deciso que sero analisadas so: WHILE...END FOR...TO...NEXT WHILE...END Nesta estrutura, o conjunto de aes ser executado enquanto a anlise de uma condio de referncia resultar em um valor verdadeiro. importante verificar que o bloco somente ser executado, inclusive se na primeira anlise a condio resultar em um valor verdadeiro. Representao: WHILE...END Ao vinculada ao resultado verdadeiro Anlise da condio Verdadeiro Falso Aes anteriores ... Continuao do fluxo ... Loop Existem diversas variaes para a estrutura WHILE...END, na qual h a possibilidade da primeira execuo ser realizada sem a anlise da condio, a qual valer apenas a partir da segunda execuo. A linguagem ADVPL aceita a sintaxe DO WHILE...ENDDO, que em outras linguagens representa a situao descrita anteriormente (anlise da condio somente a partir da segunda execuo), mas em ADVPL esta sintaxe tem o mesmo efeito do WHILE...END. 19. - 19 - Introduo programao e ADVPL Bsico FOR...TO...NEXT Nesta estrutura, o conjunto de aes ser executado uma quantidade de vezes definida, normalmente referenciada como passo. Para cada passo realizado pela estrutura FOR...TO...NEXT, ser avaliada uma condio que verificar se foi atingido o nmero de execues previamente definido. Desta forma a estrutura compreende um controle de nmero de passos executados, o qual incrementado na anlise da expresso NEXT. Semelhante a estrutura WHILE...END, a primeira ao somente ser realizada mediante um resultado verdadeiro na anlise da condio. Representao: FOR...TO...NEXT A estrutura FOR...TO...NEXT, dependendo da linguagem de programao, permite a realizao de um incremento simples a cada execuo da instruo NEXT, ou a adio de outro valor ao contador, o qual dever especificado de acordo com a sintaxe da linguagem. Em ADVPL pode ser utilizada a instruo STEPS para alterar o valor a ser adicionado no contador de passos a cada execuo da instruo NEXT, sendo que este valor poder ser at negativo, viabilizando uma contagem decrescente. 20. - 20 - Introduo programao e ADVPL Bsico MDULO 02: A linguagem ADVPL A Linguagem ADVPL teve seu incio em 1994, sendo na verdade uma evoluo na utilizao de linguagens no padro xBase pela Microsiga Software S.A. (Clipper, Visual Objects e depois FiveWin). Com a criao da tecnologia Protheus, era necessrio criar uma linguagem que suportasse o padro xBase para a manuteno de todo o cdigo existente do sistema de ERP Siga Advanced. Foi ento criada a linguagem chamada Advanced Protheus Language. O ADVPL uma extenso do padro xBase de comandos e funes, operadores, estruturas de controle de fluxo e palavras reservadas, contando tambm com funes e comandos disponibilizados pela Microsiga que a torna uma linguagem completa para a criao de aplicaes ERP prontas para a Internet. Tambm uma linguagem orientada a objetos e eventos, permitindo ao programador desenvolver aplicaes visuais e criar suas prprias classes de objetos. Quando compilados, todos os arquivos de cdigo tornam-se unidades de inteligncia bsicas, chamados APOs (de Advanced Protheus Objects). Tais APOs so mantidos em um repositrio e carregados dinamicamente pelo PROTHEUS Server para a execuo. Como no existe a linkedio, ou unio fsica do cdigo compilado a um determinado mdulo ou aplicao, funes criadas em ADVPL podem ser executadas em qualquer ponto do ambiente Advanced Protheus. O compilador e o interpretador da linguagem ADVPL o prprio servidor PROTHEUS (PROTHEUS Server), e existe um ambiente visual para desenvolvimento integrado (PROTHEUSIDE) onde o cdigo pode ser criado, compilado e depurado. Os programas em ADVPL podem conter comandos ou funes de interface com o usurio. De acordo com tal caracterstica, tais programas so subdivididos nas seguintes categorias: Programao Com Interface Prpria com o Usurio Nesta categoria entram os programas desenvolvidos para serem executados atravs do terminal remoto do Protheus, o Protheus Remote. O Protheus Remote a aplicao encarregada da interface e da interao com o usurio, sendo que todo o processamento do cdigo em ADVPL, o acesso ao banco de dados e o gerenciamento de conexes efetuado no Protheus Server. O Protheus Remote o principal meio de acesso a execuo de rotinas escritas em ADVPL no Protheus Server, e por isso permite executar qualquer tipo de cdigo, tenha ele interface com o usurio ou no. Porm nesta categoria so considerados apenas os programas que realizem algum tipo de interface remota utilizando o protocolo de comunicao do Protheus. Podem-se criar rotinas para a customizao do sistema ERP Microsiga Protheus, desde processos adicionais at mesmo relatrios. A grande vantagem aproveitar todo o ambiente montado pelos mdulos do ERP Microsiga Protheus. Porm, com o ADVPL possvel at mesmo criar toda uma aplicao, ou mdulo, do comeo. Todo o cdigo do sistema ERP Microsiga Protheus escrito em ADVPL. Programao Sem Interface Prpria com o Usurio As rotinas criadas sem interface so consideradas nesta categoria porque geralmente tm uma utilizao mais especfica do que um processo adicional ou um relatrio novo. Tais rotinas no tm interface com o usurio atravs do Protheus Remote, e qualquer tentativa nesse sentido 21. - 21 - Introduo programao e ADVPL Bsico (como a criao de uma janela padro) ocasionar uma exceo em tempo de execuo. Estas rotinas so apenas processos, ou Jobs, executados no Protheus Server. Algumas vezes, a interface destas rotinas fica a cargo de aplicaes externas, desenvolvidas em outras linguagens, que so responsveis por iniciar os processos no servidor Protheus atravs dos meios disponveis de integrao e conectividade no Protheus. De acordo com a utilizao e com o meio de conectividade utilizado, estas rotinas so subcategorizadas assim: Programao por Processos Rotinas escritas em ADVPL podem ser iniciadas como processos individuais (sem interface) no Protheus Server atravs de duas maneiras: Iniciadas por outra rotina ADVPL atravs da chamada de funes como StartJob() ou CallProc() ou iniciadas automaticamente na inicializao do Protheus Server (quando propriamente configurado). Programao de RPC Atravs de uma biblioteca de funes disponvel no Protheus (uma API de comunicao), podem-se executar rotinas escritas em ADVPL diretamente no Protheus Server, atravs de aplicaes externas escritas em outras linguagens. Isto o que se chama de RPC (de Remote Procedure Call, ou Chamada de Procedimentos Remota). O servidor Protheus tambm pode executar rotinas em ADVPL em outros servidores Protheus atravs de conexo TCP/IP direta utilizando o conceito de RPC. Do mesmo modo, aplicaes externas podem requisitar a execuo de rotinas escritas em ADVPL atravs de conexo TCP/IP direta. Programao Web O Protheus Server pode tambm ser executado como um servidor Web, respondendo a requisies HTTP. No momento destas requisies, pode executar rotinas escritas em ADVPL como processos individuais, enviando o resultado das funes como retorno das requisies para o cliente HTTP (como por exemplo, um Browser de Internet). Qualquer rotina escrita em ADVPL que no contenha comandos de interface pode ser executada atravs de requisies HTTP. O Protheus permite a compilao de arquivos HTML contendo cdigo ADVPL embutido. So os chamados arquivos ADVPL ASP, para a criao de pginas dinmicas. Programao TelNet TelNet parte da gama de protocolos TCP/IP que permite a conexo a um computador remoto atravs de uma aplicao cliente deste protocolo. O PROTHEUS Server pode emular um terminal TelNet, atravs da execuo de rotinas escritas em ADVPL. Ou seja, pode-se escrever rotinas ADVPL cuja interface final ser um terminal TelNet ou um coletor de dados mvel. 22. - 22 - Introduo programao e ADVPL Bsico 3. Estrutura de um Programa ADVPL Um programa de computador nada mais do que um grupo de comandos logicamente dispostos com o objetivo de executar determinada tarefa. Esses comandos so gravados em um arquivo texto que transformado em uma linguagem executvel por um computador atravs de um processo chamado compilao. A compilao substitui os comandos de alto nvel (que os humanos compreendem) por instrues de baixo nvel (compreendida pelo sistema operacional em execuo no computador). No caso do ADVPL, no o sistema operacional de um computador que ir executar o cdigo compilado, mas sim o Protheus Server. Dentro de um programa, os comandos e funes utilizados devem seguir regras de sintaxe da linguagem utilizada, pois caso contrrio o programa ser interrompido por erros. Os erros podem ser de compilao ou de execuo. Erros de compilao so aqueles encontrados na sintaxe que no permitem que o arquivo de cdigo do programa seja compilado. Podem ser comandos especificados de forma errnea, utilizao invlida de operadores, etc. Erros de execuo so aqueles que acontecem depois da compilao, quando o programa est sendo executado. Podem ocorrer por inmeras razes, mas geralmente se referem as funes no existentes, ou variveis no criadas ou inicializadas, etc. Linhas de Programa As linhas existentes dentro de um arquivo texto de cdigo de programa podem ser linhas de comando, linhas de comentrio ou linhas mistas. Linhas de Comando Linhas de comando possuem os comandos ou instrues que sero executadas. Por exemplo: Local nCnt Local nSoma := 0 For nCnt := 1 To 10 nSoma += nCnt Next nCnt Linhas de Comentrio Linhas de comentrio possuem um texto qualquer, mas no so executadas. Servem apenas para documentao e para tornar mais fcil o entendimento do programa. Existem trs formas de se comentar linhas de texto. A primeira delas utilizar o sinal de * (asterisco) no comeo da linha: * Programa para clculo do total * Autor: Microsiga Software S.A. * Data: 2 de outubro de 2001 23. - 23 - Introduo programao e ADVPL Bsico Todas as linhas iniciadas com um sinal de asterisco so consideradas como comentrio. Pode- se utilizar a palavra NOTE ou dois smbolos da letra "e" comercial (&&) para realizar a funo do sinal de asterisco. Porm todas estas formas de comentrio de linhas so obsoletas e existem apenas para compatibilizao com o padro xBase. A melhor maneira de comentar linhas em ADVPL utilizar duas barras transversais: // Programa para clculo do total // Autor: Microsiga Software S.A. // Data: 2 de outubro de 2001 Outra forma de documentar textos utilizar as barras transversais juntamente com o asterisco, podendo-se comentar todo um bloco de texto sem precisar comentar linha a linha: /* Programa para clculo do total Autor: Microsiga Software S.A. Data: 2 de outubro de 2001 */ Todo o texto encontrado entre a abertura (indicada pelos caracteres /*) e o fechamento (indicada pelos caracteres */) considerado como comentrio. Linhas Mistas O ADVPL tambm permite que existam linhas de comando com comentrio. Isto possvel adicionando-se as duas barras transversais (//) ao final da linha de comando e adicionando-se o texto do comentrio: Local nCnt Local nSoma := 0 // Inicializa a varivel com zero para a soma For nCnt := 1 To 10 nSoma += nCnt Next nCnt Tamanho da Linha Assim como a linha fsica, delimitada pela quantidade de caracteres que pode ser digitado no editor de textos utilizado, existe uma linha considerada linha lgica. A linha lgica, aquela considerada para a compilao como uma nica linha de comando. A princpio, cada linha digitada no arquivo texto diferenciada aps o pressionamento da tecla . Ou seja, a linha lgica, a linha fsica no arquivo. Porm algumas vezes, por limitao fsica do editor de texto ou por esttica, pode-se "quebrar" a linha lgica em mais de uma linha fsica no arquivo texto. Isto efetuado utilizando-se o sinal de ponto-e-vrgula (;). If !Empty(cNome) .And. !Empty(cEnd) .And. ; !Empty(cTel) .And. !Empty(cFax) .And. ; !Empty(cEmail) GravaDados(cNome,cEnd,cTel,cFax,cEmail) Endif 24. - 24 - Introduo programao e ADVPL Bsico Neste exemplo existe uma linha de comando para a checagem das variveis utilizadas. Como a linha torna-se muito grande, pode-se dividi-la em mais de uma linha fsica utilizando o sinal de ponto-e-vrgula. Se um sinal de ponto-e-vrgula for esquecido nas duas primeiras linhas, durante a execuo do programa ocorrer um erro, pois a segunda linha fsica ser considerada como uma segunda linha de comando na compilao. E durante a execuo esta linha no ter sentido. 3.1. reas de um Programa ADVPL Apesar de no ser uma linguagem de padres rgidos com relao estrutura do programa, importante identificar algumas de suas partes. Considere o programa de exemplo abaixo: #include protheus.ch /* +===========================================+ | Programa: Clculo do Fatorial | | Autor : Microsiga Software S.A. | | Data : 02 de outubro de 2001 | +===========================================+ */ User Function CalcFator() Local nCnt Local nResultado := 1 // Resultado do fatorial Local nFator := 5 // Nmero para o clculo // Clculo do fatorial For nCnt := nFator To 1 Step -1 nResultado *= nCnt Next nCnt // Exibe o resultado na tela, atravs da funo alert Alert("O fatorial de " + cValToChar(nFator) + ; " " + cValToChar(nResultado)) // Termina o programa Return A estrutura de um programa ADVPL composta pelas seguintes reas: rea de Identificao Declarao dos includes Declarao da funo Identificao do programa rea de Ajustes Iniciais Declarao das variveis Corpo do Programa Preparao para o processamento Processamento rea de Encerramento 25. - 25 - Introduo programao e ADVPL Bsico rea de Identificao Esta uma rea que no obrigatria e dedicada a documentao do programa. Quando existente, contm apenas comentrios explicando a sua finalidade, data de criao, autor, etc., e aparece no comeo do programa, antes de qualquer linha de comando. O formato para esta rea no definido. Pode-se colocar qualquer tipo de informao desejada e escolher a formatao apropriada. #include protheus.ch /* +==========================================+ | Programa: Clculo do Fatorial | | Autor : Microsiga Software S.A. | | Data : 02 de outubro de 2001 | +==========================================+ */ User Function CalcFator() Opcionalmente podem-se incluir definies de constantes utilizadas no programa ou incluso de arquivos de cabealho nesta rea. rea de Ajustes Iniciais Nesta rea geralmente se fazem os ajustes iniciais, importantes para o correto funcionamento do programa. Entre os ajustes se encontram declaraes de variveis, inicializaes, abertura de arquivos, etc. Apesar do ADVPL no ser uma linguagem rgida e as variveis poderem ser declaradas em qualquer lugar do programa, aconselhvel faz-lo nesta rea visando tornar o cdigo mais legvel e facilitar a identificao de variveis no utilizadas. Local nCnt Local nResultado := 0 // Resultado do fatorial Local nFator := 10 // Nmero para o clculo Corpo do Programa nesta rea que se encontram as linhas de cdigo do programa. onde se realiza a tarefa necessria atravs da organizao lgica destas linhas de comando. Espera-se que as linhas de comando estejam organizadas de tal modo que no final desta rea o resultado esperado seja obtido, seja ele armazenado em um arquivo ou em variveis de memria, pronto para ser exibido ao usurio atravs de um relatrio ou na tela. // Clculo do fatorial For nCnt := nFator To 1 Step -1 nResultado *= nCnt Next nCnt 26. - 26 - Introduo programao e ADVPL Bsico A preparao para o processamento formada pelo conjunto de validaes e processamentos necessrios antes da realizao do processamento em si. Avaliando o processamento do clculo do fatorial descrito anteriormente, pode-se definir que a validao inicial a ser realizada o contedo da varivel nFator, pois a mesma determinar a correta execuo do cdigo. // Clculo do fatorial nFator := GetFator() // GetFator funo ilustrativa na qual a varivel recebe a informao do usurio. If nFator