AMM - ADVPL Básico_rev01_2

Embed Size (px)

Citation preview

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    1/225

    Educao Corporativa

    Introduo programao eADVPL bsico

    (Capacitao Interna)

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    2/225

    - 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.......................................................................................................... 81.2.1. Estudando algoritmos..................................................................................................................91.2.2. Teste de mesa..........................................................................................................................11

    2. Estruturas de programao............................................................................................................... 12

    2.1. Diagrama de bloco .................................................................................................................... 12

    2.2. Estruturas de deciso e repetio ............................................................................................. 152.2.1. Estruturas de deciso................................................................................................................152.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 ................................................................................................ 274.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 .......................................................................................................... 344.5.1. Atribuio de variveis ..............................................................................................................344.5.2. Operadores da linguagem ADVPL................................................................................................354.5.3. Operao de Macro Substituio .................................................................................................404.5.4. Funes de manipulao de variveis ..........................................................................................41

    5. Estruturas bsicas de programao................................................................................................... 47

    5.1. Estruturas de repetio............................................................................................................. 475.1.1. Influenciando o fluxo de repetio ..............................................................................................50

    5.2. Estruturas de deciso ............................................................................................................... 52

    6. Arrays e Blocos de Cdigo................................................................................................................. 56

    6.1. Arrays....................................................................................................................................... 566.1.1. Inicializando arrays...................................................................................................................586.1.2. Funes de manipulao de arrays..............................................................................................596.1.3. Cpia de arrays ........................................................................................................................61

    6.2. Listas de Expresses e Blocos de Cdigo................................................................................... 636.2.1. Premissas para utilizao de Blocos de Cdigo..............................................................................636.2.2. Lista de expresses...................................................................................................................646.2.3. Blocos de Cdigo ......................................................................................................................666.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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    3/225

    - 3 -

    Introduo programao e ADVPL Bsico

    9.3. O Configurador do Protheus...................................................................................................... 949.3.1. Funcionalidades Abordadas ........................................................................................................949.3.2. Estruturas bsicas da aplicao ERP Protheus............................................................................... 949.3.3. Acessando o mdulo Configurador ..............................................................................................97

    9.4. Funcionalidades do Configurador............................................................................................ 1009.4.1. Dicionrio de Dados da aplicao ERP........................................................................................ 1019.4.2. Adio de tabelas ao Dicionrio de Dados .................................................................................. 1019.4.3. Adio de campos as tabelas do Dicionrio de Dados................................................................... 1049.4.4. Adio de ndices para as tabelas do Dicionrio de Dados ............................................................ 1099.4.5. Adio de gatilhos para os campos das tabelas do sistema........................................................... 1129.4.6. Criao de Tabelas Genricas ................................................................................................... 1149.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........................................................................................ 13012.1.2. Pictures de formao disponveis .......................................................................................... 132

    12.2. Customizao de gatilhos Configurador ............................................................................... 134

    12.3. Customizao de parmetros Configurador.......................................................................... 13512.3.1. Funes para manipulao de parmetros ............................................................................. 13512.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 ...................................................................... 14113.2.1. AxCadastro() ..................................................................................................................... 14113.2.2. MBrowse()......................................................................................................................... 14213.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........................................................................................................... 160CTOD()...................................................................................................................................... 160CVALTOCHAR()........................................................................................................................... 160DTOC()...................................................................................................................................... 161DTOS()...................................................................................................................................... 161

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    4/225

    - 4 -

    Introduo programao e ADVPL Bsico

    STOD()...................................................................................................................................... 161STR() ........................................................................................................................................ 162STRZERO() ................................................................................................................................ 162VAL() ........................................................................................................................................ 163

    Matemticas........................................................................................................................................ 164ACOS()...................................................................................................................................... 164CEILING().................................................................................................................................. 164COS()........................................................................................................................................ 164LOG10() .................................................................................................................................... 165SIN()......................................................................................................................................... 165SQRT() ...................................................................................................................................... 166TAN() ........................................................................................................................................ 166

    Verificao de tipos de variveis ......................................................................................................... 167TYPE()....................................................................................................................................... 167VALTYPE()..................................................................................................................................167

    Manipulao de arrays......................................................................................................................... 168ARRAY() .................................................................................................................................... 168AADD()...................................................................................................................................... 169ACLONE() .................................................................................................................................. 170ADEL() ...................................................................................................................................... 170ASIZE() ..................................................................................................................................... 171ASORT() .................................................................................................................................... 171ASCAN() .................................................................................................................................... 173AINS()....................................................................................................................................... 174

    Manipulao de blocos de cdigo......................................................................................................... 175EVAL()....................................................................................................................................... 175DBEVAL()................................................................................................................................... 175AEVAL()..................................................................................................................................... 177

    Manipulao de strings........................................................................................................................ 178ALLTRIM().................................................................................................................................. 178ASC() ........................................................................................................................................ 178AT() .......................................................................................................................................... 179BITON()..................................................................................................................................... 180CHR()........................................................................................................................................ 180DESCEND() ................................................................................................................................ 180GETDTOVAL()............................................................................................................................. 181ISALPHA().................................................................................................................................. 182ISDIGIT() .................................................................................................................................. 182ISLOWER() ................................................................................................................................ 182ISUPPER().................................................................................................................................. 183LEN() ........................................................................................................................................ 183LOWER().................................................................................................................................... 184LTRIM() ..................................................................................................................................... 184MATHC().................................................................................................................................... 185OEMTOANSI() ............................................................................................................................ 185PADL() / PADR() / PADC()............................................................................................................186RAT() ........................................................................................................................................ 186RTRIM()..................................................................................................................................... 187SPACE()..................................................................................................................................... 187STRTOKARR().............................................................................................................................188STRTRAN().................................................................................................................................188STUFF()..................................................................................................................................... 189SUBSTR() .................................................................................................................................. 189TRANSFORM() ............................................................................................................................ 190UPPER()..................................................................................................................................... 190

    Manipulao de data / hora................................................................................................................. 191CDOW()..................................................................................................................................... 191CMONTH() ................................................................................................................................. 191DATE() ...................................................................................................................................... 192DAY() ........................................................................................................................................ 192DOW()....................................................................................................................................... 193DTOC()...................................................................................................................................... 193DTOS()...................................................................................................................................... 194ELAPTIME()................................................................................................................................ 194MONTH() ................................................................................................................................... 195SECONDS()................................................................................................................................ 195

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    5/225

    - 5 -

    Introduo programao e ADVPL Bsico

    TIME()....................................................................................................................................... 196YEAR() ...................................................................................................................................... 196

    Manipulao de variveis numricas ................................................................................................... 197ABS() ........................................................................................................................................ 197INT()......................................................................................................................................... 197NOROUND() ............................................................................................................................... 198ROUND() ................................................................................................................................... 198

    Manipulao de arquivos ..................................................................................................................... 199SELECT() ................................................................................................................................... 199

    DBGOTO() ................................................................................................................................. 199DBGOTOP()................................................................................................................................ 200DBGOBOTTON()..........................................................................................................................200DBSELECTAREA()........................................................................................................................ 201DBSETORDER() .......................................................................................................................... 201DBSEEK() E MSSEEK()................................................................................................................. 202DBSKIP() ................................................................................................................................... 203DBSETFILTER()........................................................................................................................... 204DBSTRUCT() .............................................................................................................................. 205RECLOCK() ................................................................................................................................ 205MSUNLOCK().............................................................................................................................. 206SOFTLOCK()............................................................................................................................... 207DBDELETE() ............................................................................................................................... 208DBUSEAREA() ............................................................................................................................ 208DBCLOSEAREA()......................................................................................................................... 209

    Controle de numerao seqencial...................................................................................................... 209

    GETSXENUM() ............................................................................................................................ 209CONFIRMSXE()........................................................................................................................... 209ROLLBACKSXE() ......................................................................................................................... 210

    Validao............................................................................................................................................. 210EXISTCHAV() ............................................................................................................................. 210EXISTCPO() ............................................................................................................................... 210NAOVAZIO() .............................................................................................................................. 211NEGATIVO()............................................................................................................................... 211PERTENCE() ............................................................................................................................... 211POSITIVO()................................................................................................................................ 211TEXTO() .................................................................................................................................... 211VAZIO()..................................................................................................................................... 212

    Parmetros.......................................................................................................................................... 212GETMV().................................................................................................................................... 212GETNEWPAR()............................................................................................................................ 212PUTMV() .................................................................................................................................... 213SUPERGETMV()........................................................................................................................... 213

    Componentes da interface visual......................................................................................................... 214MSDIALOG() .............................................................................................................................. 214MSGET().................................................................................................................................... 215SAY() ........................................................................................................................................ 216BUTTON() .................................................................................................................................. 216SBUTTON() ................................................................................................................................ 217

    Interfaces de cadastro ........................................................................................................................ 218AXCADASTRO() .......................................................................................................................... 218MBROWSE()............................................................................................................................... 218AXPESQUI() ............................................................................................................................... 218AXVISUAL() ............................................................................................................................... 219AXINCLUI()................................................................................................................................ 219AXALTERA() ............................................................................................................................... 220AXDELETA() ............................................................................................................................... 221

    Funes visuais para aplicaes.......................................................................................................... 222ALERT()..................................................................................................................................... 222AVISO()..................................................................................................................................... 222FORMBACTH() ............................................................................................................................ 223MSGFUNCTIONS()....................................................................................................................... 224

    Funes ADVPL para aplicaes .......................................................................................................... 225GETAREA()................................................................................................................................. 225RESTAREA()............................................................................................................................... 225

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    6/225

    - 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 eatitudes:

    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 noERP Protheus;

    embasar a realizao de outros cursos relativos a linguagem ADVPL.

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    7/225

    - 7 -

    Introduo programao e ADVPL Bsico

    MDULO 01: Introduo programao

    1.Lgica de Programao e AlgoritmosNo aprendizado de qualquer linguagem de programao essencial desenvolver os conceitosrelacionados a lgica e a tcnica da escrita de um programa.

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

    Lgica de programao Algoritmos Diagramas de blocos

    1.1. Lgica de ProgramaoLgica

    A lgica de programao necessria para pessoas que desejam trabalhar com

    desenvolvimento de sistemas e programas, ela permite definir a seqncia lgica para odesenvolvimento. Ento o que lgica?

    Lgica de programao a tcnica de encadear pensamentos para atingirdeterminado objetivo.

    Seqncia Lgica

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

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

    Instrues

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

    Em informtica, porm, instruo a informao que indica a um computador uma aoelementar a executar. Convm ressaltar que uma ordem isolada no permite realizar oprocesso 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 prticauma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc. evidenteque essas instrues tm que ser executadas em uma ordem adequada no se podedescascar as batatas depois de frit-las.

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    8/225

    - 8 -

    Introduo programao e ADVPL Bsico

    Dessa maneira, uma instruo tomada em separado no tem muito sentido; para obtermos oresultado, 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 ouemprego de algo. Em informtica, o que indica a um computador uma aoelementar a executar.

    Algoritmo

    Um algoritmo formalmente uma seqncia finita de passos que levam a execuo de umatarefa. Podemos pensar em algoritmo como uma receita, uma seqncia de instrues que docabo de uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na suadefinio, 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 osmanuais 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 bala1. Pegar a bala;2. Retirar o papel;3. Chupar a bala;4. Jogar o papel no lixo.

    Somar dois nmeros quaisquer1. 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 algoritmosPseudocdigo

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

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    9/225

    - 9 -

    Introduo programao e ADVPL Bsico

    Regras para construo do Algoritmo

    Para escrever um algoritmo precisamos descrever a seqncia de instrues, de maneirasimples 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 necessrioinicialmente 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 algoritmosNeste tpico sero demonstrados alguns algoritmos do cotidiano, os quais foramimplementados 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 chiclete2. Retirar o papel3. Mastigar4. Jogar o papel no lixo

    Utilizar um telefone pblico - carto

    1. Retirar o telefone do gancho2. Esperar o sinal3. Colocar o carto4. Discar o nmero5. Falar no telefone6. Colocar o telefone no ganho

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    10/225

    - 10 -

    Introduo programao e ADVPL Bsico

    Fritar um ovo

    1. Pegar frigideira, ovo, leo e sal2. Colocar leo na frigideira3. Ascender o fogo4. Colocar a frigideira no fogo5. Esperar o leo esquentar6. Quebrar o ovo na frigideira7. Jogar a casca no lixo8. Retirar a frigideira do fogo quando o ovo estiver no ponto9. Desligar o fogo10.Colocar sal a gosto

    Trocar lmpadas

    1. Se a lmpada estiver fora do alcance, pegar uma escada2. Pegar a lmpada nova3. Se a lmpada queimada estiver quente, pegar um pano4. Tirar lmpada queimada5. Colocar lmpada nova

    Descascar batatas

    1. Pegar faca, bacia e batatas2. Colocar gua na bacia3. Enquanto houver batatas, descascar as batatas

    3.1. Colocar as batatas descascadas na baciaJogar o jogo da forca

    1. Escolher a palavra2. Montar o diagrama do jogo3. Enquanto houver lacunas vazias e o corpo estiver incompleto:

    3.1.

    Se acertar a letra: escrever na lacuna correspondente3.2. Se errar a letra: desenhar uma parte do corpo na forcaCalcular 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 depois1.2. Se centro estiver livre: jogue no centro1.3. Seno, se o adversrio possuir 2 quadrados em linha com um quadrado livre,

    jogue neste quadrado1.4. Seno, se h algum canto livre, jogue neste canto

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    11/225

    - 11 -

    Introduo programao e ADVPL Bsico

    1.2.2. Teste de mesaAps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado deTESTE DE MESA, que significa seguir as instrues do algoritmo de maneira precisa paraverificar 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 Nota1 8.02 7.03 8.04 8.0

    5 7.06 7.0

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    12/225

    - 12 -

    Introduo programao e ADVPL Bsico

    2.Estruturas de programao2.1. Diagrama de blocoO diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos deum 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 representadosalguns dos smbolos mais utilizados:

    Smbolo Funo

    Terminador

    Indica o incio e o fim de um processamento.

    Processamento

    Processamento em geral.

    EntradaManual

    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 umprocessamento.

    Documento

    Indica um documento utilizado peloprocessamento, seja para entrada deinformaes ou para exibio dos dadosdisponveis aps um processamento.

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    13/225

    - 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 sal2. Colocar leo na frigideira3. Ascender o fogo

    4. Colocar a frigideira no fogo5. Esperar o leo esquentar6. Quebrar o ovo na frigideira7. Jogar a casca no lixo8. Retirar a frigideira do fogo quando o ovo estiver no ponto9. Desligar o fogo10. Colocar sal a gosto

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    14/225

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    15/225

    - 15 -

    Introduo programao e ADVPL Bsico

    2.2. Estruturas de deciso e repetioA utilizao de estruturas de deciso e repetio em um algoritmo permite a realizao deaes 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 decisoo IF...ELSEo DO CASE ... CASE

    Estruturas de repetioo WHILE...ENDo FOR...NEXT

    2.2.1. Estruturas de decisoOs comandos de deciso so utilizados em algoritmos cuja soluo no obtida atravs dautilizao 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 serexecutada uma de duas aes possveis: se a anlise da condio resultar em um valorverdadeiro ou se a anlise da condio resultar em um valor falso.

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    16/225

    - 16 -

    Introduo programao e ADVPL Bsico

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

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

    Ao vinculada ao

    resultado

    verdadeiro

    Anlise dacondio

    Verdadeiro

    Falso

    Aes anteriores...

    Continuao do

    fluxo aps a

    tomada dadeciso

    Apesar das linguagens de programao possurem variaes para a estruturaIF...ELSE, conceitualmente todas as representaes podem ser descritas combase no modelo apresentado.

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    17/225

    - 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 vinculadaexecutada.

    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 nicoresultado verdadeiro ou falso.

    Anlise da

    condio 1

    Verdadeiro

    Falso

    Aes anteriores

    ...

    Continuao dofluxo aps a

    tomada da

    deciso

    Ao vinculada a

    condio 1

    Anlise dacondio 2

    Verdadeiro Ao vinculada acondio 2

    Anlise dacondio N

    Verdadeiro Ao vinculada acondio N

    Falso

    Falso

    Falso

    Apesar das linguagens de programao possurem variaes para a estruturaDO CASE...CASE, conceitualmente todas as representaes podem ser

    descritas com base no modelo apresentado.

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    18/225

    - 18 -

    Introduo programao e ADVPL Bsico

    2.2.2. Estruturas de repetioOs comandos de repetio so utilizados em algoritmos nas situaes em que necessriorealizar uma determinada ao ou um conjunto de aes para um nmero definido ouindefinido 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 dereferncia resultar em um valor verdadeiro. importante verificar que o bloco somente serexecutado, inclusive se na primeira anlise a condio resultar em um valor verdadeiro.

    Representao: WHILE...END

    Ao vinculada ao

    resultadoverdadeiro

    Anlise da

    condio

    Verdadeiro

    Falso

    Aes anteriores...

    Continuao dofluxo

    ...

    Loop

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

    A linguagem ADVPL aceita a sintaxe DO WHILE...ENDDO, que em outraslinguagens representa a situao descrita anteriormente (anlise da condiosomente a partir da segunda execuo), mas em ADVPL esta sintaxe tem omesmo efeito do WHILE...END.

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    19/225

    - 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 queverificar se foi atingido o nmero de execues previamente definido. Desta forma aestrutura 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 umresultado 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 instruoNEXT, ou a adio de outro valor ao contador, o qual dever especificado deacordo com a sintaxe da linguagem.

    Em ADVPL pode ser utilizada a instruo STEPS para alterar o valor a seradicionado no contador de passos a cada execuo da instruo NEXT, sendoque este valor poder ser at negativo, viabilizando uma contagemdecrescente.

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    20/225

    - 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 delinguagens no padro xBase pela Microsiga Software S.A. (Clipper, Visual Objects e depoisFiveWin). Com a criao da tecnologia Protheus, era necessrio criar uma linguagem quesuportasse o padro xBase para a manuteno de todo o cdigo existente do sistema de ERPSiga Advanced. Foi ento criada a linguagem chamadaAdvanced Protheus Language.

    O ADVPL uma extenso do padro xBase de comandos e funes, operadores, estruturas decontrole de fluxo e palavras reservadas, contando tambm com funes e comandosdisponibilizados pela Microsiga que a torna uma linguagem completa para a criao deaplicaes ERP prontas para a Internet. Tambm uma linguagem orientada a objetos eeventos, permitindo ao programador desenvolver aplicaes visuais e criar suas prpriasclasses 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 umrepositrio e carregados dinamicamente pelo PROTHEUS Server para a execuo. Como noexiste a linkedio, ou unio fsica do cdigo compilado a um determinado mdulo ouaplicao, 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. Deacordo 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 doterminal 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 docdigo em ADVPL, o acesso ao banco de dados e o gerenciamento de conexes efetuado noProtheus Server. O Protheus Remote o principal meio de acesso a execuo de rotinasescritas 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 osprogramas que realizem algum tipo de interface remota utilizando o protocolo de comunicaodo Protheus.

    Podem-se criar rotinas para a customizao do sistema ERP Microsiga Protheus, desdeprocessos adicionais at mesmo relatrios. A grande vantagem aproveitar todo o ambientemontado pelos mdulos do ERP Microsiga Protheus. Porm, com o ADVPL possvel atmesmo 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 umautilizao mais especfica do que um processo adicional ou um relatrio novo. Tais rotinas notm interface com o usurio atravs do Protheus Remote, e qualquer tentativa nesse sentido

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    21/225

    - 21 -

    Introduo programao e ADVPL Bsico

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

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

    Programao por ProcessosRotinas escritas em ADVPL podem ser iniciadas como processos individuais (sem interface) noProtheus Server atravs de duas maneiras: Iniciadas por outra rotina ADVPL atravs dachamada de funes como StartJob() ou CallProc() ou iniciadas automaticamente nainicializao do Protheus Server (quando propriamente configurado).

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

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

    O Protheus Server pode tambm ser executado como um servidor Web, respondendo arequisies HTTP. No momento destas requisies, pode executar rotinas escritas em ADVPLcomo processos individuais, enviando o resultado das funes como retorno das requisiespara o cliente HTTP (como por exemplo, um Browser de Internet). Qualquer rotina escrita emADVPL que no contenha comandos de interface pode ser executada atravs de requisiesHTTP. 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 TelNetTelNet parte da gama de protocolos TCP/IP que permite a conexo a um computador remotoatravs de uma aplicao cliente deste protocolo. O PROTHEUS Server pode emular umterminal TelNet, atravs da execuo de rotinas escritas em ADVPL. Ou seja, pode-se escreverrotinas ADVPL cuja interface final ser um terminal TelNet ou um coletor de dados mvel.

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    22/225

    - 22 -

    Introduo programao e ADVPL Bsico

    3.Estrutura de um Programa ADVPLUm programa de computador nada mais do que um grupo de comandos logicamentedispostos com o objetivo de executar determinada tarefa. Esses comandos so gravados emum arquivo texto que transformado em uma linguagem executvel por um computadoratravs de um processo chamado compilao. A compilao substitui os comandos de altonvel (que os humanos compreendem) por instrues de baixo nvel (compreendida pelo

    sistema operacional em execuo no computador). No caso do ADVPL, no o sistemaoperacional de um computador que ir executar o cdigo compilado, mas sim o ProtheusServer.

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

    Erros de compilao so aqueles encontrados na sintaxe que no permitem que o arquivo decdigo 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 funesno 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 decomando, linhas de comentrio ou linhas mistas.

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

    Local nCntLocal nSoma := 0For nCnt := 1 To 10nSoma += nCntNext nCnt

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    23/225

    - 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 funodo sinal de asterisco. Porm todas estas formas de comentrio de linhas so obsoletas eexistem apenas para compatibilizao com o padro xBase. A melhor maneira de comentarlinhas 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 oasterisco, podendo-se comentar todo um bloco de texto sem precisar comentar linha a linha:

    /*Programa para clculo do totalAutor: 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 MistasO ADVPL tambm permite que existam linhas de comando com comentrio. Isto possveladicionando-se as duas barras transversais (//) ao final da linha de comando e adicionando-seo texto do comentrio:

    Local nCntLocal nSoma := 0 // Inicializa a varivel com zero para a somaFor nCnt := 1 To 10nSoma += nCntNext nCnt

    Tamanho da LinhaAssim como a linha fsica, delimitada pela quantidade de caracteres que pode ser digitado noeditor de textos utilizado, existe uma linha considerada linha lgica. A linha lgica, aquelaconsiderada 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, porlimitao fsica do editor de texto ou por esttica, pode-se "quebrar" a linha lgica em mais deuma 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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    24/225

    - 24 -

    Introduo programao e ADVPL Bsico

    Neste exemplo existe uma linha de comando para a checagem das variveis utilizadas. Como alinha torna-se muito grande, pode-se dividi-la em mais de uma linha fsica utilizando o sinal deponto-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 serconsiderada como uma segunda linha de comando na compilao. E durante a execuo estalinha no ter sentido.

    3.1. reas de um Programa ADVPLApesar 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 nCntLocal nResultado := 1 // Resultado do fatorialLocal nFator := 5 // Nmero para o clculo

    // Clculo do fatorialFor nCnt := nFator To 1 Step -1nResultado *= nCntNext nCnt

    // Exibe o resultado na tela, atravs da funo alert

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

    // Termina o programaReturn

    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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    25/225

    - 25 -

    Introduo programao e ADVPL Bsico

    rea de Identificao

    Esta uma rea que no obrigatria e dedicada a documentao do programa. Quandoexistente, 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 inclusode arquivos de cabealho nesta rea.

    rea de Ajustes Iniciais

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

    Local nCntLocal nResultado := 0 // Resultado do fatorialLocal nFator := 10 // Nmero para o clculo

    Corpo do Programa

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

    // Clculo do fatorial

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    26/225

    - 26 -

    Introduo programao e ADVPL Bsico

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

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

    // Clculo do fatorialnFator := GetFator()// GetFator funo ilustrativa na qual a varivel recebe a informao do usurio.

    If nFator

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    27/225

    - 27 -

    Introduo programao e ADVPL Bsico

    4.Declarao e Atribuio de Variveis4.1. Tipo de DadosO ADVPL no uma linguagem de tipos rgidos (strongly typed), o que significa que variveisde memria podem receber diferentes tipos de dados durante a execuo do programa.

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

    Numrico

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

    243.530.50.000011000000

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

    Lgico

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

    Caractere

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

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

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

    Data

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    28/225

    - 28 -

    Introduo programao e ADVPL Bsico

    Array

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

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

    Bloco de Cdigo

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

    4.2. Declarao de variveisVariveis de memria so um dos recursos mais importantes de uma linguagem. So reas dememria criadas para armazenar informaes utilizadas por um programa para a execuo de

    tarefas. Por exemplo, quando o usurio digita uma informao qualquer, como o nome de umproduto, em uma tela de um programa esta informao armazenada em uma varivel dememria para posteriormente ser gravada ou impressa.

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

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

    Portanto se forem criadas duas variveis cujos 10 primeiros caracteres forem iguais, como

    nTotalGeralAnual e nTotalGeralMensal, as referncias a qualquer uma delas no programaresultaro o mesmo, ou seja, sero a mesma varivel:

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    29/225

    - 29 -

    Introduo programao e ADVPL Bsico

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

    Tambm no h necessidade de declarar variveis em uma seo especfica do seu cdigo

    fonte, embora seja aconselhvel declarar todas as variveis necessrias no comeo, tornandoa manuteno mais fcil e evitando a declarao de variveis desnecessrias.

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

    O Contexto de Variveis dentro de um Programa

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

    Local nNumero := 10

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

    Os identificadores de escopo so:

    Local Static Private Public

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

    nNumero2 := 15

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

    Devido a essa caracterstica, quando se pretende fazer uma atribuio a uma variveldeclarada previamente mas escreve-se o nome da varivel de forma incorreta, o ADVPL nogerar nenhum erro de compilao ou de execuo. Pois compreender o nome da varivelescrito de forma incorreta como se fosse a criao de uma nova varivel. Isto alterar a lgica

    do programa, e um erro muitas vezes difcil de identificar.

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    30/225

    - 30 -

    Introduo programao e ADVPL Bsico

    Variveis de escopo local

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

    Function Pai()

    Local nVar := 10, aMatriz := {0,1,2,3}..Filha()..Return(.T.)

    Neste exemplo, a varivel nVar foi declarada como local e atribuda com o valor 10. Quando afuno Filha executada, nVar ainda existe mas no pode ser acessada. Quando a execuo

    da funo Pai terminar, a varivel nVar destruda. Qualquer varivel com o mesmo nome noprograma que chamou a funo Pai no afetada.

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

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

    Variveis de escopo static

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    31/225

    - 31 -

    Introduo programao e ADVPL Bsico

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

    Function Pai()Static nVar := 10..

    Filha()..Return(.T.)

    Quando a funo Filha executada, nVar ainda existe mas no pode ser acessada. Diferentede variveis declaradas como LOCAL ou PRIVATE, nVar continua a existir e mantm seu valoratual quando a execuo da funo Pai termina. Entretanto, somente pode ser acessada porexecues subseqentes da funo Pai.

    Variveis de escopo private

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

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

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    32/225

    - 32 -

    Introduo programao e ADVPL Bsico

    Por exemplo:

    Function Pai()Private nVar := 10.

    Filha().Return(.T.)

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

    No ambiente ERP Protheus, existe uma conveno adicional a qual deve serrespeitada que variveis em uso pela aplicao no sejam incorretamente

    manipuladas. Por esta conveno deve ser adicionado o caracter _ antesdo nome de variveis PRIVATE e PUBLIC. Maiores informaes avaliar otpico: Boas Prticas de Programao.

    Exemplo: Private _dData

    Variveis de escopo public

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

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

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

    Function Pai()Public nVar := 10.Filha().Return(.T.)

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    33/225

    - 33 -

    Introduo programao e ADVPL Bsico

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

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

    No ambiente ERP Protheus, existe uma conveno adicional a qual deve ser

    respeitada que variveis em uso pela aplicao no sejam incorretamentemanipuladas. Por esta conveno deve ser adicionado o caracter _ antesdo nome de variveis PRIVATE e PUBLIC. Maiores informaes avaliar otpico: Boas Prticas de Programao.

    Exemplo: Public _cRotina

    4.4. Entendendo a influncia do escopo das variveisConsidere as linhas de cdigo de exemplo:

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

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

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

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

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

    ou

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    34/225

    - 34 -

    Introduo programao e ADVPL Bsico

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

    4.5. Operaes com Variveis4.5.1. Atribuio de variveisUma vez que um valor lhe seja atribudo, o tipo de dado de uma varivel igual ao tipo dedado do valor atribudo. Ou seja, uma varivel passa a ser numrica se um nmero lhe atribudo, passa a ser caractere se uma string de texto lhe for atribuda, etc. Porm mesmoque uma varivel seja de determinado tipo de dado, pode-se mudar o tipo da varivelatribuindo outro tipo a ela:

    01 Local xVariavel // Declara a varivel inicialmente com valor nulo0203 xVariavel := "Agora a varivel caractere..."04 Alert("Valor do Texto: " + xVariavel)0506 xVariavel := 22 // Agora a varivel numrica

    07 Alert(cValToChar(xVariavel))0809 xVariavel := .T. // Agora a varivel lgica10 If xVariavel11 Alert("A varivel tem valor verdadeiro...")12 Else13 Alert("A varivel tem valor falso...")14 Endif1516 xVariavel := Date() // Agora a varivel data17 Alert("Hoje : " + DtoC(xVariavel))1819 xVariavel := nil // Nulo novamente

    20 Alert("Valor nulo: " + xVariavel)2122 Return

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

    Apesar dessa flexibilidade de utilizao de variveis, devem-se tomar cuidados na passagem

    de parmetros para funes ou comandos, e na concatenao (ou soma) de valores. Note alinha 20 do programa de exemplo. Quando esta linha executada, a varivel xVariavel contmo valor nulo. A tentativa de soma de tipos de dados diferentes gera erro de execuo doprograma. Nesta linha do exemplo, ocorrer um erro com a mensagem "type mismatch on +".

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    35/225

    - 35 -

    Introduo programao e ADVPL Bsico

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

    If xVariavel o mesmo que

    If xVariavel = .T.

    4.5.2. Operadores da linguagem ADVPLOperadores comuns

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

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

    Local nSalario := 1000, nDesconto := 0.10

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

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

    Operadores Matemticos

    Os operadores utilizados em ADVPL para clculos matemticos so:

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

    Operadores de String

    Os operadores utilizados em ADVPL para tratamento de caracteres so:

    + Concatenao de strings (unio)- Concatenao de strings com eliminao dos brancos finais das strings

    intermedirias$ Comparao de Substrings (contido em)

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    36/225

    - 36 -

    Introduo programao e ADVPL Bsico

    Operadores Relacionais

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

    < Comparao Menor> Comparao Maior= Comparao Igual

    == Comparao Exatamente Igual (para caracteres)= Comparao Maior ou Igual ou #ou !=

    Comparao Diferente

    Operadores Lgicos

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

    .And. E lgico

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

    Operadores de Atribuio

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

    := Atribuio Simples+= Adio e Atribuio em Linha-= Subtrao e Atribuio em Linha*= Multiplicao e Atribuio em Linha/= Diviso e Atribuio em Linha**= ou^=

    Exponenciao e Atribuio em Linha

    %= Mdulo (resto da diviso) e Atribuio em Linha

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

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

    nVar1 := nVar2 := nVar3 := 0

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    37/225

    - 37 -

    Introduo programao e ADVPL Bsico

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

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

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

    porLocal nVar1 := nVar2 := nVar3 := 0

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

    Atribuio CompostaOs operadores de atribuio composta so uma facilidade da linguagem ADVPL paraexpresses de clculo e atribuio. Com eles pode-se economizar digitao:

    Operador Exemplo Equivalente a+= X += Y X = X + Y

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

    Operadores de Incremento/Decremento

    A linguagem ADVPL possui operadores para realizar incremento ou decremento de variveis.Entende-se por incremento aumentar o valor de uma varivel numrica em 1 e entende-se pordecremento diminuir o valor da varivel em 1. Os operadores so:

    ++ Incremento Ps ou Pr-fixado

    -- Decremento Ps ou Pr-fixado

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

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

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

    resultado final aps a execuo destas duas linhas a varivel nB contendo 21 e a varivel nAcontendo 11.

    No entanto:

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    38/225

    - 38 -

    Introduo programao e ADVPL Bsico

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

    Operadores Especiais

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

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

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

    Os colchetes so utilizados para especificar um elemento especfico de uma matriz. Porexemplo, A[3,2], refere-se ao elemento da matriz A na linha 3, coluna 2. As chaves so utilizadas para a especificao de matrizes literais ou blocos de cdigo.Por exemplo, A:={10,20,30} cria uma matriz chamada A com trs elementos.

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

    O smbolo & identifica uma avaliao de expresso atravs de macro e visto emdetalhes na documentao sobre macro substituio.

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

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

  • 8/8/2019 AMM - ADVPL Bsico_rev01_2

    39/225

    - 39 -

    Introduo programao e ADVPL Bsico

    Ordem de Precedncia dos Operadores

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

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

    1. Operadores de Incremento/Decremento pr-fixado2. Operadores de String3. Operadores Matemticos4. Operadores Relacionais5. Operadores Lgicos6. Operadores de Atribuio7. Operadores de Incremento/Decremento ps-fixadoEm expresses complexas com diferentes tipos de operadores, a avaliao seguir essaseqncia. Caso exista mais de um operador do mesmo tipo (ou seja, de mesmo nvel), aavaliao se d da esquerda para direita. Para os operadores matemticos entretanto, h umaprecedncia a seguir:

    1. Exponenciao2. Multiplicao e Diviso3. Adio e SubtraoConsidere o exemplo:

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

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

    Alterao da PrecednciaA utilizao de parnteses dentro de uma expresso altera a ordem de precedncia dosoperadores. Operandos entre parnteses so analisados antes dos que se encontram fora