a biblia do advpl.doc

Upload: cesar-vasconcellos

Post on 10-Feb-2018

236 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    1/342

    A Tecnologia Protheus

    O Advanced Protheus uma nova tecnologia desenvolvida sobre o sistema Advanced, que teve todaa inteligncia dividida em duas camadas: Servidor de Aplicao (Protheus Server e !nter"ace (#emote$Ou se%a, uma aplicao &' bits que se encarrega do gerenciamento das cone)es, da eecuo do c*digoAdvPl e do acesso aos recursos de banco de dados (A+S, trieve, -.ree ou .op-onnect, e uma aplicao

    thin/client que e"etua apenas a inter"ace com o usu0rio$

    Caractersticas da Tecnologia ProtheusAs principais caracter1sticas da tecnologia Protheus so:

    Possibilidade de grande variao de topologias de rede e processamento distribu1do

    aio tr0"ego de rede entre o AP2 Server e o AP2 #emote

    3tili4ao de con"igura)es, possibilitando o uso de cone)es simult5neas atravs de protocolosdi"erentes e o acesso a di"erentes reposit*rios de APO6s e diret*rios (o que permite o uso dedi"erentes idiomas, vers)es, etc, acessando a mesma base de dados

    +i"erentes possibilidades de impresso de relat*rios$ 7o Advanced Protheus pode/se imprimir osrelat*rios de trs "ormas:

    8$ 9m disco

    '$ ia ;indo

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    2/342

    O Advanced Protheus dividido em quatro camadas para a operao so elas:

    Servidor de Aplicao

    .erminal .hin/-lient

    +ados

    #eposit*rio de APOCs

    Servidor de Aplicao

    O Protheus Server a aplicao encarregada da compilao e da eecuo do c*digo em AdvPl, no qual osistema Siga Advanced est0 escrito a partir da verso 2$DE$ 7a linguagem AdvPl, as rotinas so mantidas emAPO6s (Advanced Protheus Ob%ects individuais em reposit*rios$ !sso permite que as rotinas se%amcarregadasFdescarregadas dinamicamente da mem*ria da m0quina onde o Protheus Server est0 sendoeecutado, ou se%a, de acordo com a necessidade de eecuo dos .erminais conectados, e "acilita aatuali4ao ap*s corre)es de no/con"ormidades ou criao de melhorias, pois apenas os APO6s modi"icadosnecessitam ser atuali4ados$ +esse modo, a per"ormance alta e no requer muitos recursos da m0quinapara a eecuo do servidor$

    Terminal Thin-Client

    O #emote a aplicao encarregada da inter"ace com o usu0rio$ 7o eiste processamento local,por isso o tr0"ego de rede entre o .erminal e o Servidor de Aplicao baio, tratando/se apenas decomandos para o desenho das telas e do tratamento do teclado e mouse$

    Dados

    O acesso aos dados e"etuado pelo Servidor de Aplicao utili4ando as seguintes bases de dados:A+S, .rieve, -.ree e .op-onnect (para padro SG$ Para bases de dados SG, eiste total suporte aStored Procedures$ 7o Protheus, todas as bases de dados tm suporte a controle de transao$

    Repositrio de Apos

    9 no reposit*rio que se encontram os programas escritos em AdvPl que sero carregados para aeecuo de determinada tare"a$ H atravs do reposit*rio de ApoIs que pode/se incluir novas customi4a)esno sistema$

    struturao

    A estrutura de diretrios do Advanced Protheus

    A estrutura de diret*rios do Advanced Protheus depende da verso instalada$

    !erso AP"

    @ap2@ +iret*rio inicial do Protheus$ H a partir deste diret*rio que o sistema ir0 locali4ar oscaminhos in"ormados em par5metros, customi4a)es, etc$

    @ap2@apo@ +iret*rio onde sero locali4ados os arquivos de reposit*rio de APOCs$

    @ap2@bin@ +iret*rio onde so locali4ados os arquivos do nJcleo do Protheus: eecut0veis, bibliotecasde carga din5mica (+GGCs e arquivos de con"igurao do sistema$

    @ap2@sigaadv@ Similar ao @S!KAA+@ das vers)es Advanced '$DFL$D$ H o diret*rio onde se encontramos arquivos de con"igurao do sistema 9#P Advanced, arquivos de menus, etc$ H tambmo diret*rio inicial de eecuo no #emote$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    3/342

    @ap2@dadosadv@ Similar ao @+A+OSA+@ das vers)es Advanced '$DFL$D$ H o diret*rio onde se locali4amos arquivos de base de dados para vers)es no SG$

    @ap2@relato@ Similar ao @#9GA.O@ das vers)es Advanced '$DFL$D$ +iret*rio para gravao de arquivosde impresso em disco$

    @ap2@cprova@ Similar ao @-P#OA@ das vers)es Advanced '$DFL$D$ +iret*rio para gravao dearquivos de contabili4ao$

    @ap2@ibpad@ +iret*rio de locali4ao de programas de eemplo escritos em AdvPl, nos padr)es

    de"inidos pela Microsiga So"t

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    4/342

    $D

    .rata/se do ambiente de desenvolvimento integrado do Advanced Protheus$ H atravs desteaplicativo que todos os acessos aos reposit*rios de ApoIs (compilao de customi4a)es, visuali4ao de"un)es eistentes etc$ so e"etuados, e tambm a "erramenta para desenvolvimento e depurao deaplica)esFcustomi4a)es$ O nome do eecut0vel depende da verso utili4ada, por eemplo: AP2!+9$9B9 ouAP!+9$9B9$

    %onitor

    9sta "erramenta permite a interao com os usu0rios conectados ao sistema: Analisar os programasem uso, derrubar cone)es pendentes, enviar mensagens ao usu0rios etc$ O nome do eecut0vel dependeda verso utili4ada, por eemplo: AP2MO7!.$9B9 ou APMO7!.$9B9

    Alem destas aplica)es, o Siga Advanced Protheus conta ainda com outros utilit0rios diversos,

    como o +i"" (utili4ado para comparao de arquivos teto e +ump (utili4ado para edio dearquivos bin0rios$

    &omenclaturas 'tili(adas

    9stas so as principais nomeclaturas utili4adas no Advanced Protheus:

    Build: erso completa do sistema com seus eecut0veis, +llIs e #PO completo$ O build do sistema podeser identi"icado atravs da opo Miscelneas | Sobredentro dos m*dulos do sistema$

    RPO: H o arquivo bin0rio de reposit*rio de APOIs, com o c*digo AdvPl$

    Patch: Arquivo bin0rio semelhante ao reposit*rio contendo apenas atuali4a)es de APOIs, corre)esdisponibili4adas pela Microsiga So"t.Pdo Protheus$

    A de"inio dos nomes dos arquivos dos reposit*rios de APO6s e PatchCs seguem o mesmo padro

    (di"erenciando/se apenas na etenso Patch$PA. e reposit*rio#PO e e"etuada da seguintemaneira AP8'&L2$#PO:

    8 Q (+b", (.op, (Ads, (trieve, (-.reeR

    ' Q (Portuguese, (9nglish, (SpanishR

    & Q ersoR

    L Q ersoR

    2 Q ersoR

    Por eemplo, APPD$#PO ser0 um reposit*rio de APO6s para base de dados .rieve, idiomaPortugus e verso D$

    +evido = sua diviso em camadas, a tecnologia Protheus permite montar o ambiente de eecuocom di"erentes topologias, priori4ando a eecuo, o tr0"ego de rede ou os recursos individuais dasm0quinas eistentes, o que torna o processamento distribu1do$ 9ssa uma das grandes vantagens datecnologia Protheus$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    5/342

    Caractersticas e Possi)ilidades de Topologias de Rede

    Pode/se manter um ou mais servidores de aplicao do Protheus (Protheus Server$

    3m Protheus Server pode estar na mesma m0quina que o gerenciador de banco de dados$

    M0quinas melhores ou com mais recursos podem ter um Protheus Server sendo eecutadolocalmente (na estao visando priori4ar o processamento local$ Porm h0 um aumento do tr0"ego

    de rede entre o gerenciador de banco de dados e o Protheus Server local$

    +o mesmo modo, pode/se eecutar servidores remotamente priori4ando o processamento de umaou mais esta)es$

    3tili4ao do protocolo .-P/!P para as cone)es$ 7a verso AP2 pode/se utili4ar tambm oprotocolo 7AM9+ P!P9S$

    Pode/se disponibili4ar cone)es via !nternet atravs da montagem de um ;eb Server na empresaou atravs de provedores de acesso (como a 3OG e o TAT$ 7este caso, o Protheus Server pode sereecutado no provedor ou na empresa utili4ando uma GP para a coneo ao provedor de acesso$

    A !nternet utili4ada apenas como o meio de comunicao, ou se%a, a coneo .-P/!P entre o#emote e o Protheus Server$ Alm da segurana o"erecida pelo sistema Advanced, a segurana

    dever0 ser o"erecida pela coneo$ Por isso, aconselh0vel que a m0quina onde o servidor ;ebeste%a sendo eecutado no se%a o mesmo do servidor da banco de dados$

    O Protheus Server tambm pode ser eecutado como um servidor !nternet, N..P eFou >.P$

    Pode/se manter uma p0gina para o do.P$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    6/342

    A de"inio da melhor topologia para eecuo um passo importante da implementao datecnologia Protheus, pois in"luenciar0 totalmente na per"ormance$ O maior tr0"ego de rede est0locali4ado entre o Protheus Server e o anco de +ados, %0 que o tr0"ego entre o Protheus Server eo #emote limita/se =s in"orma)es para montagem de telas e controle de teclado e mouse$ +esta"orma, dependendo do tipo e da velocidade da coneo, pode se tornar invi0vel manter umProtheus Server em uma cidade conectado ao banco de dados em outra$ Por outro lado, casoeistam muitas cone)es nesta outra cidade, ou caso estas cone)es eecutem processamentospesados, priori4ar o processamento disponibili4ando um Protheus Server para ser eecutadolocalmente nesta cidade pode ser uma boa soluo$

    *alanceamento de Carga entre Servidores +,oad*alance

    $ntroduo

    uando eiste uma grande quantidade de usu0rios queutili4am o sistema e o servidor no possui umacon"igurao ideal para comportar todos, mas h0 mais deum servidor dispon1vel, pode/se con"igurar um esquemade balanceamento de carga para que nenhum servidor

    "ique sobrecarregado e comprometa assim o desempenhoda rede e do servidor$

    Para que isto se%a poss1vel, UnomeamosV um servidorintitulado de Uservidor MasterV que ser0 o respons0vel poradministrar o balanceamento, alm de comportarcone)es tambm$

    O balanceamento "eito por proporo, ou se%a, setivermos D usu0rios e de"inirmos que o servidor Masterter0 8D cone)es, o servidor Server' 'D e o servidorServer& &D, a proporo aqui de 8:':&, ou se%a, a cada 8 usu0rio UpenduradoV no servidor Master, 'entraro no Server' e & no Server&$ >icaria assim:

    # Usurio ServidorD8 Woo Master

    D' Xarla Server'D& Paulo Server'DL M0rio Server&D2 Xarina Server&D +aniel Server&DE #osana Master

    Con.igurando o Servidor %aster

    O Jnico Uap2srv$iniV que ser0 alterado com as con"igura)es abaio o do servidor master, pois ele quemadministrar0 o balanceamento de carga$ Todos os usurios se conectaro inicialmente ao servidorMaster, e este quem e"etuar0 o balanceamento de carga para os outros servidores$ 7os UiniIsV dos outrosservidores ser0 alterado apenas o par5metro UrootpathV, para que eles peguem a mesma base de dados doservidor master$ As se)es que devem ser alteradas so estas abaio:

    Server!et"or$ServersMaster,Server',Server& aqui deve ser in"ormado o nome das se)es para cada servidor, que sero con"iguradas abaio$

    Master$.YP9.-P!PServerS!KAMAS.9# o nome indicado no par5metro Server nesta seo o nome do servidor$ Pode/se indicar tambm o

    endereo !P do mesmo$-onnections8D

    %ASTR

    +Server/

    Server

    2

    Server3

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    7/342

    Server%$.YP9.-P!PServerS!KAS9#9#'-onnections'D

    Server&$.YP9.-P!PServerS!KAS9#9#&

    -onnections&DCon.igurao dos outros Servidores

    -omo %0 "oi citado acima, nos demais servidores a Jnica coisa que ser0 alterada o par5metro UrootpathV doarquivo Uap2srv$iniV$ Para isso, o diret*rio/ra14 AP2 do servidor Master dever0 ser compartilhado com direitosapenas para um usu0rio que ser0 usado por todos os servios$ Assim, os outros usu0rios no conseguiroacesso a este diret*rio$ !sto necess0rio para que todos os servidores energuem a mesma base de dados$Supondo que a base de dados este%a no servidor Master, os iniIs "icariam assim:

    'nvironment$SourcePath-:@AP2@APO

    RootPath011S$2A%ASTR1AP"

    ve%a que o rai4 est0 sendo apontado para o servidor Master$StartPath@S!KAA+@

    (demais con"igura)es continuam iguais

    3)serva4es

    -ada servidor dever0 ter o seu build e reposit*rio, sendo que a base de dados "ica centrali4ada noservidor Master ou no servidor de banco de dados$

    uando "or "eita qualquer atuali4ao de build e reposit*rio no servidor Master, a mesma alteraodever0 ser "eita nos outros servidores$

    3m mesmo usu0rio ;indo

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    8/342

    di"erentemente do antigo #+MAX9, no mais uma linguagem interpretada$ Por isso, aper"ormance das rotinas espec1"icas de4 ve4es maior do que era nos #+MAX9s antigos$

    '$ Monta+em do -rupo de Pro.etos$ O Krupo de Pro%etos um gerenciador eistente dentro do!+9, onde o usu0rio pode manter os arquivos de c*digo separados por pro%etos e pastas$ -omum grupo de pro%etos os arquivos podem ser organi4ados de uma "orma l*gica, em pro%etos epastas$

    &$ (ompila)o$ +urante a compilao, os arquivos so enviados ao Protheus Server$ .oda acompilao e a gravao no reposit*rio so e"etuadas no servidor$

    L$ /epura)o$ O !+9 permite aos usu0rios depurar as rotinas criadas, eecutando/as linha a linhaou em modo de animao$ Permite visuali4ar in"orma)es como vari0veis em di"erentes escopos,pilha de chamadas, lista de breaZ points, etc$ 9atamente como as melhores "erramentas dedesenvolvimento eistentes no mercado$ 7o !+9 pode/se depurar pontos de entradasimplesmente colocando/se um ponto de parada (breaZ point em uma linha qualquer do c*digodo ponto de entradaR

    %onitor

    O Monitor utili4ado para monitorar as cone)es de terminais ao Protheus Server$ Atravs dele pode/se:

    eri"icar as cone)es ativas$

    9nviar mensagens para uma ou mais cone)es$

    +esabilitar novas cone)es$ !sto Jtil quando se precisa e"etuar alguma manuteno e se precisaevitar que outros usu0rios se conectem$

    $n.orma4es *5sicas das Cone64es

    3su0rio$ H o nome do usu0rio na rede local$ Para cone)es remotas este nome est0 em branco$

    -omputador$ 7ome da m0quina onde o #emote est0 sendo eecutado$

    -oneo$ !ndica a data e hora de in1cio da coneo do #emote$

    .empo de 3so$ !ndica o tempo em horas, minutos e segundos desde que o #emote se conectou$

    Programa !nicial$ H o nome do programa inicial (APO com o qual o #emote iniciou a eecuo$

    9nvironment$ 7ome do ambiente sendo utili4ado pelo terminal$

    *trieve

    $n.orma4es *5sicas

    Para manipulao de tabelas trieve o driver utili4ado ?.-+B?R

    Para programar algo espec1"ico para o trieve pode/se utili4ar o teste ?[i"de" .?R

    A etenso padro das tabelas ?$dat?R

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    9/342

    Os 1ndices so criados no mesmo arquivo de dados (?$dat?R

    As manipula)es e visuali4a)es de dados devem ser "eitas atravs do ?APSdu?, pois as antigas"erramentas so incompat1veisR

    O trieve verso $82 no precisa ser instalado, pois as +GGs necess0rias so disponibili4adas %untocom o Protheus$ Os arquivos necess0rios "icam no diret*rio ?!7? (>Cs compat1veis com outras "erramentas que manipulam arquivos btrieve,inclusive -r_stal #eports, eistem duas "un)es para criar os arquivos necess0rios: \]^..ablese \]^.-reate++>sR

    Con.igurao do *trieve7PervasiveS8,9:::;

    Para con"igurar o trieve Server deve/se eecutar os seguintes passos:

    8$ .erminar a eecuo do Protheus e parar o servio

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    10/342

    Active -lients :8DDDD

    Gogical >ile Nandles :8DDDDD

    Ma+atabases: 8D

    Maimum Open >iles: 8DDDD

    7umber o" Sessions: 'D

    Pasta -ommunication u""er Si4e:

    -ommunication u""er Si4e : &

    MX+9 -ommunication u""er Si4e: &

    #ead u""er Si4e: L

    Pasta +ata !ntegrit_:

    8D$ !nitiation .ime Gimit: 8DDDDD

    88$ Operation undle Gimit: 8DDDD

    Pasta Memor_ usage:

    Allocate #esource at Startup: On

    acZ to Minimal State i" !nactive: On

    9tended Operation u""er Si4e: 8

    S_stem -ache: On

    Pasta Per"ormance .unning:

    -ache Allocation Si4e: `/ 8&8DE' (m1nimo de 8'DDD

    -ommunications .hreads : L

    !nde alancing: O""

    Gargest -ompressed #ecord Si4e: D

    Gog u""er Si4e: L

    7umber o" !nputF Output .hreads : L

    7umber o" ;orZer .hreads: L

    .ransaction Gog Si4e: 28'

    Obs: O -ache Allocation Si4e aloca mem*ria do servidor para uso do banco de dados$uanto mais mem*ria, mais r0pidas so eecutadas as opera)es$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    11/342

    A verso $82 possui uma limitao: Se dois servidores 7.L estiverem acessando o mesmo

    arquivo, ocorrer0 lentido na rede$ !sso acontece se "or utili4ado o mesmo #PO (que um arquivobtrieve para dois servidores no AP2$ A soluo sempre replicar os reposit*rios em cada servidorou adquirir (deve ser comprado a verso a partir da PervasiveSG'DDD$ 9m m0quinas ;in'DDD,no nem mesmo poss1vel abrir um arquivo btrieve de dois servidores$ 9ste problema deconhecimento da Pervasive, mas no ser0 alterado porque esta verso "oi descontinuada por volta

    de agosto de 'DD8$

    CTree

    $n.orma4es *5sicas

    Para manipulao de tabelas -tree o driver utili4ado U-.#99-+BVR

    Para programar algo espec1"ico para o -tree pode/se utili4ar o teste U[i"de" -.#99VR

    A etenso padro das tabelas U$dtcV$ uando o Gocal>ile estiver utili4ando o banco -tree os SBscontinuam tendo como padro a etenso U$db"V, mas as tabelas criadas (SB8D$+>,

    SB'D$+>, etc so -tree$ Portanto recomenda/se que se con"igure outra etenso padro paraarquivos locais do tipo -tree atravs da chave UGocal+b9tensionV no arquivo Uapsrv$iniV como

    U$dtcVR

    As manipula)es e visuali4a)es de dados devem ser "eitas atravs do UAPSduV, pois as antigas"erramentas so incompat1veisR

    O -tree no precisa ser instalado, pois sua biblioteca gerada %unto com o ProtheusR

    Os campos do tipo memo devem ser os Jltimos da tabela, por isso na hora da sua criao oProtheus automaticamente desloca/os para o "inal e mostra uma mensagem de avisoR

    As tabelas geradas pelo -tree so totalmente compat1veis entre as plata"ormas ;indo

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    12/342

    Uind8r$indV$ 9ste tipo de 1ndice no possui de"inio arma4enada no arquivo da tabela, por sertempor0rio$

    Sistemas 3peracionais e Plata.ormas +verso AP# eposteriores

    Sistemas 3peracionais e Plata.ormas

    O Protheus Server "oi desenvolvido em A7S! -`` e, portanto, independe de AP!6s especi"icas para "uncionar$Kraas a isso, o nJcleo do Protheus pode ser recompilado em todos os sistemas operacionais e plata"ormasque suportem A7S! -``$

    Outra preocupao durante o desenvolvimento do Protheus "oi garantir total compatibilidade dos reposit*riosde ob%etos do Protheus (#PO6s e das corre)es dos reposit*rios (Patch6s entre os sistemas operacionais eplata"ormas$

    Plata.ormas e S3=s suportados

    ;indooi ento criada a linguagem chamada

    Advanced Protheus Language$

    O AdvPl uma etenso do padro ase de comandos e "un)es, operadores, estruturas de controle de

    "luo e palavras reservadas, contando tambm com "un)es e comandos disponibili4ados pela Microsiga quea torna uma linguagem completa para a criao de aplica)es 9#P prontas para a !nternet$ .ambm umalinguagem orientada a ob%etos e eventos, permitindo ao programador desenvolver aplica)es visuais e criarsuas pr*prias classes de ob%etos$

    uando compilados, todos os arquivos de c*digo tornam/se unidades de inteligncia b0sicas, chamados APOCs (de Advanced Protheus Objects)$ .ais APOCs so mantidos em um reposit*rio e carregadosdinamicamente pelo AP Server para a eecuo$ -omo no eiste a linZedio, ou unio "1sica do c*digocompilado a um determinado m*dulo ou aplicao, "un)es criadas em AdvPl podem ser eecutadas emqualquer ponto do ambiente Advanced Protheus$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    13/342

    O compilador e o interpretador da linguagem AdvPl o pr*prio servidor AP (AP Server, e eiste umambiente visual para desenvolvimento integrado (AP !+9 onde o c*digo pode ser criado, compilado edepurado$

    Os programas em AdvPl podem conter comandos ou "un)es de inter"ace com o usu0rio$ +e acordo com talcaracter1stica, tais programas so subdivididos nas seguintes categorias:

    Programao Com $nter.ace Prpria com o 'su5rio7esta categoria entram os programas desenvolvidos para serem eecutados atravs do terminal remoto doProtheus, o AP #emote$ O AP #emote a aplicao encarregada da inter"ace e da interao com ousu0rio, sendo que todo o processamento do c*digo em AdvPl, o acesso ao banco de dados e ogerenciamento de cone)es e"etuado no AP Server$ O AP #emote o principal meio de acesso aeecuo de rotinas escritas em AdvPl no AP Server, e por isso permite eecutar qualquer tipo de c*digo,tenha ele inter"ace com o usu0rio ou no$ Porm nesta categoria so considerados apenas os programas quereali4em algum tipo de inter"ace remota utili4ando o protocolo de comunicao do Protheus$

    Pode/se criar rotinas para a customi4ao do sistema 9#P Advanced Protheus, desde processos adicionaisat mesmo relat*rios$ A grande vantagem aproveitar todo o ambiente montado pelos m*dulos do 9#PAdvanced Protheus$ Porm, com o AdvPl poss1vel at mesmo criar toda uma aplicao, ou m*dulo, docomeo$

    .odo o c*digo do sistema 9#P Advanced Protheus escrito em AdvPl$

    Programao Sem $nter.ace Prpria com o 'su5rio

    As rotinas criadas sem inter"ace so consideradas nesta categoria porque geralmente tm uma utili4aomais espec1"ica do que um processo adicional ou um relat*rio novo$ .ais rotinas no tm inter"ace com ousurio atravs do AP #emote, e qualquer tentativa nesse sentido (como a criao de uma %anela padroocasionar0 uma eceo em tempo de eecuo$ 9stas rotinas so apenas processos, ou Wobs, eecutadosno AP Server$ Algumas ve4es, a inter"ace destas rotinas "ica a cargo de aplica)es eternas, desenvolvidasem outras linguagens, que so respons0veis por iniciar os processos no servidor AP atravs dos meiosdispon1veis de integrao e conectividade no Protheus$

    +e acordo com a utili4ao e com o meio de conectividade utili4ado, estas rotinas so subcategori4adasassim:

    Programao por Processos

    #otinas escritas em AdvPl podem ser iniciadas como processos individuais (sem inter"ace no AP Serveratravs de duas maneiras: !niciadas por outra rotina AdvPl atravs da chamada de "un)es como StartWobou -allProc ou iniciadas automaticamente na iniciali4ao do AP Server (quando propriamente con"igurado$

    Programao de RPC

    Atravs de uma biblioteca de "un)es dispon1vel no Protheus (uma AP! de comunicao, pode/se eecutarrotinas escritas em AdvPl diretamente no AP Server, atravs de aplica)es eternas escritas em outraslinguagens$ !sto o que se chama de RPC (de Remote Procedure Call, ou Chamada de ProcedimentosRemota$

    O servidor Protheus tambm pode eecutar rotinas em AdvPl em outros servidores Protheus atravs deconeo .-PF!P direta utili4ando o conceito de RPC$ +o mesmo modo, aplica)es eternas podem requisitara eecuo de rotinas escritas em AdvPl atravs de coneo .-PF!P direta$

    Programao >e)

    O AP Server pode tambm ser eecutado como um servidor ;eb, respondendo a requisi)es N..P$ 7omomento destas requisi)es, pode eecutar rotinas escritas em AdvPl como processos individuais, enviandoo resultado das "un)es como retorno das requisi)es para o cliente N..P (como por eemplo um ro

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    14/342

    atravs de requisi)es N..P$ O Protheus permite a compilao de arquivos N.MG contendo c*digo AdvPlembutido$ So os chamados arquivos AdvPl ASP, para a criao de p0ginas din5micas$

    Programao Tel&et

    .el7et parte da gama de protocolos .-PF!P que permite a coneo a um computador remoto atravs deuma aplicao cliente deste protocolo$ O AP Server pode emular um terminal .el7et, atravs da eecuo

    de rotinas escritas em AdvPl$ Ou se%a, pode/se escrever rotinas AdvPl cu%a inter"ace "inal ser0 um terminal.el7et ou um coletor de dados m*vel$

    Criao de um Programa

    3m programa de computador nada mais do que um grupo de comandos logicamente dispostos com oob%etivo de eecutar determinada tare"a$ 9sses comandos so gravados em um arquivo teto que trans"ormado em uma linguagem eecut0vel por um computador atravs de um processo chamadocompilao$ A compilao substitui os comandos de alto n1vel (que os humanos compreendem porinstru)es de baio n1vel (compreendida pelo sistema operacional em eecuo no computador$ 7o caso doAdvPl, no o sistema operacional de um computador que ir0 eecutar o c*digo compilado, mas sim o APServer$

    +entro de um programa, os comandos e "un)es utili4ados devem seguir regras de sintae da linguagemutili4ada, pois caso contr0rio o programa ser0 interrompido por erros$ Os erros podem ser de compilao oude eecuo$

    9rros de compilao so aqueles encontrados na sintae que no permitem que o arquivo de c*digo doprograma se%a compilado$ Podem ser comandos especi"icados de "orma errnea, utili4ao inv0lida deoperadores, etc$

    9rros de eecuo so aqueles que acontecem depois da compilao, quando o programa est0 sendoeecutado$ Podem ocorrer por inJmeras ra4)es, mas geralmente se re"erem a "un)es no eistentes, ouvari0veis no criadas ou iniciali4adas, etc$

    ,inhas de Programa

    As linhas eistentes dentro de um arquivo teto de c*digo de programa podem ser linhas de comando,

    linhas de coment0rio ou linhas mistas$

    ,inhas de Comando

    Ginhas de comando possuem os comandos ou instru)es que sero eecutadas$ Por eemplo:

    Gocal n-nt

    Local nSoma := 0For nCnt := 1 To 10

    nSoma += nCntNext nCnt

    ,inhas de Coment5rio

    Ginhas de coment0rio possuem um teto qualquer, mas no so eecutadas$ Servem apenas paradocumentao e para tornar mais "0cil o entendimento do programa$ 9istem trs "ormas de se comentarlinhas de teto$ A primeira delas utili4ar o sinal de (asterisco no comeo da linha:

    * Programa para clculo do total* Autor: Mcro!ga So"t#are S$A$* %ata: & de outu'ro de &001

    .odas as linhas iniciadas com um sinal de asterisco so consideradas como coment0rio$ Pode/se utili4ar apalavra 7O.9 ou dois s1mbolos da letra ?e? comercial ( para reali4ar a "uno do sinal de asterisco$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    15/342

    Porm todas estas "ormas de coment0rio de linhas so obsoletas e eistem apenas para compatibili4aocom o padro ase$ A melhor maneira de comentar linhas em AdvPl utili4ar duas barras transversais:

    FF Programa para c0lculo do total

    (( Autor: Mcro!ga So"t#are S$A$(( %ata: & de outu'ro de &001

    Outra "orma de documentar tetos utili4ar as barras transversais %untamente com o asterisco, podendo/secomentar todo um bloco de teto sem precisar comentar linha a linha:

    F

    Programa para clculo do totalAutor: Mcro!ga So"t#are S$A$%ata: & de outu'ro de &001*(

    .odo o teto encontrado entre a abertura (indicada pelos caracteres F e o "echamento (indicada peloscaracteres F considerado como coment0rio$

    ,inhas %istas

    O AdvPl tambm permite que eistam linhas de comando com coment0rio$ !sto poss1vel inclu1ndo/se asduas barras transversais (FF ao "inal da linha de comando e adicionando/se o teto do coment0rio:

    Gocal n-nt

    Local nSoma := 0 (( )ncala a arel com ero para a !omaFor nCnt := 1 To 10

    nSoma += nCntNext nCnt

    Tamanho da ,inha

    Assim como a linha "1sica, delimitada pela quantidade de caracteres que pode ser digitado no editor detetos utili4ado, eiste uma linha considerada linha l*gica$ A linha l*gica, aquela considerada para acompilao como uma Jnica linha de comando$

    A princ1pio, cada linha digitada no arquivo teto di"erenciada ap*s o pressionamento da tecla \9nter^$ Ouse%a, a linha l*gica, a linha "1sica no arquivo$ Porm algumas ve4es, por limitao "1sica do editor de tetoou por esttica, pode/se ?quebrar? a linha l*gica em mais de uma linha "1sica no arquivo teto$ !sto e"etuado utili4ando/se o sinal de ponto/e/v1rgula (R$

    )" ,-mpt./cNome $And$ ,-mpt./c-nd $And$ 2enter3,-mpt./cTel $And$ ,-mpt./cFax $And$ 2enter3,-mpt./c-mal

    4raa%ado!/cNome5c-nd5cTel5cFax5c-mal

    -nd"

    7este eemplo eiste uma linha de comando para a checagem das vari0veis utili4adas$ -omo a linha torna/se muito grande, pode/se divid1/la em mais de uma linha "1sica utili4ando o sinal de ponto/e/v1rgula$ Se umsinal de ponto/e/v1rgula "or esquecido nas duas primeiras linhas, durante a eecuo do programa ocorrer0um erro, pois a segunda linha "1sica ser0 considerada como uma segunda linha de comando na compilao$ 9durante a eecuo esta linha no ter0 sentido$

    strutura de um Programa

    Apesar de no ser uma linguagem de padr)es r1gidos com relao = estrutura do programa, importanteidenti"icar algumas de suas partes$ -onsidere o programa de eemplo abaio:

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    16/342

    F

    +===========================================+6 Programa: Clculo do Fatoral 66 Autor : Mcro!ga So"t#are S$A$ 66 %ata : 0& de outu'ro de &001 6+===========================================+*(

    Local nCntLocal n7e!ultado := 1 (( 7e!ultado do "atoralLocal nFator := 8 (( N9mero para o clculo(( Clculo do "atoralFor nCnt := nFator To 1 Step 1

    n7e!ultado *= nCntNext nCnt(( -x'e o re!ultado na tela5 atra;! da "un? "atoral de > + c@alToCar/nFator + > ; > + c@alToCar/n7e!ultado(( Termna o programa7eturn

    Pode/se classi"icar um programa em AdvPl em quatro partes b0sicas:

    8$ rea de !denti"icao

    '$ rea de A%ustes !niciais

    &$ -orpo do Programa

    L$ rea de 9ncerramento

    A ?rea de $denti.icao

    9sta uma 0rea que no obrigat*ria e dedicada a documentao do programa$ uando eistente,contm apenas coment0rios eplicando a sua "inalidade, data de criao, autor, etc, e aparece no comeo doprograma, antes de qualquer linha de comando$

    O "ormato para esta 0rea no de"inido$ Pode/se colocar qualquer tipo de in"ormao dese%ada e escolher a"ormatao apropriada$

    F

    +==========================================+6 Programa: Clculo do Fatoral 66 Autor : Mcro!ga So"t#are S$A$ 66 %ata : 0& de outu'ro de &001 6+==========================================+*(

    Opcionalmente pode/se incluir de"ini)es de constantes utili4adas no programa ou incluso de arquivos de

    cabealho nesta 0rea$

    A ?rea de A@ustes $niciais

    7esta 0rea geralmente se "a4em os a%ustes iniciais, importantes para o correto "uncionamento do programa$9ntre os a%ustes se encontram declara)es de vari0veis, iniciali4a)es, abertura de arquivos, etc$ Apesar doAdvPl no ser uma linguagem r1gida e as vari0veis poderem ser declaradas em qualquer lugar do programa, aconselh0vel "a4/lo nesta 0rea visando tornar o c*digo mais leg1vel e "acilitar a identi"icao de vari0veisno utili4adas$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    17/342

    Local nCntLocal n7e!ultado := 0 (( 7e!ultado do "atoralLocal nFator := 10 (( N9mero para o clculo

    3 Corpo do Programa

    H nesta 0rea que se encontram as linhas de c*digo do programa$ H onde se reali4a a tare"a necess0riaatravs da organi4ao l*gica destas linhas de comando$ 9spera/se que as linhas de comando este%amorgani4adas de tal modo que no "inal desta 0rea o resultado esperado se%a obtido, se%a ele arma4enado emum arquivo ou em vari0veis de mem*ria, pronto para ser eibido ao usu0rio atravs de um relat*rio ou natela$

    (( Clculo do "atoralFor nCnt := nFator To 1 Step 1

    n7e!ultado *= nCntNext nCnt

    A ?rea de ncerramento

    H nesta 0rea onde as "inali4a)es so e"etuadas$ H onde os arquivos abertos so "echados, e o resultado daeecuo do programa utili4ado$ Pode/se eibir o resultado arma4enado em uma vari0vel ou em um

    arquivo ou simplesmente "inali4ar, caso a tare"a %0 tenha sido toda completada no corpo do programa$ Hnesta 0rea que se encontra o encerramento do programa$ .odo programa em AdvPl deve sempre terminarcom a palavra chave return$

    (( -x'e o re!ultado na tela5 atra;! da "un? "atoral de > + c@alToCar/nFator + > ; > + c@alToCar/n7e!ultado(( Termna o programa7eturn

    Tipos de Dados

    O AdvPl no uma linguagem de tipos r1gidos (strongl_ t_ped, o que signi"ica que vari0veis de mem*ria

    podem receber di"erentes tipos de dados durante a eecuo do programa$ ari0veis podem tambm conterob%etos, mas os tipos prim0rios da linguagem so:

    &umrico

    O AdvPl no di"erencia valores inteiros de valores com ponto "lutuante, portanto pode/se criar vari0veisnumricas com qualquer valor dentro do intervalo permitido$ Os seguintes elementos so do tipo de dadonumrico:

    &B$80$80$00001

    1000000

    3ma vari0vel do tipo de dado numrico pode conter um nJmero de de4oito d1gitos incluindo o ponto"lutuante, no intervalo de '$''2DE&22DE'D8L 9Q&D at 8$EE&8&L'&82 9`&D$

    ,gico

    alores l*gicos em AdvPl so identi"icados atravs de $.$ ou $Y$ para verdadeiro e $>$ ou $7$ para "also(independentemente se os caracteres estiverem em maiJsculo ou minJsculo$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    18/342

    Caracter

    Strings ou cadeias de caracteres so identi"icadas em AdvPl por blocos de teto entre aspas duplas (? ouaspas simples (6:

    >?l mundo,>D-!ta ; uma !trngD

    >-!ta ; DoutraD !trng>

    3ma vari0vel do tipo caracter pode conter strings com no m0imo 8 Mb, ou se%a, 8DL2E caracteres$

    Data

    O AdvPl tem um tipo de dados espec1"ico para datas$ !nternamente as vari0veis deste tipo de dado soarma4enadas como um nJmero correspondente a data Juliana$

    ari0veis do tipo de dados +ata no podem ser declaradas diretamente, e sim atravs da utili4ao de"un)es espec1"icas como por eemplo ctod que converte uma string para data$

    %atri( +ArraBMatri4es so um tipo de dado especial$ H a disposio de outros elementos em colunas e linhas$ O AdvPlsuporta matri4es uni ou multidimensionais$ Os elementos de uma matri4 so acessados atravs de 1ndicesnumricos iniciados em 8, identi"icando a linha e coluna para quantas dimen)es eistirem$

    3ma matri4 pode conter no m0imo 8DDDDD elementos, independentemente do nJmero de dimens)es$

    Matri4es devem ser utili4adas com cautela, pois se "orem muito grandes podem eaurir a mem*ria doservidor$

    *loco de Cdigo

    O bloco de c*digo um tipo de dado especial$ H utili4ado para arma4enar instru)es escritas em AdvPl que

    podero ser eecutadas posteriormente$

    Criao e Atribuio de Variveis

    Criao e Atri)uio de !ari5veis

    ari0veis de mem*ria so um dos recursos mais importantes de uma linguagem$ So 0reas de mem*riacriadas para arma4enar in"orma)es utili4adas por um programa para a eecuo de tare"as$ Por eemplo,quando o usu0rio digita uma in"ormao qualquer, como o nome de um produto, em uma tela de umprograma esta in"ormao arma4enada em uma vari0vel de mem*ria para posteriormente ser gravada ouimpressa$

    A partir do momento que uma vari0vel criada, no necess0rio mais se re"erenciar ao seu conteJdo, e simao seu nome$ O nome de uma vari0vel um identi"icador Jnico que segue duas regras regras:

    M0imo de 12 caracteres$ O AdvPl no impede a criao de uma vari0vel de mem*ria cu%o nome contenhamais de 8D caracteres, porm apenas os 10 primeiros sero considerados para a locali4ao doconteJdo arma4enado$ Portanto se "orem criadas duas vari0veis cu%os 8D primeiros caracteres "orem iguais,como n.otalKeralAnual e n.otalKeralMensal, as re"erncias a qualquer uma delas no programa resultaro omesmo$ Ou se%a, sero a mesma vari0vel:

    nTotal4eralMen!al := 100nTotal4eralAnual := 00Alert/>@alor men!al: > + c@alToCar/nTotal4eralMen!al

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    19/342

    uando o conteJdo da vari0vel n.otalKeralMensal eibido, o seu valor ser0 de &DD$ !sso acontece porqueno momento que esse valor "oi atribuido = vari0vel n.otalKeralAnual, o AdvPl considerou apenas os 8Dprimeiros caracteres (assim como o "a4 quando deve eibir o valor da vari0vel n.otalKeralMensal, ou se%a,considerou/as como a mesma vari0vel$ Assim o valor original de 8DD "oi substituido pelo de &DD$

    3imita)o de caracteres no nome$ Os nomes das vari0veis devem sempre comear por uma letra ou o

    caracter de sublinhado ( f $ 7o restante, pode conter letras, nJmeros e o caracter de sublinhado$ ualqueroutro caracter, incluindo espaos em branco, no so permitidos$

    O AdvPl permite a criao ilimitada de vari0veis, dependendo apenas da mem*ria dispon1vel$ A seguir estoalguns nomes v0lidos para vari0veis:

    T?T01cNumero@A7EGALG-7MECA74?A11

    9 alguns inv0lidos:

    1C?%)4? /)nca por um n9meroM CA74? /cont;m um e!pa

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    20/342

    Local nPercentual := 105 n7e!ultadon7e!ultado := &80 * /1 + /nPercentual ( 100

    A di"erena entre o Jltimo eemplo e os dois anteriores que a vari0vel iniciali4ada no momento dadeclarao$ 7os dois primeiros eemplos, a vari0vel primeiro declarada e ento iniciali4ada em uma outralinha de c*digo$ O comando store eiste apenas por compatibilidade com vers)es anteriores e outraslinguagens ase, mas obsoleto$ +eve/se utili4ar o operador de atribuio (: ou somente $ H

    aconselh0vel optar pelo operador de atribuio composto de dois pontos e sinal de igual, pois o operador deatribuio utili4ando somente o sinal de igual pode ser "acilmente con"undido com o operador relacional(para comparao durante a criao do programa$

    3ma ve4 que um valor lhe se%a atribu1do, o tipo de dado de uma vari0vel igual ao tipo de dado do valoratribu1do$ Ou se%a, uma vari0vel passa a ser numrica se um nJmero lhe atribu1do, passa a ser caracter seuma string de teto lhe "or atribu1da, etc$ Porm mesmo que uma vari0vel se%a de determinado tipo dedado, pode/se mudar o tipo da vari0vel atribuindo outro tipo a ela:

    01 Local x@arael (( %eclara a arel ncalmente com alor nulo0&0 x@arael := >Agora a arel ; caracter$$$>0B Alert/>@alor do Texto: > + x@arael080H x@arael := && (( Agora a arel ; num;rca0I Alert/c@alToCar/x@arael0J0K x@arael := $T$ (( Agora a arel ; lgca10 )" x@arael11 Alert/>A arel tem alor erdadero$$$>1& -l!e1 Alert/>A arel tem alor "al!o$$$>1B -nd"181H x@arael := %ate/ (( Agora a arel ; data1I Alert/>oe ;: > + %toC/x@arael1J1K x@arael := nl (( Nulo noamente&0 Alert/>@alor nulo: > + x@arael&1&& 7eturn

    7o programa de eemplo anterior, a vari0vel ariavel utili4ada para arma4enar diversos tipos de dados$ Aletra ?? em minJsculo no comeo do nome utili4ada para indicar uma vari0vel que pode conter diversostipos de dados, segundo a 7otao NJngara (consulte documentao espec1"ica para detalhes$ 9steprograma troca os valores da vari0vel e eibe seu conteJdo para o usu0rio atravs da "uno alert$ 9ssa"uno recebe um par5metro que deve ser do tipo string de caracter, por isso dependendo do tipo de dadoda vari0vel ariavel necess0rio "a4er uma converso antes$

    Apesar dessa "leibilidade de utili4ao de vari0veis, deve/se tomar cuidados na passagem de par5metrospara "un)es ou comandos, e na concatenao (ou soma de valores$ 7ote a linha 'D do programa deeemplo$ uando esta linha eecutada, a vari0vel ariavel contem o valor nulo$ A tentativa de soma detipos de dados di"erentes gera erro de eecuo do programa$ 7esta linha do eemplo, ocorrer0 um errocom a mensagem ?t_pe mismatch on `?$ 9cetuando/se o caso do valor nulo, para os demais deve/sesempre utili4ar "un)es de converso quando necessita/se concatenar tipos de dados di"erentes (poreemplo, nas linhas DE e 8E$

    7ote tambm que quando uma vari0vel do tipo de dado l*gico, ela pode ser utili4ada diretamente parachecagem (linha 8D:

    !" ariavel

    o mesmo que

    !" ariavel $.$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    21/342

    A declarao de vari0veis para os demais tipos de dados, matri4es e blocos de c*digo, eatamente igual aodescrito at agora$ Apenas eistem algumas di"erenas quanto a iniciali4ao, que podem ser consultadas nadocumentao de inicializao de matrizeseblocos de cdigo$

    Escopo de Variveis

    Operadores da Linguagem

    Estruturas de Controle

    %atri(es

    Matri4es, ou arra_s, so cole)es de valores$ Ou, de uma maneira mais "0cil de entender, uma lista$ 3mamatri4 pode ser criada atravs de di"erentes maneiras$ -onsulte a documentao sobre Inicializao deatrizespara maiores detalhes$

    -ada item em uma matri4 re"erenciado pela indicao de sua posio numrica na lista, iniciando pelonJmero 8$ O eemplo a seguir declara uma vari0vel, atribui uma matri4 de trs elementos a ela, e entoeibe um dos elementos e o tamanho da matri4:

    Gocal aGetras FF +eclarao da vari0vel

    aGetras : ?A?, ??, ?-? FF Atribuio da matri4 = vari0vel

    Alert(aGetras'j FF 9ibe o segundo elemento da matri4

    Alert(cal.o-har(Gen(aGetras FF 9ibe o tamanho da matri4

    O AdvPl permite a manipulao de matri4es "acilmente$ 9nquanto que em outras linguagens como - ouPascal necess0rio alocar mem*ria para cada elemento de uma matri4 (o que tornaria a utili4ao de?pointeiros? necess0ria, o AdvPl se encarrega de gerenciar a mem*ria e torna simples adicionar elementos auma matri4, utili4ando a "uno aAdd:

    aAdd(aGetras,?+? FF Adiciona o quarto elemento ao "inal da matri4

    Alert(aGetrasLj FF 9ibe o quarto elemento

    Alert(aGetras2j FF 9rrok 7o h0 um quinto elemento na matri4

    %atri(es como struturas

    3ma caracter1stica interessante do AdvPl que uma matri4 pode conter qualquer coisa: nJmeros, datas,l*gicos, caracteres, ob%etos, etc$ 9 ao mesmo tempo$ 9m outras palavras, os elementos de uma matri4 noprecisam ser necessariamente do mesmo tipo de dado, em contraste com outras linguagens como - ePascal$

    a>unct8 : ?Pedro?,&',$.$

    9sta matri4 contem uma string, um nJmero e um valor l*gico$ 9m outras linguagens como - ou Pascal, este?pacote? de in"orma)es pode ser chamado como um ?struct? (estrutura em -, por eemplo ou um ?record?(registro em Pascal, por eemplo$ -omo se "osse na verdade um registro de um banco de dados, um pacote

    de in"orma)es constru1do com diversos campos$ -ada campo tendo um pedao di"erente de dado$

    Suponha que no eemplo anterior, o arra_ a>unct8 contenha in"orma)es sobre o nome de uma pessoa, suaidade e sua situao matrimonial$ Os seguintes [de"ines podem ser criados para indicar cada posio dosvalores dentro da matri4:

    [de"ine >37-.f7OM9 8

    [de"ine >37-.f!+A+9 '

    [de"ine >37-.f-ASA+O &

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Blocos_de_Codigo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Blocos_de_Codigo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/O_Contexto_de_Variaveis_dentro_de_um_Programa.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Operadores_Comuns.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Blocos_de_Codigo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/O_Contexto_de_Variaveis_dentro_de_um_Programa.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Operadores_Comuns.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    22/342

    9 considere mais algumas matri4es para representar mais pessoas:

    a>unct' : ?Maria? , '', $.$

    a>unct& : ?Antnio?, L', $>$

    Os nomes podem ser impressos assim:

    Alert(a>unct8>37-.f7OM9j

    Alert(a>unct'>37-.f7OM9j

    Alert(a>unct&>37-.f7OM9j

    Agora, ao invs de trabalhar com vari0veis individuais, pode/se agrup0/las em uma outra matri4, do mesmomodo que muitos registros so agrupados em uma tabela de banco de dados:

    a>uncts : a>unct8, a>unct', a>unct&

    ue equivalente a isso:

    a>uncts : ?Pedro? , &', $.$, R

    ?Maria? , '', $.$, R ?Antnio?, L', $>$

    auncts uma matri4 com & linhas por & colunas$ 3ma ve4 que as vari0veis separadas "oram combinadasem uma matri4, os nomes podem ser eibidos assim:

    Gocal n-ount

    >or n-ount : 8 .o Gen(a>uncts

    Alert(a>unctsn-ount,>37-.f7OM9j

    FF O acesso a elementos de uma matri4 multidimensional

    FF pode ser reali4ado tambm desta "orma:

    FF a>unctsn-ountj>37-.f7OM9j

    7et n-ount

    A vari0vel n-ount seleciona que "uncion0rio (ou que linha de interesse$ 9nto a constante >37-.f7OM9seleciona a primeira coluna daquela linha$

    Cuidados com %atri(es

    Matri4es so listas de elementos, portanto mem*ria necess0ria para arma4enar estas in"orma)es$ -omoas matri4es podem ser multidimensionais, a mem*ria necess0ria ser0 a multiplicao do nJmero de itens emcada dimenso da matri4, considerando/se o tamanho do conteJdo de cada elemento contido nesta$Portanto o tamanho de uma matri4 pode variar muito$

    A "acilidade da utili4ao de matri4es, mesmo que para arma4enar in"orma)es em pacotes como descritoanteriormente, no compensada pela utili4ao em mem*ria quando o nJmero de itens em um arra_ "ormuito grande$ uando o nJmero de elementos "or muito grande deve/se procurar outras solu)es, como autili4ao de um arquivo de banco de dados tempor0rio$

    7o h0 limitao para o nJmero de dimens)es que uma matri4 pode ter, mas o nJmero de elementosm0imo (independentes das dimens)es onde se encontram de 8DDDDD$

    Criao e Atribuio de Variveis

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    23/342

    Inicializando atrizes

    !locos de Cdigo

    $niciali(ando %atri(es

    Algumas ve4es o tamanho da matri4 conhecido previamente$ Outras ve4es o tamanho da matri4 s* ser0conhecido em tempo de eecuo$

    Se o tamanho da matri( conhecido

    Se o tamanho da matri4 conhecido no momento que o programa escrito, h0 diversas maneiras deimplementar o c*digo$

    D8 Gocal n-nt

    D' Gocal aB8Dj

    D& Gocal aY : Arra_(8D

    DL Gocal aT : D,D,D,D,D,D,D,D,D,D

    D2

    D >or n-nt : 8 .o 8D

    DE aBn-ntj : n-nt n-nt

    D 7et n-nt

    9ste c*digo preenche a matri4 com uma tabela de quadrados$ Os valores sero 8, L, , 8 $$$ 8, 8DD$ 7oteque a linha DE se re"ere = vari0vel aB, mas poderia tambm trabalhar com aY ou aT$ O ob%etivo desteeemplo demonstrar trs modos de criar uma matri4 de tamanho conhecido no momento da criao doc*digo$

    7a linha D' a matri4 criada usando aB8Dj$ !sto indica ao AdvPl para alocar espao para 8D elementos namatri4$ Os colchetes e j so utili4ados para indicar o tamanho necess0rio$

    7a linha D& utili4ada a "uno arra_ com o par5metro 8D para criar a matri4, e o retorno desta "uno atribu1do = vari0vel aY$

    7a linha D& e"etuado o que se chama ?desenhar a imagen da matri4?$ -omo pode/se notar, eistem de4 DCs na lista encerrada entre chaves ($ -laramente, este mtodo no o utili4ado para criar uma matri4 de8DDD elementos$ O terceiro mtodo di"ere dos anteriores porque iniciali4a a matri4 com os valoresde"initivos$ 7os dois primeiros mtodos, cada posio da matri4 contm um valor nulo (7il e deve seriniciali4ado posteriormente$

    A linha DE demonstra como um valor pode ser atribu1do para uma posio eistente em uma matri4especi"icando o 1ndice entre colchetes$

    Se o tamanho da matri( no conhecidoSe o tamanho da matri4 no conhecido at o momento da eecuo do programa, h0 algumas maneiras decriar uma matri4 e adicionar elementos a ela$ O eemplo a seguir ilustra a idia de criao de uma matri4va4ia (sem nenhum elemento e adio de elementos dinamicamente$

    D8 Gocal n-nt

    D' Gocal aBDj

    D& Gocal aY : Arra_(D

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Blocos_de_Codigo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Inicializando_Matrizes.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Blocos_de_Codigo.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    24/342

    DL Gocal aT :

    D2

    D >or n-nt : 8 .o nSi4e

    DE aAdd(aB,n-ntn-nt

    D 7et n-nt

    A linha D' utili4a os colchetes para criar uma matri4 va4ia$ Apesar de no ter nenhum elemento, seu tipo dedado matri4$

    7a linha D& a chamada da "uno arra_ cria uma matri4 sem nenhum elemento$

    7a linha DL est0 declarada a representao de uma matri4 va4ia em AdvPl$ Mais uma ve4, esto sendoutili4adas as chaves para indicar que o tipo de dados da vari0vel matri4$ 7ote que uma matri4 va4ia(tem o tamanho D, enquanto 7il uma matri4 com um Jnico elemento nulo (tem tamanho 8$

    Porque cada uma destas matri4es no contem elementos, a linha DE utili4a a "uno aadd para adicionarelementos sucessivamente at o tamanho necess0rio (especi"icado por eemplo na vari0vel nSi4e$

    *locos de Cdigolocos de c*digo so um conceito eistente h0 muito tempo em linguagens ase$ 7o como algo queapareceu da noite para o dia, e sim uma evoluo progressiva utili4ando a combinao de muitos conceitosda linguagem para a sua implementao$

    'm Primeiro ,em)rete

    O AdvPl uma linguagem baseada em "un)es$ >un)es tm um valor de retorno$ Assim como o operadorde atribuio :$

    Assim, ao invs de escrever:

    : 8D FF Atribui o valor 8D = vari0vel chamada B

    Alert(?alor de : ? cal.o-har(

    Posde/se escrever:

    FF Atribui e ento eibe o valor da vari0vel B

    Alert(?alor de : ? ` calto-har(B : 8D

    A epresso :8D avaliada primeiro, e ento seu resultado (o valor de B, que agora 8D passada paraa "uno cvaltochar para a converso para caracter, e em seguida para a "uno alert para a eibio$ Porcausa desta regra de precedncia poss1vel atribuir um valor a mais de uma var1avel ao mesmo tempo:

    T : Y : B : D

    Por causa dessa regra, essa epresso avaliada como se "osse escrita assim:

    T : ( Y : (B : D

    Apesar do AdvPl avaliar epress)es da esquerda para a direita, no caso de atribui)es isso acontece aocontr0rio, da direita para a esquerda$ O valor atribu1do = vari0vel B, que retorna o valor para ser atribu1do= vari0vel Y e assim sucessivamente$ Pode/se di4er que o 4ero "oi ?propagado atravs da epresso?$

    3utro ,em)rete

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    25/342

    9m AdvPl pode/se %untar diversas linhas de c*digo em uma Jnica linha "1scia do arquivo$ Por eemplo, oc*digo:

    !" lAchou

    Alert(?-liente encontradok?

    9ndi"

    pode ser escrito assim:

    !" lAchou R Alert(?-liente encontradok? R

    9ndi"

    O ponto/e/v1rgula indica ao AdvPl que a nova linha de c*digo est0 para comear$ Pode/se ento colocardiversas linhas l*gicas de c*digo na mesma linha "1sica atravs do editor de teto utili4ado$

    Apesar da possibilidade de se escrever todo o programa assim, em uma Jnica linha "1sica, isto no

    recomendado pois di"iculta a legibilidade do programa e, conseqentemente, a manuteno$

    ,ista de 6press4es

    A evoluo dos blocos de c*digo comea com as listas de epress)es$ 7os eemplos a seguir, o s1mbolo^ indicar0 o retorno da epresso ap*s sua avaliao (se%a para atribuir em uma vari0vel, eibir para ousu0rio ou imprimir em um relat*rio, que ser0 impresso em um relat*rio por eemplo$

    Duas ,inhas de Cdigo

    ]DD,DD PSAY : 8D ^ 8D

    ]DD,DD PSAY _ : 'D ^ 'D

    -ada uma das linhas ter0 a epresso avaliada, e o valor da vari0vel ser0 ento impresso$

    Duas ,inha de Cdigo em 'ma 'tili(ando Ponto-e-!rgula

    9ste o mesmo c*digo que o anterior, apenas escrito em uma Jnica linha:

    Alert( cal.o-har( : 8D R _ : 'D ^ 8D

    Apesar desse c*digo se encontrar em uma Jnica linha "1sica, eistem duas linhas l*gicas separadas peloponto e v1rgula$ Ou se%a, esse c*digo equivalente a:

    Alert( cal.o-har( : 8D

    _ : 'D

    Portanto apenas o valor 8D da vari0vel ser0 passado para as "un)es cvaltochar e alert para ser eibido$ 9o valor 'D apenas ser0 atribu1do = vari0vel _$

    Convertendo para uma ,ista de 6press4es

    uando parnteses so colocados ao redor do c*digo e o sinal de ponto/e/v1rgula substitu1do por umav1rgula apenas, o c*digo torna/se uma lista de epress)es:

    Alert( cal.o-har ( ( B : 8D , Y : 'D ^ 'D

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    26/342

    O valor de retorno resultante de uma lista de epress)es o valor resultante da Jltima epresso ouelemento da lista$ >unciona como se "osse um pequeno programa ou "uno, que retorna o resultado de suaJltima avaliao (e"etuadas da esquerda para a direita$

    7este eemplo, a epresso : 8D avaliada, e ento a epresso _ : 'D, cu%o valor resultante passado para a "uno alert e cvaltochar, e ento eibido$ +epois que essa linha de c*digo eecutada, ovalor de B igual a 8D e o de _ igual a 'D, e 'D ser0 eibido$

    .eoricamente, no h0 limitao para o nJmero de epress)es que podem ser combinadas em uma lista deepress)es$ 7a pr0tica, o nJmero m0imo por volta de 2DD s1mbolos$

    +ebugar listas de epress)es di"1cil porque as epress)es no esto divididas em linhas de c*digo "onte, oque torna todas as epress)es associadas a uma mesma linha de c*digo$ !sto pode tornar muito di"1cildeterminar onde um erro ocorreu$

    3nde Pode-se 'tili(ar uma ,ista de 6press4es

    O prop*sito principal de uma lista de epress)es agrup0/las em uma Jnica unidade$ 9m qualquer lugar doc*digo AdvPl que uma epresso simples pode ser utili4ada, pode/se utili4ar uma lista de epress)es$ 9ainda, pode/se "a4er com que v0rias coisas aconteam onde normalmente apenas uma aconteceria$

    B : 8D R Y : 'D

    !" B ^ Y

    Alert(?B?

    T : 8

    9lse

    Alert(?Y?

    T : /8

    9ndi"

    Aqui temos o mesmo conceito, escrito utili4ando listas de epress)es na "uno ii":

    B : 8D R Y : 'D

    ii"( B ^ Y , R

    ( Alert(?B?, T : 8 , R

    ( Alert(?Y?, T : /8

    De ,istas de 6press4es para *locos de Cdigo

    -onsidere a seguinte lista de epress)es:

    Alert( cal.o-har( ( : 8D, _ : 'D ^ 'D

    O AdvPl permite criar "un)es, que so pequenos pedaos de c*digo, como se "osse um pequeno programa,utili4ados para diminuir partes de tare"as mais compleas e reaproveitar c*digo em mais de um lugar numprograma$ Para maiores detalhes consulte a documentao sobre a criao de "un)es em AdvPl$ Porm, aidia neste momento que a lista de epress)es utili4ada na linha anterior pode ser criada como uma"uno:

    >unction Gista(

    B : 8D

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    27/342

    Y : 'D

    #eturn Y

    9 a linha de eemplo com a lista de epress)es pode ser substitu1da, tendo o mesmo resultado, por:

    Alert( cal.o-har( Gista( ^ 'D

    -omo mencionado anteriormente, uma lista de epress)es como um pequeno programa ou "uno$ -ompoucas mudanas, uma lista de epress)es pode se tornar um bloco de c*digo:

    ( B : 8D , Y : 'D FF Gista de 9press)es

    B : 8D , Y : 'D FF loco de -*digo

    7ote as chaves utili4adas no bloco de c*digo$ Ou se%a, um bloco de c*digo uma matri4$ Porm naverdade, no uma lista de dados, e sim uma lista de comandos, uma lista de c*digo$

    FF !sto uma matri4 de dados

    A : 8D, 'D, &D

    FF !sto um bloco de c*digo, porm "unciona como

    FF se "osse uma matri4 de comandos

    : : 8D, _ : 'D

    6ecutando um *loco de Cdigo

    +i"erentemente de uma matri4, no se pode acessar elementos de um bloco de c*digo atravs de um 1ndicenumrico$ Porm blocos de c*digo so semelhantes a uma lista de epress)es, e a uma pequena "uno$ Ouse%a, podem ser eecutados$ Para a eecuo, ou avaliao, de um bloco de c*digo, deve/se utili4ar a "uno9val:

    n#es : 9val( ^ 'D

    9ssa "uno recebe como par5mero um bloco de c*digo e avalias todas as epress)es contidas neste bloco

    de c*digo, retornando o resultado da Jltima epresso avaliada$

    Passando ParEmetros

    W0 que blocos de c*digo so como pequenas "un)es, tambm poss1vel a passagem de par5metros paraum bloco de c*digo$ Os par5metros devem ser in"ormados entre as barras verticais ( separados porv1rgulas, assim como em uma "uno$

    : 7 B : 8D, Y : 'D ` 7

    Porm deve/se notar que %0 que o bloco de c*digo recebe um par5metro, um valor deve ser passado quandoo bloco de c*digo "or avaliado$

    - : 9val(, 8 ^ '8

    'tili(ando *locos de Cdigo

    locos de c*digo podem ser utili4ados em diversas situa)es$ Keralmente so utili4ados para eecutartare"as quando eventos de ob%etos so acionados ou para modi"icar o comportamento padro de algumas"un)es$

    Por eemplo, considere a matri4 abaio:

    A : ?KA#Y NAGG?, ?>#9+ SM!.N?, ?.!M WO79S?

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    28/342

    9sta matri4 pode ser ordenada pelo primeiro nome, utili4ando/se a chamada da "uno asort(A, resultadona matri4 com os elementos ordenados dessa "orma:

    ?>#9+ SM!.N?, ?KA#Y NAGG?, ?.!M WO79S?

    A ordem padro para a "uno asort ascendente$ 9ste comportamento pode ser modi"icado atravs dain"ormao de um bloco de c*digo que ordena a matri4 de "orma descendente:

    : B, Y B ^ Y

    aSort(A,

    O bloco de c*digo (de acordo com a documentao da "uno asort deve ser escrito para aceitar doispar5metros que so os dois elementos da matri4 para comparao$ 7ote que o bloco de c*digo no conheceque elementos est0 comparando / a "uno asort seleciona os elementos (talve4 utili4ando o algor1tmo!uic"#ort e passa/os para o bloco de c*digo$ O bloco de c*digo compara/os e retorna verdadeiro ($.$ seencontram na ordem correta, ou "also ($>$ se no$ Se o valor de retorno "or "also, a "uno asort ir0 entotrocar os valores de lugar e seguir comparando o pr*imo par de valores$

    9nto, no bloco de c*digo anterior, a comparao B ^ Y verdadeira se os elementos esto em ordemdescendente, o que signi"ica que o primeiro valor maior que o segundo$

    Para ordenar a mesma matri4 pelo Jltimo nome, tambm em orden descendente, pode/se utili4ar o seguinte

    bloco de c*digo: : B, Y Substr(B,At(? ?,B`8 ^ Substr(Y,At(? ?,Y`8

    7ote que este bloco de c*digo procura e compara as partes dos caracteres imediatamente seguinte a umespao em branco$ +epois de utili4ar esse bloco de c*digo para a "uno asort, a matri4 conter0:

    ?KA#Y NAGG?, ?.!M WO79S?, ?>#9+ SM!.N?

    >inalmente, para ordenar um sub/elemento (coluna de uma matri4 por eemplo, pode/se utili4ar o seguintebloco de c*digo:

    : B, Y B8j ^ Y8j

    Criao e Atribuio de Variveis

    atrizes

    3 Conte6to de !ari5veis dentro de um Programa

    As vari0veis declaradas em um programa ou "uno, so vis1veis de acordo com o escopo onde sode"inidas$ -omo tambm do escopo depende o tempo de eistncia das vari0veis$ A de"inio do escopo deuma vari0vel e"etuada no momento de sua declarao$

    Gocal n7umero : 8D

    9sta linha de c*digo declara uma vari0vel chamada n7umero indicando que pertence seu escopo local$

    Os identi"adores de escopo so:

    LOCAL

    "#A#IC

    $%IVA#E

    $&!LIC

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Matriz_de_Variaveis_(Arrays).htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Locais.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Estaticas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Privadas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Publicas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Matriz_de_Variaveis_(Arrays).htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Locais.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Estaticas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Privadas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Publicas.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    29/342

    O AdvPl no r1gido em relao = declarao de vari0veis no comeo do programa$ A incluso de umidenti"icador de escopo no necess0rio para a declarao de uma vari0vel, contanto que um valor lhe se%aatribu1do$

    n7umero' : 82

    uando um valor atribu1do = uma vari0vel em um programa ou "uno, o AdvPl criar0 a vari0vel caso elano tenha sido declarada anteriormente$ A vari0vel ento criada como se tivesse sido declarada como

    Private$

    +evido a essa caracter1stica, quando pretende/se "a4er uma atribuio a uma vari0vel declarada

    previamente mas escreve/se o nome da vari0vel de "orma incorreta, o AdvPl no gerar0 nenhumerro de compilao ou de eecuo$ Pois compreender0 o nome da vari0vel escrito de "ormaincorreta como se "osse a criao de uma nova vari0vel$ !sto alterar0 a l*gica do programa, e umerro muitas ve4es di"1cil de identi"icar$

    !ari5veis ,ocais

    ari0veis locais so pertencentes apenas ao escopo da "uno onde "oram declaradas$ +evem sereplicitamente declaradas com o identi"icador GO-AG, como no eemplo:

    >unction Pai(

    Gocal nar : 8D, aMatri4 : D,8,',&

    $\comandos^

    $>ilha(

    $\mais comandos^

    $

    #eturn($.$7este eemplo, a vari0vel nar "oi declarada como local e atribu1da com o valor 8D$ uando a "uno >ilha eecutada, nar ainda eiste mas no pode ser acessada$ uando a eecuo da "uno Pai terminar, avari0vel nar destru1da$ ualquer vari0vel com o mesmo nome no programa que chamou a "uno Pai no a"etada$

    ari0veis locais so criadas automaticamente cada ve4 que a "uno onde "orem declaradas "or ativada$ 9lascontinuam a eistir e mantm seu valor at o "im da ativao da "uno (ou se%a, at que a "uno retorne ocontrole para o c*digo que a eecutou$ Se uma "uno chamada recursivamente (por eemplo, chama a simesma, cada chamada em recurso cria um novo con%unto de vari0veis locais$

    A visibilidade de vari0veis locais idntica ao escopo de sua declarao$ Ou se%a, a vari0vel vis1vel emqualquer lugar do c*digo "onte em que "oi declarada$ Se uma "uno chamada recursivamente, apenas asvari0veis locais criadas na mais recente ativao so vis1veis$

    !ari5veis st5ticas

    ari0veis est0ticas "uncionam basicamente como as vari0veis locais, mas mantm seu valor atravs daeecuo$ ari0veis est0ticas devem ser declaradas eplicitamente no c*digo com o identi"icador S.A.!-$

    O escopo das vari0veis est0ticas depende de onde so declaradas$ Se "orem declaradas dentro do corpo deuma "uno ou procedimento, seu escopo ser0 limitado =quela rotina$ Se "orem declaradas "ora do corpo dequalquer rotina, seu escopo todo o arquivo de programa$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    30/342

    7este eemplo, a vari0vel nar declarada como est0tica e iniciali4ada com o valor 8D:

    4unction Pai56

    Static nar : 8D

    $\comandos^

    $>ilha(

    $\mais comandos^

    $#eturn($.$

    uando a "uno >ilha eecutada, nar ainda eiste mas no pode ser acessada$ +i"erente de vari0veisdeclaras como GO-AG ou P#!A.9, nar continua a eistir e mantem seu valor atual quando a eecuo da"uno Pai termina$ 9ntretanto, somente pode ser acessada por eecu)es subseqntes da "uno Pai$

    !ari5veis Privadas

    A declarao opcional para vari0veis privadas$ Mas podem ser declaradas eplicitamente com oidenti"icador P#!A.9$

    Adicionalmente, a atribuio de valor a uma vari0vel no criada anteriormente automaticamente cria avari0vel como privada$ 3ma ve4 criada, uma vari0vel privada continua a eistir e mantem seu valor at queo programa ou "uno onde "oi criada termine (ou se%a, at que a "uno onde "oi criada retorne para oc*digo que a eecutou$ 7este momento, automaticamente destru1da$

    H poss1vel criar uma nova vari0vel privada com o mesmo nome de uma vari0vel %0 eistente$ 9ntretanto, anova (duplicada vari0vel pode apenas ser criada em um n1vel de ativao in"erior ao n1vel onde a vari0vel"oi declarada pela primeira ve4 (ou se%a, apenas em uma "uno chamada pela "uno onde a vari0vel %0havia sido criada$ A nova vari0vel privada ir0 esconderqualquer outra vari0vel privada ou pJblica (ve%a adocumentao sobre vari0veis p'blicas com o mesmo nome enquanto eistir$

    3ma ve4 criada, uma vari0vel privada vis1vel em todo o programa enquanto no "or destru1daautomaticamente quando a rotina que a criou terminar ou uma outra vari0vel privada com o mesmo nome"or criada em uma sub"uno chamada (neste caso, a vari0vel eistente torna/se inacess1vel at que a novavari0vel privada se%a destru1da$

    9m termos mais simples, uma vari0vel privada vis1vel dentro da "uno de criao e todas as "un)eschamadas por esta, a menos que uma "uno chamada crie sua pr*pria vari0vel privada com o mesmonome$

    Por eemplo:

    4unction Pai56

    Private nar : 8D

    $

    \comandos^

    $>ilha(

    $\mais comandos^

    $#eturn($.$

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Publicas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Publicas.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    31/342

    7este eemplo, a vari0vel nar criada como privada e iniciali4ada com o valor 8D$ uando a "uno >ilha eecutada, nar ainda eiste e, di"erente de uma vari0vel local, pode ser acessada pela "uno >ilha$uando a "uno Pai terminar, nar ser0 destru1da e qualquer declarao de nar anterior se tornar0acess1vel novamente$

    !ari5veis PF)licas

    Pode/se criar vari0veis pJblicas dinamicamente no c*digo com o identi"icador P3G!-$ As vari0veis pJblicascontinuam a eistir e mantm seu valor at o "im da eecuo$

    H poss1vel criar uma vari0vel privada com o mesmo nome de uma vari0vel pJblica eistente$ 9ntretanto, no permitido criar uma vari0vel pJblica com o mesmo nome de uma vari0vel privada eistente$

    3ma ve4 criada, uma vari0vel pJblica vis1vel em todo o programa onde "oi declarada at que se%aescondidapor uma vari0vel privada criada com o mesmo nome$ A nova vari0vel privada criada escondeavari0vel pJblica eistente, e esta se tornar0 inacess1vel at que a nova vari0vel privada se%a destru1da$ Poreemplo:

    >unction Pai(

    Public nar : 8D

    $\comandos^

    $>ilha(

    $\mais comandos^

    $#eturn($.$

    7este eemplo, nar criada como pJblica e iniciali4ada com o valor 8D$ uando a "uno >ilha eecutada, nar ainda eiste e pode ser acessada$ +i"erente de vari0veis locais ou privadas, nar aindaeiste ap*s o trmino da a eecuo da "uno Pai$

    +i"erentemente dos outros identi"icadores de escopo, quando uma vari0vel declarada comopJblica sem ser iniciali4ada, o valor assumido "also ($>$ e no nulo (nil$

    Di.erenciao entre vari5veis e nomes de campos

    Muitas ve4es uma vari0vel pode ter o mesmo nome que um campo de um arquivo ou tabela aberto nomomento$ 7este caso, o AdvPl privilegiar0 o campo$ Assim uma re"erncia a um nome que identi"ique tantouma vari0vel como um campo, resultar0 no conteJdo do campo$

    Para especi"icar qual deve ser o elemento re"erenciado, deve/se utili4ar o operador de identi"icao deapelido (/^ e um dos dois identi"icadores de re"erncia, M9MA# ou >!9G+$

    c#es : M9MA#/^7OM9

    9sta linha de comando identi"ica que o valor atribu1do = vari0vel c#es deve ser o valor da vari0vel demem*ria chamada 7OM9$

    c#es : >!9G+/^7OM9

    7este caso, o valor atribu1do = vari0vel c#es ser0 o valor do campo 7OM9 eistente no arquivo ou tabelaaberto na 0rea atual$

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    32/342

    O identi"icador >!9G+ pode ser substitu1do pelo apelido de um arquivo ou tabela aberto, para evitar anecessidade de selecionar a 0rea antes de acessar o conteJdo de terminado campo$

    c#es : -G!97.9S/^7OM9

    Para maiores detalhes sobre abertura de arquivos com atribuio de apelidos, consulte a documentaosobre acesso a banco de dados ou a documentao da "uno db3seArea$

    3peradores Comuns

    7a documentao sobre vari0veis h0 uma breve demonstrao de como atribuir valores a uma vari0vel da"orma mais simples$ O AdvPl amplia signi"icativamente a utili4ao de vari0veis atravs do uso deepress)es e "un)es$ 3ma epresso um con%unto de operadores e operandos cu%o resultado pode seratribu1do a uma vari0vel ou ento analisado para a tomada de decis)es$ Por eemplo:

    Gocal nSalario : 8DDD, n+esconto : D$8D

    Gocal nAumento, nSalGiquido

    nAumento : nSalario 8$'D

    nSalGiquido : nAumento (8/n+esconto

    7este eemplo so utili4adas algumas epress)es para calcular o sal0rio l1quido ap*s um aumento$ Osoperandos de uma epresso podem ser uma vari0vel, uma constante, um campo de arquivo ou uma"uno$

    3peradores %atem5ticos

    Os operadores utili4ados em AdvPl para c0lculos matem0ticos so:

    ` Adio/ Subtrao MultiplicaoF +iviso

    ou 9ponenciao M*dulo (#esto da +iviso

    3peradores de StringOs operadores utili4ados em AdvPl para tratamento de caracteres so:

    ` -oncatenao de strings (unio/ -oncatenao de strings com eliminao dos brancos "inais das strings intermedi0rias -omparao de Substrings (contido em

    3peradores Relacionais

    Os operadores utili4ados em AdvPl para opera)es e avalia)es relacionais so:

    \ -omparao Menor

    ^ -omparao Maior

    -omparao !gual

    -omparao 9atamente !gual (para caracteres

    \ -omparao Menor ou !gual

    ^ -omparao Maior ou !gual

    \^ ou [ ou k -omparao +i"erente

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    33/342

    3peradores ,gicosOs operadores utili4ados em AdvPl para opera)es e avalia)es l*gicas so:

    $And$ 9 l*gico

    $Or$ O3 l*gico

    $7ot$ ou k 7O l*gico

    Variveis de emriaEstruturas de Controle

    3peradores de Atri)uio

    Os operadores utili4ados em AdvPl para atribuio de valores a vari0veis de mem*ria so:

    Atribuio Simples

    : Atribuio em Ginha

    ` Adio e Atribuio em Ginha

    / Subtrao e Atribuio em Ginha

    Multiplicao e Atribuio em Ginha

    F +iviso e Atribuio em Ginha

    ou 9ponenciao e Atribuio em Ginha M*dulo (resto da diviso e Atribuio em Ginha

    Atri)uio Simples

    O sinal de igualdade utili4ado para atribuir valor a uma vari0vel de mem*ria$

    nariavel 8D

    Atri)uio em ,inha

    O operador de atribuio em linha caracteri4ado por dois pontos e o sinal de igualdade$ .em a mesma"uno do sinal de igualdade so4inho, porm aplica a atribuio =s vari0veis$ -om ele pode/se atribuir maisde uma vari0vel ao mesmo tempo$

    nar8 : nar' : nar& : D

    uando diversas vari0veis so iniciali4adas em uma mesma linha, a atribuio comea da direita para aesquerda, ou se%a, nar& recebe o valor 4ero inicialmente, nar' recebe o conteJdo de nar& e nar8recebe o conteJdo de nar' por "inal$

    -om o operador de atribuio em linha, pode/se substituir as iniciali4a)es individuais de cada vari0vel por

    uma iniciali4ao apenas:Gocal nar8 : D, nar' : D, nar& : D

    por

    Gocal nar8 : nar' : nar& : D

    O operador de atribuio em linha tambm pode ser utili4ado para substituir valores de campos em umbanco de dados$

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    34/342

    Atri)uio Composta

    Os operadores de atribuio composta so uma "acilidade da linguagem AdvPl para epress)es de c0lculo eatribuio$ -om eles pode/se economi4ar digitao:

    Operador 9emplo 9quivalente a` B ` Y B B ` Y/ B / Y B B / Y B Y B B YF B F Y B B F Y

    ou B Y B B Y B Y B B Y

    Variveis de emria

    Estruturas de Controle

    3peradores de $ncremento7Decremento

    A linguagem AdvPl possui operadores para reali4ar incremento ou decremento de vari0veis$ 9ntende/se porincremento aumentar o valor de uma vari0vel numrica em 8 e entende/se por decremento diminuir o valorda vari0vel em 8$ Os operadores so:

    `` !ncremento P*s ou Pr/"iado// +ecremento P*s ou Pr/"iado

    Os operadores de decrementoFincremento podem ser colocados tanto antes (pr/"iado como depois (p*s/"iado do nome da vari0vel$ +entro de uma epresso, a ordem do operador muito importante, podendoalterar o resultado da epresso$ Os operadores incrementais so eecutados da esquerda para a direitadentro de uma epresso$

    Gocal nA : 8D

    Gocal n : nA`` ` nA

    O valor da vari0vel n resulta em '8, pois a primeira re"erncia a nA (antes do `` continha o valor 8D que"oi considerado e imediatamente aumentado em 8$ 7a segunda re"erncia a nA, este %0 possu1a o valor 88$ Oque "oi e"etuado "oi a soma de 8D mais 88, igual a '8$ O resultado "inal ap*s a eecuo destas duas linhas a vari0vel n contendo '8 e a vari0vel nA contendo 88$

    7o entanto:

    Gocal nA : 8D

    Gocal n : ``nA ` nA

    #esulta em '', pois o operador incremental aumentou o valor da primeira nA antes que seu valor "osseconsiderado$

    Variveis de emria

    Estruturas de Controle

    3peradores speciais

    Alm dos operadores comuns, o AdvPl possui alguns outros operadores ou identi"icadores$ 9stas so suas"inalidades:

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    35/342

    ( Agrupamento ou >unoj 9lemento de Matri4 +e"inio de Matri4, -onstante ou loco de -*digo/^ !denti"icador de Apelido Macrosubstituio] Passagem de par5metro por re"erncia Passagem de par5metro por valor

    Os parnteses so utili4ados para agrupar elementos em uma epresso mudando a ordem de precednciada avaliao da epresso (segundo as regras matem0ticas por eemplo$ .ambm servem para envolver osargumentos de uma "uno$ e%a a documentao sobre preced(ncia de operadores para maioresdetalhes$

    Os colchetes so utili4ados para especi"icar um elemento espec1"ico de uma matri4$ Por eemplo, A&,'j,re"ere/se ao elemento da matri4 A na linha &, coluna '$

    As chaves so utili4adas para a especi"icao de matri4es literais ou blocos de c*digo$ Por eemplo,A:8D,'D,&D cria uma matri4 chamada A com trs elementos$

    O s1mbolo 78 identi"ica um campo de um arquivo di"erenciando/o de uma vari0vel$ Por eemplo, >37-/^nome re"ere/se ao campo nome do arquivo >37-$ Mesmo que eista uma vari0vel chamada nome, ocampo nome que ser0 acessado$

    O s1mbolo 9 identi"ica uma avaliao de epresso atravs de macro e visto em detalhes nadocumentao sobremacrossubstituio$

    O s1mbolo : utili4ado para indicar que durante a passagem de uma vari0vel para uma "uno ouprocedimento ela se%a tomada como uma re"erncia e no como valor$

    O s1mbolo ;; utili4ado para indicar que durante a passagem de uma vari0vel para uma "uno ouprocedimento ela se%a tomada como um e valor no como re"erncia$

    Variveis de emria

    Estruturas de Controle

    3rdem de PrecedGncia dos 3peradores

    +ependendo do tipo de operador, eiste uma ordem de precedncia para a avaliao dos operandos$ 9mprinc1pio, todas as opera)es com os operadores, so reali4adas da esquerda para a direita se eles tiverem omesmo n1vel de prioridade$

    A ordem de precedncia, ou n1vel de prioridade de eecuo, dos operadores em AdvPl :

    8$ Operadores de !ncrementoF+ecremento pr/"iado

    '$ Operadores de String

    &$ Operadores Matem0ticos

    L$ Operadores #elacionais

    2$ Operadores G*gicos

    $ Operadores de Atribuio

    E$ Operadores de !ncrementoF+ecremento p*s/"iado

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Ordem_de_Precedencia_dos_Operadores.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Ordem_de_Precedencia_dos_Operadores.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Macrossubstituicao.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Macrossubstituicao.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Ordem_de_Precedencia_dos_Operadores.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Macrossubstituicao.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    36/342

    9m epress)es compleas com di"erentes tipos de operadores, a avaliao seguir0 essa seqncia$ -asoeista mais de um operador do mesmo tipo (ou se%a, de mesmo n1vel, a avaliao se d0 da esquerda paradireita$ Para os operadores matem0ticos entretanto, h0 uma precedncia a seguir:

    8$ 9ponenciao

    '$ Multiplicao e +iviso

    &$ Adio e Subtrao

    -onsidere o eemplo:

    Gocal n#esultado : '`8DF'`2& '&

    O resultado desta epresso &D, pois primeiramente calculada a eponenciao '&(, ento socalculadas as multiplica)es e divis)es 8DF'(2 e 2&(82, e "inalmente as adi)es resultando em'`2`82`(&D$

    Alterao da PrecedGncia

    A utili4ao de parnteses dentro de uma epresso altera a ordem de precedncia dos operadores$Operandos entre parnteses so analisados antes dos que se encontram "ora dos parnteses$ Se eistirem

    mais de um con%unto de parnteses no/aninhados, o grupo mais a esquerda ser0 avaliado primeiro e assimsucessivamente$

    Gocal n#esultado : ('`8DF('`2&`'&

    7o eemplo acima primeiro ser0 calculada a eponenciao '&($ 9m seguida '`8D(8' ser0calculado, '`2(E calculado, e "inalmente a diviso e a multiplicao sero e"etuadas, o que resulta em8'FE&`(8&$8L$

    Se eistirem v0rios parnteses aninhados, ou se%a, colocados um dentro do outro, a avaliao ocorrer0 doparnteses mais intero em direo ao mais eterno$

    Variveis de emria

    Estruturas de Controle

    %acro Su)stituio

    O operador de macro substituio, simboli4ado pelo ?e? comercial (, utili4ado para a avaliao deepress)es em tempo de eecuo$ >unciona como se uma epresso arma4enada "osse compilada emtempo de eecuo, antes de ser de "ato eecutada$ -onsidere o eemplo:

    D8 B : 8D

    D' Y : ?B ` 8?

    D& : Y FF O conteJdo de ser0 88

    A vari0vel B atribu1da com o valor 8D, enquanto a vari0vel Y atribu1da com a string de caracterescontendo ?B ` 8?$

    A terceira linha utili4a o operador de macro$ 9sta linha "a4 com que o nJmero 88 se%a atribu1do = vari0vel $Pode/se perceber que esse o valor resultante da epresso em "ormato de caractere contida na vari0vel Y$

    3tili4ando/se uma tcnica matem0tica elementar, a substituio, temos que na segunda linha, Y de"inidocomo ?B ` 8?, ento pode/se substituir Y na terceira linha:

    D& : ?B ` 8?

    O operador de macro cancela as aspas:

    D& : B ` 8

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    37/342

    Pode/se perceber que o operador de macro remove as aspas, o que deia um pedao de c*digo para sereecutado$ +eve/se ter em mente que tudo isso acontece em tempo de eecuo, o que torna tudo muitodin5mico$ 3ma utili4ao interessante criar um tipo de calculadora, ou avaliador de "*rmulas, quedetermina o resultado de algo que o usu0rio digita$

    O operador de macro tem uma limitao: vari0veis re"erenciadas dentro da string de caracteres (B

    nos eemplos anteriores no podem ser locais$

    Variveis de emria

    Estruturas de Controle

    Controlando o Hlu6o

    O AdvPl suporta v0rias estruturas de controle que permitem mudar a seqncia de "luo de eecuo de umprograma$ 9stas estruturas permitem a eecuo de c*digo baseado em condi)es l*gica e a repetio daeecuo de pedaos de c*digo qualquer nJmero de ve4es$

    9m AdvPl, todas as estruturas de controle podem ser ?aninhadas? dentro de todas as demais estruturascontanto que este%am aninhadas propriamente$ 9struturas de controle tm um identi"icador de in1cio e umde "im, e qualquer estrutura aninhada deve se encontrar entre estes identi"icadores$

    .ambm eistem estruturas de controle para determinar que elementos, comandos, etc em um programasero compilados$ 9stas so as diretivas do pr/processador [i"de"$$$[endi" e [i"nde"$$$[endi"$ -onsulte adocumentao sobre o pr/processador para maiores detalhes$

    As estruturas de controle em AdvPl esto divididas em Estruturas de %epetio e Estruturas de)eciso$

    Variveis de emria

    Operadores da Linguagem

    Repetio de Comandos

    9struturas de repetio so deseginadas para eecutar uma seo de c*digo mais de uma ve4$ Por eemplo,imagiando/se a eistncia de uma "uno para imprimir um relat*rio, pode/se dese%ar imprimi/lo quatrove4es$ -laro, pode/se simplesmente chamar a "uno de impresso quatro ve4es em seqncia, mas isto setornaria pouco pro"issional e no resolveria o problema se o nJmero de relat*rios "osse vari0vel$

    9m AdvPl eistem dois comandos para a repetio de se)es de c*digo$ O comando *O%+++,E-# e ocomando./ILE+++E,))O$

    3 Comando H3RIII&JT

    A estrutura de controle >O#$$$79B., ou simplesmente o loop >O#, repete uma seo de c*digo em umnJmero determinado de ve4es$

    Sinta0e

    >O# $ariavel %& n$alor'nicial.O n$alorinal (S.9Pn'ncremento

    Comandos***

    9B!.j

    GOOPj

    79B.

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Repeticao_de_Comandos.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Desviando_a_Execucao.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Desviando_a_Execucao.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Operadores_Comuns.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_FOR.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_While.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_While.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_While.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Controle_de_Fluxo.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Repeticao_de_Comandos.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Desviando_a_Execucao.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/Desviando_a_Execucao.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Criacao_e_Atribuicao_de_Variaveis.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Operadores/Operadores_Comuns.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_FOR.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_While.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    38/342

    Paror n-nt : D .o 8DD Step '

    nSomaPar ` n-nt

    7et

    Alert( ?A soma dos 8DD primeiros nJmeros pares : ? ` R

    cal.o-har(nSomaPar

    #eturn

    9ste eemplo imprime a soma dos 8DD primerios nJmeros pares$ A soma obitida atravs da repetio doc0lculo utili4ando a pr*pria vari0vel de contador$ -omo a cl0usula S.9P est0 sendo utili4ada, a vari0vel n-ntser0 sempre incrementada em '$ 9 como o contador comea com D, seu valor sempre ser0 um nJmero par$

    ./ILE+++E,))O

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Privadas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Privadas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_While.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Variaveis/Variaveis_Privadas.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_While.htm
  • 7/22/2019 A BIBLIA DO ADVPL.doc

    39/342

    I*+++E,)I*

    )O CA"E+++E,)CA"E

    3 Comando >K$,III&DD3

    A estrutura de controle ;N!G9$$$97++O, ou simplesmente o loop ;N!G9, repete uma seo de c*digoenquanto uma determinada epresso resultar em verdadeiro ($.$$

    Sinta0e

    ;N!G9 l,-pressao

    Comandos***

    9B!.j

    GOOPj

    97++O

    Par

  • 7/22/2019 A BIBLIA DO ADVPL.doc

    40/342

    I*+++E,)I*

    )O CA"E+++E,)CA"E

    Desviando a 6ecuo

    9struturas de desvio so deseginadas para eecutar uma seo de c*digo se determinada condio l*gicaresultar em verdadeiro ($.$$ 9m AdvPl eistem dois comandos para eecuo de se)es de c*digo deacordo com avalia)es l*gicas$ O comandoI*+++E,)I*e o comando +O -AS9$$$97+-AS9$

    3 Comando $HIII&D$H

    9ecuta um con%unto de comandos baseado no valor de uma epresso l*gica$

    Sinta0e

    )F lExpressaoComandos

    O-LS-Comandos...

    -N%)F

    Par$ e a cl0usula 9GS9 "or de"inida, qualquer comando ap*sessa cl0usula e anterior ao 97+!> ser0 eecutada$ Se a cl0usula 9GS9 no "or de"inida, todos oscomandos entre o !> e o 97+!> so ignorados$ 7este caso, a eecuo do programa continuacom o primeiro comando seguinte ao 97+!>$

    -omandos -on%unto de comandos AdvPl que sero eecutados dependendo da avaliao da epressol*gica em l9pressao$

    (omentriosPode/se aninhar um bloco de comando !>$$$97+!> dentro de outro bloco de comando !>$$$97+!>$ Porm,para a avaliao de mais de uma epresso l*gica, deve/se utili4ar o comando )O CA"E+++E,)CA"E$

    '0emplo

    Local d@encto := CT?%/>1(1&(01>)" %ate/ 3 d@encto

    Alert/>@encmento ultrapa!!ado,>-nd"7eturn

    ./ILE+++E,))O

    *O%+++,E-#

    )O CA"E+++E,)CA"E

    3 Comando D3 CASIII&DCAS

    9ecuta o primeiro con%unto de comandos cu%a epresso condicional resulta em verdadeiro ($.$$

    Sinta0e

    http://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_IF.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_DO_CASE.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_IF.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_IF.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_DO_CASE.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_While.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_FOR.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_DO_CASE.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_IF.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_DO_CASE.htmhttp://dem.microsiga.com.br/dem/html/apsintax/Linguagem/Estruturas/O_Comando_IF.htmhttp