Escolar Documentos
Profissional Documentos
Cultura Documentos
ADVPL em 7 Passos
Meu nome é Rogério Onishi Candisani sou consultor Acendeu uma luz dentro de mim.
de sistemas há mais de 20 anos.
Queria ter o controle da minha própria vida não
Um breve relato de como comecei a minha carreira. dependendo de ninguém.
Neste momento decidi empreender a minha O primeiro programa que z foi um desenho
própria carreira. chamado Knight Rider.
O fato de ser inquieto, acho, busquei outra coisa Lógico somente as letras rs
para fazer voltado para a área de tecnologia, pois ali
não me sentia feliz.
Para se ter uma ideia comecei aprender Lotus 123, Naquela época anunciava-se muito em jornal e foi ai
ferramenta semelhante ao Excel, totalmente em a minha grande sacada.
inglês.
Chegando nas residências via que o cliente não En m vamos ao que interessa!
precisava apenas de manutenção no micro pois não
adiantava o micro estar em ordem se não
soubessem usar as ferramentas.
PASSO 1
Vi este nicho de mercado muito carente e comecei a Linguagem de
ensinar Word, Excel, Lotus 123... (Hoje em dia está
carente da mesma forma só que outros programas, Programação
aplicativos, comunidades.)
História
Só com esta atitude tripliquei o meu faturamento
em relação à manutenção de micros.
1- Programação
2 - Manutenção
3- Treinamento particular
O primeiro compilador foi escrito por Grace Hopper A linguagem C++ (originalmente conhecida como C
em 1952, para a linguagem de programação com classes) populariza a orientação a objetos.
Sistema A-0.
Diversas linguagens de programação surgiram
A primeira linguagem de programação de alto nível desde então.
amplamente usada foi Fortran, criada em 1954.
Entre estas incluem-se C ♯ , VB.NET, Linguagem de
Em 1957 foi criada B-0, sucessora da A-0, que daria programação
origem a Flow-Matic (1958), antecessor imediato de
COBOL, de 1959. Java, Object Pascal, Objective-C, PHP, Python,
SuperCollider, D
O COBOL foi uma linguagem de ampla aceitação
para uso comercial. (linguagem de programação) e Ruby (linguagem de
programação).
A linguagem ALGOL foi criada em 1958-1960. O
ALGOL-60 teve grande in uência no projeto de Alguns Softwares de Gestão Empresarial “ERP”
muitas linguagens posteriores. (Enterprise Resource Planning) que são
conceituados no mercado como Microsiga,
A linguagem Lisp foi criada em 1958 e se tornou possuem linguagem própria de programação.
amplamente utilizada na pesquisa na área de
Ciência da computação mais proeminentemente na A linguagem da Microsiga é o ADVPL (Advanced
área de Inteligência Arti cial. Protheus Language). Ministro aulas também de
Microsiga em con guração e programação. O
Outra linguagem relacionada ao campo da IA que requisito básico e ter conhecimento com este e-
surge em 1972 é a linguagem Prolog, uma book sobre lógica de programação. No nal estará
linguagem do paradigma lógico. apto a evoluir.
Assim, linguagens de programação são projetadas Se o método utilizado traduz todo o texto do
para adotar uma sintaxe de nível mais alto, que programa (também chamado de código), para só
pode ser mais facilmente entendida por depois executar o programa, então se diz que o
programadores humanos. programa foi compilado e que o mecanismo
utilizado para a tradução é um compilador (que por
sua vez nada mais é do que um programa).
Programas interpretados são geralmente mais A tradução é tipicamente feita em várias fases,
lentos do que os compilados, mas são também sendo as mais comuns a Análise léxica, a Análise
geralmente mais exíveis, já que podem interagir sintática (ou Parser ), a Geração de código e a
com o ambiente mais facilmente. Embora haja essa Otimização Em compiladores também é comum a
distinção entre Linguagem interpretada e geração de código intermediário.
Linguagem compilada, as coisas nem sempre são
PASSO 2
tão simples.
Repetição.
Criador da linguagem
O extensivo uso de objetos, particularmente em
conjunção com o mecanismo de programação,
Pascal entre outras caracteriza o estilo de programação orientada a
objetos.
Sequencia Lógica
destinam-se a automatizar e gerenciar processos,
tais como Finanças, Recursos humanos, Logística,
Manufatura, CRM, dentre outros. Tem como seu
Estes pensamentos podem ser descritos como uma
principal produto o software denominado ERP
sequencia de instruções, que devem ser seguidas
Protheus. A empresa tem como foco em Empresas e
para se cumprir uma determinada tarefa.
Pequenas empresas. Ela transfere a sua tecnologia
ao cliente, ou seja, a Microsiga possui uma
tecnologia própria de desenvolvimento que envolve Sequencia Lógica são passos executados até atingir
a sua linguagem e seu compilador. um objetivo ou solução de um problema.
Instruções é um conjunto de regras ou normas Estas tarefas não podem ser redundantes nem
de nidas para a realização ou emprego de algo. Em subjetivas na sua de nição, devem ser claras e
informática, é o que indica a um computador uma precisas.
ação elementar.
Como exemplos de algoritmos podemos citar os
Convém ressaltar que uma ordem isolada não “Chupar uma bala”.
permite realizar o processo completo, para isso é
necessário um conjunto de instruções colocadas em egar a bala
P
ordem sequencial lógica. Retirar o papel
Chupar a bala
Por exemplo, se quisermos fazer uma omelete de Jogar o papel no lixo
batatas, precisaremos colocar em prática uma série
Mais a frente falaremos sobre diagrama de bloco.
de instruções:
1. Descascar as batatas,
2. Bater os ovos,
3. Fritar as batatas, etc...
Programas
linguagem falada e a linguagem de programação.
Ser objetivo
Procurar usar palavras que não tenham sentido
dúbio
Veja o exemplo:
Calcule o valor total da peça (Quantidade * Valor da
peça)
ota da Prova 1
N
Nota da Prova 2
Nota da Prova 3 Mostre o código da peça e seu valor total
Nota da Prova 4
Utilize a tabela abaixo: P1, P2, P3, P4, Calcular Faça um algoritmo para “Calcular o estoque médio
a Média de uma peça”, sendo que:
Diagrama de Bloco
O que é um diagrama de bloco?
Simbologia
Existem diversos símbolos em um diagrama de
bloco. No decorrer do curso apresentaremos os
mais utilizados. Veja no quadro abaixo alguns dos
símbolos que iremos utilizar: Fluxograma
O termo Fluxograma designa uma representação Os símbolos devem ser dispostos em ordem lógica
grá ca de um determinado processo ou uxo de e com sintaxe correta para atingir o objetivo de
trabalho, efetuado geralmente com recurso a resolver o problema.
guras geométricas normalizadas e as setas unindo
essas guras geométricas. Através desta Os diagramas diferem dos uxogramas por
representação grá ca é possível compreender de representarem pequenas partes de um grande
forma rápida e fácil a transição de informações ou sistema com foco no processo lógico.
documentos entre os elementos que participam no
processo em causa.
Um exemplo de diagramas de blocos são os
Fluxogramas, usados em Engenharia de software.
O uxograma pode ser de nido também como o
grá co em que se representa o percurso ou
caminho percorrido por certo elemento (por Nesse caso o diagrama é usado para descrever o
exemplo, um determinado documento), através dos método e a sequência do processo dos planos num
vários departamentos da organização, bem como o Computador. O diagrama de caso de uso descreve a
tratamento que cada um vai lhe dando. funcionalidade proposta para um novo sistema, que
será projetado.
Um caso de uso pode "usar" outra funcionalidade E depois construa o diagrama de blocos do
de caso de uso ou "estender" outro caso de uso algoritmo desenvolvido, e por m faça um teste de
com seu próprio comportamento. mesa.
PASSO 5
Casos de uso são tipicamente relacionados a
"atores". Um ator é um humano ou entidade
máquina que interage com o sistema para executar
um signi cante trabalho. Exemplo de uxograma eia a cotação do dólar
L
complexo: Leia um valor em dólares
Converta esse valor para Real
Mostre o resultado
EXERCÍCIOS
Inteiro Idade: 10
Constantes, Variáveis
e Tipos de Dados Real Peso: 10.2
Exemplo de constantes:
Caracteres
Variáveis Especí cas para armazenamento de conjunto de
caracteres que não contenham números (literais).
Variável é a representação simbólica dos elementos
de um certo conjunto.
Ex: nomes.
Operadores
caracter Nome: “ana” Os operadores são meios pelo qual incrementamos,
decrementamos, comparamos e avaliamos dados
dentro do computador.
alfanumérica Código 123abc
Temos três tipos de operadores:
Operadores Aritméticos
Lógicas Os operadores aritméticos são os utilizados para
Armazenam somente dados lógicos que podem ser obter resultados numéricos.
Verdadeiro ou Falso.
Declaração de
Variáveis
As variáveis só podem armazenar valores de um
mesmo tipo, de maneira que também são
classi cadas como sendo numéricas, lógicas e
literais.
Subtração -
Descrição Símbolo Símbolo
Multiplicação *
Igual a =
Divisão /
Diferente de <> Ou #
Exponenciação
Maior que >
1. º ( ) Parênteses
Maior ou igual a >=
2. º Exponenciação
3. º Multiplicação, divisão (o que aparecer
primeiro)
Menor ou igual a <=
4. º + ou – (o que aparecer primeiro)
Operadores Relacionais
Exemplo: Tendo duas variáveis A = 5 e B = 3 Os
Os operadores relacionais são utilizados para resultados das expressões seriam:
comparar String de caracteres e números.
Expressão Resultado
Os valores a serem comparados podem ser
caracteres ou variáveis.
A = B Falso
A > B Verdadeiro
A < B Falso
A >= B Verdadeiro
A <= B Falso
Operadores Lógicos
Os operadores lógicos servem para combinar
resultados de expressões, retornando se o
resultado nal é verdadeiro ou falso.
Exemplos:
E AND Uma expressão E/AND é verdadeira se Os resultados das expressões seriam: relembrando
todas as condições forem verdadeiras
que depende da linguagem de programação
escolhida, pois a sintaxe varia de uma para outra.
SALARIO - IR
A < B AND B > C Verdadeiro
Operações Lógicas
Operações Lógicas são utilizadas quando se torna
necessário tomar decisões em um diagrama de
bloco.
egar a bala
P 1. Ler um número e veri car se ele é par
A bala é de morango? ou ímpar. Quando for par armazenar
Se sim, não chupe a bala esse valor em P e quando for ímpar
Se não, continue com o algoritmo armazená-lo em I.
Retirar o papel
Exibir P e I no nal do processamento.
Chupar a bala
Jogar o papel no lixo Exemplo:
1. Construa um diagrama de blocos para
Algoritmo “Chupar Bala” utilizando diagrama de ler uma variável numérica N e imprimi-
Blocos la somente se a mesma for maior que
Faça um teste de mesa do diagrama de bloco com Com as instruções de SALTO ou DESVIO pode-se
os dados fornecidos: fazer com que o programa proceda de uma ou
outra maneira, de acordo com as decisões lógicas
tomadas em função dos dados ou resultados
PASSO 6 anteriores.
Os comandos de decisão ou desvio fazem parte das Exemplo de código em Visual Basic
técnicas de programação que conduzem a
estruturas de programas que não são totalmente
IF MEDIA >= 5
sequenciais.
ENDIF
SE MÉDIA >= 5.0 ENTÃO ALUNO APROVADO SENÃO ELSE Text1 = “Aluno REPROVADO”
ALUNO REPROVADO
ENDIF
Em Visual Basic: uma linguagem de programação
será necessário sempre deixar em ordem para CASO SELECIONE / SELECT ... CASE
leitura clara da interpretação do código.
No exemplo acima está sendo executada uma No exemplo do diagrama de blocos abaixo, é
condição que, se for verdadeira, executa o comando recebido uma variável “Op” e testado seu conteúdo,
“APROVADO”, caso contrário executa o segundo caso uma das condições seja satisfeita, é atribuído
comando “REPROVADO”. para a variável Titulo a String “Opção X”, caso
contrário é atribuído a string “Opção Errada
1. Elabore um algoritmo que dada a idade de Enquanto x, processar (Do While ...Loop)
um nadador classi que-o em uma das
seguintes categorias:
Neste caso, o bloco de operações será executado
Infantil A = 5 a 7 anos enquanto a condição x for verdadeira.
Neste caso, o bloco de operações será executado Neste caso, executa-se primeiro o bloco de
até que a condição seja satisfeita, ou seja, somente operações e somente depois é realizado o teste de
executará os comandos enquanto a condição for condição.
falsa.
Se a condição for verdadeira, o uxo do programa
Em Visual Basic continua normalmente.
Nr = Nr + 1 Loop Do nr = nr + 1
Neste caso primeiro são executados os comandos, e Para ... Até ... Seguinte (For ... To ... Next) Em Visual
somente depois é realizado o teste da condição. Basic nr = 0
Nr = 0 EXERCÍCIOS
Abrir o arquivo signi ca alocar o periférico (hd, (BOF – Bottom Of File) ou no nal do arquivo
pendrive) em que o arquivo se encontra, e deixá-lo
disponível para leitura/gravação. (EOF – End Of File). Esse é sempre executado após a
leitura do registro (mudança da posição do
Fechamento de ponteiro).
Fechar um arquivo signi ca liberar o periférico que Como dito no item anterior, quando um arquivo é
estava sendo utilizado. aberto o ponteiro está no primeiro registro.
Mas quantas dúvidas simples já surgem nestes primeiros E é assim que nasce em Setembro de 1983, com os sócios
passos, Laércio
ERP
Foi então criada a linguagem chamada Advanced Em Joinville ca a maior unidade de desenvolvimento de
Protheus
História
Totvs Sua primeira fundação ocorreu em 1969 com o
nome de Siga - Sistemas Integrados de Gerência
Automática - Ltda,por Ernesto Haberkorn, prestava
TOTVS (pronuncia-se tótus) é uma empresa multinacional serviços gerais na área de informática e
de
desenvolveu um sistema de gerenciamento
empresarial que permitia a automação dos
processos.
software sediada no Brasil.
Em março de 2006 realizou seu IPO e reforçou seu da Advent, admitiu a BNDESPAR como sócia, obteve
crescimento por meio de aquisição e fusão com certi cação nível 2 do CMMI (Capability Maturity
empresas, como Datasul, RM Sistemas, Logocenter, Model Integration) e constitui a TOTVS-BMI
Midbyte, etc. Atualmente, é a maior empresa do (consultoria).
ramo no mercado nacional e a oitava do mundo.
1. - Fez a abertura de capital na Bolsa de Valores
Cronologia de São Paulo (BOVESPA), no Novo Mercado
com nível mais alto de
1969 - Ernesto Haberkorn funda a SIGA - Sistemas
Governança Corporativa. Adquiriu a RM Sistemas
Integrados de Gerência Automática - Ltda.
S.A.
1989 - A Microsiga Software S.A iniciou seu sistema Midbyte e BCS. Joint Venture com a Quality na
de franquias. TQTVD
Alguns continuam chamando de "Microsiga", "Siga" e Um programa em AdvPL, consiste das seguintes
outros seções:
1. //includes
"Microsiga Protheus", en m! 2. #include "protheus.ch"
//variaveis
Essa variação foi desenvolvida pela antiga Microsiga
(atualmente TOTVS) para o desenvolvimento de sua
ferramenta de Sistema Integrado de Gestão o “ERP” Local cOutroTxt := "UM EXEMPLO DE STRING"
e funciona somente em instalações desse sistema.
//comandos
Consiste da adição de comandos, reestruturação da
linguagem para funcionar em ambiente cliente MsgInfo(TEXTO+cOutroTxt)
servidor, alterações na forma de compilação, entre
outras. //retorno da função Return .T.
Onde:
No entanto, quando começamos a pensar em boas O Protheus Remote é o principal meio de acesso a
práticas para a manutenção de nosso código, os execução de rotinas escritas em ADVPL no Protheus
De nes serão de extrema valia para tornar nosso Server, e por isso permite executar qualquer tipo de
código legível, mais fácil de alterar e coerente. código, tenha ele interface com o usuário ou não.
Atente também que, embora não esteja listada nas Como não existe a linkedição, ou união física do
seções acima, também existe uma área especi ca código compilado a um determinado módulo ou
para de nir variáveis estáticas. aplicação, funções criadas em ADVPL podem ser
executadas em qualquer ponto do ambiente
1 Static cTextoTeste := “Isso é um teste!” Advanced Protheus.
De acordo com tal característica, tais programas são Os programas em ADVPL podem conter comandos
subdivididos nas seguintes categorias: ou funções de interface com o usuário.
Todo o código do sistema ERP Microsiga Protheus é Iniciadas por outra rotina ADVPL através da
escrito em ADVPL. chamada de funções como StartJob() ou CallProc()
ou iniciadas automaticamente na inicialização do
Protheus Server (quando propriamente
Programação Sem Interface con gurado).
Própria com o Usuário
Programação de RPC
As rotinas criadas sem interface são consideradas
nesta categoria porque geralmente têm uma
utilização mais especí ca do que um processo Através de uma biblioteca de funções disponível no
adicional ou um relatório novo. Protheus
Tais rotinas não têm interface com o usuário (uma API de comunicação), podem-se executar
através do Protheus Remote, e qualquer tentativa rotinas escritas
nesse sentido (como a criação de uma janela
padrão) ocasionará uma exceção em tempo de em ADVPL diretamente no Protheus Server, através
execução. de aplicações
Estas rotinas são apenas processos, ou Jobs, externas escritas em outras linguagens.
executados no Protheus Server.
Isto é o que se chama de RPC (de Remote Procedure
Algumas vezes, a interface destas rotinas ca a Call, ou Chamada de Procedimentos Remota).
cargo de aplicações externas, desenvolvidas em
outras linguagens, que são responsáveis por iniciar
O servidor Protheus também pode executar rotinas
os processos no servidor Protheus através dos
em ADVPL em outros servidores Protheus através
meios disponíveis de integração e conectividade no
de conexão TCP/IP direta utilizando o conceito de
Protheus.
RPC.
No momento destas requisições, pode executar Esses comandos são gravados em um arquivo texto
rotinas escritas em ADVPL como processos que é transformado em uma linguagem executável
individuais, enviando o resultado das funções como por um computador através de um processo
retorno das requisições para o cliente HTTP (como chamado compilação.
por exemplo, um Browser de Internet).
A compilação substitui os comandos de alto nível
Qualquer rotina escrita em ADVPL que não (que os humanos compreendem) por instruções de
contenha comandos de interface pode ser baixo nível (compreendida pelo sistema operacional
executada através de requisições HTTP. em execução no computador).
O Protheus permite a compilação de arquivos HTML No caso do ADVPL, não é o sistema operacional de
contendo um computador que irá executar o código
compilado, mas sim o Protheus Server.
código ADVPL embutido.
Dentro de um programa, os comandos e funções
São os chamados arquivos ADVPL ASP, para a utilizados devem seguir regras de sintaxe da
criação de páginas dinâmicas. linguagem utilizada, pois caso contrário o programa
será interrompido por erros. Os erros podem
Programação TelNet
ser de compilação ou de execução.
TelNet é parte da gama de protocolos TCP/IP que
permite a conexão a um computador remoto Erros de compilação são aqueles encontrados na
através de uma aplicação cliente deste protocolo. sintaxe que não permitem que o arquivo de código
do programa seja compilado. Podem ser comandos
O PROTHEUS Server pode emular um terminal especi cados de forma errônea, utilização inválida
TelNet, através da execução de rotinas escritas em de operadores, etc.
ADVPL.
Erros de execução são aqueles que acontecem
Ou seja, pode-se escrever rotinas ADVPL cuja depois da compilação, quando o programa está
interface nal será um terminal TelNet ou um sendo executado. Podem ocorrer por inúmeras
coletor de dados móvel. razões, mas geralmente se referem às funções não
existentes, ou variáveis não criadas ou inicializadas,
Um programa de computador nada mais é do que etc.
um grupo de comandos logicamente dispostos com
o objetivo de executar determinada tarefa. Linhas de Programa
As linhas existentes dentro de um arquivo texto de Todas as linhas iniciadas com um sinal de asterisco
código de programa podem ser linhas de comando, são consideradas como comentário.
linhas de comentário ou linhas mistas.
Pode-se utilizar a palavra NOTE ou dois símbolos da
Linhas de Comando letra "e" comercial (&&) para realizar a função do
sinal de asterisco. Porém todas estas formas de
Não se preocupe se não estiver familiarizado com a comentário de linhas são obsoletas e existem
linguagem ADVPL. Abaixo trataremos alguns apenas para compatibilização com o padrão xBase.
comandos básicos.
A melhor maneira de comentar linhas em ADVPL é
Linhas de comando possuem os comandos ou utilizar duas barras transversais:
instruções que serão executadas. Por exemplo:
// Programa para cálculo do total
Local nCnt
// Autor: Rogério O Candisani
Local nSoma := 0 For nCnt := 1 To 10 nSoma += nCnt
// Data: 2 de outubro de 2007
Next nCnt
Outra forma de documentar textos é utilizar as
barras transversais juntamente com o asterisco,
Linhas de Comentário
podendo-se comentar todo um bloco de texto sem
Linhas de comentário possuem um texto qualquer, precisar comentar linha a linha:
mas não são executadas. Servem apenas para
documentação e para tornar mais fácil o /*
entendimento do programa.
O ADVPL também permite que existam linhas de If !Empty(cNome) .And. !Empty(cEnd) .And. ;
comando com comentário. Isto é possível
adicionando-se as duas barras transversais (//) ao !Empty(cTel) .And. !Empty(cFax) .And. ;
nal da linha de comando e adicionando-se o texto
do comentário:
!Empty(cEmail)
Local nCnt
GravaDados(cNome,cEnd,cTel,cFax,cEmail)
For nCnt := 1 To 10 nSoma += nCnt Neste exemplo existe uma linha de comando para a
checagem das variáveis utilizadas.
Next nCnt
Como a linha torna-se muito grande, pode-se dividi-
la em mais de uma linha física utilizando o sinal de
Tamanho da Linha ponto-e-vírgula. Se um sinal de ponto-e-vírgula for
esquecido nas duas primeiras linhas, durante a
Assim como a linha física, delimitada pela execução do programa ocorrerá um erro, pois a
quantidade de caracteres que pode ser digitado no segunda linha física será considerada como uma
editor de textos utilizado, existe uma linha segunda linha de comando na compilação. E
considerada linha lógica. durante a execução esta linha não terá sentido.
A linha lógica é aquela considerada para a
compilação como uma única linha de comando. Áreas de um Programa
A princípio, cada linha digitada no arquivo texto é Apesar de não ser uma linguagem de padrões
diferenciada após o pressionamento da tecla. Ou rígidos com relação à estrutura do programa, é
seja, a linha lógica, é a linha física no arquivo. importante identi car algumas de suas partes.
Considere o programa de exemplo abaixo:
Porém algumas vezes, por limitação física do editor
de texto ou por estética, pode-se "quebrar" a linha
lógica em mais de uma linha física no arquivo texto. #include protheus.ch
Isto é efetuado utilizando-se o sinal
+===========================================+
nResultado *= nCnt
User Function CalcFator()
Next nCnt
// Termina o programa
Return
Declaração da função
Esta é uma área que não é obrigatória e é dedicada Nesta área geralmente se fazem os ajustes iniciais,
a documentação do programa. importantes para o correto funcionamento do
programa.
Quando existente, contém apenas comentários
explicando a sua nalidade, data de criação, autor, Entre os ajustes se encontram declarações de
etc., e aparece no começo do programa, antes de variáveis, inicializações, abertura de arquivos, etc.
qualquer linha de comando.
Apesar do ADVPL não ser uma linguagem rígida e as
O formato para esta área não é de nido. Pode-se variáveis
colocar qualquer tipo de informação desejada e
escolher a formatação apropriada. poderem ser declaradas em qualquer lugar do
programa, é aconselhável fazê-lo nesta área visando
#include “protheus.ch” tornar o código mais legível e facilitar a identi cação
de variáveis não utilizadas.
/*
Local nCnt
+==========================================+
Local nResultado := 0 // Resultado do fatorial
| Programa: Cálculo do Fatorial |
Local nFator := 10 // Número para o cálculo
| Autor : Rogério O Candisani |
Corpo do Programa
| Data : 02 de outubro de 2007 |
É nesta área que se encontram as linhas de código
+==========================================+ do programa. É onde se realiza a tarefa necessária
através da organização lógica destas linhas de
comando.
*/
For nCnt := nFator To 1 Step -1 É nesta área onde as nalizações são efetuadas. É
onde os arquivos abertos são fechados, e o
nResultado *= nCnt resultado da execução do programa é utilizado.
Área de Encerramento
As variáveis podem também conter objetos, mas os O ADVPL tem um tipo de dados especí co para
tipos primários da linguagem são: datas. Internamente as variáveis deste tipo de dado
são armazenadas como um número
correspondente a data Juliana.
Numérico
O ADVPL não diferencia valores inteiros de valores Variáveis do tipo de dados Data não podem ser
com ponto utuante, portanto podem-se criar declaradas diretamente, e sim através da utilização
variáveis numéricas com qualquer valor dentro do de funções especí cas como por exemplo CTOD()
intervalo permitido. Os seguintes elementos são do que converte uma string para data.
tipo de dado numérico:
Array
Uma variável do tipo de dado numérico pode conter
um número de dezoito dígitos incluindo o ponto O Array é um tipo de dado especial. É a disposição
utuante, no intervalo de de outros elementos em colunas e linhas, matriz. O
ADVPL suporta arrays unidimensionais (vetores) ou
2.2250738585072014 E–308 até multidimensionais (matrizes). Os elementos de um
1.7976931348623158 E+308. array são acessados através de índices numéricos
iniciados em 1, identi cando a linha e coluna para
quantas dimensões existirem.
Lógico
Valores lógicos em ADVPL são identi cados através Arrays devem ser utilizadas com cautela, pois se
de .T. para verdadeiro e .F. para falso forem muito grandes podem exaurir a memória do
(independentemente se os caracteres estiverem em servidor.
maiúsculo ou minúsculo).
Bloco de Código
Caractere
O bloco de código é um tipo de dado especial. É
Strings ou cadeias de caracteres são identi cadas utilizado para armazenar instruções escritas em
em ADVPL por blocos de texto entre aspas duplas (") ADVPL que poderão ser executadas posteriormente.
ou aspas simples ('): "Olá mundo!" 'Esta é uma
string' "Esta é 'outra' string"
Declaração de variáveis
Uma variável do tipo caractere pode conter strings
com no máximo 1 MB, ou seja, 1048576 caracteres.
Data
Variáveis de memória são um dos recursos mais Quando o conteúdo da variável nTotalGeralMensal
importantes de uma linguagem. São áreas de é exibido, o seu valor será de 300. Isso acontece
memória criadas para armazenar informações porque no momento que esse valor foi atribuído à
utilizadas por um programa para a execução de variável nTotalGeralAnual, o ADVPL considerou
tarefas. Por exemplo, quando o usuário digita uma apenas os 10 primeiros caracteres (assim como o
informação qualquer, como o nome de um produto, faz quando deve exibir o valor da variável
em uma tela de um programa esta informação é nTotalGeralMensal), ou seja, considerou-as como a
armazenada em uma variável de memória para mesma variável. Assim o valor original de 100 foi
posteriormente ser gravada ou impressa. substituído pelo de 300.
A visibilidade de variáveis de escopo locais é Entretanto, somente pode ser acessada por
idêntica ao escopo de sua declaração, ou seja, a execuções subseqüentes da função Pai.
variável é visível em qualquer lugar do código fonte
em que foi declarada. Se uma função é chamada
Variáveis de escopo private
recursivamente, apenas as variáveis de escopo local
criadas na mais recente ativação são visíveis. A declaração é opcional para variáveis privadas. Mas
podem ser declaradas explicitamente com o
identi cador PRIVATE.
Variáveis de escopo static
Variáveis de escopo static funcionam basicamente Adicionalmente, a atribuição de valor a uma variável
como as variáveis de escopo local, mas mantêm seu não criada anteriormente automaticamente cria a
valor através da execução e devem ser declaradas variável como privada.
explicitamente no código com o identi cador
STATIC.
Uma vez criada, uma variável privada continua a
existir e mantém seu valor até que o programa ou
O escopo das variáveis static depende de onde são função onde foi criada termine (ou seja, até que a
declaradas. Se forem declaradas dentro do corpo de função onde foi criada retorne para o código que a
uma função ou procedimento, seu escopo será executou). Neste momento, é automaticamente
limitado àquela rotina. destruída.
Se forem declaradas fora do corpo de qualquer É possível criar uma nova variável privada com o
rotina, seu escopo afeta a todas as funções mesmo nome de uma variável já existente.
declaradas no fonte. Entretanto, a nova (duplicada) variável pode apenas
ser criada em um nível de ativação inferior ao nível
Neste exemplo, a variável nVar é declarada como onde a variável foi declarada pela primeira vez (ou
static e inicializada com o valor 10: seja, apenas em uma função chamada pela função
onde a variável já havia sido criada).
Function Pai() Static nVar := 10 . <comandos> . Filha()
. <mais comandos> . Return(.T.) A nova variável privada irá esconder qualquer outra
variável privada ou pública (veja a documentação
Quando a função Filha é executada, nVar ainda sobre variáveis públicas) com o mesmo nome
existe mas não pode ser acessada. enquanto existir.
Uma vez criada, uma variável privada é visível em Quando a função Pai terminar, nVar será destruída
todo o programa enquanto não for destruída e qualquer declaração de nVar anterior se tornará
automaticamente quando a rotina que a criou acessível novamente.
terminar ou uma outra variável privada com o
mesmo nome for criada em uma subfunção
Variáveis de escopo public
chamada (neste caso, a variável existente torna-se
inacessível até que a nova variável privada seja Podem-se criar variáveis de escopo public
destruída). dinamicamente no código com o identi cador
PUBLIC.
Em termos mais simples, uma variável privada é
visível dentro da função de criação e todas as As variáveis deste escopo continuam a existir e
funções chamadas por esta, a menos que uma mantêm seu valor até o m da execução da thread
função chamada crie sua própria variável privada (conexão).
com o mesmo nome.
É possível criar uma variável de escopo private com
“É a mais usada ultimamente, pois se declara as o mesmo nome de uma variável de escopo public
variáveis no início do programa, desenhando um existente, entretanto, não é permitido criar uma
algoritmo e estas servem para todo o fonte” Por variável de escopo public com o mesmo nome de
exemplo: uma variável de escopo private existente.
<comandos> .
A nova variável de escopo private criada esconde a
variável de escopo public existente, e esta se
Filha() <mais comandos> . tornará inacessível até que a nova variável private
seja destruída. Por exemplo:
Return(.T.)
Function Pai()
Neste exemplo, a variável nVar é criada com escopo
private e inicializada com o valor 10. Public nVar := 10
Para solucionar este erro, deve-se declarar a É aconselhável optar pelo operador de atribuição
variável previamente: composto de dois pontos e sinal de igual, pois o
operador de atribuição utilizando somente o sinal
de igual pode ser facilmente confundido com o
Local nPercentual, nResultado nResultado := 250 * operador relacional (para comparação) durante a
(1 + (nPercentual / 100)) criação do programa.
Uma vez que um valor lhe seja atribuído, o tipo de Excetuando-se o caso do valor nulo, para os demais
dado de uma variável é igual ao tipo de dado do devem ser utilizadas funções de conversão quando
valor atribuído. é necessário concatenar tipos de dados diferentes.
Ou seja, uma variável passa a ser numérica se um Note também que quando uma variável é do tipo de
número lhe é atribuído, passa a ser caractere se dado lógico, ela pode ser utilizada diretamente para
uma string de texto lhe for atribuída, etc. checagem.
Porém mesmo que uma variável seja de If xVariavel é o mesmo que If xVariavel = .T.
determinado tipo de dado, pode-se mudar o tipo da
variável atribuindo outro tipo a ela: este ponto é Operadores da linguagem ADVPL
importante, mas não primordial para esta
introdução a linguagem ADVPL. Será visto no Curso
ADVPL Básico. Operadores comuns
Na documentação sobre variáveis há uma breve
A letra "x" em minúsculo no começo do nome é demonstração de como atribuir valores a uma
utilizada para indicar uma variável que pode conter variável da forma mais simples.
diversos tipos de dados, segundo a Notação
Húngara (consulte documentação especí ca para O ADVPL amplia signi cativamente a utilização de
detalhes). variáveis através do uso de expressões e funções.
Este programa troca os valores da variável e exibe Uma expressão é um conjunto de operadores e
seu conteúdo para o usuário através da função operandos cujo resultado pode ser atribuído a uma
ALERT(). variável ou então analisado para a tomada de
decisões.
Essa função recebe um parâmetro que deve ser do
tipo string de caractere, por isso dependendo do Por exemplo:
tipo de dado da variável xVariavel é necessário fazer
uma conversão antes.
Local nSalario := 1000, nDesconto := 0.10 Local
nAumento, nSalLiquido nAumento := nSalario * 1.20
Apesar dessa exibilidade de utilização de variáveis, nSalLiquido := nAumento * (1-nDesconto)
devem-se tomar cuidados na passagem de
parâmetros para funções ou comandos, e na
Neste exemplo são utilizadas algumas expressões
concatenação (ou soma) de valores.
para calcular o salário líquido após um aumento.
+ Adição
Operadores Relacionais
- Subtração
Os operadores utilizados em ADVPL para operações
e avaliações relacionais são:
* Multiplicação
/ Divisão
** Exponenciação
= Comparação Igual
Operadores de String
Os operadores utilizados em ADVPL para <= Comparação Menor ou Igual
tratamento de caracteres são:
.And. E Lógico
-= Subtração e Atribuição em Linha
.Or. OU Lógico
*= Multiplicação e Atribuição em Linha
Atribuição Simples
O sinal de igualdade é utilizado para atribuir valor a
uma variável de memória. nVariavel := 10
Atribuição em Linha
O operador de atribuição em linha é caracterizado
por dois pontos e o sinal de igualdade.
Quando diversas variáveis são inicializadas em uma ++ Incremento Pós ou Pré- xado
mesma linha, a atribuição começa da direita para a
esquerda, ou seja, nVar3 recebe o valor zero
inicialmente, nVar2 recebe o conteúdo de nVar3 e -- Decremento Pós ou Pré- xado
nVar1 recebe o conteúdo de nVar2 por nal.
Resulta em 2, pois o operador incremental Os colchetes são utilizados para especi car um
aumentou o valor da primeira nA antes que seu elemento especí co de uma matriz. Por exemplo,
valor fosse considerado. A[3,2], refere-se ao elemento da matriz A na linha 3,
coluna 2.
Operadores Especiais
As chaves são utilizadas para a especi cação de
Além dos operadores comuns, o ADVPL possui matrizes literais ou blocos de código.
alguns outros operadores ou identi cadores. Estas
são suas nalidades:
Por exemplo, A:={10,20,30} cria uma matriz
chamada A com três elementos.
() Agrupamento ou Função
@ Passagem de parâmetro por referência O símbolo @ é utilizado para indicar que durante a
passagem de uma variável para uma função ou
procedimento ela seja tomada como uma referência
|| Passagem de parâmetro por valor e não como valor.
Estruturas de repetição
o par
DO WHILE...ENDDO
Nesta estrutura, o conjunto de ações será âmetro de
executado enquanto a análise de uma condição de
referência resultar em um valor verdadeiro. perg
próximo
registro.
Veri ca se n
ão
m de arquivo e posiciona
no
próximo
{aCamposSim}
Dentro
do for
para
Ferramentas de apoio
Baixe a ferramenta visualg: para fazer os algoritmos
ou diagrama de blocos funcionarem corretamente.
Grato.