Você está na página 1de 36

!!! Logica de Programaao e a tecnica de encadear pensamentos par atingir determinado objetivo.

Es tes pensamentos podem ser descritos como uma sequencia de instruoes que devem ser seguidas para se cumprir uma determinada tarefa. ---------------------------------->> Fluxograma elipse= inicio e fim do processamento retangulo= processamento em geral trapezio= entrada e saida de dados pelo teclado losango= escolha entre duas situaoes (IF) escudo deitado= resultados obtidos com um processamento retangulo cortado= doc. utilizado pelo processamento, seja para entrada ou exibiao de dados ------------------------------------! Estruturas de Decisao: IF..ELSE ou IF..ELSEIF..ELSE DO CASE ... CASE -----------------------------------! Estruturas de Repetiao WHILE...END FOR...NEXT -----------------------------------!!! ADVPL - Advanced Protheus Language a linguagem advpl teve seu inicio em 1994, sendo na verdade uma evoluao na utiliz aao de linguagens no padrao xBase pela Microsiga Software S.A. (Clipper,Visual Ob jects e depois FiveWin). Com a criaao da tecnologia Microsiga Protheus, era neces sario criar uma linguagem que suportasse o padrao xBase para a manutenao de todo o codigo existente do sistema de ERP Siga Advanced. Foi entao criada a linguagem chamada Advanced Microsiga Protheus Language. O avdpl e uma extensao do padrao xBase de comandos e funoes, operadores, estrutur as de controle de fluxo e palavras reservadas, contando tambem com funoes e coman dos disponibilizados pela Microsiga que a torna uma linguagem completa para a cr iaao de aplicaoes ERP prontas para a internet. Tambem e uma linguagem orientada a objetos e eventos, permitindo ao programador desenvolver aplicaoes visuais e cria r suas proprias classes de objetos. Quando compilamos, todos os arquivos de codigo tornam-se unidades de inteligenci a basicas, chamados APO's (de Advanced Protheus Objects). Tais APO's sao mantido s em um repositorio e carregados dinamicamente pelo Microsiga Protheus Server pa ra a execuao. Como nao existe linkediao, ou uniao fisica do codifo compilado a um determinado modulo ou aplicaao, funoes criadas em ADVPL podem ser executadas em qu alquer ponto do Ambiente Advanced Microsiga Protheus. O compilador e o interpertador da linguagem ADVPL e o proprio servidor Microsiga Protheus (Microsiga Protheus Server), e existe um Ambientes visual para desenvo lvimento integrado (Microsiga Protheus IDE) onde o codigo pode ser criado, compi lado e depurado. Os programas em ADVPL podem conter comandos ou funoes de interface com o usuario. De acordo com tal caracteristica, tais programas sao subdivididos em categorias . --------------------------------------->> Programaao com Interface

Por meio do terminal remoto da Microsiga Protheus, o Microsiga Protheus Remote, pode-se fazer a aplicaao encarregada da interface e da interaao com o usuario, sen do que todo o processamento do codigo em ADVPL, o acesso ao banco de dados e o g erenciamento de conexoees e efetuado no Microsiga Protheus Server. O Microsiga Protheus Remote o principal meio de acesso execuao de rotinas escrita s em ADVPL no Microsiga Protheus Server, e por isso permite executar qualquer ti po de codigo, tenha ele interface com o ususario ou nao. Porem nesta categoria, sao considerados apenas os programas que realizem algum tipo de interface remota utilizando o protocolo de comunicaao do Microsiga Protheus. Podem-se criar rotinas para a customizaao do Sistema ERP Microsiga Protheus, desd e processos adicionais at mesmo relatorios. A grande vantagem aproveitar todo o a mbiente montado pelos modulos do ERP Microsiga Protheus. Porem com o ADVPL possi vel ate mesmo criar toda uma aplicaao, ou modulo, do comeo. Lembre-se que todo o c odigo do Sistema ERP Microsiga Protheus escrito em ADVPL. ------------------------------------------>> Programaao sem Interface Programaao Programaao Programaao Programaao por Processes; de RPC; WEB; TelNet;

As rotinas criadas sem interface sao consideradas nesta categoria (Linguagem de ADVPL) porque geralmente tem uma utilizaao mais especifica do que um processo adi cional ou um relatorio novo. Tais rotinas nao tem interface por meio do Microsig a Protheus Remote, e qualquer tentativa nesse sentido ocasionara uma exceao em te mpo de execuao. As rotinas sem interface sao apenas processos, ou Jobs, executados no Microsiga Protheus Server. Algumas vezes, a interface destas rotinas fica a cargo de aplic aoes externas. Podem ser desenvolvidas em outras linguagens, que sao responsaveis por iniciar os processos no servidor Microsiga Protheus mediante os meios dispo niveis de integraao e conectividade no Microsiga Protheus. ------------------------------------------------>>> Programaao por Processos Rotinas escritas em ADVPL podem ser iniciadas como processos individuais (sem in terface) no Microsiga Protheus Server de duas maneiras: > iniciadas por outra rotina ADVPL por meio das chamadas funoes como Star tJob() ou CallProc(); > iniciadas automaticamente na inicializaao do Microsiga Protheus Server (quando devidamente confgurado). >>> Programaao de RPC RPC (de Remote Procedure Call, ou Chamada de Procedimentos Remota) sao as funoes disponiveis no Microsiga Protheus (uma API de comunicaao) por meio de uma bibliot eca. Podem-se executar rotinas escritas em ADVPL diretamente no Microsiga Prothe us Server, por meio de aplicaoes externas escritas em outras linguagens. O servidor Microsiga Protheus tambem pode executar rotinas em ADVPL em outros se rvidores Microsiga Protheus por intermedio da conexao TCP/IP direta utilizando o conceito de RPC. Do mesmo modo, aplicaoes externas podem requisitar a execuao de rotinas escritas em ADVPL por meio de conexao TCP/IP direta. >>> Programaao Web

O Microsiga Protheus Server pode tambem ser executado como um servidor WEB, resp ondendo a requisioes HTTP. No momento destas requisioes, pode executar rotinas em ADVPL como processos individuais, enviando o resultado das funoes como retorno da s requisioes para o cliente HTTP (como por exemplo, um Browser de internet). Qualquer rotina escrita em ADVPL que nao contenha comandos de interface pode ser executada por meio de requisioes HTTP. O Microsiga Protheus permite a compilaao d e arquivos HTML contendo codigos ADVPL embutido. Sao chamados arquivos ADVPL ASP , para a criaao de paginas dinamicas. >>> Programaao TelNet TelNet parte da gama de protocolos TCP/IP que permite a conexao a um computador remoto por meio de uma aplicaao cliente deste protocolo. O Microsiga Protheus Ser ver pode emular um terminal TelNet, por meio da execuao de rotinas escritas em AD VPL. Ou seja, pode-se escrever rotinas ADVPL cuja interface final sera um termin al TelNet ou um coletor de dados movel. ---------------------------------!!! Estrutura de um Programa ADVPL >> Compilaao: substitui comandos de alto nivel (que os humanos compreendem) por instruoes de baixo nivel (compreendida pelo Sistema Operacional em execuao no comp utador). No caso do ADVPL, nao o Sistema Operacional de um computador que ira ex ecutar o codigo compilado, mas sim o Microsiga Protheus Server. A estrutura de um programa ADVPL composta por quatro areas: >> Area de identificaao: uma area que nao obrigatoria e e dedicada a documentaao do programa. Quando utilizada, contem apenas comentarios explicando a sua finali dade, data de criaao, autor, etc., e aparece no comeo do programa, antes de qualqu er linha de comando. O tipo de informaao desejada e a escolha da formataao apropri ada fica a criterio. >> Area de Ajustes Inicias: nesta area geralmente se fazem os ajustes iniciais, importantes para o correto funcionamento do programa. Entre os ajustes se encon tram declaraoes de variaveis, inicializaoes, abertura de arquivos, etc. Apesar de o ADVPL nao ser uma linguagem rigida, as variaveis poderem ser declaradas em qua lquer lugar do programa, aconselhavel faze-lo nesta area, visando tornar o codig o mais legivel e facilitar a identificaao de variaveis nao utilizadas. >> Corpo do Programa: nesta area que sem encontram as linhas de codigo do progr ama. E onde se realiza a tarefa necessaria por meio da organizaao logica destas l inhas de comando. Espera-se que as linhas de comando estejam organizadas de tal modo que no final desta area o resultado esperado seja obtido, seja ele armazena do em um arquivo ou em variaveis de memoria, pronto para ser exibido ao usuario por meio de um relatorio ou na tela. >> Area de Encerramento: nesta area que as finalizaoes sao efetuadas. onde os ar quivos abertos sao fechados, e o resultado da execuao do programa utilizado. Pode -se exibir o resultado armazenado em uma variavel ou em um arquivo ou simplesmen te finalizar, caso a tarefa ja tenha sido toda completada no corpo do programa. nesta area que se encontra o encerramento do programa. Todo programa em ADVPL de ve sempre terminar com a palavra chave Return. --------------------------------------------!!! Tipos de Dados numerico / logico / caractere / data / array / bloco de codigo

> NUMERICO: O ADVPL nao diferencia valores inteiros de valores de ponto flutuante, portanto podem-se criar variaveis numericas com qualquer valor dentro do intervalo permit ido. Uma variavel de dado numerico pode conter um numero de 18 digitos, incluind o o ponto flutuante. > LOGICO: Valores logicos em ADVPL sao identificados por meio de .T. ou .Y. para verdadeir o, e .F. ou .N. para falso. > CARACTERE: String ou cadeias de caractere sao identificadas em ADVPL por blocos de texto en tre aspas duplas ("") ou aspas simples (''). Uma variavel do tipo caractere pode conter strings com no maximo 1MB, ou seja, 1048576 caracteres. > DATA: o ADVPL tem um tipo de dados especificos para datas. Internamente as var iaveis deste tipo de dados sao armazenadas como um numero correspondente a data Juliana. Variaveis do tipo de dados Data nao podem ser declaradas diretamente, e sim por meio da utilizaao de funoes especificas como por exemplo CTOD() que conve rte uma string para data. > ARRAY: o array um tipo de dados especial. a disposiao de outros elementos em colunas e l inhas. O ADVPL suporta arrays unidimensionais (vetores) ou multidimensionais (ma trizes). Os elementos de um array sao acessados por meio de indices numericos in iciados em 1, identificando a linha e a coluna para quantas dimensoes exisitirem . Arrays devem ser utilizados com cautela, pois se forem muito grandes podem exa urir a memoria do servidor. >BLOCO DE CODIGO: o bloco de codigo um tipo de data especial. utilizado ara armazenar instruoes em ADVPL que poderao ser executadas posteriormente. >> Variaveis de Memoria sao um dos recursos mais importantes de uma linguagem. Sao areas de memoria cria das para armazenar informaoes utilizadas por um programa para execuao de tarefas. Por exemplo, quando o usuario digita uma informaao qualquer, como o nome de um pr oduto, em uma tela de um programa, esta informaao e armazenada em uma variavel de memoria para posteriormente ser gravada ou impressa. Depois de criada basta ref erenciar ao nome. Uma variavel pode ter no maximo 10 caracteres. ---------------------------------------------------!!! Escopo de Variaveis O ADVPL nao uma linguagem de tipos rigidos de dados para variaveis, ou seja, nao e necessario informar o tipo de dados que determinada variavel ira conter no mo mento de sua declaraao, e o seu valor pode mudar durante a execuao do programa. >> Um identificador de escopo uma palavra-chave que indica a que contexo do prog rama a variavel declarada pertence. > O Contexto de Variaveis dentro de um Programa: as variavies sao visiveis de acordo com o escopo em que estao definidas. Como ta mbem do escopo depende o tempo de existencia das variaveis. Os identiicadores de escopo sao: local,static,public,private. > Variaveis de Escopo Local: sao pertencentes apenas ao escopo da funao onde foram declaradas e devem ser expl

icitamente declaradas com o identificador 'Local'. A visibilidade identica ao es copo de sua declaraao, ou seja, a variavel e visivel em qualquer lugar do codigo fonte em que foi declarada. Se uma funao chamada recursivamente, apenas as variav eis de escopo local criadas na mais recente ativaao sao visiveis. > Variaveis de Escopo Static: funcionam basicamente como as variaveis de escopo local, mas mantem seu valor po r meio da execuao e devem ser declaradas explicitamente no codigo com o identific ador 'Static'. O escopo de varaiveis Static dependem de onde sao declaradas. Se forem declaradas dentro do corpo de uma funao ou procedimento, seu escopo sera li mitado aquela rotina. Se forem declaradas fora do corpo de qualquer rotina, seu escopo afeta a todas as funoes declaradas no fonte. > Variaveis de Escopo Private: a declaraao e opcional para variaveis privadas. Mas podem ser declaradas explicit amente com o identificar 'Private'. A atribuiao de valor a uma variavel nao criad a anteriormente automaticamente cria a variavel como privada. Uma vez criada, a variavel mantem seu valor ate que o programa ou funao onde foi criada termine. Um a variavel privada visivel dentro da funao de criaao e todas as funoes chamadas por esta, a menos que uma funao chamada crie sua propria variavel privada com o mesm o nome. >>importante: no Ambiente ERP Protheus, existe uma convenao adicional a qual deve ser respeitada que variaveis em uso pela aplicaao nao sejam incorretamente manip uladas. Por esta convenao deve ser adicionado o caracter "_" antes do nome de var iaveis Private e Public. > Variaveis de Escopo Public: pode-se criar variaveis de escopo public dinamicamente no codigo com o identific ador 'Public'. As variaveis deste escopo continuam a existir e mantem seu valor ate o fim da execuao da thread (conexao). possivel criar uma variavel de escopo Private com o mesmo nome de uma variavel p ublic existente, entretanto nao e permitido criar uma variavel de escopo Public com o mesmo nome de uma variavel de escopo Private existente. uma vez criada, uma variavel de escopo Public e visivel em todo o programa one f oi declarada ate que seja escondida por ma variavel de escopo private com o mesm o nome. A nova variavel de escopo private criada esconde a variavel de escopo pu blic existente, e esta se tornar inacessivel ate que a nova variavel private seja destruida. --------------------------------------------------------------------! exemplo: Local xVariavel //Declara a variavel inicialmente com valor nulo xVariavel := "Agora a variavel e caractere..." Alert("Valor do Texto:"+ xVariavel) xVariavel := 22 //Agora a variavel numerica Alert(cValToChar(xVariavel)) xVariavel := .t. //Agora a variavel logica if xVariavel Alert("A variavel tem valor verdadeiro...") else Alert("A variavel tem valor falso...") endif xVariavel := Date() //Agora a variavel Data

Alert("Hoje "+DtoC(xVariavel)) xVariavel := nil // Nulo novamente Alert("Valor Nulo:"+ xVariavel) Return --------------------!!! Operadores da Linguagem ADVPL >Operadores Logicos .and. .or. .not. ou ! >Operadores Especiais () - Agrupamento ou funao agrupar elementos em uma expressao mudando a ordem de precedencia da ava liaao da expressao. [] - Elemento de Matriz especificar um elemento especifico de matriz {} - Definiao de Matriz, Constante ou Bloco de Codigo especificaao de matrizes literais ou blocos de codigo -> - Identificador de Apelido identifica um campo de arquivo diferenciando-o de uma variavel & - Macro Substituiao ex: x:=10 y:="x+1" b:= &y //o conteudo de B sera 11 @ - Passagem de parametro por referencia - Passagem de parametro por valor >> Ordem de Precedencia dos Operadores 1- operadores de incremento/decremento pre-fixo 2- operadores de string 3- operadores matematicos 4- operadores relacionais 5- operadores logicos 6- operadores de atribuiao 7- operadores de incremento/decremento pos-fixo -------------------------------------------------------------!!! Operaoes com Variaveis >>> Conversoes entre tipos de variaveis CTOD(cData) realiza a conversao de uma informaao do tipo caracter no formato "DD/MM/AAAA" par a uma variavel do tipo data. CVALTOCHAR(nValor)

realiza a conversao de uma informaao do tipo numerico em uma string, sem a adiao d e espaos a informaao. DTOC(dData) realiza a conversao de uma informaao do tipo data em caracter, sendo o resultado no formato "DD/MM/AAAA". DTOS(dData) realiza a conversao de uma informaao do tipo data em um caracter, sendo o resulta do no formato "AAAAMMDD". STOD(sData) realiza a conversao de uma informaao do tipo caracter com conteudo no formato "AA AAMMDD" em data. STR(nValor) realiza a conversao de uma informaao do tipo numerico em uma string, adicionando espaos direita. STRZERO(nValor, nTamanho) realizar a conversao de uma informaao do tipo numerico em uma string, adicionando zeros esquerda do numero convertido, de forma que a string gerada tenha o taman ho especificado no parametro. VAL(cValor) realiza a conversao de uma informaao do tipo caracter em numerica. >>> Manipulaao de Strings ALLTRIM(cString) retorna uma string sem espaos direita e esquerda, referente ao conteudo informado como parametro. A funao ALLTRIM() implementa as aoes das funoes LTRIM() E RTRIM(). ASC(cCaractere) converte uma informaao em seu valor de acordo com a tabela ASCII. AT(cCaractere,cString) retorna a primeira posiao de um caracter ou string dentro da outra string especif icada. CHR(nASCII) converte um valor nuerico referente a uma informaao da tabela ASCII no caractere que esta informaao representa. LEN(cStirng) retorna o tamanho da string especificada no parametro. LOWER(cString) retorna uma string com todos os caracteres minusculos, tendo como base a string passada como parametro. RAT(cCaractere,cString) retorna a ultima posiao de um caracter ou string dentro de outra string especific ada. STUFF(cString,nPosInicial,nExcluir,cAdiao) permite substituir um conteudo caracter em uma string ja existente, especificand o a posiao inicial para essa adiao e o numero de caracteres que serao substituidos .

SUBSTR(cString,nPosInicial,nExcluir,cAdiao) retorna parte do conteudo de uma string especificada de acordo com a posiao inici al deste conteudo e a quantidade de caracteres que devera ser retornada a partir daquele ponto(inclusive). UPPER(cString) retorna uma string com todos os caracteres maiusculos, tendo como base a string passada como parametro. >>> Manipulaao de Variaveis Numericas ABS(nValor) retorna um valor absoluto com base no valor especificado como parametro. INT(nValor) retorna a parte inteira de um valor especificado no parametro. NOROUND(nValor,nCasas) retorna um valor, arredondando a parte decinal do valor especificado no parametr o de acordo com a quantidade de casas decimais solicitadas. ROUND(nValor, nCasas) retorna um valor, arredondando a parte decimal do valor especificado no parametr o de acordo com a quantidade de casas decimais solicitadas, utilizando o criteri o matematico. >>> Verificaao de Tipos de Variaveis TYPE("cVariavel") determina o tipo do conteudo de uma variavel, a qual nao foi definida na funao em execuao. VALTYPE(cVariavel) determina o tipo do conteudo de uma variavel, a qual foi definida na funao em exe cuao. ---------------------------------------------------------!!! Estruturas Basicas de Programaao pre-processador: #ifdef...#endif e #ifndef...#endif Comandos de Repetiao ---FOR...NEXT FOR Variavel: = nValorInicial TO nValorFinal [STEP nIncremento] Comandos... [EXIT] [LOOP] NEXT ex: Local nCnt Local nSomaPar := 0 For nCnt := 0 To 100 Step 2 nSomaPar += nCnt

Next Alert("A soma dos 100 primeiros numeros pares :"+; cValToChar(nSomaPar)) Return ---WHILE...ENDDO WHILE IExpressao Comandos... [EXIT] [LOOP] ENDDO ex: Local nNumber := nAux := 350 nAux := Int(nAux/2) While nAux > 0 nSomaPar += nCnt Next Alert("A soma dos 100 primeiros numeros pares :"+; cValToChar(nSomaPar)) Return ---IF Expressao Comandos [ELSE Comandos...] ENDIF ex: Local dVencto := CTOD("31/12/01") if Date() > dVencto Alert("Vencimento Ultrapassado!") Endif Return ex2: Local dVencto := CTOD("31/12/01") if Date() > dVencto Alert("Vencimento Ultrapassado!") Elseif Date() == dVencto Alert("Vencimento na data!") Else Alert("Vencimento dentro do prazo!") Endif Return ---DO CASE CASE IExpressao1 Comandos [CASE IExpressao2 Comandos ... CASE IExpressaoN Comandos] [OTHERWISE Comandos]

ENDCASE ex: 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 ---------------------------------------------------------------!!!! Arrays metodo AADD(vetor,elem) <= adiciona um elem no fim do vetor arrays podem conter qualquer tipo de dados, inclusive misturados no mesmo array. ARRAY(nLinhas,nColunas) a funao Array() e utilizada na definiao de variaveis de tipo array, como uma opao a sintaxe utilizando chaves. AADD(aArray,xItem) permite a inserao de um item em um array ja existente, sendo que este item pode s er um elemento simples, um objeto ou outro array. ACLONE(aArray) realiza copias dos elementos de um array para outro array integralmente ADEL(aArray,nPosicao) permite a exclusao de um elemento do array. Ao efetuar a exclusao de um elemento , todos os demais sao reorganizados de forma que a ultima posiao do array passara a ser nula. ASIZE(aArray,nTamanho) permite a redefiniao da estrutura de um array pre-existente, adicionando ou remov endo itens do mesmo. AINS(aArray,nPosicao) permite a inserao de um elemento no array especificado em qualquer ponto da estru tura do mesmo, diferindo desta forma da funao AADD() a qual sempre insere um novo elemento ao final da estrutura ja existente. ASORT(aArray,nInicio,nItens,bOrdem) permite que os itens de um array sejam ordenados a partir de um criterio pre-est abelecido. ASCAN(aArray,bSeek) permite que seja identificada a posiao do array que contem uma determinada inform aao, por meio da analise de uma expressao descrita em um bloco de codigo. ------------------------------------------------!!! Blocos de Codigo

conceito existente h muito tempo em xBase. Uma evoluao progressiva utilizando comb inaao de muitos conceitos da linguagem para a sua implementaao. ADVPL uma linguagem baseada em funoes. Apesar de o ADVPL avaliar expressoes da es querda para a direita, no caso de atribuioes isso acontece ao contrario, da direi ta para a esquerda. ex: x=:10;y:=20 if x>y alert("x") z:=1 else alert("Y") z:=-1 endif usando listas de expressoes> x:=10;y:=20 iif(x>y,; (alert("x"),z:=1),; (alert("y"),z:=-1) ) Considere a seguinte lista de expressoes: Functio Lista() x:=10 y:=20 return y E a linha de exemplo com a lista de expressoes pode ser substituida, tendo o mes mo resultado, por: Alert(cValToChar((x:=10,y:=20))) ==> 20 Com poucas mudanas, uma lista de expressoes pode ser tornar um bloco de codigo: (x:=10,y:=20) // Lista de Expressoes { x:=10,y:=20} // Bloco de Codigo Um bloco de codigo uma matriz. Porem, na verdade, nao e uma lista de dados, e si m uma lista de comandos, uma lista de codigo. A:={10,20,30} //matriz de dados B:={ x := 10, y := 20} //bloco de codigo, porem funciona como se fosse uma mat riz de dados Diferentemente de uma matriz, nao se pode acessar elementos de um bloco de codig o por meio de um indice numerico. Porem, blocos de codigo sao semelhantes a uma lista de expressoes, e a uma pequena funao. Ou seja, podem ser executados. Para execuao, ou avaliaao de um bloco de codigo, deve-se utilizar a funao Eval(). E ssa funao recebe como parametro um bloco de codigo e avalia todas as expressoes c ontidas neste bloco de codigo, retornando o resultado da ultima expressao avalia da. ex: nRes := Eval(B) ==> 20

Os parametros devem ser informados entre as barras verticais rgulas, assim como em uma funao. B:= { N X:= 10,Y:= 20+N}

separados por vi

Porem, deve-se notar que, ja que o bloco de codigo recebe um parametro, um valor deve ser passado quando o bloco de codigo for avaliado. c:= Eval(B,1) ==> 21 Blocos de Codigo geralmente sao utilizados para executar tarefas quando eventos de objetos sao acionados ou para modificar o comportamento padrao de algumas funo es. >> Funoes de Manipulaao de Blocos de Codigo EVAL(bBloco, xParam1, xParam2, xParamZ) utilizada para avaliaao direta de um bloco de codigo, utilizando as informaoes dis poniveis no mesmo de sua execuao. Esta funao permite a definiao e passagem de diver sos parametros que serao considerados na interpretaao do bloco de codigo. DBEVAL(bBloco,bFor,bWhile) permite que todos os registros de uma determinada tabela sejam analisados e para registro sera executado o bloco de codigo definido. AEVAL(aArray,bBlobo,nInicio,nFim) permite que todos os elementos de um determinado array sejam analisados e para c ada elemento sera executado o bloco de codigo definido. --------------------------------------------------!!! Funoes Tipos e escopos de funoes: no ADVPL podem ser utilizados os seguintes tipos de fu noes: Function(); User Function(); Static Function(); Main Function(); > Funoes do tipo Function() somente podem ser executadas por meio dos modulos do ERP > Somente poderao ser compiladas funoes do tipo Function() se o MP-IDE possuir um a autorizaao especial fornecida pela Microsiga. > Funcoes do tipo Function() sao acessiveis por quaisquer outras funoes em uso pel a aplicaao. O interpretador acrescenta "U_" no inicio das User Function() para diferenciar d as demais. POrtanto e recomendado que se utilize ate 8 caracteres para evitar re sultados indesejados. >> As Static Function() sao utilizadas para: >padronizar o nome de uma determinada funao, que possui a mesma finalidade, mas c uja implementaao pode variar de acordo com a necessidade de funao principal / apli caao. >redefinir uma funao padrao da aplicaao, adequando-a s necessidades especificas de uma funao Principal/aplicaao

>proteger funoes de uso especifico de um arquivo de codigo fonte/funao principal. >> Uma Main Function() tem a caracteristica de poder ser executada por meio da t ela inicial de parametros do client do ERP (Microsiga Protheus Remote), da mesma forma que uma User Function, com a diferena que as Main Functions somente podem ser desenvolvidas com o uso da autorizaao de compilaao, tornando sua utilizaao rest rita inteligencia Microsiga Protheus. Na aplicaao ERP comum o uso das Main Function() nas seguintes situaoes: 1- Definiao dos modulos da aplicaao ERP: Main Function Sigaadv() 2- Definiao de atualizaoes e updates APT10TOMP811() 3- Atulizaoes especificar de modulos da aplicaao ERP: UpdateATF() -----------------------------------------------------------------!!!Funoes Os parametros das Funoes descritas em ADVPL sao posicionais. Na sua passagem nao importa o nome da variavel e sim a sua posiao dentro da lista de parametros: pass agem de parametros por conteudo e passagem de parametros por referencia. ex: User Function CalcFator(nFator) Local nCnt Local nResultado := 0 For nCnt := nFator to 1 Step -1 nResultado *= nCnt Next nCnt Alert("O fatorial de"+ cValToChar(nFator)+; ""+cValToChar(nResultado)) Return a funao acima recebe como parametro a variavel 'nFator'. > exemplo de uso do Operador Default: User Function CalcFator(nFator) Local nCnt Local nResultado := 0 Default nFator := 1 For nCnt := nFator to 1 step -1 nResultado *= nCnt Next nCnt Return nResultado caso o parametro nao seja informado na funao chamadora, o mesmo tera seu valor de finido como 1. --------------------------------------------------------------------------!!! Diretivas de Compilaao O compilador ADVPL possui uma funcionalidade denominada pre-processador. um prog rama que examina o programa fonte escrito em ADVPL e executa certs modificaoes, b aseadas nas diretivas de compilaao. As diretivas de compilaao sao comandos nao compilados. Sao dirigidos ao pre-proce ssador, o qual e executado pelo compilador antes da execuao do processo de compil aao propriamente dito.

Portanto, o pre-processador modifica o programa fonte, entregando para o compila dor um programa modificado de acordo com as Diretivas de COmpilaao, iniciadas pel o caractere '#'. Lembre-se que as Diretivas de Compilaao tambem sao conhecidas co mo UDC: User Defined Commands. >>> #INCLUDE: indica em que arquivo de extensao 'CH' (padrao ADVPL) estao os UDC's a s erem utilizados pelo pre-processador. A aplicaao ERP possui diversos includes, os quais devem ser utilizados segundo a aplicaao que ser desenvolvida, o que permiti ra a utilizaao de recursos adicionais definidos para a linguagem, implementados p ela area de Tecnologia da Microsiga. Os include mais utilizados nas aplicaoes ADV PL desenvolvidas para o ERP: > PROTHEUS.CH sao diretivas de compilaao padroes para a lingugagem. Contem a especificaao da ma ioria das sintaxes utilizadas nos fontes, inclusive permitindo a compatibilidade da sintaxe tradicional do Clipper para os novos recursos implementados no ADVPL . O include PROTHEUS.CH ainda contem a referencia a outros includes utilizadas p ela linguagem ADVPL que complementam esta funcionalidade de compatibilidade com a sintaxe Clipper, tais como: DIALOG.CH FONT.CH INI.CH PTMENU.CH PRINT.CH a utilizaao do include PROTHEUS.CH nos fontes desenvolvidos para a aplicaao ERP Pr otheus obrigatoria e necessaria ao correto funcionamento das aplicaoes. > AP5MAIL.CH permite a utilizaao da sintaxe tradicionnal na definiao das seguintes funoes de en vio e recebimento de e-mail: CONNECT SMTP SERVER; CONNECT POP SERVER; DISCONNECT SMTP SERVER; DISCONNECT POP SERVER; POP MESSAGE COUNT; SEND MAIL FROM; GET MAIL ERROR; RECEIVE MAIL MESSAGE; > TOPCONN.CH permite a utilizaao da sintaxe tradicional na definiao das seguites funoes de inte graao com a ferramenta TOPCONNECT (MP10 - DbAcess): TCQUERY > TBICONN.CH permite a utilizaao da sintaxe tradicional na definiao de conexoes com a aplicaao Server do Ambiente ERP, por meio das seguintes sintaxes: CREATE RPCCONN; CLOSE RPCCONN; PREPARE ENVIROMENT;

RESET ENVIROMENT; OPEN REMOTE TRANSACTION; CLOSE REMOTE TRANSACTION; CALLPROC IN; OPEN REMOTE TABLES; > XMLXFUN.CH permite a utilizaao da sintaxe tradicional na manipulaao de arquivos e strings no padrao XML, por meio das seguintes sintaxes: CREATE XMLSTRING; CREATE XMLFILE; SAVE XMLSTRING; SAVE XMLFILE; ADDITEM TAG; ADDNODE NODE; DELETENODE; Dica: as funoes desenvolvidas para a aplicaao ERP costumam utilizar includes para definir o conteudo de strings e variaveis diversas utilizadas pela aplicaao em di ferentes idiomas. Desta forma normal verificar que um fonte possui um arquivo .C H com o mesmo nome, o que caracteriza esse tipo de include. >>> #DEFINE permite que o desenvolvedor crie novos termos para serem utilizados no codigo f onte. Este termo tem o efeito de uma variavel de escopo Public, mas que afeta so mente o fonte o qual o #DEFINE esta definido, com a caracteristica de nao permit ir a alteraao de seu conteudo. Desta forma um termo definido por meio da diretiva #DEFINE pode ser considerado como uma constante. Dica: os arquivos de INCLUDE, definidos para as fontes da aplicaao ERP, contem di retivas #DEFINE para as strings de textos de mensagens exibidas para os usuarios nos tres idiomas com os quais a aplicaao distribuida. Portugues, Ingles e Espanh ol. Por esta razao a aplicaao ERP posui tres repositorios distintos para cada uma das bases de dados homologadas pela Microsiga, pois cada compilaao utilizada uma diretiva referente ao seu idioma. >>> #IFDEF, IFNDEF, #ELSE; #ENDIF permitem ao desenovlvedor criar fontes flexiveis e sensiveis a determinadas con figuraoes da aplicaao ERP. Por meio destas diretivas, podem ser verificados parame tros do Sistema, tais como o idioma com o qual est parametrizado e a base de dado s utilizada para armazenar e gerenciar as informaoes do ERP. Desta forma um termo definido por meio da diretiva #DEFINE pode ser considerado como uma constante. Diretivas de compilaao estao normalmente associadas as seguintes verificaoes de Am biente: Idioma: verifica as variaveis 'spanish' e 'english, disponibilizadas pela aplicaa o. O idioma portugues determinado pela exceao: ex: #IFDEF SPANISH #DEFINE STR001 "Hola !!!" #ELSE

#IFDEF ENGLISH #DEFINE STR001 "Hello !!!" #ELSE #DEFINE STR001 "Ol !!!" #ENDIF #ENDIF Importante: apesar da estrutura semelhante ao IF-ELSE-ELSEIF-ENDIF, nao existe a diretiva de compilaao #ELSEIF, o que torna necessario o uso de diversos #IFDEFs para a montagem de uma estrutura que seria facilmente solucionada com IF-ELSE-EL SEIF-ENDIF. A aplicaao ERP disponibiliza a variavel de escopo PUBLIC - ___LANGUAGE, a qual co ntem uma string que identifica o idioma em uso pelo Sistema, cujo os conteudos p ossiveis sao: PORTUGUESE, SPANISH, ENGLISH. Banco de Dados: verifica as variaveis AXS e TOP para determinar se o banco de dados em uso pela aplicaao esta no formato ISAM (DBF, ADS, CTREE, etc.) ou se esta utilizando a fe rramenta TOPCONNECT (DbAcess). ex: #IFDEF TOP cQuery := "SELECT * FROM"+ RETSQLNAME("SA1") dbUserArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"SA1QRY",.T.,.T.) #ELSE DbSelectArea("SA1") #ENDIF os bancos de dados padrao AS400 nao permitem a execuao de queries no formato SQLA NSI por meio da ferramenta TOPCONNECT (DbAcess). Desta forma necessario realizar uma verificaao adicional ao #IFDEF TOP antes de e xecutar uma query, que no caso realizado por meio do uso da funao TcSrvType(), a qual retorna a string "AS/400" quando este for o banco em uso. Para estes bancos deve ser utilizada a sintaxe ADVPL tradicional. >>> #COMMAND por meio da diretiva #COMMAND, o desenvolvedor determinou as regras para que a sintaxe tradicional da linguagem CLIPPER para o comando SAY fosse convertida na especificaao de um objeto TSAY() do ADVPL. -------------------------------------------------------------------!!! Programaao ADVPL - ERP Microsiga Protheus O ADVPL (Advanced Microsiga Protheus Langugage) ma linguagem de programaao desenv olvida pela Microsiga e que contem todas as instruoes e funoes necessarias ao dese nvolvimento de um Sistema, independente de sua complexidade. O Microsiga Protheus por outro lado, uma plataforma tecnologica que engloba um S ervidor de Aplicaao, um Dicionario de Dados, e as Interfaces para conexao com o u suario. Microsiga Protheus que executa o codigo ADVPL e o devido acesso base de dados. O Microsiga Protheus composto pelo ERP (que engloba, alm das funcionalidades desc ritas nos capitulos anteriores, mais de trinta verticais aplicadas a areas espec ificas de negocios) e pelo Configurador (programa que permite customizar o siste ma s necessidades do usurio de forma fcil).

O Microsiga Protheus constituido de um conjunto de Softwares que compoe as camad as de funcionalidades basicas aos servidores de aplicaao, interface, banco de dad os e repositorio. Camadas basicas do Ambiente Microsiga Protheus > Windows / Linux Browser - [Client]: Client(TOTVSSmartCliente.exe) Client(WEB) ActiveX > Windows / Linux / Unix - [Aplication Server]: RPO(TTTP10.RPO) Server(TOTVSAppServer.exe) Monitor > Windows / Linux / Unix - [Database Server]: DBF/CTREE TopConnect SQL Server Sybase Oracle DB2 PostGres MySql (...) Apos compilar o programa, o resultado um objeto o qual carregado na memoria fica ndo disponivel para sua execuao por meio da aplicaao Microsiga Protheus. O Objeto nao executavel, ou seja, nao esta convertido para a linguagem nativa do equipame nto. Quem faz esse trabalho o Microsiga Protheus Server em tempo de execuao. Por isso, o Microsiga Protheus Server esta sempre presente na memoria em tempo de ex ecuao, permitindo: > proteger o programa fonte, evitando que seja alterado indevidamente, pois some nte os objetos sao distribuidos com uma execuao mais rapida em funao da compilaao n o DEV-Studio; > que o Sistema cresa de forma ilimitada, pois os objetos ficam fora do executave l; > o uso de macro substituioes, ou seja, o uso de rotinas exteriores ao Sistema ar mazenadas em arquivos e que podem ser facilmente alteradas pelo usuario, pois o server tambem interpreta o codigo fonte em tempo de execuao. ! Manutenao no repositorio de Objetos: o repositorio de objetos a biblioteca de objetos de todo o Ambiente Microsiga Protheus, incluindo tanto os objetos implementados para as funcionalidades bsica s do ERP como aqueles gerados pelo usuario. No caso de conexoes ISAM, o Server comunica-se diretamente com os dados. Em banc os SQL, a interface TOPCONNECT DBACESS que converte os comandos de entrada e s aida, adequando-os ao SQL utilizado. Uma vez terminado o processamento do objeto chamado, ele descartado da memoria,

ou seja, o Microsiga Protheus um Sistema que pode crescer de forma ilimitada poi s, os objetos armazenados em um repositorio, praticamente nao ocupam espao no HD. O Microsiga Protheus e uma plataforma com multicamadas. Entre as diversas camada s, temos a interface de apresentaao ao usuario (Remote), o tratamento dado para a s regras de negocio implementadas (Server), o acesso aos dados disponiveis no Ba nco de Dados (Server ou TOPCONNECT DBACESS) e ao gerenciamento de servios WEB ( Server). Neste processo, o Microsiga Protheus possui basicamente, quatro aplicat ivos utilizados com diferentes finalidades: > Microsiga Protheus Server / TOTVS AppServer: responsavel pela comunicaao entre o cliente, o banco de dados e o RPO. O nome do executavel depende da versao do sistema, sendo que as plataformas ISAM suportada s pelo Microsiga Protheus Server sao DBF e CTREE. > Microsiga Protheus Remote / TOTVS SmartClient: instalado no server ou na estaao. O nome tambem depende da versao do sistema. >TopConnect / DbAcess; > Microsiga Protheus Monitor / TOTVS Monitor: programa de analise que verifica quem esta usando o sistema e possibilita o envi o de mensagens ou mesmo derrubar conexoes. Alguns nomes referem-se a um conjunto de programas para facilitar a sua indentif icaao: RPO: o arquivo binario do APO, ou seja, os objetos. Build: executaveis, Dlls, e o RPO completo. Patch: atualizaoes pontuais do RPO, aplicadas por meio do IDE. Update: pacote de atualizaao para o repositorio (RPO) liberado periodicamente con tendo todas as adeuqaoes e melhorias disponibilizadas para o Sistema em um determ inado periodo, sendo nao cumulativo, aplicadas por meio do DEV-Studio. Propriedades dos Atalhos: > totvsAppServer Console ou Debug: executado como uma janela Console, as informaoes recebidas das conexoes com o Tot vsAppServer conectado sao exibidas diretamente na tela do console do TotvsAppSer ver, bem como informaoes de nao conformidades. Install: se o totvsAppServer nao for instalado como um Servio do NT, durate a instalaao ist o pode ser realizado, executando-o com a opao de Linha de Comando. Remove: para remove-lo da lista de servios do NT, pode-se executa-lo com a opao de linha d e comando. > totvsSmartClient Q (quiet): indica que o client nao devera mostrar o splash, e a tela de indentificaao de par ametros iniciais necessita ser acompanhada da clausula -P.

P (main program): identifica o programa (APO) inicial. E (enviroment): nome da seao de enviroment, no (Ini do Server), que sera utilizada para definioes gerais. C (connection): nome da seao de conexao, que sera utilizada para a conexao ao totvsAppServer. M (allowMultiSession): permite multiplas instancias (copias) do totvsSmartClient, na mesma maquina, o q ue por Default nao e permitido. Os parametros que configuram o local do RPO, o banco de dados, os arquivos de me nus, configuraoes e customizaoes do Sistema no arquivo INI sao: > SourcePath: indica o local de origem dos objetos. o endereo do Repositorio de Objetos. Ex: So urcePath=C:\Protheus\APO > RootPath: aponta para a pasta raiz (inicial), a partir da qual serao localizados os dados (no caso de ISAM), bem como o proprio Dicionario de Dados. Ex: RootPath=C:\Proth eus\Protheus_DATA > StartPath: indica qual a pasta dentro da pasta raiz (informada no parametro RootPath) que c ontem os arquivos de menus, os arquivos de configuraoes e os arquivos de customiz aoes (SXs) do sistema Microsiga Protheus. Ex: StartPath=\SYSTEM\ -------------------------------------------------!!! O configurador do Protheus ARQUIVO SIGAMAT SIGAPSS SIX SX1 SX2 SX3 SX4 SX5 SX6 SX7 SX8 SX9 SXA SXB SXD SXE SXF SXG SXK SXO SXP SXQ DESCRIAO cadastro de empresas e filiais do sistema arquivo de usuarios, grupos e senhas do sistema indices dos arquivos perguntas e respostas mapeamento de tabelas dicionario de dados agenda do schedulle de processos tabelas parametros gatilhos de interface fora de uso relacionamento entre tabelas pastas cadastrais apontadas no sx3 consulta por meio da tecla f3 (consulta padrao) controle do schedule de processos sequencia de documentos (+1) sequencia de documentos (proximo) tamanho padrao para campos apontado pelo sx3 resposta de perguntas (sx1) por usuarios controle de logs por tabela historico de logs cadastrados no SXO cadastro de filtros inteligentes da mbrowse (contem as informaoes

necessarias para a criaao do filtro. SXR cadastro de relacionamento entre programa X filtro (utilizada in ternamente pelo Microsiga Protheus para verificar em quais program as os filtros poderao ser utilizados). SXS cadastro de programas (utilizaao na validaao para mostrar/inibir o s filtros na execuao da mbrowse). SXT tabela de usuarios (contem as informaoes ds usuarios que poderao utilizar os filtros da mbrowse). SXOffice cadastro de relacionamento entre as entidades (tabelas) e as con sultas TOII. -Para permitir uma utilizaao adequada das tabelas de dados do Sistema por cada um dos ambientes da aplicaao ERP, as tabelas foram divididas em grupos denominados " familias". Cada modulo pode utilizar uma ou mais familias de tabelas especificas para suas atividades, e ainda compartilhar informaoes com outros modulos por mei o de familias comuns a todas as operaoes realizadas no Sistema. AMBIENTE SIGAATF SIGACOM SIGACON SIGAEST SIGAFAT SIGAFIN SIGAFIS SIGAPCP SIGAGPE SIGAFAS SIGAVEI SIGALOJ SIGATMK SIGAOFI SIGAPON SIGAEIC SIGATCF SIGAMNT SIGARSP SIGAQIE SIGAQMT IDENTIFICAAO ativo fixo compras contabilidade estoque e custos faturamento financeiro livros fiscais planejamento e controle da produao gestao de pessoal faturamento de servios veiculos controle de lojas / automaao comercial callcenter oficinas ponto eletronico easy import control terminal manutenao de ativos recrutamento e seleao de pessoal inspeao de entrada - qualidade metodologia - qualidade

O nome de cada tabela no Microsiga Protheus constituido de seis digitos, os quai s sao utilizados para formar a seguinte repreentaao: o 1 digito representa a familia, o 2 pode ser utilizado para detalhar ainda mais a familia especificada no primeiro nivel (subfamilia), e o 3 a numeraao sequenci al das tabelas da familia iniciando em '0' e terminando em 'Z'. Os dois ultimos digitos identificam a que empresa as tabelas estao vinculadas, lembrando que a i nformaao de filial esta contida nos dados da tabela. O ultimo digio e fixo em '0' . FAMILIA DESCRIAO S tabelas pertencentes ao sistema basico, tambem chamado Classic S A cadastros de entidades compartilhadas entre os ambientes (client es, fornecedores, bancos, entre outros). S B cadastros dos ambientes de Materiais (produtos, saldos, entre ou tros)

S C arquivos de movimentaoes diversas utilizados pelos ambientes de m ateriais (solicitaao ao almoxarifado, solicitaao de compras, pedido de compras, pedido de vendas, ordens de produao entr outros). S D arquivosde movimentaao de estoque (itens de notas fiscais de entr ada e saida, movimentos internos de estoque, entre outros). S E cadastros de movimentaoes do ambiente financeiro. S F cadastros de movimentaoes fiscais (cabealhos das notas fiscais de entrada e saida, cadastro de tipos de entrada e saida, livros fis cais, entre outros). S G cadastros do ambiente de planejamento e controle de produao. S H movimentos do ambiente de planejamento e controle de produao. S I cadastros e movimentos do ambiente contabil (descontinuado) S N cadastros e movimento do ambiente Ativo Fixo S R cadastros e movimento do ambiente Gestao de Pessoal S X tabelas de configuraao do sistema S Z tabelas livres para utilizaao e projetos especificos em clientes. A gestao de projetos C contabilidade gerencial C T contabilidade gerencial C V contabilidade gerencial C W contabilidade gerencial D transportadora e derivados E comercio exterior e derivados G gestao hospitalar J gestao educacional N servios publicos P reservado para projetos da fabrica de software Q qualidade e derivados R recursos humanos e derivados T plano de saude W workflow Z tabelas livres para utilizaao e projetos especificos em clientes em adiao a familia SZ. Os arquivos de indices das tabelas de Sistema serao criados de acordo com banco de dados utilizado (ISAM ou conexao vai TOPCONNECT). Para bancos ISAM, serao ger ados arquivos com a mesma nomenclatura da tabela de dados, mas com uma extensao diferenciada (atualmente .CDX). No caso da utilizaao de um banco de dados, cada i ndice sera uma numeraao sequencial em funao do nome da tabela original. As especif icaoes das chaves de indices de cada uma das tabelas esta disponivel no arquivo d e Sistema SIX, e a chave unica da tabela utilizada para banco de dados esta desc rita na tabela SX2. > Menus Cada modulo da aplicaao ERP possui um menu padrao com todas as funcionalidades di sponiveis para o Ambiente, menu este definido por meio de sintaxe XML (arquivos .XNU). Os menus possuem uma estrutura padrao que permite ao usuario localizar e identif icar facilmente cada uma das funcionalidades oferecidas pelo Ambiente. > Para executar o modulo configurador, necessario que a aplicaao Microsiga Protheus Server esteja em execuao e por meio da aplicaao Microsiga Protheus Remote devera ser informada como programa incial a opao SIGACFG. ------------------------------------------------------------------------!!! Flexibilidades e Customizaoes por meio do configurador principais funcionalidades do configurador:

ambiente usuario base de dados empresas ajuda O configurador e o programa basico para o processo de customizaao do Microsiga Pr otheus atraves da alteraao das tabelas da familia SX. Nele o usuario responsavel pela implantaa configura as informaoes que serao utilizadas pelos demais Ambientes do Sistema. A ideia do Dicionario de Dados permitir que o usuario possa incluir ou inibir ca mpos, ou mesmo alterar as propriedades dos campos existentes, podendo ainda cria r novas tabelas. Os programas ao inves de terem campos definidos em seu codigo original, leem o D icionario em tempo de execuao, montando arrays com as propriedades de cada um. A partir dai, sua utilizaao normal, por meio do uso de funoes do ADVPL que tornam o trabalho do desenvolvedor transparente a esta arquitetura. > Adiao de Tabelas > Adiao de Campos s Tabelas do Dicionario de Dados O Nickname uma identificaao complementar do indice que pode ser utilizado para au xiliar o desenvolvedor na utilizaao desta ordem em uma aplicaao, a qual pode ser p adrao do Sistema ou especifica de um cliente. Para selecionar os campos ja cadastrados na tabela, pode ser utilizado o botao " Campos()". Esta facilidade preenche, automaticamente, os campos de descrio. O campo relativo filial sempre faz parte dos indices, com exceao do SM2, para que os registros nas tabelas estejam agrupados por filiais, independente desta tabe la ser compartilhada entre as filiais. Uma tabela podera ter varios indices cadastrados no Dicionario de Dados. Em dete rminado momento, porem, apenas um deles oferecera acesso ao registro. Essa ordem pode ser alterada em tempo de execuao pelos programas da aplicaao, por meio do co mando DBSetOrder(), ou por meio da definiao de uma ordem especifica na utilizaao d e Queries para acesso aos dados diretamente em bancos de dados de ambientes TOPC ONNECT (DbAcess). > Adiao de gatilhos para os campos das tabelas selecione gatilhos e clique em Incluir; preencha as informaoes e clique em confir mar. Podem haver varios gatilhhos para o mesmo campo. A ordem de execuao determinada p elo campo "Sequencia" Os tipos Gatilho Primario, Estrangeiro e de Posicionamento definem se o Contra D ominio um campo da mesma tabela, de outra tabela ou se o gatilho deve realizar u m posicionamento, respectivamente. A regra pode ser uma expressao que resulta em um valor a ser preenchido no Contr a Dominio. O posicionamento igual a Sim indica que sera executado um comando de busca do re gistro de acordo com a chave indicada. O Alias, a Ordem e a Chave descrevem a tabela envolvida no gatilho, seu indice e a chave para que a funcionalidade se posicione no registro adequado.

> Criaao de tabelas Genericas selecione os menus Ambiente, Cadastros, Tabelas. Selecione a opao Tabelas, serao exibidos os itens ja cadastrados no arquivo de Sistema SX5. Utilize o botao 'Inc luir', preencha as informaoes e confirme. > Criaao de Parametros selecione os menus Ambiente, Cadastros, Parametros. Selecione a opao tabelas, ser ao exeibidos os itens ja cadastrados no arquivo de Sistema SX6. Utilize o botao Incluir, preencha as informaoes e confirme. ----------------------------------------------------------!! TOTVS Development Studio Um programa, para ser compilado, deve ser vinculado a um projeto. Normalmente, p rogramas que fazem parte de um determinado modulo ou Ambiente estao em um mesmo projeto. A vinculao dos programas a um projeto feita por meio dos arquivos tipo RPW. Na ver dade, um projeto pode ser constituido de um ou mais arquivos deste tipo, que por sua vez, podem ter uma ou mais funoes. Uma vez adicionado a um projeto e compilado sem incidencias de erros no codig, o objeto resultante sera cadastrado no RPO (Repositorio de Objetos) e podera ser utilizado pela aplicaao ERP. A compilaao dos intens de um projeto pode ser realizada individualmente, por grup o ou fontes (pastas), ou ainda selecionando-o inteiramente. Cada um dos fontes s era processado e compilado separadamente, premitindo a visualizaao do progresso d a operaao e das mensagens de aviso (warnings) ou erros (criticals) na guia Mensag ens. > Para que os objetos compilados e disponiveis no RPO sejam utilizados, devem se r observados as seguints regras: 1- Se o programa nao manipula arquivos, pode-se chama-lo diretamente do DEV-Stud io (nome do lado direito da barra de ferramentas); 2- Se o programa manipula tabelas, existem duas opoes: -Adicionar o programa no menu de um dos ambientes e executa-lo atraves do Remot e; -Realizar a preparaao do ambiente na propria rotina, permitindo sua execuao diret amente pelo DEV-Studio; 3- Nao se pode compilar um programa com o Remote e o Monitor abertos, tenha este sido finalizado ou nao por erro. Por meio da janela Watch's possivel determinar quais variaveis devem ser exibida s; Na pilha de chamadas, verifica-se a sequencia de chamadas de funoes; Na pasta 'Comandos', pode-se, enquanto o programa estiver pausado, escrver qualq uer comando e ao dar Enter, ele executado, permitindo pesquisar palavras e expre ssoes no proprio fonte ou em qualquer fonte de armazenamento no HD; Ao parar, pode-se continuar o programa ate o proximo ponto de parada, caso haja um outro definido, ou executar linha a linha da rotina. --------------------------------------------------------------------------------

-------!!! Acesso e Manipulaao da Base de Dados > Funoes de manipulaao de dados genericas As funoes de manipulaao de dados ditas genericas permitem que uma aplicaao aDVPL se ja escrita da mesma forma, independentemente se a base de dados configurada para o Sistema ERP for do tipo ISAM ou padrao SQL. Muitas destas funoes foram inicialmente herdadas da linguagem CLIPPER, e mediante novas implementaoes da area de Tecnologia da Microsiga foram melhoradas e adequa das s necessidades do ERP. Por esta razao, possivel encontrar em documentaoes da l ingugagem CLIPPER informaoes sobre funoes de manipulaao de dados utilizadas na ferr amenta ERP. Dentre as melhorias implementadas pela area de tecnologia da Microsiga, podemos menscionar o desenvolvimento de novas funoes como, por exemplo, a funoes MsSeek() - versao da Microsiga para a funao DbSeek(), e a integraao entre a sintaxe ADVPL c onvencional e a ferramenta de acesso a bancos de dados no padrao SQL - TOPCONNEC T (DbAcess). A integraao entre a aplicaao ERP e a ferramenta TOPCONNECT permite que as funoes de acesso e manipulaao de dados escritas em ADVPL sejam interpretadas e convertidas para uma sintaxe compativel com o padrao SQL ANSI e, desta forma, aplicadas aos SGBDs com sua sintaxe nativa. >> Diferenas e Compatibilidades entre Bases de Dados: Acesso a dados e indices No acesso a informaoes em bases de dados no padrao ISAM, sao sempre lidos os regi stros inteiros, enquanto no SQL pode-se ler apenas os campos necessarios naquele processamento. O acesso direto feito por meio de indices que sao tabelas paralelas s tabelas de dados e que contem a chave e o endereo do registro, de forma analoga ao indice de um livro. Para cada chave, criado um indice proprio. Nas bases de dados padrao ISAM os indices sao armazenados em um unico arquivo do tipo CDX. J nos bancos de dados padrao SQL, cada indice criado com uma numeraao s equencial tendo como base o nome da tabela ao qual ele esta relacionado. A cada inclusao ou alteraao de um registro todos os indices sao atualizados, torn ando necessario planejar adequadamente quais e quantos indices serao definidos p ara uma tabela, pois uma quantidade excessiva pode comprometer o desempenho dest as operaoes. Deve ser considerada a possibilidade de utilizaao de indices temporarios para pro cessos especificos, os quais serao criados em tempo de execuao da rotina. Este fa tor deve levar em consideraao o "esforo" do Ambiente a cada execuao da rotina e a p eriodicidade com a qual executada. Estrutura dos registros (informaoes): Nas bases de dados padrao ISAM, cada registro possi um identifcador nativo ou ID sequencial e ascendente que funciona como o endereo base daquela informaao. Este ID, mas conhecido como o RECNO ou RECNUMBER, gerado no momento de incluso do regi stro na tabela e somente sera alterado caso a estrutura dos dados desta tabela s ofra alguma manutenao.

Dentre as manutenoes que uma tabela de dados ISAM pode sofrer, pode-se citar a ut ilizaao do comando PACK, o qual ira apagar fisicamente os registros deletados da tabela forando uma remuneraao dos identificadores de todos os registros. Esta situ aao tambem torna necessaria a recriaao de todos os indices vinculados quela tabela. Isto ocorre nas bases de dados ISAM devido ao conceito de exclusao logica de reg istros que as mesmas possuem. J nos bancos de dados padrao SQL nativamente utilizam apenas o conceito de exclus ao fisica de registros, o que para as outras aplicaoes seria transparente, mas na o o caso do ERP Microsiga Protheus. Para manter a compatibilidade das aplicaoes desenvolvidas para bases de dados pad rao ISAM, a area de Tecnologia e Banco de Dados da Microsiga implementou, nos ba ncos de dados padrao SQL, o conceito de exclusao logica de registros existentes nas bases de dados ISAM, por meio da criaao de campos de controle especificos: R_ E_C_N_O_, D_E_L_E_T_ e R_E_C_D_E_L_. Estes campos permitem que a aplicaao ERP gerencie as informaoes do banco de dados da mesma forma que as informaoes em bases de dados ISAM. Com isso, o campo R_E_C_N_O_ ser um identificador unico do registro dentro da tab ela, funcionando como o ID ou RECNUMBER de uma tabela ISAM, mas utilizando um re curso adicional disponivel nos bancos de dados relacionais conhecido com Chave P rimaria. Para a aplicaao ERP Microsiga Protheus, o campo de controle R_E_C_N_O_ definido e m todas as tabelas como sendo sua chave primaria, o que transfere o controle de sua numeraao sequencial ao banco de dados. O campo D_E_L_E_T_ tratado internamente pela aplicaao ERP como um "flag" ou marca de exclusao. Desta forma, os registros que estiverem com este campo marcado ser ao considerados como excluidos logicamente. A execuao do comando PACK em uma tabe la de um banco de dados padrao SQL visa excluir fisicamente os registros com o c ampo D_E_L_E_T_ marcado, mas nao causara o efeito de renumeraao de RECNO (no caso R_E_C_N_O_) que ocorre nas tabelas de bases de dados ISAM. >> Funoes de acesso e manipulaao de dados DBRLOCK(xIdentificador): funao de base de dados, que efetua o lock do registro identificado pelo parametro xIdentificador. Este parametro pode ser o Recno() para tabelas em formato ISAM, ou a chave primaria para bancos de dados relacionais. Se o parametro xIdentificador nao for especificado, todos os locks da area de tr abalho serao liberados, e o registro posicionado sera travado e adicionado em um a lista de registros bloqueados. DBCLOSEAREA() / DBCOMMIT(): permite que um alias presente na conexao seja fechado, o que viabiliza seu reuso em outra operaao. Este comando tem efeito apenas no alias ativo na conexao, send o necessaria sua utilizaao em conjunto com o comando DbSelectArea(). DBCOMMITALL(): efetua as atualizaoes pendentes em todas as areas de trabalho em uso pela thread (conexao) ativa. DBDELETE(): efetua a exclusao logica do registro posicionado na area de trabalho ativa, send o necessaria sua utilizaao em conjunto com as funoes RecLock() e MsUnLock(). DBGOTO(nRecno):

move o cursor da area de trabalho ativa para o record number (renco) especificad o, realizando um posicionamento direto, sem a necessidade uma busca (seek) previ o. DBGOTOP(): move o cursos da area de trabalho ativa para o primeiro registro logico. DBGOBOTTON(): move o cursor da area de trabalho ativa para o ultimo registro logico. DBRLOCKLIST(): retorna um array contendo o record number (recno) de todos os registros travados da area de trabalho ativa. DBSEEK(cChave, ISoftSeek, ILast): permite posicionar o cursor da area de trabalho ativo no registro com as informao es especificadaas na chave de busca, fornecendo um retorno logico indicando se o posicionamento foi efetuado com sucesso, ou seja, se a informaao especificada na chave de busca foi localizada na area de trabalho. MSSEEK(cChave, ISoftSeek, ILast): funao desenvolvida pela area de Tecnologia da Microsiga, a qual possui as mesmas funcionalidades basicas da funao DbSeek(), com a vantagem de nao necessitar acess ar novamente a base de dados para localizar uma informaao ja utilizada pela threa d (conexao) ativa. DBSKIP(nRegistros): move o cursos do registro posicionado para o proximo (ou anterior dependendo do parametro), em funao da ordem ativa para a area de trabalho. DBSELECTAREA(nArea cArea): define a area de trabalho especificada como sendo a area ativa. Todas as operaoes subsequentes que fizerem referencia a uma area de trabalho a utilizaao, a menos que a area desejada seja informada explicitamente. DBSETFILTER(bCondiao, cCondiao): define um filtro para a area de trabalho ativa, o qual pode ser descrito na form a de um bloco de codigo ou por meio de uma expressao simples. DBSETORDER(nOrdem): define qual indice sera utilizada pela area de trabalho ativa, ou seja, pela are a previamente selecionada por meio do comando DbSelectArea(). As ordens disponiv eis no Ambiente Protheus sao aquelas definidas no SINDEX/SIX, ou as ordens dispo nibilizadas por meio de indices temporarios. DBORDERNICKNAME(NickName): define qual indice criado pelo usuario seja utilizado. O usuario pode incluir os seus proprios indices e no momento da inclusao deve criar o NICKNAME para o mes mo. DBUNLOCK(): mesma funcionalidade da funao UNLOCK(), so que recomendada para ambientes de rede nos quais os arquivos sao compartilhados. Libera o travamento do registro posic ionado na area de trabalho ativa e confirma as atualizaoes efetuadas naquele regi stro. DBUNLOCKALL() libera o travamento de todos os registros de todas as areas de trabalho disponiv eis na thread (conexao) ativa.

DBUSEAREA(INovo, cDriver, cArquivo, cAlias, ICompartilhado,; ISoLeitura): define um arquivo de base de dados como uma area de trabalho disponivel na aplic aao. MSUNLOCK() libera o travamento (lock) do registro posicionado confirmando as atualizaoes efe tuadas neste registro. RECLOCK(cAlias, lInclui): efetua o travamento do registro posicionado na area de trabalho ativa, permitind o a inclusao ou alteraao das informaoes do mesmo. RLOCK() -> lSucesso: efetua o travamento do registro posicionado na area de trabalho ativa. SELECT(cArea): determina o numero de referencia de um determinado alias em um ambiente de trbal ho. Caso o alias especificado nao esteja em uso no ambiente, sera retornado o va lor 0(zero). SOFTLOCK(cAlias): permite a reserva do registro posicionado na area de trabalho ativa de forma que outras operaoes, com exceao da atual, nao possam atualizar este registro. Difere da funao RecLock() pois nao gera uma obrigaao de atualizaao, e pode ser sucedido po r ele. Na aplicaao ERP Protheus, o SoftLock() utilizado nos browsers, antes da confirmaao da operaao de alteraao e exclusao, pois neste momento a mesma ainda nao foi efeti vada, mas outras conexoes nao podem acessar aquele registro pois o mesmo esta em manutenao; o que implementa da integridade da informaao. UNLOCK(): libera o travamento do registro posicionado na area de trabalho ativa e confirma as atualizaoes efetuadas naquele registro. A linguagem ADVPL permite que as funoes genericas sejam utilizadas independenteme nte da Base de Dados para a qual a aplicaao ERP esta configurada. Muitas vezes uma variavel pode ter o mesmo nome que um campo de um arquivo ou de uma tabela aberta no momento. Neste caso, o ADVPL privilegiara o campo, de form a que uma referencia a um nome que identifique tanto uma variavel como um campo, resultara no conteudo do campo. Para especificar qual deve ser o elemento referenciado, deve-se utilizar o opera dor de identificaao de apelido (->) e um dos identificadores de referencia: MEMVA R ou FIELD. ex: cRes:= MEMVAR->NOME Esta linha de comando identifica que o valor atribuido a variavel cRes deve ser o valor da variavel de memoria chamada NOME. ex: cRes:= CLIENTES->NOME Neste caso, o valor atribuido a quivo ou tabela abertos na area o pelo apelido de um arquivo ou ecionar a area antes de acessar cRes sera o valor do campo "NOME" existente no a atual. O identificador FIELD pode ser substituid tabela abertos, para evitar a necessidade de sel o conteudo de determinado campo.

As tabelas de dados utilizadas pela aplicaao ERP recebem automaticamente do siste ma o apelido ou ALIAS especificado para as mesmas no arquivo de Sistema SX2. Ass

im se o campo "NOME" pertence a uma tabela da aplicaao Microsiga Protheus, o mesm o podera ser referenciado com a indicaao do ALIAS pre-definido nesta tabela. ex: cRes:= SA1->NOME //SA1 - Cadastro de Clientes Os ALIAS das tabelas da aplicaao ERP sao padronizados em tres letras, que corresp onem as iniciais da tabela. As configuraoes de cada ALIAS utilizado pelo Sistema pode ser visualizadas por meio do modulo Configurador > Bases de Dados > Diciona rios > Bases de Dados. Semaforos: para definir o conceito do que um semaforo de numeraao, deve-se avaliar a seguint e sequencia de eventos no Sistema: Ao ser fornecido um numero, ele permanece reservado ate a conclusao da operaao qu e o solicitou; Se esta operaao for confirmada, o numero indisponibilizado, mas se a operaao for cancelada, o numero voltara a ser disponivel mesmo que naquele mom ento numeros maiores ja tenham sido oferecidos e utilizados. Com isso,mesmo que tenhamos varios processos solicitando numeraoes sequenciais pa ra uma mesma tabela, como, por exemplo, inclusoes simultaneas de pedidos de vend as, teremos para cada pedido um numero exlcusivo e sem os intervalos e numeraoes nao utilizadas. Os campos que recebem o tratamento de numeraao sequencial pela aplicaao ERP nao de vem ser considerados como chave primaria das tabelas as quais estao vinculados. No caso especifico da aplicaao ERP Protheus, a chave primaria em Ambientes TOPCON NECT sera o campo R_E_C_N_O_, e para bases de dados padrao ISAM o conceito de ch ave primaria e implementado pela regra de negocio do Sistema, pois este padrao d e dados nao possui o conceito de unicidade de dados. A linguagem ADVPL permite a utilizaao de funoes para o controle das numeraoes seque nciais utilizadas nas tabelas da aplicaao ERP. Funoes de controle de semaforos e numeraao sequencial: GETSXENUM(cAlias, cCampo, cAliasSXE, nOrdem): obtem o numero sequencia do alias especificado no parametro, por meio da referen cia aos arquivos de sistema SXE/SXF ou ao servidor de numeraao, quando esta confi guraao esta habilitada no ambiente Protheus. CONFIRMSXE(lVerifica): confirma o numero alocado por meio do ultimo comando GETSXENUM(). ROLLBACKSXE() descarta o numero fornecido pelo ultimo comando GETSXENUM(), retornando a numeraa o disponivel para outras conexoes. ------------------------------------------------------!!! Customizaoes para a Aplicaao ERP Validaoes de campos e perguntas do Sistema e de Usuarios; Inclusao de gatilhos em campos de Sistema e de Usuarios; Inclusao de regras em parametros de Sistema e de usuarios. Desenvolvimento de pontos de entrada para interagir com funoes padrao do Sistema;

Regras de Validaao: SX3 - validaao de usuario (X3_vlduser); SX1 - validaao da pergunta (X1_valid); EXISTCHAV(cAlias, cConteudo, nIndice): retorna .T. ou .F. se o conteudo especificado existe no alilas especificado. Cas o exista sera exibido um help de sistema com um aviso informando da ocorrencia. Funao utilizada normalmente para verificar se um determinado codigo de cadastro j a existe na tabela na qual a informaao sera inserida, como por exemplo o CNPJ no cadastro de clientes ou fornecedores. EXISTCPO(cAlias, cConteudo, nIndice): retorna .T. ou .F. se o conteudo especificado existe no alilas especificado. Cas o exista sera exibido um help de sistema com um aviso informando da ocorrencia. Funao utilizada normalmente para verificar se a informaao digitada em um campo, a qual depende de outra tabela, realmente existe nesta outra tabela, como por exem plo o codigo de um cliente em um pedido de venda. NAOVAZIO(): retorna .T. ou .F. se o conteudo do campo posicionado no momento nao esta vazio. NEGATIVO(): retorna .T. ou .F. se conteudo digitado para o campo negativo. PERTENCE(cString): retorna .T. ou .F. se conteudo digitado para o campo esta contido na string def inida como parametro da funao. Normalmente utilizada em campos com a opao de combo , pois caso contrario seria utilizada a funao ExistCpo(). POSITIVO(): retorna .T. ou .F. se conteudo digitado para o campo positivo. TEXTO(): retorna .T. ou .F. se conteudo digitado para o campo contem apenas numeros ou a lfanumericos. VAZIO(): retorna .T. ou .F. se conteudo digitado do campo posicionado no momento esta va zio. A - permite apenas caracteres alfabeticos. C - exibe CR depois de numeros positivos. E - exibe numerico com o ponto e virgula invertidos (formato Europeu). R - insere caracteres diferentes dos caracteres de template na exibiao, mas nao o s insere na variavel do GET. S<n> - permite rolamento horizontal do texto dentro do GET, <n> um numero inteir o que identifica o tamanho da regiao. X - exibe DB depois de numeros negativos.

Z - exibe zeros como brancos. ( - exibe numeros negativos entre parenteses com os espaos em branco iniciais. ) - exibe numeros negativos entre parenteses sem os espaos em branco iniciais. ! - converte caracteres alfabeticos para maiusculo. X - permite qualquer caractere. 9 - permite apenas digitos para qualquer tipo de dado, incluindo o sinal para nu mericos. # - permite digitos, sinais e espaos em branco para qualquer tipo de dado. * - exibe um asterisco no lugar dos espaos em branco iniciais em numeros. . - exibe o ponto decimal. , - exibe a posiao do milhar. As regras que devem ser observadas na montagem de um gatilho e configuraao de seu retorno sao Na definiao da chave de busca do gatilho, deve ser avaliada qual filial dever ser utilizada como parte da chave: a filial da tabela de origem do gatilho ou a fil ial da tabela que sera consultada. O que normalmente determina a filial que sera utilizada como parte da chave justamente a informaao que sera consultada. Na definiao da regra de retorno, deve ser considerado o tipo do campo que sera a tualizado, pois este campo que determina qual tipo do retorno sera considerado v alido para o gatilho. >> Funoes para manipulaao de parametros GETNEWPAR(cParametro, cPadrao, cFilial): retorna o conteudo do parametro especificado no arquivo SX6, considerando a fili al parametrizada na conexao. Caso o parametro nao exista sera exibido um help do sistema informando a ocorrrencia. Difere do SuperGetMV() pois considera que o p arametro pode nao existir na versao atual do sistema, e por consequencia nao ser a exibida a mensagem de help. GETMV(cParametro): retorna o conteudo do parametro especificado no arquivo SX6, considerando a fili al parametrizada na conexao. Caso o parametro nao exista sera exibido um help do sistema informando a ocorrencia. PUTMV(cParametro, cConteudo): atualiza o conteudo do parametro especificado no arquivo SX6, de acordo com as p arametrizaoes informadas. SUPERGETMV(cParametro, lHelp, cPadrao, cFilial): retorna o conteudo do parametro especificado no arquivo SX6, considerando a fili al parametrizada na conexao. Caso o parametro nao exista sera exibido um help do sistema informando a ocorrencia. Difere do GetMv() pois os parametros consultad os sao adicionados em uma area de memoria, que permite que em uma nova consulta nao seja necessario acessar e pesquisar o parametro na base de dados. Um parametro de sistema tem a finalidade de propiciar um retorno valido a um con

teudo previamente definido na configuraao do modulo para uma rotina, processo ou quaisquer outros tipos de funcionalidades disponiveis na aplicaao. Apesar de haver Parametros que permitam a configuraao de expressoes, e por conseq uencia a utilizaao de funes para definir o retorno que sera obtido com a consulta deste parametro, expressamente proibido o uso de funoes em parametros para manipu lar informaoes da Base de Dados do Sistema. Caso haja a necessidade de ser implementado um tratamento adicional a um process o padrao do Sistema, o mesmo devera utilizar o recurso de ponto de entrada. A razao desta restriao simples: as rotinas da aplicaao ERP nao protegem a consulta de conteudos de Parametros quanto a gravaoes realizadas dentro ou fora de uma tr ansaao. Desta forma, qualquer alteraao na base realizada por uma rotina configurad a em um Parametro pode ocasionar a perda da integridade das informaoes do Sistema . >> Pontos de Entrada > Conceitos: um ponto de entrada uma User Function desenvolvida com a fi nalidade de interagir com uma rotina padrao da aplicaao ERP. A User Function deve ra ter um nome pre-estabelecido no desenvolvimento da rotina padrao do ERP, e de acordo com esta pre-disposiao e com o momento no qual o ponto de entrada executa do durante um processamento, ele podera: - complementar uma validaao realizada pela aplicaao; - complementar as atualizaoes realizadas pelo processamento em tabelas padroes do ERP; - implementar a atualizaao de tabelas especificas durante o processamento de uma rotina padrao do ERP; - executar uma aao sem processos de atualizaoes, mas que necessite utilizar as inf ormaoes atuais do Ambiente durante o processamento da rotina padrao para determin ar as caracteristicas do processo; - substituir um processamento padrao do Sistema por uma regra especifica do clie nte no qual o mesmo sera implementado; > Premissas e regras: - um ponto de entrada nao deve ser utilizado para outras finalidades senao para as quais o mesmo foi pre-definido, sob pena de causar a perda da integridade das informaoes da Base de Dados ou provocar eventos de erro durante a execuao da roti na padrao; - um ponto de entrada deve ser transparente para o processo padrao, de forma que todas as tabelas acessadas pelo ponto de entrada que sejam utilizadas pela roti na padrao deverao ter sua situaao imediatamente anterior execuao do ponto restaura da ao termino do mesmo. Para isto, recomenda-se o uso das funoes GETAREA() e REST AREA(); - como um ponto de entrada nao executado da forma tradicional, ou seja, ele nao chamado como uma funao, ele nao recebe parametros. A aplicaao ERP disponibiliza uma variavel de Sistema denominada PARAMIXB, a qual recebe os parametros da funao chamadora e os disponibiliza para serem utilizados pela rotina customizada. - a variavel PARAMIXB nao possui um padrao de definiao nos codigos fontes da apli caao ERP. Desta forma, seu tipo pode variar desde um conteudo simples (caractere, numerico, etc) a um tipo complexo como um array ou objeto. Desta forma, necessario sempre avaliar a documentaao sobre o ponto bem como prote

ger a funao customizadora de tipos PARAMIXB nao tratados por ela. ------------------------------------------------------------------!!! Interfaces Visuais A linguagem ADVPL possui duas formas distintas para definiao de interfaces visuai s no ambiente ERP: sintaxe convencional, nos padroes da linguagem CLIPPER, e a s intaxe orientada a objetos. RWMAKE.CH: permite a utilizaao da sintaxe CLIPPER na definiao dos componentes visu ais; ex: #include "rwmake.ch" @ 0,0 TO 400,600 DIALOG oDlg TITLE "Janela em sintaxe Clipper" ACTIVATE DIALOG oDlg CENTERED PROTHEUS.CH: permite a utilizaao da sintaxe ADVPL convencional, a qual um aprimor amento da sintaxe CLIPPER, com a inclusao de novos atributos para os componentes visuais disponibilizados no ERP Microsiga Protheus. ex: #include"protheus.ch" DEFINE MSDIALOG oDlg TITLE "Janela em sintaxe ADVPL" FROM 000,000 TO 400,600 PIXEL ACTIVATE MSDIALOG oDlg CENTERED Sintaxe e componentes das interfaces visuais: > BUTTON() sintaxe: @ nLinha,nColuna BUTTON cTexto SIZE nLargura,nAltura UNIDADE OF oObjeto Ref ACTION aao descriao: ??? > MSDIALOG() sintaxe: DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni TO nLinFi m,nColFim OF oObjetoRef UNIDADE descriao: Define o componente MSDIALOG, o qual utilizado como base para os demais componentes da interface visual, pois um componente MSDIALOG() uma janela da ap licaao. > MSGET() sintaxe: @ nLinha,nColuna MSGET VARIAVEL SIZE nLargura,nAltura UNIDADE OF oObjet oRef F3 cF3 VALID VALID WHEN WHEN PICTURE cPicture descriao: define o componente visual MSGET, o qual utilizado para captura de info rmaoes digitaveis na tela de interface > SAY() sintaxe: @ nLinha,nColuna SAY cTexto SIZE nLargura,nAltura UNIDADE OF oObjetoRef descriao: define o componente visual SAY, o qual utilizado para exibiao de textos em uma tela de interface. > SBUTTON()

sintaxe: DEFINE SBUTTON FROM cLinha,nColuna TYPE N ACTION AO STATUS OF oObjetoRef descriao: define o componente visual SButton, o qual permite a inclusao de botoes de operaao na tela da interface, os quais serao visualizados dependendo da inter face do sistema ERP utilizada somente como um texto simples para sua identificaao , ou com uma imagem (bitmap) pre-definido. Exemplo de interface: DEFINE MSDIALOG oDlg TITLE cTitulo @ 001,001 TO 040,150 OF oDlg PIXEL @ 010,010 SAY cTexto SIZE 55,07 OF "@R 99.999.999/9999-99"; VALID !Vazio() DEFINE SBUTTON FROM 010,120 TYPE 1 ENABLE OF oDlg DEFINE SBUTTON FROM 020,120 TYPE 2 ENABLE OD oDlg ACTIVATE MSDIALOG oDlg CENTERED FROM 000,000 TO 080,300 PIXEL oDlg PIXEL PICTURE ACTION (nOpca := 1,oDlg:End()); ACTION (nOpca := 2,oDlg:End());

>> Interfaces Padroes para utilizaao de Dados: AxCadastro / Mbrowse Ambos os modelos utilizam como premissa que a estrutura da tabela a ser utilizad aesteja definida no dicinario de dados do Sistema (SX3). O AxCadastro() uma funcionalidade de cadastro simples, com poucas opoes de custom izaao, a qual composta de: - Browse padrao para visualizaao das infor da Base de Dados, de acordo com as con fig do SX3 - Dicionario de Dados (campo browse). - Funoes de Pesquisa, visualizaao, inclusao, alteraao e exclusao padroes para visua lizaao de registros simples, sem a opao de cabealho e itens. > AxCadastro(): sintaxe: AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt) parametros: - cAlias: alias padrao do sistema para utilizaao, o qual deve estar definido no d icionario de dados,SX3. - cTitulo: titulo da janela. - cVldExc: validaao para exclusao. - cVldAlt: validaao para alteraao. exemplo: #include"protheus.ch" User Function XCadSA2() Local cAlias:= "SA2" Local cTitulo:= "Cadastro de Fornecedores" Local cVldExc:= ".T." Local cVldAlt:= ".T." dbSelectArea(cAlias) dbSetOrder(1) AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt) Return

> A Mbrowse() uma funcionalidade de cadastro que permite a utilizaao de recursos mais aprimorados na visualizaao e manipulaao das informaoes do Sistema, possuindo o s seuintes componentes: sintaxe: MBrowse(nLin1,nCol1,nLin2,nCol2,cAlias) parametros: -nLin1,nCol1,nLin2,nCol2: coordenadas dos cantos aonde o browse sera exibido. Pa ra seguir o padrao da AxCadastro() use 6,1,22,75; -cAlias: Alias padrao do Sistema para utilizaao, o qual deve estar definido no di cionario de dados, SX3. Variaveis private adicionais: -aRotina: Array contendo as funoes que serao executadas pela Mbrowse. Este array pode ser p arametrizado com as funoes basicas da AxCadastro conforme abaixo: AADD(aRotina,{"Pesquisar","AxPesqui",0,1}) AADD(aRotina,{"Visualizar","AxVisual",0,2}) AADD(aRotina,{"Incluir","AxInclui",0,3}) AADD(aRotina,{"Alterar","AxAltera",0,4}) AADD(aRotina,{"Excluir","AxDeleta",0,5}) -cCadastro: titulo do browse que sera exibido exemplo: #include"protheus.ch" User Function MBrwSA2() Local cAlias := "SA2" Private cCadastro := "Cadastro de Fornecedores" Private aRotina := {} AADD(aRotina,{"Pesquisar","AxPesqui",0,1}) AADD(aRotina,{"Visualizar","AxVisual",0,2}) AADD(aRotina,{"Incluir","AxInclui",0,3}) AADD(aRotina,{"Alterar","AxAltera",0,4}) AADD(aRotina,{"Excluir","AxDeleta",0,5}) dbSelectArea(cAlias) dbSetOrder(1) mBrowse(6,1,22,75,cAlias) Return A posiao das funoes no array aRotina define o conteudo de uma variavel de controle que sera repassada para as funoes chamadas a partir da Mbrowse, convencionada co m o nOpc. Desta forma, para manter o padrao da aplicaao ERP a ordem a ser seguida na definiao do aRotina : 1- Pesquisar 2- Visualizar 3- Incluir 4- Alterar 5- Excluir 6- Livre Ao definir as funoes no array aRotina, se o nome da funao nao for especificado com "()", a Mbrows passar como Parametros as seguintes variaveis de controle: cAlias: alias ativo definido para a Mbrowse;

nRecno: Record Number (recno) do registro posicionado no alias ativo; nOpc: Posiao da opao utilizada na Mbrowse de acordo com a ordem da funao no array a Rotina. >>> Estas funoes sao padroes na definiao da interface AxCadastro() e podem ser uti lizadas tambem da construao no array aRotina utilizado pela Mbrowse(). Sao eles: > AXALTERA(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,; cTransact, aB uttons, aParam, aAuto, lVirtual, lMaximized) funao de alteraao padrao das informaoes de um registro, no formato Enchoice, confor me demonstrado no topico sobre a interface AxCadastro(). > AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,; aAuto, lMaxi mized) funao de exclusao padrao das informaoes de um registro, no formato Enchoice, confo rme demonstrado no topico sobre a interface AxCadastro(); > AXINCLUI(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,; cTransact, aB uttons, aParam, aAuto, lVirtual, lMaximized) funao de inclusao padrao das informaoes de um registro, no formato Enchoice, confo rme demonstrado no topico sobre a interface AxCadastro(); > AXPESQUI() funao de pesquisa padrao em registros exibidos pelos browses do sistema, a qual p osiciona o browse no registro pesquisado. Exibe uma tela que permite a seleao do indice a ser utilizado na pesquisa e a digitaao das informaoes que compoe a chave de busca. > AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,; aButtons, lMa ximized) funao de visualizaao padrao das informaoes de um registro, no formato Enchoice, con forme demonstrado no topico sobre a interface AxCadastro(). ------------------------------------------------------------!!! Boas Praticas de Programaao identao, capitulaao Notaao Hungara: consiste em adicionar prefixos aos nomes de variaveis, de modo qu e facilmente se identifique seu tipo. Variaveis devem ter um prefixo em minuscul as, seguido de um nome que identifique a funao da variavel, sendo que a inicial d e cada palavra deve ser maiuscula. a - array b - bloco de codigo c - caracter d - data l - logico n - numerico o - objeto x - indefinido --------------------------------------------------------

!!! Funoes e Comandos ADVPL

----------------------------------------------------------------!!! Referencias Bibliograficas: Gestao Empresarial com ERP - Ernesto Haberkorn, 2006 Logica de Programaao - A Construo de Algoritmos e Estruturas de Dados - Forbellone, Andr Luiz Villar - MAKRON, 1993 Introduo Programao - 500 algoritmos resolvidos - Anita Lopes, Guto Garcia - CAMPUS/E LSEVIER, 2002 Apostila de Treinamento - ADVPL - Educao Corporativa Apostila de Treinamento - Introduo programao - Educao Corporativa Apostila de Treinamento - Boas Prticas de Programao - Inteligncia Protheus e Fbrica d e Software Curso Bsico de Lgica de Programao - Paulo Srgio de Moraes - PUC Campinas DEM - Documentao Eletrnica Microsiga - Microsiga Software S.A. Materiais diversos de colaboradores Microsiga - Colaboradores Microsiga ----------------------------------------------------------------------------------