Professional Documents
Culture Documents
AdvPL
Advanced Protheus Language
AdvPL Bsico
CONTEDO PROGRAMTICO Slide 3
TEORIA 1. Lgica de Programao 2. AdvPL e sua origem 3. Programao 4. Estruturao 5. Documentao 6. Funcionalidades 7. Variveis 8. Vetores 9. Controle de Fluxo
AdvPL Bsico
CONTEDO PROGRAMTICO Slide 4
PRTICA 1. Utilizao do IDE 2. Programao 3. Criao de telas 4. Criao de relatrios 5. Tratamento de Base de Dados 6. ndices 7. Pontos de Entrada 8. Programao para Banco de Dados 9. Diferenas entre DBF e SQL
Lgica de Programao
Lgica de Programao
Slide 6
Defina Lgica
Conjunto de instrues seqenciais definidas para a resoluo de um problema.
Defina Programao
Conjunto de comandos estruturados em uma linguagem qualquer para o desenvolvimento de sistemas.
Lgica de Programao
Definio passo a passo da estrutura de pensamentos
para execuo de tarefas a fim de atingir o objetivo.
Lgica de Programao
EXEMPLO Slide 7
Tarefa (Inicio)
Estou em casa e quero ir ao cinema.
Instrues (Meio)
1. 2. 3. 4. 5. 6. 7. Escolher o cinema; Escolher o filme; Sair de casa; Pegar o caminho do cinema; Pagar o ingresso; Entrar na sala; Assistir o filme escolhido.
Objetivo (Fim)
Assistir a um filme
Lgica de Programao
ALGORITMO Slide 8
Entender o problema destacando pontos mais importantes; Definir os dados de entrada; Definir o processamento; Definir os dados de sada; Construir o algoritmo; Testar o algoritmo;
Lgica de Programao
ALGORITMO Slide 9
Tipos de Algoritmo
Narrativa: Uso de linguagem Natural;
Lgica de Programao
ALGORITMO Slide 10
Lgica de Programao
ALGORITMO Slide 11
Lgica de Programao
EXERCCIOS Slide 12
Exerccios da pgina 10
Fazer a Narrativa 1 ao 3
Lgica de Programao
NARRATIVA Slide 13
Lgica de Programao
NARRATIVA Slide 14
Lgica de Programao
NARRATIVA Slide 15
3. Leia quatro valores informados pelo usurio e calcule a mdia desses valores e mostre na tela
Passo 1. Receba quatro valores pelo Usurio. Passo 2. Some os quatro valores Passo 3. Divida o resultado por 4 Passo 4. Mostre o resultado
Lgica de Programao
ALGORITMO Slide 16
Exemplo de um Fluxograma
MOSTRAR A INICIO
S
FIM
N
RECEBER A RECEBER B
A>B
MOSTRAR B
Lgica de Programao
FLUXOGRAMA Slide 17
Alguns Smbolos
Inicializao e finalizao do algoritmo Atribuio de valores
Lgica de Programao
EXERCCIOS Slide 18
Exerccios da pgina 10
Fazer o Fluxograma 1 ao 4
Lgica de Programao
FLUXOGRAMA Slide 19
LEIA A
Z := X * Y
MOSTRAR Z
LEIA B
Z := X * Y
MOSTRAR Z
LEIA C
Z := X * Y
MOSTRAR Z
3 2
LEIA D
Z := X * Y
MOSTRAR Z
FIM
Lgica de Programao
FLUXOGRAMA Slide 20
LEIA A
Z := X / Y
MOSTRAR Z
LEIA B
Z := X / Y
MOSTRAR Z
LEIA C
Z := X / Y
MOSTRAR Z
LEIA D
Z := X / Y
MOSTRAR Z
FIM
Lgica de Programao
FLUXOGRAMA Slide 21
3. Leia quatro valores informados pelo usurio e calcule a mdia desses valores e mostre na tela
INICIO
RECEBA ABCD
Z := (A + B + C + D)
Z := Z / 4
MOSTRAR Z
FIM
Lgica de Programao
FLUXOGRAMA Slide 22
4. Leia 6 valores informados pelo usurio e separe os valores pares dos impares e mostre na tela.
INICIO
S N
RECEBER ABCDEF
2
N
3
N
MOSTRAR PAR
MOSTRAR IMPAR
FIM
Lgica de Programao
ALGORITMO Slide 23
Exemplo de um Pseudocdigo
Inicio Declarar varivel A e B como numerico Mostrar tela digite numero 1 em varivel A; Mostrar tela digite numero 2 em varivel B; Pergunte Varivel A > B Se sim, Mostre varivel A Se no, Mostre varivel B Final
Lgica de Programao
EXERCCIOS Slide 24
Exerccios da pgina 10
Fazer o Pseudocdigo 1 ao 4
Lgica de Programao
PSEUDOCDIGO Slide 25
Lgica de Programao
PSEUDOCDIGO Slide 26
Lgica de Programao
PSEUDOCDIGO Slide 27
3. Leia quatro valores informados pelo usurio e calcule a mdia desses valores e mostre na tela
Inicio Declarar varivel A, B, C, D como numerico Receba A B C D Z := (A + B + C + D ) / 4 Mostrar Varivel Z Final
Lgica de Programao
PSEUDOCDIGO Slide 28
4. Leia 6 valores informados pelo usurio e separe os valores pares dos impares e mostre na tela.
Inicio Declarar varivel A, B, C, D E F como numerico Receba A B C D E F Pergunte A / 2 tem resto Se Sim, Impar = A como texto Se No, Par = A como texto Pergunte B / 2 tem resto Se Sim, Impar = Impar + B como texto Se No, Par = Par + B como texto Pergunte C / 2 tem resto Se Sim, Impar = Impar + C como texto Se No, Par = Par + C como texto Pergunte D / 2 tem resto Se Sim, Impar = Impar + D como texto Se No, Par = Par + D como texto Pergunte E / 2 tem resto Se Sim, Impar = Impar + E como texto Se No, Par = Par + E como texto Pergunte F / 2 tem resto Se Sim, Impar = Impar + F como texto Se No, Par = Par + F como texto Mostrar Varivel Par Mostrar Varivel Impar Final
Lgica de Programao
TABELA VERDADE Slide 29
Conectivos:
~ ^ v
No E Ou
Ento Se e somente se
Lgica de Programao
TABELA VERDADE Slide 30
Proposies Simples
Conjuno (^) - Se uma das condies for falsa o resultado ser falso. Disjuno (v) - Se uma das condies for verdadeira o resultado ser verdadeiro Condicional ()- Somente ser falso se A for Verdadeiro e B for falso. Bicondicional ()- Somente ser verdadeiro se A e B forem iguais.
Lgica de Programao
TABELA VERDADE Slide 31
A V V F
B V F V
A^B V F F
AvB V V V
AB AB V F V V F F
Lgica de Programao
TABELA VERDADE Slide 32
Tautologia
Sempre verdadeiro independente do contedo lgico das variveis A/B .
A V V
B V F
AB ~AvB (A B) AvB) V F V F V V
F
F
V
F
V
V
V
V
V
V
Lgica de Programao
TABELA VERDADE Slide 33
Contradio
Sempre falso independente do contedo lgico das variveis A/B .
A V F
~A F V
A A F F
Lgica de Programao
TABELA VERDADE Slide 34
Equivalncia Lgica
Quando possui a mesma tabela verdade.
A V V F F
B V F V F
AB V F V V
~AvB V F V V
Lgica de Programao
TESTE DE MESA Slide 35
a. b. c. d.
Var
X Y Z
2 5 7
1 7 8
3 3 6
9 2 11
Lgica de Programao
EXERCCIOS Slide 36
Exerccios da pgina 10
Fazer o Teste de Mesa 1 ao 4
Dados Exerccio 3
A 1 B 6 C 7 D 10 8 15 19 9 10 13 22 8 6 22 10 6
Dados Exerccio 4
A 12 19 13 61 B 11 9 25 33 C 16 45 44 18 D 7 8 5 9
3 12 17 6
8 44 13 2
Lgica de Programao
EXERCCIOS Slide 37
Exerccios da pgina 10
Fazer exerccios do 5 ao 10
Lgica de Programao
EXERCCIOS Slide 38
RECEBA A=0
N S
DIV += STR(A)
A >= 10
N
MOSTRAR DIV
A := A + 1
FIM
Lgica de Programao
EXERCCIOS Slide 39
Lgica de Programao
EXERCCIOS Slide 40
10. Ir ao supermercado com uma lista e comprar tudo que custar menos
de R$ 10,00.
INICIO
RECEBA PRECO EM A
N S S
A < 10
N
COMPRA ITEM
LE PROXIMO ITEM
FIM DE LISTA
FIM
Lgica de Programao
EXERCCIOS Slide 41
Lio de Casa
Fazer exerccio 11
Lgica de Programao
EXERCCIOS Slide 42
Correo do Exerccio 11
Faa um algoritmo para calcular reajuste salarial dos funcionrios. Premissas: Salrio at R$ 660,00 tero aumento de 15%, at R$ 1.000,00 tero 10%, acima de R$ 1.000,00 tero 6% de aumento. Alem disso aqueles funcionrios que tiverem mais de 2 anos de casa recebero um extra de 78% do valor do salrio reajustado.
Lgica de Programao
EXERCCIOS Slide 43
INICIO
RECEBA SALARIO EM S
FIM S
LE PROXIMO ITEM
S
S <= 660 S := S * 1.15
N S
S <= 1000 S := S * 1.10
N S
T >= 2 S := S * 1.78
S := S * 1.06
Como Programar
Como Programar
ADVPL Slide 45
Surgiu com a tecnologia Protheus em 1994 Derivada do Clipper Linguagem orientada a objetos; Ambiente de desenvolvimento (IDE) APOs (Advanced Protheus Objects),
Como Programar
ADVPL Slide 46
Interface com o Usurio Processos Programao de RPC Programao Web Programao TelNet
Como Programar
PROGRAMAO Slide 47
Compilao
Execuo
Como Programar
PROGRAMAO Slide 48
Como Programar
PROGRAMAO Slide 49
Linhas de Programa
Linhas de comando
Local nSoma := 0
Linhas mistas
Local nSoma := 0 //Utilizada para totalizar o relatrio.
Como Programar
PROGRAMAO Slide 50
Tamanho de Linha
Linha fsica Linha lgica
If !Empty(cNome) .And. !Empty(cEnd) .And. ; <enter> !Empty(cTel) .And. !Empty(cFax) .And. ; <enter> !Empty(cEmail) GravaDados(cNome,cEnd,cTel,cFax,cEmail) Endif
Como Programar
ESTRUTURAO Slide 51
Identificao
/*****************************************************************************\ |Funcao para separao de nmeros pares e impares | |Autor: Cristiane C. Figueiredo | |Data : 01/03/06 | \*****************************************************************************/
Como Programar
ESTRUTURAO Slide 52
Inicializao
User Function fSeparaNum Local nBI Local cBIImpares := "" //Numeros Impares Local cBIPares := "" //Nmeros Pares
Como Programar
ESTRUTURAO Slide 53
Corpo do programa
For nBI:=1 to 12 If mod(nBI)== 0 cBIPares += Alltrim(str(nBI)) + Else cBIImpares += Alltrim(str(nBI)) + Endif Next
Como Programar
ESTRUTURAO Slide 54
Encerramento
// Exibe em tela o resultado encontrado Msginfo("Pares + cBIPares + " Impares + cBIImpares) // Termina o programa Return
Como Programar
ESTRUTURAO Slide 55
/****************************************************************************\ |Funcao para separao de nmeros pares e impares | |Autor: Cristiane C. Figueiredo | |Data : 01/03/06 | \****************************************************************************/ User Function fSeparaNum Local nBI Local cBIImpares := "" //Numeros Impares Local cBIPares := "" //Nmeros Pares For nBI:=1 to 12 If mod(nBI)== 0 cBIPares += Alltrim(str(nBI)) + Else cBIImpares += Alltrim(str(nBI)) + Endif Next // Exibe em tela o resultado encontrado Msginfo("Pares + cBIPares + " Impares + cBIImpares) Return
Como Programar
DOCUMENTAO Slide 56
Funes
/*============================================================================| |Funo |ADV0070A |Autor|Cristiane C. Figueiredo | Data |23/07/04| |==========|==================================================================| |Descrio |Verifica se campo do E2 pode ser alterado ou no. | |==========|==================================================================| |Modulo | SIGAFIN | |==========|==================================================================| |OBS | Especifico para BIALE | |==========|==================================================================| |Alteraes solicitadas | |=============================================================================| |Descrio |Sol.por|Atend.por |Data | |=============================================================================| |Incluida verificao de chamada por MsExecAuto | | | | |ISInCallStack('msexecauto'). |Gerente|Lucas Borges|30/01/07| |============================================================================*/ User Function COM0070A(nCampo) Comandos... Return
Como Programar
DOCUMENTAO Slide 57
Solicitao de Customizaes
Dados da Requisio
Data Solicitao rea Responsvel
<data da solicitao> <nome da rea solicitante/centro de custo> <nome do solicitante responsvel>
Analista de Negcio
Volume de esforo Previsto Data de entrega Prevista
Como Programar
DOCUMENTAO Slide 58
Como Programar
DOCUMENTAO Slide 59
Aprovaes
Nome Assinatura Data
Como Programar
FUNCIONALIDADES Slide 60
Function
no
Funes de usurio, podendo ser utilizadas para fazer customizaes. Funes chamadas pelas User Functions e pelas Functions.
Como Programar
CRIAO DE VARIVEIS Slide 61
Identificadores
Public: Visvel a partir do momento que criada at o termino da aplicao, no deve ser utilizada para qualquer coisa pois ocupa espao de memria. Private: Visvel na funo que a criou e nas demais chamadas por ela, at que a funo que a criou seja finalizada Local: Visvel somente na funo que a criou, variveis locais ocupam pouco espao de memriae so criadas automaticamente quando no declaradas ou quando provierem de parametrizao de funo
Como Programar
CRIAO DE VARIVEIS Slide 62
Tipos de Variveis
Tipo Caracter Numrica Exemplo cVar nVar Descritivo Aceita nmeros e letras Aceita apenas nmeros
Data
Lgica Array Objeto
dVar
lVar aVar oVar
Como Programar
CRIAO DE VARIVEIS Slide 63
Inicializao de Variveis
Como Programar
CRIAO DE VARIVEIS Slide 64
tipo de retorno de acordo com o dicionrio de dados, considerando inicializador padro. cCampo Nome do campo
uRet
lIniPad
cLado
Indica se considera (.T.) ou no (.F.) o inicializador padrao (X3_RELACAO) Lado para inicializao padro
Como Programar
OPERADORES BSICOS Slide 65
Matemticos
+ * / ** ou ^ % Adio Subtrao Multiplicao Diviso Exponenciao Mdulo (Resto da Diviso)
Como Programar
OPERADORES BSICOS Slide 66
String
+ Concatenao de strings (unio) - Concatenao de strings com eliminao dos brancos finais das strings intermedirias $ Comparao de Substrings (contido em)
Como Programar
OPERADORES BSICOS Slide 67
Relacionais
< > = == <= >= <> ou # ou != Menor que Maior que Igual Exatamente Igual (para caracteres) Menor ou Igual Maior ou Igual Diferente
Como Programar
OPERADORES BSICOS Slide 68
Lgicos
.And. .Or. E OU
.Not. ou ! NO
Como Programar
OPERADORES BSICOS Slide 69
Atribuies
= := += -= *= /= Atribuio Simples Atribuio em Linha 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)/Atribuio em Linha Incremento Ps ou Pr-fixado Decremento Ps ou Pr-fixado
Como Programar
OPERADORES BSICOS Slide 70
Especiais
() Utilizados para agrupar elementos em uma expresso priorizando essas condies, ao qual damos o nome de ordem de precedncia da avaliao da expresso. Tambm servem para envolver os argumentos de uma funo. Elemento de Matriz. Utilizados para especificar um elemento especfico de uma matriz. Definio de Matriz, Constante ou Bloco de Cdigo. Por exemplo: aArray := {1,2,3,4,5} cria uma matriz chamada aArray com cinco elementos.
[]
{}
Como Programar
OPERADORES BSICOS Slide 71
Especiais
-> Identificador de Apelido (Alias). identifica um campo de um arquivo diferenciando-o de uma varivel. Exemplo: SA1->A1_NOME
&
Como Programar
OPERADORES BSICOS Slide 72
Especiais
@ Passagem de parmetro por referncia. Utilizado para indicar que durante a passagem de uma varivel para uma funo ou procedimento ela seja tomada como uma referncia e no como valor. Passagem de parmetro por valor. Utilizado para indicar que durante a passagem de uma varivel para uma funo ou procedimento ela seja tomada como um e valor no como referncia.
||
Como Programar
PRECEDNCIA Slide 73
Como Programar
PRECEDNCIA Slide 74
Matemtica
Exponenciao Multiplicao e Diviso Adio e Subtrao
Como Programar
PRECEDNCIA Slide 75
Exemplo
Local nVar := 15+12/3+7*3-2^3 Calcula-se a exponenciao: 2^3 =8 Calcula-se diviso: 12/3 =4 Calcula-se a multiplicao: 7*3 =21 Efetua a soma e subtrao: 15 + 4 + 21 - 8 O resultado desta expresso 32
Como Programar
PRECEDNCIA Slide 76
Exemplo
Local nVar := (15+12)/(3+7)*3-2^3 Calcula-se a exponenciao: 2^3 =8 Calcula-se o primeiro grupo de parnteses: 15+12 = 27 Calcula-se o segundo grupo: 3+7=10 Calcula-se a diviso: 27/10 = 2.7 Calcula-se a multiplicao: 2.7 * 3 = 8.1 Efetua a soma e subtrao: 8.1-8 O resultado desta expresso 0.1
Como Programar
MACRO SUBSTITUIO Slide 77
Exemplo
nVar := 20 cVar := nVar + 35 nResult := &cVar nResult := nVar + 35 nResult := 20 + 35 nResult := 55
Variveis
EXERCCIOS Slide 78
Exerccios da pgina 23
Variveis
EXERCCIOS Slide 79
Vetores
Utilizao de Vetores
Slide 81
Utilizao de Vetores
Slide 82
Exemplo
Local aArray //Declarao da varivel aArray := {{"A", "B", "C"}, ; {"D", "E", "F"}, ; {"G", "H", "I"}} //Atribuio da matriz varivel
Utilizao de Vetores
Slide 83
Exemplo
MsgInfo(aArray[nLin][nCol]) Onde: nLin -> Linha onde se encontra o contedo que se quer exibir nCol -> Coluna onde se encontra o contedo que se quer exibir MsgInfo(aArray[2][3])
Utilizao de Vetores
Slide 84
Exemplo
aArray[nLin][nCol] := cVar Onde: nLin -> Linha onde se encontra o contedo que se quer alterar nCol -> Coluna onde se encontra o contedo que se quer alterar cVar -> Novo Contedo aArray[2][3] := X
Utilizao de Vetores
Slide 85
Cuidados Estrutura
Vetores
EXERCCIOS Slide 86
Exerccios da pgina 25
Vetores
EXERCCIOS Slide 87
Vetores
EXERCCIOS Slide 88
Vetores
Slide 89
Vetores
Slide 90
Vetores
Slide 91
Vetores
Slide 92
Controle de Fluxo
Slide 93
Estruturas de Repetio
Estruturas de Deciso
Controle de Fluxo
REPETIO Slide 94
Controle de Fluxo
REPETIO Slide 95
EXEMPLO
For nBI:=1 to 12 If mod(nBI)== 0 cBIPares += Alltrim(str(nBI)) + Else cBIImpares += Alltrim(str(nBI)) + Endif Next
Controle de Fluxo
REPETIO Slide 96
Controle de Fluxo
REPETIO Slide 97
EXEMPLO
Local nSomaPar := 0, nNumber := 350 nNumber := Int(nNumber / 2) While nNumber > 0 nSomaPar += nCnt nNumber := nNumber - 2 Enddo Alert( "A quantidade de nmeros pares : " + str(nSomaPar) ) Return
Controle de Fluxo
DECISO Slide 98
If ... Endif
Sintaxe IF lExpressao Comando Verdadeiro... ELSE Comando Falso... ENDIF
Controle de Fluxo
DECISO Slide 99
EXEMPLO
Local dVencto := CTOD("31/12/01") If Date() > dVencto Alert("Titulo vencido!") Else Alert("Titulo a vencer!") Endif Return
Controle de Fluxo
DECISO Slide 100
EXEMPLO
Local nMes := Month(Date()) Local cPeriodo := "" DO CASE CASE nMes <= 3 cPeriodo := "Primeiro Trimestre" CASE nMes >= 4 .And. nMes <= 6 cPeriodo := "Segundo Trimestre" CASE nMes >= 7 .And. nMes <= 9 cPeriodo := "Terceiro Trimestre" OTHERWISE cPeriodo := "Quarto Trimestre" ENDCASE Return
Controle de Fluxo
DECISO Slide 101
Controle de Fluxo
EXERCCIOS Slide 102
Controle de Fluxo
PROBLEMAS COMUNS Slide 103
Exemplo 1: dbSeek(xFilial(SE1)+DTOS(dDtIni))
Do While SE1->(!Eof())
@ lin, col SAY teste
SA1->(DBSKIP())
Enddo
Controle de Fluxo
PROBLEMAS COMUNS Slide 104
Exemplo 2: aCampos := {} Do while .T. Aadd(aCampos, Teste) If Len(aCampos) > 100 EXIT Endif Enddo
Controle de Fluxo
PROBLEMAS COMUNS Slide 105
Exemplo 3:
aCampos := {} dbSeek(xFilial(SE1)+DTOS(dDtIni)) Do While SE1->(!Eof()) If !EMPTY(SE1->E1_BAIXA) Reclock(SE5 , .T.) Endif SE1->(dbSkip()) Enddo
Controle de Fluxo
CORREO DOS EXERCCIOS Slide 106
Controle de Fluxo
CORREO DOS EXERCCIOS Slide 107
Controle de Fluxo
CORREO DOS EXERCCIOS Slide 108
Controle de Fluxo
CORREO DOS EXERCCIOS Slide 109
Exerccio 2 Pg. 31
User Function fExFluxo2() Local aArray := { { Maria, 10, 7, 15, 31} ,; { Jose , 15, 16, 21, 33} , ; { Petrucio, 8, 8, 8, 6} , ; { Firmino, 15, 16, 21, 33} , ; { Felizberto, 10, 17, 31, 25} } For I:=1 to Len(aArray) Mostra Nome + aArray[I][1] nMedia := (aArray[I][2] + aArray[I][3] +; aArray[I][4] + aArray[I][5])/4 Mostra Media + str(nMedia) Next Return
Controle de Fluxo
CORREO DOS EXERCCIOS Slide 110
Controle de Fluxo
CORREO DOS EXERCCIOS Slide 111
Controle de Fluxo
EXERCCIOS Slide 112