You are on page 1of 95

AdvPl - Advanced Protheus Language

Conceitos Balizares
Jose Romildo de Sousa Jnior

HOJE
FALAREMOS
SOBRE
1. Consolidar Conhecimento

2.
3.
4.
5.

1.
2.
3.
4.
5.

Um pouco sobre
Repositrio de Objetos
Ferramentas de Programao
Subdiviso de Programao AdvPl
Camadas da Tecnologia Protheus

Variveis e Operadores Matemticos


Estrutura de Controle
Legibilidade
Iniciando a Programao AdvPl

6. Componentes (Objetos)

Consolidar Conhecimento

Um pouco sobre
Proteu

O nome Protheus vem de Proteu, personagem da mitologia grega;


Com a criao da tecnologia Protheus, foi necessrio a criao de
uma Linguagem que suportasse o padro xBase;
A Linguagem AdvPl teve seu incio em 1994;

Evoluo das Linguagens xBase (Clipper, Visual Object e FiveWin).

AdvPl uma extenso da Tecnologia xBase com comandos,


expresses e palavras reservadas, aglutinando funes genunas
da Microsiga Protheus (Protheus-Totvs);
Linguagem completa para criao de ERP e preparada para
Internet.

Linguagem Orientada a Objeto e Eventos, permitindo a criao de Visuais e


classes de objetos personalizados.

Repositrio de Objetos
Arquivos Compilados

Todos os arquivos compilados transformam-se em Unidade


de Inteligncia Bsicas APOs (Advanced Protheus Objects);
Todos APOs so armazenados num repositrio (Lado
servidor) e executados pelo Protheus Server;
O compilados e interpretador o prprio Servidor Protheus.
O desenvolvimento de aplicao podem utilizar os IDE Integrated Development Environment/TOTVSDevStudio at
as Builds 7.00.120420A, mas possveis para compilao de
User Functions (Cliente) ou utilizar o TDS Totvs (Developer
Studio).

Ferramenta
TOTVSDevStudio

Ferramenta
TDS Developer
Studio

Subdiviso de Programao AdvPl


Contexto de acessos
as solues

Com interfase com Usurio:


Executados por meio de terminais Remotos do
Protheus, interfases oriundos da tecnologia Protheus,
capazes de carregar as Interfases nas estaes de
trabalho;
Efetua a integrao com Servidor Protheus, acessando a
base de dados e o gerenciamento de conexes.
Sem Interfase com Usurio:
Geralmente so funcionalidades especficas de
processamento, sem interfase com usurio;
So processos ou Jobs executados apenas pelo Servidor
Protheus;
Subcategorias: Processos, RPC(Remote Procedure Call),
Web e TelNet.

Camadas da Tecnologia Protheus


Camadas

Servidor de Aplicao:
Compila e executa os APOs.

Repositrio:
Todo e qualquer arquivos compilado no APO, acessado pelo
Servidor de Aplicao.

Terminal:
Responsvel por carregar a interfase ao usurio;
No so efetuados processamentos Locais.

Dados:
Dados acessados pelo Servidor de Aplicao do Protheus;
ADS, BTrieve, CTree e TopConnect (para padro SQL).

Variveis e Operadores Matemticos

Variveis e seus contextos


Variveis e Operadores
Matemticos

Dependente do escopo de definio e o


momentos em que as mesmas so utilizadas;
Escopo de Variveis: Local, Static, Private e
Public;
A linguagem AdvPl permite que a definio de
Tipo da varivel possa ser definida em tempo
de execuo e tambm alterada;
Mas adotasse, por boa prtica de programao, as
definies e ajustes devero estar no incio da
funcionalidade e NO efetuar a alterao de tipo
em tempo execuo.

Tipos de Variveis
Variveis e Operadores
Matemticos

Tipo

Definio

Caractere

Formado por qualquer conjunto de caracteres que constam


na tabela Ascii, sempre representado entre aspas.

Numrico

Formado por valores negativos, positivos ou iguais a zero,


especificamente usado para
operaes matemticas.

Lgico
Data

verdadeiro (.T.) ou falso (.F.), sempre intercalados por ponto.


Aceitam apenas datas coerentes, ou seja, a data checada
quanto a durao do ms (28, 29, 30 ou 31) e a existncia do
ms (1 a 12).

Memo

Aceita textos de at 64 KB.

Matriz
(Array)

a disposio de outros elementos em colunas e linhas.

Bloco de
Cdigo

O bloco de cdigo um tipo de dado especial. utilizado para


armazenar instrues escritas em AdvPl
que podero ser executadas posteriormente.

Acessos as Variveis e Campos


Tabelas e Arquivos

Caso existam variveis com o mesmo nome de Campo


(Tabela ou Arquivo), ser privilegiado o Campo;
Mximo de 10 caracteres para definio de nomes de
variveis;
A tcnica para de referncia a utilizao do identificador de

Apelido
atrelado ao identificador de referncia
MENVAR e FIELD;
Utilizao MENVAR acessando uma varivel de memria;

->

Utilizao FIELD acessando um contedo de Campo;

Exemplos de: MENVAR->NOME


Exemplos de: FIELD->NOME

O identificador FIELD, poder ser substitudo pelo apelido da


tabela ou arquivo aberto no contexto, facilitando assim
identificao a programao.

Operadores Matemticos
Variveis e Operadores
Matemticos
Operadores AdvPl

Definio

Adio

Subtrao

Multiplicao

Diviso

** ou ^
%

Exponenciao
Resto de Diviso

Operadores String
Variveis e Operadores
Matemticos
Operadores AdvPl

Definio

Concatenao de strings (unio)


Concatenao de strings com
eliminao dos brancos finais das
strings intermedirias
Comparao de Substrings (contido
em)

Operadores Relacionais
Variveis e Operadores
Matemticos
Operadores AdvPl

<
>
=
==

Definio

Comparao Menor
Comparao Maior
Comparao Igual
Comparao Exatamente Igual (para
caracteres)
<=
Comparao Menor ou Igual
>=
Comparao Maior ou Igual
<> ou # ou != Comparao Diferente

Operadores Lgicos
Variveis e Operadores
Matemticos
Operadores AdvPl

.And.
.Or.

.Not. ou !

Definio

E lgico
OU lgico

NO lgico

Operadores de Atribuies
Variveis e Operadores
Matemticos

Operadores
AdvPl

=
:=
+=
-=
*=
/=
**= ou
^=
%=

Definio

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
Exponenciao e Atribuio em Linha
Mdulo (resto da diviso) e Atribuio em
Linha

Equivalncias de Atribuies Compostas


Variveis e Operadores
Matemticos
Operador

+=
-=
*=
/=
**= ou ^=
%=

Exemplo

Equivalncia

X += Y
X -= Y
X *= Y
X /= Y
X **= Y
X %= Y

X=X+Y
X=X Y
X=X *Y
X=X /Y
X = X ** Y
X=X %Y

Operadores Incremento e Decremento


Variveis e Operadores
Matemticos
Operadores AdvPl

++

--

Definio

Incremento Ps ou Prfixado
Decremento Ps ou Prfixado

Operadores Especiais
Variveis e Operadores
Matemticos
Operadores AdvPl

()
[]
{}

->
&
@
||

Definio

Agrupamento ou Funo
Elemento de Matriz
Definio de Matriz, Constante ou Bloco
de Cdigo
Identificador de Apelido
Macrosubstituio
Passagem de parmetro por referncia
Passagem de parmetro por valor

Estrutura de Controle

Estrutura de Controle
Condicionais e Laos
de Repeties

Para estruturas de controle de repeties e


condicionais, so utilizados basicamente todas as
funcionalidade de qualquer linguagem de
Programao de alto nvel;
Condicionais: que determinam o caminhado por
onde a rotina dever ser executada podendo ser
utilizadas condicionais encadeadas;
Estrutura de repetio: utilizadas para execues de
determinadas instrues, em uma quantidade prdeterminada de vezes ou at que seja atendida a
condicional.

O Comando IF...ENDIF
Condicional Sintaxe

Executa um conjunto de comandos baseado no


valor de uma expresso lgica.

IF lExpressao
[Comandos...]
ELSEIF lExpressao
[Comandos...]
ELSE
[COMANDO...]
ENDIF

O Comando IF...ENDIF
Condicional Exemplo

User Function EXEMPLO()


Local dVencto:=CTOD("31/12/01")
If Date() > dVencto
Alert("Vencimento ultrapassado!;
+outro texto)
Endif
Return ()

O Comando DO CASE...ENDCASE
Condicional Sintaxe

Executa o primeiro conjunto de comandos cuja expresso


condicional resulta em verdadeiro (.T.).
DO CASE
CASE lExpressao1
[Comandos ...]
CASE lExpressao2
[Comandos ...]
CASE lExpressaoN
[Comandos ...]
OTHERWISE
[Comandos...]
ENDCASE

O Comando DO CASE...ENDCASE
Condicional Exemplo

User Function 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 ()

O Comando FOR...NEXT
Repetio Sintaxe

A estrutura de controle FOR...NEXT, ou simplesmente o loop


FOR, repete uma seo de cdigo em um nmero
determinado de vezes.

FOR Variavel := nValorInicial TO nValorFinal [STEP nIncremento]


[Comandos...]
[EXIT]
[LOOP]
NEXT

O Comando FOR...NEXT
Repetio Exemplo

User Function EXEMPLO()


Local nCnt
:= 0
Local nSomaPar := 0
For nCnt := 0 To 100 Step 2
nSomaPar += nCnt
Next
Alert( "A soma dos 100 primeiros nmeros pares : ;
+ cValToChar(nSomaPar) )
Return ()

O Comando DO WHILE...ENDDO
Repetio Sintaxe

A estrutura de controle WHILE...ENDDO, ou simplesmente o


loop WHILE, repete uma seo de cdigo enquanto uma
determinada expresso resultar em verdadeiro (.T.).

DO WHILE lExpressao
[Comandos...]
[EXIT]
[LOOP]
ENDDO

O Comando DO WHILE...ENDDO
Repetio Exemplo

User Function EXEMPLO()


Local nNumber := nAux := 350
nAux := Int(nAux / 2)
Do While nAux > 0
nSomaPar += nCnt
EndDo
Alert( "A soma dos 100 primeironmeros pares : ;
+ cValToChar(nSomaPar) )
Return()

Legibilidade

Identao
Organizao

Identar o cdigo torna mais fcil identificar blocos de


comandos que faam parte de um loop ou estrutura
condicional.
Cdigo no
identado

Cdigo
identado

Quebra de Linhas
Visualizao

Linhas muito longas podem dificultar a legibilidade,


nesses casos melhor quebrar a linha usando o ponto e
vrgula.
Sem quebra de linha

Com quebra de linha

Espaos em Branco
Visualizao

Inserir espaos torna mais fcil identificar parmetros


de uma funo, distinguir as chaves em uma busca ou
visualizar os itens de um clculo.

Letras Maisculas
Adota-se

A Linguagem AdvPl no possui condicionais case


sensitive, mas existem alguns casos em que o cdigo
deve ser escrito em letras maisculas.

Cdigo SQL

Nome de campos

SN1->N1_CBASE

Variveis de memria

M->N3_CBASE

Constantes

SELECT * FROM SN1990

#Define PI 3.1415

Captura de Palavras Chaves


Adota-se

Uma conveno amplamente utilizada a de capitular as


palavras chaves, funes, variveis e campos utilizando uma
combinao de caracteres em maisculo e minsculo,
visando facilitar a leitura do cdigo fonte.

Notao Hngara
Adota-se

Deve ser utilizada para identificar o tipo de contedo de uma


varivel.

Comentrios
Documentao no
Fonte

Comentrios servem como documentao e


explicao de um cdigo fonte, mantendo um
histrico e facilitando seu entendimento para
anlise e manuteno.

Comentar o fonte, facilita o entendimento por parte


do analista que precisar realizar manuteno e at
mesmo para quem o criou, mas lembre-se que
comentrio em excesso polui o cdigo e pode
atrapalhar, portanto use o bom senso.

Comentrios de Linha
Documentao no
Fonte

Existem outras maneira de se comentar linhas, mas


a melhor maneira a utilizao de duas barras
transversais.

Comentrios de Texto
Documentao no
Fonte

Uma outra forma de comentrio de texto a


utilizao de barras transversais juntamente com
asterisco.
Todo o texto encontrado entre a abertura (indicada
pelos caracteres/*) e o fechamento (indicada pelos
caracteres */) considerado como comentrio.

Comentrios Protheus.doc
Documentao no
Fonte

Uma forma de documentao utilizada por padro


da ferramenta de programao TDS Totvs
Developer Studio o padro Protheus.doc;
Uma vez utilizado tal documentao estar
disponvel para exportao em HTML.

Iniciando a Programao AdvPl

Entra, Processamento e Sada


Pensando em
Soluo

Toda programao, dever ser primada pela


interpretao da Oportunidade e distinguindo as
informaes de Entrada (Input) e Sada (Output);
Com base nesta modelagem balizar, o programado
dever determinar e compilar os processamentos
necessrios para chegar a soluo da situao.
Pensar em solues Simples ao usurio e com o
mnimos de interaes sistmicas entre Homem
Mquina, mitigam erros humanos e aumentam a
produtividade.
Encapsulamentos de Solues!

Estrutura de Um Programa
Partes do Cdigo Fonte:
1.
rea de Identificao;
2.
rea de Ajustes Iniciais;
3.
Corpo do Programa;
4.
rea Encerramento.

rea de Identificao
Partes do Cdigo Fonte:
1. rea de Identificao;
2. rea de Ajustes Iniciais;
3. Corpo do Programa;
4. rea Encerramento.

Contm apenas comentrios explicando a sua


finalidade, data de criao, autor, etc, e aparece no
comeo do programa, antes de qualquer linha de
comando.

rea de Ajustes Iniciais


Partes do Cdigo Fonte:
1. rea de Identificao;
2. rea de Ajustes
Iniciais;
3. Corpo do Programa;
4. rea Encerramento.

Nesta rea geralmente se fazem os ajustes iniciais,


importantes para o correto funcionamento do
programa. Entre os ajustes se encontram
declaraes de variveis, inicializaes, abertura de
arquivos, etc. Apesar do AdvPl no ser uma
linguagem rgida e as variveis poderem ser
declaradas em qualquer lugar do programa,
aconselhvel faz-lo nesta rea visando tornar o
cdigo mais legvel.

O Corpo do Programa
Partes do Cdigo Fonte:
1. rea de Identificao;
2. rea de Ajustes
Iniciais;
3. Corpo do Programa;
4. rea Encerramento.

nesta rea que se encontram as linhas de cdigo


do programa. onde se realiza a tarefa necessria
atravs da organizao lgica destas linhas de
comando.

rea de Encerramento
Partes do Cdigo Fonte:
1. rea de Identificao;
2. rea de Ajustes
Iniciais;
3. Corpo do Programa;
4. rea Encerramento.

nesta rea onde as finalizaes so efetuadas.


onde os arquivos abertos so fechados, e o
resultado da execuo do programa utilizado.
nesta rea que se encontra o encerramento do
programa;
Todo programa em AdvPl deve sempre terminar
com a palavra chave Return.

Componentes (Objetos)

MSDialog - Componentes de Interfase


Caractersticas

Classe de dilogo de entrada de dados.

Hierarquia: tSrvObject -> tWindow -> tDialog -> MSDialog

Caractersticas: MSDialog deve ser utilizada como padro de janela para


entrada de dados. MSDialog um tipo de janela dilogo modal, isto ,
no permite que outra janela ativa receba dados enquanto esta estiver
ativa.

Metodo: New([anTop], [anLeft], [anBottom], [anRight], [acCaption],


[cPar6], [nPar7], [lPar8], [nPar9], [anClrText], [anClrBack], [oPar12],
[aoWnd], [alPixel], [oPar15], [oPar16], [lPar17])

MSDialog - Componentes de Interfase


Exemplo

TComboBox - Componentes de Interfase


Caractersticas

Caracterstica: Utilize a classe tComboBox para cria uma entrada de


dados com mltipla escolha com item definido em uma lista vertical,
acionada por F4 ou pelo boto esquerdo localizado na parte direita do
controle. A varivel associada ao controle ter o valor de um dos itens
selecionados ou no caso de uma lista indexada, o valor de seu ndice.

Hierarquia: tSrvObject -> tControl -> tComboBox

Mtodo: New([anRow], [anCol], [abSetGet], [anItems], [anWidth],


[anHeight], [aoWnd], [nPar8], [abChange], [abValid], [anClrText],
[anClrBack], [alPixel], [aoFont], [cPar15], [lPar16], [abWhen], [lPar18],
[aPar19], [bPar20], [cPar21], [acReadVar])

TComboBox - Componentes de Interfase


Exemplo

TCheckBox - Componentes de Interfase


Caractersticas

Caracterstica: Utilize a classe tCheckbox quando desejar criar um


controle que possua dois estados .T. ou .F..

Hierarquia: tSrvObject -> tControl -> tCheckBox

Mtodo: New([anRow], [anCol], [acCaption], [abSetGet], [aoWnd],


[anWidth], [anHeight], [nPar8], [abClick], [aoFont], [abValid], [anClrFore],
[anClrBack], [lPar14], [alPixel], [cPar16], [lPar17], [abWhen])

TCheckBox - Componentes de Interfase


Exemplo

TRadMenu - Componentes de Interfase


Caractersticas

Caracterstica: Classe de radio group. Utilize a classe tRadMenu para criar


um controle que possibilita escolha de item atravs de uma lista.

Hierarquia: tSrvObject -> tControl -> tRadMenu

Mtodo: New([anRow], [anCol], [aacItems], [abSetGet], [aoWnd],


[aPar6], [abChange], [anClrText], [anClrPan], [cPar10], [lPar11],
[abWhen], [anWidth], [anHeight], [abValid], [lPar16], [lPar17], [alPixel])

TRadMenu - Componentes de Interfase


Exemplo

TFolder - Componentes de Interfase


Caractersticas

Caracterstica: Cria um objeto para exibir pastas.

Hierarquia: tControl -> tFolder

Mtodo: New( [ nTop ], [ nLeft ], [ aPrompts ], [ aDialogs ], [ oWnd ], [


nOption ], [ nClrFore ], [ nClrBack ], [ lPixel ], [ uParam10 ], [ nWidth ], [
nHeight ], [ cMsg ], [ uParam14 ] )

TFolder - Componentes de Interfase


Exemplo

MBrowse - Componentes de Interfase


Caractersticas

Browse padro com menu de opes que permitem visualizao e a


manipulao das informaes do sistema, alm de identificadores de
status de registros, legendas e filtros para as informaes.
Sintaxe: MBROWSE( [ uPar1 ], [ uPar2 ], [ uPar3 ], [ uPar4 ],
cAlias, [ aFixos ], [ cCpo ], [ uPar5 ], [ cFun ], [ nPadrao ], [ aCores ], [ cExpI
ni ], [ cExpFim ], [ nCongela ] ) -> nil

MBrowse - Componentes de Interfase


Exemplo

FilBrowse - Componentes de Interfase


Caractersticas

Caracterstica: A FilBrowse() uma funcionalidade que permite a


utilizao de filtros na MBrowse().

Sintaxe: FilBrowse ( cAlias ,[ @aQuery ],cFiltrolShowProc )

Observao: A funo PesqBrw dever obrigatoriamente substituir a


funo AxPesqui, no array do aRotina, sempre que for utilizada a funo
FilBrowse().

FilBrowse - Componentes de Interfase


Exemplo

FWMarkBrowse - Componentes de Interfase


Caractersticas

Caracterstica: Fornece um objeto do tipo grid, botes laterais e uma


coluna com a opo de marca e desmarca.

Sintaxe: FWMarkBrowse():New()-> oSelf

Observao: Evoluo do objeto MarkBrow

FWMarkBrowse - Componentes de Interfase


Exemplo

Referncia: https://rafaelvieceli.wordpress.com/2011/06/13/fwmarkbrowse/

Limitadores

Limite de dado AdvPl

Limitadores

Numricos: O tipo numrico do AdvPL ( ValType = "N" ) possui o limite


mximo de 15 dgitos de preciso ( contando da esquerda para a direita
todos os dgitos que compe o nmero, independente da existncia ou
no do ponto decimal ).

Decimais de Ponto Fixo: O tipo de dado decimal suportar at 128 dgitos


de preciso e escala para que possa realizar um clculo. Para representar
essa definio, utilizaremos a denotao decimal (P,S),
sendo:P = Preciso e S = Escala.
(http://tdn.totvs.com/display/tec/Decimais+de+Ponto+Fixo+--+9661)

Strings: Varivel do tipo Caractere no AdvPL pode conter 1MB -1 bytes.


So 1048575 caracteres, desde a primeira verso do AP5 em 1999. Caso
seja necessrio manipular strings maiores em memria, possivel
fragmentar a string e coloc-la em elementos de um array.

Limite de dado AdvPl - Tabelas

Limitadores

Limites convencionados para o desenvolvimento de aplicaes


portveis em AdvPL

Uma das caractersticas do AdvPL mais importante, e enfatizada no


desenvolvimento de aplicaes, a portabilidade da soluo para diferentes
ambientes, plataformas e SGBDs com alteraes mnimas no cdigo-fonte
AdvPL. Para procurar manter estas premissas no desenvolvimento de uma
soluo, prudente respeitar alguns limites no desenvolvimento de
aplicaes.
As definies de uma tabela de dados envolvem o nmero de colunas da
tabela, tamanho do registro (a soma do tamanho de todas as colunas),
tamanhos mximos para cada campo, bem como as defines de ndices da
tabela, e para cada uma destas definies, existe um limite

Limitadores

Limite de dado AdvPl - Tabelas


Os limites abaixo convencionados so contemplados por todas as RDDs
( Replaceable Database Driver) implementadas:
Limites Convencionados

Limites

Nmero de campos por tabela

<= 256

Quantidade de campos por chave de ndice

<=14

Quantidade de ndices por tabela

<=15

Tamanho do registro

<= 7000 Bytes

Tamanho do registro da expresso de ndice

<= 140 Bytes (*)

Tamanho mximo de um campo C Caractere

<= 254 Bytes

Tamanho mximo de um campo M Memo

<= 64 KB (**)

(*) O limite de 140 bytes para registro de expresso de ndice foi convencionado devido limitao
do driver ADS (Local e/ou Server), onde a criao de uma expresso de ndice com chave maior que
140 bytes pode ocasionar ocorrncia de erro ADS 7022 Maximum index levels exceeded, aps suscessivas
incluses de registros na tabela.
(**) Com o uso da RDD TOPCONN, mediante parametrizao especfica no TOTVS Application Server (Servidor
de Aplicao), possvel expandir o limite de armazenamento e recuperao de dados de campos M Memo
para at 1 MB.

Funcionalidades Utilizadas em Array

Array Exemplo da funo AADD

Array

Os exemplos a seguir demonstram os efeitos de chamadas mltiplas da


funo AADD() para um vetor:

aArray := {}
// Resulta: aArray e um vetor vazio
AADD(aArray, 5)
// Resulta: aArray e { 5 }
AADD(aArray, 10)
// Resulta: aArray e { 5, 10 }
AADD(aArray, { 12, 10 }) // Resulta: aArray e { 5, 10, { 12, 10 } }

Array Exemplo da funo ACOPY

Array

Este exemplo cria dois vetores, cada um deles preenchido com um valor.
Os dois primeiros elementos do vetor fonte sao entao copiados para o
vetor destino:

LOCAL nCount := 2, nStart := 1, aOne, aTwo


aOne := { 1, 1, 1 }
aTwo := { 2, 2, 2 }
ACOPY(aOne, aTwo, nStart, nCount) // Resulta: aTwo e agora { 1, 1, 2}

Array Exemplo da funo ADEL

Array

Este exemplo cria um vetor constante de trs elementos, e depois


elimina o segundo elemento. O terceiro elemento sobe uma posiao, e
ao
novo terceiro elemento atribuido NIL:

LOCAL aArray
aArray := { 1, 2, 3 }
ADEL(aArray, 2)

// Resulta: aArray e agora { 1, 2, 3 }


// Resulta: aArray e agora { 1, NIL,3 }

Array Exemplo da funo AEVAL

Array

Este exemplo utiliza AEVAL() para fazer uma lista que consiste em itens
selecionados de um vetor multi-dimensional.

LOCAL aFiles := DIRECTORY("*.dbf"), aNames := {}


AEVAL(aFiles, { | aFiles| AADD(aNames, aFiles[1]) } )

Array Exemplo da funo AFILL

Array

Neste exemplo, criado um vetor com trs elementos. O vetor depois


preenchido com falso (.F.). Ao final, aos elementos nas posioes dois e
trs atribuido o novo valos de verdadeiro (.T.):

LOCAL aLogic[3]
AFILL(aLogic, .F.)
AFILL(aLogic, .T., 2, 3)

// Resulta: aLogic e { NIL, NIL, NIL }


// Resulta: aLogic e { .F., .F., .F. }
// Resulta: aLogic e { .F., .T., .T. }

Array

Array Parametrizao AFILL

Sintaxe: AFILL( <array>, <expresso> [ , <expresso numrica 1> ] [ , <expresso numrica 2> ] )
Argumentos:

< array > : Define o array cujos elementos sero preenchidos por um determinado
contedo.

< expresso >: Define o valor que ser preenchido em cada elemento do array. Pode ser
uma expresso de qualquer tipo de dado, incluindo outro array, bloco de cdigo ou o valor
NIL.

< expresso numrica1 >: Define a posio do primeiro elemento a ser preenchido. Caso
esse argumento seja omitido, o valor padro ser 1.

< expresso numrica2 >: Define a quantidade de elementos que sero preenchidos a partir
da posio definida na expresso numrica 1. Se este argumento for omitido, todos os
elementos do array, a partir da expresso numrica 1 at o ltimo, sero preenchidos.

Array Exemplo da funo AINS

Array

Este exemplo demonstra o efeito da utilizao de AINS() em um vetor:

LOCAL aArray := { 1, 2, 3 }
// Resulta: aArray e agora { 1, 2, 3 }
AINS(aArray, 2)
// Resulta: aArray e agora { 1, NIL, 2 }

Array

Array Parametrizao AINS

Sintaxe: AIns ( < aDestino>, < nPosicao> ) --> Nil


Argumentos:

< aDestino>: Indica o array que ser manipulado.

< nPosicao>: Indica a posio, a partir da primeira, na qual ser inserido


um elemento nulo.

Array Exemplo da funo ARRAY

Array

Este exemplo cria um vetor unidimensional de cinco elementos utilizando


a funao ARRAY(), e depois exibe a aao equivalente atribuindo um vetor
literal de valores NIL:

aArray := ARRAY(5)
aArray := { NIL, NIL, NIL, NIL, NIL }

Este exemplo ilustra trs declaraoes diferentes que criam o mesmo


vetor multi-dimensional:

aArray := ARRAY(3, 2)
aArray := { {NIL, NIL}, {NIL, NIL}, {NIL, NIL} }
aArray := { ARRAY(2), ARRAY(2), ARRAY(2) }

Array Exemplo da funo ASCAN

Array

O exemplo a seguir demonstra a pesquisa em um vetor de trs


elementos utilizando valores simples e um bloco de cdigo como
critrios de pesquisa. Os critrios do bloco de cdigo ilustram como
executar uma pesquisa que nao faz diferenciaao entre maisculas e
minsculas:

aArray := { "Tom", "Mary", "Sue" }


niPos1 := ASCAN(aArray, "Mary")
// Resulta: 2
niPos2 := ASCAN(aArray, "mary")
// Resulta: 0
niPos3 := ASCAN(aArray, { |x| UPPER(x) == MARY" }) // Resulta: 2

Array Exemplo da funo ASIZE

Array

Estes exemplos demonstram a adio de novos elementos e a eliminao


de elementos existentes:

aArray := { 1 }
ASIZE(aArray, 3)
ASIZE(aArray, 1)

// Resulta: aArray e { 1 }
// Resulta: aArray e { 1, NIL, NIL }
// Resulta: aArray e { 1 }

Array

Array Exemplo da funo ASORT

No Exemplo abaixo , ordenamos um array em ordem crescenter , depois


em ordem decrescente atravs de um code-block .

Local aArray := { 3, 5, 1, 2, 4 }
ASORT(aArray) // Resultado: { 1, 2, 3, 4, 5 }
ASORT(aArray,,,{ |x, y| x > y }) // Resultado: { 5, 4, 3, 2, 1 }

No Exemplo abaixo , utilizamos na expresso de ordenao a funo


upper() , para ordenar o array em ordem alfabrica independentemente
da informao estar em letras maisculas e/ou minusculas.

aArray := { "Fred", Kate", "ALVIN", "friend" }


ASORT(aArray,,, { |x, y| UPPER(x) < UPPER(y) })

Funcionalidades Utilizadas de Tempo

Converso de Tipo Exemplo da funo DTOC

Data e Tempo

Converte um valor data para uma string com formato ms, dia e ano
(mm/dd/aa).
Os exemplos a seguir demonstram utilizaoes gerais de DTOC():

conout( DATE() )
// Resulta: 09/01/90
conout( DTOC(DATE()) )
// Resulta: 09/01/90
conout( "Hoje e " + DTOC(DATE()) )
// Resulta: Hoje e 09/01/90

Converso de Tipo Exemplo da funo DTOS

Data e Tempo

Converte um valor data para uma string com formato ano, ms e dia
(aaaammdd).
Os exemplos a seguir ilustram DTOS() em conjunto com vrias outras
funoes:

conout( DATE() )
// Resulta: 09/01/90
conout( DTOS(DATE()) )
// Resulta: 19900901
conout( LEN(DTOS(CTOD(""))) )
// Resulta: 8

Funes- Exemplo da Funo DATE

Data e Tempo

Os exemplos seguintes mostram a funo DATE() utilizada de vrias


maneiras:

conout( DATE() )
conout( DATE() + 30 )
conout( DATE() - 30 )
dDate = DATE()
conout( CMONTH(dDate) )

// Resulta: 08/04/02
// Resulta: 09/03/02
// Resulta: 07/05/02

// Resulta: August

Funes Exemplo da Funo DAY

Data e Tempo

Os exemplos seguintes mostram a funao DAY() sendo utilizada


de diversas maneiras:

conout( DATE() )
conout( DAY(DATE()) )
conout( DAY(DATE()) + 1)
conout( DAY(CTOD("")) )

// Resulta: 09/01/90
// Resulta: 1
// Resulta: 2
// Resulta: 0

Data e Tempo

Funes Exemplo da Funo MONTH


Estes exemplos ilustram o retorno do ms da data do sistema:
conout( DATE() )
conout( MONTH(DATE()) )
conout( MONTH(DATE()) + 1 )

// Resulta: 09/01/90
// Resulta: 9
// Resulta: 10

Este exemplo demonstra a funao MONTH() atuando em uma data nula:


conout( MONTH(CTOD("")) )

// Resulta: 0

Funes Exemplo da funo CMONTH

Data e Tempo

Os exemplos seguintes ilustram a utilizaao da funao CMONTH():

conout( CMONTH(DATE()) )
// Resulta: August
conout( CMONTH(DATE() + 45) )
// Resulta: September
conout( SUBSTR(CMONTH(DATE()), 1, 3) + STR(DAY(DATE()),3)) // Resulta: Aug
4

Funes Exemplo da funo YEAR

Data e Tempo

Os exemplos a seguir ilustram YEAR() usando a data do


sistema:

conout( DATE() )
// Resulta: 09/01/90
conout( YEAR(DATE()) )
// Resulta: 1990
conout( YEAR(DATE()) + 11 )
// Resulta: 2001

Funes Exemplo das funes DOW e CDOW

Data e Tempo

Os exemplos a seguir ilustram CDOW() e seu relacionamento com


DOW():

conout( DATE() )
// Resulta: 09/01/89
conout( DOW(DATE()) )
// Resulta: 3
conout( CDOW(DATE()) )
// Resulta: Terca-feira
conout( DOW(DATE() - 2) )
// Resulta: 1
conout( CDOW(DATE() - 2) )
// Resulta: Domingo

Data e Tempo

Funes Exemplo da funo ElapTime

Retorna uma string, com o nmero de segundos decorridos entre dois


horrios (hora inicial e final) diferentes, no formato hh:mm:ss

Este exemplo utiliza a funo ElapTime() para calcular o tempo


necessrio para um determinado processamento.

cHoraInicio := TIME() // Armazena hora de inicio do processamento


.
. <instrucoes>
.
cElapsed := ELAPTIME(TIME(),cHoraInicio) // Calcula a diferena de tempo
Exemplo 2:
ElapTime( "12:00:00", "13:15:15" ) // Resultado: "01:15:15"

Funes Exempo da funo Seconds

Data e Tempo

Este exemplo compara o valor de TIME() com o de SECONDS():

conout( TIME() )
// Resulta: 10:00:00
conout( SECONDS() )
// Resulta: 36000.00

Este exemplo demonstra como utilizar SECONDS() para informar o tempo


decorrido em segundos:
LOCAL nStart, nElapsed
nStart = SECONDS()
.
. <processamentos...etc....>
.
nElapsed = SECONDS() - nStart
conout( "Decorridos: " + LTRIM(STR(nElapsed)) + " segundos" )

Romildo Junior
+55 83 99951.9991
Bacharel em Cincias das Computao(Unip)
Especialista em Engenharia de Software(Estcio)
Arquiteto de Software Totvs-Pb
jose.romildo@totvs.com.br

Obrigado ;)

You might also like