Programação ADVPL I_P11.docx

download Programação ADVPL I_P11.docx

of 219

Transcript of Programação ADVPL I_P11.docx

  • 8/12/2019 Programao ADVPL I_P11.docx

    1/219

    Programao ADVPL I

    Todos os direitos autorais reservados pela TOTVS S.A.

    Proibida a reproduo total ou parcial, bem como a armazenagem em sistema de recuperao e atransmisso, de qualquer modo ou por qualquer outro meio, seja este eletrnico, mecnico, de fotocpia, degravao, ou outros, sem prvia autorizao por escrito da proprietria.

    O desrespeito a essa proibio configura em apropriao indevida dos direitos autorais e patrimoniais daTOTVS.

    Conforme artigos 122 e 130 da LEI no. 5.988 de 14 de Dezembro de 1973.

    Programao

    ADVPL I

    Protheus

    11

    http://www.totvs.com/
  • 8/12/2019 Programao ADVPL I_P11.docx

    2/219

    - 2 -

    Introduo programao e ADVPL Bsico

    SUMRIO

    OBJETIVOS DO CURSO .............................................................................................. 8

    MDULO 01: INTRODUO PROGRAMAO ......................................................... 9

    LGICA DE PROGRAMAO E ALGORITMOS ............................................................. 9

    Lgica de Programao ............................................................................................. 9

    Desenvolvendo algoritmos ..................................................................................... 11

    Estudando algoritmos ..................................................................................................... 11

    Teste de mesa ................................................................................................................. 13

    ESTRUTURAS DE PROGRAMAO ........................................................................... 15

    Diagrama de bloco ................................................................................................. 15

    Estruturas de deciso e repetio ........................................................................... 19

    Estruturas de deciso ..................................................................................................... 19

    Estruturas de repetio .................................................................................................. 23

    MDULO 02: A LINGUAGEM ADVPL ........................................................................ 27

    ESTRUTURA DE UM PROGRAMA ADVPL .................................................................. 30

    reas de um Programa ADVPL ................................................................................ 32

    DECLARAO E ATRIBUIO DE VARIVEIS ............................................................ 36

    Tipo de Dados ........................................................................................................ 36

    Declarao de variveis .......................................................................................... 37

    Escopo de variveis ................................................................................................ 38

    Entendendo a influncia do escopo das variveis .................................................... 43

    Operaes com Variveis ........................................................................................ 44

    Atribuio de variveis ................................................................................................... 44Operadores da linguagem ADVPL................................................................................... 45

    Operao de Macro Substituio ................................................................................... 51

    Funes de manipulao de variveis ............................................................................ 52

    ESTRUTURAS BSICAS DE PROGRAMAO ............................................................. 58

    Estruturas de repetio .......................................................................................... 58

    Influenciando o fluxo de repetio................................................................................. 61

    Estruturas de deciso ............................................................................................. 63

  • 8/12/2019 Programao ADVPL I_P11.docx

    3/219

    - 3 -

    Introduo programao e ADVPL Bsico

    ARRAYS E BLOCOS DE CDIGO ................................................................................ 68

    Arrays .................................................................................................................... 68

    Inicializando arrays ......................................................................................................... 70

    Funes de manipulao de arrays ................................................................................ 71

    Cpia de arrays ............................................................................................................... 73

    Listas de Expresses e Blocos de Cdigo .................................................................. 75

    Premissas para utilizao de Blocos de Cdigo .............................................................. 75

    Lista de expresses ......................................................................................................... 76

    Blocos de Cdigo ............................................................................................................ 78

    Funes para manipulao de blocos de cdigo ............................................................ 80

    FUNES ................................................................................................................ 81

    Tipos e escopos de funes ..................................................................................... 82

    Passagem de parmetros entre funes .................................................................. 85

    DIRETIVAS DE COMPILAO ................................................................................... 91

    MDULO 03: DESENVOLVENDO PEQUENAS CUSTOMIZAES ................................ 97

    ADVPL E O ERP MICROSIGA PROTHEUS ................................................................... 97

    O Ambiente Protheus ............................................................................................. 97

    Organizao e configurao inicial do ambiente Protheus ..................................... 102

    O Configurador do Protheus ................................................................................. 109Funcionalidades Abordadas ......................................................................................... 109

    Estruturas bsicas da aplicao ERP Protheus ............................................................. 109

    Acessando o mdulo Configurador .............................................................................. 112

    Funcionalidades do Configurador ......................................................................... 115

    Dicionrio de Dados da aplicao ERP ......................................................................... 116

    Adio de tabelas ao Dicionrio de Dados ................................................................... 116

    Adio de campos s tabelas do Dicionrio de Dados ................................................. 119

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

    Adio de gatilhos para os campos das tabelas do Sistema ........................................ 129

    Criao de Tabelas Genricas ....................................................................................... 131

    Criao de Parmetros ................................................................................................. 132

    TOTVS DEVELOPMENT STUDIO ............................................................................. 134

    DESENVOLVIMENTO DE PEQUENAS CUSTOMIZAES .......................................... 137

    ACESSO E MANIPULAO DE BASES DE DADOS EM ADVPL ................................... 137

    Diferenas e compatibilizaes entre bases de dados............................................ 138

  • 8/12/2019 Programao ADVPL I_P11.docx

    4/219

    - 4 -

    Introduo programao e ADVPL Bsico

    Funes de acesso e manipulao de dados .......................................................... 139

    Diferenciao entre variveis e nomes de campos ................................................ 145

    Controle de numerao seqencial ....................................................................... 146

    CUSTOMIZAES PARA A APLICAO ERP ............................................................ 147Customizao de camposDicionrio de Dados ................................................... 148

    Validaes de campos e perguntas .............................................................................. 148

    Pictures de formao disponveis ................................................................................. 150

    Customizao de gatilhosConfigurador .............................................................. 153

    Customizao de parmetrosConfigurador ........................................................ 154

    Funes para manipulao de parmetros .................................................................. 154

    Cuidados na utilizao de um parmetro..................................................................... 155

    Pontos de EntradaConceitos, Premissas e Regras .............................................. 156

    INTERFACES VISUAIS ............................................................................................ 157

    Sintaxe e componentes das interfaces visuais ....................................................... 157

    Interfaces padres para atualizaes de dados ..................................................... 160

    AxCadastro() ................................................................................................................. 160

    MBrowse() .................................................................................................................... 161

    AxFunctions() ................................................................................................................ 164

    APNDICES ........................................................................................................... 166

    BOAS PRTICAS DE PROGRAMAO..................................................................... 166

    UTILIZAO DE IDENTAO .................................................................................. 167

    CAPITULAO DE PALAVRAS-CHAVE ..................................................................... 168

    Palavras em maisculo ......................................................................................... 169

    UTILIZAO DA NOTAO HNGARA ................................................................... 169

    PALAVRAS RESERVADAS ....................................................................................... 170

    GUIA DE REFERNCIA RPIDA: Funes e Comandos ADVPL ................................. 171

    Converso entre tipos de dados ............................................................................ 171

    CTOD() ........................................................................................................................... 171

    CVALTOCHAR() .............................................................................................................. 171

    DTOC() ........................................................................................................................... 172

    DTOS() ........................................................................................................................... 172

    STOD() ........................................................................................................................... 172

    STR() .............................................................................................................................. 173

  • 8/12/2019 Programao ADVPL I_P11.docx

    5/219

    - 5 -

    Introduo programao e ADVPL Bsico

    STRZERO() ..................................................................................................................... 173

    VAL() ............................................................................................................................. 174

    Verificao de tipos de variveis ........................................................................... 174

    TYPE() ............................................................................................................................ 174

    VALTYPE() ...................................................................................................................... 174

    Manipulao de arrays ......................................................................................... 176

    Array() ........................................................................................................................... 176

    AADD() .......................................................................................................................... 176

    ACLONE() ...................................................................................................................... 177

    ADEL() ........................................................................................................................... 178

    ASIZE() ........................................................................................................................... 178

    ASORT() ......................................................................................................................... 179

    ASCAN() ......................................................................................................................... 181AINS() ............................................................................................................................ 182

    Manipulao de blocos de cdigo ......................................................................... 183

    EVAL()............................................................................................................................ 183

    DBEVAL() ....................................................................................................................... 183

    AEVAL() ......................................................................................................................... 185

    Manipulao de strings ........................................................................................ 186

    ALLTRIM()...................................................................................................................... 186

    ASC() ............................................................................................................................. 186

    AT() ............................................................................................................................... 187

    CHR() ............................................................................................................................. 188

    LEN().............................................................................................................................. 188

    LOWER() ........................................................................................................................ 188

    RAT() ............................................................................................................................. 189

    STUFF() .......................................................................................................................... 189

    SUBSTR() ....................................................................................................................... 190

    UPPER() ......................................................................................................................... 190

    Manipulao de variveis numricas .................................................................... 190ABS() ............................................................................................................................. 190

    INT() .............................................................................................................................. 191

    NOROUND() .................................................................................................................. 191

    ROUND() ....................................................................................................................... 192

    Manipulao de arquivos ..................................................................................... 192

    SELECT() ........................................................................................................................ 192

    DBGOTO() ..................................................................................................................... 193

    DBGOTOP() ................................................................................................................... 193

  • 8/12/2019 Programao ADVPL I_P11.docx

    6/219

    - 6 -

    Introduo programao e ADVPL Bsico

    DBGOBOTTON() ............................................................................................................ 194

    DBSELECTAREA() ........................................................................................................... 194

    DBSETORDER() .............................................................................................................. 195

    DBSEEK() E MSSEEK() .................................................................................................... 196

    DBSKIP() ........................................................................................................................ 197DBSETFILTER() ............................................................................................................... 198

    DBSTRUCT() .................................................................................................................. 199

    RECLOCK() ..................................................................................................................... 199

    MSUNLOCK() ................................................................................................................. 200

    SOFTLOCK() ................................................................................................................... 201

    DBDELETE() ................................................................................................................... 202

    DBUSEAREA() ................................................................................................................ 202

    DBCLOSEAREA() ............................................................................................................ 203

    Controle de numerao seqencial ....................................................................... 203

    GETSXENUM() ............................................................................................................... 203

    CONFIRMSXE() .............................................................................................................. 204

    ROLLBACKSXE() ............................................................................................................. 204

    Validao ............................................................................................................. 204

    EXISTCHAV() .................................................................................................................. 204

    EXISTCPO() .................................................................................................................... 204

    NAOVAZIO() .................................................................................................................. 205

    NEGATIVO() .................................................................................................................. 205PERTENCE() ................................................................................................................... 205

    POSITIVO() .................................................................................................................... 205

    TEXTO() ......................................................................................................................... 206

    VAZIO() .......................................................................................................................... 206

    Parmetros .......................................................................................................... 206

    GETMV() ........................................................................................................................ 206

    GETNEWPAR() ............................................................................................................... 206

    PUTMV() ....................................................................................................................... 207

    SUPERGETMV() ............................................................................................................. 207

    Componentes da interface visual .......................................................................... 208

    MSDIALOG() .................................................................................................................. 208

    MSGET() ........................................................................................................................ 208

    SAY() .............................................................................................................................. 209

    BUTTON() ...................................................................................................................... 210

    SBUTTON() .................................................................................................................... 210

    Interfaces de cadastro .......................................................................................... 211

  • 8/12/2019 Programao ADVPL I_P11.docx

    7/219

    - 7 -

    Introduo programao e ADVPL Bsico

    AXCADASTRO().............................................................................................................. 211

    MBROWSE() .................................................................................................................. 212

    AXPESQUI() ................................................................................................................... 212

    AXVISUAL() .................................................................................................................... 212

    AXINCLUI() .................................................................................................................... 213AXALTERA() ................................................................................................................... 214

    AXDELETA() ................................................................................................................... 214

    Funes visuais para aplicaes ............................................................................ 215

    ALERT() .......................................................................................................................... 215

    AVISO() .......................................................................................................................... 215

    FORMBACTH() ............................................................................................................... 216

    MSGFUNCTIONS() ......................................................................................................... 217

    Funes ADVPL para aplicaes ............................................................................ 218GETAREA() ..................................................................................................................... 218

    RESTAREA() ................................................................................................................... 218

    REFERNCIAS BIBLIOGRFICAS ............................................................................. 219

  • 8/12/2019 Programao ADVPL I_P11.docx

    8/219

    - 8 -

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

    b) Habilidades e tcnicas a serem aprendidas

    Resoluo de algoritmos atravs de sintaxes orientadas a linguagemADVPL;

    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 das funcionalidadesdisponveis no ERP Protheus;

    Embasar a realizao de outros cursos relativos linguagem ADVPL.

  • 8/12/2019 Programao ADVPL I_P11.docx

    9/219

    - 9 -

    Introduo programao e ADVPL Bsico

    MDULO 01: INTRODUO PROGRAMAO

    LGICA DE PROGRAMAO E ALGORITMOS

    No aprendizado de qualquer linguagem de programao essencial desenvolver osconceitos relacionados a lgica e tcnica da escrita de um programa.

    Com foco nesta necessidade, este tpico descrever resumidamente os conceitosenvolvidos no processo de desenvolvimento de um programa, atravs dos conceitosrelacionados a:

    Lgica de programao Algoritmos Diagramas de blocos

    Lgica de Programao

    Lgica

    A lgica de programao necessria para pessoas que desejam trabalhar comdesenvolvimento de sistemas e programas, ela permite definir a seqncia lgica parao desenvolvimento. 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, quedevem 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 normasdefinidas para a realizao ou emprego de algo.

  • 8/12/2019 Programao ADVPL I_P11.docx

    10/219

    - 10 -

    Introduo programao e ADVPL Bsico

    Em informtica, porm, instruo a informao que indica a um computador umaao elementar a executar. Convm ressaltar que uma ordem isolada no permiterealizar o processo completo, para isso necessrio um conjunto de instruescolocadas em ordem seqencial lgica.

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

    no se pode descascar as batatas depois de frit-las.

    Dessa maneira, uma instruo tomada em separado no tem muito sentido, paraobtermos o resultado, precisamos colocar em prtica o conjunto de todas asinstrues, 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 execuo deuma tarefa. Podemos pensar em algoritmo como uma receita, uma seqncia deinstrues 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. Outrosexemplos seriam os manuais de aparelhos eletrnicos, como um videocassete, queexplicam passo-a-passo como, por exemplo, gravar um evento.

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

    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.

  • 8/12/2019 Programao ADVPL I_P11.docx

    11/219

    - 11 -

    Introduo programao e ADVPL Bsico

    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 de programao propriamente dita como, porexemplo, ADVPL.

    Por isso os algoritmos so independentes das linguagens de programao, sendo queao contrrio de uma linguagem de programao, no existe um formalismo rgido decomo deve ser 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.

    Regras para construo do Algoritmo

    Para escrever um algoritmo precisamos descrever a seqncia de instrues, demaneira 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 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.

    Estudando algoritmos

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    12/219

    - 12 -

    Introduo programao e ADVPL Bsico

    Mascar um chiclete Utilizar um telefone pblicocarto Fritar um ovo Trocar lmpadas Descascar batatas Jogar o jogo da forca Calcular a mdia de notas Jogar o jogo da velhacontra 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 gancho.

    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.

  • 8/12/2019 Programao ADVPL I_P11.docx

    13/219

    - 13 -

    Introduo programao e ADVPL Bsico

    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 velhacontra 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.Teste de mesa

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

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    14/219

    - 14 -

    Introduo programao e ADVPL Bsico

    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, comoabaixo:

    ID Nota

    1 8.0

    2 7.0

    3 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/67.55. Exibir a mdia obtida: Mensagem (Mdia: 7.5)

  • 8/12/2019 Programao ADVPL I_P11.docx

    15/219

    - 15 -

    Introduo programao e ADVPL Bsico

    Exerccios

    Aprimorar os seguintes algoritmos descritos na apostila:

    Usar telefone pblicocarto. Fritar um ovo. Mascar um chiclete. Trocar lmpadas. Descascar batatas. Jogar o Jogo da Forca.

    ESTRUTURAS DE PROGRAMAO

    Diagrama de bloco

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

    Com o diagrama podemos definir uma seqncia de smbolos, com significado bemdefinido, 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 estorepresentados 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.

  • 8/12/2019 Programao ADVPL I_P11.docx

    16/219

    - 16 -

    Introduo programao e ADVPL Bsico

    Deciso

    Indica um ponto no qual dever ser efetuadauma 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 forma com oqual o mesmo foi utilizado no fluxo, indicando o processamento oua informao que o mesmo representa.

  • 8/12/2019 Programao ADVPL I_P11.docx

    17/219

    - 17 -

    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.

  • 8/12/2019 Programao ADVPL I_P11.docx

    18/219

    - 18 -

    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/12/2019 Programao ADVPL I_P11.docx

    19/219

    - 19 -

    Introduo programao e ADVPL Bsico

    Estruturas de deciso e repetio

    A utilizao de estruturas de deciso e repetio em um algoritmo permite a realizaode 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 decisoo IF...ELSEo DO CASE ... CASE

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

    Estruturas de deciso

    Os comandos de deciso so utilizados em algoritmos cuja soluo no obtidaatravs da utilizao de aes meramente seqenciais, permitindo que estescomandos de deciso avaliem as condies necessrias para optar por uma ou outramaneira 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 qualser executada uma de duas aes possveis: Se a anlise da condio resultar em umvalor verdadeiro ou se a anlise da condio resultar em um valor falso.

  • 8/12/2019 Programao ADVPL I_P11.docx

    20/219

    - 20 -

    Introduo programao e ADVPL Bsico

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

    Ao vinculada ao

    resultado

    verdadeiro

    Anlise da

    condio

    Verdadeiro Falso

    Aes anteriores...

    Continuao do

    fluxo aps a

    tomada da

    deciso

    Ao vinculada ao

    resultado falso

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

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

    Ao vinculada ao

    resultadoverdadeiro

    Anlise da

    condio

    Verdadeiro

    Falso

    Aes anteriores

    ...

    Continuao do

    fluxo aps a

    tomada da

    deciso

  • 8/12/2019 Programao ADVPL I_P11.docx

    21/219

    - 21 -

    Introduo programao e ADVPL Bsico

    Apesar das linguagens de programao possurem variaes para aestrutura IF...ELSE, conceitualmente todas as representaes podemser 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 condiesem seqncia, para as quais ser avaliada somente a ao da primeiraexpresso cujo anlise resultar em um valor verdadeiro.

  • 8/12/2019 Programao ADVPL I_P11.docx

    22/219

    - 22 -

    Introduo programao e ADVPL Bsico

    DO CASE...CASE

    A estrutura DO CASE...ENDCASE (Caso) permite a anlise de diversas condiesconsecutivas, para as quais somente a condio para a primeira condio verdadeiraser sua ao vinculada e executada.

    O recurso de anlise de mltiplas condies necessrio para soluo de problemasmais complexos, nos quais as possibilidades de soluo superam a mera anlise de umnico resultado verdadeiro ou falso.

    Anlise dacondio 1

    Verdadeiro

    Falso

    Aes anteriores

    ...

    Continuao do

    fluxo aps a

    tomada dadeciso

    Ao vinculada acondio 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 aestrutura DO CASE...CASE, conceitualmente todas as representaespodem ser descritas com base no modelo apresentado.

  • 8/12/2019 Programao ADVPL I_P11.docx

    23/219

    - 23 -

    Introduo programao e ADVPL Bsico

    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 nmerodefinido 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 obloco somente ser executado, inclusive se na primeira anlise a condio resultar emum valor verdadeiro.

    Representao: WHILE...END

    Ao vinculada ao

    resultado

    verdadeiro

    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 dacondio, a qual valer apenas a partir da segunda execuo.

  • 8/12/2019 Programao ADVPL I_P11.docx

    24/219

    - 24 -

    Introduo programao e ADVPL Bsico

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    25/219

    - 25 -

    Introduo programao e ADVPL Bsico

    FOR...TO...NEXT

    Nesta estrutura, o conjunto de aes ser executado uma quantidade de vezesdefinida, 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 realizadamediante um resultado verdadeiro na anlise da condio.

    Representao: FOR...TO...NEXT

    Ao vinculada ao

    resultado

    verdadeiro

    Anlise da

    condio

    Verdadeiro

    Falso

    Aes anteriores

    ...

    Continuao do

    fluxo

    ...

    Incrementa o

    contador de

    passos

  • 8/12/2019 Programao ADVPL I_P11.docx

    26/219

    - 26 -

    Introduo programao e ADVPL Bsico

    A estrutura FOR...TO...NEXT, dependendo da linguagem deprogramao, permite a realizao de um incremento simples a cadaexecuo da instruo NEXT, ou a adio de outro valor ao contador, oqual 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 instruoNEXT, sendo que este valor poder ser at negativo, viabilizando umacontagem decrescente.

    Exerccios

    Montar os diagramas de blocos para os algoritmos desenvolvidos no exerccio anterior:

    Usar telefone pblicocarto. Fritar um ovo. Mascar um chiclete. Trocar lmpadas. Descascar batatas. Jogar o Jogo da Forca.

  • 8/12/2019 Programao ADVPL I_P11.docx

    27/219

    - 27 -

    Introduo programao e ADVPL Bsico

    MDULO 02: A LINGUAGEM ADVPL

    A Linguagem ADVPL teve seu incio em 1994, sendo na verdade uma evoluo nautilizao de linguagens no padro xBase pela Microsiga Software S.A. (Clipper, VisualObjects 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 cdigoexistente 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 funese comandos disponibilizados pela Microsiga que a torna uma linguagem completa paraa criao de aplicaes ERP prontas para a Internet. Tambm uma linguagemorientada a objetos e eventos, permitindo ao programador desenvolver aplicaesvisuais e criar suas prprias classes de objetos.

    Quando compilados, todos os arquivos de cdigo tornam-se unidades de intelignciabsicas, chamadosAPOs (deAdvanced Protheus Objects). TaisAPOs so mantidos emum repositrio e carregados dinamicamente pelo PROTHEUS Server para a execuo.Como no existe a linkedio, ou unio fsica do cdigo compilado a um determinadomdulo ou aplicao, funes criadas em ADVPL podem ser executadas em qualquerponto 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), em que o cdigo pode ser criado, compilado e depurado.

    Os programas em ADVPL podem conter comandos ou funes de interface com ousurio. De acordo com tal caracterstica, tais programas so subdivididos nasseguintes categorias:

    Programao Com Interface Prpria com o Usurio

    Nesta categoria, entram os programas desenvolvidos para serem executados atravsdo terminal remoto do Protheus, o Protheus Remote. O Protheus Remote a aplicao

    encarregada da interface e da interao com o usurio, sendo que todo oprocessamento do cdigo em ADVPL, o acesso ao banco de dados e o gerenciamentode conexes efetuado no Protheus Server. O Protheus Remote o principal meio deacesso a execuo de rotinas escritas em ADVPL no Protheus Server, e por isso permiteexecutar qualquer tipo de cdigo, tenha ele interface com o usurio ou no. Porm,nesta categoria so considerados apenas os programas que realizem algum tipo deinterface remota, utilizando o protocolo de comunicao do Protheus.

    Podem-se criar rotinas para a customizao do sistema ERP Microsiga Protheus, desdeprocessos adicionais at mesmo relatrios. A grande vantagem aproveitar todo o

  • 8/12/2019 Programao ADVPL I_P11.docx

    28/219

    - 28 -

    Introduo programao e ADVPL Bsico

    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 geralmentetm uma utilizao mais especfica do que um processo adicional ou um relatrionovo. Tais rotinas no tm interface com o usurio atravs do Protheus Remote, equalquer tentativa nesse sentido (como a criao de uma janela padro) ocasionaruma exceo em tempo de execuo. Estas rotinas so apenas processos, ou Jobs,executados no Protheus Server. Algumas vezes, a interface destas rotinas fica a cargode aplicaes externas, desenvolvidas em outras linguagens, que so responsveis poriniciar os processos no servidor Protheus, por meio dos meios 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 (seminterface), no Protheus Server atravs de duas maneiras: Iniciadas por outra rotinaADVPL por meio da chamada de funes como StartJob() ou CallProc() ou iniciadas

    automaticamente, na inicializao do Protheus Server (quando propriamenteconfigurado).

    Programao de RPCAtravs de uma biblioteca de funes disponvel no Protheus (uma API decomunicao), podem-se executar rotinas escritas em ADVPL diretamente no ProtheusServer, por aplicaes externas escritas em outras linguagens. Isto o que se chama deRPC(de Remote Procedure Call, ou Chamada de Procedimentos Remota).

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

    O Protheus Server pode tambm ser executado como um servidor Web, respondendoa requisies HTTP. No momento destas requisies, pode executar rotinas escritas emADVPL como processos individuais, enviando o resultado das funes como retornodas 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

  • 8/12/2019 Programao ADVPL I_P11.docx

    29/219

    - 29 -

    Introduo programao e ADVPL Bsico

    executada atravs de requisies HTTP. O Protheus permite a compilao de arquivosHTML, contendo cdigo ADVPL embutido. So os chamados arquivos ADVPL ASP, paraa criao de pginas dinmicas.

    Programao TelNetTelNet parte da gama de protocolos TCP/IP que permite a conexo a um computadorremoto, atravs de uma aplicao cliente deste protocolo. O PROTHEUS Server podeemular um terminal pela execuo de rotinas escritas em ADVPL. Ou seja, pode-seescrever rotinas ADVPL cuja interface final ser um terminal TelNet ou um coletor dedados mvel.

  • 8/12/2019 Programao ADVPL I_P11.docx

    30/219

    - 30 -

    Introduo programao e ADVPL Bsico

    ESTRUTURA DE UM PROGRAMA ADVPL

    Um programa de computador nada mais do que um grupo de comandos logicamentedispostos, com o objetivo de executar determinada tarefa. Esses comandos so

    gravados em um arquivo texto que transformado em uma linguagem executvel porum computador, atravs de um processo chamado compilao. A compilao substituios comandos de alto nvel (que os humanos compreendem) por instrues de baixonvel (compreendida pelo sistema operacional em execuo no computador). No casodo ADVPL, no o sistema operacional de um computador que executar o cdigocompilado, mas sim o Protheus Server.

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

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

    Erros de execuo so aqueles que acontecem depois da compilao, quando oprograma est sendo executado. Podem ocorrer por inmeras razes, mas geralmentese referem s 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 serlinhas de comando, linhas de comentrio ou linhas mistas.

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

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

    Linhas de ComentrioLinhas de comentrio possuem um texto qualquer, mas no so executadas. Servemapenas para documentao e para tornar mais fcil o entendimento do programa.

  • 8/12/2019 Programao ADVPL I_P11.docx

    31/219

    - 31 -

    Introduo programao e ADVPL Bsico

    Existem trs formas de se comentar linhas de texto. A primeira delas utilizar o sinalde * (asterisco) no comeo da linha:

    * Programa para clculo do total* Autor: Microsiga Software S.A.

    * Data: 2 de outubro de 2001

    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 (&&) pararealizar a funo do sinal de asterisco. Porm todas estas formas de comentrio delinhas so obsoletas e existem apenas para compatibilizao com o padro xBase. Amelhor 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 oasterisco, podendo-se comentar todo um bloco de texto sem precisar comentar linha alinha:

    /*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 ofechamento (indicada pelos caracteres */) considerado como comentrio.

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

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    32/219

    - 32 -

    Introduo programao e ADVPL Bsico

    Tamanho da LinhaAssim como a linha fsica, delimitada pela quantidade de caracteres que pode serdigitado no editor de textos utilizado, existe uma linha considerada linha lgica. A linhalgica aquela considerada para a compilao como uma nica linha de comando.

    A princpio, cada linha digitada no arquivo texto diferenciada aps o pressionamentoda tecla . Ou seja, a linha lgica a linha fsica no arquivo. Porm algumasvezes, por limitao fsica do editor de texto ou por esttica, pode-se "quebrar" a linhalgica em mais de uma linha fsica no arquivo texto. Isto efetuado utilizando-se osinal 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

    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 nasduas primeiras linhas, durante a execuo do programa ocorrer um erro, pois asegunda linha fsica ser considerada como uma segunda linha de comando na

    compilao. E durante a execuo esta linha no ter sentido.

    reas de um Programa ADVPL

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

    #include protheus.ch

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

    User Function CalcFator()

  • 8/12/2019 Programao ADVPL I_P11.docx

    33/219

    - 33 -

    Introduo programao e ADVPL Bsico

    Local nCntLocal nResultado := 1 // Resultado do fatorialLocal nFator := 5 // Nmero para o clculo

    // Clculo do fatorial

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

    // Exibe o resultado na tela, atravs da funo alertAlert("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/12/2019 Programao ADVPL I_P11.docx

    34/219

    - 34 -

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

    O formato para esta rea no definido. Pode-se colocar qualquer tipo de informaodesejada 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 corretofuncionamento do programa. Entre os ajustes se encontram declaraes de variveis,inicializaes, abertura de arquivos, etc. Apesar do ADVPL no ser uma linguagemrgida e as variveis poderem ser declaradas em qualquer lugar do programa, aconselhvel faz-lo nesta rea visando tornar o cdigo mais legvel e facilitar aidentificao 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 atarefa necessria por meio da organizao lgica destas linhas de comando. Espera-seque as linhas de comando estejam organizadas de tal modo que no final desta rea o

  • 8/12/2019 Programao ADVPL I_P11.docx

    35/219

    - 35 -

    Introduo programao e ADVPL Bsico

    resultado esperado seja obtido, seja ele armazenado em um arquivo ou em variveisde memria, pronto para ser exibido ao usurio atravs de um relatrio ou na tela.

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

    nResultado *= nCntNext nCnt

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

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

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

    If nFator

  • 8/12/2019 Programao ADVPL I_P11.docx

    36/219

    - 36 -

    Introduo programao e ADVPL Bsico

    DECLARAO E ATRIBUIO DE VARIVEIS

    Tipo de Dados

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

    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, portantopodem-se criar variveis numricas com qualquer valor dentro do intervalo permitido.

    Os seguintes elementos 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 o ponto flutuante, no intervalo de 2.2250738585072014 E

    308 at 1.7976931348623158 E+308.

    Lgico

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

    Caractere

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

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

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    37/219

    - 37 -

    Introduo programao e ADVPL Bsico

    Data

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

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

    Array

    O Array um tipo de dado especial. a disposio de outros elementos em colunas elinhas. O ADVPL suporta arrays unidimensionais (vetores) ou multidimensionais(matrizes). Os elementos de um array so acessados atravs de ndices numricosiniciados 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 instruesescritas em ADVPL que podero ser executadas posteriormente.

    Declarao de variveis

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

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

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

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    38/219

    - 38 -

    Introduo programao e ADVPL Bsico

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

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

    Escopo de variveis

    O ADVPL no uma linguagem de tipos rgidos para variveis, ou seja, no

    necessrio informar o tipo de dados que determinada varivel ir conter no momentode 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 seucdigo fonte, embora seja aconselhvel declarar todas as variveis necessrias nocomeo, tornando a manuteno mais fcil e evitando a declarao de variveisdesnecessrias.

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

    O Contexto de Variveis dentro de um Programa

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

    Local nNmero := 10

    Esta linha de cdigo declara uma varivel chamada nNmero, indicando que aondepertence seu escopo local.

    Os identificadores de escopo so:

    Local Static Private

  • 8/12/2019 Programao ADVPL I_P11.docx

    39/219

    - 39 -

    Introduo programao e ADVPL Bsico

    PublicO ADVPL no rgido em relao declarao de variveis no comeo do programa. Aincluso de um identificador de escopo no necessrio para a declarao de umavarivel, contanto que um valor lhe seja atribudo.

    nNumero2 := 15

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

    Devido a essa caracterstica, quando se pretende fazer uma atribuio a uma variveldeclarada previamente, mas escreve-se o nome da varivel de forma incorreta, oADVPL no gerar nenhum erro de compilao ou de execuo. Pois compreender o

    nome da varivel escrito de forma incorreta como se fosse a criao de uma novavarivel. Isto alterar a lgica do programa, e um erro muitas vezes difcil deidentificar.

    Variveis de escopo local

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

    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 a funo Filha executada, nVar ainda existe mas no pode ser acessada.Quando a execuo da funo Pai terminar, a varivel nVar destruda. Qualquervarivel, com o mesmo nome no programa que chamou a funo Pai, no afetada.

    Variveis de escopo local so criadas automaticamente, cada vez que a funo ondeforem declaradas for ativada. Elas continuam a existir e mantm seu valor at o fim da

    ativao da funo (ou seja, at que a funo retorne o controle para o cdigo que a

  • 8/12/2019 Programao ADVPL I_P11.docx

    40/219

    - 40 -

    Introduo programao e ADVPL Bsico

    executou). Se uma funo chamada recursivamente (por exemplo, chama a simesma), cada chamada em recurso cria um novo conjunto de variveis locais.

    A visibilidade de variveis de escopo locais idntica ao escopo de sua declarao, ouseja, a varivel visvel em qualquer lugar do cdigo fonte em que foi declarada. Se

    uma funo chamada recursivamente, apenas as variveis de escopo local criadas namais recente ativao so visveis.

    Variveis de escopo static

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

    O escopo das variveis static depende de onde so declaradas. Se forem declaradas

    dentro do corpo de uma funo ou procedimento, seu escopo ser limitado quelarotina. Se forem declaradas fora do corpo de qualquer rotina, seu escopo afeta a todasas funes declaradas no fonte.

    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.Diferente de variveis declaradas como LOCAL ou PRIVATE, nVar continua a existir emantm seu valor atual quando a execuo da funo Pai termina. Entretanto,

    somente pode ser acessada por execues subseqentes da funo Pai.

    Variveis de escopo private

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

    Adicionalmente, a atribuio de valor a uma varivel no criada anteriormente, deforma automtica cria-se a varivel como privada. Uma vez criada, uma varivelprivada continua a existir e mantm seu valor at que o programa ou funo onde foi

  • 8/12/2019 Programao ADVPL I_P11.docx

    41/219

    - 41 -

    Introduo programao e ADVPL Bsico

    criada termine (ou seja, at que a funo onde foi feita retorne para o cdigo que aexecutou). Neste momento, automaticamente destruda.

    possvel criar uma nova varivel privada com o mesmo nome de uma varivel jexistente. Entretanto, a nova (duplicada) varivel pode apenas ser criada em um nvel

    de ativao inferior ao nvel onde a varivel foi declarada pela primeira vez (ou seja,apenas em uma funo chamada pela funo onde a varivel j havia sido criada). Anova varivel privada esconder qualquer outra varivel privada ou pblica (veja adocumentao sobre variveis pblicas) 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 outravarivel privada com o mesmo nome for criada em uma subfuno chamada (nestecaso, a varivel existente torna-se inacessvel at que a nova varivel privada sejadestruda).

    Em termos mais simples, uma varivel privada visvel dentro da funo de criao etodas as funes chamadas por esta, a menos que uma funo chamada crie suaprpria varivel privada com o mesmo nome.

    Por exemplo:

    Function Pai()Private nVar := 10

    .Filha().Return(.T.)

    Neste exemplo, a varivel nVar criada com escopo private e inicializada com o valor10. Quando a funo Filha executada, nVar ainda existe e, diferente de uma varivelde escopo local, pode ser acessada pela funo Filha. Quando a funo Pai terminar,

    nVar ser destruda e qualquer declarao de nVar anterior se tornar acessvelnovamente.

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

    Exemplo:Private _dData

  • 8/12/2019 Programao ADVPL I_P11.docx

    42/219

    - 42 -

    Introduo programao e ADVPL Bsico

    Variveis de escopo public

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

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

    Uma vez criada, uma varivel de escopo public visvel em todo o programa em quefoi declarada, at que seja escondidapor uma varivel de escopo private, criada com omesmo nome. A nova varivel de escopo private criada escondea varivel de escopopublic existente, e esta se tornar inacessvel at que a nova varivel private sejadestruda. Por exemplo:

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

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

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

    No ambiente ERP Protheus, existe uma conveno adicional a qualdeve ser respeitada que variveis em uso pela aplicao no sejamincorretamente manipuladas. Por esta conveno deve ser adicionadoo caractere _ antes do nome de variveis PRIVATE e PUBLIC.

    Maiores informaes avaliar o tpico: Boas Prticas de Programao.

    Exemplo:Public _cRotina

  • 8/12/2019 Programao ADVPL I_P11.docx

    43/219

    - 43 -

    Introduo programao e ADVPL Bsico

    Entendendo a influncia do escopo das variveis

    Considere as linhas de cdigo de exemplo:

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

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

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

    Neste exemplo, as variveis so declaradas previamente, utilizando o identificador deescopo local. Quando a linha de clculo for executada, o erro de varivel no existenteno mais ocorrer. Porm variveis no inicializadas tm sempre o valor default nulo(Nil) e este valor no pode ser utilizado em um clculo, pois tambm gerar erros deexecuo (nulo no pode ser dividido por 100). A resoluo deste problema efetuadainicializando-se a varivel atravs 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 inicializadano momento da declarao. Em ambos os exemplos, a varivel primeiro declarada eento inicializada em uma outra linha de cdigo.

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    44/219

    - 44 -

    Introduo programao e ADVPL Bsico

    Operaes com Variveis

    Atribuio de variveis

    Uma vez que um valor lhe seja atribudo, o tipo de dado de uma varivel igual ao tipode dado do valor atribudo. Ou seja, uma varivel passa a ser numrica se um nmerolhe atribudo, passa a ser caractere se uma string de texto lhe for atribuda etc.Porm, mesmo que uma varivel seja de determinado tipo de dado, pode-se mudar otipo da varivel atribuindo 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 numrica07 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 novamente20 Alert("Valor nulo: " + xVariavel)2122 Return

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

    Apesar dessa flexibilidade de utilizao de variveis, devem-se tomar cuidados napassagem de parmetros para funes ou comandos, e na concatenao (ou soma) de

  • 8/12/2019 Programao ADVPL I_P11.docx

    45/219

    - 45 -

    Introduo programao e ADVPL Bsico

    valores. Note a linha 20 do programa de exemplo. Quando esta linha executada, avarivel xVariavel contm o valor nulo. A tentativa de soma de tipos de dadosdiferentes gera erro de execuo do programa. Nesta linha do exemplo, ocorrer umerro 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 linhas 07 e 17).

    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.

    Operadores da linguagem ADVPL

    Operadores comuns

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

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

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

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    46/219

    - 46 -

    Introduo programao e ADVPL Bsico

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

    $ Comparao de Substrings (contido em).

    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

  • 8/12/2019 Programao ADVPL I_P11.docx

    47/219

    - 47 -

    Introduo programao e ADVPL Bsico

    Operadores de Atribuio

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

    := 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 deigualdade. Tem a mesma funo do sinal de igualdade sozinho, porm aplica aatribuio s variveis. Com ele pode-se atribuir mais de uma varivel ao mesmo

    tempo.

    nVar1 := nVar2 := nVar3 := 0

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

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

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

    O operador de atribuio em linha tambm pode ser utilizado para substituirvalores de campos 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

  • 8/12/2019 Programao ADVPL I_P11.docx

    48/219

    - 48 -

    Introduo programao e ADVPL Bsico

    += 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 devariveis. Entende-se por incremento aumentar o valor de uma varivel numricaem 1 e entende-se por decremento diminuir o valor da varivel em 1. Osoperadores so:

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

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

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

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

    No entanto:

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

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    49/219

    - 49 -

    Introduo programao e ADVPL Bsico

    Operadores Especiais

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

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

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

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

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

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

    acessado.

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

    O smbolo @ utilizado para indicar que durante a passagem de umavarivel para uma funo ou procedimento ela seja tomada como uma referncia eno como valor.

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    50/219

    - 50 -

    Introduo programao e ADVPL Bsico

    Ordem de Precedncia dos Operadores

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

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

    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

    essa seqncia. Caso exista mais de um operador do mesmo tipo (ou seja, demesmo nvel), a avaliao se d da esquerda para direita. Para os operadoresmatemticos entretanto, h uma precedncia 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 exponenciao2^3(=8), ento so calculadas as multiplicaes e divises 10/2(=5) e 5*3(=15), efinalmente as adies resultando em 2+5+15+8(=30).

    Alterao da PrecednciaA utilizao de parnteses dentro de uma expresso altera a ordem de precednciados operadores. Operandos entre parnteses so analisados antes dos que seencontram fora dos parnteses. Se existirem mais de um conjunto de parntesesno-aninhados, o grupo mais a esquerda ser avaliado primeiro e assimsucessivamente.

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

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

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    51/219

    - 51 -

    Introduo programao e ADVPL Bsico

    Operao de Macro Substituio

    O operador de macro substituio, simbolizado pelo "e" comercial (&), utilizado

    para a avaliao de expresses em tempo de execuo. Funciona como se umaexpresso armazenada fosse compilada em tempo de execuo, antes de ser defato executada.

    Considere o exemplo:

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

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

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

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

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

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

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

  • 8/12/2019 Programao ADVPL I_P11.docx

    52/219

    - 52 -

    Introduo programao e ADVPL Bsico

    Funes de manipulao de variveis

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

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

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

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

    Converses entre tipos de variveis

    As funes mais utilizadas nas operaes entre converso entre tipos de variveisso:

    CTOD()CVALTOCHAR()DTOC()

    DTOS()STOD()STR()STRZERO()VAL()

    CTOD()

    Sintaxe CTOD(cData)

    DescrioRealiza a converso de uma informao do tipo caractere noformato DD/MM/AAAA, para uma varivel do tipo data.

    CVALTOCHAR()

    Sintaxe CVALTOCHAR(nValor)

    Descrio

    Realiza a converso de uma informao do tipo numrico em

    uma string, sem a adio de espaos a informao.

  • 8/12/2019 Programao ADVPL I_P11.docx

    53/219

    - 53 -

    Introduo programao e ADVPL Bsico

    DTOC()

    Sintaxe DTOC(dData)

    Descrio

    Realiza a converso de uma informao do tipo data para em

    caractere, sendo o resultado no formato DD/MM/AAAA.

    DTOS()

    Sintaxe DTOS(dData)

    DescrioRealiza a converso de uma informao do tipo data em umcaractere, sendo o resultado no formato AAAAMMDD.

    STOD()

    Sintaxe STOD(sData)

    DescrioRealiza a converso de uma informao do tipo caractere, comcontedo no formato AAAAMMDD, em data.

    STR()

    Sintaxe STR(nValor)

    DescrioRealiza a converso de uma informao do tipo numrico emuma string, adicionando espaos direita.

    STRZERO()

    Sintaxe STRZERO(nValor, nTamanho)

    DescrioRealiza a converso de uma informao do tipo numrico emuma string, adicionando zeros esquerda do nmero convertido,de forma que a string gerada tenha o tamanho especificado noparmetro.

    VAL()

    Sintaxe VAL(cValor)

    DescrioRealiza a converso de uma informao do tipo caractere em

    numrica.

  • 8/12/2019 Programao ADVPL I_P11.docx

    54/219

    - 54 -

    Introduo programao e ADVPL Bsico

    Manipulao de strings

    As funes mais utilizadas nas operaes de manipulao do contedo de stringsso:

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

    ALLTRIM()

    Sintaxe ALLTRIM(cString)

    Descrio

    Retorna uma string sem os espaos direita e esquerda,referente ao contedo informado como parmetro.

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

    ASC()

    Sintaxe ASC(cCaractere)

    DescrioConverte uma informao caractere em seu valor, de acordocom a tabela ASCII.

    AT()

    Sintaxe AT(cCaractere, cString )

    DescrioRetorna a primeira posio de um caractere ou string, dentro deoutra string especificada.

  • 8/12/2019 Programao ADVPL I_P11.docx

    55/219

    - 55 -

    Introduo programao e ADVPL Bsico

    CHR()

    Sintaxe CHR(nASCII)

    Descrio

    Converte um valor nmero referente a uma informao da tabela

    ASCII, no caractere que esta informao representa.

    LEN()

    Sintaxe LEN(cString)

    Descrio Retorna o tamanho da string especificada no parmetro.

    LOWER()

    Sintaxe LOWER(cString)

    Descrio Retorna uma string c