P PR RO OG GR RA AM MA A O O A A D D V V P P L L I I I I
Todos os direitos reservados. 0800 709 8100 totvs.com
1. OBJETIVOS DO CURSO........................................................................................ 6 2. MDULO 04: DESENVOLVENDO APLICAES EM ADVPL................................... 7 3. A LINGUAGEM ADVPL....................................................................................... 7 4. ESTRUTURA DE UM PROGRAMA ADVPL ............................................................. 9 2.1 reas de um Programa ADVPL.............................................................................. 12 5. DECLARAO E ATRIBUIO DE VARIVEIS ....................................................... 15 2.2 Tipo de Dados.............................................................................................................. 15 2.3 Declarao de variveis............................................................................................ 16 2.4 Escopo de variveis.................................................................................................... 17 2.5 Entendendo a influncia do escopo das variveis ......................................... 23 6. REGRAS ADICIONAIS DA LINGUAGEM ADVPL.................................................... 24 2.6 Palavras reservadas.................................................................................................... 24 2.7 Pictures de formatao disponveis..................................................................... 25 7. PROGRAMAS DE ATUALIZAO......................................................................... 26 2.8 Modelo1() ou AxCadastro()..................................................................................... 27 2.9 Mbrowse()...................................................................................................................... 30 2.9.1 AxFunctions()................................................................................................................ 37 2.9.2 FilBrowse() ..................................................................................................................... 39 2.9.3 EndFilBrw()..................................................................................................................... 39 2.9.4 PesqBrw() ....................................................................................................................... 40 2.9.5 BrwLegenda () .............................................................................................................. 40 2.10 MarkBrowse() ............................................................................................................... 44 2.10.1 Funes de Apoio....................................................................................................... 45 2.11 Modelo2() ...................................................................................................................... 50 2.11.1 Componentes de uma tela no formato Modelo 2......................................... 50 2.11.2 Estrutura de um programa utilizando a Modelo2()....................................... 58 2.11.3 Funo Modelo2() ...................................................................................................... 73 2.12 Modelo3() ...................................................................................................................... 77 2.12.1 Estrutura de um programa utilizando a Modelo3()....................................... 81 2.12.2 Funo Modelo3() ...................................................................................................... 92 8. ARQUIVOS E NDICES TEMPORRIOS ................................................................. 97 Programao ADVPL II e Guia de Referncia Pgina 3 2.13 Utilizao de arquivos e ndices temporrios.................................................. 97 2.14 Funes para manipulao de arquivos e ndices temporrios................ 97 2.14.1 CriaTrab() ....................................................................................................................... 97 2.14.2 dbUseArea() .................................................................................................................. 97 2.14.3 IndRegua() ..................................................................................................................... 98 2.15 Funes Auxiliares para Arquivos de Trabalho e Temporrios ................. 99 9. RELATRIOS NO GRFICOS ........................................................................... 103 2.16 Funes Utilizadas para Desenvolvimento de Relatrios..........................103 2.16.1 SetPrint() ......................................................................................................................103 2.16.2 SetDefault() .................................................................................................................104 2.16.3 RptStatus()...................................................................................................................105 2.16.4 CABEC().........................................................................................................................106 2.16.5 RODA() ..........................................................................................................................107 2.16.6 Pergunte()....................................................................................................................107 2.16.7 AjustaSX1() ..................................................................................................................107 2.16.8 PutSX1() ........................................................................................................................109 2.17 Estrutura de Relatrios Baseados na SetPrint() .............................................111 10. MANIPULAO DE ARQUIVOS I ....................................................................... 123 2.18 Gerao e leitura de arquivos em formato texto .........................................123 2.18.1 1 Famlia de funes de gravao e leitura de arquivos texto..............124 2.18.2 2 Famlia de funes de gravao e leitura de arquivos texto..............136 11. OFICINA DE PROGRAMAO I ......................................................................... 142 2.19 Interfaces com sintaxe clssica............................................................................142 2.20 Rguas de processamento....................................................................................146 2.20.1 RptStatus()...................................................................................................................146 2.20.2 Processa().....................................................................................................................151 2.20.3 MsNewProcess(). .......................................................................................................155 2.20.4 MsAguarde(). ..............................................................................................................159 2.20.5 MsgRun()......................................................................................................................161 2.21 ListBox() ........................................................................................................................164 2.21.1 ListBox simples ..........................................................................................................164 2.21.2 ListBox mltiplas colunas.......................................................................................167 2.22 ScrollBox()....................................................................................................................171 2.23 ParamBox() ..................................................................................................................176 MDULO 05: INTRODUO A ORIENTAO OBJETOS.......................................... 184 Pgina 4 Programao ADVPL II e Guia de Referncia 12. CONCEITOS DE ORIENTAO OBJETOS .......................................................... 184 2.24 Definies.................................................................................................................... 184 2.25 Conceitos Bsicos..................................................................................................... 187 2.26 O Modelo de Objetos (OMT)............................................................................... 189 2.26.1 Objetos e Classes ..................................................................................................... 189 2.26.2 Atributos...................................................................................................................... 190 2.26.3 Operaes e Mtodos............................................................................................ 191 2.26.4 Sugestes de desenvolvimento.......................................................................... 192 13. ORIENTAO A OBJETOS EM ADVPL .............................................................. 193 2.27 Sintaxe e operadores para orientao a objetos ......................................... 193 2.28 Estrutura de uma classe de objetos em ADVPL............................................ 196 2.29 Implementao dos mtodos de uma classe em ADVPL ......................... 197 MDULO 06: ADVPL ORIENTADO OBJETOS I .................................................... 203 14. COMPONENTES DA INTERFACE VISUAL DO ADVPL........................................... 203 2.30 Particularidades dos componentes visuais..................................................... 211 2.30.1 Configurando as cores para os componentes .............................................. 211 15. APLICAES COM A INTERFACE VISUAL DO ADVPL.......................................... 212 2.31 Captura de informaes simples (Multi-Gets) .............................................. 213 2.31.1 Enchoice().................................................................................................................... 214 2.31.2 MsMGet()..................................................................................................................... 216 2.32 Captura de mltiplas informaes (Multi-Lines) .......................................... 219 2.32.1 MsGetDB()................................................................................................................... 220 2.32.2 MsGetDados()............................................................................................................ 225 2.32.3 MsNewGetDados()................................................................................................... 230 2.33 Barras de botes....................................................................................................... 242 2.33.1 EnchoiceBar() ............................................................................................................. 243 2.33.2 TBar()............................................................................................................................. 245 2.33.3 ButtonBar .................................................................................................................... 247 2.33.4 Imagens pr-definidas para as barras de botes ........................................ 251 APNDICE.............................................................................................................. 252 BOAS PRTICAS DE PROGRAMAO ....................................................................... 252 16. ARREDONDAMENTO....................................................................................... 252 17. UTILIZAO DE IDENTAO............................................................................ 253 Programao ADVPL II e Guia de Referncia Pgina 5 18. CAPITULAO DE PALAVRAS-CHAVE............................................................... 254 2.34 Palavras em maisculo........................................................................................... 255 19. UTILIZAO DA NOTAO HNGARA............................................................. 256 20. TCNICAS DE PROGRAMAO EFICIENTE .......................................................... 256 GUIA DE REFERNCIA RPIDA: FUNES E COMANDOS ADVPL........................ 269 Converso entre tipos de dados ............................................................................................ 269 Matemticas................................................................................................................................... 272 Anlise de variveis ..................................................................................................................... 276 Manipulao de arrays............................................................................................................... 277 Manipulao de blocos de cdigo........................................................................................ 288 Manipulao de strings ............................................................................................................. 291 Manipulao de data / hora .................................................................................................... 306 Manipulao de variveis numricas.................................................................................... 314 Manipulao de arquivos.......................................................................................................... 318 Manipulao de arquivos e ndices temporrios............................................................. 350 Manipulao de bases de dados............................................................................................ 352 Controle de numerao seqencial ...................................................................................... 400 Validao 401 Manipulao de parmetros do sistema............................................................................. 404 Controle de impresso............................................................................................................... 407 Controle de processamentos................................................................................................... 421 Utilizao de recursos do ambiente ERP............................................................................. 434 Componentes da interface visual........................................................................................... 465 Interfaces de cadastro................................................................................................................ 473 Interfaces visuais para aplicaes .......................................................................................... 477 Recursos das interfaces visuais............................................................................................... 480
Pgina 6 Programao ADVPL II e Guia de Referncia
1. Objetivos do Curso
Objetivos especficos do curso:
Ao final do curso o treinando dever ter desenvolvido os seguintes conceitos, habilidades e atitudes:
a) Conceitos a serem aprendidos
estruturas para implementao de relatrios e programas de atualizao estruturas para implementao de interfaces visuais princpios do desenvolvimento de aplicaes orientadas a objetos
b) Habilidades e tcnicas a serem aprendidas
desenvolvimento de aplicaes voltadas ao ERP Protheus anlise de fontes de mdia complexidade desenvolvimento de aplicaes bsicas com orientao a objetos
c) Atitudes a serem desenvolvidas
adquirir conhecimentos atravs da anlise dos funcionalidades disponveis no ERP Protheus; estudar a implementao de fontes com estruturas orientadas a objetos em ADVPL; embasar a realizao de outros cursos relativos a linguagem ADVPL
Programao ADVPL II e Guia de Referncia Pgina 7
2. MDULO 04: Desenvolvendo aplicaes em ADVPL
3. A linguagem ADVPL A Linguagem ADVPL teve seu incio em 1994, sendo na verdade uma evoluo na utilizao de linguagens no padro xBase pela Microsiga Software S.A. (Clipper, Visual Objects e depois FiveWin). Com a criao da tecnologia Protheus, era necessrio criar uma linguagem que suportasse o padro xBase para a manuteno de todo o cdigo existente do sistema de ERP Siga Advanced. Foi, ento, criada a linguagem chamada Advanced Protheus Language.
O ADVPL uma extenso do padro xBase de comandos e funes, operadores, estruturas de controle de fluxo e palavras reservadas, contando tambm com funes e comandos disponibilizados pela Microsiga que a torna uma linguagem completa para a criao de aplicaes ERP prontas para a Internet. Tambm uma linguagem orientada a objetos e eventos, permitindo ao programador desenvolver aplicaes visuais e criar suas prprias classes de objetos.
Quando compilados, todos os arquivos de cdigo tornam-se unidades de inteligncia bsicas, chamados APOs (de Advanced Protheus Objects). Tais APOs so mantidos em um repositrio e carregados dinamicamente pelo PROTHEUS Server para a execuo. Como no existe a linkedio, ou unio fsica do cdigo compilado a um determinado mdulo ou aplicao, funes criadas em ADVPL podem ser executadas em qualquer ponto do ambiente Advanced Protheus.
O compilador e o interpretador da linguagem ADVPL o prprio servidor PROTHEUS (PROTHEUS Server), e existe um ambiente visual para desenvolvimento integrado (PROTHEUSIDE) onde o cdigo pode ser criado, compilado e depurado.
Os programas em ADVPL podem conter comandos ou funes de interface com o usurio. De acordo com tal caracterstica, tais programas so subdivididos nas seguintes categorias:
Programao Com Interface Prpria com o Usurio
Nesta categoria entram os programas desenvolvidos para serem executados atravs do terminal remoto do Protheus: o Protheus Remote. O Protheus Remote a aplicao encarregada da interface e da interao com o usurio, sendo que todo o processamento do cdigo em ADVPL, o acesso ao banco de dados e o gerenciamento de conexes efetuado no Protheus Server. O Protheus Remote o principal meio de acesso a execuo de rotinas escritas em ADVPL no Protheus Server, e por isso permite executar qualquer tipo de cdigo, tenha ele interface com o usurio ou no. Porm, Pgina 8 Programao ADVPL II e Guia de Referncia nesta categoria, so considerados apenas os programas que realizam algum tipo de interface remota utilizando o protocolo de comunicao do Protheus.
Podem-se criar rotinas para a customizao do sistema ERP Microsiga Protheus, desde processos adicionais at relatrios. A grande vantagem aproveitar todo o ambiente montado pelos mdulos do ERP Microsiga Protheus. Porm, com o ADVPL, possvel at mesmo criar toda uma aplicao, ou mdulo, desde o comeo.
Todo o cdigo do sistema ERP Microsiga Protheus escrito em ADVPL.
Programao Sem Interface Prpria com o Usurio
As rotinas criadas sem interface so consideradas nesta categoria porque geralmente tm uma utilizao mais especfica do que um processo adicional ou um relatrio novo. Tais rotinas no tm interface com o usurio atravs do Protheus Remote, e qualquer tentativa nesse sentido (como a criao de uma janela padro) ocasionar uma exceo em tempo de execuo. Estas rotinas so apenas processos, ou Jobs, executados no Protheus Server. Algumas vezes, a interface destas rotinas fica a cargo de aplicaes externas, desenvolvidas em outras linguagens, que so responsveis por iniciar os processos no servidor Protheus atravs dos meios disponveis de integrao e conectividade no Protheus.
De acordo com a utilizao e com o meio de conectividade utilizado, estas rotinas so subcategorizadas assim:
E Programao por Processos
Rotinas escritas em ADVPL podem ser iniciadas como processos individuais (sem interface) no Protheus Server atravs de duas maneiras: Iniciadas por outra rotina ADVPL atravs da chamada de funes como StartJob() ou CallProc() ou iniciadas automaticamente na inicializao do Protheus Server (quando propriamente configurado).
E Programao de RPC
Atravs de uma biblioteca de funes disponvel no Protheus (uma API de comunicao), podem-se executar rotinas escritas em ADVPL diretamente no Protheus Server, atravs de aplicaes externas escritas em outras linguagens. Isto o que se chama de RPC (de Remote Procedure Call, ou Chamada de Procedimentos Remota).
O servidor Protheus tambm pode executar rotinas em ADVPL em outros servidores Protheus atravs de conexo TCP/IP direta, utilizando o conceito de RPC. Do mesmo modo, aplicaes externas podem requisitar a execuo de rotinas escritas em ADVPL atravs de conexo TCP/IP direta.
Programao ADVPL II e Guia de Referncia Pgina 9 E Programao Web
O Protheus Server pode tambm ser executado como um servidor Web, respondendo a requisies HTTP. No momento destas requisies, pode executar rotinas escritas em ADVPL como processos individuais, enviando o resultado das funes como retorno das requisies para o cliente HTTP (como por exemplo, um Browser de Internet). Qualquer rotina escrita em ADVPL que no contenha comandos de interface pode ser executada atravs de requisies HTTP. O Protheus permite a compilao de arquivos HTML contendo cdigo ADVPL embutido. So os chamados arquivos ADVPL ASP, para a criao de pginas dinmicas.
E Programao TelNet
TelNet parte da gama de protocolos TCP/IP que permite a conexo a um computador remoto atravs de uma aplicao cliente deste protocolo. O PROTHEUS Server pode emular um terminal TelNet, atravs da execuo de rotinas escritas em ADVPL. Ou seja, pode-se escrever rotinas ADVPL cuja interface final ser um terminal TelNet ou um coletor de dados mvel.
4. Estrutura de um Programa ADVPL
Um programa de computador nada mais do que um grupo de comandos logicamente dispostos com o objetivo de executar determinada tarefa. Esses comandos so gravados em um arquivo texto que transformado em uma linguagem executvel por um computador atravs de um processo chamado compilao. A compilao substitui os comandos de alto nvel (que os humanos compreendem) por instrues de baixo nvel (compreendida pelo sistema operacional em execuo no computador). No caso do ADVPL, no o sistema operacional de um computador que ir executar o cdigo compilado, mas sim, o Protheus Server.
Dentro de um programa, os comandos e funes utilizados devem seguir regras de sintaxe da linguagem utilizada. Caso contrrio, o programa ser interrompido por erros. Os erros podem ser de compilao ou de execuo.
Erros de compilao so aqueles encontrados na sintaxe que no permitem que o arquivo de cdigo do programa seja compilado. Podem ser comandos especificados de forma errnea, utilizao invlida de operadores, etc..
Erros de execuo so aqueles que acontecem depois da compilao, quando o programa est sendo executado. Podem ocorrer por inmeras razes, mas geralmente se referem s funes no existentes, ou variveis no criadas ou inicializadas, etc..
Pgina 10 Programao ADVPL II e Guia de Referncia Linhas de Programa
As linhas existentes dentro de um arquivo texto de cdigo de programa podem ser linhas de comando, linhas de comentrio ou linhas mistas.
E Linhas de Comando
Linhas de comando possuem os comandos ou instrues que sero executadas. Por exemplo:
Local nCnt Local nSoma : = 0 For nCnt : = 1 To 10 nSoma += nCnt Next nCnt
E Linhas de Comentrio
Linhas de comentrio possuem um texto qualquer, mas no so executadas. Servem apenas para documentao e para tornar mais fcil o entendimento do programa. Existem trs formas de se comentar linhas de texto. A primeira delas utilizar o sinal de * (asterisco) no comeo da linha:
* Programa para clculo do total * Autor: Microsiga Software S.A. * Data: 2 de outubro de 2001 Todas as linhas iniciadas com um sinal de asterisco so consideradas como comentrio. Pode-se utilizar a palavra NOTE ou dois smbolos da letra "e" comercial (&&) para realizar a funo do sinal de asterisco. Porm, todas estas formas de comentrio de linhas so obsoletas e existem apenas para compatibilizao com o padro xBase. A melhor maneira de comentar linhas em ADVPL utilizar duas barras transversais:
// Programa para clculo do total // Autor: Microsiga Software S.A. // Data: 2 de outubro de 2001
Outra forma de documentar textos utilizar as barras transversais juntamente com o asterisco, podendo-se comentar todo um bloco de texto sem precisar comentar linha a linha:
/* Programa para clculo do total Autor: Microsiga Software S.A. Data: 2 de outubro de 2001 Programao ADVPL II e Guia de Referncia Pgina 11 */
Todo o texto encontrado entre a abertura (indicada pelos caracteres /*) e o fechamento (indicada pelos caracteres */) considerado como comentrio.
E Linhas Mistas
O ADVPL tambm permite que existam linhas de comando com comentrio. Isto possvel adicionando-se as duas barras transversais (//) ao final da linha de comando e adicionando-se o texto do comentrio:
Local nCnt Local nSoma := 0 // Inicializa a varivel com zero para a soma For nCnt := 1 To 10 nSoma += nCnt Next nCnt
E Tamanho da Linha
Assim como a linha fsica, delimitada pela quantidade de caracteres que pode ser digitado no editor de textos utilizado, existe uma linha considerada linha lgica. A linha lgica, aquela considerada para a compilao como uma nica linha de comando.
A princpio, cada linha digitada no arquivo texto diferenciada aps o pressionamento da tecla <Enter>. Ou seja, a linha lgica, a linha fsica no arquivo. Porm, algumas vezes, por limitao fsica do editor de texto ou por esttica, pode-se "quebrar" a linha lgica em mais de uma linha fsica no arquivo texto. Isto efetuado utilizando-se o sinal de ponto-e-vrgula (;).
Neste exemplo existe uma linha de comando para a checagem das variveis utilizadas. Como a linha torna-se muito grande, pode-se divid-la em mais de uma linha fsica utilizando o sinal de ponto-e-vrgula. Se um sinal de ponto-e-vrgula for esquecido nas duas primeiras linhas, durante a execuo do programa ocorrer um erro, pois a segunda linha fsica ser considerada como uma segunda linha de comando na compilao. E durante a execuo esta linha no ter sentido. Pgina 12 Programao ADVPL II e Guia de Referncia
2.1 reas de um Programa ADVPL
Apesar de no ser uma linguagem de padres rgidos com relao estrutura do programa, importante identificar algumas de suas partes. Considere o programa de exemplo abaixo:
#i ncl ude pr ot heus. ch
/ * +===========================================+ | Pr ogr ama: Cl cul o do Fat or i al | | Aut or : Mi cr osi ga Sof t war e S. A. | | Dat a : 02 de out ubr o de 2001 | +===========================================+ */
User Funct i on Cal cFat or ( )
Local nCnt Local nResul t ado : = 1 / / Resul t ado do f at or i al Local nFat or : = 5 / / Nmer o par a o cl cul o
/ / Cl cul o do f at or i al For nCnt : = nFat or To 1 St ep - 1 nResul t ado *= nCnt Next nCnt
/ / Exi be o r esul t ado na t el a, at r avs da f uno al er t Al er t ( " O f at or i al de " + cVal ToChar ( nFat or ) + ; " " + cVal ToChar ( nResul t ado) )
/ / Ter mi na o pr ogr ama Ret ur n
A estrutura de um programa ADVPL composta pelas seguintes reas:
E rea de Identificao - Declarao dos includes - Declarao da funo - Identificao do programa
E rea de Ajustes Iniciais - Declarao das variveis
E Corpo do Programa - Preparao para o processamento Programao ADVPL II e Guia de Referncia Pgina 13 - Processamento
E rea de Encerramento
rea de Identificao
Esta uma rea que no obrigatria e dedicada documentao do programa. Quando existente, contm apenas comentrios explicando a sua finalidade, data de criao, autor, etc., e aparece no comeo do programa, antes de qualquer linha de comando.
O formato para esta rea no definido. Pode-se colocar qualquer tipo de informao desejada e escolher a formatao apropriada.
#i ncl ude pr ot heus. ch
/ * +==========================================+ | Pr ogr ama: Cl cul o do Fat or i al | | Aut or : Mi cr osi ga Sof t war e S. A. | | Dat a : 02 de out ubr o de 2001 | +==========================================+ */
User Funct i on Cal cFat or ( )
Opcionalmente podem-se incluir definies de constantes utilizadas no programa ou incluso de arquivos de cabealho nesta rea.
rea de Ajustes Iniciais
Nesta rea geralmente se fazem os ajustes iniciais, importantes para o correto funcionamento do programa. Entre os ajustes se encontram declaraes de variveis, inicializaes, abertura de arquivos, etc.. Apesar do ADVPL no ser uma linguagem rgida e as variveis poderem ser declaradas em qualquer lugar do programa, aconselhvel faz-lo nesta rea visando tornar o cdigo mais legvel e facilitar a identificao de variveis no utilizadas.
Local nCnt Local nResul t ado : = 0 / / Resul t ado do f at or i al Local nFat or : = 10 / / Nmer o par a o cl cul o
Pgina 14 Programao ADVPL II e Guia de Referncia Corpo do Programa
nesta rea que se encontram as linhas de cdigo do programa. onde se realiza a tarefa necessria atravs da organizao lgica destas linhas de comando. Espera-se que as linhas de comando estejam organizadas de tal modo que no final desta rea o resultado esperado seja obtido, seja ele armazenado em um arquivo ou em variveis de memria, pronto para ser exibido ao usurio atravs de um relatrio ou na tela.
// Clculo do fatorial For nCnt := nFator To 1 Step -1 nResultado *= nCnt Next nCnt
A preparao para o processamento formada pelo conjunto de validaes e processamentos necessrios antes da realizao do processamento em si.
Avaliando o processamento do clculo do fatorial descrito anteriormente, pode-se definir que a validao inicial a ser realizada o contedo da varivel nFator, pois a mesma determinar a correta execuo do cdigo.
// Clculo do fatorial nFator := GetFator() // GetFator funo ilustrativa na qual a varivel recebe a informao do usurio.
If nFator <= 0 Alert(Informao invlida) Return Endif
For nCnt := nFator To 1 Step -1 nResultado *= nCnt Next nCnt
rea de Encerramento
nesta rea que as finalizaes so efetuadas. onde os arquivos abertos so fechados, e o resultado da execuo do programa utilizado. Pode-se exibir o resultado armazenado em uma varivel ou em um arquivo, ou, simplesmente, finalizar; caso a tarefa j tenha sido toda completada no corpo do programa. nesta rea que se encontra o encerramento do programa. Todo programa em ADVPL deve sempre terminar com a palavra chave return. Programao ADVPL II e Guia de Referncia Pgina 15
// Exibe o resultado na tela, atravs da funo alert Alert("O fatorial de " + cValToChar(nFator) + ; " " + cValToChar(nResultado))
// Termina o programa Return
5. Declarao e Atribuio de Variveis
2.2 Tipo de Dados
O ADVPL no uma linguagem de tipos rgidos (strongly typed), o que significa que variveis de memria podem receber diferentes tipos de dados durante a execuo do programa.
As variveis podem tambm conter objetos, mas os tipos primrios da linguagem so:
Numrico
O ADVPL no diferencia valores inteiros de valores com ponto flutuante, portanto podem-se criar variveis numricas com qualquer valor dentro do intervalo permitido. Os seguintes elementos so do tipo de dado numrico:
2 43. 53 0. 5 0. 00001 1000000
Uma varivel do tipo de dado numrico pode conter um nmero de dezoito dgitos incluindo o ponto flutuante, no intervalo de 2.2250738585072014 E308 at 1.7976931348623158 E+308.
Lgico
Valores lgicos em ADVPL so identificados atravs de .T. ou .Y. para verdadeiro e .F. ou .N. para falso (independentemente se os caracteres estiverem em maisculo ou minsculo).
Pgina 16 Programao ADVPL II e Guia de Referncia Caractere
Strings ou cadeias de caracteres so identificadas em ADVPL por blocos de texto entre aspas duplas (") ou aspas simples ('):
" Ol mundo! " ' Est a uma st r i ng' " Est a ' out r a' st r i ng"
Uma varivel do tipo caractere pode conter strings com no mximo 1 MB, ou seja, 1048576 caracteres.
Data
O ADVPL tem um tipo de dados especfico para datas. Internamente as variveis deste tipo de dado so armazenadas como um nmero correspondente data Juliana.
Variveis do tipo de dados Data no podem ser declaradas diretamente, e sim atravs da utilizao de funes especficas, como, por exemplo, CTOD() que converte uma string para data.
Array
O Array um tipo de dado especial. a disposio de outros elementos em colunas e linhas. O ADVPL suporta arrays unidimensionais (vetores) ou multidimensionais (matrizes). Os elementos de um array so acessados atravs de ndices numricos iniciados em 1, identificando a linha e a coluna para quantas dimenses existirem.
Arrays devem ser utilizadas com cautela, pois se forem muito grandes podem exaurir a memria do servidor.
Bloco de Cdigo
O bloco de cdigo um tipo de dado especial. utilizado para armazenar instrues escritas em ADVPL que podero ser executadas posteriormente.
2.3 Declarao de variveis
Variveis de memria so um dos recursos mais importantes de uma linguagem. So reas de memria criadas para armazenar informaes utilizadas por um programa para a execuo de tarefas. Por exemplo, quando o usurio digita uma informao qualquer, como o nome de um produto, em uma tela de um programa esta informao armazenada em uma varivel de memria para posteriormente ser gravada ou impressa.
Programao ADVPL II e Guia de Referncia Pgina 17 A partir do momento que uma varivel criada, deixa de ser necessrio se referenciar ao seu contedo, sendo o nome a referncia principal.
O nome de uma varivel um identificador nico o qual deve respeitar um mximo de 10 caracteres. O ADVPL no impede a criao de uma varivel de memria cujo nome contenha mais de 10 caracteres. Porm, apenas os 10 primeiros sero considerados para a localizao do contedo armazenado.
Portanto, se forem criadas duas variveis cujos 10 primeiros caracteres forem iguais, como nTotalGeralAnual e nTotalGeralMensal, as referncias a qualquer uma delas no programa resultaro o mesmo, ou seja, sero a mesma varivel:
nTot al Ger al Mensal : = 100 nTot al Ger al Anual : = 300 Al er t ( " Val or mensal : " + cVal ToChar ( nTot al Ger al Mensal ) )
Quando o contedo da varivel nTotalGeralMensal exibido, o seu valor ser de 300. Isso acontece porque, no momento que esse valor foi atribudo varivel nTotalGeralAnual, o ADVPL considerou apenas os 10 primeiros caracteres (assim como o faz quando deve exibir o valor da varivel nTotalGeralMensal), ou seja, considerou-as como a mesma varivel. Assim o valor original de 100 foi substitudo pelo de 300.
2.4 Escopo de variveis
O ADVPL no uma linguagem de tipos rgidos para variveis, ou seja, no necessrio informar o tipo de dados que determinada varivel ir conter no momento de sua declarao, e o seu valor pode mudar durante a execuo do programa.
Tambm no h necessidade de declarar variveis em uma seo especfica do seu cdigo fonte, embora seja aconselhvel declarar todas as variveis necessrias no comeo, tornando a manuteno mais fcil e evitando a declarao de variveis desnecessrias.
Para declarar uma varivel deve-se utilizar um identificador de escopo, que uma palavra chave que indica a que contexto do programa a varivel declarada pertence. O contexto de variveis pode ser local (visualizadas apenas dentro do programa atual), pblico (visualizadas por qualquer outro programa), entre outros.
O Contexto de Variveis dentro de um Programa
As variveis declaradas em um programa ou funo, so visveis de acordo com o escopo onde so definidas. Como, tambm, do escopo depende o tempo de existncia das variveis. A definio do escopo de uma varivel efetuada no momento de sua declarao.
Local nNumero := 10
Pgina 18 Programao ADVPL II e Guia de Referncia Esta linha de cdigo declara uma varivel chamada nNumero indicando que pertence ao escopo Local.
Programao ADVPL II e Guia de Referncia Pgina 19 Os identificadores de escopo so:
E Local E Static E Private E Public
O ADVPL no rgido em relao declarao de variveis no comeo do programa. A incluso de um identificador de escopo no necessria para a declarao de uma varivel, contanto que um valor lhe seja atribudo.
nNumero2 := 15
Quando um valor atribudo uma varivel em um programa ou funo, o ADVPL criar a varivel caso ela no tenha sido declarada anteriormente. A varivel ento criada como se tivesse sido declarada como Private.
Devido a essa caracterstica, quando se pretende fazer uma atribuio a uma varivel declarada previamente, mas, escreve-se o nome da varivel de forma incorreta, o ADVPL no gerar nenhum erro de compilao ou de execuo. Pois, compreender o nome da varivel escrito de forma incorreta como se fosse a criao de uma nova varivel. Isto alterar a lgica do programa, e um erro muitas vezes difcil de identificar.
Variveis de escopo local
Variveis de escopo local so pertencentes apenas ao escopo da funo onde foram declaradas e devem ser explicitamente declaradas com o identificador LOCAL, como no exemplo:
Function Pai() Local nVar := 10, aMatriz := {0,1,2,3} . <comandos> . Filha() . <mais comandos> . Return(.T.)
Neste exemplo, a varivel nVar foi declarada como local e atribuda com o valor 10. Quando a funo Filha executada, nVar ainda existe mas no pode ser acessada. Pgina 20 Programao ADVPL II e Guia de Referncia Quando a execuo da funo Pai terminar, a varivel nVar destruda. Qualquer varivel com o mesmo nome no programa que chamou a funo Pai no afetada.
Variveis de escopo local so criadas automaticamente cada vez que a funo onde forem declaradas for ativada. Elas continuam a existir e mantm seu valor at o fim da ativao da funo (ou seja, at que a funo retorne o controle para o cdigo que a executou). Se uma funo chamada recursivamente (por exemplo, chama-se a si mesma), cada chamada em recurso cria um novo conjunto de variveis locais.
A visibilidade de variveis de escopo locais idntica ao escopo de sua declarao, ou seja, a varivel visvel em qualquer lugar do cdigo fonte em que foi declarada. Se uma funo chamada recursivamente, apenas as variveis de escopo local, criadas na mais recente ativao, so visveis.
Variveis de escopo static
Variveis de escopo static funcionam basicamente como as variveis de escopo local. Mas, mantm seu valor atravs da execuo e devem ser declaradas explicitamente no cdigo com o identificador STATIC.
O escopo das variveis static depende de onde so declaradas. Se forem declaradas dentro do corpo de uma funo ou procedimento, seu escopo ser limitado quela rotina. Se forem declaradas fora do corpo de qualquer rotina, seu escopo afeta a todas as funes declaradas no fonte. Neste exemplo, a varivel nVar declarada como static e inicializada com o valor 10:
Quando a funo Filha executada, nVar ainda existe mas no pode ser acessada. Diferente de variveis declaradas como LOCAL ou PRIVATE, nVar continua a existir e mantm seu valor atual quando a execuo da funo Pai termina. Entretanto, somente pode ser acessada por execues subseqentes da funo Pai.
Programao ADVPL II e Guia de Referncia Pgina 21 Variveis de escopo private
A declarao opcional para variveis privadas. Mas podem ser declaradas explicitamente com o identificador PRIVATE.
Adicionalmente, a atribuio de valor a uma varivel no criada anteriormente automaticamente cria a varivel como privada. Uma vez criada, uma varivel privada continua a existir e mantm seu valor at que o programa ou funo onde foi criada termine (ou seja, at que a funo onde foi criada retorne para o cdigo que a executou). Neste momento, automaticamente destruda.
possvel criar uma nova varivel privada com o mesmo nome de uma varivel j existente. Entretanto, a nova (duplicada) varivel pode apenas ser criada em um nvel de ativao inferior ao nvel onde a varivel foi declarada pela primeira vez (ou seja, apenas em uma funo chamada pela funo onde a varivel j havia sido criada). A nova varivel privada ir esconder qualquer outra varivel privada ou pblica (veja a documentao sobre variveis pblicas) com o mesmo nome enquanto existir.
Uma vez criada, uma varivel privada visvel em todo o programa, enquanto no for destruda automaticamente. Quando a rotina que a criou terminar ou uma outra varivel privada com o mesmo nome for criada em uma subfuno chamada (neste caso, a varivel existente torna-se inacessvel at que a nova varivel privada seja destruda). Em termos mais simples, uma varivel privada visvel dentro da funo de criao e todas as funes chamadas por esta, a menos que uma funo chamada crie sua prpria varivel privada com o mesmo nome.
Neste exemplo, a varivel nVar criada com escopo private e inicializada com o valor 10. Quando a funo Filha executada, nVar ainda existe e, diferentemente de uma varivel de escopo local, pode ser acessada pela funo Filha. Quando a funo Pai terminar, nVar ser destruda e qualquer declarao de nVar anterior se tornar acessvel novamente.
Pgina 22 Programao ADVPL II e Guia de Referncia
No ambiente ERP Protheus, existe uma conveno adicional a qual deve ser respeitada que variveis em uso pela aplicao no sejam incorretamente manipuladas. Por esta conveno deve ser adicionado o caracter _ antes do nome de variveis PRIVATE e PUBLIC. Maiores informaes avaliar o tpico: Boas Prticas de Programao.
Exemplo: Private _dData
Variveis de escopo public
Podem-se criar variveis de escopo public dinamicamente no cdigo com o identificador PUBLIC. As variveis deste escopo continuam a existir e mantm seu valor at o fim da execuo da thread (conexo).
possvel criar uma varivel de escopo private com o mesmo nome de uma varivel de escopo public existente. Entretanto, no permitido criar uma varivel de escopo public com o mesmo nome de uma varivel de escopo private existente.
Uma vez criada, uma varivel de escopo public visvel em todo o programa onde foi declarada at que seja escondida por uma varivel de escopo private criada com o mesmo nome. A nova varivel de escopo private criada mascara a varivel de escopo public existente, e esta se tornar inacessvel at que a nova varivel private seja destruda.
Por exemplo:
Function Pai() Public nVar := 10 <comandos> . Filha() <mais comandos> . Return(.T.)
Neste exemplo, nVar criada como public e inicializada com o valor 10. Quando a funo Filha executada, nVar ainda existe e pode ser acessada. Diferentemente de variveis locais ou privates, nVar ainda existe aps o trmino da a execuo da funo Pai.
Diferentemente dos outros identificadores de escopo, quando uma varivel declarada como pblica sem ser inicializada, o valor assumido falso (.F.) e no nulo (nil).
Programao ADVPL II e Guia de Referncia Pgina 23
No ambiente ERP Protheus, existe uma conveno adicional deve ser respeitada que determina que variveis em uso pela aplicao no sejam incorretamente manipuladas. Por esta conveno, deve ser adicionado o caracter _ antes do nome de variveis PRIVATE e PUBLIC. Para mais detalhes, veja o tpico: Boas Prticas de Programao.
Exemplo: Public _cRotina
2.5 Entendendo a influncia do escopo das variveis
Considere as linhas de cdigo de exemplo:
nResultado := 250 * (1 + (nPercentual / 100))
Se esta linha for executada em um programa ADVPL, ocorrer um erro de execuo com a mensagem "variable does not exist: nPercentual", pois esta varivel est sendo utilizada em uma expresso de clculo sem ter sido declarada. Para solucionar este erro, deve-se declarar a varivel previamente:
Neste exemplo, as variveis so declaradas previamente utilizando o identificador de escopo local. Quando a linha de clculo for executada, o erro de varivel no existente, no mais ocorrer. Porm, variveis no inicializadas tm sempre o valor default nulo (Nil) e este valor no pode ser utilizado em um clculo, pois tambm gerar erros de execuo (nulo no pode ser dividido por 100). A resoluo deste problema efetuada inicializando-se a varivel atravs de uma das formas:
A diferena entre o ltimo exemplo e os dois anteriores que a varivel inicializada no momento da declarao. Em ambos os exemplos, a varivel primeiro declarada e ento inicializada em uma outra linha de cdigo.
aconselhvel optar pelo operador de atribuio composto de dois pontos e sinal de igual, pois o operador de atribuio utilizando somente o sinal de igual pode ser facilmente confundido com o operador relacional (para comparao) durante a criao do programa.
6. Regras adicionais da linguagem ADVPL
2.6 Palavras reservadas
AADD DTOS INKEY REPLICATE VAL ABS ELSE INT RLOCK VALTYPE ASC ELSEIF LASTREC ROUND WHILE AT EMPTY LEN ROW WORD BOF ENDCASE LOCK RTRIM YEAR BREAK ENDDO LOG SECONDS CDOW ENDIF LOWER SELECT CHR EOF LTRIM SETPOS CMONTH EXP MAX SPACE COL FCOUNT MIN SQRT CTOD FIELDNAME MONTH STR DATE FILE PCOL SUBSTR DAY FLOCK PCOUNT TIME DELETED FOUND PROCEDURE TRANSFORM DEVPOS FUNCTION PROW TRIM DOW IF RECCOUNT TYPE DTOC IIF RECNO UPPER TRY AS CATCH THROW
E Palavras reservadas no podem ser utilizadas para variveis, procedimentos ou funes;
E Funes reservadas so pertencentes ao compilador e no podem ser redefinidas por uma aplicao;
E Todos os identificadores que comearem com dois ou mais caracteres _ so utilizados como identificadores internos e so reservados.
E Identificadores de escopo PRIVATE ou PUBLIC utilizados em aplicaes especficas desenvolvida por clientes ou para Programao ADVPL II e Guia de Referncia Pgina 25 clientes devem ter sua identificao iniciada por um caractere _.
2.7 Pictures de formatao disponveis
Com base na documentao disponvel no TDN, a linguagem ADVPL e a aplicao ERP Protheus admitem as seguintes pictures:
Dicionrio de Dados (SX3) e GET
Funes Contedo Funcionalidade A Permite apenas caracteres alfabticos. C Exibe CR depois de nmeros positivos. E Exibe numrico com o ponto e vrgula invertidos (formato Europeu). R Insere caracteres diferentes dos caracteres de template na exibio, mas no os insere na varivel do GET. S<n> Permite rolamento horizontal do texto dentro do GET, <n> um nmero inteiro que identifica o tamanho da regio. X Exibe DB depois de nmeros negativos. Z Exibe zeros como brancos. ( Exibe nmeros negativos entre parnteses com os espaos em branco iniciais. ) Exibe nmeros negativos entre parnteses sem os espaos em branco iniciais. ! Converte caracteres alfabticos para maisculo.
Templates Contedo Funcionalidade X Permite qualquer caractere. 9 Permite apenas dgitos para qualquer tipo de dado, incluindo o sinal para numricos. # Permite dgitos, sinais e espaos em branco para qualquer tipo de dado. ! Converte caracteres alfabticos para maisculo. * Exibe um asterisco no lugar dos espaos em branco iniciais em nmeros. . Exibe o ponto decimal. , Exibe a posio do milhar.
Exemplo 01 Picture campo numrico
CT2_VALOR Numr i co 17, 2 Pi ct ur e: @E 99, 999, 999, 999, 999. 99
Exemplo 02 Picture campo texto, com digitao apenas em caixa alta Pgina 26 Programao ADVPL II e Guia de Referncia
A1_NOME Car act er - 40 Pi ct ur e: @!
7. Programas de Atualizao
Os programas de atualizao de cadastros e digitao de movimentos seguem um padro que se apia no Dicionrio de Dados.
Basicamente so trs os modelos mais utilizados:
E Modelo 1 ou AxCadastro: Para cadastramentos em tela cheia. Exemplo: Cadastro de Cliente.
E Modelo 2: Cadastramentos envolvendo apenas uma tabela, mas com um cabealho e, opcionalmente, um rodap e um corpo com quantidade ilimitada de linhas. Ideal para casos em que h dados que se repetem por vrios itens e que, por isso, so colocados no cabealho. Exemplo: Pedido de Compra.
E Modelo 3: Cadastramentos envolvendo duas tabelas, um com dados de cabealho e outro digitado em linhas com os itens. Exemplo: Pedido de Vendas, Oramento etc.
Todos os modelos so genricos, ou seja, o programa independe da tabela a ser tratada, bastando praticamente que se informe apenas o seu Alias. O resto obtido do Dicionrio de Dados (SX3).
Programao ADVPL II e Guia de Referncia Pgina 27
2.8 Modelo1() ou AxCadastro()
O AxCadastro() uma funcionalidade de cadastro simples, com poucas opes de customizao, a qual composta de:
Browse padro para visualizao das informaes da base de dados, de acordo com as configuraes do SX3 Dicionrio de Dados (campo browse). Funes de pesquisa, visualizao, incluso, alterao e excluso padres para visualizao de registros simples, sem a opo de cabealho e itens.
E Sintaxe: AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt)
E Parmetros: cAlias Alias padro do sistema para utilizao, o qual deve estar definido no dicionrio de dados SX3. cTitulo Ttulo da Janela cVldExc Validao para Excluso cVldAlt Validao para Alterao
Local l Ret : = . T. Local aAr ea : = Get Ar ea( ) Local nOpcao : = 0
nOpcao : = AxExcl ui ( cAl i as, nReg, nOpc) Pgina 30 Programao ADVPL II e Guia de Referncia
I f nOpcao == 1 MsgI nf o( Excl uso concl u da comsucesso! ) Endi f
Rest Ar ea( aAr ea) Ret ur n l Ret
Exerccio 02 Implementar no AxCadastro as validaes de alterao e excluso.
2.9 Mbrowse()
A Mbrowse() uma funcionalidade de cadastro que permite a utilizao de recursos mais aprimorados na visualizao e manipulao das informaes do sistema, possuindo os seguintes componentes:
Browse padro para visualizao das informaes da base de dados, de acordo com as configuraes do SX3 Dicionrio de Dados (campo browse).
Parametrizao para funes especficas para as aes de visualizao, incluso, alterao e excluso de informaes, o que viabiliza a manuteno de informaes com estrutura de cabealhos e itens.
Recursos adicionais como identificadores de status de registros, legendas e filtros para as informaes.
E Sintaxe: MBrowse(nLin1, nCol1, nLin2, nCol2, cAlias, aFixe, cCpo, nPar08, cFun, nClickDef, aColors, cTopFun, cBotFun, nPar14, bInitBloc, lNoMnuFilter, lSeeAll, lChgAll) Programao ADVPL II e Guia de Referncia Pgina 31
E Parmetros:
nLin1 Nmero da Linha Inicial nCol1 Nmero da Coluna Inicial nLin2 Nmero da Linha Final nCol2 Nmero da Coluna Final cAlias Alias do arquivo que ser visualizado no browse. Para utilizar a funo MBrowse com arquivos de trabalho, o alias do arquivo de trabalho deve ser obrigatoriamente 'TRB' e o parmetro aFixe torna-se obrigatrio. aFixe Array bi-dimensional contendo os nomes dos campos fixos pr-definidos, obrigando a exibio de uma ou mais colunas ou a definio das colunas quando a funo utilizada com arquivos de trabalho. A estrutura do array diferente para arquivos que fazem parte do dicionrio de dados e para arquivos de trabalho.
Arquivos que fazem parte do dicionrios de dados
[n][1]=>Descrio do campo [n][2]=>Nome do campo
Arquivos de trabalho
[n][1]=>Descrio do campo [n][2]=>Nome do campo [n][3]=>Tipo [n][4]=>Tamanho [n][5]=>Decimal [n][6]=>Picture
Pgina 32 Programao ADVPL II e Guia de Referncia E Parmetros: cCpo Campo a ser validado se est vazio ou no para exibio do bitmap de status. Quando esse parmetro utilizado, a primeira coluna do browse ser um bitmap indicando o status do registro, conforme as condies configuradas nos parmetros cCpo, cFun e aColors. nPar08 Parmetro reservado. cFun Funo que retornar um valor lgico para exibio do bitmap de status. Quando esse parmetro utilizado, o parmetro cCpo automaticamente desconsiderado. nClickDef Nmero da opo do aRotina que ser executada quando for efetuado um duplo clique em um registro do browse. O default executar a rotina de visualizao. aColors Array bi-dimensional para possibilitar o uso de diferentes bitmaps de status. [n][1]=>Funo que retornar um valor lgico para a exibio do bitmap [n][2]=>Nome do bitmap que ser exibido quando a funo retornar .T. (True). O nome do bitmap deve ser um recurso do repositrio e quando esse parmetro utilizado os parmetros cCpo e cFun so automaticamente desconsiderados. cTopFun Funo que retorna o limite superior do filtro baseado na chave de ndice selecionada. Esse parmetro deve ser utilizado em conjunto com o parmetro cBotFun. cBotFun Funo que retorna o limite inferior do filtro baseado na chave de ndice selecionada. Esse parmetro deve ser utilizado em conjunto com o parmetro cTopFun. nPar14 Parmetro reservado. bInitBloc Bloco de cdigo que ser executado no ON INIT da janela do browse. O bloco de cdigo receber como parmetro o objeto da janela do browse. lNoMnuFilter Valor lgico que define se a opo de filtro ser exibida no menu da MBrowse. .T. => No exibe a opo no menu ou .F. => (default) Exibe a opo no menu. A opo de filtro na MBrowse est disponvel apenas para TOPConnect. lSeeAll Identifica se o Browse dever mostrar todas as filiais. O valor default .F. ( False ), no mostra todas as filiais. Caso os parmetros cTopFun ou cBotFun sejam informados esse parmetro ser configurado automaticamente para .F. ( False ). Parmetro vlido partir da verso 8.11. A funo SetBrwSeeAll muda o valor default desse parmetro. lChgAll Identifica se o registro de outra filial est autorizado para alteraes. O valor default .F. ( False ), no permite alterar registros de outras filiais. Quando esse parmetro est configurado para .T. ( True ), o parmetro lSeeAll configurado automaticamente para .T. ( True ). Caso os parmetros cTopFun ou cBotFun sejam informados esse parmetro ser configurado automaticamente para .F. ( False ). Parmetro vlido partir da verso 8.11. A funo SetBrwChgAll muda o valor default desse parmetro. Programao ADVPL II e Guia de Referncia Pgina 33
E Variveis private adicionais
aRotina Array contendo as funes que sero executadas pela Mbrowse, nele ser definido o tipo de operao a ser executada (incluso, alterao, excluso, visualizao, pesquisa, etc. ), e sua estrutura composta de 5 (cinco) dimenses:
Ele ainda pode ser parametrizado com as funes bsicas 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 Ttulo do browse que ser exibido.
E Informaes passadas para funes do aRotina:
Ao definir as funes no array aRotina, se o nome da funo no for especificado com (), a Mbrowse passar como parmetros as seguintes variveis de controle:
cAlias Nome da rea de trabalho definida para a Mbrowse nReg Recno do registro posicionado no Browse nOpc Posio da opo utilizada na Mbrowse de acordo com a ordem da funo no array a Rotina.
A posio das funes no array aRotina define o contedo de uma varivel de controle que ser repassada para as funes chamadas a partir da Mbrowse, convencionada como nOpc. Desta forma, para manter o padro da aplicao ERP a ordem a ser seguida na definio do aRotina : 1. Pesquisar 2. Visualizar 3. Incluir 4. Alterar 5. Excluir 6. Livre Pgina 34 Programao ADVPL II e Guia de Referncia
Local cAl i as : = " SA1" Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es" Pr i vat e aRot i na : = {}
AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1}) AADD( aRot i na, {" Vi sual i zar " , " AxVi sual " , 0, 2}) AADD( aRot i na, {" I ncl ui r " , " AxI ncl ui " , 0, 3}) AADD( aRot i na, {" Al t er ar " , " AxAl t er a" , 0, 4}) AADD( aRot i na, {" Excl ui r " , " AxDel et a" , 0, 5})
dbSel ect Ar ea( cAl i as) dbSet Or der ( 1) mBr owse( 6, 1, 22, 75, cAl i as)
Ret ur n Ni l
Exemplo: Funo Inclui() substituindo a funo AxInclui() Chamada da Mbrowse()
Local cTudoOk : = " ( Al er t ( ' OK' ) , . T. ) " Local nOpcao : = 0
nOpcao : = AxDel et a( cAl i as, nReg, aRotina[nOpc,4]) Programao ADVPL II e Guia de Referncia Pgina 37 // Identifica corretamente a opo definida para o funo em aRotinas com mais // do que os 5 elementos padres.
I f nOpcao == 1 MsgI nf o( Excl uso r eal i zada comsucesso! ) El seI f == 2 MsgI nf o( Excl uso cancel ada! ) Endi f
Ret ur n Ni l
2.9.1 AxFunctions() Conforme mencionado nos tpicos sobre as interfaces padres AxCadastro() e Mbrowse(), existem funes padres da aplicao ERP que permitem a visualizao, incluso, alterao e excluso de dados em formato simples. Estas funes so padres na definio da interface AxCadastro() e podem ser utilizadas tambm da construo no array aRotina utilizado pela Mbrowse(), as quais esto listadas a seguir: AXPESQUI() AXVISUAL() AXINCLUI() AXALTERA() AXDELETA() AXPESQUI()
Sintaxe AXPESQUI() Descrio Funo de pesquisa padro em registros exibidos pelos browses do sistema, a qual posiciona o browse no registro pesquisado. Exibe uma tela que permite a seleo do ndice a ser utilizado na pesquisa e a digitao das informaes que compe a chave de busca.
AXVISUAL()
Sintaxe AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,; aButtons, lMaximized ) Descrio Funo de visualizao padro das informaes de um registro, no formato Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().
AXINCLUI()
Sintaxe AxInclui(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,; cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized) Pgina 38 Programao ADVPL II e Guia de Referncia Descrio Funo de incluso padro das informaes de um registro, no formato Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().
AXALTERA()
Sintaxe AxAltera(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,; cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized) Descrio Funo de alterao padro das informaes de um registro, no formato Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().
AXDELETA()
Sintaxe AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,; aAuto, lMaximized) Descrio Funo de excluso padro das informaes de um registro, no formato Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().
Programao ADVPL II e Guia de Referncia Pgina 39
Exerccio 03 Implementar uma MBrowse com as funes de cadastro padres para a tabela padro do ERP SB1: Produtos
2.9.2 FilBrowse()
A FilBrowse() uma funcionalidade que permite a utilizao de filtros na MBrowse().
E Sintaxe: FilBrowse(cAlias, aQuery, cFiltro, lShowProc)
E Parmetros:
cAlias Alias ativo definido para a Mbrowse() aQuery Este parmetro dever ser inicializado sempre vazio e sua passagem obrigatoriamente por referncia, pois, seu retorno ser enviado para a funo EndFilBrw().
[1]=>Nome do Arquivo Fsico [2]=>Ordem correspondente ao Sindex cFiltro Condio de filtro para a MBrowse() lShowProc
Habilita (.T.) ou desabilita (.F.) a apresentao da mensagem Selecionando registros ..., no processamento.
2.9.3 EndFilBrw()
A EndFilBrw() uma funcionalidade que permite eliminar o filtro e o arquivo temporrio criados pela FilBrowse().
E Sintaxe: EndFilBrw(cAlias, aQuery)
E Parmetros:
cAlias Alias ativo definido para a Mbrowse() aQuery Array de retorno passado por referncia para a FilBrowse(). [1]=>Nome do Arquivo Fsico [2]=>Ordem correspondente ao Sindex Pgina 40 Programao ADVPL II e Guia de Referncia 2.9.4 PesqBrw()
A PesqBrw() uma funcionalidade que permite a pesquisa dentro da MBrowse(). Esta funo dever obrigatoriamente substituir a funo AxPesqui, no array do aRotina, sempre que for utilizada a funo FilBrowse().
E Sintaxe: PesqBrw(cAlias , nReg, bBrwFilter)
E Parmetros:
cAlias Alias ativo definido para a Mbrowse() nReg Nmero do registro bBrwFilter Bloco de Cdigo que contm a FilBrowse() Ex: bBrwFilter := { || FilBrowse(cAlias, aQuery, cFiltro, lShowProc) }
2.9.5 BrwLegenda ()
A BrwLegenda() uma funcionalidade que permite a incluso de legendas na MBrowse().
E Sintaxe: BrwLegenda(cCadastro , cTitulo, aLegenda)
E Parmetros:
cCadastro Mesma varivel utilizada para a MBrowse, que identifica o cadastro que est em uso no momento cTitulo Ttulo (identificao) da Legenda aLegenda Array contendo de definio da cor e do texto, explicativo sobre o que ela representa na MBrowse Ex: {{Cor,Texto}}
Lista de cores disponveis no Protheus
O BR_AMARELO O BR_AZUL O BR_BRANCO O BR_CINZA O BR_LARANJA O BR_MARRON O BR_VERDE O BR_VERMELHO O BR_PINK O BR_PRETO Programao ADVPL II e Guia de Referncia Pgina 41
Local cAl i as : = " SA2" Local aCor es : = {} Local cFi l t r a : = " A2_FI LI AL == ' " +xFi l i al ( ' SA2' ) +" ' . And. A2_EST == ' SP' "
Pr i vat e cCadast r o : = " Cadast r o de For necedor es" Pr i vat e aRot i na : = {} Pr i vat e aI ndexSA2 : = {} Pr i vat e bFi l t r aBr w: = { | | Fi l Br owse( cAl i as, @aI ndexSA2, @cFi l t r a) }
AADD( aRot i na, {" Pesqui sar " , " PesqBr w" , 0, 1}) AADD( aRot i na, {" Vi sual i zar " , " AxVi sual " , 0, 2}) AADD( aRot i na, {" I ncl ui r " , " U_BI ncl ui " , 0, 3}) AADD( aRot i na, {" Al t er ar " , " U_BAl t er a" , 0, 4}) AADD( aRot i na, {" Excl ui r " , " U_BDel et a" , 0, 5}) AADD( aRot i na, {" Legenda" , " U_BLegenda" , 0, 3})
/ * - - CORES DI SPONI VEI S PARA LEGENDA - - BR_AMARELO BR_AZUL BR_BRANCO BR_CI NZA Pgina 42 Programao ADVPL II e Guia de Referncia BR_LARANJ A BR_MARRON BR_VERDE BR_VERMELHO BR_PI NK BR_PRETO */ AADD( aCor es, {" A2_TI PO == ' F' " , " BR_VERDE" }) AADD( aCor es, {" A2_TI PO == ' J ' " , " BR_AMARELO" }) AADD( aCor es, {" A2_TI PO == ' X' " , " BR_LARANJ A" }) AADD( aCor es, {" A2_TI PO == ' R' " , " BR_MARRON" }) AADD( aCor es, {" Empt y( A2_TI PO) " , " BR_PRETO" })
dbSel ect Ar ea( cAl i as) dbSet Or der ( 1)
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Cr i a o f i l t r o na MBr owse ut i l i zando a f uno Fi l Br owse / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Eval ( bFi l t r aBr w)
dbSel ect Ar ea( cAl i as) dbGoTop( ) mBr owse( 6, 1, 22, 75, cAl i as, , , , , , aCor es)
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Del et a o f i l t r o ut i l i zado na f uno Fi l Br owse / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EndFi l Br w( cAl i as, aI ndexSA2)
Ret ur n Ni l
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Funo: BI ncl ui - Rot i na de I ncl uso / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - User Funct i on BI ncl ui ( cAl i as, nReg, nOpc)
Local nOpcao : = 0
nOpcao : = AxI ncl ui ( cAl i as, nReg, nOpc)
I f nOpcao == 1 MsgI nf o( " I ncl uso ef et uada comsucesso! " ) El se MsgI nf o( " I ncl uso cancel ada! " ) Endi f
Ret ur n Ni l Programao ADVPL II e Guia de Referncia Pgina 43
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Funo: BAl t er a - Rot i na de Al t er ao / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - User Funct i on BAl t er a( cAl i as, nReg, nOpc)
Local nOpcao : = 0
nOpcao : = AxAl t er a( cAl i as, nReg, nOpc)
I f nOpcao == 1 MsgI nf o( " Al t er ao ef et uada comsucesso! " ) El se MsgI nf o( " Al t er ao cancel ada! " ) Endi f
Ret ur n Ni l / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Funo: BDel et a - Rot i na de Excl uso / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - User Funct i on BDel et a( cAl i as, nReg, nOpc)
Local nOpcao : = 0
nOpcao : = AxDel et a( cAl i as, nReg, nOpc)
I f nOpcao == 1 MsgI nf o( " Excl uso ef et uada comsucesso! " ) El se MsgI nf o( " Excl uso cancel ada! " ) Endi f
AADD( aLegenda, {" BR_VERDE" , " Pessoa F si ca" }) AADD( aLegenda, {" BR_AMARELO" , " Pessoa J ur di ca" }) AADD( aLegenda, {" BR_LARANJ A" , " Expor t ao" }) AADD( aLegenda, {" BR_MARRON" , " For necedor Rur al " }) AADD( aLegenda, {" BR_PRETO" , " No Cl assi f i cado" })
Br wLegenda( cCadast r o, " Legenda" , aLegenda) Pgina 44 Programao ADVPL II e Guia de Referncia
Ret ur n Ni l
Exerccio 04 Implementar a legenda para a MBrowse da tabela padro do ERP SB1: Produtos
2.10 MarkBrowse()
A funo MarkBrow() permite que os elementos de um browse, sejam marcados ou desmarcados. Para utilizao da MarkBrowse() necessrio declarar as variveis cCadastro e aRotina como Private, antes da chamada da funo.
cAlias Alias ativo definido para a Mbrowse() cCampo Campo do arquivo onde ser feito o controle (gravao) da marca. cCpo Campo onde ser feita a validao para marcao e exibio do bitmap de status. aCampos Vetor de colunas a serem exibidas no browse, deve conter as seguintes dimenses: [n][1] nome do campo; [n][2] - Nulo (Nil); [n][3] - Ttulo do campo; [n][4] - Mscara (picture). lInvert Inverte a marcao. cMarca String a ser gravada no campo especificado para marcao. cCtrlM Funo a ser executada caso deseje marcar todos elementos. uPar8 Parmetro reservado. cExpIni Funo que retorna o contedo inicial do filtro baseada na chave de ndice selecionada. cExpFim Funo que retorna o contedo final do filtro baseada na chave de ndice selecionada. cAval Funo a ser executada no duplo clique em um elemento no browse. bParBloco Bloco de cdigo a ser executado na inicializao da janela Programao ADVPL II e Guia de Referncia Pgina 45
E Informaes passadas para funes do aRotina:
Ao definir as funes no array aRotina, se o nome da funo no for especificado com (), a MarkBrowse passar como parmetros as seguintes variveis de controle:
cAlias Nome da rea de trabalho definida para a Mbrowse nReg Recno do registro posicionado no Browse nOpc Posio da opo utilizada na Mbrowse de acordo com a ordem da funo no array a Rotina. cMarca Marca em uso pela MarkBrw() lInverte Indica se foi utilizada a inverso da seleo dos itens no browse.
2.10.1 Funes de Apoio
GetMark: define a marca atual.
IsMark: avalia se um determinado contedo igual a marca atual.
ThisMark: captura a marca em uso.
ThisInv: indica se foi usado o recurso de selecionar todos (inverso).
MarkBRefresh: atualiza exibio na marca do browse. Utilizada quando a marca colocada ou removida em blocos e no pelo clique.
USER FUNCTI ON MkBr wSA1( ) Pgina 46 Programao ADVPL II e Guia de Referncia
Local aCpos : = {} Local aCampos : = {} Local nI : = 0 Local cAl i as : = " SA1"
Pr i vat e aRot i na : = {} Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es" Pr i vat e aRecSel : = {}
AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1}) AADD( aRot i na, {" Vi sual i zar " , " AxVi sual " , 0, 2}) AADD( aRot i na, {" I ncl ui r " , " AxI ncl ui " , 0, 3}) AADD( aRot i na, {" Al t er ar " , " AxAl t er a" , 0, 4}) AADD( aRot i na, {" Excl ui r " , " AxDel et a" , 0, 5}) AADD( aRot i na, {" Vi sual i zar Lot e" , " U_Vi sLot e" , 0, 5})
dbSel ect Ar ea( " SX3" ) dbSet Or der ( 2) For nI : = 1 To Len( aCpos) I F dbSeek( aCpos[ nI ] ) AADD( aCampos, {X3_CAMPO, " " , I I F( nI ==1, " " , Tr i m( X3_TI TULO) ) , ; Tr i m( X3_PI CTURE) }) ENDI F Next
DbSel ect Ar ea( cAl i as) DbSet Or der ( 1)
Mar kBr ow( cAl i as, aCpos[ 1] , " A1_TI PO == ' ' " , aCampos, . F. , Get Mar k( , " SA1" , " A1_OK" ) )
Ret ur n Ni l
Exemplo: Funo VisLote() utilizao das funes acessrias da MarkBrow()
/ */ +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Pr ogr ama | Vi sLot e( ) | Aut or | ARNALDO RAYMUNDO J R. | Dat a | | Programao ADVPL II e Guia de Referncia Pgina 47 +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Desc. | Funo ut i l i zada par a demonst r ar o uso do r ecur so da Mar kBr owse| +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Uso | Cur so de ADVPL | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / */ USER FUNCTI ON Vi sLot e( ) Local cMar ca : = Thi sMar k( ) Local nX : = 0 Local l I nver t : = Thi sI nv( ) Local cText o : = " " Local cEOL : = CHR( 10) +CHR( 13) Local oDl g Local oMemo
DbSel ect Ar ea( " SA1" ) DbGoTop( ) Whi l e SA1- >( ! EOF( ) )
/ / I sMar k( " A1_OK" , cMar ca, l I nver t e) I F SA1- >A1_OK == cMar ca . AND. ! l I nver t AADD( aRecSel , {SA1- >( Recno( ) ) , SA1- >A1_COD, SA1- >A1_LOJ A, SA1- >A1_NREDUZ}) ELSEI F SA1- >A1_OK ! = cMar ca . AND. l I nver t AADD( aRecSel , {SA1- >( Recno( ) ) , SA1- >A1_COD, SA1- >A1_LOJ A, SA1- >A1_NREDUZ}) ENDI F
SA1- >( dbSki p( ) ) Enddo
I F Len( aRecSel ) > 0 cText o : = " Cdi go | Loj a | Nome Reduzi do " +cEol / / " 1234567890123456789012345678901234567890 / / " CCCCCC | LL | NNNNNNNNNNNNNNNNNNNN +cEol
Pgina 48 Programao ADVPL II e Guia de Referncia DEFI NE MSDI ALOG oDl g TI TLE " Cl i ent es Sel eci onados" Fr om000, 000 TO 350, 400 PI XEL @005, 005 GET oMemo VAR cText o MEMO SI ZE 150, 150 OF oDl g PI XEL oMemo: bRCl i cked : = {| | Al l waysTr ue( ) } DEFI NE SBUTTON FROM 005, 165 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g PI XEL ACTI VATE MSDI ALOG oDl g CENTER Li mpaMar ca( ) ENDI F
RETURN
Programao ADVPL II e Guia de Referncia Pgina 49 Exemplo: Funo LimpaMarca() utilizao das funes acessrias da MarkBrow()
For nX : = 1 t o Len( aRecSel ) SA1- >( DbGot o( aRecSel [ nX] [ 1] ) ) RecLock( " SA1" , . F. ) SA1- >A1_OK : = SPACE( 2) MsUnLock( ) Next nX
RETURN
Exerccio 05 Implementar uma MarkBrowse com as funes de cadastro padres para a tabela padro do ERP SB1: Produtos
Exerccio 06 Implementar na MarkBrowse da tabela padro SB1, uma funo para excluso de mltiplos itens selecionados no Browse. ERP SB1: Produtos
Exerccio 07 Implementar uma MarkBrowse para a tabela SA1, para visualizao de dados de Pgina 50 Programao ADVPL II e Guia de Referncia mltiplos clientes selecionados
2.11 Modelo2()
O nome Modelo 2 foi conceituado pela Microsiga por se tratar de um prottipo de tela para entrada de dados. Inicialmente vamos desmistificar dois pontos:
O Funo Modelo2() Trata-se de uma funo pronta que contempla o prottipo Modelo 2, porm, este um assunto que no iremos tratar aqui, visto que uma funcionalidade simples que quando necessrio intervir em algo na rotina no h muito recurso para tal.
O Prottipo Modelo 2 Trata-se de uma tela, como a figura abaixo, onde seu objetivo efetuar a manuteno em vrios registros de uma s vez. Por exemplo: efetuar o movimento interno de vrios produtos do estoque em um nico lote.
2.11.1 Componentes de uma tela no formato Modelo 2
Programao ADVPL II e Guia de Referncia Pgina 51 Objeto MsDialog()
Deve ser utilizada como janela padro para entrada de dados, um tipo de objeto modal, ou seja, no permite que outra janela ativa receba dados enquanto esta estiver ativa.
Toda vez que utilizar este comando, o ADVPL exige que seja declarada a diretiva Include no cabealho do programa o arquivo Protheus.ch, isto porque o compilador precisar porque este comando trata-se de um pseudo cdigo e sua traduo ser feita na compilao. Vale lembrar, tambm, que este s ser acionado depois que instanciado e ativado por outro comando.
DEFI NE MSDI ALOG oDl g TI TLE " Pr ot t i po Model o 2" FROM 0, 0 TO 280, 552 OF; oMai nWnd PI XEL
ACTI VATE MSDI ALOG oDl g CENTER
Reparem que o comando DEFINE MSDIALOG instanciou e o comando ACTIVATE MSDIALOG ativa todos os objetos, ou seja, todo ou qualquer outro objeto que precisar colocar nesta janela ser preciso informar em qual objeto. Para este caso, sempre ser utilizada a varivel de objeto exportvel oDlg.
Pgina 52 Programao ADVPL II e Guia de Referncia Funo EnchoiceBar()
Funo que cria uma barra de botes padro de Ok e Cancelar, permitindo a implementao de botes adicionais.
oDlg Objeto Janela onde a barra ser criada. bOk Objeto Bloco de cdigo executado quando clicado boto Ok. bCancelar Objeto Bloco de cdigo executado quando clicado. lMensApag Lgico Indica se ao clicar no boto Ok aparecer uma tela de confirmao de excluso. Valor padro falso. aBotes Vetor Vetor com informaes para criao de botes adicionais na barra. Seu formato {bitmap, bloco de cdigo, mensagem}.
Figura: Prottipo Modelo2 Enchoice
Programao ADVPL II e Guia de Referncia Pgina 53 Objeto TPanel()
Repare que para facilitar o desenvolvimento foi utilizado o objeto TPanel para ajudar o alinhamento dos objetos TSay e TGet, ou seja, a utilizao deste recurso permite que o programador no se preocupe com coordenadas complexas para deixar a unio dos objetos simtricos.
Utilize o objeto TPanel quando desejar criar um painel esttico, onde podem ser criados outros controles com o objetivo de organizar ou agrupar componentes visuais.
nRow Numrico vertical em pixel. nCol Numrico horizontal em pixel. cText Texto a ser exibido ao fundo. oWnd Objeto da janela ou controle onde ser criado o objeto. oFont Caractersticas da fonte do texto que aparecer ao fundo. lCentered Exibe o texto do ttulo centralizado. lPar6 Reservado. nClrText Cor do texto de controle. nClrBack Cor do fundo de controle. nWidth Largura do controle em pixel. nHeight Altura do controle em pixel. lLowered Exibe o painel rebaixado em relao ao controle de fundo. lRaised Exibe a borda do controle rebaixado em relao ao controle de fundo.
Comando SAY - Objeto: TSay()
O comando SAY ou objeto TSay exibe o contedo de texto esttico sobre uma janela.
E Sintaxe SAY:
@ 4,6 SAY "Cdigo:" SIZE 70,7 PIXEL OF oTPanel1
E Sintaxe TSay(): TSay():New([anRow], [anCol], [abText], [aoWnd], [acPicture], [aoFont], [lPar7], [lPar8], [lPar9], [alPixels], Pgina 54 Programao ADVPL II e Guia de Referncia [anClrText], [anClrBack], [anWidth], [anHeight], [lPar15], [lPar16], [lPar17], [lPar18], [lPar19])
E Parmetros:
anRow Numrico, opcional. Coordenada vertical em pixels ou caracteres. anCol Numrico, opcional. Coordenada horizontal em pixels ou caracteres. abText Code-Block, opcional. Quando executado deve retornar uma cadeia de caracteres a ser exibida. aoWnd Objeto, opcional. Janela ou dilogo onde o controle ser criado. acPicture Caractere, opcional. Picture de formatao do contedo a ser exibido. aoFont Objeto, opcional. Objeto tipo tFont para configurao do tipo de fonte que ser utilizado para exibir o contedo. lPar7 Reservado. lPar8 Reservado. lPar9 Reservado. alPixels Lgico, opcional. Se .T. considera coordenadas passadas em pixels se .F., padro, considera as coordenadas passadas em caracteres. anClrText Numrico, opcional. Cor do contedo do controle. anClrBack Numrico, opcional. Cor do fundo do controle. anWidth Numrico, opcional. Largura do controle em pixels. anHeight Numrico, opcional. Altura do controle em pixels. lPar15 Reservado. lPar16 Reservado. lPar17 Reservado. lPar18 Reservado. lPar19 Reservado.
Comando MSGET - Objeto: TGet()
O comando MsGet ou o objeto TGet utilizado para criar um controle que armazene ou altere o contedo de uma varivel atravs de digitao. O contedo da varivel s modificado quando o controle perde o foco de edio para outro controle.
E Sintaxe TGet():New([anRow], [anCol], [abSetGet], [aoWnd], [anWidth], [anHeight], [acPict], [abValid], [anClrFore], [anClrBack], [aoFont], [lPar12], [oPar13], [alPixel], [cPar15], [lPar16], [abWhen], Programao ADVPL II e Guia de Referncia Pgina 55 [lPar18], [lPar19], [abChange], [alReadOnly], [alPassword], [cPar23], [acReadVar], [cPar25], [lPar26], [nPar27], [lPar28])
E Parmetros:
anRow Numrico, opcional. Coordenada vertical em pixels ou caracteres. anCol Numrico, opcional. Coordenada horizontal em pixels ou caracteres. abSetGet Bloco de cdigo, opcional. Bloco de cdigo no formato {|u| IF( Pcount( )>0, <var>:= u, <var> ) } que o controle utiliza para atualizar a varivel <var>. <var> deve ser tipo caracter, numrico ou data. aoWnd Objeto, opcional. Janela ou controle onde o controle ser criado. anWidth Numrico, opcional. Largura do controle em pixels. anHeight Numrico, opcional. Altura do controle em pixels. acPict Caractere, opcional. Mscara de formatao do contedo a ser exibido. abValid Bloco de cdigo, opcional. Executado quando o contedo do controle deve ser validado, deve retornar T se o contedo for vlido e F quando o contedo for invlido. anClrFore Numrico, opcional. Cor de fundo do controle. anClrBack Numrico, opcional. Cor do texto do controle. aoFont Objeto, opcional. Objeto tipo tFont utilizado para definir as caractersticas da fonte utilizada, para exibir o contedo do controle. lPar12 Reservado. oPar13 Reservado. alPixel Lgico, opcional. Se .T. as coordenadas informadas so em pixels, se .F. so em caracteres. cPar15 Reservado. lPar16 Reservado. abWhen Bloco de cdigo, opcional. Executado quando mudana de foco de entrada de dados est sendo efetuada na janela onde o controle foi criado. O bloco deve retornar T se o controle deve permanecer habilitado ou F, se no. lPar18 Reservado. lPar19 Reservado. abChange Bloco de cdigo, opcional. Executado quando o controle modifica o valor da varivel associada. alReadOnly Lgico, opcional. Se .T. o controle no poder ser editado. alPassword Lgico, opcional. Se .T. o controle exibir asteriscos * no lugar dos caracteres exibidos pelo controle para simular entrada de senha. cPar23 Reservado. acReadVar Caractere, opcional. Nome da varivel que o controle dever manipular. Dever ser a mesma varivel informada no parmetro Pgina 56 Programao ADVPL II e Guia de Referncia abSetGet, e ser o retorno da funo ReadVar( ). cPar25 Reservado. lPar26 Reservado. nPar27 Reservado. lPar18 Reservado.
Objeto MsGetDados()
Objeto tipo lista com uma ou mais colunas para cadastramento de dados baseado em um vetor. Sua utilizao exige que sejam utilizadas trs variveis com seu escopo Private, so elas: aRotina, aHeader e aCOLS.
E Observaes importantes:
O O vetor aHeader deve ser construdo com base no dicionrio de dados. O O vetor aCOLS deve ser construdo com base no vetor aHeader, porm deve-se criar uma coluna adicional para o controle de excluso do registro, ou seja, quando o usurio teclar a tecla <DELETE> a linha ficar na cor cinza e esta coluna estar com o seu valor igual a verdadeiro (.T.). O Quando instanciado este objeto possvel saber em que linha o usurio est porque o objeto trabalha com uma varivel de escopo Public denominada n, seu valor numrico e ter sempre no contedo a linha em que o usurio encontra-se com o cursor.
Programao ADVPL II e Guia de Referncia Pgina 57 E Parmetros:
nSuperior Distncia entre a MsGetDados e o extremidade superior do objeto que a contm. nEsquerda Distncia entre a MsGetDados e o extremidade esquerda do objeto que a contm. nInferior Distncia entre a MsGetDados e o extremidade inferior do objeto que a contm. nDireita Distncia entre a MsGetDados e o extremidade direita do objeto que a contm. nOpc Posio do elemento do vetor aRotina que a MsGetDados usar como referencia. cLinhaOk Funo executada para validar o contexto da linha atual do aCols. cTudoOk Funo executada para validar o contexto geral da MsGetDados (todo aCols). cIniCpos Nome dos campos do tipo caracter que utilizaro incremento automtico. Este parmetro deve ser no formato +<nome do primeiro campo>+<nome do segundo campo>+.... lApagar Habilita deletar linhas do aCols. Valor padro falso. aAlter Vetor com os campos que podero ser alterados. uPar1 Parmetro reservado. lVazio Habilita validao da primeira coluna do aCols para que esta no esteja vazia. Valor padro falso. nMax Nmero mximo de linhas permitidas. Valor padro 99. cCampoOk Funo executada na validao do campo. cSuperApagar Funo executada quando pressionada as teclas <Ctrl>+<Delete>. uPar2 Parmetro reservado. cApagaOk Funo executada para validar a excluso de uma linha do aCols. oWnd Objeto no qual a MsGetDados ser criada.
Varivel Private aRotina
Array com as rotinas que sero executadas na MBrowse e que definir o tipo de operao que est sendo executada, por exemplo: Pesquisar, Visualizar, Incluir, Alterar, Excluir e outros.
Este vetor precisa ser construdo no formato:
Elemento Contedo 1 Ttulo da opo. 2 Nome da rotina (Function). 3 Reservado. 4 Operao (1-Pesquisar;2-Visualizar;3-Incluir;4-Alterar;5-Excluso). 5 Acesso relacionado a rotina. Se esta opo no for informada, nenhum Pgina 58 Programao ADVPL II e Guia de Referncia acesso ser validado.
Varivel Private aHeader
Array com informaes das colunas, ou seja, com as caractersticas dos campos que esto contidas no dicionrio de dados (SX3), este vetor precisa estar no formato abaixo:
Elemento Contedo 1 Ttulo do campo 2 Nome do campo 3 Mscara do campo 4 Tamanho do campo 5 Decimal do campo 6 Validao de usurio do campo 7 Uso do campo 8 Tipo do campo (caractere, numrico, data e etc.) 9 Prefixo da tabela 10 Contexto do campo (real ou virtual)
Varivel Private aCols
Vetor com as linhas a serem editadas. As colunas devem ser construdas com base no vetor aHeader e mais uma ltima coluna com o valor lgico que determina se a linha foi excluda, inicialmente esta dever ter o seu contedo igual a falso (F).
2.11.2 Estrutura de um programa utilizando a Modelo2()
O exemplo abaixo demonstra a montagem de um programa para a utilizao do prottipo Modelo 2. Antes de iniciarmos o exemplo vamos estruturar o programa.
Programao ADVPL II e Guia de Referncia Pgina 59 Estrutura do programa
Linhas Programa 1 Funo principal; 2 Declarao e atribuio de variveis; 3 Acesso a tabela principal e sua ordem; 4 Chamada da funo MBrowse; 5 Fim da funo principal. 6 7 Funo de visualizao, alterao e excluso; 8 Declarao e atribuio de variveis; 9 Acesso ao primeiro registro da chave em que est posicionado na MBrowse; 10 Montagem das variveis estticas em tela; 11 Montagem do vetor aHeader por meio do dicionrio de dados; 12 Montagem do vetor aCOLS de todos os registros referentes chave principal em que est posicionado na MBrowse; 13 Instncia da MsDialog; 14 Instncia dos objetos TSay e TGet; 15 Instncia do objeto MsGetDados; 16 Ativar o objeto principal que o objeto da janela; 17 Se for operao diferente de visualizao e clicou no boto OK; 18 A operao de Alterao? 19 Chamar a funo para alterar os dados; 20 Caso contrrio: 21 Chamar a funo para excluir os dados; 22 Fim da funo de visualizao, alterao e excluso. 23 24 Funo de incluso; 25 Declarao e atribuio de variveis; 26 Montagem das variveis estticas em tela; 27 Montagem do vetor aHeader por meio do dicionrio de dados; 28 Montagem do vetor aCOLS com o seu contedo conforme o inicializador padro do campo ou vazio, pois trata-se de uma incluso; 29 Instncia da MsDialog; 30 Instncia dos objetos TSay e TGet; 31 Instncia do objeto MsGetDados; 32 Ativar o objeto principal que o objeto da janela; 33 Se clicou no boto OK; 34 Chamar a funo para incluir os dados; 35 Fim da funo de incluso.
Pgina 60 Programao ADVPL II e Guia de Referncia Rotina principal
#i ncl ude " pr ot heus. ch"
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | xModel o2 | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Funo exempl o do pr ot t i po Model o2. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + User Funct i on xModel o2( ) Pr i vat e cCadast r o : = " Pr ot t i po Model o 2" Pr i vat e aRot i na : = {}
AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1}) AADD( aRot i na, {" Vi sual i zar " , ' U_Mod2Mnt ' , 0, 2}) AADD( aRot i na, {" I ncl ui r " , ' U_Mod2I nc' , 0, 3}) AADD( aRot i na, {" Al t er ar " , ' U_Mod2Mnt ' , 0, 4}) AADD( aRot i na, {" Excl ui r " , ' U_Mod2Mnt ' , 0, 5})
dbSel ect Ar ea( " ZA3" ) dbSet Or der ( 1) dbGoTop( )
User Funct i on Mod2I nc( cAl i as, nReg, nOpc ) Local oDl g Local oGet Local oTPanel 1 Local oTPAnel 2
Local cCodi go : = ZA3- >ZA3_CODI GO Local cNome : = ZA3- >ZA3_NOME Local dDat a : = dDat aBase
Pr i vat e aHeader : = {} Pr i vat e aCOLS : = {} Pr i vat e aREG : = {}
dbSel ect Ar ea( cAl i as ) dbSet Or der ( 1)
Mod2aHeader ( cAl i as ) Mod2aCOLS( cAl i as, nReg, nOpc )
DEFI NE MSDI ALOG oDl g TI TLE cCadast r o Fr om8, 0 To 28, 80 OF oMai nWnd
oTPanel 1 : = TPanel ( ) : New( 0, 0, " " , oDl g, NI L, . T. , ; . F. , NI L, NI L, 0, 16, . T. , . F. )
oTPanel 1: Al i gn : = CONTROL_ALI GN_TOP
@4, 006 SAY " Cdi go: " SI ZE 70, 7 PI XEL OF oTPanel 1 @4, 062 SAY " Nome: " SI ZE 70, 7 PI XEL OF oTPanel 1 @4, 166 SAY " Emi ssao: " SI ZE 70, 7 PI XEL OF oTPanel 1
@3, 026 MSGET cCodi go F3 " SA3" PI CTURE " @! " VALI D; Mod2Vend( cCodi go, @cNome) ; SI ZE 030, 7 PI XEL OF oTPanel 1
@3, 080 MSGET cNome When . F. SI ZE 78, 7 PI XEL OF oTPanel 1 @3, 192 MSGET dDat a PI CTURE " 99/ 99/ 99" SI ZE 40, 7 PI XEL OF oTPanel 1
oTPanel 2 : = TPanel ( ) : New( 0, 0, " " , oDl g, NI L, . T. , ; . F. , NI L, NI L, 0, 16, . T. , . F. ) oTPanel 2: Al i gn : = CONTROL_ALI GN_BOTTOM
oGet : = MSGet Dados( ) : New( 0, 0, 0, 0, nOpc, " U_Mod2LOk( ) " , ; " . T. " , " +ZA3_I TEM" , . T. ) oGet : oBr owse: Al i gn : = CONTROL_ALI GN_ALLCLI ENT Pgina 62 Programao ADVPL II e Guia de Referncia
ACTI VATE MSDI ALOG oDl g CENTER ON I NI T ; Enchoi ceBar ( oDl g, {| | I I F( U_Mod2TOk( ) , Mod2Gr vI ( ) , ; ( oDl g: End( ) , NI L ) ) }, {| | oDl g: End( ) })
Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 63 Rotina de Visualizao, Alterao e Excluso
Local oDl g Local oGet Local oTPanel 1 Local oTPAnel 2
Local cCodi go : = Space( Len( Space( ZA3- >ZA3_CODI GO) ) ) Local cNome : = Space( Len( Space( ZA3- >ZA3_NOME) ) ) Local dDat a : = Ct od( Space( 8) )
Pr i vat e aHeader : = {} Pr i vat e aCOLS : = {} Pr i vat e aREG : = {}
dbSel ect Ar ea( cAl i as ) dbGoTo( nReg )
cCodi go : = ZA3- >ZA3_CODI GO cNome : = ZA3- >ZA3_NOME cDat a : = ZA3- >ZA3_DATA
Mod2aHeader ( cAl i as ) Mod2aCOLS( cAl i as, nReg, nOpc )
DEFI NE MSDI ALOG oDl g TI TLE cCadast r o Fr om8, 0 To 28, 80 OF oMai nWnd
oTPane1 : = TPanel ( ) : New( 0, 0, " " , oDl g, NI L, . T. , ; . F. , NI L, NI L, 0, 16, . T. , . F. ) oTPane1: Al i gn : = CONTROL_ALI GN_TOP
@4, 006 SAY " Cdi go: " SI ZE 70, 7 PI XEL OF oTPanel 1 Pgina 64 Programao ADVPL II e Guia de Referncia @4, 062 SAY " Nome: " SI ZE 70, 7 PI XEL OF oTPanel 1 @4, 166 SAY " Emi ssao: " SI ZE 70, 7 PI XEL OF oTPanel 1
@3, 026 MSGET cCodi go When . F. SI ZE 30, 7 PI XEL OF oTPanel 1 @3, 080 MSGET cNome When . F. SI ZE 78, 7 PI XEL OF oTPanel 1 @3, 192 MSGET dDat a When . F. SI ZE 40, 7 PI XEL OF oTPanel 1
oTPanel 2 : = TPanel ( ) : New( 0, 0, " " , oDl g, NI L, . T. , ; . F. , NI L, NI L, 0, 16, . T. , . F. ) oTPanel 2: Al i gn : = CONTROL_ALI GN_BOTTOM
I f nOpc == 4 oGet : = MSGet Dados( ) : New( 0, 0, 0, 0, nOpc, " U_Mod2LOk( ) " , ; " . T. " , " +ZA3_I TEM" , . T. ) El se oGet : = MSGet Dados( ) : New( 0, 0, 0, 0, nOpc) Endi f oGet : oBr owse: Al i gn : = CONTROL_ALI GN_ALLCLI ENT
ACTI VATE MSDI ALOG oDl g CENTER ON I NI T ; Enchoi ceBar ( oDl g, {| | ( I I F( nOpc==4, Mod2Gr vA( ) , ; I I F( nOpc==5, Mod2Gr vE( ) , oDl g: End( ) ) ) , oDl g: End( ) ) }, ; {| | oDl g: End( ) }) Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 65 Montagem do array aHeader
St at i c Funct i on Mod2aHeader ( cAl i as ) Local aAr ea : = Get Ar ea( )
dbSel ect Ar ea( " SX3" ) dbSet Or der ( 1) dbSeek( cAl i as ) Whi l e ! EOF( ) . And. X3_ARQUI VO == cAl i as I f X3Uso( X3_USADO) . And. cNi vel >= X3_NI VEL AADD( aHeader , { Tr i m( X3Ti t ul o( ) ) , ; X3_CAMPO, ; X3_PI CTURE, ; X3_TAMANHO, ; X3_DECI MAL, ; X3_VALI D, ; X3_USADO, ; X3_TI PO, ; X3_ARQUI VO, ; X3_CONTEXT}) Endi f dbSki p( ) End Rest Ar ea( aAr ea) Ret ur n
Pgina 66 Programao ADVPL II e Guia de Referncia Montagem do array aCols
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod2aCOLS | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a mont ar o vet or aCOLS. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod2aCOLS( cAl i as, nReg, nOpc ) Local aAr ea : = Get Ar ea( ) Local cChave : = ZA3- >ZA3_CODI GO Local nI : = 0
I f nOpc <> 3 dbSel ect Ar ea( cAl i as ) dbSet Or der ( 1) dbSeek( xFi l i al ( cAl i as ) + cChave ) Whi l e ! EOF( ) . And. ; ZA3- >( ZA3_FI LI AL + ZA3_CODI GO ) == xFi l i al ( cAl i as ) + cChave AADD( aREG, ZA3- >( RecNo( ) ) ) AADD( aCOLS, Ar r ay( Len( aHeader ) + 1 ) ) For nI : = 1 To Len( aHeader ) I f aHeader [ nI , 10] == " V" aCOLS[ Len( aCOLS) , nI ] : = Cr i aVar ( aHeader [ nI , 2] , . T. ) El se aCOLS[ Len( aCOLS) , nI ] : = Fi el dGet ( Fi el dPos( aHeader [ nI , 2] ) ) Endi f Next nI aCOLS[ Len( aCOLS) , Len( aHeader ) +1] : = . F. dbSki p( ) End El se AADD( aCOLS, Ar r ay( Len( aHeader ) + 1 ) ) For nI : = 1 To Len( aHeader ) aCOLS[ 1, nI ] : = Cr i aVar ( aHeader [ nI , 2] , . T. ) Next nI aCOLS[ 1, GdFi el dPos( " ZA3_I TEM" ) ] : = " 01" aCOLS[ 1, Len( aHeader ) +1 ] : = . F. Endi f Programao ADVPL II e Guia de Referncia Pgina 67 Rest ar ea( aAr ea ) Ret ur n Pgina 68 Programao ADVPL II e Guia de Referncia Efetivao da incluso
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod2Gr vI | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a gr avar os dados na i ncl uso. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod2Gr vI ( ) Local aAr ea : = Get Ar ea( ) Local nI : = 0 Local nX : = 0
dbSel ect Ar ea( " ZA3" ) dbSet Or der ( 1) For nI : = 1 To Len( aCOLS ) I f ! aCOLS[ nI , Len( aHeader ) +1] RecLock( " ZA3" , . T. ) ZA3- >ZA3_FI LI AL : = xFi l i al ( " ZA3" ) ZA3- >ZA3_CODI GO : = cCodi go ZA3- >ZA3_DATA : = dDat a For nX : = 1 To Len( aHeader ) Fi el dPut ( Fi el dPos( aHeader [ nX, 2] ) , aCOLS[ nI , nX] ) Next nX MsUnLock( ) Endi f Next nI
Rest Ar ea( aAr ea) Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 69 Efetivao da alterao
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod2Gr vA | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a gr avar os dados na al t er ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod2Gr vA( ) Local aAr ea : = Get Ar ea( ) Local nI : = 0 Local nX : = 0
dbSel ect Ar ea( " ZA3" ) For nI : = 1 To Len( aREG ) I f nI <= Len( aREG ) dbGoTo( aREG[ nI ] ) RecLock( " ZA3" , . F. ) I f aCOLS[ nI , Len( aHeader ) +1] dbDel et e( ) Endi f El se RecLock( " ZA3" , . T. ) Endi f
I f ! aCOLS[ nI , Len( aHeader ) +1] ZA3- >ZA3_FI LI AL : = xFi l i al ( " ZA3" ) ZA3- >ZA3_CODI GO : = cCodi go ZA3- >ZA3_DATA : = dDat a For nX : = 1 To Len( aHeader ) Fi el dPut ( Fi el dPos( aHeader [ nX, 2] ) , aCOLS[ nI , nX] ) Next nX Endi f MsUnLock( ) Next nI Rest Ar ea( aAr ea ) Ret ur n
Pgina 70 Programao ADVPL II e Guia de Referncia Efetivao da excluso / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod2Gr vE | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a excl ui r os r egi st r os. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod2Gr vE( ) Local nI : = 0
dbSel ect Ar ea( " ZA3" ) For nI : = 1 To Len( aCOLS ) dbGoTo( aREG[ nI ] ) RecLock( " ZA3" , . F. ) dbDel et e( ) MsUnLock( ) Next nI Ret ur n
Funo auxiliar: Validao do cdigo do vendedor / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod2Vend | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a val i dar o cdi go do vendedor . | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod2Vend( cCodi go, cNome ) I f Exi st Cpo( " SA3" , cCodi go) . And. Exi st Chav( " ZA3" , cCodi go) cNome : = Posi ci one( " SA3" , 1, xFi l i al ( " SA3" ) +cCodi go, " A3_NOME" ) Endi f Ret ur n( ! Empt y( cNome) )
Funo auxiliar: Validao do cdigo do centro de custo na mudana de linha Programao ADVPL II e Guia de Referncia Pgina 71
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod2LOk | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a val i dar a l i nha de dados. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + User Funct i on Mod2LOk( ) Local l Ret : = . T. Local cMensagem: = " No ser per mi t i do l i nhas semo cent r o de cust o. " I f ! aCOLS[ n, Len( aHeader ) +1] I f Empt y( aCOLS[ n, GdFi el dPos( " ZA3_CCUSTO" ) ] ) MsgAl er t ( cMensagem, cCadast r o) l Ret : = . F. Endi f Endi f Ret ur n( l Ret )
Funo auxiliar: Validao do cdigo do centro de custo para todas as linhas
User Funct i on Mod2TOk( ) Local l Ret : = . T. Local nI : = 0 Local cMensagem: = " No ser per mi t i do l i nhas semo cent r o de cust o. "
Pgina 72 Programao ADVPL II e Guia de Referncia For nI : = 1 To Len( aCOLS ) I f aCOLS[ nI , Len( aHeader ) +1] Loop Endi f I f ! aCOLS[ nI , Len( aHeader ) +1] I f Empt y( aCOLS[ n, GdFi el dPos( " ZA3_CCUSTO" ) ] ) MsgAl er t ( cMensagem, cCadast r o) l Ret : = . F. Exi t Endi f Endi f Next nI Ret ur n( l Ret )
Programao ADVPL II e Guia de Referncia Pgina 73 2.11.3 Funo Modelo2()
A funo Modelo2() uma interface pr-definida pela Microsiga que implementa de forma padronizada os compontes necessrios manipulao de estruturas de dados nas quais o cabealho e os itens da informao compartilham o mesmo registro fsico.
Seu objetivo atuar como um facilitador de codificao, permitindo a utilizao dos recursos bsicos dos seguintes componentes visuais: O MsDialog() O TGet() O TSay() O MsNewGetDados() O EnchoiceBar()
O A funo Modelo2() no implementa as regras de visualizao, incluso, alterao e excluso, como uma AxCadastro() ou AxFunction().
O A inicializao das variveis Private utilizada nos cabealhos e rodaps, bem como a inicializao e gravao do aCols devem ser realizadas pela rotina que suporta a execuo da Modelo2().
O Da mesma forma, o Browse deve ser tratado por esta rotina, sendo comum a funo Modelo2() estar vinculada ao uso de uma funo MBrowse().
E Sintaxe: Modelo2([cTitulo], [aCab], [aRoda], [aGrid], [nOpc], [cLinhaOk], [cTudoOk])
E Parmetros:
cTitulo Ttulo da janela aCab Array contendo as informaes que sero exibidas no cabealho na forma de Enchoice() aCab[n][1] (Caractere) := Nome da varivel private que ser vinculada ao campo da Enchoice(). aCab[n][2] (Array) := Array com as coordenadas do campo na tela {Linha, Coluna} aCab[n][3] (Caractere) := Ttulo do campo na tela aCab[n][4] (Caractere) := Picture de formatao do get() do campo. aCab[n][5] (Caractere) := Funo de validao do get() do campo. aCab[n][6] (Caractere) := Nome da consulta padro que ser executada para o campo via tecla F3 aCab[n][7] (Lgico) := Se o campo estar livre para digitao. Pgina 74 Programao ADVPL II e Guia de Referncia
aRoda Array contendo as informaes que sero exibidas no cabealho na forma de Enchoice(), no mesmo formato que o aCab. aGrid Array contendo as coordenadas da GetDados() na tela. Padro := {44,5,118,315} nOpc Opo selecionada na fuo MBrowse, ou que deseje ser passada para controle da Modelo2, aonde: 2 Visualizar 3 - Incluir 4 - Alterar 5 - Excluir cLinhaOk Funo para validao da linha na GetDados() cTudoOk Funo para validao na confirmao da tela de interface da funo Modelo2().
E Retorno:
Lgico Indica se a tela da interface Modelo2() foi confirmada ou cancelada pelo usurio.
Exemplo: Utilizao da Modelo2() para visualizao do Cadastro de Tabelas (SX5)
Pr i vat e cCadast r o : = " Ar qui vo de Tabel as" Pr i vat e aRot i na : = {} Pr i vat e cDel Func : = " . T. " / / Val i dacao par a a excl usao. Pode- se ut i l i zar ExecBl ock
AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1}) Programao ADVPL II e Guia de Referncia Pgina 75 AADD( aRot i na, {" Vi sual i zar " , " U_SX52Vi s" , 0, 2}) AADD( aRot i na, {" I ncl ui r " , " U_SX52I nc" , 0, 3}) AADD( aRot i na, {" Al t er ar " , " U_SX52Al t " , 0, 4}) AADD( aRot i na, {" Excl ui r " , " U_SX52Exc" , 0, 5})
dbSel ect Ar ea( cAl i as) dbSet Or der ( 1) mBr owse( 6, 1, 22, 75, cAl i as)
Ret ur n
USER FUNCTI ON SX52I NC( cAl i as, nReg, nOpc)
/ / Local nUsado : = 0 Local cTi t ul o : = " I ncl usao de i t ens - Ar qui vo de Tabel as" Local aCab : = {} / / Ar r ay comdescr i cao dos campos do Cabecal ho do Model o 2 Local aRoda : = {} / / Ar r ay comdescr i cao dos campos do Rodape do Model o 2 Local aGr i d : = {80, 005, 050, 300} / / Ar r ay comcoor denadas da Get Dados no model o2 - Padr ao: {44, 5, 118, 315} / / Li nha I ni ci al - Col una I ni ci al - +Qt s Li nhas - +Qt s Col unas : {080, 005, 050, 300} Local cLi nhaOk : = " Al l waysTr ue( ) " / / Val i dacoes na l i nha da Get Dados da Model o 2 Local cTudoOk : = " Al l waysTr ue( ) " / / Val i dacao ger al da Get Dados da Model o 2 Local l Ret Mod2 : = . F. / / Ret or no da f uno Model o2 - . T. Conf i r mou / . F. Cancel ou Local nCol una : = 0
/ / Var i avei s par a Get Dados( ) Pr i vat e aCol s : = {} Pr i vat e aHeader : = {}
/ / Var i avei s par a campos da Enchoi ce( ) Pr i vat e cX5Fi l i al : = xFi l i al ( " SX5" ) Pr i vat e cX5Tabel a : = SPACE( 5)
/ / Mont agemdo ar r ay de cabeal ho / / AADD( aCab, {" Var i vel " , {L, C} , " T t ul o" , " Pi ct ur e" , " Val i d" , " F3" , l Enabl e}) AADD( aCab, {" cX5Fi l i al " , {015, 010} , " Fi l i al " , " @! " , , , . F. }) AADD( aCab, {" cX5Tabel a" , {015, 080} , " Tabel a" , " @! " , , , . T. })
/ / Mont agemdo aHeader AADD( aHeader , {" Chave" , " X5_CHAVE" , " @! " , 5, 0, " Al l waysTr ue( ) " , ; " " , " C" , " " , " R" }) AADD( aHeader , {" Descr i cao" , " X5_DESCRI " , " @! " , 40, 0, " Al l waysTr ue( ) " , ; Pgina 76 Programao ADVPL II e Guia de Referncia " " , " C" , " " , " R" })
/ / Mont agemdo aCol s aCol s : = Ar r ay( 1, Len( aHeader ) +1)
/ / I ni ci al i zao do aCol s For nCol una : = 1 t o Len( aHeader )
I f aHeader [ nCol una] [ 8] == " C" aCol s[ 1] [ nCol una] : = SPACE( aHeader [ nCol una] [ 4] ) El seI f aHeader [ nCol una] [ 8] == " N" aCol s[ 1] [ nCol una] : = 0 El seI f aHeader [ nCol una] [ 8] == " D" aCol s[ 1] [ nCol una] : = CTOD( " " ) El seI f aHeader [ nCol una] [ 8] == " L" aCol s[ 1] [ nCol una] : = . F. El seI f aHeader [ nCol una] [ 8] == " M" aCol s[ 1] [ nCol una] : = " " Endi f
Next nCol una
aCol s[ 1] [ Len( aHeader ) +1] : = . F. / / Li nha no del et ada l Ret Mod2 : = Model o2( cTi t ul o, aCab, aRoda, aGr i d, nOpc, cLi nhaOk, cTudoOk)
I F l Ret Mod2 / / MsgI nf o( " Voc conf i r mou a oper ao" , " MBRW2SX5" ) For nLi nha : = 1 t o l en( aCol s) / / Campos de Cabeal ho Recl ock( " SX5" , . T. ) SX5- >X5_FI LI AL : = cX5Fi l i al SX5- >X5_TABELA : = cX5Tabel a / / Campos do aCol s / / SX5- >X5_CHAVE : = aCol s[ nLi nha] [ 1] / / SX5- >X5_DESCRI : = aCol s[ nLi nha] [ 2] For nCol una : = 1 t o Len( aHeader ) SX5- >&( aHeader [ nCol una] [ 2] ) : = aCol s[ nLi nha] [ nCol una] Next nCol una MsUnLock( ) Next nLi nha ELSE MsgAl er t ( " Voc cancel ou a oper ao" , " MBRW2SX5" ) ENDI F Ret ur n Programao ADVPL II e Guia de Referncia Pgina 77
Exerccio 08 Implementar uma Modelo2() para a tabela padro do ERP SX5: Arquivo de Tabelas
Exerccio 09 Implementar as funes de Visualizao, Alterao e Excluso para a Modelo2 desenvolvida para o SX5.
Exerccio 10 Implementar uma Modelo2() para a tabela padro do ERP SB1: Tabela de Produtos
2.12 Modelo3()
O nome Modelo 3, assim como a Modelo 2 foi conceituado pela Microsiga por se tratar de um prottipo de tela para entrada de dados. Inicialmente, vamos desmistificar dois pontos:
O Funo Modelo3() Trata-se de uma funo pronta que contempla o prottipo Modelo 3, porm, este um assunto que no iremos tratar aqui, visto que uma funcionalidade simples que quando necessrio intervir em algo na rotina no h muito recurso para tal.
O Prottipo Modelo 3 Trata-se de uma tela, como a figura abaixo, onde seu objetivo efetuar a manuteno em vrios registros de uma s vez relacionada a outro registro de outra tabela, ou seja, aqui teremos o relacionamento de registros pai e filho. Ento, preciso se preocupar com este relacionamento. Por exemplo: efetuar a manuteno em um pedido de vendas, onde ter um registro em uma tabela referente cabea do pedido, e, outra tabela, com os registros referentes aos itens deste pedido de vendas.
Para ganharmos tempo no ser apresentada aqui toda a explicao e as montagens para a funo EnchoiceBar, comando MsDialog, Say e MsGet e para os vetores aHeader e aCOLS. Entretanto, todos estes estaro na codificao do cdigo fonte. A figura abaixo mostra exatamente o que a tela prottipo Modelo 3:
Pgina 78 Programao ADVPL II e Guia de Referncia
Figura: Prottipo Modelo 3
Este prottipo constitudo de MsDialog, EnchoiceBar, Enchoice, MsGetDados, Say e Get.
Diante dos expostos at o momento houve um novo nome para ns, ele a funo Enchoice, o que ?
Funo Enchoice() Objeto MsMGet()
A funo Enchoice ou o objeto MsMGet so recursos baseados no dicionrio de dados para verificar campos obrigatrios, validaes, gatilhos, consulta padro e etc. Assim tambm para criar pastas de cadastros. Estes podem ser usados tanto com variveis de memrias com o escopo Private como diretamente os campos da tabela que se refere. A diferena entre a funo Enchoice e o objeto MsMGet que a funo no retorna o nome da varivel de objeto exportvel criado.
A estrutura para montar um programa com o prottipo modelo 3 semelhante ao prottipo modelo 2, porm a diferena real a utilizao da funo Enchoice ou o objeto MsMGet, para este documento iremos trabalhar com a funo.
Programao ADVPL II e Guia de Referncia Pgina 79 E Parmetros:
cAlias Alias do dados a serem cadastrados. nReg Nmero do registro da tabela a ser editado. uPar1 Parmetro reservado. uPar2 Parmetro reservado. uPar3 Parmetro reservado. aAcho Vetor com os campos que sero apresentados pela MsMGet. aPos Vetor com as coordenadas onde a MsMGet ser criada no formato {coord. superior, coord. esquerda, coord. direita, coord. inferior}. Funo executada para validar o contexto da linha atual do aCols. aCpos Vetor com os campos que podero ser alterados. uPar4 Parmetro reservado. Nome dos campos do tipo caracter que utilizaro incremento automtico. Este parmetro deve ser no formato +<nome do primeiro campo>+<nome do segundo campo>+.... uPar5 Parmetro reservado. uPar6 Parmetro reservado. uPar7 Parmetro reservado. oWnd Objeto no qual a MsMGet ser criada. uPar8 Parmetro reservado. lMemoria Indica se sero usadas variveis de memria ou os campos da tabela para cadastramento dos dados. Valor padro falso. lColuna Indica se a MsMGet ser apresentada com um objeto por linha (uma coluna). Valor padro falso. Parmetro reservado. uPar9 Parmetro reservado. lSemPastas Indica se no sero usadas as Pastas de Cadastro na MsMGet. Funo executada para validar a excluso de uma linha do aCols.
Vale lembrar que ns programadores reaproveitamos muito o que j existe, isto para simplesmente ganharmos tempo, e no caso da utilizao da funo Enchoice preciso criar as variveis de memrias que levam o mesmo nome dos campos da tabela em questo. Por exemplo, o campo A2_NOME da tabela SA2 (cadastro de fornecedores) quando queremos referenciar o campo, usa-se o prefixo da tabela e o campo em questo, desta forma:
SA2- >A2_NOME
Agora quando queremos referenciar a uma varivel que est com o contedo do mesmo campo criamos outro recurso, desta forma:
M- >A2_NOME
Pgina 80 Programao ADVPL II e Guia de Referncia
E para criar variveis com o nome do campo utilizamos um cdigo de bloco (code- block) e mais um lao de leitura para atribuir valores iniciais a cada uma delas. Ento, o procedimento o seguinte:
Pr i vat e bCampo : = { | nFi el d| Fi el d( nFi el d) }
E em outro momento, aproveitamos a varivel bCampo para facilitar a atribuio. Veja o exemplo abaixo :
For nX : = 1 To FCount ( ) M- >&( Eval ( bCampo, nX ) ) : = At r i bui o i ni ci al ou at r i bui o de val or Next nX
Ou seja, fazer para todos os campos, e a cada campo criar a varivel com a atribuio inicial ou atribuio de valor.
Programao ADVPL II e Guia de Referncia Pgina 81 2.12.1 Estrutura de um programa utilizando a Modelo3()
O exemplo abaixo demonstra a montagem de um programa para a utilizao do prottipo Modelo 3. Antes de iniciarmos o exemplo, vamos estruturar o programa.
Estrutura do programa
Linhas Programa 1 Funo principal; 2 Declarao e atribuio de variveis; 3 Acesso tabela principal e sua ordem; 4 Chamada da funo MBrowse; 5 Fim da funo principal. 6 7 Funo de visualizao, alterao e excluso; 8 Declarao e atribuio de variveis; 9 Acesso ao primeiro registro da chave em que est posicionado na MBrowse; 10 Construo das variveis de memria M->???; 11 Montagem do vetor aHeader por meio do Dicionrio de Dados; 12 Montagem do vetor aCOLS de todos os registros referente a chave principal em que est posicionado na MBrowse; 13 Instncia da MsDialog; 14 Execuo da funo Enchoice; 15 Instncia do objeto MsGetDados; 16 Ativar o objeto principal que o objeto da janela; 17 Se for operao diferente de visualizao e clicou no boto OK; 18 A operao de Alterao? 19 Chamar a funo para alterar os dados; 20 Caso contrrio: 21 Chamar a funo para excluir os dados; 22 Fim da funo de visualizao, alterao e excluso. 23 24 Funo de incluso; 25 Declarao e atribuio de variveis; 26 Construo das variveis de memria M->???; 27 Montagem do vetor aHeader por meio do dicionrio de dados; 28 Montagem do vetor aCOLS com o seu contedo conforme o inicializador padro do campo ou vazio, pois trata-se de uma incluso; 29 Instncia da MsDialog; 30 Instncia dos objetos TSay e TGet; 31 Instncia do objeto MsGetDados; 32 Ativar o objeto principal que o objeto da janela; 33 Se clicou no boto OK; 34 Chamar a funo para incluir os dados; 35 Fim da funo de incluso.
Pgina 82 Programao ADVPL II e Guia de Referncia Rotina principal
User Funct i on xModel o3( ) Pr i vat e cCadast r o : = " Pr ot t i po Model o 3" Pr i vat e aRot i na : = {} Pr i vat e oCl i ent e Pr i vat e oTot al Pr i vat e cCl i ent e : = " " Pr i vat e nTot al : = 0
Pr i vat e bCampo : = {| nFi el d| Fi el dName( nFi el d) }
Pr i vat e aSi ze : = {} Pr i vat e aI nf o : = {} Pr i vat e aObj : = {} Pr i vat e aPObj : = {} Pr i vat e aPGet : = {}
/ / Ret or na a r ea t i l das j anel as Pr ot heus aSi ze : = MsAdvSi ze( )
/ / Ser ut i l i zado t r s r eas na j anel a / / 1 - Enchoi ce, sendo 80 pont os pi xel / / 2 - MsGet Dados, o que sobr ar empont os pi xel par a est e obj et o / / 3 - Rodap que a pr pr i a j anel a, sendo 15 pont os pi xel AADD( aObj , { 100, 080, . T. , . F. }) AADD( aObj , { 100, 100, . T. , . T. }) AADD( aObj , { 100, 015, . T. , . F. })
/ / Cl cul o aut omt i co da di menses dos obj et os ( al t ur a/ l ar gur a) em pi xel aI nf o : = { aSi ze[ 1] , aSi ze[ 2] , aSi ze[ 3] , aSi ze[ 4] , 3, 3 } aPObj : = MsObj Si ze( aI nf o, aObj ) Programao ADVPL II e Guia de Referncia Pgina 83
/ / Cl cul o aut omt i co de di menses dos obj et os MSGET aPGet : = MsObj Get Pos( ( aSi ze[ 3] - aSi ze[ 1] ) , 315, { {004, 024, 240, 270} } )
AADD( aRot i na, {" Pesqui sar " , " AxPesqui " , 0, 1}) AADD( aRot i na, {" Vi sual i zar " , ' U_Mod3Mnt ' , 0, 2}) AADD( aRot i na, {" I ncl ui r " , ' U_Mod3I nc' , 0, 3}) AADD( aRot i na, {" Al t er ar " , ' U_Mod3Mnt ' , 0, 4}) AADD( aRot i na, {" Excl ui r " , ' U_Mod3Mnt ' , 0, 5})
dbSel ect Ar ea( " ZA1" ) dbSet Or der ( 1) dbGoTop( ) MBr owse( , , , , " ZA1" ) Ret ur n
Pr i vat e aHeader : = {} Pr i vat e aCOLS : = {} Pr i vat e aGet s : = {} Pr i vat e aTel a : = {}
dbSel ect Ar ea( cAl i as ) dbSet Or der ( 1)
For nX : = 1 To FCount ( ) M- >&( Eval ( bCampo, nX ) ) : = Cr i aVar ( Fi el dName( nX ) , . T. ) Pgina 84 Programao ADVPL II e Guia de Referncia Next nX
Mod3aHeader ( ) Mod3aCOLS( nOpc )
DEFI NE MSDI ALOG oDl g TI TLE cCadast r o FROM ; aSi ze[ 7] , aSi ze[ 1] TO aSi ze[ 6] , aSi ze[ 5] OF oMai nWnd PI XEL EnChoi ce( cAl i as, nReg, nOpc, , , , , aPObj [ 1] )
/ / At ual i zao do nome do cl i ent e @aPObj [ 3, 1] , aPGet [ 1, 1] SAY " Cl i ent e: " SI ZE 70, 7 OF oDl g PI XEL @aPObj [ 3, 1] , aPGet [ 1, 2] SAY oCl i ent e VAR cCl i ent e SI ZE 98, 7 OF oDl g PI XEL
/ / At ual i zao do t ot al @aPObj [ 3, 1] , aPGet [ 1, 3] SAY " Val or Tot al : " SI ZE 70, 7 OF oDl g PI XEL @aPObj [ 3, 1] , aPGet [ 1, 4] SAY oTot al VAR nTot al ; PI CT " @E 9, 999, 999, 999. 99" SI ZE 70, 7 OF oDl g PI XEL
ACTI VATE MSDI ALOG oDl g ON I NI T Enchoi ceBar ( oDl g, ; {| | I I F( Mod3TOk( ) . And. Obr i gat or i o( aGet s, aTel a ) , ( nOpcA : = 1, oDl g: End( ) ) , NI L) }, ; {| | oDl g: End( ) })
I f nOpcA == 1 . And. nOpc == 3 Mod3Gr v( nOpc ) Conf i r mSXE( ) Endi f Ret ur n
Funo de Visualizao, Alterao e Excluso
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod3Mnt | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a Vi sual i zar , Al t er ar e Excl ui r dados. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | Programao ADVPL II e Guia de Referncia Pgina 85 / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + User Funct i on Mod3Mnt ( cAl i as, nReg, nOpc ) Local oDl g Local oGet Local nX : = 0 Local nOpcA : = 0 Pr i vat e aHeader : = {} Pr i vat e aCOLS : = {} Pr i vat e aGet s : = {} Pr i vat e aTel a : = {} Pr i vat e aREG : = {}
dbSel ect Ar ea( cAl i as ) dbSet Or der ( 1)
For nX : = 1 To FCount ( ) M- >&( Eval ( bCampo, nX ) ) : = Fi el dGet ( nX ) Next nX
Mod3aHeader ( ) Mod3aCOLS( nOpc ) DEFI NE MSDI ALOG oDl g TI TLE cCadast r o FROM ; aSi ze[ 7] , aSi ze[ 1] TO aSi ze[ 6] , aSi ze[ 5] OF oMai nWnd PI XEL EnChoi ce( cAl i as, nReg, nOpc, , , , , aPObj [ 1] )
/ / At ual i zao do nome do cl i ent e @aPObj [ 3, 1] , aPGet [ 1, 1] SAY " Cl i ent e: " SI ZE 70, 7 OF oDl g PI XEL @aPObj [ 3, 1] , aPGet [ 1, 2] SAY oCl i ent e VAR cCl i ent e SI ZE 98, 7 OF oDl g PI XEL
/ / At ual i zao do t ot al @aPObj [ 3, 1] , aPGet [ 1, 3] SAY " Val or Tot al : " SI ZE 70, 7 OF oDl g PI XEL @aPObj [ 3, 1] , aPGet [ 1, 4] SAY oTot al VAR nTot al PI CTURE ; " @E 9, 999, 999, 999. 99" SI ZE 70, 7 OF oDl g PI XEL
ACTI VATE MSDI ALOG oDl g ON I NI T Enchoi ceBar ( oDl g, ; {| | I I F( Mod3TOk( ) . And. Obr i gat or i o( aGet s, aTel a ) , ( nOpcA : = 1, oDl g: End( ) ) , NI L ) }, ; {| | oDl g: End( ) })
I f nOpcA == 1 . And. ( nOpc == 4 . Or . nOpc == 5 ) Mod3Gr v( nOpc, aREG ) Pgina 86 Programao ADVPL II e Guia de Referncia Endi f Ret ur n
Funo para montar o vetor aHeader
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod3aHeader | Aut or | Robson Lui z ( r l eg) | Dat a| 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a mont ar o vet or aHeader . | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod3aHeader ( ) Local aAr ea : = Get Ar ea( )
dbSel ect Ar ea( " SX3" ) dbSet Or der ( 1) dbSeek( " ZA2" ) Whi l e ! EOF( ) . And. X3_ARQUI VO == " ZA2" I f X3Uso( X3_USADO) . And. cNi vel >= X3_NI VEL AADD( aHeader , { Tr i m( X3Ti t ul o( ) ) , ; X3_CAMPO, ; X3_PI CTURE, ; X3_TAMANHO, ; X3_DECI MAL, ; X3_VALI D, ; X3_USADO, ; X3_TI PO, ; X3_ARQUI VO, ; X3_CONTEXT}) Endi f dbSki p( ) End Rest Ar ea( aAr ea) Ret ur n
Funo para montar o vetor aCols
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Programao ADVPL II e Guia de Referncia Pgina 87 / / | Rot i na | Mod3aCOLS | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a mont ar o vet or aCOLS. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod3aCOLS( nOpc ) Local aAr ea : = Get Ar ea( ) Local cChave : = " " Local cAl i as : = " ZA2" Local nI : = 0
I f nOpc <> 3 cChave : = ZA1- >ZA1_NUM
dbSel ect Ar ea( cAl i as ) dbSet Or der ( 1) dbSeek( xFi l i al ( cAl i as ) + cChave ) Whi l e ! EOF( ) . And. ZA2- >( ZA2_FI LI AL + ZA2_NUM ) == xFi l i al ( cAl i as ) + cChave AADD( aREG, ZA2- >( RecNo( ) ) ) AADD( aCOLS, Ar r ay( Len( aHeader ) + 1 ) ) For nI : = 1 To Len( aHeader ) I f aHeader [ nI , 10] == " V" aCOLS[ Len( aCOLS) , nI ] : = Cr i aVar ( aHeader [ nI , 2] , . T. ) El se aCOLS[ Len( aCOLS) , nI ] : = Fi el dGet ( Fi el dPos( aHeader [ nI , 2] ) ) Endi f Next nI aCOLS[ Len( aCOLS) , Len( aHeader ) +1] : = . F. dbSki p( ) End El se AADD( aCOLS, Ar r ay( Len( aHeader ) + 1 ) ) For nI : = 1 To Len( aHeader ) aCOLS[ 1, nI ] : = Cr i aVar ( aHeader [ nI , 2] , . T. ) Next nI aCOLS[ 1, GdFi el dPos( " ZA2_I TEM" ) ] : = " 01" aCOLS[ 1, Len( aHeader ) +1 ] : = . F. Endi f Rest ar ea( aAr ea ) Ret ur n Pgina 88 Programao ADVPL II e Guia de Referncia
Funo para atribuir o nome do cliente a varivel
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod3Cl i | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a at ual i zar a var i vel como nome do cl i ent e. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
User Funct i on Mod3Cl i ( ) cCl i ent e : = Posi ci one( " SA1" , 1, xFi l i al ( " SA1" ) + M- >( ZA1_CLI ENT + ZA1_LOJ A) , " A1_NREDUZ" ) oCl i ent e: Ref r esh( ) Ret ur n( . T. )
Programao ADVPL II e Guia de Referncia Pgina 89
Funo para validar a mudana de linha na MsGetDados()
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod3LOk | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a at ual i zar a var i vel como t ot al dos i t ens. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + User Funct i on Mod3LOk( ) Local nI : = 0 nTot al : = 0 For nI : = 1 To Len( aCOLS ) I f aCOLS[ nI , Len( aHeader ) +1] Loop Endi f nTot al +=Round( aCOLS[ nI , GdFi el dPos( " ZA2_QTDVEN" ) ] *; aCOLS[ nI , GdFi el dPos( " ZA2_PRCVEN" ) ] , 2) Next nI oTot al : Ref r esh( ) Ret ur n( . T. )
Funo para validar se todas as linhas esto preenchidas
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod3TOk | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a val i dar os i t ens se f or ampr eenchi dos. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod3TOk( ) Local nI : = 0 Local l Ret : = . T.
Pgina 90 Programao ADVPL II e Guia de Referncia For nI : = 1 To Len( aCOLS) I f aCOLS[ nI , Len( aHeader ) +1] Loop Endi f I f Empt y( aCOLS[ nI , GdFi el dPos( " ZA2_PRODUT" ) ] ) . And. l Ret MsgAl er t ( " Campo PRODUTO pr eenchi ment o obr i gat or i o" , cCadast r o) l Ret : = . F. Endi f I f Empt y( aCOLS[ nI , GdFi el dPos( " ZA2_QTDVEN" ) ] ) . And. l Ret MsgAl er t ( " Campo QUANTI DADE pr eenchi ment o obr i gat or i o" , cCadast r o) l Ret : = . F. Endi f I f Empt y( aCOLS[ nI , GdFi el dPos( " ZA2_PRCVEN" ) ] ) . And. l Ret MsgAl er t ( " Campo PRECO UNI TARI O pr eenchi ment o obr i gat or i o" , cCadast r o) l Ret : = . F. Endi f
I f ! l Ret Exi t Endi f Next i Ret ur n( l Ret )
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Mod3Gr v | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 2007 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a ef et uar a gr avao nas t abel as. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Mod3Gr v( nOpc, aAl t er a ) Local nX : = 0 Local nI : = 0
/ / Se f or i ncl uso I f nOpc == 3 / / Gr ava os i t ens dbSel ect Ar ea( " ZA2" ) dbSet Or der ( 1) For nX : = 1 To Len( aCOLS ) Programao ADVPL II e Guia de Referncia Pgina 91 I f ! aCOLS[ nX, Len( aCOLS ) + 1 ] RecLock( " ZA2" , . T. ) For nI : = 1 To Len( aHeader ) Fi el dPut ( Fi el dPos( Tr i m( aHeader [ nI , 2] ) ) , aCOLS[ nX, nI ] ) Next nI ZA2- >ZA2_FI LI AL : = xFi l i al ( " ZA2" ) ZA2- >ZA2_NUM : = M- >ZA1_NUM MsUnLock( ) Endi f Next nX
/ / Gr ava o Cabeal ho dbSel ect Ar ea( " ZA1" ) RecLock( " ZA1" , . T. ) For nX : = 1 To FCount ( ) I f " FI LI AL" $ Fi el dName( nX ) Fi el dPut ( nX, xFi l i al ( " ZA1" ) ) El se Fi el dPut ( nX, M- >&( Eval ( bCampo, nX ) ) ) Endi f Next nX MsUnLock( ) Endi f
/ / Se f or al t er ao I f nOpc == 4 / / Gr ava os i t ens conf or me as al t er aes dbSel ect Ar ea( " ZA2" ) dbSet Or der ( 1) For nX : = 1 To Len( aCOLS ) I f nX <= Len( aREG ) dbGot o( aREG[ nX] ) RecLock( " ZA2" , . F. ) I f aCOLS[ nX, Len( aHeader ) + 1 ] dbDel et e( ) Endi f El se
I f ! aCOLS[ nX, Len( aHeader ) + 1 ] RecLock( " ZA2" , . T. ) Endi f Endi f
I f ! aCOLS[ nX, Len( aHeader ) +1 ] For nI : = 1 To Len( aHeader ) Fi el dPut ( Fi el dPos( Tr i m( aHeader [ nI , 2] ) ) , ; aCOLS[ nX, nI ] ) Pgina 92 Programao ADVPL II e Guia de Referncia Next nI ZA2- >ZA2_FI LI AL : = xFi l i al ( " ZA2" ) ZA2- >ZA2_NUM : = M- >ZA1_NUM Endi f MsUnLock( ) Next nX
/ / Gr ava o Cabeal ho dbSel ect Ar ea( " ZA1" ) RecLock( " ZA1" , . F. ) For nX : = 1 To FCount ( ) I f " FI LI AL" $ Fi el dName( nX ) Fi el dPut ( nX, xFi l i al ( " ZA1" ) ) El se Fi el dPut ( nX, M- >&( Eval ( bCampo, nX ) ) ) Endi f Next MsUnLock( ) Endi f
/ / Se f or excl uso I f nOpc == 5 / / Del et a os I t ens dbSel ect Ar ea( " ZA2" ) dbSet Or der ( 1) dbSeek( xFi l i al ( " ZA2" ) + M- >ZA1_NUM) Whi l e ! EOF( ) . And. ZA2- >( ZA2_FI LI AL + ZA2_NUM) == xFi l i al ( " ZA2" ) +; M- >ZA1_NUM RecLock( " ZA2" ) dbDel et e( ) MsUnLock( ) dbSki p( ) End
/ / Del et a o Cabeal ho dbSel ect Ar ea( " ZA1" ) RecLock( " ZA1" , . F. ) dbDel et e( ) MsUnLock( ) Endi f Ret ur n
2.12.2 Funo Modelo3()
Programao ADVPL II e Guia de Referncia Pgina 93 A funo Modelo3) uma interface pr-definida pela Microsiga que implementa de forma padronizada os compontes necessrios e a manipulao de estruturas de dados nas quais o cabealho e os itens da informao esto em tabelas separadas.
Seu objetivo atuar como um facilitador de codificao, permitindo a utilizao dos recursos bsicos dos seguintes componentes visuais:
O MsDialog() O Enchoice() O EnchoiceBar() O MsNewGetDados()
O A funo Modelo3() no implementa as regras de visualizao, incluso, alterao e excluso, como uma AxCadastro() ou AxFunction(). O A inicializao dos campos utilizados na Enchoice() deve ser realizadas pela rotina que suporta a execuo da Modelo3(), normalmente atravs do uso da funo RegToMemory(). O Da mesma forma, o Browse deve ser tratado por esta rotina, sendo comum a Modelo3() estar vinculada ao uso de uma MBrowse().
cTitulo Ttulo da janela. cAliasE Alias da tabela que ser utilizada na Enchoice. cAliasGetD Alias da tabela que ser utilizada na GetDados. aCposE Nome dos campos, pertencentes ao Alias especificado o parmetro cAliasE, que devero ser exibidos na Enchoice: AADD(aCposE,{nome_campo}). cLinhaOk Funo para validao da linha na GetDados(). cTudoOk Funo para validao na confirmao da tela de interface da Modelo2(). nOpcE Opo selecionada na funo MBrowse, ou que deseje ser passada para controle da funo Enchoice da funlo Modelo3, aonde: 2 Visualizar 3 - Incluir 4 - Alterar 5 - Excluir nOpcG Opo selecionada na funo MBrowse, ou que deva ser passada para controle da funo GetDados da funo Modelo3, aonde: 2 Visualizar Pgina 94 Programao ADVPL II e Guia de Referncia 3 - Incluir 4 - Alterar 5 - Excluir cFieldOk Validao dos campos da funo Enchoice()
E Retorno:
Lgico Indica se a tela da interface Modelo2() foi confirmada ou cancelada pelo usurio.
Exemplo: Utilizao da Modelo3() para Pedidos de Vendas (SC5,SC6)
Pr i vat e cCadast r o : = " Pedi dos de Venda" Pr i vat e aRot i na : = {} Pr i vat e cDel Func : = " . T. " / / Val i dacao par a a excl usao. Pode- se ut i l i zar ExecBl ock Pr i vat e cAl i as : = " SC5"
AADD( aRot i na, { " Pesqui sa" , " AxPesqui " , 0, 1}) AADD( aRot i na, { " Vi sual " , " U_Mod3Al l " , 0, 2}) AADD( aRot i na, { " I ncl ui " , " U_Mod3Al l " , 0, 3}) AADD( aRot i na, { " Al t er a" , " U_Mod3Al l " , 0, 4}) AADD( aRot i na, { " Excl ui " , " U_Mod3Al l " , 0, 5})
dbSel ect Ar ea( cAl i as) dbSet Or der ( 1) mBr owse( 6, 1, 22, 75, cAl i as)
Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 95 User Funct i on Mod3Al l ( cAl i as, nReg, nOpcx)
Local cTi t ul o : = " Cadast r o de Pedi dos de Venda" Local cAl i asE : = " SC5" Local cAl i asG : = " SC6" Local cLi nOk : = " Al l waysTr ue( ) " Local cTudOk : = " Al l waysTr ue( ) " Local cFi el dOk: = " Al l waysTr ue( ) " Local aCposE : = {} Local nUsado, nX : = 0
/ / / / Opcoes de acesso par a a Model o 3 / / Do Case Case nOpcx==3; nOpcE: =3 ; nOpcG: =3 / / 3 - " I NCLUI R" Case nOpcx==4; nOpcE: =3 ; nOpcG: =3 / / 4 - " ALTERAR" Case nOpcx==2; nOpcE: =2 ; nOpcG: =2 / / 2 - " VI SUALI ZAR" Case nOpcx==5; nOpcE: =2 ; nOpcG: =2 / / 5 - " EXCLUI R" EndCase
/ / / / Cr i a var i avei s M- >????? da Enchoi ce / / RegToMemor y( " SC5" , ( nOpcx==3 . or . nOpcx==4 ) ) / / Se f or i ncl usao ou al t er acao per mi t e al t er ar o cont eudo das var i avei s de memor i a
/ / / / Cr i a aHeader e aCol s da Get Dados / / nUsado: =0 dbSel ect Ar ea( " SX3" ) dbSeek( " SC6" ) aHeader : ={} Whi l e ! Eof ( ) . And. ( x3_ar qui vo==" SC6" ) I f Al l t r i m( x3_campo) ==" C6_I TEM" dbSki p( ) Loop Endi f I f X3USO( x3_usado) . And. cNi vel >=x3_ni vel nUsado: =nUsado+1 Aadd( aHeader , { TRI M( x3_t i t ul o) , x3_campo, x3_pi ct ur e, ; x3_t amanho, x3_deci mal , " Al l waysTr ue( ) " , ; x3_usado, x3_t i po, x3_ar qui vo, x3_cont ext } ) Endi f dbSki p( ) End
I f nOpcx==3 / / I ncl ui r Pgina 96 Programao ADVPL II e Guia de Referncia aCol s: ={Ar r ay( nUsado+1) } aCol s[ 1, nUsado+1] : =. F. For nX: =1 t o nUsado aCol s[ 1, nX] : =Cr i aVar ( aHeader [ nX, 2] ) Next El se aCol s: ={} dbSel ect Ar ea( " SC6" ) dbSet Or der ( 1) dbSeek( xFi l i al ( ) +M- >C5_NUM) Whi l e ! eof ( ) . and. C6_NUM==M- >C5_NUM AADD( aCol s, Ar r ay( nUsado+1) ) For nX: =1 t o nUsado
aCol s[ Len( aCol s) , nX] : =Fi el dGet ( Fi el dPos( aHeader [ nX, 2] ) ) Next aCol s[ Len( aCol s) , nUsado+1] : =. F. dbSki p( ) End Endi f
I f Len( aCol s) >0 / / / / Execut a a Model o 3
/ / aCposE : = {" C5_CLI ENTE" }
l Ret Mod3 : = Model o3( cTi t ul o, cAl i asE, cAl i asG, aCposE, cLi nOk, cTudOk, ; nOpcE, nOpcG, cFi el dOk) / / / / Execut ar pr ocessament o
/ / I f l Ret Mod3 Avi so( " Model o3( ) " , " Conf i r mada oper acao! " , {" Ok" }) Endi f Endi f
Ret ur n
Exerccio 11 Implementar uma Modelo3() para as tabelas padres do ERP SF1: Cab. NFE e SD1: Itens NFE Programao ADVPL II e Guia de Referncia Pgina 97
8. Arquivos e ndices Temporrios
2.13 Utilizao de arquivos e ndices temporrios
Os arquivos e ndices temporrios ou de trabalho, so geralmente utilizados em ambiente CodeBase, pois, neste ambiente no h os recursos de Join e Order By, como nos bancos de dados relacionais. Por este motivo, quando necessitar gerar uma informao ordenada e consolidada (ou seja, de vrias tabelas), deveremos recorrer ao uso dos arquivos e dos ndices temporrios.
2.14 Funes para manipulao de arquivos e ndices temporrios
2.14.1 CriaTrab()
A CriaTrab() uma funcionalidade que permite criar um arquivo fsico ou gerar um nome aleatrio.
E Sintaxe: CriaTrab(aCampo, lCriar, cExt)
E Parmetros
aCampo Array com o nome, tipo, tamanho e decimal do campo a ser criado no arquivo lCriar Se verdadeiro (.T.) criar o arquivo, ou falso (.F.) somente retorna um nome aleatrio cExt Qual extenso dever ser criado o arquivo de trabalho
Os arquivos criados com a funo CRIATRAB() sero gerados no diretrio especificado como StartPath, de acordo com o RootPath configurado no .ini da aplicao.
2.14.2 dbUseArea()
A dbUseArea() uma funcionalidade que permite definir um arquivo de base de dados, com uma rea de trabalho disponvel na aplicao.
E Sintaxe: dbUseArea(lNewArea, cDriver, cName, cAlias, lShared, lReadOnly)
E Parmetros
Pgina 98 Programao ADVPL II e Guia de Referncia lNewArea Indica se e um novo alias no conjunto de alias aberto. cDriver Drive (RddName()) do arquivo -> DBFCDX / TOPCONN / DBFNTX. cName Nome fsico da tabela que ser usado. cAlias Alias que ser usado enquanto estive aberto. lShared A tabela ter acesso exclusivo ou compartilhado. lReadOnly Se verdadeiro. a tabela ser somente leitura.
2.14.3 IndRegua()
A IndRegua() uma funcionalidade que permite criar ndices temporrios para o alias especificado, podendo ou no ter um filtro.
E Sintaxe: IndRegua(cAlias, cNIndex, cExpress, xOrdem, cFor, cMens, lShow)
E Parmetros
cAlias Alias da tabela onde ser efetuada o ndice/filtro temporrio. cNIndex Nome do arquivo de trabalho retornado pela funo CriaTrab(). cExpress Expresso utilizada na chave do novo ndice. xOrdem Parmetro nulo. cFor Expresso utilizada para filtro. cMens Parmetro nulo. lShow Apresentar a tela de progresso do ndice/filtro temporrio.
Programao ADVPL II e Guia de Referncia Pgina 99 2.15 Funes Auxiliares para Arquivos de Trabalho e Temporrios
DbStruct() - Retorna um array com a estrutura de um Alias aberto no sistema: Exemplo: {campo,tipo,tamanho,decimal}
RetIndex() - Retorna a quantidade de ndices ativa para um Alias aberto no sistema.
DbSetIndex() - Agrega um arquivo de ndice a um Alias ativo no sistema. Caso seja um ndice temporrio gerado pela IndRegua, somente deve ser agregado se Database principal no for Top.
OrdBagExt() - Retorna a extenso dos arquivos de ndices utilizados pelo sistema (.idx / .cdx / .ntx)
Local aSt r u : = {} Local aAr qTRB : = {} Local nI : = 0 Local cI ndTRB : = " " Local cNomAr q : = " "
AADD( aSt r u, { " PRODUTO" , " B1_COD" } ) AADD( aSt r u, { " DESCRI CAO" , " B1_DESC" } ) AADD( aSt r u, { " GRUPO" , " BM_GRUPO" } ) AADD( aSt r u, { " DESCGRUPO" , " BM_DESC" } ) AADD( aSt r u, { " TI PO" , " B1_TI PO" } ) Pgina 100 Programao ADVPL II e Guia de Referncia AADD( aSt r u, { " DESCTI PO" , " B1_DESC" } ) AADD( aSt r u, { " CC" , " CTT_CC" } ) AADD( aSt r u, { " DESC_CC" , " CTT_DESC" } ) AADD( aSt r u, { " SERI E" , " D2_SERI E" } ) AADD( aSt r u, { " DOCTO" , " D2_COD" } ) AADD( aSt r u, { " TI PONOTA" , " D2_TP" } ) AADD( aSt r u, { " EMI SSAO" , " D2_EMI SSAO" } ) AADD( aSt r u, { " CLI ENTE" , " D2_CLI ENTE" } ) AADD( aSt r u, { " LOJ A" , " D2_LOJ A" } ) AADD( aSt r u, { " NOME" , " A1_NOME" } ) AADD( aSt r u, { " QTDE" , " D2_QUANT" } ) AADD( aSt r u, { " UNI T" , " D2_PRCVEN" } ) AADD( aSt r u, { " TOTAL" , " D2_TOTAL" } ) AADD( aSt r u, { " ALI QI CMS" , " D2_PI CM" } ) AADD( aSt r u, { " VALI CMS" , " D2_VALI CM" } ) AADD( aSt r u, { " ALI QI PI " , " D2_I PI " } ) AADD( aSt r u, { " VALI PI " , " D2_VALI PI " } ) AADD( aSt r u, { " VALMERC" , " D2_TOTAL" } ) AADD( aSt r u, { " TOTSEMI CMS" , " D2_TOTAL" } ) AADD( aSt r u, { " VALPI S" , " D2_TOTAL" } ) AADD( aSt r u, { " LI QUI DO" , " D2_TOTAL" } ) AADD( aSt r u, { " CUSTO" , " D2_TOTAL" } )
dbSel ect Ar ea( " SX3" ) dbSet Or der ( 2) For nI : = 1 To Len( aSt r u ) dbSeek( aSt r u[ nI , 2] ) AADD( aAr qTRB, { aSt r u[ nI , 1] , X3_TI PO, X3_TAMANHO, X3_DECI MAL } ) Next nI
/ / ndi ce que ser cr i ado cI ndTRB : = " PRODUTO+DTOS( EMI SSAO) "
cNomAr q : = Cr i aTr ab( aAr qTRB, . T. )
dbUseAr ea( . T. , " DBFCDX" , cNomAr q, " TRB" , . T. , . T. )
I ndRegua( " TRB" , cNomAr q, cI ndTRB ) dbSet Or der ( 1)
/ / ( . . . ) f azer o pr ocessament o necessr i o
dbSel ect Ar ea( " TRB" ) dbCl oseAr ea( )
I f MsgYesNo( " Apagar o ar qui vo ger ado \ syst em\ " +cNomAr q+" . dbf ?" , FunName( ) ) Fer ase( cNomAr q+" . dbf " ) Programao ADVPL II e Guia de Referncia Pgina 101 Fer ase( cNomAr q+Or dBagExt ( ) ) Endi f
Ret ur n Ni l
Quando criamos um arquivo ou um ndice temporrio (trabalho), utilizando a funo Indregua, obrigatrio apag- los no final do rotina.
A utilizao de arquivo ou ndice temporrio, dever ser bem analisada a fim de evitar lentido nos processamentos da rotina.
O array aStru foi criado com base nos campos existentes no sistema, ao invs de criarmos novas estruturas dos campos, utilizamos as j existentes no Dicionrios de Dados (SX3).
Exemplo 02: Utilizando dois ndices temporrios com RDD DBFCDX
LOCAL nOr der : = 0 LOCAL cAr q1 : = Cr i aTr ab( NI L, . F. ) LOCAL cChave1 : = " A1_FI LI AL+A1_EST" LOCAL cAr q2 : = Cr i aTr ab( NI L, . F. ) LOCAL cChave2 : = " A1_FI LI AL+A1_NOME"
dbSel ect Ar ea( " SA1" ) I ndRegua( " SA1" , cAr q1, cChave1, , , " Sel eci onando Regs. . . " ) I ndRegua( " SA1" , cAr q2, cChave2, , , " Sel eci onando Regs. . . " ) Pgina 102 Programao ADVPL II e Guia de Referncia
nOr der : = Ret I ndex( " SA1" )
dbSet I ndex( cAr q1+Or dBagExt ( ) ) dbSet I ndex( cAr q2+Or dBagExt ( ) )
Al er t ( " Agor a vai por est ado" )
dbset Or der ( nOr der +1) dbGoTop( ) Whi l e ! Eof ( ) Al er t ( " Est ado : " + SA1- >A1_EST +" " +" Nome : " + SA1- >A1_NOME) dbSki p( ) End
Al er t ( " Agor a vai por nome" )
dbSet Or der ( nOr der +2) dbGoTop( ) Whi l e ! Eof ( ) Al er t ( " Est ado : " + SA1- >A1_EST +" " +" Nome : " + SA1- >A1_NOME) dbSki p( ) End
Ret I ndex( " SA1" ) Fer ase( cAr q1+Or dBagext ( ) ) Fer ase( cAr q2+Or dBagext ( ) )
Ret ur n
Exerccio 12 Implementar uma rotina que crie um arquivo de trabalho com uma estrutura similar ao SA1, e que receba as informaes desta tabela.
Exerccio 13 Implementar uma rotina que crie um arquivo de trabalho com uma estrutura similar ao SB1, e que receba as informaes desta tabela.
Programao ADVPL II e Guia de Referncia Pgina 103 9. Relatrios no grficos Os relatrios desenvolvidos em ADVPL possuem um padro de desenvolvimento que mais depende de layout e tipos de parmetros do que qualquer outro tipo de informao, visto que at o momento percebemos que a linguagem padro da Microsiga muito mais composta de funes genricas do que de comandos.
Este tipo de relatrio caracterizado por um formato de impresso tipo PostScript, e permite a gerao de um arquivo em formato texto (.txt), com uma extenso prpria da aplicao ERP (.##R).
A estrutura de um relatrio no grfico baseada no uso da funo SetPrint(), complementada pelo uso de outras funes acessrias, as quais esto detalhadas no Guia de Referncia Rpida que acompanha este material.
2.16 Funes Utilizadas para Desenvolvimento de Relatrios
2.16.1 SetPrint()
A funo que cria a interface com as opes de configurao para impresso de um relatrio no formato texto. Basicamente duas variveis m_pag e aReturn precisam ser declaradas como privadas (private) antes de executar a SetPrint(). Aps confirmada, os dados so armazenados no vetor aReturn que ser passado como parmetro para funo SetDefault().
cAlias Alias do arquivo a ser impresso. cProgram Nome do arquivo a ser gerado em disco. cPergunte Grupo de perguntas cadastrado no dicionrio SX1. cTitle Ttulo do relatrio. cDesc1 Descrio do relatrio. cDesc2 Continuao da descrio do relatrio. cDesc3 Continuao da descrio do relatrio. lDic Utilizado na impresso de cadastro genrico permite a escolha dos campos a serem impressos. Se o parametro cAlias no for informado o valor padro assumido ser .F.. aOrd Ordem(s) de impresso. lCompres Se verdadeiro (.T.) permite escolher o formato da impresso, o valor padro Pgina 104 Programao ADVPL II e Guia de Referncia assumido ser .T.
cSize Tamanho do relatrio "P","M" ou "G". uParm12 Parmetro reservado. lFilter Se verdadeiro (.T.) permite a utilizao do assistente de filtro, o valor padro assumido ser .T. lCrystal Se verdadeiro (.T.) permite integrao com Crystal Report, o valor padro assumido ser .F. cNameDrv Nome de um driver de impresso. uParm16 Parmetro reservado. lServer Se verdadeiro (.T.) fora impresso no servidor. cPortPrint Define uma porta de impresso padro.
E Retorno:
Caracter Nome do Relatrio
E Estrutura aReturn:
aReturn[1] Caracter, tipo do formulrio. aReturn[2] Numrico, opo de margem. aReturn[3] Caracter, destinatrio. aReturn[4] Numrico, formato da impresso. aReturn[5] Numrico, dispositivo de impresso. aReturn[6] Caracter, driver do dispositivo de impresso. aReturn[7] Caracter, filtro definido pelo usurio. aReturn[8] Numrico, ordem. aReturn[x] A partir a posio [9] devem ser informados os nomes dos campos que devem ser considerados no processamento, definidos pelo uso da opo Dicionrio da SetPrint().
2.16.2 SetDefault()
A funo SetDefault() prepara o ambiente de impresso de acordo com as informaes configuradas no array aReturn, obtidas atravs da funo SetPrint().
Programao ADVPL II e Guia de Referncia Pgina 105 E Parmetros:
aReturn Configuraes de impresso. cAlias Alias do arquivo a ser impresso. uParm3 Parmetro reservado. uParm4 Parmetro reservado. cSize Tamanho da pgina "P","M" ou "G" nFormat Formato da pgina, 1 retrato e 2 paisagem.
E Estrutura aReturn:
aReturn[1] Caracter, tipo do formulrio. aReturn[2] Numrico, opo de margem. aReturn[3] Caracter, destinatrio. aReturn[4] Numrico, formato da impresso. aReturn[5] Numrico, dispositivo de impresso. aReturn[6] Caracter, driver do dispositivo de impresso. aReturn[7] Caracter, filtro definido pelo usurio. aReturn[8] Numrico, ordem. aReturn[x] A partir a posio [9] devem ser informados os nomes dos campos que devem ser considerados no processamento, definidos pelo uso da opo Dicionrio da SetPrint().
2.16.3 RptStatus()
Rgua de processamento simples, com apenas um indicador de progresso, utilizada no processamento de relatrios do padro SetPrint(). E Sintaxe: RptStatus(bAcao, cMensagem)
E Parmetros:
bAcao Bloco de cdigo que especifica a ao que ser executada com o acompanhamento da rgua de processamento. cMensagem Mensagem que ser exibida na rgua de processamento durante a execuo.
Pgina 106 Programao ADVPL II e Guia de Referncia 2.16.3.1 SETREGUA()
A funo SetRegua() utilizada para definir o valor mximo da rgua de progresso criada atravs da funo RptStatus().
E Sintaxe: SetRegua(nMaxProc)
E Parmetros:
nMaxProc Varivel que indica o valor mximo de processamento (passos) que sero indicados pela rgua.
2.16.3.2 INCREGUA()
A funo IncRegua() utilizada para incrementar valor na rgua de progresso criada atravs da funo RptStatus()
E Sintaxe: IncRegua(cMensagem)
E Parmetros:
cMensagem Mensagem que ser exibida e atualizada na rgua de processamento a cada execuo da funo IncRegua(), sendo que a taxa de atualizao da interface controlada pelo Binrio.
2.16.4 CABEC()
A funo CABEC() determina as configuraes de impresso do relatrio e imprime o cabealho do mesmo.
cTitulo Ttulo do relatrio. cCabec1 String contendo as informaes da primeira linha do cabealho. cCabec2 String contendo as informaes da segunda linha do cabealho. cNomeProg Nome do programa de impresso do relatrio. nTamanho Tamanho do relatrio em colunas (80, 132 ou 220). nCompress Indica se impresso ser comprimida (15) ou normal (18). aCustomText Texto especfico para o cabealho, substituindo a estrutura padro do sistema. lPerg Permite a supresso da impresso das perguntas do relatrio, mesmo que o parmetro MV_IMPSX1 esteja definido como S. Programao ADVPL II e Guia de Referncia Pgina 107
E Parmetros (continuao):
cLogo Redefine o bitmap que ser impresso no relatrio, no necessitando que ele esteja no formato padro da Microsiga: "LGRL"+SM0->M0_CODIGO+SM0->M0_CODFIL+".BMP"
2.16.5 RODA()
A funo RODA() imprime o rodap da pgina do relatrio, o que pode ser feito a cada pgina, ou somente ao final da impresso.
E Sintaxe: Roda(uPar01, uPar02, cSize)
E Parmetros:
uPar01 No mais utilizado. uPar02 No mais utilizado. cSize Tamanho do relatrio (P,M,G).
2.16.6 Pergunte()
A funo PERGUNTE() inicializa as variveis de pergunta (mv_par01,...) baseada na pergunta cadastrado no Dicionrio de Dados (SX1). Se o parmetro lAsk no for especificado, ou for verdadeiro, ser exibida a tela para edio da pergunta, e, se o usurio cofirmar, as variveis sero atualizadas e a pergunta no SX1 tambm ser atualizada.
E Sintaxe: Pergunte( cPergunta , [lAsk] , [cTitle] )
E Parmetros:
cPergunta Pergunta cadastrada no dicionrio de dados ( SX1) a ser utilizada. |Ask Indica se exibir a tela para edio. cTitle Ttulo do dilogo.
E Retorno:
Lgico Indica se a tela de visualizao das perguntas foi confirmada (.T.) ou cancelada (.F.)
2.16.7 AjustaSX1()
A funo AJUSTASX1() permite a incluso simultnea de vrios itens de perguntas para um grupo de perguntas no SX1 da empresa ativa.
Pgina 108 Programao ADVPL II e Guia de Referncia
E Sintaxe: AJUSTASX1(cPerg, aPergs)
E Parmetros:
cPerg Grupo de perguntas do SX1 (X1_GRUPO) aPergs Array contendo a estrutura dos campos que sero gravados no SX1.
E Estrutura Item do array aPerg:
Posio Campo Tipo Descrio 01 X1_PERGUNT Caractere Descrio da pergunta em portugus. 02 X1_PERSPA Caractere Descrio da pergunta em espanhol. 03 X1_PERENG Caractere Descrio da pergunta em ingls. 04 X1_VARIAVL Caractere Nome da varivel de controle auxiliar (mv_ch). 05 X1_TIPO Caractere Tipo do parmetro. 06 X1_TAMANHO Numrico Tamanho do contedo do parmetro. 07 X1_DECIMAL Numrico Nmero de decimais para contedos numricos. 08 X1_PRESEL Numrico Define qual opo do combo a padro para o parmetro. 09 X1_GSC Caractere Define se a pergunta ser do tipo G Get ou C Choice (combo). 10 X1_VALID Caractere Expresso de validao do parmetro. 11 X1_VAR01 Caractere Nome da varivel MV_PAR+Ordem do parmetro. 12 X1_DEF01 Caractere Descrio da opo 1 do combo em portugus. 13 X1_DEFSPA1 Caractere Descrio da opo 1 do combo em espanhol. 14 X1_DEFENG1 Caractere Descrio da opo 1 do combo em ingls. 15 X1_CNT01 Caractere Contedo padro ou ultimo contedo definido como respostas para a pergunta. 16 X1_VAR02 Caractere No informado. 17 X1_DEF02 Caractere Descrio da opo X do combo em portugus. 18 X1_DEFSPA2 Caractere Descrio da opo X do combo em espanhol. 19 X1_DEFENG2 Caractere Descrio da opo X do combo em ingls. 20 X1_CNT02 Caractere No informado. 21 X1_VAR03 Caractere No informado. 22 X1_DEF03 Caractere Descrio da opo X do combo em Programao ADVPL II e Guia de Referncia Pgina 109 portugus. 23 X1_DEFSPA3 Caractere Descrio da opo X do combo em espanhol. 24 X1_DEFENG3 Caractere Descrio da opo X do combo em ingls. 25 X1_CNT03 Caractere No informado. 26 X1_VAR04 Caractere No informado. 27 X1_DEF04 Caractere Descrio da opo X do combo em portugus. 28 X1_DEFSPA4 Caractere Descrio da opo X do combo em espanhol. 29 X1_DEFENG4 Caractere Descrio da opo X do combo em ingls. 30 X1_CNT04 Caractere No informado. 31 X1_VAR05 Caractere No informado. 32 X1_DEF05 Caractere Descrio da opo X do combo em portugus. 33 X1_DEFSPA5 Caractere Descrio da opo X do combo em espanhol. 34 X1_DEFENG5 Caractere Descrio da opo X do combo em ingls. 35 X1_CNT05 Caractere No informado. 36 X1_F3 Caractere Cdigo da consulta F3 vinculada ao parmetro. 37 X1_GRPSXG Caractere Cdigo do grupo de campos SXG para atualizao automtica, quando o grupo for alterado.
38 X1_PYME Caractere Se a pergunta estar disponvel no ambiente Pyme. 39 X1_HELP Caractere Contedo do campo X1_HELP. 40 X1_PICTURE Caractere Picture de formatao do contedo do campo. 41 aHelpPor Array Vetor simples contendo as linhas de help em portugus para o parmetro. Trabalhar com linhas de at 40 caracteres. 42 aHelpEng Array Vetor simples contendo as linhas de help em ingls para o parmetro. Trabalhar com linhas de at 40 caracteres. 43 aHelpSpa Array Vetor simples contendo as linhas de help em espanhol para o parmetro. Trabalhar com linhas de at 40 caracteres.
2.16.8 PutSX1()
Pgina 110 Programao ADVPL II e Guia de Referncia A funo PUTSX1() permite a incluso de um nico item de pergunta em um grupo definido no Dicionrio de Dados (SX1). Todos os vetores contendo os textos explicativos da pergunta devem conter at 40 caracteres por linha.
cGrupo Grupo de perguntas do SX1 (X1_GRUPO). cOrdem Ordem do parmetro no grupo (X1_ORDEM). cPergunt Descrio da pergunta em portugus. cPerSpa Descrio da pergunta em espanhol. cPerEng Descrio da pergunta em ingls. cVar Nome da varivel de controle auxiliar (X1_VARIAVL). cTipo Tipo do parmetro. nTamanho Tamanho do contedo do parmetro. nDecimal Nmero de decimais para contedos numricos. nPresel Define qual opo do combo a padro para o parmetro. cGSC Define se a pergunta ser do tipo G Get ou C Choice (combo). cValid Expresso de validao do parmetro. cF3 Cdigo da consulta F3 vinculada ao parmetro cGrpSxg Cdigo do grupo de campos SXG para atualizao automtica, quando o grupo for alterado. cPyme Se a pergunta estar disponvel no ambiente Pyme. cVar01 Nome da varivel MV_PAR+Ordem do parmetro. cDef01 Descrio da opo 1 do combo em portugus. cDefSpa1 Descrio da opo 1 do combo em espanhol. cDefEng1 Descrio da opo 1 do combo em ingls. cCnt01 Contedo padro ou ultimo contedo definido como respostas para este item. cDef0x Descrio da opo X do combo em portugus. cDefSpax Descrio da opo X do combo em espanhol. cDefEngx Descrio da opo X do combo em ingls. aHelpPor Vetor simples contendo as linhas de help em portugus para o parmetro. aHelpEng Vetor simples contendo as linhas de help em ingls para o parmetro. aHelpSpa Vetor simples contendo as linhas de help em espanhol para o parmetro. cHelp Contedo do campo X1_HELP.
Programao ADVPL II e Guia de Referncia Pgina 111 2.17 Estrutura de Relatrios Baseados na SetPrint()
Neste tpico ser demonstrada a construo de relatrio no grfico baseado no uso da funo SetPrint() o qual atende os formatos de base de dados ISAM e Top Connect. Porm, no contemplando a tecnologia Protheus Embedded SQL.
Estrutura do programa
Linhas Programa 1 Funo principal; 2 Declarao e atribuio de variveis; 3 Atualizao do arquivo de perguntas atravs da funo especfica CriaSX1(); 4 Definio das perguntas atravs da funo Pergunte(); 5 Definio das ordens disponveis para impresso do relatrio; 6 Chamada da funo SetPrint; 7 Atualizao das configuraes de impresso com a funo SetDefault(); 8 Execuo da rotina de impresso atravs da funo RptStatus() 9 Fim da funo principal.
10 Funo de processamento e impresso do relatrio 11 Declarao e atribuio de variveis; 12 Definio dos filtros de impresso, avaliando o banco de dados em uso pela aplicao; 13 Atualizao da rgua de processamento com a quantidade de registros que ser processada; 14 Estrutura principal de repetio para impresso dos dados do relatrio; 15 Controle da impresso do cabealho utilizando a funo Cabec(); 16 Impresso dos totais do relatrio; 17 Impresso do rodap da ltima pgina do relatrio utilizando a funo Roda(); 18 Limpeza dos arquivos e ndices temporrios criados para o processamento(); 19 Tratamento da visualizao do relatrio (impresso em disco) atravs da funo OurSpool() 20 Tratamentos adicionais ao relatrio, de acordo com necessidades especficas; 21 Liberao do buffer de impresso, seja para impressora, seja para limpeza do contedo visualizado em tela, utilizando a funo MS_FLUSH()
22 Fim da funo de processamento e impresso do relatrio
23 Funo de atualizao do arquivo de perguntas 24 Declarao e atribuio de variveis; 25 Opo 01: Adio individual de cada pergunta no SX1 utilizando a Pgina 112 Programao ADVPL II e Guia de Referncia funo PUTSX1()
Criao de um array individual no formato utilizado pela PUTSX1() contendo apenas as informaes da pergunta que ser adicionada no SX1. 25 Opo 02: Adio de um grupo de perguntas no SX1 utilizando a funo AJUSTASX1()
Criao de um array no formato utilizado pela AJUSTASX1() contendo todas as perguntas que sero atualizadas.
26 Fim da funo de atualizao do arquivo de perguntas
Funo Principal
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | I nf or m| Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 07 | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a ger ar r el at r i o ut i l i zando as f unes | / / | | Set Pr i nt ( ) e Set Def aul t ( ) . | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
User Funct i on I NFORM( ) / / +- - - - - - - - - - - - - - - - - - - - - - - - - / / | Decl ar aes de var i vei s / / +- - - - - - - - - - - - - - - - - - - - - - - - -
Local cDesc1 : = " Est e r el at r i o i r i mpr i mi r i nf or maes do cont as a pagar conf or me" Local cDesc2 : = " par met r os i nf or mado. Ser ger ado umar qui vo no di r et r i o " Local cDesc3 : = " Spool - I NFORM_????. XLS, onde ???? e o nome do usur i o. "
Pr i vat e cSt r i ng : = " SE2" Pr i vat e Tamanho : = " M" Pr i vat e aRet ur n : = { " Zebr ado" , 2, " Admi ni st r ao" , 2, 2, 1, " " , 1 } Pr i vat e wnr el : = " I NFORM" Pr i vat e NomePr og : = " I NFORM" Pr i vat e nLast Key : = 0 Pr i vat e Li mi t e : = 132 Programao ADVPL II e Guia de Referncia Pgina 113 Pr i vat e Ti t ul o : = " T t ul o a Pagar - Or demde " Pr i vat e cPer g : = " I NFORM" Pr i vat e nTi po : = 0 Pr i vat e cbCont : = 0 Pr i vat e cbTxt : = " r egi st r o( s) l i do( s) " Pr i vat e Li : = 80 Pr i vat e m_pag : = 1 Pr i vat e aOr d : = {} Pr i vat e Cabec1 : = " PREFI XO TI TULO PARCELA TI P EMI SSAO VENCTO VENCTO" Pr i vat e Cabec1 += " REAL VLR. ORI GI NAL PAGO SALDO " Pr i vat e Cabec2 : = " " / * +- - - - - - - - - - - - - - - - - - - - - - | Par met r os do aRet ur n +- - - - - - - - - - - - - - - - - - - - - - aRet ur n - Pr eenchi do pel o Set Pr i nt ( ) aRet ur n[ 1] - Reser vado par a f or mul r i o aRet ur n[ 2] - Reser vado par a numer o de vi as aRet ur n[ 3] - Dest i nat r i o aRet ur n[ 4] - For mat o 1=Pai sagem2=Ret r at o aRet ur n[ 5] - M di a 1- Di sco 2=I mpr essor a aRet ur n[ 6] Por t a ou ar qui vo 1- Lpt 1. . . 4- Com1. . . aRet ur n[ 7] - Expr esso do f i l t r o aRet ur n[ 8] - Or dema ser sel eci onada aRet ur n[ 9] [ 10] [ n] - Campos a pr ocessar se houver */
AADD( aOr d, " For necedor " ) AADD( aOr d, " Ti t ul o" ) AADD( aOr d, " Emi sso" ) AADD( aOr d, " Venci ment o" ) AADD( aOr d, " Venct o. Real " )
/ / Par met r os de per gunt as par a o r el at r i o / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | mv_par 01 - For necedor de ? 999999 | / / | mv_par 02 - For necedor at e ? 999999 | / / | mv_par 03 - Ti po de ? XXX | / / | mv_par 04 - Ti po at e ? XXX | / / | mv_par 05 - Venci ment o de ? 99/ 99/ 99 | / / | mv_par 06 - Venci ment o at e ? 99/ 99/ 99 | / / | mv_par 07 - Agl ut . For necedor ? Si m/ No | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Cr i aSx1( )
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Di sponi bi l i za par a usur i o di gi t ar os par met r os Pgina 114 Programao ADVPL II e Guia de Referncia / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Per gunt e( cPer g, . F. ) / / cPer g - > Nome do gr upo de per gunt as, . T. most r a a t el a, ; / / . F. soment e car r ega as var i vei s
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Sol i ci t a ao usur i o a par amet r i zao do r el at r i o. / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - wnr el : = Set Pr i nt ( cSt r i ng, wnr el , cPer g, @Ti t ul o, cDesc1, cDesc2, cDesc3, . F. , aOr d, . F. , ; Tamanho, . F. , . F. ) / / Set Pr i nt ( cAl i as, cNome, cPer g, cDesc, cCnt 1, cCnt 2, cCnt 3, l Di c, aOr d, l Com pr es, ; / / cSi ze, aFi l t er , l Fi l t r o, l Cr yst al , cNameDr v, l NoAsk, l Ser ver , cPor t ToPr i n t )
/ / +- - - - - - - - - - - - - - - - - - - - / / | Se t ecl ar ESC, sai r / / +- - - - - - - - - - - - - - - - - - - - I f nLast Key == 27 Ret ur n Endi f
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Est abel ece os padr es par a i mpr esso, conf or me escol ha do usur i o / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Set Def aul t ( aRet ur n, cSt r i ng)
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Ver i f i car se ser r eduzi do ou nor mal / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - nTi po : = I I F( aRet ur n[ 4] == 1, 15, 18)
/ / +- - - - - - - - - - - - - - - - - - - - / / | Se t ecl ar ESC, sai r / / +- - - - - - - - - - - - - - - - - - - - I f nLast Key == 27 Ret ur n Endi f
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / / | Chama f uno que pr ocessa os dados / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rpt St at us( {| l End| I mpRel ( @l End) }, Ti t ul o, " Pr ocessando e i mpr i mi ndo dados, ; aguar de. . . " , . T. ) Programao ADVPL II e Guia de Referncia Pgina 115
Local nI ndi ce : = 0 Local cAr q : = " " Local cI ndi ce : = " " Local cFi l t r o : = " " Local aCol : = {} Local cFor nec : = " " Local nVal or : = 0 Local nPago : = 0 Local nSal do : = 0 Local nT_Val or : = 0 Local nT_Pago : = 0 Local nT_Sal do : = 0 Local cAr qExcel : = " " Local cAl i asI mp Local oExcel App
Ti t ul o += aOr d[ aRet ur n[ 8] ]
#I FNDEF TOP cAl i asI mp : = " SE2"
cFi l t r o : = " E2_FI LI AL == ' " +xFi l i al ( " SE2" ) +" ' " cFi l t r o += " . And. E2_FORNECE >= ' " +mv_par 01+" ' " cFi l t r o += " . And. E2_FORNECE <= ' " +mv_par 02+" ' " cFi l t r o += " . And. E2_TI PO >= ' " +mv_par 03+" ' " cFi l t r o += " . And. E2_TI PO <= ' " +mv_par 04+" ' " cFi l t r o += " . And. Dt os( E2_VENCTO) >= ' " +Dt os( mv_par 05) +" ' " Pgina 116 Programao ADVPL II e Guia de Referncia cFi l t r o += " . And. Dt os( E2_VENCTO) <= ' " +Dt os( mv_par 06) +" ' "
I f aRet ur n[ 8] == 1 / / For necedor cI ndi ce : = " E2_FORNECE+E2_LOJ A+E2_NUM" El sei f aRet ur n[ 8] == 2 / / Ti t ul o cI ndi ce : = " E2_NUM+E2_FORNECE+E2_LOJ A" El sei f aRet ur n[ 8] == 3 / / Emi ssao
cI ndi ce : = " Dt os( E2_EMI SSAO) +E2_FORNECE+E2_LOJ A" El sei f aRet ur n[ 8] == 4 / / Venci ment o cI ndi ce : = " Dt os( E2_VENCTO) +E2_FORNECE+E2_LOJ A" El sei f aRet ur n[ 8] == 5 / / Venci ment o Real cI ndi ce : = " Dt os( E2_VENCREA) +E2_FORNECE+E2_LOJ A" Endi f
cAr q : = Cr i aTr ab( NI L, . F. ) dbSel ect Ar ea( cAl i asI mp) I ndRegua( cAl i asI mp, cAr q, cI ndi ce, , cFi l t r o) nI ndi ce : = Ret I ndex( ) nI ndi ce : = nI ndi ce + 1 dbSet I ndex( cAr q+Or dBagExt ( ) ) dbSet Or der ( nI ndi ce) #ELSE cAl i asI mp : = Get Next Al i as( )
cQuer y : = " SELECT " cQuer y += " E2_PREFI XO, E2_NUM, E2_PARCELA, E2_TI PO, E2_FORNECE, E2_LOJ A, E2_NOMFOR, " cQuer y += " E2_EMI SSAO, E2_VENCTO, E2_VENCREA, E2_VALOR, E2_SALDO " cQuer y += " FROM " +Ret Sql Name( " SE2" ) +" " cQuer y += " WHERE E2_FI LI AL = ' " +xFi l i al ( " SE2" ) +" ' " cQuer y += " AND E2_FORNECE >= ' " +mv_par 01+" ' " cQuer y += " AND E2_FORNECE <= ' " +mv_par 02+" ' " cQuer y += " AND E2_TI PO >= ' " +mv_par 03+" ' " cQuer y += " AND E2_TI PO <= ' " +mv_par 04+" ' " cQuer y += " AND E2_VENCTO >= ' " +Dt os( mv_par 05) +" ' " cQuer y += " AND E2_VENCTO <= ' " +Dt os( mv_par 06) +" ' " cQuer y += " AND D_E_L_E_T_ <> ' *' " cQuer y += " ORDER BY "
I f aRet ur n[ 8] == 1 / / For necedor cQuer y += " E2_FORNECE, E2_LOJ A, E2_NUM" El sei f aRet ur n[ 8] == 2 / / Ti t ul o cQuer y += " E2_NUM, E2_FORNECE, E2_LOJ A" El sei f aRet ur n[ 8] == 3 / / Emi ssao cQuer y += " E2_EMI SSAO, E2_FORNECE, E2_LOJ A" El sei f aRet ur n[ 8] == 4 / / Venci ment o cQuer y += " E2_VENCTO, E2_FORNECE, E2_LOJ A" El sei f aRet ur n[ 8] == 5 / / Venci ment o Real Programao ADVPL II e Guia de Referncia Pgina 117 cQuer y += " E2_VENCREA, E2_FORNECE, E2_LOJ A" Endi f
dbUseAr ea( . T. , " TOPCONN" , TcGenQr y( , , cQuer y) , cAl i asI mp, . T. , . F. ) dbSel ect Ar ea( cAl i asI mp)
/ * I nst r uo SQL Embedded - - - - - - - - - - - - - - - - - - - - - - I f aRet ur n[ 8] == 1 / / For necedor cOr der : = " E2_FORNECE, E2_LOJ A, E2_NUM" El sei f aRet ur n[ 8] == 2 / / Ti t ul o cOr der : = " E2_NUM, E2_FORNECE, E2_LOJ A" El sei f aRet ur n[ 8] == 3 / / Emi ssao cOr der : = " E2_EMI SSAO, E2_FORNECE, E2_LOJ A" El sei f aRet ur n[ 8] == 4 / / Venci ment o cOr der : = " E2_VENCTO, E2_FORNECE, E2_LOJ A"
El sei f aRet ur n[ 8] == 5 / / Venci ment o Real cOr der : = " E2_VENCREA, E2_FORNECE, E2_LOJ A" Endi f
Begi nSQL Al i as cAl i asI mp Col umn E2_EMI SSAO As Dat e Col umn E2_VENCTO As Dat e Col umn E2_VENCREA As Dat e Col umn E2_VALOR As Numer i c( 12) Col umn E2_SALDO As Numer i c( 12) %NoPar ser %
SELECT E2_PREFI XO, E2_NUM, E2_PARCELA, E2_TI PO, E2_FORNECE, E2_LOJ A, E2_NOMFOR, E2_EMI SSAO, E2_VENCTO, E2_VENCREA, E2_VALOR, E2_SALDO FROM %Tabl e: SE2 WHERE E2_FI LI AL = %xFi l i al %AND E2_FORNECE BETWEEN %Exp: mv_par 01%AND %Exp: mv_par 02%AND E2_TI PO BETWEEN%Exp: mv_par 03%AND %Exp: mv_par 04%AND E2_VENCTO BETWEEN %Exp: mv_par 05%AND %Exp: mv_par 06%AND %Not Del % ORDER BY %Or der : cOr der % EndSQL */ #ENDI F
dbGoTop( ) Set Regua( 0)
Pgina 118 Programao ADVPL II e Guia de Referncia / / +- - - - - - - - - - - - - - - - - - - - / / | Col una de i mpr esso / / +- - - - - - - - - - - - - - - - - - - - AADD( aCol , 004 ) / / Pr ef i xo AADD( aCol , 012 ) / / Ti t ul o AADD( aCol , 024 ) / / Par cel a AADD( aCol , 031 ) / / Ti po AADD( aCol , 036 ) / / Emi ssao AADD( aCol , 046 ) / / Venci ment o AADD( aCol , 058 ) / / Venci ment o Real AADD( aCol , 070 ) / / Val or Or i gi nal AADD( aCol , 090 ) / / Pago AADD( aCol , 110 ) / / Sal do
cFor nec : = ( cAl i asI mp) - >E2_FORNECE+( cAl i asI mp) - >E2_LOJ A
Whi l e ! Eof ( ) . And. ! l End
I f Li > 55 Cabec( Ti t ul o, Cabec1, Cabec2, NomePr og, Tamanho, nTi po) Endi f
@Li , aCol [ 1] PSay " Cod/ Loj / Nome: " +( cAl i asI mp) - >E2_FORNECE+; " - " +( cAl i asI mp) - >E2_LOJ A+" " +( cAl i asI mp) - >E2_NOMFOR Li ++
Whi l e ! Eof ( ) . And. ! l End . And. ; ( cAl i asI mp) - >E2_FORNECE+( cAl i asI mp) - >E2_LOJ A == cFor nec
I ncRegua( )
I f Li > 55 Cabec( Ti t ul o, Cabec1, Cabec2, NomePr og, Tamanho, nTi po) Endi f
I f mv_par 07 == 2 @Li , aCol [ 1] PSay ( cAl i asI mp) - >E2_PREFI XO @Li , aCol [ 2] PSay ( cAl i asI mp) - >E2_NUM @Li , aCol [ 3] PSay ( cAl i asI mp) - >E2_PARCELA @Li , aCol [ 4] PSay ( cAl i asI mp) - >E2_TI PO @Li , aCol [ 5] PSay ( cAl i asI mp) - >E2_EMI SSAO @Li , aCol [ 6] PSay ( cAl i asI mp) - >E2_VENCTO @Li , aCol [ 7] PSay ( cAl i asI mp) - >E2_VENCREA @Li , aCol [ 8] PSay ( cAl i asI mp) - >E2_VALOR ; PI CTURE " @E 99, 999, 999, 999. 99" @Li , aCol [ 9] PSay ( cAl i asI mp) - >E2_VALOR - ; ( cAl i asI mp) - >E2_SALDO ; PI CTURE " @E 99, 999, 999, 999. 99" Programao ADVPL II e Guia de Referncia Pgina 119 @Li , aCol [ 10] PSay ( cAl i asI mp) - >E2_SALDO ; PI CTURE " @E 99, 999, 999, 999. 99" Li ++ Endi f
nVal or += ( cAl i asI mp) - >E2_VALOR nPago += ( ( cAl i asI mp) - >E2_VALOR- ( cAl i asI mp) - >E2_SALDO) nSal do += ( cAl i asI mp) - >E2_SALDO
nT_Val or += ( cAl i asI mp) - >E2_VALOR nT_Pago += ( ( cAl i asI mp) - >E2_VALOR- ( cAl i asI mp) - >E2_SALDO) nT_Sal do += ( cAl i asI mp) - >E2_SALDO
dbSki p( ) End
@Li , 000 PSay Repl i cat e( " - " , Li mi t e) Li ++ @Li , aCol [ 1] PSay " TOTAL. . . . . " @Li , aCol [ 8] PSay nVal or PI CTURE " @E 99, 999, 999, 999. 99" @Li , aCol [ 9] PSay nPago PI CTURE " @E 99, 999, 999, 999. 99" @Li , aCol [ 10] PSay nSal do PI CTURE " @E 99, 999, 999, 999. 99" Li +=2
cFor nec : = ( cAl i asI mp) - >E2_FORNECE+( cAl i asI mp) - >E2_LOJ A nVal or : = 0 nPago : = 0 nSal do : = 0
End
I f l End @Li , aCol [ 1] PSay cCancel Ret ur n Endi f
@Li , 000 PSay Repl i cat e( " =" , Li mi t e) Li ++ @Li , aCol [ 1] PSay " TOTAL GERAL. . . . . " @Li , aCol [ 8] PSay nT_Val or PI CTURE " @E 99, 999, 999, 999. 99" @Li , aCol [ 9] PSay nT_Pago PI CTURE " @E 99, 999, 999, 999. 99" @Li , aCol [ 10] PSay nT_Sal do PI CTURE " @E 99, 999, 999, 999. 99"
I f Li <> 80 Roda( cbCont , cbTxt , Tamanho) Endi f
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pgina 120 Programao ADVPL II e Guia de Referncia / / | Ger a ar qui vo do t i po . DBF comext enso . XLS p/ usur i o abr i r no Excel / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cAr qExcel : = __RELDI R+NomePr og+" _" +Subst r ( cUsuar i o, 7, 4) +" . XLS" Copy To &cAr qExcel
#I FNDEF TOP dbSel ect Ar ea( cAl i asI mp) Ret I ndex( cAl i asI mp) Set Fi l t er To #ELSE dbSel ect Ar ea( cAl i asI mp) dbCl oseAr ea( ) #ENDI F dbSet Or der ( 1) dbGoTop( )
I f aRet ur n[ 5] == 1 Set Pr i nt er TO dbCommi t Al l ( ) Our Spool ( wnr el ) EndI f
/ / +- - - - - - - - - - - - - - - - - - - - - - - - / / | Abr i r pl ani l ha MS- Excel / / +- - - - - - - - - - - - - - - - - - - - - - - - I f mv_par 08 == 1 __CopyFi l e( cAr qExcel , " c: \ " +NomePr og+" _" +Subst r ( cUsuar i o, 7, 4) +" . XLS" ) I f ! ApOl eCl i ent ( " MsExcel " ) MsgAl er t ( " MsExcel no i nst al ado" ) Ret ur n Endi f oExcel App : = MsExcel ( ) : New( ) oExcel App: Wor kBooks: Open( " c: \ " +NomePr og+" _" +Subst r ( cUsuar i o, 7, 4) +" . XLS" ) oExcel App: Set Vi si bl e( . T. ) Endi f
Ms_Fl ush( )
Ret ur n
Funo para gerar o grupo de parmetros no SX1
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Rot i na | Cr i aSX1 | Aut or | Robson Lui z ( r l eg) | Dat a | 01. 01. 07 | Programao ADVPL II e Guia de Referncia Pgina 121 / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Descr . | Rot i na par a cr i ar o gr upo de par met r os. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Uso | Par a t r ei nament o e capaci t ao. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + St at i c Funct i on Cr i aSx1( ) Local aP : = {} Local i : = 0 Local cSeq Local cMvCh Local cMvPar Local aHel p : = {}
Car act er st i ca do vet or p/ ut i l i zao da f uno SX1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [ n, 1] - - > t ext o da per gunt a [ n, 2] - - > t i po do dado [ n, 3] - - > t amanho [ n, 4] - - > deci mal [ n, 5] - - > obj et o G=get ou C=choi ce Pgina 122 Programao ADVPL II e Guia de Referncia [ n, 6] - - > val i dao [ n, 7] - - > F3 [ n, 8] - - > def i ni o 1 [ n, 9] - - > def i ni o 2 [ n, 10] - > def i ni o 3 [ n, 11] - > def i ni o 4 [ n, 12] - > def i ni o 5 ***/
AADD( aHel p, {" I nf or me o cdi go do f or necedor . " , " i ni ci al . " }) AADD( aHel p, {" I nf or me o cdi go do f or necedor . " , " f i nal . " }) AADD( aHel p, {" Ti po de t t ul o i ni ci al . " }) AADD( aHel p, {" Ti po de t t ul o f i nal . " }) AADD( aHel p, {" Di gi t e a dat a do venci ment o i ni ci al . " }) AADD( aHel p, {" Di gi t e a dat a do venci ment o f i nal . " }) AADD( aHel p, {" Agl ut i nar os t t ul os do mesmo f or ne- " , ; " cedor t ot al i zando seus val or es. " }) AADD( aHel p, {" Ser ger ada uma pl ani l ha par a " , ; " MS- Excel , abr i r est a pl ani l ha?" })
For i : =1 To Len( aP) cSeq : = St r Zer o( i , 2, 0) cMvPar : = " mv_par " +cSeq cMvCh : = " mv_ch" +I I F( i <=9, Chr ( i +48) , Chr ( i +87) )
Put Sx1( cPer g, ; cSeq, ; aP[ i , 1] , aP[ i , 1] , aP[ i , 1] , ; cMvCh, ; aP[ i , 2] , ; aP[ i , 3] , ; aP[ i , 4] , ; 0, ; aP[ i , 5] , ; Programao ADVPL II e Guia de Referncia Pgina 123 aP[ i , 6] , ; aP[ i , 7] , ; " " , ; " " , ; cMvPar , ; aP[ i , 8] , aP[ i , 8] , aP[ i , 8] , ; " " , ; aP[ i , 9] , aP[ i , 9] , aP[ i , 9] , ; aP[ i , 10] , aP[ i , 10] , aP[ i , 10] , ; aP[ i , 11] , aP[ i , 11] , aP[ i , 11] , ; aP[ i , 12] , aP[ i , 12] , aP[ i , 12] , ; aHel p[ i ] , ; {}, ; {}, ; " " ) Next i
Ret ur n
Exerccio 14 Implementar um relatrio que fornea uma listagem de uma nota fiscal de entrada e seus itens. 10. Manipulao de arquivos I
2.18 Gerao e leitura de arquivos em formato texto
Arquivos do tipo texto (tambm conhecidos como padro TXT) so arquivos com registros de tamanho varivel. A indicao do final de cada registro representada por dois bytes, 0D 0A em hexadecimal ou 13 10 em decimal ou, ainda, CR LF para padro ASCII.
Apesar do tamanho dos registros ser varivel, a maioria dos sistemas gera este tipo de arquivo com registros de tamanho fixo, de acordo com um layout especfico que indica quais so os dados gravados.
Para ilustrar estes procedimentos, sero gerados arquivos textos, com duas famlias de funes:
1) Famlia: nesta famlia sero utilizadas as funes: FCreate(), FWrite(), FClose(), FSeek(), FOpen() e FRead().
Pgina 124 Programao ADVPL II e Guia de Referncia 2) Famlia: nesta famlia sero utilizadas as funes: FT_FUse(), FT_FGoTop(), FT_FLastRec(), FT_FEof(), FT_FReadLn(), FT_FSkip(), FT_FGoto(), FT_FRecno().
A diferena entre as duas famlias est na leitura do arquivo texto. Quando se tratar de arquivo texto com tamanho fixo das linhas, podero ser utilizadas as duas famlias para leitura do arquivo. Porm, quando se tratar de arquivo texto com tamanho varivel das linhas, somente poder ser utiliza a segunda famlia, representada pelas funes: FT_FUse(), FT_FGoTo(), FT_FRecno(), FT_FGoTop(), FT_FLastRec(), FT_FEof(), FT_FReadLn() e FT_FSkip().
2.18.1 1 Famlia de funes de gravao e leitura de arquivos texto
2.18.1.1 FCREATE()
Funo de baixo-nvel que permite a manipulao direta dos arquivos textos como binrios. Ao ser executada FCREATE() cria um arquivo ou elimina o seu contedo, e retorna o handle (manipulador) do arquivo, para ser usado nas demais funes de manuteno de arquivo. Aps ser utilizado, o Arquivo deve ser fechado atravs da funo FCLOSE().
Na tabela abaixo, esto descritos os atributos para criao do arquivo , definidos no arquivo header fileio.ch Programao ADVPL II e Guia de Referncia Pgina 125
E Atributos definidos no include FileIO.ch
Constante Valor Descrio FC_NORMAL 0 Criao normal do Arquivo (default/padro). FC_READONLY 1 Cria o arquivo protegido para gravao. FC_HIDDEN 2 Cria o arquivo como oculto. FC_SYSTEM 4 Cria o arquivo como sistema.
Caso desejemos especificar mais de um atributo, basta som-los. Por exemplo , para criar um arquivo protegido contra gravao e escondido , passamos como atributo FC_READONLY + FC_HIDDEN. .
Nota: Caso o arquivo j exista, o contedo do mesmo ser ELIMINADO, e, seu tamanho ser truncado para 0 ( ZERO ) bytes.
cArquivo Nome do arquivo a ser criado, podendo ser especificado um pacote (patch) absoluto ou relativo, para criar arquivos no ambiente local ( Remote ) ou no Servidor, respectivamente . nAtributo Atributos do arquivo a ser criado (Vide Tabela de atributos abaixo). Caso no especificado, o DEFAULT FC_NORMAL.
E Retorno:
Numrico
A funo retornar o Handle do arquivo para ser usado nas demais funes de manuteno de arquivo. O Handle ser maior ou igual a zero. Caso no seja possvel criar o arquivo, a funo retornar o handle -1 , e ser possvel obter maiores detalhes da ocorrncia atravs da funo FERROR() .
2.18.1.2 FWRITE()
Funo que permite a escrita em todo ou em parte do contedo do buffer, limitando a quantidade de Bytes atravs do parmetro nQtdBytes. A escrita comea a partir da posio corrente do ponteiro de arquivos, e a funo FWRITE retornar a quantidade real de bytes escritos. Atravs das funes FOPEN(), FCREATE(), ou FOPENPORT(), podemos abrir ou criar um arquivo ou abrir uma porta de comunicao, para o qual sero gravados ou enviados os dados do buffer informado. Por tratar-se de uma funo de manipulao de contedo binrio, so suportados na String cBuffer todos os caracteres da tabela ASCII, inclusive caracteres de controle (ASC 0 , ASC 12 , ASC 128 , etc.).
Pgina 126 Programao ADVPL II e Guia de Referncia Caso acontea alguma falha na gravao, a funo retornar um nmero menor que o nQtdBytes. Neste caso, a funo FERROR() pode ser utilizada para determinar o erro especfico ocorrido. A gravao no arquivo realizada a partir da posio atual do ponteiro, que pode ser ajustado atravs das funes FSEEK() , FREAD() ou FREADSTR().
nHandle o manipulador de arquivo ou device retornado pelas funes FOPEN(), FCREATE(), ou FOPENPORT(). cBuffer <cBuffer> a cadeia de caracteres a ser escrita no arquivo especificado. O tamanho desta varivel deve ser maior ou igual ao tamanho informado em nQtdBytes (caso seja informado o tamanho). nQtdBytes <nQtdBytes> indica a quantidade de bytes a serem escritos a partir da posio corrente do ponteiro de arquivos. Caso seja omitido, todo o contedo de <cBuffer> escrito.
E Retorno:
Numrico FWRITE() retorna a quantidade de bytes escritos na forma de um valor numrico inteiro. Caso o valor retornado seja igual a <nQtdBytes>, a operao foi bem sucedida. Caso o valor de retorno seja menor que <nBytes> ou zero, ou o disco est cheio ou ocorreu outro erro. Neste caso, utilize a funo FERROR() para obter maiores detalhes da ocorrncia.
2.18.1.3 FCLOSE()
Funo de tratamento de arquivos de baixo nvel utilizada para fechar arquivos binrios e forar que os respectivos buffers do DOS sejam escritos no disco. Caso a operao falhe, FCLOSE() retorna falso (.F.). FERROR() pode, ento, ser usado para determinar a razo exata da falha. Por exemplo, ao tentar usar FCLOSE() com um handle (tratamento dado ao arquivo pelo sistema operacional) invlido retorna falso (.F.) e FERROR() retorna erro 6 do DOS, invalid handle. Consulte FERROR() para obter uma lista completa dos cdigos de erro.
Nota: Esta funo permite acesso de baixo nvel aos arquivos e dispositivos do DOS. Ela deve ser utilizada com extremo cuidado e exige que se conhea a fundo o sistema operacional utilizado.
E Sintaxe: FCLOSE ( < nHandle > )
E Parmetros:
nHandle Handle do arquivo obtido previamente atravs de FOPEN() ou FCREATE().
Programao ADVPL II e Guia de Referncia Pgina 127
E Retorno:
Lgico Retorna falso (.F.) se ocorre um erro enquanto os buffers esto sendo escritos; do contrrio, retorna verdadeiro (.T.).
2.18.1.4 FSEEK()
Funo que posiciona o ponteiro do arquivo para as prximas operaes de leitura ou gravao. As movimentaes de ponteiros so relativas nOrigem que pode ter os seguintes valores, definidos em fileio.ch:
E Tabela A: Origem a ser considerada para a movimentao do ponteiro de posicionamento do Arquivo.
Origem Constate(fileio.ch) Operao 0 FS_SET Ajusta a partir do inicio do arquivo. (Default). 1 FS_RELATIVE Ajuste relativo a posio atual do arquivo. 2 FS_END Ajuste a partir do final do arquivo.
nHandle Manipulador obtido atravs das funes FCREATE, FOPEN. nOffSet nOffSet corresponde ao nmero de bytes no ponteiro de posicionamento do arquivo a ser movido. Pode ser um nmero positivo, zero ou negativo, a ser considerado a partir do parmetro passado em nOrigem. nOrigem Indica a partir de qual posio do arquivo, o nOffset ser considerado.
E Retorno:
Numrico FSEEK() retorna a nova posio do ponteiro de arquivo com relao ao incio do arquivo (posio 0) na forma de um valor numrico inteiro. Este valor no leva em conta a posio original do ponteiro de arquivos antes da execuo da funo FSEEK().
2.18.1.5 FOPEN()
Funo de tratamento de arquivo de baixo nvel que abre um arquivo binrio existente para que este possa ser lido e escrito, dependendo do argumento <nModo>. Toda vez que houver um erro na abertura do arquivo, FERROR() pode ser usado para retornar o cdigo de erro do Sistema Operacional. Por exemplo, caso o arquivo no exista, FOPEN() retorna -1 e FERROR() retorna 2 para indicar que o arquivo no foi encontrado. Veja FERROR() para uma lista completa dos cdigos de erro. Pgina 128 Programao ADVPL II e Guia de Referncia Caso o arquivo especificado seja aberto, o valor retornado o handle (manipulador) do Sistema Operacional para o arquivo. Este valor semelhante a um alias no sistema de banco de dados, e ele exigido para identificar o arquivo aberto para as outras funes de tratamento de arquivo. Portanto, importante sempre atribuir o valor que foi retornado a uma varivel para uso posterior, como mostra o exemplo desta funo.
E Sintaxe: FOPEN ( < cArq > , [ nModo ] )
E Parmetros:
cArq Nome do arquivo a ser aberto que inclui o pacote, caso haja um. nModo Modo de acesso DOS solicitado que indica como o arquivo aberto deve ser acessado. O acesso de uma das categorias relacionadas na tabela A e as restries de compartilhamento relacionada na Tabela B. O modo padro zero, somente para leitura, com compartilhamento por Compatibilidade. Ao definirmos o modo de acesso, devemos somar um elemento da Tabela A com um elemento da Tabela B.
E Retorno:
Numrico FOPEN() retorna o handle de arquivo aberto na faixa de zero a 65.535. Caso ocorra um erro, FOPEN() retorna -1.
2.18.1.6 FREAD()
Funo que realiza a leitura dos dados a partir um arquivo aberto, atravs de FOPEN(), FCREATE() e/ou FOPENPORT(), e armazena os dados lidos por referncia no buffer informado. FREAD() ler at o nmero de bytes informado em nQtdBytes; caso acontea algum erro ou o arquivo chegue ao final, FREAD() retornar um nmero menor que o especificado em nQtdBytes. FREAD() l normalmente caracteres de controle (ASC 128, ASC 0, etc.) e l a partir da posio atual do ponteiro atual do arquivo, que pode ser ajustado ou modificado pelas funes FSEEK() , FWRITE() ou FREADSTR().
A varivel String a ser utilizada como buffer de leitura deve ser sempre pr-alocada e passada como referncia. Caso contrrio, os dados no podero ser retornados.
E Sintaxe: FREAD ( < nHandle > , < cBuffer > , < nQtdBytes > ) Programao ADVPL II e Guia de Referncia Pgina 129
E Parmetros:
nHandle o manipulador (Handle) retornado pelas funes FOPEN(), FCREATE(), FOPENPORT(), que faz referncia ao arquivo a ser lido. cBuffer o nome de uma varivel do tipo String , a ser utilizada como buffer de leitura, onde os dados lidos devero ser armazenados. O tamanho desta varivel deve ser maior ou igual ao tamanho informado em nQtdBytes. Esta varivel deve ser sempre passada como referncia. (@ antes do nome da varivel), caso contrrio os dados lidos no sero retornados. nQtdBytes Define a quantidade de bytes que devem ser lidas do arquivo a partir posicionamento do ponteiro atual.
E Retorno:
Numrico Quantidades de bytes lidos. Caso a quantidade seja menor que a solicitada, isto indica erro de leitura ou final de arquivo. Verifique a funo FERROR() para mais detalhes.
Exemplo: Gerao de arquivo TXT, utilizando a primeira famlia de funes
DEFI NE MSDI ALOG oGer aTxt TI TLE OemToAnsi ( " Ger ao de Ar qui vo Text o" ) ; FROM 000, 000 TO 200, 400 PI XEL
@005, 005 TO 095, 195 OF oGer aTxt PI XEL @010, 020 Say " Est e pr ogr ama i r a ger ar umar qui vo t ext o, conf or me os par ame- " ; OF oGer aTxt PI XEL @018, 020 Say " t r os def i ni dos pel o usur i o, comos r egi st r os do ar qui vo de " ; OF oGer aTxt PI XEL @026, 020 Say " SA1 " OF oGer aTxt PI XEL
DEFI NE SBUTTON FROM 070, 030 TYPE 1 ; ACTI ON ( OkGer aTxt ( ) , oGer aTxt : End( ) ) ENABLE OF oGer aTxt
DEFI NE SBUTTON FROM 070, 070 TYPE 2 ; ACTI ON ( oGer aTxt : End( ) ) ENABLE OF oGer aTxt
DEFI NE SBUTTON FROM 070, 110 TYPE 5 ; ACTI ON ( Per gunt e( cPer g, . T. ) ) ENABLE OF oGer aTxt
ACTI VATE DI ALOG oGer aTxt CENTERED
Ret ur n Ni l
Exemplo (continuao):
/ */ +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Funo | OKGERATXT | Aut or | SERGI O FUZI NAKA | Dat a | | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Descr i o | Funo chamada pel o bot o OK na t el a i ni ci al de pr ocessament o. | | | Execut a a ger ao do ar qui vo t ext o. | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / */ Programao ADVPL II e Guia de Referncia Pgina 131
I f nHdl == - 1 MsgAl er t ( " O ar qui vo de nome " +cAr qTxt +" no pode ser execut ado! Ver i f i que os par met r os. " , " At eno! " ) Ret ur n Endi f
/ / I ni ci al i za a r gua de pr ocessament o Pr ocessa( {| | RunCont ( ) }, " Pr ocessando. . . " )
dbSel ect Ar ea( cAl i as) dbGoTop( ) Pr ocRegua( RecCount ( ) ) / / Numer o de r egi st r os a pr ocessar
Whi l e ( cAl i as) - >( ! EOF( ) ) / / I ncr ement a a r gua I ncPr oc( )
Pgina 132 Programao ADVPL II e Guia de Referncia cLi n : = ( cAl i as) - >A1_FI LI AL cLi n += ( cAl i as) - >A1_COD cLi n += ( cAl i as) - >A1_LOJ A cLi n += ( cAl i as) - >A1_NREDUZ cLi n += STRZERO( ( cAl i as) - >A1_MCOMPRA*100, 16) / / 14, 2 cLi n += DTOS( ( cAl i as) - >A1_ULTCOM) / / AAAAMMDD cLi n += CRLF
Exemplo (continuao):
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Gr avao no ar qui vo t ext o. Test a por er r os dur ant e a gr avao da | / / | l i nha mont ada. | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
I f f Wr i t e( nHdl , cLi n, Len( cLi n) ) ! = Len( cLi n) I f ! MsgAl er t ( " Ocor r eu umer r o na gr avao do ar qui vo. " +; " Cont i nua?" , " At eno! " ) Exi t Endi f Endi f
( cAl i as) - >( dbSki p( ) ) EndDo
/ / O ar qui vo t ext o deve ser f echado, bemcomo o di al ogo cr i ado na f uno ant er i or f Cl ose( nHdl )
Ret ur n Ni l
Not e que par a a ger ao do ar qui vo TXT f or am ut i l i zadas, basi cament e, as f unes FCr eat e, FWr i t e e FCl ose que, r espect i vament e, ger a o ar qui vo, adi ci ona dados e f echa o ar qui vo. No exempl o, o f or mat o est abel eci do pel a concat enao dos dados na var i vel cLin a qual ut i l i zada na gr avao dos dados. Par a a l ei t ur a de dados TXT ser o ut i l i zada as f unes FOpen e FRead.
Exemplo: Leitura de arquivo TXT, utilizando a primeira famlia de funes
#I ncl ude " pr ot heus. ch" Programao ADVPL II e Guia de Referncia Pgina 133
DEFI NE MSDI ALOG oLeTxt TI TLE OemToAnsi ( " Lei t ur a de Ar qui vo Text o" ) ; FROM 000, 000 TO 200, 400 PI XEL @005, 005 TO 095, 195 OF oLeTxt PI XEL Pgina 134 Programao ADVPL II e Guia de Referncia @10, 020 Say " Est e pr ogr ama i r a l er o cont edo de umar qui vo t ext o, conf or me" ; OF oLeTxt PI XEL @18, 020 Say " os par met r os def i ni dos pel o usur i o, comos r egi st r os do ar qui vo" ; OF oLeTxt PI XEL @26, 020 Say " SA1" OF oLeTxt PI XEL
DEFI NE SBUTTON FROM 070, 030 TYPE 1 ; ACTI ON ( OkLeTxt ( ) , oLeTxt : End( ) ) ENABLE OF oLeTxt
DEFI NE SBUTTON FROM 070, 070 TYPE 2 ; ACTI ON ( oLeTxt : End( ) ) ENABLE OF oLeTxt
DEFI NE SBUTTON FROM 070, 110 TYPE 5 ; ACTI ON ( Per gunt e( cPer g, . T. ) ) ENABLE OF oLeTxt ACTI VATE DI ALOG oLeTxt CENTERED
Ret ur n Ni l
/ */ +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Funo | OKLETXT | Aut or | SERGI O FUZI NAKA | Dat a | | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Descr i o | Funo chamada pel o bot o OK na t el a i ni ci al de pr ocessament o | | | Execut a a l ei t ur a do ar qui vo t ext o | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / */
Pr i vat e cAr qTxt : = " \ SYSTEM\ EXPSA1. TXT" Pr i vat e nHdl : = f Open( cAr qTxt , 68)
I f nHdl == - 1 MsgAl er t ( " O ar qui vo de nome " +cAr qTxt +" no pode ser aber t o! Ver i f i que os par met r os. " , " At eno! " ) Ret ur n Programao ADVPL II e Guia de Referncia Pgina 135 Endi f
/ / I ni ci al i za a r gua de pr ocessament o Pr ocessa( {| | RunCont ( ) }, " Pr ocessando. . . " ) Ret ur n Ni l
Local nTamFi l e : = 0 Local nTamLi n : = 56 Local cBuf f er : = " " Local nBt Li dos : = 0 Local cFi l SA1 : = " " Local cCodSA1 : = " " Local cLoj aSA1 : = " "
nTamFi l e : = f Seek( nHdl , 0, 2) f Seek( nHdl , 0, 0) cBuf f er : = Space( nTamLi n) / / Var i vel par a cr i ao da l i nha do r egi st r o par a l ei t ur a
Pr ocRegua( nTamFi l e) / / Numer o de r egi st r os a pr ocessar Whi l e nBt Li dos < nTamFi l e Pgina 136 Programao ADVPL II e Guia de Referncia
/ / I ncr ement a a r gua I ncPr oc( )
/ / Lei t ur a da pr i mei r a l i nha do ar qui vo t ext o nBt Li dos += f Read( nHdl , @cBuf f er , nTamLi n)
cFi l SA1 : = Subst r ( cBuf f er , 01, 02) / / - 01, 02 - TAM: 02 cCodSA1 : = Subst r ( cBuf f er , 03, 06) / / - 03, 08 - TAM: 06 cLoj aSA1 : = Subst r ( cBuf f er , 09, 02) / / - 09, 10 - TAM: 02
Whi l e . T. I F dbSeek( cFi l SA1+cCodSA1+cLoj aSA1) cCodSA1 : = SOMA1( cCodSA1) Loop El se Exi t Endi f Enddo
Exemplo (continuao):
dbSel ect Ar ea( cAl i as) RecLock( cAl i as, . T. ) ( cAl i as) - >A1_FI LI AL : = cFi l SA1 / / - 01, 02 - TAM: 02 ( cAl i as) - >A1_COD : = cCodSA1 / / - 03, 08 - TAM: 06 ( cAl i as) - >A1_LOJ A : = cLoj aSA1 / / - 09, 10 - TAM: 02 ( cAl i as) - >A1_NREDUZ : = Subst r ( cBuf f er , 11, 20) / / - 11, 30 - TAM: 20 ( cAl i as) - >A1_MCOMPRA : = Val ( Subst r ( cBuf f er , 31, 16) ) / 100 / / - 31, 46 - TAM: 14, 2 ( cAl i as) - >A1_ULTCOM : = STOD( Subst r ( cBuf f er , 47, 08) ) / / - 47, 54 - TAM: 08 MSUnLock( )
EndDo
/ / O ar qui vo t ext o deve ser f echado, bemcomo o di al ogo cr i ado na f uno ant er i or . f Cl ose( nHdl )
Ret ur n Ni l
2.18.2 2 Famlia de funes de gravao e leitura de arquivos texto
2.18.2.1 FT_FUSE()
Programao ADVPL II e Guia de Referncia Pgina 137 Funo que abre ou fecha um arquivo texto para uso das funes FT_F*. As funes FT_F* so usadas para ler arquivos texto, onde as linhas so delimitadas pela seqncia de caracteres CRLF ou LF (*) e o tamanho mximo de cada linha 1022 bytes. O arquivo aberto em uma rea de trabalho, similar usada pelas tabelas de dados.
E Sintaxe: FT_FUSE ( [ cTXTFile ] ) E Parmetros:
cTXTFile Corresponde ao nome do arquivo TXT a ser aberto. Caso o nome no seja passado, e j exista um arquivo aberto. o mesmo fechado.
E Retorno:
Numrico A funo retorna o Handle de controle do arquivo. Em caso de falha de abertura, a funo retornar -1
2.18.2.2 FT_FGOTOP()
A funo tem como objetivo mover o ponteiro, que indica a leitura do arquivo texto, para a posio absoluta especificada pelo argumento <nPos>.
E Sintaxe: FT_FGOTO ( < nPos > )
E Parmetros:
nPos Indica a posio que ser colocado o ponteiro para leitura dos dados no arquivo.
2.18.2.3 FT_FLASTREC()
Funo que retorna o nmero total de linhas do arquivo texto aberto pela FT_FUse. As linhas so delimitadas pela seqncia de caracteres CRLF o LF.
E Sintaxe: FT_FLASTREC( )
E Parmetros:
Nenhum ()
E Retorno:
Numrico Retorna a quantidade de linhas existentes no arquivo. Caso o arquivo esteja vazio, ou no exista arquivo aberto, a funo retornar 0 (zero). Pgina 138 Programao ADVPL II e Guia de Referncia
2.18.2.4 FT_FEOF()
Funo que retorna verdadeiro (.t.) se o arquivo texto aberto pela funo FT_FUSE() estiver posicionado no final do arquivo, similar funo EOF() utilizada para arquivos de dados.
E Sintaxe: FT_FEOF( )
E Parmetros:
Nenhum ()
E Retorno:
Lgico Retorna true caso o ponteiro do arquivo tenha chegado ao final; false caso contrrio.
2.18.2.5 FT_FREADLN()
Funo que retorna uma linha de texto do arquivo aberto pela FT_FUse. As linhas so delimitadas pela seqncia de caracteres CRLF ( chr(13) + chr(10) ), ou apenas LF ( chr(10 ), e o tamanho mximo de cada linha 1022 bytes.
E Sintaxe: FT_FREADLN( )
E Parmetros:
Nenhum ()
E Retorno:
Caracter Retorna a linha inteira na qual est posicionado o ponteiro para leitura de dados.
Programao ADVPL II e Guia de Referncia Pgina 139 2.18.2.6 FT_FSKIP()
Funo que move o ponteiro do arquivo texto aberto pela FT_FUSE() para a prxima linha, similar ao DBSKIP() usado para arquivos de dados.
E Sintaxe: FT_FSKIP ( [ nLinhas ] ) E Parmetros:
nLinhas nLinhas corresponde ao nmero de linhas do arquivo TXT ref. movimentao do ponteiro de leitura do arquivo.
E Retorno
Nenhum ()
2.18.2.7 FT_FGOTO()
Funo utilizada para mover o ponteiro, que indica a leitura do arquivo texto, para a posio absoluta especificada pelo argumento <nPos>.
E Sintaxe: FT_FGOTO ( < nPos > )
E Parmetros:
nPos Indica a posio que ser colocado o ponteiro para leitura dos dados no arquivo.
E Retorno:
Nenhum ()
2.18.2.8 FT_FRECNO()
A funo tem o objetivo de retornar a posio do ponteiro do arquivo texto. A funo FT_FRecno retorna a posio corrente do ponteiro do arquivo texto aberto pela FT_FUse.
E Sintaxe: FT_FRECNO ( ) E Parmetros:
Nenhum ()
E Retorno:
Caracter Retorna a posio corrente do ponteiro do arquivo texto.
Pgina 140 Programao ADVPL II e Guia de Referncia Exemplo: Leitura de arquivo TXT, utilizando a segunda famlia de funes
Local cBuf f er : = " " Local cFi l eOpen : = " " Local cTi t ul o1 : = " Sel eci one o ar qui vo" Local cExt ens : = " Ar qui vo TXT | *. t xt "
/ *** Programao ADVPL II e Guia de Referncia Pgina 141 * _________________________________________________________ * cGet Fi l e( <ExpC1>, <ExpC2>, <ExpN1>, <ExpC3>, <ExpL1>, <ExpN2>) * * <ExpC1> - Expr esso de f i l t r o * <ExpC2> - Ti t ul o da j anel a * <ExpN1> - Numer o de mascar a def aul t 1 par a *. Exe * <ExpC3> - Di r et r i o i ni ci al se necessr i o * <ExpL1> - . F. bot o sal var - . T. bot o abr i r * <ExpN2> - Mascar a de bi t s par a escol her as opes de vi sual i zao do obj et o * ( pr const . ch) */ cFi l eOpen : = cGet Fi l e( cExt ens, cTi t ul o1, , cMai nPat h, . T. )
I f ! Fi l e( cFi l eOpen) MsgAl er t ( " Ar qui vo t ext o: " +cFi l eOpen+" no l ocal i zado" , cCadast r o) Ret ur n Endi f
FT_FUSE( cFi l eOpen) / / ABRI R FT_FGOTOP( ) / / PONTO NO TOPO Pr ocRegua( FT_FLASTREC( ) ) / / QTOS REGI STROS LER
Whi l e ! FT_FEOF( ) / / FACA ENQUANTO NAO FOR FI M DE ARQUI VO I ncPr oc( )
/ / Capt ur ar dados cBuf f er : = FT_FREADLN( ) / / LENDO LI NHA
cMsg : = " Fi l i al : " +SubSt r ( cBuf f er , 01, 02) + Chr ( 13) +Chr ( 10) cMsg += " Cdi go: " +SubSt r ( cBuf f er , 03, 06) + Chr ( 13) +Chr ( 10) cMsg += " Loj a: " +SubSt r ( cBuf f er , 09, 02) + Chr ( 13) +Chr ( 10) cMsg += " Nome f ant asi a: " +SubSt r ( cBuf f er , 11, 15) + Chr ( 13) +Chr ( 10) cMsg += " Val or : " +SubSt r ( cBuf f er , 26, 14) + Chr ( 13) +Chr ( 10) cMsg += " Dat a: " +SubSt r ( cBuf f er , 40, 08) + Chr ( 13) +Chr ( 10)
MsgI nf o( cMsg)
FT_FSKI P( ) / / pr xi mo r egi st r o no ar qui vo t xt EndDo Exemplo (continuao):
FT_FUSE( ) / / f echa o ar qui vo t xt MsgI nf o( " Pr ocesso f i nal i zada" ) Pgina 142 Programao ADVPL II e Guia de Referncia Ret ur n Ni l
Exerccio 15 Desenvolver uma rotina que realize a exportao dos itens marcados no cadastro de clientes para um arquivo TXT em um diretrio especificado pelo usurio.
Exerccio 16 Desenvolver uma rotina que realize a importao dos dados de clientes contidos em um arquivo TXT, sendo o mesmo selecionado pelo usurio.
11. Oficina de programao I
2.19 Interfaces com sintaxe clssica
A sintaxe convencional para definio de componentes visuais da linguagem ADVPL depende diretamente do include especificado no cabealho do fonte. Os dois includes disponveis para o ambiente ADVPL Protheus so:
E RWMAKE.CH: permite a utilizao da sintaxe CLIPPER na definio dos componentes visuais.
E PROTHEUS.CH: permite a utilizao da sintaxe ADVPL convencional, a qual um aprimoramento da sintaxe CLIPPER, com a incluso de novos atributos para os componentes visuais disponibilizados no ERP Protheus.
Para ilustrar a diferena na utilizao destes dois includes, seguem abaixo as diferentes definies para o componentes Dialog e MsDialog:
Exempl o 01 I ncl ude Rwmake. ch
#i ncl ude r wmake. ch
@0, 0 TO 400, 600 DI ALOG oDl g TI TLE " J anel a emsi nt axe Cl i pper " ACTI VATE DI ALOG oDl g CENTERED
Exempl o 02 I ncl ude Pr ot heus. ch Programao ADVPL II e Guia de Referncia Pgina 143
#i ncl ude pr ot heus. ch
DEFI NE MSDI ALOG oDl g TI TLE " J anel a emsi nt axe ADVPL " FROM 000, 000 TO 400, 600 PI XEL ACTI VATE MSDI ALOG oDl g CENTERED
Ambas as sintaxes produziro o mesmo efeito quando compiladas e executadas no ambiente Protheus. Mas, deve ser utilizada e a sintaxe ADVPL atravs do uso do include PROTHEUS.CH
Os componentes da interface visual que sero tratados neste tpico, utilizando a sintaxe clssica da linguagem ADVPL so:
Executar o fonte DIALOG_OBJETOS.PRW e avaliar a definio dos componentes utilizados utilizando a sintaxe clssica.
BUTTON()
Sintaxe @ nLinha,nColuna BUTTON cTexto SIZE nLargura,nAltura UNIDADE OF oObjetoRef ACTION AO Descrio Define o componente visual Button, que permite a incluso de botes de operao na tela da interface, os quais sero visualizados somente com um texto simples para sua identificao.
CHECKBOX()
Sintaxe @ nLinha,nColuna CHECKBOX oCheckBox VAR VARIAVEL PROMPT cTexto Pgina 144 Programao ADVPL II e Guia de Referncia WHEN WHEN UNIDADE OF oObjetoRef SIZE nLargura,nAltura MESSAGE cMensagem Descrio Define o componente visual CheckBox, o qual permite a utilizao da uma marca para habilitar ou no uma opo escolhida, sendo esta marca acompanhada de um texto explicativo. Difere do RadioMenu pois cada elemento do check nico, mas o Radio permite a utilizao de uma lista junto com um controle de seleo.
COMBOBOX()
Sintaxe @ nLinha,nColuna COMBOBOX VARIAVEL ITEMS AITENS SIZE nLargura,nAltura UNIDADE OF oObjetoRef Descrio Define o componente visual ComboBox, o qual permite seleo de um item dentro de uma lista de opes de textos simples no formato de um vetor.
FOLDER()
Sintaxe @ nLinha,nColuna FOLDER oFolder OF oObjetoRef PROMPT &cTexto1,,&cTextoX PIXEL SIZE nLargura,nAltura Descrio Define o componente Visual Folder, o qual permite a incluso de diversos Dialogs dentro de uma mesma interface visual. Um folder pode ser entendido como um array de dialogs, aonde cada painel recebe seus componentes e tem seus atributos definidos independentemente dos demais.
MSDIALOG()
Sintaxe DEFINE MSDIALOG oObjetoDLG TITLE cTitulo FROM nLinIni,nColIni TO nLiFim,nColFim OF oObjetoRef UNIDADE Descrio Define o componente MSDIALOG(), o qual utilizado como base para os demais componentes da interface visual, pois um componente MSDIALOG() uma janela da aplicao.
MSGET()
Sintaxe @ nLinha, nColuna MSGET VARIAVEL SIZE nLargura,nAltura UNIDADE OF oObjetoRef F3 cF3 VALID VALID WHEN WHEN PICTURE cPicture Descrio Define o componente visual MSGET, o qual utilizado para captura de informaes digitveis na tela da interface.
RADIO()
Sintaxe @ nLinha,nColuna RADIO oRadio VAR nRadio 3D SIZE nLargura,nAltura <ITEMS PROMPT> cItem1,cItem2,...,cItemX OF oObjetoRef UNIDADE ON CHANGE CHANGE ON CLICK CLICK Descrio Define o componente visual Radio, tambm conhecido como RadioMenu, o qual seleo de uma opo ou de mltiplas opes atravs de uma marca para os Programao ADVPL II e Guia de Referncia Pgina 145 itens exibidos de uma lista. Difere do componente CheckBox, pois cada elemento de check sempre nico, e o Radio pode conter um ou mais elementos.
Pgina 146 Programao ADVPL II e Guia de Referncia SAY()
Sintaxe @ nLinha, nColuna SAY cTexto SIZE nLargura,nAltura UNIDADE OF oObjetoRef Descrio Define o componente visual SAY, o qual utilizado para exibio de textos em uma tela de interface.
SBUTTON()
Sintaxe DEFINE SBUTTON FROM nLinha, nColuna TYPE N ACTION AO STATUS OF oObjetoRef Descrio Define o componente visual SButton, que permite a incluso de botes de operao na tela da interface, os quais sero visualizados, dependendo da interface do sistema ERP utilizada, somente com um texto simples para sua identificao, ou com uma imagem (BitMap) pr-definido.
2.20 Rguas de processamento
Os indicadores de progresso ou rguas de processamento disponveis na linguagem ADVPL que sero abordados neste material so:
Rgua de processamento simples, com apenas um indicador de progresso, utilizada no processamento de relatrios do padro SetPrint().
E Sintaxe: RptStatus(bAcao, cMensagem)
E Retorno: Nil
Programao ADVPL II e Guia de Referncia Pgina 147
E Parmetros:
bAcao Bloco de cdigo que especifica a ao que ser executada com o acompanhamento da rgua de processamento. cMensagem Mensagem que ser exibida na rgua de processamento durante a execuo. Aparncia
User Funct i on GRpt St at us( ) Local aSay : = {} Local aBut t on : = {} Local nOpc : = 0 Local cTi t ul o : = " Exempl o de Funes" Local cDesc1 : = " Est e pr ogr ama exempl i f i ca a ut i l i zao da f uno Pr ocessa( ) emconj unt o" Local cDesc2 : = " comas f unes de i ncr ement o Pr ocRegua( ) e I ncPr oc( ) " Pgina 148 Programao ADVPL II e Guia de Referncia
Pr i vat e cPer g : = " RPTSTA"
Cr i aSX1( ) Per gunt e( cPer g, . F. )
AADD( aSay, cDesc1 ) AADD( aSay, cDesc2 )
AADD( aBut t on, { 5, . T. , {| | Per gunt e( cPer g, . T. ) }} ) AADD( aBut t on, { 1, . T. , {| | nOpc : = 1, FechaBat ch( ) }} ) AADD( aBut t on, { 2, . T. , {| | FechaBat ch( ) }} )
For mBat ch( cTi t ul o, aSay, aBut t on )
I f nOpc <> 1 Ret ur n Ni l Endi f
Rpt St at us( {| l End| RunPr oc( @l End) }, " Aguar de. . . " , " Execut ando r ot i na. " , . T. )
St at i c Funct i on RunPr oc( l End) Local nCnt : = 0
dbSel ect Ar ea( " SX5" ) dbSet Or der ( 1) Programao ADVPL II e Guia de Referncia Pgina 149 dbSeek( xFi l i al ( " SX5" ) +mv_par 01, . T. )
Whi l e ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. X5_TABELA <= mv_par 02 nCnt ++ dbSki p( ) End
dbSeek( xFi l i al ( " SX5" ) +mv_par 01, . T. )
Set Regua( nCnt ) Whi l e ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. X5_TABELA <= mv_par 02 I ncRegua( ) I f l End MsgI nf o( cCancel , " Fi m" ) Exi t Endi f dbSki p( ) End Ret ur n . T.
SETREGUA()
A funo SetRegua() utilizada para definir o valor mximo da rgua de progresso criada atravs da funo RptStatus().
E Sintaxe: SetRegua(nMaxProc)
E Parmetros:
nMaxProc Varivel que indica o valor mximo de processamento (passos) que sero indicados pela rgua.
E Retorno:
Nenhum ()
Exemplo:
. . .
dbSel ect Ar ea( " SA1" ) dbGoTop( ) Set Regua( Last Rec( ) ) Whi l e ! Eof ( ) I ncRegua( ) Pgina 150 Programao ADVPL II e Guia de Referncia I f Li > 60 . . .
Programao ADVPL II e Guia de Referncia Pgina 151 INCREGUA()
A funo IncRegua() utilizada para incrementar valor na rgua de progresso criada atravs da funo RptStatus()
E Sintaxe: IncRegua(cMensagem)
E Parmetros:
cMensagem Mensagem que ser exibida e atualizada na rgua de processamento a cada execuo da funo IncRegua(), sendo que a taxa de atualizao da interface controlada pelo Binrio.
E Retorno:
Nenhum ()
Exemplo:
. . .
dbSel ect Ar ea( " SA1" ) dbGoTop( ) Set Regua( Last Rec( ) ) Whi l e ! Eof ( ) I ncRegua( Aval i ando cl i ent e: +SA1- >A1_COD) I f Li > 60
2.20.2 Processa()
Rgua de processamento simples, com apenas um indicador de progresso, utilizada no processamento de rotinas.
E Sintaxe: Processa(bAcao, cMensagem)
E Retorno: Nil
Pgina 152 Programao ADVPL II e Guia de Referncia
E Parmetros:
bAcao Bloco de cdigo que especifica a ao que ser executada com o acompanhamento da rgua de processamento. cMensagem Mensagem que ser exibida na rgua de processamento durante a execuo. Aparncia
User Funct i on GPr oces1( ) Local aSay : = {} Local aBut t on : = {} Local nOpc : = 0 Local cTi t ul o : = " Exempl o de Funes" Local cDesc1 : = " Est e pr ogr ama exempl i f i ca a ut i l i zao da f uno Pr ocessa( ) " Local cDesc2 : = " emconj unt o comas f unes de i ncr ement o Pr ocRegua( ) e" Programao ADVPL II e Guia de Referncia Pgina 153 Local cDesc3 : = " I ncPr oc( ) "
Exempl o ( cont i nuao) :
Pr i vat e cPer g : = " PROCES"
Cr i aSX1( ) Per gunt e( cPer g, . F. )
AADD( aSay, cDesc1 ) AADD( aSay, cDesc2 )
AADD( aBut t on, { 5, . T. , {| | Per gunt e( cPer g, . T. ) }} ) AADD( aBut t on, { 1, . T. , {| | nOpc : = 1, FechaBat ch( ) }} ) AADD( aBut t on, { 2, . T. , {| | FechaBat ch( ) }} )
For mBat ch( cTi t ul o, aSay, aBut t on )
I f nOpc <> 1 Ret ur n Ni l Endi f
Pr ocessa( {| l End| RunPr oc( @l End) }, " Aguar de. . . " , " Execut ando r ot i na. " , . T. )
St at i c Funct i on RunPr oc( l End) Local nCnt : = 0
dbSel ect Ar ea( " SX5" ) Pgina 154 Programao ADVPL II e Guia de Referncia dbSet Or der ( 1) dbSeek( xFi l i al ( " SX5" ) +mv_par 01, . T. )
dbEval ( {| x| nCnt ++ }, , {| | X5_FI LI AL==xFi l i al ( " SX5" ) . And. X5_TABELA<=mv_par 02})
dbSeek( xFi l i al ( " SX5" ) +mv_par 01, . T. )
Pr ocRegua( nCnt ) Whi l e ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. X5_TABELA <= mv_par 02 I ncPr oc( " Pr ocessando t abel a: " +SX5- >X5_CHAVE) I f l End MsgI nf o( cCancel a, " Fi m" ) Exi t Endi f dbSki p( ) End Ret ur n . T.
SETPROC()
A funo SetProc() utilizada para definir o valor mximo da rgua de progresso criada atravs da funo Processa().
E Sintaxe: Processa(nMaxProc)
E Parmetros:
nMaxProc Varivel que indica o valor mximo de processamento (passos) que sero indicados pela rgua.
E Retorno:
Nenhum ()
Exemplo: . . . dbSel ect Ar ea( " SA1" ) dbGoTop( ) Set Pr oc( Last Rec( ) ) Whi l e ! Eof ( ) I ncPr oc( ) I f Li > 60 . . .
Programao ADVPL II e Guia de Referncia Pgina 155 INCPROC()
A funo IncProc() utilizada para incrementar valor na rgua de progresso criada atravs da funo Processa()
E Sintaxe: IncProc(cMensagem)
E Parmetros:
cMensagem Mensagem que ser exibida e atualizada na rgua de processamento a cada execuo da funo IncProc(), sendo que a taxa de atualizao da interface controlada pelo Binrio.
E Retorno:
Nenhum ()
Exemplo: . . . dbSel ect Ar ea( " SA1" ) dbGoTop( ) Set Pr oc( Last Rec( ) ) Whi l e ! Eof ( ) I ncPr oc( Aval i ando cl i ent e: +SA1- >A1_COD) I f Li > 60 . . .
2.20.3 MsNewProcess().
Rgua de processamento dupla, possuindo dois indicadores de progresso independentes, utilizada no processamento de rotinas.
E Sintaxe: MsNewProcess():New(bAcao, cMensagem)
E Retorno: oProcess objeto do tipo MsNewProcess()
E Parmetros:
bAcao Bloco de cdigo que especifica a ao que ser executada com o acompanhamento da rgua de processamento. cMensagem Mensagem que ser exibida na rgua de processamento durante a execuo. Aparncia
Pgina 156 Programao ADVPL II e Guia de Referncia
Programao ADVPL II e Guia de Referncia Pgina 157
E Mtodos:
Activate() Inicia a execuo do objeto MsNewProcess instanciado. SetRegua1() Define a quantidade de informaes que sero demonstradas pelo indicador de progresso superior. Parmetro: nMaxProc IncRegua1() Incrementa em uma unidade o indicador de progresso superior, o qual ir demonstrar a evoluo do processamento de acordo com a quantidade definida pelo mtodo SetRegua1(). Parmetro: cMensagem SetRegua2() Define a quantidade de informaes que sero demonstradas pelo indicador de progresso inferior. Parmetro: nMaxProc IncRegua2() Incrementa em uma unidade o indicador de progresso inferior, o qual ir demonstrar a evoluo do processamento de acordo com a quantidade definida pelo mtodo SetRegua2(). Parmetro: cMensagem
dbSel ect Ar ea( " SX5" ) cFi l i al SX5 : = xFi l i al ( " SX5" ) dbSet Or der ( 1) For i : =1 To Len( aTabel a) dbSeek( cFi l i al SX5+aTabel a[ i , 1] ) Whi l e ! Eof ( ) . And. X5_FI LI AL+X5_TABELA == cFi l i al SX5+aTabel a[ i , 1] I f l End Exi t Endi f nCnt ++ dbSki p( ) End aTabel a[ i , 2] : = nCnt nCnt : = 0 Next i oObj : Set Regua1( Len( aTabel a) ) For i : =1 To Len( aTabel a) I f l End Exi t Endi f oObj : I ncRegua1( " Lendo Tabel a: " +aTabel a[ i , 1] ) dbSel ect Ar ea( " SX5" ) dbSeek( cFi l i al SX5+aTabel a[ i , 1] ) oObj : Set Regua2( aTabel a[ i , 2] ) Programao ADVPL II e Guia de Referncia Pgina 159 Whi l e ! Eof ( ) . And. X5_FI LI AL+X5_TABELA == cFi l i al SX5+aTabel a[ i , 1] oObj : I ncRegua2( " Lendo chave: " +X5_CHAVE) I f l End Exi t Endi f dbSki p( ) End Next i Ret ur n
2.20.4 MsAguarde().
Indicador de processamento sem incremento.
E Sintaxe: Processa(bAcao, cMensagem, cTitulo)
E Retorno: Nil
E Parmetros:
bAcao Bloco de cdigo que especifica a ao que ser executada com o acompanhamento da rgua de processamento. cMensagem Mensagem que ser exibida na rgua de processamento durante a execuo. cTitulo Ttulo da janela da rgua de processamento. Aparncia
dbSel ect Ar ea( " SX5" ) dbSet Or der ( 1) dbGoTop( )
Whi l e ! Eof ( ) I f l End MsgI nf o( cCancel , " Fi m" ) Exi t Endi f MsPr ocTxt ( " Tabel a: " +SX5- >X5_TABELA+" Chave: " +SX5- >X5_CHAVE) dbSki p( ) End
RETURN Programao ADVPL II e Guia de Referncia Pgina 161
2.20.5 MsgRun().
Indicador de processamento sem incremento.
E Sintaxe: Processa(cMensagem, cTitulo, bAcao)
E Retorno: Nil Pgina 162 Programao ADVPL II e Guia de Referncia
E Parmetros:
cMensagem Mensagem que ser exibida na rgua de processamento durante a execuo. cTitulo Ttulo da janela da rgua de processamento. bAcao Bloco de cdigo que especifica a ao que ser executada com o acompanhamento da rgua de processamento. Aparncia
MsgRun( " Lendo ar qui vo, aguar de. . . " , " T t ul o opci onal " , {| | dbEval ( {| x| nCnt ++}) })
MsgI nf o( " Uf a! ! ! , l i " +Al l Tr i m( St r ( nCnt ) ) +" r egi st r os" , FunName( ) )
RETURN Programao ADVPL II e Guia de Referncia Pgina 163
Pgina 164 Programao ADVPL II e Guia de Referncia
2.21 ListBox()
A sintaxe clssica da linguagem ADVPL permite que o componente visual ListBox implemente dois tipos distintos de objetos:
E Lista simples: lista de apenas uma coluna no formato de um vetor, a qual no necessita da especificao de um cabealho.
E Lista com colunas: lista com diversas colunas que necessita de um cabealho no formato de um aHeader (array de cabealho).
2.21.1 ListBox simples
E Sintaxe:
@ nLinha,nColuna LISTBOX oListbox VAR nLista ITEMS aLista SIZE nLargura,nAltura OF oObjetoRef UNIDADE ON CHANGE CHANGE
E Parmetros:
nLinha,nColuna Posio do objeto ListBox em funo da janela em que ele ser definido. oListBox Objeto ListBox que ser criado. nLista Varivel numrica que contm o nmero do item selecionado no ListBox. aLista Vetor simples contendo as strings que sero exibidas no ListBox. nLargura,nAltura Dimenses do objeto ListBox. oObjetoRef Objeto dialog no qual o componente ser definido. UNIDADE Unidade de medida das dimenses: PIXEL. CHANGE Funo ou lista de expresses que ser executada na seleo de um item do ListBox.
Programao ADVPL II e Guia de Referncia Pgina 165
E Aparncia:
Exemplo: LISTBOX como lista simples
#i ncl ude " pr ot heus. ch"
/ */ +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Funo | LI STBOXI TE | Aut or | ROBSON LUI Z | Dat a | | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Descr i o | Pr ogr ama que demonst r a a ut i l i zao do LI STBOX( ) como l i st a | | | si mpl es. | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Uso | Cur so ADVPL | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / */ User Funct i on Li st BoxI t e( )
Local aVet or : = {} Local oDl g : = Ni l Local oLbx : = Ni l Local cTi t ul o : = " Consul t a Tabel a" Local nChave : = 0 Local cChave : = " "
dbSel ect Ar ea( " SX5" ) Pgina 166 Programao ADVPL II e Guia de Referncia dbSet Or der ( 1) dbSeek( xFi l i al ( " SX5" ) )
Cur sor Wai t ( )
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Car r ega o vet or conf or me a condi o | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Whi l e ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. X5_TABELA==" 00" AADD( aVet or , Tr i m( X5_CHAVE) +" - " +Capi t al ( Tr i m( X5_DESCRI ) ) ) dbSki p( ) End
Cur sor Ar r ow( )
I f Len( aVet or ) == 0 Avi so( cTi t ul o, " No exi st e dados a consul t ar " , {" Ok" } ) Ret ur n Endi f
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Mont a a t el a par a usur i o vi sual i zar consul t a | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 0, 0 TO 240, 500 PI XEL @10, 10 LI STBOX oLbx VAR nChave I TEMS aVet or SI ZE 230, 95 OF oDl g PI XEL oLbx: bChange : = {| | cChave : = SubSt r ( aVet or [ nChave] , 1, 2) } DEFI NE SBUTTON FROM 107, 183 TYPE 14 ACTI ON LoadTabl e( cChave) ENABLE OF oDl g DEFI NE SBUTTON FROM 107, 213 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g
ACTI VATE MSDI ALOG oDl g CENTER
Ret ur n
Exemplo: LISTBOX como lista simples funes acessrias
dbEval ( {| | AADD( aTabel a, {X5_CHAVE, Capi t al ( X5_DESCRI ) }) }, , {| | X5_TABELA==cTabel a})
I f Len( aTabel a) ==0 Avi so( " FI M" , " Necessr i o sel eci onar umi t em" , {" Ok" } ) Ret ur n Endi f
DEFI NE MSDI ALOG oDl g TI TLE " Dados da t abel a sel eci onada" FROM 300, 400 TO 540, 900 PI XEL @10, 10 LI STBOX oLbx FI ELDS HEADER " Tabel a" , " Descr i o" SI ZE 230, 095 OF oDl g PI XEL oLbx: Set Ar r ay( aTabel a ) oLbx: bLi ne : = {| | {aTabel a[ oLbx: nAt , 1] , aTabel a[ oLbx: nAt , 2] } } DEFI NE SBUTTON FROM 107, 213 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g ACTI VATE MSDI ALOG oDl g
RETURN
2.21.2 ListBox mltiplas colunas
E Sintaxe:
Pgina 168 Programao ADVPL II e Guia de Referncia @ nLinha,nColuna LISTBOX oListbox FIELDS HEADER Header1, , HeaderX SIZE nLargura,nAltura OF oObjetoRef UNIDADE
Programao ADVPL II e Guia de Referncia Pgina 169
E Parmetros:
nLinha,nColuna Posio do objeto ListBox em funo da janela em que ele ser definido. oListBox Objeto ListBox que ser criado. nLista Varivel numrica que contm o nmero do item selecionado no ListBox. Header1,...,HeaderX Strings identificando os ttulos das colunas do Grid. nLargura,nAltura Dimenses do objeto ListBox. oObjetoRef Objeto dialog no qual o componente ser definido. UNIDADE Unidade de medida das dimenses: PIXEL. CHANGE Funo ou lista de expresses que ser executada na seleo de um item do ListBox.
E Mtodos:
SetArray() Mtodo o objeto ListBox que define qual array contm os dados que sero exibidos no grid.
E Atributos:
bLine Atributo do objeto ListBox que vincula cada linha,coluna do array, com cada cabealho do grid.
E Aparncia:
Pgina 170 Programao ADVPL II e Guia de Referncia Exemplo: LISTBOX com grid
Local aVet or : = {} Local oDl g Local oLbx Local cTi t ul o : = " Cadast r o de Bancos" Local cFi l SA6
dbSel ect Ar ea( " SA6" ) dbSet Or der ( 1) cFi l SA6 : = xFi l i al ( " SA6" ) dbSeek( cFi l SA6)
/ / Car r ega o vet or conf or me a condi o. Whi l e ! Eof ( ) . And. A6_FI LI AL == cFi l SA6 AADD( aVet or , { A6_COD, A6_AGENCI A, A6_NUMCON, A6_NOME, A6_NREDUZ, A6_BAI RRO, A6_MUN } ) dbSki p( ) End
/ / Se no houver dados no vet or , avi sar usur i o e abandonar r ot i na. I f Len( aVet or ) == 0 Avi so( cTi t ul o, " No exi st e dados a consul t ar " , {" Ok" } ) Ret ur n Endi f
Programao ADVPL II e Guia de Referncia Pgina 171 / / Mont a a t el a par a usur i o vi sual i zar consul t a. DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 0, 0 TO 240, 500 PI XEL
/ / Pr i mei r a opo par a mont ar o l i st box. @10, 10 LI STBOX oLbx FI ELDS HEADER ; " Banco" , " Agenci a" , " C/ C" , " Nome Banco" , " Fant asi a" , " Bai r r o" , " Muni c pi o" ; SI ZE 230, 95 OF oDl g PI XEL
oLbx: Set Ar r ay( aVet or ) oLbx: bLi ne : = {| | {aVet or [ oLbx: nAt , 1] , ; aVet or [ oLbx: nAt , 2] , ; aVet or [ oLbx: nAt , 3] , ; aVet or [ oLbx: nAt , 4] , ; aVet or [ oLbx: nAt , 5] , ; aVet or [ oLbx: nAt , 6] , ; aVet or [ oLbx: nAt , 7] }}
Exempl o ( cont i nuao) :
/ / Segunda opo par a mont a o l i st box / * oLbx : = TWBr owse( ) : New( 10, 10, 230, 95, , aCabecal ho, , oDl g, , , , , , , , , , , , . F. , , . T. , , . F. , , , ) oLbx: Set Ar r ay( aVet or ) oLbx: bLi ne : = {| | aEval ( aVet or [ oLbx: nAt ] , {| z, w| aVet or [ oLbx: nAt , w] } ) } */
DEFI NE SBUTTON FROM 107, 213 TYPE 1 ACTI ON oDl g: End( ) ENABLE OF oDl g ACTI VATE MSDI ALOG oDl g CENTER
Ret ur n 2.22 ScrollBox()
O ScrollBox o objeto utilizado para permitir que um dialog exiba barras de rolagem verticais e Horizontais. Algumas aplicaes com objetos definem automaticamente o ScrollBox, tais como:
E Enchoice() ou MsMGet() E NewGetDados() E ListBox()
Quando definido um objeto ScrollBox, os demais componentes da janela devero referenciar este objeto e no mais o objeto dialog.
Desta forma o ScrollBox atribudo a um objeto dialog, e os componentes ao ScrollBox. Pgina 172 Programao ADVPL II e Guia de Referncia
O MsDialog() ScrollBox() O ScrollBox() Componentes Visuais Programao ADVPL II e Guia de Referncia Pgina 173
nLinha,nColuna Posio do objeto ScrollBox em funo da janela em que ele ser definido. oScrollBox Objeto ScrollBox que ser criado. HORIZONTAL Parmetro que quando definido habilita a rgua de rolagem horizontal. VERTICAL Parmetro que quando definido habilita a rgua de rolagem vertical. nLargura,nAltura Dimenses do objeto ScrollBox. oObjetoRef Objeto dialog no qual o componente ser definido. BORDER
Parmetro que quando definido habilita a exibio de uma borda de delimitao do ScrollBox em relao a outros objetos.
E Aparncia:
Pgina 174 Programao ADVPL II e Guia de Referncia Exemplo: Utilizao de mltiplos ScrollBoxes
LOCAL oDl g : = NI L LOCAL oScr ol l : = NI L LOCAL oLbx1 : = NI L LOCAL oLbx2 : = NI L LOCAL bGet : = NI L LOCAL oGet : = NI L LOCAL aAI I PM : = {} LOCAL aTi t ul o : = {} LOCAL nTop : = 5 LOCAL nWi dt h : = 0 LOCAL cGet : = " " LOCAL cPi ct : = " " LOCAL cVar : = " " LOCAL n : = 0
PRI VATE cTi t ul o : = " Consul t a Par cel ament o" PRI VATE aSay : = {} PRI VATE cPr ocesso, cPr ef i xo, cTi po, cCl i ent e, cLoj a, cNome, cCGC PRI VATE dDat a, nTot al , nUFESP, cSt at us, cCond
cPr ocesso : = " P00001" cPr ef i xo : = " UNI " cTi po : = " MAN" cCl i ent e : = " 000001" Programao ADVPL II e Guia de Referncia Pgina 175 cLoj a : = " 01" cNome : = " J OSE DA SI LVA SANTOS SOARES" cCGC : = " 00. 000. 000/ 0001- 91" dDat a : = " 26/ 03/ 03" nTot al : = 5922. 00 nUFESP : = 1000. 00 cSt at us : = " Z" cCond : = " 001"
/ / Vet or par a Li st Box AADD( aAI I PM, {" 1234" , " DCD9815" , " 26/ 03/ 03" }) AADD( aAI I PM, {" 1234" , " DCD9815" , " 26/ 03/ 03" }) AADD( aAI I PM, {" 1234" , " DCD9815" , " 26/ 03/ 03" })
/ / Vet or par a Li st Box AADD( aTi t ul o, {" A" , " 26/ 03/ 03" , " 26/ 03/ 03" , " 1. 974, 00" , " 100, 00" }) AADD( aTi t ul o, {" A" , " 26/ 03/ 03" , " 26/ 03/ 03" , " 1. 974, 00" , " 100, 00" }) AADD( aTi t ul o, {" A" , " 26/ 03/ 03" , " 26/ 03/ 03" , " 1. 974, 00" , " 100, 00" })
DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 122, 0 TO 432, 600 OF oDl g PI XEL @013, 002 TO 154, 192 LABEL " Par cel ament o" OF oDl g PI XEL @013, 195 TO 082, 298 LABEL " T t ul os" OF oDl g PI XEL @083, 195 TO 154, 298 LABEL " AI I PM" OF oDl g PI XEL
/ / scr ol l box Pgina 176 Programao ADVPL II e Guia de Referncia @019, 006 SCROLLBOX oScr ol l HORI ZONTAL VERTI CAL SI ZE 131, 182 OF oDl g BORDER For n: =1 TO Len( aSay)
TSay( ) : New( nTop, 5, bGet , oScr ol l , , , . F. , . F. , . F. , . T. , , , ; Get Text Wi dt h( 0, Tr i m( aSay[ n] [ 1] ) ) , 15, ; . F. , . F. , . F. , . F. , . F. ) oGet : =TGet ( ) : New( nTop- 2, 40, &cGet , oScr ol l , , 7, cPi ct , , , , , . F. , , . T. , ; , . F. , , . F. , . F. , , . T. , . F. , , ( cVar ) , , , , . T. ) nTop+=11 Next n
/ / l i st box t t ul os @019, 199 LI STBOX oLbx1 FI ELDS HEADER ; " Par cel a" , " Venct o" , " Venct o. Real " , " Val or R$" , " Qt d. UFESP" ; COLSI ZES 21, 24, 33, 63, 100; SI ZE 095, 059 OF oDl g PI XEL oLbx1: Set Ar r ay( aTi t ul o ) oLbx1: bLi ne : = {| | {aTi t ul o[ oLbx1: nAt , 1] , aTi t ul o[ oLbx1: nAt , 2] , ; aTi t ul o[ oLbx1: nAt , 3] , aTi t ul o[ oLbx1: nAt , 4] , aTi t ul o[ oLbx1: nAt , 5] }}
/ / l i st box ai i pm @089, 199 LI STBOX oLbx2 FI ELDS HEADER " AI I PM" , " Pl aca" , " Dat a Mul t a" ; COLSI ZES 24, 21, 30 SI ZE 095, 061 OF oDl g PI XEL oLbx2: Set Ar r ay( aAI I PM ) oLbx2: bLi ne : = {| | {aAI I PM[ oLbx2: nAt , 1] , aAI I PM[ oLbx2: nAt , 2] , aAI I PM[ oLbx2: nAt , 3] }}
ACTI VATE MSDI ALOG oDl g CENTER ON I NI T Enchoi ceBar ( oDl g, {| | oDl g: End( ) }, {| | oDl g: End( ) })
RETURN
2.23 ParamBox()
Implementa uma tela de parmetros, que no necessita da criao de um grupo de perguntas no SX1, e com funcionalidades que a Pergunte() no disponibiliza, tais como CheckBox e RadioButtons.
Cada componente da ParamBox ser associado a um parmetro Private denominado MV_PARxx, de acordo com a ordem do componente na tela. Os parmetros da Programao ADVPL II e Guia de Referncia Pgina 177 ParamBox podem ser utilizados de forma independente em uma rotina especfica, ou complementando opes de uma rotina padro.
Cuidados
A PARAMBOX define os parmetros seguindo o princpio das variveis MV_PARxx. Caso ela seja utilizada em uma rotina em conjunto com parmetros padres (SX1 + Pergunte()) necessrio salvar os parmetros padres, chamar a Parambox(), salvar o retorno da Parambox() em variveis Private especficas (MVPARBOXxx) e depois restaurar os parmetros padres, conforme o exemplo desta documentao.
O objeto COMBO() da PARAMBOX() possui um problema em seu retorno: Caso o combo no seja selecionado, ele manter seu contedo como numrico, caso seja, ele receber o texto da opo e no o nmero da opo. O exemplo desta documentao ilustra o tratamento de cdigo necessrio para proteger a aplicao.
Ao utilizar a ParamBox em uma funo que tambm utilize parmetros definidos pela funo Pergunte() deve-se:
E Salvar e restaurar os MV_PARs da Pergunte() E Definir variveis Private prprias para a ParamBox, as quais iro armazenar o contedo das MV_PARs que esta retorna.
E Retorno: lOK indica se a tela de parmetros foi cancelada ou confirmada
E Parmetros:
aParamBox Array de parmetros de acordo com a regra da ParamBox. cTitulo Titulo da janela de parmetros. aRet Array que ser passado por referncia e retornado com o contedo de cada parmetro. bOk Bloco de cdigo para validao do OK da tela de parmetros aButtons Array contendo a regra para adio de novos botes (alm do OK e Cancelar) // AADD(aButtons,{nType,bAction,cTexto}) lCentered Se a tela ser exibida centralizada, quando a mesma no estiver vinculada a outra janela. nPosx Posio inicial -> linha (Linha final: nPosX+274). nPosy Posio inicial -> coluna (Coluna final: nPosY+445). oMainDlg Caso o ParamBox deva ser vinculado a uma outra tela. Pgina 178 Programao ADVPL II e Guia de Referncia cLoad Nome do arquivo aonde as respostas do usurio sero salvas / lidas. lCanSave Se as respostas para as perguntas podem ser salvas. lUserSave Se o usurio pode salvar sua prpria configurao. E Aparncia: Programao ADVPL II e Guia de Referncia Pgina 179
E Regras do array aParamBox:
[1] Tipo do parmetro: Para cada tipo de parmetro as demais posies do array variam de contedo conforme abaixo:
1 - MsGet [2] : Descrio [3] : String contendo o inicializador do campo [4] : String contendo a Picture do campo [5] : String contendo a validao [6] : Consulta F3 [7] : String contendo a validao When [8] : Tamanho do MsGet [9] : Flag .T./.F. Parmetro Obrigatrio?
2 - Combo [2] : Descrio [3] : Numrico contendo a opo inicial do combo [4] : Array contendo as opes do Combo [5] : Tamanho do Combo Pgina 180 Programao ADVPL II e Guia de Referncia [6] : Validao [7] : Flag .T./.F. Parmetro Obrigatrio?
3 - Radio [2] : Descrio [3] : Numrico contendo a opo inicial do Rdio [4] : Array contendo as opes do Rdio [5] : Tamanho do Rdio [6] : Validao [7] : Flag .T./.F. Parmetro Obrigatrio?
4 - CheckBox ( Com Say ) [2] : Descrio [3] : Indicador Lgico contendo o inicial do Check [4] : Texto do CheckBox [5] : Tamanho do Rdio [6] : Validao [7] : Flag .T./.F. Parmetro Obrigatrio?
5 - CheckBox ( linha inteira ) [2] : Descrio [3] : Indicador Lgico contendo o inicial do Check [4] : Tamanho do Rdio [5] : Validao [6] : Flag .T./.F. Parmetro Obrigatrio?
6 - File [2] : Descrio [3] : String contendo o inicializador do campo [4] : String contendo a Picture do campo [5] : String contendo a validao [6] : String contendo a validao When [7] : Tamanho do MsGet [8] : Flag .T./.F. Parmetro Obrigatrio ? [9] : Texto contendo os tipos de arquivo Ex.: "Arquivos .CSV |*.CSV" [10]: Diretrio inicial do CGETFILE() [11]: Parmetros do CGETFILE()
7 - Montagem de expresso de filtro [2] : Descrio [3] : Alias da tabela [4] : Filtro inicial [5] : Opcional - Clusula When Boto Editar Filtro
8 - MsGet Password [2] : Descrio Programao ADVPL II e Guia de Referncia Pgina 181 [3] : String contendo o inicializador do campo [4] : String contendo a Picture do campo [5] : String contendo a validao [6] : Consulta F3 [7] : String contendo a validao When [8] : Tamanho do MsGet [9] : Flag .T./.F. Parmetro Obrigatrio?
9 - MsGet Say [2] : String Contendo o Texto a ser apresentado [3] : Tamanho da String [4] : Altura da String [5] : Negrito (lgico)
Exemplo: Utilizao da ParamBox()
#i ncl ude pr ot heus. ch
/ */ +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Funo | xPar amBox | Aut or | ROBSON LUI Z | Dat a | | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Descr i o | Pr ogr ama que demonst r a a ut i l i zao da PARAMBOX como | | | f or ma al t er nat i va de di sponi bi l i zar par met r os emum | | | pr ocessament o. | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | Uso | Cur so ADVPL | +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / */
User Funct i on xPar amBox( )
Local aRet : = {} Local aPar amBox : = {} Local aCombo : = {" J anei r o" , " Fever ei r o" , " Mar o" , " Abr i l " , " Mai o" , " J unho" , " J ul ho" , " Agost o" , " Set embr o" , " Out ubr o" , " Novembr o" , " Dezembr o" } Local i : = 0 Pr i vat e cCadast r o : = " xPar ambox"
Pgina 182 Programao ADVPL II e Guia de Referncia AADD( aPar amBox, {1, " Pr odut o" , Space( 15) , " " , " " , " SB1" , " " , 0, . F. }) AADD( aPar amBox, {2, " Ti po de cl i ent e" , 1, aCombo, 50, " " , . F. })
AADD( aPar amBox, {3, " Most r a del et ados" , I I F( Set ( _SET_DELETED) , 1, 2) , {" Si m" , " No" }, 50, " " , . F. })
AADD( aPar amBox, {4, " Mar ca t odos ?" , . F. , " Mar que t odos se necessr i o f or . " , 50, " " , . F. })
AADD( aPar amBox, {5, " Mar ca t odos ?" , . F. , 50, " " , . F. })
AADD( aPar amBox, {6, " Qual ar qui vo" , Space( 50) , " " , " " , " " , 50, . F. , ; " Ar qui vo . DBF | *. DBF" })
AADD( aPar amBox, {7, " Mont e o f i l t r o" , " SX5" , " X5_FI LI AL==xFi l i al ( ' SX5' ) " }) AADD( aPar amBox, {8, " Di gi t e a senha" , Space( 15) , " " , " " , " " , " " , 80, . F. })
I f Par amBox( aPar amBox, " Test e Par met r os. . . " , @aRet ) For i : =1 To Len( aRet ) MsgI nf o( aRet [ i ] , " Opo escol hi da" ) Next Endi f
Ret ur n
Exemplo: Protegendo os parmetros MV_PARs da Pergunte() em uso.
Local aPar amBox : = {} Local cTi t ul o : = " Tr ansf er nci a par a Oper ao" Local bOk : = {| | . T. } Local aBut t ons : = {}; Local aRet : = {} Local nPosx; Local nPosy; Local nX : = 0 Local cLoad : = " " Local l Cent er ed : = . T. ; Local l CanSave : = . F. ; Local l User Save : = . F. Local aPar amAt u : = Ar r ay( 4)
/ / Sal va as per gunt as padr es ant es da chamada da Par amBox For nX : = 1 t o Len( aPar amAt u) aPar amAt u [ nX] : = &( " Mv_Par " +St r Zer o( nX, 2) ) Next nX
AADD( aPar amBox, {2, " At ual i za t axa de depr eci ao?" , 2, {" Si m" , " No" }, 100, ; " Al l waysTr ue( ) " , . T. })
Par amBox( aPar amBox, cTi t ul o, aRet , bOk, aBut t ons, l Cent er ed, nPosx, nPosy, / *oMai nDl g*/ , ; cLoad, l CanSave, l User Save)
I F Val Type( aRet ) == " A" . AND. Len( aRet ) == Len( aPar amBox) For nX : = 1 t o Len( aPar amBox) I f aPar amBox[ nX] [ 1] == 1 &( " MvPar Box" +St r Zer o( nX, 2) ) : = aRet [ nX] El seI f aPar amBox[ nX] [ 1] == 2 . AND. Val Type( aRet [ nX] ) == " C" &( " MvPar Box" +St r Zer o( nX, 2) ) : = aScan( aPar amBox[ nX] [ 4] , ; {| x| Al l t r i m( x) == aRet [ nX] }) El seI f aPar amBox[ nX] [ 1] == 2 . AND. Val Type( aRet [ nX] ) == " N" &( " MvPar Box" +St r Zer o( nX, 2) ) : = aRet [ nX] Endi f Next nX ENDI F
/ / Rest aur a as per gunt as padr es apos a chamada da Par amBox For nX : = 1 t o Len( aPar amAt u) &( " Mv_Par " +St r Zer o( nX, 2) ) : = aPar amAt u[ nX] Next nX
Ret ur n
Pgina 184 Programao ADVPL II e Guia de Referncia MDULO 05: INTRODUO A ORIENTAO OBJETOS
12. Conceitos de orientao objetos O termo orientao a objetos pressupe uma organizao de software em termos de coleo de objetos discretos incorporando estrutura e comportamento prprios. Esta abordagem de organizao essencialmente diferente do desenvolvimento tradicional de software, onde estruturas de dados e rotinas so desenvolvidas de forma apenas fracamente acopladas.
Neste tpico sero os conceitos de programao orientada a objetos listados abaixo. Esta breve viso geral do paradigma permitir entender melhor os conceitos associados programao orientada a objetos e, em particular, s construes implementadas atravs da linguagem ADVPL.
E Objetos E Herana E Atributos E Mtodos E Classes E Abstrao E Generalizao E Encapsulamento E Polimorfismo
2.24 Definies
Objeto
Um objeto uma entidade do mundo real que tem uma identidade. Objetos podem representar entidades concretas (um arquivo no meu computador, uma bicicleta) ou entidades conceituais (uma estratgia de jogo, uma poltica de escalonamento em um sistema operacional). Cada objeto ter sua identidade significa que dois objetos so distintos mesmo que eles apresentem exatamente as mesmas caractersticas.
Embora objetos tenham existncia prpria no mundo real, em termos de linguagem de programao, um objeto necessita um mecanismo de identificao. Esta identificao de objeto deve ser nica, uniforme e independente do contedo do objeto. Este um Programao ADVPL II e Guia de Referncia Pgina 185 dos mecanismos que permite a criao de colees de objetos, as quais so tambm objetos em si.
A estrutura de um objeto representada em termos de atributos. O comportamento de um objeto representado pelo conjunto de operaes que podem ser executadas sobre o objeto.
Classe
Objetos com a mesma estrutura e o mesmo comportamento so agrupados em classes. Uma classe uma abstrao que descreve propriedades importantes para uma aplicao e simplesmente ignora o resto.
Cada classe descreve um conjunto (possivelmente infinito) de objetos individuais. Cada objeto dito ser uma instncia de uma classe. Assim, cada instncia de uma classe tem seus prprios valores para cada atributo, mas dividem os nomes dos atributos e mtodos com as outras instncias da classe. Implicitamente, cada objeto contm uma referncia para sua prpria classe, em outras palavras: ele sabe o que ele .
Figura: Representao de uma classe de objetos
Pgina 186 Programao ADVPL II e Guia de Referncia
Figura: Representao de um objeto instanciado de uma classe
Polimorfismo
Polimorfismo significa que a mesma operao pode se comportar de forma diferente em classes diferentes. Por exemplo, a operao move quando aplicada a uma janela de um sistema de interfaces tem um comportamento distinto do que quando aplicada a uma pea de um jogo de xadrez. Um mtodo uma implementao especfica de uma operao para uma certa classe.
Programao ADVPL II e Guia de Referncia Pgina 187 Polimorfismo tambm implica que uma operao de uma mesma classe pode ser implementada por mais de um mtodo. O usurio no precisa saber quantas implementaes existem para uma operao, ou explicitar qual mtodo deve ser utilizado: a linguagem de programao deve ser capaz de selecionar o mtodo correto a partir do nome da operao, classe do objeto e argumentos para a operao. Desta forma, novas classes podem ser adicionadas sem necessidade de modificao de cdigo j existente, pois cada classe apenas define os seus mtodos e atributos.
No mundo real, alguns objetos e classes podem ser descritos como casos especiais, ou especializaes, de outros objetos e classes. Por exemplo, a classe de computadores pessoais com processador da linha 80x86 uma especializao de computadores pessoais, que por sua vez uma especializao de computadores. No desejvel que tudo que j foi descrito para computadores tenha de ser repetido para computadores pessoais ou para computadores pessoais com processador da linha 80x86.
Herana
Herana o mecanismo do paradigma de orientao a objetos que permite compartilhar atributos e operaes entre classes baseada em um relacionamento hierrquico. Uma classe pode ser definida de forma genrica e depois refinada sucessivamente em termos de subclasses ou classes derivadas. Cada subclasse incorpora, or herda, todas as propriedades de sua superclasse (ou classe base) e adiciona suas propriedades nicas e particulares. As propriedades da classe base no precisam ser repetidas em cada classe derivada. Esta capacidade de fatorar as propriedades comuns de diversas classes em uma superclasse pode reduzir significativamente a repetio de cdigo em um projeto ou programa, sendo uma das principais vantagens da abordagem de orientao a objetos.
2.25 Conceitos Bsicos
A abordagem de orientao a objetos favorece a aplicao de diversos conceitos considerados fundamentais para o desenvolvimento de bons programas, tais como abstrao e encapsulamento.
Tais conceitos no so exclusivos desta abordagem, mas so suportados de forma melhor no desenvolvimento orientado a objetos do que em outras metodologias.
Abstrao
Abstrao consiste de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar propriedades acidentais. Em termos de desenvolvimento de sistemas, isto significa concentrar-se no que um objeto e faz antes de se decidir como ele ser implementado. O uso de abstrao preserva a liberdade para tomar decises de desenvolvimento ou de implementao apenas quando h um melhor entendimento do problema a ser resolvido.
Pgina 188 Programao ADVPL II e Guia de Referncia Muitas linguagens de programao modernas suportam o conceito de abstrao de dados; porm, o uso de abstrao juntamente com polimorfismo e herana, como suportado em orientao a objetos, um mecanismo muito mais poderoso.
O uso apropriado de abstrao permite que um mesmo modelo conceitual (orientao a objetos) seja utilizado para todas as fases de desenvolvimento de um sistema, desde sua anlise at sua documentao.
Encapsulamento
Encapsulamento, tambm referido como esconder informao, consiste em separar os aspectos externos de um objeto, os quais so acessveis a outros objetos, dos detalhes internos de implementao do objeto, os quais permanecem escondidos dos outros objetos. O uso de encapsulamento evita que um programa torne-se to interdependente que uma pequena mudana tenha grandes efeitos colaterais.
O uso de encapsulamento permite que a implementao de um objeto possa ser modificada sem afetar as aplicaes que usam este objeto. Motivos para modificar a implementao de um objeto podem ser, por exemplo, melhoria de desempenho, correo de erros e mudana de plataforma de execuo.
Assim como abstrao, o conceito de Encapsulamento no exclusivo da abordagem de orientao a objetos. Entretanto, a habilidade de se combinar estrutura de dados e comportamento em uma nica entidade torna o Encapsulamento mais elegante e mais poderoso do que em linguagens convencionais que separam estruturas de dados e comportamento.
Compartilhamento
Tcnicas de orientao a objetos promovem compartilhamento em diversos nveis distintos. Herana de estrutura de dados e comportamento permite que estruturas comuns sejam compartilhadas entre diversas classes derivadas similares sem redundncia. O compartilhamento de cdigo usando herana uma das grandes vantagens da orientao a objetos. Ainda mais importante que a economia de cdigo a clareza conceitual de reconhecer que operaes diferentes so na verdade a mesma coisa, o que reduz o nmero de casos distintos que devem ser entendidos e analisados.
O desenvolvimento orientado a objetos no apenas permite que a informao dentro de um projeto seja compartilhada como tambm oferece a possibilidade de reaproveitar projetos e cdigo em projetos futuros. As ferramentas para alcanar este compartilhamento, tais como abstrao, Encapsulamento e herana, esto presentes na metodologia; uma estratgia de reuso entre projetos a definio de bibliotecas de elementos reusveis. Entretanto, orientao a objetos no uma frmula mgica para alcanar reusabilidade; para tanto, preciso planejamento e disciplina para pensar em termos genricos, no voltados simplesmente para a aplicao corrente.
Programao ADVPL II e Guia de Referncia Pgina 189 2.26 O Modelo de Objetos (OMT)
Um modelo de objetos busca capturar a estrutura esttica de um sistema mostrando os objetos existentes, seus relacionamentos, atributos e operaes que caracterizam cada classe de objetos. atravs do uso deste modelo que se enfatiza o desenvolvimento em termos de objetos ao invs de mecanismos tradicionais de desenvolvimento baseado em funcionalidades, permitindo uma representao mais prxima do mundo real.
Uma vez que as principais definies e conceitos da abordagem de orientao a objetos esto definidos, possvel introduzir o modelo de objetos que ser adotado ao longo deste texto. O modelo apresentado um subconjunto do modelo OMT (Object Modeling Technique), proposto por Rumbaugh entre outros. Este modelo tambm introduz uma representao diagramtica para este modelo, a qual ser tambm apresentada aqui.
2.26.1 Objetos e Classes
Objeto definido neste modelo como um conceito, abstrao ou coisa com limites e significados bem definidos para a aplicao em questo. Objetos tm dois propsitos: promover o entendimento do mundo real e suportar uma base prtica para uma implementao computacional. No existe uma maneira correta de decompor um problema em objetos; esta decomposio depende do julgamento do projetista e da natureza do problema. Todos os objetos tm identidade prpria e so distinguveis.
Uma classe de objetos descreve um grupo de objetos com propriedades (atributos) similares, comportamentos (operaes) similares, relacionamentos comuns com outros objetos e uma semntica comum. Por exemplo, Pessoa e Companhia so classes de objetos. Cada pessoa tem um nome e uma idade; estes seriam os atributos comuns da classe. Companhias tambm podem ter os mesmos atributos nome e idade definidos. Entretanto, devido distino semntica, elas provavelmente estariam agrupados em outra classe que no Pessoa. Como se pode observar, o agrupamento em classes no leva em conta apenas o compartilhamento de propriedades.
Todo objeto sabe a que classe ele pertence, ou seja, a classe de um objeto um atributo implcito do objeto. Este conceito suportado na maior parte das linguagens de programao orientada a objetos, inclusive em ADVPL.
OMT define dois tipos de diagramas de objetos, diagramas de classes e diagramas de instncias. Um diagrama de classe um esquema, ou seja, um padro ou gabarito que descreve as muitas possveis instncias de dados. Um diagrama de instncias descreve como um conjunto particular de objetos est relacionado. Diagramas de instncias so teis para apresentar exemplos e Pgina 190 Programao ADVPL II e Guia de Referncia documentar casos de testes; diagramas de classes tm uso mais amplos. A Figura abaixo apresenta a notao adotada para estes diagramas.
Figura: Representao diagramtica de OMT para classes e objetos
O agrupamento de objetos em classes um poderoso mecanismo de abstrao. Desta forma, possvel generalizar definies comuns para uma classe de objetos, ao invs de repet-las para cada objeto em particular. Esta uma das formas de reutilizao e economia que a abordagem de orientao a objetos suporta.
2.26.2 Atributos
Um atributo um valor de dado assumido pelos objetos de uma classe. Nome, idade e peso so exemplos de atributos de objetos Pessoa. Cor, peso e modelo so possveis atributos de objetos Carro. Cada atributo tem um valor para cada instncia de objeto. Por exemplo, o atributo idade tem valor ``29'' no objeto Pedro Y. Em outras palavras, Pedro Y tem 29 anos de idade. Diferentes instncias de objetos podem ter o mesmo valor para um dado atributo. Cada nome de atributo nico para uma dada classe, mas no necessariamente nico entre todas as classes. Por exemplo, ambos Pessoa e Companhia podem ter um atributo chamado endereo.
No diagrama de classes, atributos so listados no segundo segmento da caixa que representa a classe. O nome do atributo pode ser seguido por detalhes opcionais, tais como o tipo de dado assumido e valor default. A Figura abaixo mostra esta representao.
Programao ADVPL II e Guia de Referncia Pgina 191
Figura: Representao diagramtica de OMT para classes e objetos com atributos
No se deve confundir identificadores internos de objetos com atributos do mundo real. Identificadores de objetos so uma convenincia de implementao, e no tm nenhum significado para o domnio da aplicao. Por exemplo, CIC e RG no so identificadores de objetos, mas sim verdadeiros atributos do mundo real.
2.26.3 Operaes e Mtodos
Uma operao uma funo ou transformao que pode ser aplicada a ou por objetos em uma classe. Por exemplo, abrir, salvar e imprimir so operaes que podem ser aplicadas a objetos da classe Arquivo. Todos os objetos em uma classe compartilham as mesmas operaes. Toda operao tem um objeto-alvo como um argumento implcito. O comportamento de uma operao depende da classe de seu alvo. Como um objeto sabe qual sua classe, possvel escolher a implementao correta da operao. Alm disto, outros argumentos (parmetros) podem ser necessrios para uma operao.
Uma mesma operao pode se aplicar a diversas classes diferentes. Uma operao como esta dita ser polimrfica, ou seja, ela pode assumir distintas formas em classes diferentes. Um mtodo a implementao de uma operao para uma classe. Por exemplo, a operao imprimir pode ser implementada de forma distinta, dependendo se o arquivo a ser impresso contm apenas texto ASCII, um arquivo de um processador de texto ou binrio. Todos estes mtodos executam a mesma operao: imprimir o arquivo; porm, cada mtodo ser implementado por um diferente cdigo. A assinatura de um mtodo dada pelo nmero e tipos de argumentos do mtodo, assim como por seu valor de retorno. Uma estratgia de desenvolvimento recomendvel manter assinaturas coerentes para mtodos implementando uma dada operao, assim como um comportamento consistente entre as implementaes. Pgina 192 Programao ADVPL II e Guia de Referncia Em termos de diagramas OMT, operaes so listadas na terceira parte da caixa de uma classe. Cada nome de operao pode ser seguida por detalhes opcionais, tais como lista de argumentos e tipo de retorno. A lista de argumentos apresentada entre parnteses aps o nome da operao. Uma lista de argumentos vazia indica que a operao no tem argumentos; da ausncia da lista de argumentos no se pode concluir nada. O tipo de resultado vem aps a lista de argumentos, sendo precedido por dois pontos (:). Caso a operao retorne resultado, este no deve ser omitido, pois esta a forma de distingui-la de operaes que no retornam resultado. Exemplos de representao de operaes em OMT so apresentados na Figura abaixo:
Figura: Representao diagramtica de OMT para classes com atributos e operaes
2.26.4 Sugestes de desenvolvimento
Na construo de um modelo para uma aplicao, as seguintes sugestes devem ser observadas a fim de se obter resultados claros e consistentes: E No comece a construir um modelo de objetos simplesmente definindo classes, associaes e heranas. A primeira coisa a se fazer entender o problema a ser resolvido. E Tente manter seu modelo simples. Evite complicaes desnecessrias. E Escolha nomes cuidadosamente. Nomes so importantes e carregam conotaes poderosas. Nomes devem ser descritivos, claros e no deixar ambigidades. A escolha de bons nomes um dos aspectos mais difceis da modelagem. E No enterre apontadores ou outras referncias a objetos dentro de objetos como atributos. Ao invs disto, modele estas referncias como associaes. Isto torna o modelo mais claro e independente da implementao. E Tente evitar associaes que envolvam trs ou mais classes de objetos. Muitas vezes, estes tipos de associaes podem ser decompostos em termos de associaes binrias, tornando o modelo mais claro. E No transfira os atributos de ligao para dentro de uma das classes. E Tente evitar hierarquias de generalizao muito profundas. Programao ADVPL II e Guia de Referncia Pgina 193 E No se surpreenda se o seu modelo necessitar vrias revises; isto o normal. E Sempre documente seus modelos de objetos. O diagrama pode especificar a estrutura do modelo, mas nem sempre suficiente para descrever as razes por trs da definio do modelo. Uma explicao escrita pode clarificar pontos tais como significado de nomes e explicar a razo para cada classe e relacionamento. E Nem sempre todas as construes OMT so necessrias para descrever uma aplicao. Use apenas aquelas que forem adequadas para o problema analisado. 13. Orientao a objetos em ADVPL Neste tpico ser detalhada a forma com a qual a linguagem ADVPL implementa os conceitos de orientao a objetos e a sintaxe utilizada no desenvolvimento de aplicaes.
2.27 Sintaxe e operadores para orientao a objetos
Palavras reservadas
CLASS CONSTRUCTOR DATA ENDCLASS FROM METHOD SELF
CLASS
Descrio Utilizada na declarao de uma classe de objetos, e para identificar a qual classe um determinado mtodo est relacionado. Sintaxe 1 CLASS <nome_da_classe> Sintaxe 2 METHOD <nome_do_mtodo> CLASS <nome_da_classe>
CONSTRUCTOR
Descrio Utilizada na especificao de um mtodo especial, definido como construtor, o qual tem a funo de retornar um novo objeto com os atributos e mtodos definidos na classe. Pgina 194 Programao ADVPL II e Guia de Referncia Sintaxe METHOD <nome_do_mtodo()> CONSTRUCTOR
DATA
Descrio Utilizada na declarao de um atributo da classe de objetos. Sintaxe DATA <nome_do_atributo>
Programao ADVPL II e Guia de Referncia Pgina 195 ENDCLASS
Descrio Utilizada na finalizao da declarao da classe. Sintaxe ENDCLASS
FROM
Descrio Utilizada na declarao de uma classe, a qual ser uma instncia de uma superclasse, recebendo os atributos e mtodos nela definidos, implementando a herana entre classes. Sintaxe CLASS <nome_da_classe> FROM <nome_da_superclasse>
METHOD
Descrio Utilizada na declarao do prottipo do mtodo de uma classe de objetos, e na declarao do mtodo efetivamente desenvolvido. Sintaxe 1 METHOD <nome_do_mtodo()> Sintaxe 2 METHOD <nome_do_mtodo(<parmetros>)> CLASS <nome_da_classe>
SELF
Descrio Utilizada principalmente pelo mtodo construtor para retornar o objeto criado para a aplicao. Sintaxe Return SELF
Operadores especficos
: Utilizado para referenciar um mtodo ou um atributo de um objeto j instanciado. Exemplo 1 cNome := oAluno:sNome Exemplo 2 cNota := oAluno:GetNota(cCurso)
:: Utilizado pelos mtodos de uma classe para referenciar os atributos disponveis para o objeto. Exemplo METHOD GetNota(cCurso) CLASS ALUNO
Pgina 196 Programao ADVPL II e Guia de Referncia nNota := ::aCursos[nPosCurso][2]
ENDIF
Return nNota
2.28 Estrutura de uma classe de objetos em ADVPL
Declarao da classe
A declarao de uma classe da linguagem ADVPL realizada de forma similar a declarao de uma funo, com a diferena de que uma classe no possui diferenciao quanto a sua procedncia, como uma Function() e uma User Function(), e no possui visibilidade limitada como uma Static Function().
Exempl o:
#i ncl ude pr ot heus. ch CLASS Pessoa( )
Definio dos atributos
Seguindo o mesmo princpio de variveis no tipadas, os atributos das classes em ADVPL no precisam ter seu tipo especificado, sendo necessrio apenas determinar seus nomes.
Desta forma recomendado o uso da notao Hngara tambm para a definio dos atributos de forma a facilitar a anlise, interpretao e utilizao da classe e seus objetos instanciados.
Exempl o:
#i ncl ude pr ot heus. ch CLASS Pessoa( )
DATA cNome DATA nI dade
Prototipao dos mtodos
A prototipao dos mtodos uma regra utilizada pelas linguagens orientadas a objetos, atravs da qual so especificadas as operaes que podem ser realizadas pelo objeto, diferenciando os mtodos de outras funes internas de uso da classe, e para especificar quais so os mtodos construtores.
Programao ADVPL II e Guia de Referncia Pgina 197 Em linguagens tipadas, na prototipao dos mtodos necessrio definir quais so os parmetros recebidos e seus respectivos tipos, alm de definir o tipo do retorno que ser fornecido. Em ADVPL necessrio apenas descrever a chamada do mtodo e caso necessrio se o mesmo um construtor.
Exempl o:
#i ncl ude pr ot heus. ch CLASS Pessoa( )
DATA cNome DATA nI dade
METHOD Cr eat e( ) CONSTRUCTOR METHOD Set Nome( ) METHOD Set I dade( )
ENDCLASS
2.29 Implementao dos mtodos de uma classe em ADVPL
Mtodo Construtor
O mtodo construtor possui a caracterstica de retornar um objeto com o tipo da classe da qual o mesmo foi instanciado. Por esta razo diz-se que o tipo do objeto instanciado a classe daquele objeto.
Para produzir este efeito, o mtodo construtor utiliza a palavra reservada SELF, a qual utilizada pela linguagem ADVPL para referncia a prpria classe daquele objeto.
Exempl o:
#i ncl ude pr ot heus. ch CLASS Pessoa( )
DATA cNome DATA nI dade
METHOD Cr eat e( ) CONSTRUCTOR METHOD Set Nome( ) METHOD Set I dade( )
ENDCLASS
METHOD Cr eat e( cNome, nI dade) CLASS Pessoa
Pgina 198 Programao ADVPL II e Guia de Referncia : : cNome : = cNome : : nI dade : = nI dade
Ret ur n SELF
Manipulao de atributos
Os atributos definidos para uma classe com a utilizao da palavra reservada DATA em sua declarao podem ser manipulados por seus mtodos utilizando o operador ::.
A utilizao deste operador permite ao interpretador ADVPL diferenciar variveis comuns criadas pelas funes e mtodos que utilizam este objeto dos atributos propriamente ditos.
Exempl o:
#i ncl ude pr ot heus. ch CLASS Pessoa( )
DATA cNome DATA nI dade
METHOD Cr eat e( ) CONSTRUCTOR METHOD Set Nome( ) METHOD Set I dade( ) ENDCLASS
METHOD Cr eat e( cNome, nI dade) CLASS Pessoa
: : cNome : = cNome : : nI dade : = nI dade
Ret ur n SELF
Utilizao de funes em uma classe de objetos
Conforme mencionado anteriormente, a utilizao da palavra reservada METHOD permite ao interpretador ADVPL diferenciar os mtodos que podem ser utilizados atravs da referncia do objeto de funes internas descritas internamente na classe.
Isto permite a utilizao de funes tradicionais da linguagem ADVPL, como as Static Functions() as quais sero visveis apenas a classe, e no podero ser referenciadas diretamente pelo objeto.
Programao ADVPL II e Guia de Referncia Pgina 199 Exempl o par t e 01: Funo CadPessoa ( usur i a da cl asse Pessoa)
#i ncl ude pr ot heus. ch
USER FUNCTI ON CadPessoa( )
Local oPessoa Local cNome : = Local dNasci ment o: = CTOD( ) Local aDados : = {}
aDados : = Get Dados( ) oPessoa : = Pessoa( ) : Cr eat e( cNome, dNasci ment o)
Ret ur n
Exempl o par t e 02: Cl asse Pessoa
#i ncl ude pr ot heus. ch CLASS Pessoa( )
DATA cNome DATA nI dade DATA dNasci ment o
METHOD Cr eat e( ) CONSTRUCTOR METHOD Set Nome( ) METHOD Set I dade( )
ENDCLASS
METHOD Cr eat e( cNome, dNasci ment o) CLASS Pessoa : : cNome : = cNome : : dNasci ment o : = dNasci ment o : : nI dade : = Cal cI dade( dNasci ment o) Ret ur n SELF
STATI C FUNCTI ON Cal cI dade( dNasci ment o) Local nI dade nI dade : = dDat aBase - dNasci ment o RETURN nI dade
Herana entre classes
Pgina 200 Programao ADVPL II e Guia de Referncia Seguindo o principio da orientao a objetos, a linguagem ADVPL permite que uma classe receba por herana os mtodos e atributos definidos em uma outra classe, a qual tornasse a superclasse desta instncia.
Para utilizar este recurso deve ser utilizada a palavra reservada FROM na declarao da classe, especificando a superclasse que ser referenciada.
Em ADVPL o exemplo prtico desta situao a superclasse TSrvObject, a qual utilizada pela maioria das classes e componentes da interface visual, como demonstrado no mdulo 06.
Exempl o par t e 01: Decl ar ao da cl asse Pessoa
#i ncl ude pr ot heus. ch CLASS Pessoa( )
DATA cNome DATA nI dade DATA dNasci ment o
METHOD Cr eat e( ) CONSTRUCTOR METHOD Set Nome( ) METHOD Set I dade( )
ENDCLASS
Exempl o par t e 02: Decl ar ao da cl asse Al uno
#i ncl ude pr ot heus. ch CLASS Al uno( ) FROM Pessoa
DATA nI D DATA aCur sos
METHOD Cr eat e( ) CONSTRUCTOR METHOD I nscr ever ( ) METHOD Aval i ar ( ) METHOD Get Not a( ) METHOD Get St at us( )
ENDCLASS
/ / Os obj et os da cl asse Al uno, possuemt odos os mt odos e at r i but os da cl asse Pessoa, al m / / dos mt odos e at r i but os decl ar ados na pr pr i a cl asse.
Programao ADVPL II e Guia de Referncia Pgina 201
Pgina 202 Programao ADVPL II e Guia de Referncia Construtor para classes com herana
Quanto utilizado o recurso de herana entre classes, o construtor da classe instanciada deve receber um tratamento adicional, para que o objeto instanciado seja criado com os atributos e mtodos definidos na superclasse.
Nestes casos, logo aps a definio do mtodo construtor da classe, dever ser executado o mtodo construtor da superclasse.
Exempl o par t e 03: Mt odo Const r ut or da cl asse Al uno
METHOD Cr eat e( cNome, dNasci ment o, nI D) : Cr eat e( cNome, dNasci ment o) / / Chamada do mt odo const r ut or da cl asse Pessoa.
: : nI D : = I D
Ret ur n SELF
Programao ADVPL II e Guia de Referncia Pgina 203
MDULO 06: ADVPL ORIENTADO OBJETOS I Neste mdulo sero tratados os componentes e objetos da interface visual da linguagem ADVPL, permitindo o desenvolvimento de aplicaes com interfaces grficas com sintaxe orientada a objetos.
14. Componentes da interface visual do ADVPL A linguagem ADVPL possui diversos componentes visuais e auxiliares, os quais podem ser representados utilizando a estrutura abaixo:
. Classes de Componentes Visuais Tsplitter Ttabs Ttoolbox Twbrowse Vcbrowse
Programao ADVPL II e Guia de Referncia Pgina 205 Classes da interface visual
TSRVOBJECT()
Descrio Classe abstrata inicial de todas as classes de interface do ADVPL. No deve ser instanciada diretamente.
Classes auxiliares
TFONT()
Descrio Classe de objetos que define a fonte do texto utilizado nos controles visuais.
Classes de janelas
MSDIALOG()
Descrio Classe de objetos que deve ser utilizada como padro de janela para entrada de dados. MSDialog um tipo de janela dilogo modal, isto , no permite que outra janela ativa receba dados enquanto esta estiver ativa.
TDIALOG()
Descrio Classe de objetos do tipo dilogo de entrada de dados, sendo seu uso reservado. Recomenda-se utilizar a classe MSDialog que herdada desta classe.
TWINDOW()
Descrio Classe de objetos do tipo dilogo principal de programa. Dever existir apenas uma instncia deste objeto na execuo do programa.
Classes de componentes
TCONTROL()
Descrio Classe abstrata comum entre todos os componentes visuais editveis. No deve ser instanciada diretamente.
Classes de componentes visuais
BRGETDDB()
Descrio Classe de objetos visuais do tipo Grid. Pgina 206 Programao ADVPL II e Guia de Referncia MSCALEND()
Descrio Classe de objetos visuais do tipo Calendrio.
MSCALENDGRID()
Descrio Classe de objetos visuais do tipo Grade de Perodos.
MSSELBR()
Descrio Classe de objetos visuais do tipo controle - Grid
MSWORKTIME()
Descrio Classe de objetos visuais do tipo controle - Barra de Perodo.
SBUTTON()
Descrio Classe de objetos visuais do tipo boto, o qual pode possuir imagens padres associadas ao seu tipo.
TBAR()
Descrio Classe de objetos visuais do tipo Barra Superior.
TBITMAP()
Descrio Classe de objetos visuais que permite a exibio de uma imagem.
TBROWSEBUTTON()
Descrio Classe de objetos visuais do tipo boto no formato padro utilizado em browses da aplicao.
TBTNBMP()
Descrio Classe de objetos visuais do tipo boto, o qual permite que seja vinculada uma imagem ao controle.
TBTNBMP2()
Descrio Classe de objetos visuais do tipo boto, o qual permite a exibio de uma imagem ou de um popup. Programao ADVPL II e Guia de Referncia Pgina 207
TBUTTON()
Descrio Classe de objetos visuais do tipo boto, o qual permite a utilizao de texto para sua identificao.
TCBROWSE()
Descrio Classe de objetos visuais do tipo Grid.
TCHECKBOX()
Descrio Classe de objetos visuais do tipo controle - CheckBox.
TCOLORTRIANGLE()
Descrio Classe de objetos visuais do tipo Paleta de Cores.
TCOMBOBOX()
Descrio Classe de objetos visuais do tipo tComboBox, a qual cria uma entrada de dados com mltipla escolha com item definido em uma lista vertical, acionada por F4 ou pelo boto esquerdo localizado na parte direita do controle. A varivel associada ao controle ter o valor de um dos itens selecionados ou no caso de uma lista indexada, o valor de seu ndice.
TFOLDER()
Descrio Classe de objetos visuais do tipo controle - Folder.
TGET()
Descrio Classe de objetos visuais do tipo controle tGet, a qual cria um controle que armazena ou altera o contedo de uma varivel atravs de digitao. O contedo da varivel s modificado quando o controle perde o foco de edio para outro controle.
TGROUP()
Descrio Classe de objetos visuais do tipo painel tGroup, a qual cria um painel onde controles visuais podem ser agrupados ou classificados. Neste painel criada uma borda com ttulo em volta dos controles agrupados.
Pgina 208 Programao ADVPL II e Guia de Referncia THBUTTON()
Descrio Classe de objetos visuais do tipo boto com hiperlink.
TIBROWSER()
Descrio Classe de objetos visuais do tipo Pgina de Internet, sendo necessrio incluir a clausula BrowserEnabled=1 no Config do Remote.INI
TLISTBOX()
Descrio Classe de objetos visuais do tipo controle tListbox, a qual cria uma janela com itens selecionveis e barra de rolagem. Ao selecionar um item, uma varivel atualizada com o contedo do item selecionado.
TMENU()
Descrio Classe de objetos visuais do tipo controle - Menu.
TMENUBAR()
Descrio Classe de objetos visuais do tipo controle - Barra de Menu.
TMETER()
Descrio Classe de objetos visuais do tipo controle tMeter, a qual exibe uma rgua (gauge) de processamento, descrevendo o andamento de um processo atravs da exibio de uma barra horizontal.
TMSGRAPHIC()
Descrio Classe de objetos visuais do tipo controle - Grfico.
TMSGBAR()
Descrio Classe de objetos visuais do tipo controle - Rodap.
TMULTIBTN()
Descrio Classe de objetos visuais do tipo controle - Mltiplos botes.
Programao ADVPL II e Guia de Referncia Pgina 209 TMULTIGET()
Descrio Classe de objetos visuais do tipo controle - edio de texto de mltiplas linhas.
TOLECONTAINER()
Descrio Classe de objetos visuais do tipo controle, a qual permite a criao de um boto vinculado a um objeto OLE.
TPAGEVIEW()
Descrio Classe de objetos visuais do tipo controle, que permite a visualizao de arquivos no formato gerado pelo spool de impresso do Protheus.
TPANEL()
Descrio Classe de objetos visuais do tipo controle tPanel, a qual permite criar um painel esttico, onde podem ser criados outros controles com o objetivo de organizar ou agrupar componentes visuais.
TRADMENU()
Descrio Classe de objetos visuais do tipo controle TRadMenu, a qual permite criar um controle visual no formato Radio Button.
TSBROWSE()
Descrio Classe de objetos visuais do tipo controle TSBrowse, a qual permite criar um controle visual do tipo Grid.
TSAY()
Descrio Classe de objetos visuais do tipo controle tSay, a qual exibe o contedo de texto esttico sobre uma janela ou controle previamente definidos.
TSCROLLBOX()
Descrio Classe de objetos visuais do tipo controle tScrollbox, a qual permite criar um painel com scroll deslizantes nas laterais (horizontais e verticais) do controle.
Pgina 210 Programao ADVPL II e Guia de Referncia TSIMPLEEDITOR()
Descrio Classe de objetos visuais do tipo controle tSimpleEditor, a qual permite criar um controle visual para edio de textos com recursos simples, como o NotePad
TSLIDER()
Descrio Classe de objetos visuais do tipo controle tSlider, a qual permite criar um controle visual do tipo boto deslizante.
TSPLITTER()
Descrio Classe de objetos visuais do tipo controle tSplitter, a qual permite criar um controle visual do tipo divisor.
TTABS()
Descrio Classe de objetos visuais do tipo controle TTabs, a qual permite criar um controle visual do tipo pasta.
TTOOLBOX()
Descrio Classe de objetos visuais do tipo controle tToolbox, a qual permite criar um controle visual para agrupar diferentes objetos.
TWBROWSE()
Descrio Classe de objetos visuais do tipo controle TWBrowse, a qual permite criar um controle visual do tipo Grid.
VCBROWSE() Descrio Classe de objetos visuais do tipo controle VCBrowse, a qual permite criar um controle visual do tipo Grid.
Documentao dos componentes da interface visual
Os componentes da interface visual da linguagem ADVPL utilizados neste treinamento esto documentados na seo Guia de Referncia, ao final deste material. Programao ADVPL II e Guia de Referncia Pgina 211
2.30 Particularidades dos componentes visuais
2.30.1 Configurando as cores para os componentes
Os componentes visuais da linguagem ADVPL utilizam o padro de cores RGB.
As cores deste padro so definidas pela seguinte frmula, a qual deve ser avaliada tendo como base a paleta de cores no formato RGB:
Com base nesta paleta, podemos definir os valores das seguintes cores bsicas:
Cor R G B Valor Preto 0 0 0 0 Azul 0 0 255 16711680 Verde 0 255 0 65280 Ciano 0 255 255 16776960 Vermelho 255 0 0 255 Rosa 255 0 255 16711935 Amarelo 255 255 0 65535 Branco 255 255 255 16777215 Pgina 212 Programao ADVPL II e Guia de Referncia
Para atribuir as cores aos objetos visuais devem ser observados os atributos utilizados para estes fins em cada objeto, como por exemplo:
MSDIALOG()
nClrPane Cor de fundo do painel nClrText Cor da fonte das letras do painel
TSAY()
nClrPane Cor de fundo do painel nClrText Cor da fonte das letras do painel
Funo RGB()
A linguagem ADVPL possui a funo RGB() a qual retorna o valor da cor a ser definido, de acordo com a parametrizao de cada um dos elementos da paleta RGB.
RGB(nRed, nGreen, nBlue)
nRed Valor de 0-255 para o elemento vermelho da paleta RGB nGreen Valor de 0-255 para o elemento verde da paleta RGB nBlue Valor de 0-255 para o elemento azul da paleta RGB Retorno Valor a ser definido para o atributo cor do componente
15. Aplicaes com a interface visual do ADVPL
A linguagem ADVPL possui interfaces visuais pr-definidas que auxiliam no desenvolvimento de aplicaes mais completas, combinando estas interfaces com os componentes visuais demonstrados anteriormente.
Didaticamente as interfaces visuais pr-definidas da linguagem ADVPL podem ser divididas em trs grupos:
E Captura de informaes simples ou Multi-Gets; E Captura de mltiplas informaes ou Multi-Lines; E Barras de botes Programao ADVPL II e Guia de Referncia Pgina 213
2.31 Captura de informaes simples (Multi-Gets)
Em ADVPL, as telas de captura de informaes compostas por mltiplos campos digitveis acompanhados de seus respectivos textos explicativos so comumente chamados de Enchoices.
Um Enchoice pode ser facilmente entendida como diversos conjuntos de objetos TSay e TGet alinhados de forma a visualizar ou capturar informaes, normalmente vinculadas a arquivos de cadastros ou movimentaes simples.
Abaixo temos a visualizao de uma Enchoice para o arquivo padro do ERP Protheus de Cadastro de Clientes (SA1):
Figura: Enchoice do Cadastro de Clientes do ERP Protheus
A linguagem ADVPL permite a implementao da Enchoice de duas formas similares:
E Funo Enchoice: Sintaxe tradicionalmente utilizada em ADVPL, a qual no retorna um objeto para a aplicao chamadora;
E Classe MsMGet: Classe do objeto Enchoice, a qual permite a instanciao direta de um objeto, tornando-o disponvel na aplicao chamadora.
A utilizao de um ou outro objeto depende unicamente da escolha do desenvolvedor j que os parmetros para a funo Enchoice e para o mtodo New() da classe MsMGet Pgina 214 Programao ADVPL II e Guia de Referncia so os mesmos, lembrando que para manter a coerncia com uma aplicao escrita em orientao a objetos dever ser utilizada a classe MsMGet().
cAlias Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser editada nReg Parmetro no utilizado nOpc Nmero da linha do aRotina que definir o tipo de edio (Incluso, Alterao, Excluso, Visualizao) aCRA Parmetro no utilizado cLetra Parmetro no utilizado cTexto Parmetro no utilizado aAcho Vetor com nome dos campos que sero exibidos. Os campos de usurio sempre sero exibidos se no existir no parmetro um elemento com a expresso "NOUSER" aPos Vetor com coordenadas para criao da enchoice no formato {<top>, <left>, <bottom>, <right>} aCpos Vetor com nome dos campos que podero ser editados nModelo Se for diferente de 1 desabilita execuo de gatilhos estrangeiros nColMens Parmetro no utilizado cMensagem Parmetro no utilizado cTudoOk Expresso para validao da Enchoice oWnd Objeto (janela, painel, etc.) onde a enchoice ser criada. lF3 Indica se a enchoice esta sendo criada em uma consulta F3 para utilizar variveis de memria lMemoria Indica se a enchoice utilizar variveis de memria ou os campos da tabela na edio lColumn Indica se a apresentao dos campos ser em forma de coluna caTela Nome da varivel tipo "private" que a enchoice utilizar no lugar da propriedade aTela lNoFolder Indica se a enchoice no ir utilizar as Pastas de Cadastro (SXA) lProperty Indica se a enchoice no utilizar as variveis aTela e aGets, somente suas propriedades com os mesmos nomes
Programao ADVPL II e Guia de Referncia Pgina 215 Exemplo: Utilizao da funo Enchoice()
Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es" Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ; {" Vi sual i zar " , " U_ModEnc" , 0, 2}}
DbSel ect Ar ea( " SA1" ) DbSet Or der ( 1)
MBr owse( 6, 1, 22, 75, " SA1" )
Ret ur n
User Funct i on ModEnc( cAl i as, nReg, nOpc)
Local aCpoEnch : = {} Local aAl t er : = {}
Local cAl i asE : = cAl i as Local aAl t er Ench : = {} Local aPos : = {000, 000, 400, 600} Local nModel o : = 3 Local l F3 : = . F. Local l Memor i a : = . T. Local l Col umn : = . F. Local caTel a : = " " Local l NoFol der : = . F. Local l Pr oper t y : = . F. Pgina 216 Programao ADVPL II e Guia de Referncia Pr i vat e oDl g Pr i vat e oGet D Pr i vat e oEnch Pr i vat e aTELA[ 0] [ 0] Pr i vat e aGETS[ 0]
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) DbSeek( cAl i asE)
Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE I f ! ( SX3- >X3_CAMPO $ " A1_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ; X3Uso( SX3- >X3_USADO) AADD( aCpoEnch, SX3- >X3_CAMPO) EndI f DbSki p( ) End
aAl t er Ench : = aCl one( aCpoEnch)
DEFI NE MSDI ALOG oDl g TI TLE cCadast r o FROM 000, 000 TO 400, 600 PI XEL RegToMemor y( " SA1" , I f ( nOpc==3, . T. , . F. ) )
Enchoi ce( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ; aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , ; / *cMensagem*/ , / *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, ; caTel a, l NoFol der , l Pr oper t y)
cAlias Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser editada Programao ADVPL II e Guia de Referncia Pgina 217 nReg Parmetro no utilizado nOpc Nmero da linha do aRotina que definir o tipo de edio (Incluso, Alterao, Excluso, Visualizao) aCRA Parmetro no utilizado cLetra Parmetro no utilizado cTexto Parmetro no utilizado aAcho Vetor com nome dos campos que sero exibidos. Os campos de usurio sempre sero exibidos se no existir no parmetro um elemento com a expresso "NOUSER" aPos Vetor com coordenadas para criao da enchoice no formato {<top>, <left>, <bottom>, <right>} aCpos Vetor com nome dos campos que podero ser editados nModelo Se for diferente de 1 desabilita execuo de gatilhos estrangeiros nColMens Parmetro no utilizado cMensagem Parmetro no utilizado cTudoOk Expresso para validao da Enchoice oWnd Objeto (janela, painel, etc.) onde a enchoice ser criada. lF3 Indica se a enchoice esta sendo criada em uma consulta F3 para utilizar variveis de memria lMemoria Indica se a enchoice utilizar variveis de memria ou os campos da tabela na edio lColumn Indica se a apresentao dos campos ser em forma de coluna caTela Nome da varivel tipo "private" que a enchoice utilizar no lugar da propriedade aTela lNoFolder Indica se a enchoice no ir utilizar as Pastas de Cadastro (SXA) lProperty Indica se a enchoice no utilizar as variveis aTela e aGets, somente suas propriedades com os mesmos nomes
Pr i vat e cCadast r o : = " Cadast r o de Cl i ent es" Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ; {" Vi sual i zar " , " U_ModEnc" , 0, 2}}
DbSel ect Ar ea( " SA1" ) DbSet Or der ( 1)
MBr owse( 6, 1, 22, 75, " SA1" )
Ret ur n
User Funct i on ModEnc( cAl i as, nReg, nOpc) Local aCpoEnch : = {} Local aAl t er : = {}
Local cAl i asE : = cAl i as Local aAl t er Ench : = {} Local aPos : = {000, 000, 400, 600} Local nModel o : = 3 Local l F3 : = . F. Local l Memor i a : = . T. Local l Col umn : = . F. Local caTel a : = " " Local l NoFol der : = . F. Local l Pr oper t y : = . F. Pr i vat e oDl g Pr i vat e oGet D Pr i vat e oEnch Pr i vat e aTELA[ 0] [ 0] Pr i vat e aGETS[ 0]
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) DbSeek( cAl i asE)
Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE I f ! ( SX3- >X3_CAMPO $ " A1_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. X3Uso( SX3- >X3_USADO) AADD( aCpoEnch, SX3- >X3_CAMPO) EndI f DbSki p( ) Programao ADVPL II e Guia de Referncia Pgina 219 End
aAl t er Ench : = aCl one( aCpoEnch)
oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. )
RegToMemor y( cAl i asE, I f ( nOpc==3, . T. , . F. ) )
oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , ; / *cText o*/ , aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , ; / *cMensagem*/ , / *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, caTel a, ; l NoFol der , l Pr oper t y)
oDl g: l Cent er ed : = . T. oDl g: Act i vat e( )
Ret ur n
2.32 Captura de mltiplas informaes (Multi-Lines)
A linguagem ADVPL permite a utilizao de basicamente dois tipos de objetos do tipo grid, ou como tambm so conhecidos: multi-line:
E Grids digitveis: permitem a visualizao e captura de informaes, comumente utilizados em interfaces de cadastro e manuteno, tais como:
MSGETDB() MSGETDADOS() MSNEWGETDADOS()
E Grids no digitveis: permitem somente a visualizao de informaes, comumente utilizados como browses do ERP Protheus, tais como:
TWBROWSE() MAWNDBROWSE() MBROWSE()
Neste tpico sero tratadas as grids digitveis disponveis na linguagem ADVPL para o desenvolvimento de interfaces de cadastros e manuteno de informaes.
Pgina 220 Programao ADVPL II e Guia de Referncia 2.32.1 MsGetDB()
A classe de objetos visuais MsGetDB() permite a criao de um grid digitvel com uma ou mais colunas, baseado em uma tabela temporria.
E Retorno: oMsGetDB objeto do tipo MsGetDB() Programao ADVPL II e Guia de Referncia Pgina 221
E Parmetros:
nTop Distancia entre a MsGetDB e o extremidade superior do objeto que a contm. nLeft Distancia entre a MsGetDB e o extremidade esquerda do objeto que a contm. nBottom Distancia entre a MsGetDB e o extremidade inferior do objeto que a contm. nRight
Distancia entre a MsGetDB e o extremidade direita do objeto que a contm. nOpc Posio do elemento do vetor aRotina que a MsGetDB usar como referncia. cLinhaOk Funo executada para validar o contexto da linha atual do aCols. cTudoOk Funo executada para validar o contexto geral da MsGetDB (todo aCols). cIniCpos Nome dos campos do tipo caracter que utilizaro incremento automtico. Este parmetro deve ser no formato +<nome do primeiro campo>+<nome do segundo campo>+.... lDelete Habilita a opo de excluir linhas do aCols. Valor padro falso. aAlter Vetor com os campos que podero ser alterados. nFreeze Indica qual coluna no ficara congelada na exibio. lEmpty Habilita validao da primeira coluna do aCols para esta no poder estar vazia. Valor padro falso. uPar1 Parmetro reservado. cFieldOk Funo executada na validao do campo. cTRB Alias da tabela temporria. lCondicional Reservado lAppend Indica se a MsGetDB ira criar uma linha em branco automaticamente quando for incluso. cDelOk Funo executada para validar a excluso de uma linha do aCols. lDisparos Indica se ser utilizado o Dicionrio de Dados para consulta padro, inicializao padro e gatilhos. uPar2 Parmetro reservado. cSuperDel -Funo executada quando pressionada as teclas <Ctrl>+<Delete>. oWnd Objeto no qual a MsGetDB ser criada. E Pgina 222 Programao ADVPL II e Guia de Referncia E Aparncia:
E Variveis private:
aRotina Vetor com as rotinas que sero executadas na MBrowse e que definira o tipo de operao que esta sendo executada (incluso, alterao, excluso, visualizao, pesquisa, ...) no formato: {cTitulo, cRotina, nOpo, nAcesso}, aonde: nOpo segue o padro do ERP Protheus para: 1- Pesquisar 2- Visualizar 3- Incluir 4- Alterar 5- Excluir aHeader Vetor com informaes das colunas no formato:
A tabela temporria utilizada pela MsGetDB dever ser criada com base no aHeader mais um ltimo campo tipo lgico que determina se a linha foi excluda.
lRefresh Varivel tipo lgica para uso reservado.
Programao ADVPL II e Guia de Referncia Pgina 223
E Variveis pblicas:
nBrLin Indica qual a linha posicionada do aCols.
E Funes de validao:
cLinhaOk Funo de validao na mudana das linhas da grid. No pode ser definida como Static Function. cTudoOk Funo de validao da confirmao da operao com o grid. No pode ser definida como Static Function.
E Mtodos adicionais:
ForceRefresh() Atualiza a MsGetDB com a tabela e posiciona na primeira linha.
Local nI Local oDl g Local oGet DB Local nUsado : = 0 Local aSt r uct : = {}
Pr i vat e l Ref r esh : = . T. Pr i vat e aHeader : = {} Pgina 224 Programao ADVPL II e Guia de Referncia Pr i vat e aCol s : = {} Pr i vat e aRot i na : = {{" Pesqui sar " , " AxPesqui " , 0, 1}, ; {" Vi sual i zar " , " AxVi sual " , 0, 2}, ; {" I ncl ui r " , " AxI ncl ui " , 0, 3}, ; {" Al t er ar " , " AxAl t er a" , 0, 4}, ; {" Excl ui r " , " AxDel et a" , 0, 5}}
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) DbSeek( " SA1" )
Exempl o ( cont i nuao) :
Whi l e ! Eof ( ) . and. SX3- >X3_ARQUI VO == " SA1" I f X3Uso( SX3- >X3_USADO) . and. cNi vel >= SX3- >X3_NI VEL nUsado++ AADD( aHeader , {Tr i m( X3Ti t ul o( ) ) , ; SX3- >X3_CAMPO, ; SX3- >X3_PI CTURE, ; SX3- >X3_TAMANHO, ; SX3- >X3_DECI MAL, ; SX3- >X3_VALI D, ; " " , ; SX3- >X3_TI PO, ; " " , ; " " }) AADD( aSt r uct , {SX3- >X3_CAMPO, SX3- >X3_TI PO, SX3- >X3_TAMANHO, ; SX3- >X3_DECI MAL}) EndI f DbSki p( ) End
AADD( aSt r uct , {" FLAG" , " L" , 1, 0})
cCr i aTr ab : = Cr i aTr ab( aSt r uct , . T. ) DbUseAr ea( . T. , __Local Dr i ver , cCr i aTr ab, , . T. , . F. )
oDl g : = MSDI ALOG( ) : New( 000, 000, 300, 400, MsGet DB SA1, , , , , , , , , . T. ) oGet DB : = MsGet DB( ) : New( 05, 05, 145, 195, 3, " U_LI NHAOK" , " U_TUDOOK" , " +A1_COD" , ; . T. , {" A1_NOME" }, 1, . F. , , cCr i aTr ab, " U_FI ELDOK" , , . T. , oDl g, . T. , , " U_DELOK" , ; " U_SUPERDEL" )
oDl g: l Cent er ed : = . T. oDl g: Act i vat e( ) DbSel ect Ar ea( cCr i aTr ab) DbCl oseAr ea( ) Programao ADVPL II e Guia de Referncia Pgina 225
Ret ur n
User Funct i on LI NHAOK( ) ApMsgSt op( " LI NHAOK" ) Ret ur n . T.
User Funct i on TUDOOK( ) ApMsgSt op( " LI NHAOK" ) Ret ur n . T.
User Funct i on DELOK( ) ApMsgSt op( " DELOK" ) Ret ur n . T.
User Funct i on SUPERDEL( ) ApMsgSt op( " SUPERDEL" ) Ret ur n . T.
User Funct i on FI ELDOK( ) ApMsgSt op( " FI ELDOK" ) Ret ur n . T.
2.32.2 MsGetDados()
A classe de objetos visuais MsGetDados() permite a criao de um grid digitvel com uma ou mais colunas, baseado em um array.
E Retorno: oMsGetDados objeto do tipo MsGetDados() Pgina 226 Programao ADVPL II e Guia de Referncia
E Parmetros:
nTop Distncia entre a MsGetDados e o extremidade superior do objeto que a contm. nLeft Distncia entre a MsGetDados e o extremidade esquerda do objeto que a contm. nBottom Distncia entre a MsGetDados e o extremidade inferior do objeto que a contm. nRight
Distncia entre a MsGetDados e o extremidade direita do objeto que a contm. nOpc Posio do elemento do vetor aRotina que a MsGetDados usar como referencia. cLinhaOk Funo executada para validar o contexto da linha atual do aCols. cTudoOk Funo executada para validar o contexto geral da MsGetDados (todo aCols). cIniCpos Nome dos campos do tipo caracter que utilizaro incremento automtico. Este parmetro deve ser no formato +<nome do primeiro campo>+<nome do segundo campo>+.... lDelete Habilita excluir linhas do aCols. Valor padro falso. aAlter Vetor com os campos que podero ser alterados. uPar1 Parmetro reservado. lEmpty Habilita validao da primeira coluna do aCols para esta no poder estar vazia. Valor padro falso. nMax Nmero mximo de linhas permitidas. Valor padro 99. cFieldOk Funo executada na validao do campo. cSuperDel Funo executada quando pressionada as teclas <Ctrl>+<Delete>. uPar2 Parmetro reservado. cDelOk Funo executada para validar a excluso de uma linha do aCols. oWnd Objeto no qual a MsGetDados ser criada.
Programao ADVPL II e Guia de Referncia Pgina 227
E Aparncia:
E Variveis private:
aRotina Vetor com as rotinas que sero executadas na MBrowse e que definira o tipo de operao que esta sendo executada (incluso, alterao, excluso, visualizao, pesquisa, ...) no formato: {cTitulo, cRotina, nOpo, nAcesso}, aonde: nOpo segue o padro do ERP Protheus para: 6- Pesquisar 7- Visualizar 8- Incluir 9- Alterar 10- Excluir aHeader Vetor com informaes das colunas no formato:
A tabela temporria utilizada pela MsGetDB dever ser criada com base no aHeader mais um ltimo campo tipo lgico que determina se a linha foi excluda.
Pgina 228 Programao ADVPL II e Guia de Referncia lRefresh Varivel tipo lgica para uso reservado.
E Variveis pblicas:
N Indica qual a linha posicionada do aCols.
E Funes de validao:
cLinhaOk Funo de validao na mudana das linhas da grid. No pode ser definida como Static Function. cTudoOk Funo de validao da confirmao da operao com o grid. No pode ser definida como Static Function.
E Mtodos adicionais:
ForceRefresh() Atualiza a MsGetDados com a tabela e posiciona na primeira linha. Hide() Oculta a MsGetDados. Show() Mostra a MsGetDados.
Local nI Local oDl g Local oGet Dados Local nUsado : = 0 Pr i vat e l Ref r esh : = . T. Programao ADVPL II e Guia de Referncia Pgina 229 Pr i vat e aHeader : = {} Pr i vat e aCol s : = {}
Pr i vat e aRot i na : = {{" Pesqui sar " , " AxPesqui " , 0, 1}, ; {" Vi sual i zar " , " AxVi sual " , 0, 2}, ; {" I ncl ui r " , " AxI ncl ui " , 0, 3}, ; {" Al t er ar " , " AxAl t er a" , 0, 4}, ; {" Excl ui r " , " AxDel et a" , 0, 5}}
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) DbSeek( " SA1" )
Whi l e ! Eof ( ) . and. SX3- >X3_ARQUI VO == " SA1" I f X3Uso( SX3- >X3_USADO) . and. cNi vel >= SX3- >X3_NI VEL nUsado++ AADD( aHeader , {Tr i m( X3Ti t ul o( ) ) , ; SX3- >X3_CAMPO, ; SX3- >X3_PI CTURE, ; SX3- >X3_TAMANHO, ; SX3- >X3_DECI MAL, ; SX3- >X3_VALI D, ; " " , ; SX3- >X3_TI PO, ; " " , ; " " }) EndI f DbSki p( ) End
AADD( aCol s, Ar r ay( nUsado+1) )
For nI : = 1 To nUsado aCol s[ 1] [ nI ] : = Cr i aVar ( aHeader [ nI ] [ 2] ) Next
aCol s[ 1] [ nUsado+1] : = . F.
oDl g : = MSDI ALOG( ) : New( 000, 000, 300, 400, MsGet Dados SA1, , , , , , , , , . T. )
E Retorno: oMsGetDados objeto do tipo MsNewGetDados()
E Parmetros:
nSuperior Distancia entre a MsNewGetDados e o extremidade superior do objeto que a contem nEsquerda Distancia entre a MsNewGetDados e o extremidade esquerda do objeto que a contem nInferior Distancia entre a MsNewGetDados e o extremidade inferior do objeto que a contem nDireita Distancia entre a MsNewGetDados e o extremidade direita do objeto que a contem nOpc Operao em execuo: 2- Visualizar, 3- Incluir, 4- Alterar, 5- Excluir Programao ADVPL II e Guia de Referncia Pgina 231 cLinOk Funo executada para validar o contexto da linha atual do aCols cTudoOk Funo executada para validar o contexto geral da MsNewGetDados (todo aCols) cIniCpos Nome dos campos do tipo caracter que utilizaro incremento automtico. aAlterGDa Campos alterveis da GetDados nFreeze Campos estticos na GetDados, partindo sempre da posio inicial da getdados aonde: 1- Primeiro campo congelado 2- Primeiro e segundo campos congelados... nMax Nmero mximo de linhas permitidas. Valor padro 99 cFieldOk Funo executada na validao do campo cSuperDel Funo executada quando pressionada as teclas <Ctrl>+<Delete> cDelOk Funo executada para validar a excluso de uma linha do aCols oDLG Objeto no qual a MsNewGetDados ser criada aHeader Array a ser tratado internamente na MsNewGetDados como aHeader aCols Array a ser tratado internamente na MsNewGetDados como aCols
E Aparncia:
Pgina 232 Programao ADVPL II e Guia de Referncia
Programao ADVPL II e Guia de Referncia Pgina 233
E Variveis private:
aRotina Vetor com as rotinas que sero executadas na MBrowse e que definira o tipo de operao que esta sendo executada (incluso, alterao, excluso, visualizao, pesquisa, ...) no formato: {cTitulo, cRotina, nOpo, nAcesso}, aonde:
nOpo segue o padro do ERP Protheus para: 1- Pesquisar 2- Visualizar 3- Incluir 4- Alterar 5- Excluir aHeader Vetor com informaes das colunas no formato:
A tabela temporria utilizada pela MsGetDB dever ser criada com base no aHeader mais um ltimo campo tipo lgico que determina se a linha foi excluda.
lRefresh Varivel tipo lgica para uso reservado.
E Variveis pblicas:
N Indica qual a linha posicionada do aCols.
E Funes de validao:
cLinhaOk Funo de validao na mudana das linhas da grid. No pode ser definida como Static Function. cTudoOk Funo de validao da confirmao da operao com o grid. No pode ser definida como Static Function.
E Mtodos adicionais:
ForceRefresh() Atualiza a MsNewGetDados com a tabela e posiciona na primeira linha. Hide() Oculta a MsNewGetDados. Show() Mostra a MsNewGetDados.
Pgina 234 Programao ADVPL II e Guia de Referncia Exemplo: Utilizao dos objetos MsNewGetDados() e MsMGet()
Pr i vat e cCadast r o : = " Pedi dos de Venda" Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ; {" Vi sual i zar " , " U_ModGt d" , 0, 2}, ; {" I ncl ui r " , " U_ModGt d" , 0, 3}}
DbSel ect Ar ea( " SC5" ) DbSet Or der ( 1)
MBr owse( 6, 1, 22, 75, " SC5" )
Ret ur n
User Funct i on ModGt d( cAl i as, nReg, nOpc)
Local nX : = 0 Local nUsado : = 0 Local aBut t ons : = {} Local aCpoEnch : = {} Local cAl i asE : = cAl i as Local aAl t er Ench : = {} Local aPos : = {000, 000, 080, 400} Local nModel o : = 3 Local l F3 : = . F. Local l Memor i a : = . T. Local l Col umn : = . F. Programao ADVPL II e Guia de Referncia Pgina 235 Local caTel a : = " " Local l NoFol der : = . F. Local l Pr oper t y : = . F. Local aCpoGDa : = {} Local cAl i asGD : = " SC6" Local nSuper i or : = 081 Local nEsquer da : = 000 Local nI nf er i or : = 250 Local nDi r ei t a : = 400 Local cLi nOk : = " Al l waysTr ue" Local cTudoOk : = " Al l waysTr ue" Local cI ni Cpos : = " C6_I TEM" Local nFr eeze : = 000 Local nMax : = 999 Local cFi el dOk : = " Al l waysTr ue" Local cSuper Del : = " " Local cDel Ok : = " Al l waysFal se" Local aHeader : = {} Local aCol s : = {} Local aAl t er GDa : = {}
Pr i vat e oDl g Pr i vat e oGet D Pr i vat e oEnch Pr i vat e aTELA[ 0] [ 0] Pr i vat e aGETS[ 0]
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) DbSeek( cAl i asE)
Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE I f ! ( SX3- >X3_CAMPO $ " C5_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ; X3Uso( SX3- >X3_USADO) AADD( aCpoEnch, SX3- >X3_CAMPO) EndI f DbSki p( ) End
aAl t er Ench : = aCl one( aCpoEnch)
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) MsSeek( cAl i asGD)
Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asGD I f ! ( Al l Tr i m( SX3- >X3_CAMPO) $ " C6_FI LI AL" ) . And. ; cNi vel >= SX3- >X3_NI VEL . And. X3Uso( SX3- >X3_USADO) Pgina 236 Programao ADVPL II e Guia de Referncia AADD( aCpoGDa, SX3- >X3_CAMPO) EndI f DbSki p( ) End
aAl t er GDa : = aCl one( aCpoGDa)
nUsado: =0 dbSel ect Ar ea( " SX3" ) dbSeek( " SC6" ) aHeader : ={} Whi l e ! Eof ( ) . And. ( x3_ar qui vo==" SC6" ) I f X3USO( x3_usado) . And. cNi vel >=x3_ni vel nUsado: =nUsado+1 AADD( aHeader , { TRI M( x3_t i t ul o) , x3_campo, x3_pi ct ur e, x3_t amanho, ; x3_deci mal , " Al l waysTr ue( ) " , x3_usado, x3_t i po, x3_ar qui vo, x3_cont ext } ) Endi f dbSki p( ) End
I f nOpc==3 / / I ncl ui r aCol s: ={Ar r ay( nUsado+1) } aCol s[ 1, nUsado+1] : =. F. For nX: =1 t o nUsado I F aHeader [ nX, 2] == " C6_I TEM" aCol s[ 1, nX] : = " 0001" ELSE aCol s[ 1, nX] : =Cr i aVar ( aHeader [ nX, 2] ) ENDI F Next El se aCol s: ={} dbSel ect Ar ea( " SC6" ) dbSet Or der ( 1) dbSeek( xFi l i al ( ) +M- >C5_NUM) Whi l e ! eof ( ) . and. C6_NUM==M- >C5_NUM AADD( aCol s, Ar r ay( nUsado+1) ) For nX: =1 t o nUsado
aCol s[ Len( aCol s) , nX] : =Fi el dGet ( Fi el dPos( aHeader [ nX, 2] ) ) Next aCol s[ Len( aCol s) , nUsado+1] : =. F. dbSki p( ) End Endi f
oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. ) RegToMemor y( " SC5" , I f ( nOpc==3, . T. , . F. ) ) Programao ADVPL II e Guia de Referncia Pgina 237
oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ; aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , / *cMensagem*/ , ; / *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , ; l Pr oper t y)
oGet D: = MsNewGet Dados( ) : New( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a, ; nOpc, cLi nOk, cTudoOk, cI ni Cpos, aAl t er GDa, nFr eeze, nMax, cFi el dOk, ; cSuper Del , cDel Ok, oDLG, aHeader , aCol s)
oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, {| | oDl g: End( ) }, {| | oDl g: End( ) }, , aBut t ons) } oDl g: l Cent er ed : = . T. oDl g: Act i vat e( ) Ret ur n
2.32.3.1 Definindo cores personalizadas para o objeto MsNewGetDados()
Conforme visto no tpico sobre definio das propriedades de cores para os componentes visuais, cada objeto possui caractersticas que devem ser respeitadas para correta utilizao deste recurso.
E Atributos adicionais:
lUseDefaultColors Atributo que dever ser definido como .F. para que as alteraes nas cores sejam permitidas.
E Mtodos adicionais:
SetBlkBackColor Mtodo que define a cor que ser utilizada para cada linha do grid. No necessrio utilizar o mtodo Refresh() aps a definio da cor por este mtodo.
Pgina 238 Programao ADVPL II e Guia de Referncia
E Aparncia:
Exemplo: Definindo cores personalizadas para o objeto MsNewGetDados()
Pr i vat e cCadast r o : = " Pedi dos de Venda" Pr i vat e aRot i na : = {{" Pesqui sar " , " axPesqui " , 0, 1}, ; Programao ADVPL II e Guia de Referncia Pgina 239 {" Vi sual i zar " , " U_ModGt d" , 0, 2}, ; {" I ncl ui r " , " U_ModGt d" , 0, 3}}
DbSel ect Ar ea( " SC5" ) DbSet Or der ( 1)
MBr owse( 6, 1, 22, 75, " SC5" )
Ret ur n
User Funct i on ModGt d( cAl i as, nReg, nOpc)
Local nX : = 0 Local nUsado : = 0
Local aBut t ons : = {} Local aCpoEnch : = {} Local cAl i asE : = cAl i as Local aAl t er Ench : = {} Local aPos : = {000, 000, 080, 400} Local nModel o : = 3 Local l F3 : = . F. Local l Memor i a : = . T. Local l Col umn : = . F. Local caTel a : = " " Local l NoFol der : = . F. Local l Pr oper t y : = . F. Local aCpoGDa : = {} Local cAl i asGD : = " SC6" Local nSuper i or : = 081 Local nEsquer da : = 000 Local nI nf er i or : = 250 Local nDi r ei t a : = 400 Local cLi nOk : = " Al l waysTr ue" Local cTudoOk : = " Al l waysTr ue" Local cI ni Cpos : = " C6_I TEM" Local nFr eeze : = 000 Local nMax : = 999 Local cFi el dOk : = " Al l waysTr ue" Local cSuper Del : = " " Local cDel Ok : = " Al l waysFal se" Local aHeader : = {} Local aCol s : = {} Local aAl t er GDa : = {}
Pr i vat e oDl g Pr i vat e oGet D Pr i vat e oEnch Pgina 240 Programao ADVPL II e Guia de Referncia Pr i vat e aTELA[ 0] [ 0] Pr i vat e aGETS[ 0]
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) DbSeek( cAl i asE)
Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE I f ! ( SX3- >X3_CAMPO $ " C5_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. ; X3Uso( SX3- >X3_USADO) AADD( aCpoEnch, SX3- >X3_CAMPO) EndI f DbSki p( ) End
aAl t er Ench : = aCl one( aCpoEnch)
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) MsSeek( cAl i asGD)
Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asGD I f ! ( Al l Tr i m( SX3- >X3_CAMPO) $ " C6_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. X3Uso( SX3- >X3_USADO) AADD( aCpoGDa, SX3- >X3_CAMPO) EndI f DbSki p( ) End
aAl t er GDa : = aCl one( aCpoGDa)
nUsado: =0 dbSel ect Ar ea( " SX3" ) dbSeek( " SC6" ) aHeader : ={} Whi l e ! Eof ( ) . And. ( x3_ar qui vo==" SC6" ) I f X3USO( x3_usado) . And. cNi vel >=x3_ni vel nUsado: =nUsado+1 AADD( aHeader , { TRI M( x3_t i t ul o) , x3_campo, x3_pi ct ur e, ; x3_t amanho, x3_deci mal , " Al l waysTr ue( ) " , ; x3_usado, x3_t i po, x3_ar qui vo, x3_cont ext } ) Endi f dbSki p( ) End
I f nOpc==3 / / I ncl ui r aCol s: ={Ar r ay( nUsado+1) } aCol s[ 1, nUsado+1] : =. F. Programao ADVPL II e Guia de Referncia Pgina 241 For nX: =1 t o nUsado
I F aHeader [ nX, 2] == " C6_I TEM" aCol s[ 1, nX] : = " 0001" ELSE aCol s[ 1, nX] : =Cr i aVar ( aHeader [ nX, 2] ) ENDI F
Next El se aCol s: ={} dbSel ect Ar ea( " SC6" ) dbSet Or der ( 1) dbSeek( xFi l i al ( ) +M- >C5_NUM) Whi l e ! eof ( ) . and. C6_NUM==M- >C5_NUM AADD( aCol s, Ar r ay( nUsado+1) ) For nX: =1 t o nUsado
aCol s[ Len( aCol s) , nX] : =Fi el dGet ( Fi el dPos( aHeader [ nX, 2] ) ) Next aCol s[ Len( aCol s) , nUsado+1] : =. F. dbSki p( ) End Endi f
oDl g : = MSDI ALOG( ) : New( 000, 000, 400, 600, cCadast r o, , , , , , , , , . T. )
RegToMemor y( " SC5" , I f ( nOpc==3, . T. , . F. ) )
oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , / *cText o*/ , ; aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , / *cMensagem*/ , ; cTudoOk, oDl g, l F3, l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y)
oGet D: = MsNewGet Dados( ) : New( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a, nOpc, ; cLi nOk, cTudoOk, cI ni Cpos, aAl t er GDa, nFr eeze, nMax, cFi el dOk, cSuper Del , ; cDel Ok, oDLG, aHeader , aCol s)
/ / Tr at ament o par a def i ni o de cor es espec f i cas, / / l ogo aps a decl ar ao da MsNewGet Dados
oGet D: oBr owse: l UseDef aul t Col or s : = . F. oGet D: oBr owse: Set Bl kBackCol or ( {| | GETDCLR( oGet D: aCol s, oGet D: nAt , aHeader ) })
Pgina 242 Programao ADVPL II e Guia de Referncia oDl g: bI ni t : = {| | Enchoi ceBar ( oDl g, {| | oDl g: End( ) }, {| | oDl g: End( ) }, , aBut t ons) } oDl g: l Cent er ed : = . T. oDl g: Act i vat e( )
Ret ur n
/ / Funo par a t r at ament o das r egr as de cor es par a a gr i d da MsNewGet Dados
St at i c Funct i on GETDCLR( aLi nha, nLi nha, aHeader )
Local nCor 2 : = 16776960 / / Ci ano - RGB( 0, 255, 255) Local nCor 3 : = 16777215 / / Br anco - RGB( 255, 255, 255) Local nPosPr od : = aScan( aHeader , {| x| Al l t r i m( x[ 2] ) == " C6_PRODUTO" }) Local nUsado : = Len( aHeader ) +1 Local nRet : = nCor 3
I f ! Empt y( aLi nha[ nLi nha] [ nPosPr od] ) . AND. aLi nha[ nLi nha] [ nUsado] nRet : = nCor 2 El seI f ! Empt y( aLi nha[ nLi nha] [ nPosPr od] ) . AND. ! aLi nha[ nLi nha] [ nUsado] nRet : = nCor 3 Endi f
Ret ur n nRet
2.33 Barras de botes
A linguagem ADVPL permite a implementao de barras de botes utilizando funes pr-definidas desenvolvidas com o objetivo de facilitar sua utilizao, ou atravs da utilizao direta dos componentes visuais disponveis. Dentre os recursos da linguagem que podem ser utilizados com esta finalidade sero abordados:
E Funo EnchoiceBar: Sintaxe tradicionalmente utilizada em ADVPL, a qual no retorna um objeto para a aplicao chamadora;
E Classe TBar: Classe do objeto TBar(), a qual permite a instanciao direta de um objeto do tipo barra de botes superior, tornando-o disponvel na aplicao chamadora.
E Classe ButtonBar: Classe do objeto ButtonBar(), a qual permite a instanciao direta de um objeto barra de botes genrico, o qual pode ser utilizado em qualquer posio da tela, tornando-o disponvel na aplicao chamadora.
Programao ADVPL II e Guia de Referncia Pgina 243 2.33.1 EnchoiceBar()
Funo que cria uma barra de botes no formato padro utilizado pelas interfaces de cadastro da aplicao Protheus.
Esta barra possui os botes padres para confirmar ou cancelar a interface e ainda permite a adio de botes adicionais com a utilizao do parmetro aButtons. Pgina 244 Programao ADVPL II e Guia de Referncia E Sintaxe:
oDlg Dialog onde ir criar a barra de botes bOk Bloco de cdigo a ser executado no boto Ok bCancel Bloco de cdigo a ser executado no boto Cancelar lMsgDel Exibe dialog para confirmar a excluso aButtons Array contendo botes adicionais. aArray[n][1] -> Imagem do boto aArray[n][2] -> bloco de cdigo contendo a ao do boto aArray[n][3] -> ttulo do boto nRecno Registro a ser posicionado aps a execuo do boto Ok. cAlias Alias do registro a ser posicionado aps a execuo do boto Ok. Se o parmetro nRecno for informado, o cAlias passa ser obrigatrio.
E Aparncia:
Programao ADVPL II e Guia de Referncia Pgina 245 Exemplo: Utilizao da funo EnchoiceBar()
User Funct i on DEnchBar ( ) Local oDl g, oBt n Local aBut t ons : = {}
DEFI NE MSDI ALOG oDl g TI TLE " Test e Enchoi ceBar " FROM 000, 000 TO 400, 600 PI XEL OF; oMai nWnd
AADD( aBut t ons, {" HI STORI C" , {| | Test Hi st ( ) }, " Hi st r i co. . . " , ; " Hi st r i co" , {| | . T. }} )
@- 15, - 15 BUTTON oBt n PROMPT " . . . " SI ZE 1, 1 PI XEL OF oDl g
ACTI VATE MSDI ALOG oDl g ; ON I NI T ( Enchoi ceBar ( oDl g, {| | l Ok: =. T. , oDl g: End( ) }, {| | oDl g: End( ) }, , @aBut t ons) )
Ret ur n
2.33.2 TBar()
Classe de objetos visuais que permite a implementao de um componente do tipo barra de botes para a parte superior de uma janela previamente definida.
Pgina 246 Programao ADVPL II e Guia de Referncia E Sintaxe: New(oWnd, nBtnWidth, nBtnHeight, l3D, cMode, oCursor, cResource, lNoAutoAdjust)
E Retorno: oTBar objeto do tipo TBar()
E Parmetros:
oWnd Objeto, opcional. Janela ou controle onde o boto dever ser criado. nBtnWidth Numrico, opcional. Largura do boto contido na barra nBtnHeight Numrico, opcional. Altura do boto contido na barra l3D Lgico, opcional. Define tipo da barra cMode No utilizado. oCursor Objeto, opcional. Define Cursor ao posicionar o mouse sobre a barra. cResource Caracter, opcional. Imagem do recurso a ser inserido como fundo da barra. lNoAutoAdjust Lgico.
oDl g: l Cent er ed : = . T. oDl g: Act i vat e( )
Ret ur n
2.33.3 ButtonBar
A sintaxe ButtonBar a forma clssica utilizada na linguagem ADVPL para implementar um objeto da classe TBar(), o qual possui as caractersticas mencionadas no tpico anterior.
E Sintaxe:
DEFINE BUTTONBAR oBar SIZE nWidth, nHeight 3D MODE OF oDlg CURSOR
E Retorno: ().
E Parmetros:
oBar Objeto do tipo TBar() que ser criado com a utilizao Pgina 248 Programao ADVPL II e Guia de Referncia da sintaxe ButtonBar(). nWidth Numrico, opcional. Largura do boto contido na barra. nHeight Numrico, opcional. Altura do boto contido na barra. 3D Se definido habilita a visualizao em 3D da barra de botes. oDlg Objeto, opcional. Janela ou controle onde o boto dever ser criado. MODE Define a forma de orientao do objeto ButtonBar utilizando os seguintes termos pr-definidos: TOP, BOTTOM, FLOAT
CURSOR Objeto, opcional. Define Cursor ao posicionar o mouse sobre a barra.
A sintaxe ButtonBar requer a adio dos botes como recursos adicionais da barra previamente definida utilizando a sintaxe abaixo:
E Botes: BUTTON RESOURCE
E Sintaxe adicional:
DEFINE BUTTON RESOURCE cBitMap OF oBar ACTION cAcao TOOLTIP cTexto
E Parmetros:
cBitMap Nome da imagem disponvel na aplicao. oBar Objeto do tipo TBar() no qual o boto ser adicionado. cAcao Funo ou lista de expresses que determina a ao que ser realizada pelo boto. cTexto Texto no estilo tooltip text que ser exibido quando o cursor do mouse for posicionado sobre o boto na barra de ferramentas.
oDl g : = MSDI ALOG( ) : New( 000, 000, 305, 505, ' Exempl o - BUTTONBAR' , , , , , , , , , . T. )
DEFI NE BUTTONBAR oBar SI ZE 25, 25 3D TOP OF oDl g
DEFI NE BUTTON RESOURCE " S4WB005N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Recor t ar " DEFI NE BUTTON RESOURCE " S4WB006N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Copi ar " DEFI NE BUTTON RESOURCE " S4WB007N" OF oBar ACTI ON NaoDi sp( ) TOOLTI P " Col ar " DEFI NE BUTTON oBt n1 RESOURCE " S4WB008N" OF oBar GROUP; ACTI ON Cal cul ador a( ) TOOLTI P " Cal cul ador a"
oBt n1: cTi t l e: =" Cal c" DEFI NE BUTTON RESOURCE " S4WB009N" OF oBar ACTI ON Agenda( ) TOOLTI P " Agenda" DEFI NE BUTTON RESOURCE " S4WB010N" OF oBar ACTI ON Our Spool ( ) TOOLTI P " Spool " DEFI NE BUTTON RESOURCE " S4WB016N" OF oBar GROUP; ACTI ON Hel Pr og( ) TOOLTI P " Aj uda"
Pgina 250 Programao ADVPL II e Guia de Referncia DEFI NE BUTTON oBt n2 RESOURCE " PARAMETROS" OF oBar GROUP; ACTI ON Sx1C020( ) TOOLTI P " Par met r os"
oBt n2: cTi t l e: =" Par am. "
DEFI NE BUTTON oBt Ok RESOURCE " FI NAL" OF oBar GROUP; ACTI ON oDl g: End( ) TOOLTI P " Sai r "
oBar : bRCl i cked : = {| | Al l waysTr ue( ) } oDl g: l Cent er ed : = . T. oDl g: Act i vat e( )
Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 251 2.33.4 Imagens pr-definidas para as barras de botes
Conforme mencionado nos tpicos anteriores, os botes visuais do tipo barra de botes permitem a definio de itens com aes e imagens vinculadas.
Dentre os objetos e funes mencionados, foi citada a EnchoiceBar(), a qual permite a adio de botes adicionais atravs do parmetro aButton, sendo que os itens deste array devem possuir o seguinte formato:
E Sintaxe: AADD(aButtons,{cBitMap, bAcao, cTexto})
E Estrutura:
cBitMap Nome da imagem pr-definida existente na aplicao ERP que ser vinculada ao boto. bAcao Bloco de cdigo que define a ao que ser executada com a utilizao do boto. cTexto Texto no estilo tooltip text que ser exibido quando o cursor do mouse for posicionado sobre o boto na barra de ferramentas.
E Alguns BitMaps disponveis:
DESTINOS
DISCAGEM
EDIT
EDITABLE
EXCLUIR
FORM
GRAF2D
GRAF3D
LINE
NOTE
OBJETIVO
OK
PENDENTE
PRECO
PRODUTO
S4SB014N
S4WB001N
S4WB005N
S4WB006N
S4WB007N
S4WB008N
S4WB009N
S4WB010N
S4WB011N
S4WB013N
S4WB014A
S4WB016N
SIMULACA
VENDEDOR
USER
Pgina 252 Programao ADVPL II e Guia de Referncia E Exemplo:
16. Arredondamento Algumas operaes numricas podem causar diferenas de arredondamento. Isso ocorre devido a diferenas no armazenamento de variveis numricas nos diversos processadores, diferena esta, inclusive, presente no ADVPL, mesmo antes do surgimento do Protheus.
Para evitar esses problemas de arredondamento, deve ser utilizada a funo Round(), principalmente antes de realizar uma comparao e antes de se utilizar a funo Int().
Desse modo, assegura-se que o resultado ser correto independentemente do processador ou plataforma.
Exemplo 01:
I f ( Val or / 30) == 50 / / pode ser f al so ou i nvl i do I f Round( Val or / 30, 0) == 50 / / cor r et o
Exemplo 02:
M- >EE8_QTDEM1 : = I nt ( M- >EE8_SLDI NI / M- >EE8_QE) / / pode ser f al so ou i nvl i do M- >EE8_QTDEM1 : = I nt ( Round( M- >EE8_SLDI NI / M- >EE8_QE, 10) ) / / cor r et o
Programao ADVPL II e Guia de Referncia Pgina 253 17. Utilizao de Identao obrigatria a utilizao da identao, pois torna o cdigo muito mais legvel. Veja os exemplos abaixo:
Whi l e ! SB1- >( Eof ( ) ) I f mv_par 01 == SB1- >B1_COD dbSki p( ) Loop Endi f Do Case Case SB1- >B1_LOCAL == 01 . OR. SB1- >B1_LOCAL == 02 Tr at aLocal ( SB1- >B1_COD, SB1- >B1_LOCAL) Case SB1- >B1_LOCAL == 03 Tr at aDef ei t o( SB1- >B1_COD) Ot her Wi se Tr at aCompr a( SB1- >B1_COD, SB1- >B1_LOCAL) EndCase dbSki p( ) EndDo
A utilizao da identao seguindo as estruturas de controle de fluxo (while, IF, caso etc.) torna a compreenso do cdigo muito mais fcil:
Whi l e ! SB1- >( Eof ( ) )
I f mv_par 01 == SB1- >B1_COD dbSki p( ) Loop Endi f
Do Case Case SB1- >B1_LOCAL == 01 . OR. SB1- >B1_LOCAL == 02 Tr at aLocal ( SB1- >B1_COD, SB1- >B1_LOCAL)
Case SB1- >B1_LOCAL == 03 Tr at aDef ei t o( SB1- >B1_COD)
Ot her Wi se Tr at aCompr a( SB1- >B1_COD, SB1- >B1_LOCAL) EndCase dbSki p( )
EndDo
Pgina 254 Programao ADVPL II e Guia de Referncia
Para identar o cdigo utilize a tecla <TAB> e na ferramenta DEV-Studio, a qual pode ser configurada atravs da opo Preferncias:
18. Capitulao de Palavras-Chave
Uma conveno amplamente utilizada a de capitular as palavras chaves, funes, variveis e campos utilizando uma combinao de caracteres em maisculo e minsculo, visando facilitar a leitura do cdigo fonte. O cdigo a seguir:
Local ncnt whi l e ( ncnt ++ < 10 ) nt ot al += ncnt * 2 enddo
Ficaria melhor com as palavras chaves e variveis capituladas:
Local nCnt Whi l e ( nCnt ++ < 10 ) nTot al += nCnt * 2 EndDo
Para funes de manipulao de dados que comecem por db, a capitulao s ser efetuada aps o db:
E dbSeek() E dbSelectArea()
Programao ADVPL II e Guia de Referncia Pgina 255 2.34 Palavras em maisculo
Pgina 256 Programao ADVPL II e Guia de Referncia 19. Utilizao da Notao Hngara A notao hngara consiste em adicionar os prefixos aos nomes de variveis, de modo a facilmente se identificar seu tipo. Isto facilita na criao de cdigos-fonte extensos, pois usando a Notao Hngara, voc no precisa ficar o tempo todo voltando definio de uma varivel para se lembrar qual o tipo de dados que deve ser colocado nela. Variveis devem ter um prefixo de Notao Hngara em minsculas, seguido de um nome que identifique a funo da varivel, sendo que a inicial de cada palavra deve ser maiscula. obrigatria a utilizao desta notao para nomear variveis. Notao Tipo de dado Exemplo a Array aValores b Bloco de cdigo bSeek c Caracter cNome d Data dDataBase l Lgico lContinua n Numrico nValor o Objeto oMainWindow x Indefinido xConteudo
20. Tcnicas de programao eficiente Para o desenvolvimento de sistemas e a programao de rotinas, sempre esperado que qualquer cdigo escrito seja:
O Funcionalmente correto O Eficiente O Legvel O Reutilizvel O Extensvel O Portvel
Aps anos de experincia na utilizao de linguagens padro xBase e do desenvolvimento da linguagem ADVPL, algumas tcnicas para uma programao otimizada e eficiente foram reconhecidas. A utilizao das tcnicas a seguir, visa buscar o mximo aproveitamento dos recursos da linguagem com o objetivo de criar programas com estas caractersticas.
Programao ADVPL II e Guia de Referncia Pgina 257 Criao de funes segundo a necessidade
Observe o cdigo de exemplo:
User Funct i on Get Answer ( l Def aul t ) Local l Ok l Ok : = Get Ok( l Def aul t ) I f l Ok Ret ur n . T. El se Ret ur n . F. Endi f Ret ur n ni l
Utilizando-se apenas o critrio "a funo funciona corretamente?", a funo GetAnswer perfeita. Recebe um parmetro lgico com a resposta padro e retorna um valor lgico dependente da opo escolhida pelo usurio em uma funo de dilogo "sim/no" designada para isso. Pode entretanto ser melhorada, particularmente se eficincia for considerada como um critrio para um cdigo melhor. Eficincia tipicamente envolve a utilizao de poucos recursos de mquina, poucos chamadas de funes ou tornar mais rpido um processo.
Segundo esse raciocnio, poderia se produzir o seguinte cdigo:
User Funct i on Get Answer ( l Def aul t ) Ret ur n I f ( Get Ok( l Def aul t ) , . T. , . F. )
O cdigo acima ainda pode ser aprimorado conforme abaixo:
User Funct i on Get Answer ( l Def aul t ) Ret ur n Get Ok( l Def aul t )
Com a otimizao do cdigo da funo GetAnswer(), pode facilmente verificar que a mesma no realiza nada adicional chamada de GetOk(), podendo ser substituda por uma chamada direta desta, continuando a funcionar corretamente.
Pgina 258 Programao ADVPL II e Guia de Referncia Codificao auto-documentvel
Nenhum comentrio substitui um cdigo claramente escrito, e este no um acidente. Considere o exemplo:
cVar : = " " / / 11 espaos
O tamanho da varivel cVar no evidente por si s e no facilmente verificado. Estes mesmos 10 espaos estariam mais bvios e ainda assim garantidos se a instruo fosse escrita como:
cVar : = Space( 11)
O mesmo princpio pode ser aplicado para qualquer string longa de caracteres repetidos. A funo Replicate pode ser utilizada como a seguir:
cVar : = Repl i cat e( " *" , 80 )
Este tipo de programao deixa o cdigo fcil de digitar, fcil de ler e mais flexvel.
Utilizao de solues simples
Simplicidade na criao de instrues torna a programao e at mesmo a execuo mais rpida. Considere a linha de cdigo:
I f nVar > 0 . Or . nVar < 0
Se o valor da varivel nVar for igual a zero (0) no momento da execuo desta linha de cdigo, ambas as comparaes separadas pelo operador lgico .Or. sero efetuadas: Aps ser avaliada, a primeira comparao ir falhar. A segunda comparao ser ento avaliada e falhar tambm. Como resultado, o cdigo existente dentro da estrutura de fluxo If no ser executado. Tal cdigo somente ser executado quando o valor desta varivel for maior OU menor do que zero. Ou seja, sempre que for DIFERENTE de zero, o que torna a linha a seguir mais eficiente:
I f nVar ! = 0
Programao ADVPL II e Guia de Referncia Pgina 259
Este tipo de alterao torna o cdigo mais legvel e o processamento mais rpido, evitando a avaliao de instrues desnecessariamente.
Existem outras situaes onde a simplificao pode ser utilizada. A expresso de avaliao a seguir:
I f cVar == " A" . Or . cVar == " B" . Or cVar == " C" . Or . cVar == " D"
Pode ser substitudo pelo operador de conteno:
I f cVar $ " ABCD"
Opo por flexibilidade
A melhor soluo aquela que envolve o problema imediato e previne problemas no futuro. Considere o exemplo:
@nRow, nCol PSAY cVar Pi ct ur e " ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! "
Exceto contando-se os caracteres, no existe maneira de saber se o nmero de caracteres de exclamao o esperado. Enquanto isto um problema, existem algo mais grave. A expresso de picture esttica. Se no futuro for necessrio ajustar o tamanho da varivel cVar, ser necessrio localizar todos os lugares no cdigo onde esta mscara de picture est sendo utilizada para ajuste manual.
Existe uma opo de soluo de auto-ajuste disponvel que fcil de digitar e tem a garantia de executar a tarefa igualmente (tornar todos os caracteres maisculos):
@nRow, nCol PSAY cVar Pi ct ur e " @! "
Pgina 260 Programao ADVPL II e Guia de Referncia Opo da praticidade ao drama
Se a soluo parece complexa, provavelmente porque o caminho escolhido est levando a isso. Deve-se sempre se perguntar porque algum desenvolveria uma linguagem que requisite tantos comandos complicados para fazer algo simples. Na grande maioria dos casos, existe uma soluo mais simples. O exemplo abaixo deixa isso bem claro:
@10, 25 Say Subst r ( cCep, 1, 5) + " - " + Subst r ( cCep, 6, 3) Pi ct ur e " ! ! ! ! ! ! ! ! ! "
Este cdigo pode ser escrito de uma forma muito mais simples, conforme demonstrado abaixo:
@10, 25 Say cCep Pi ct ur e " @R 99999- 999"
Utilizao de operadores de incremento/decremento
Utilizados devidamente, os operadores de incremento e decremento tornam o cdigo mais fcil de ler e possivelmente um pouco mais rpidos. Ao contrrio de escrever adies simples como:
nVar : = nVar + 1 nVar : = nVar - 1
Pode-se escrev-las assim:
++nVar - - nVar
Deve-se apenas tomar cuidado com a precedncia destes operadores, pois o "++" ou o "--" podem aparecer antes ou depois de uma varivel, e em alguns casos quando a varivel for utilizada dentro de uma expresso, a prefixao ou sufixao destes operadores afetar o resultado. Para maiores detalhes, consulte a documentao de operadores da linguagem ADVPL.
Programao ADVPL II e Guia de Referncia Pgina 261 Evitar passos desnecessrios
Existe uma diferena entre um bom hbito e perda de tempo. Algumas vezes estes conceitos podem estar muito prximos, mas um modo de diferenci-los balancear os benefcios de realizar alguma ao contra o problema que resultaria se no fosse executada. Observe o exemplo:
Local nCnt : = 0 For nCnt : = 1 To 1 <cdi go> Next nCnt
Inicializar a varivel no momento da declarao no um problema. Se o 0 fosse necessrio no exemplo, teria sido til a inicializao na declarao. Mas neste caso a estrutura de repetio For...Next atribui o seu valor imediatamente com 1, portanto no houve ganho em atribuir a varivel com 0 no comeo.
Neste exemplo no h nenhum ponto negativo e nada errado ocorrer se a varivel no for inicializada, portanto aconselhvel evitar este tipo de inicializao, pois no torna o cdigo mais seguro e tambm no expressa a inteno do cdigo mais claramente.
Porm, note este exemplo, onde a varivel no inicializada:
Local nCnt Whi l e ( nCnt ++ < 10 ) <cdi go> EndDo
Em ADVPL, variveis no inicializadas sempre tem seu valor contendo nulo (nil) a princpio, o que far com que uma exceo em tempo de execuo acontea quando a instruo de repetio while for executada.
Diferentemente do primeiro exemplo, onde a inicializao da varivel no fazia diferena alguma, neste segundo exemplo a inicializao absolutamente necessria. Deve-se procurar inicializar variveis numricas com zero (0) e variveis caracter com string nula ("") apenas quando realmente necessrio.
Pgina 262 Programao ADVPL II e Guia de Referncia Utilizao de alternativas
Quando se est trabalhando em uma simples rotina, deve-se tomar algum tempo para explorar duas ou trs diferentes abordagens. Quando se est trabalhando em algo mais complexo, deve-se planejar prototipar algumas a mais. Considere o seguinte cdigo:
I f cHai r = " A" Repl ace hai r Wi t h " Loi r a" El se I f cHai r = " B" Repl ace hai r Wi t h " Mor ena" El se I f cHai r = " C" Repl ace hai r Wi t h " Rui va" El se I f cHai r = " D" Repl ace hai r Wi t h " Gr i sal ho" El se Repl ace hai r Wi t h " Pr et o" Endi f Endi f Endi f Endi f
Um cdigo de uma nica letra, (A at E), foi informado para indicar a cor de cabelo. Este cdigo foi ento convertido e armazenado como uma string. Pode-se notar que a cor "Preto" ser atribuda se nenhuma outra opo for verdadeira.
Uma alternativa que reduz o nvel de identao torna o cdigo mais fcil de ler enquanto reduz o nmero de comandos replace:
Do Case Case cHai r == " A" cCol or : = " Loi r a" Case cHai r == " B" cCol or : = " Mor ena" Case cHai r == " C" cCol or : = " Rui va" Case cHai r == " D" cCol or : = " Gr i sal ho" Ot her Wi se cCol or : = " Pr et o" EndCase
Repl ace hai r Wi t h cCol or
Programao ADVPL II e Guia de Referncia Pgina 263 Utilizao de arquivos de cabealho quando necessrio
Se um arquivo de cdigo criado se referencia a comandos para interpretao e tratamento de arquivos XML, este deve se incluir o arquivo de cabealho prprio para tais comandos (XMLXFUN.CH no exemplo). Porm no deve-se incluir arquivos de cabealho apenas por segurana. Se no se est referenciando nenhuma das constantes ou utilizando nenhum dos comandos contidos em um destes arquivos, a incluso apenas tornar a compilao mais demorada.
Constantes em maisculo
Isto uma conveno que faz sentido. Em ADVPL, como em C por exemplo, a regra utilizar todos os caracteres de uma constante em maisculo, a fim de que possam ser claramente reconhecidos como constantes no cdigo, e que no seja necessrios lembrar onde foram declarados.
Utilizao de identao
Este um hbito que todo programador deve desenvolver. No consome muito esforo para manter o cdigo alinhado durante o trabalho, porm quando necessrio pode-se utilizar a ferramenta TOTVS DevStudio para a re-identao de cdigo. Para maiores detalhes, consulte a documentao sobre a identao de cdigos fontes disponvel nos demais tpicos deste material.
Utilizao de espaos em branco
Espaos em branco extras tornam o cdigo mais fcil para a leitura. No necessrio imensas reas em branco, mas agrupar pedaos de cdigo atravs da utilizao de espaos em branco funciona muito bem. Costuma-se separar parmetros com espaos em branco.
Quebra de linhas muito longas
Com o objetivo de tornar o cdigo mais fcil de ler e imprimir, as linhas do cdigo no devem estender o limite da tela ou do papel. Podem ser "quebradas" em mais de uma linha de texto utilizando o ponto-e-vrgula (;).
Capitulao de palavras-chave
Uma conveno amplamente utilizada a de capitular as palavras chaves, funes, variveis e campos utilizando uma combinao de caracteres em maisculo e minsculo, visando facilitar a leitura do cdigo fonte.
Pgina 264 Programao ADVPL II e Guia de Referncia Avaliando o cdigo a seguir:
l ocal ncnt whi l e ( ncnt ++ < 10 ) nt ot al += ncnt * 2 enddo
O mesmo ficaria muito mais claro se re-escrito conforme abaixo:
Local nCnt
Whi l e ( nCnt ++ < 10 ) nTot al += nCnt * 2 EndDo
Utilizao da Notao Hngara
A Notao Hngara muito comum entre programadores xBase e de outras linguagens. A documentao do ADVPL utiliza esta notao para a descrio das funes e comandos e aconselhvel sua utilizao na criao de rotinas, pois ajuda a evitar pequenos erros e facilita a leitura do cdigo. Para maiores detalhes, consulte a documentao sobre a utilizao da Notao Hngara de cdigos fontes disponvel nos demais tpicos deste material.
Utilizao de nomes significantes para variveis
A principal vantagem da liberdade na criao dos nomes de variveis a facilidade de identificao da sua utilidade. Portanto deve-se utilizar essa facilidade o mximo possvel. Nomes sem sentido apenas tornaro difcil a identificao da utilidade de uma determinada varivel, assim como nomes extremamente curtos. Nem sempre a utilizao de uma varivel chamada i a melhor sada. Claro, no convm criar uma varivel com um nome muito longo que ser utilizada como um contador, e referenciada muitas vezes no cdigo. O bom senso deve ser utilizado.
Criar variveis como nNumero ou dData tambm no ajudam na identificao. A Notao Hngara j est sendo utilizada para isso e o objetivo do nome da varivel deveria ser identificar sua utilizao, no o tipo de dado utilizado. Deve-se procurar substituir tais variveis por algo como nTotal ou dCompra.
O mesmo vlido para nomes de funes, que devem descrever um pouco sobre o que a funo faz. Novamente nomes extremamente curtos no so aconselhveis.
Programao ADVPL II e Guia de Referncia Pgina 265 Utilizao de comentrios
Comentrios so muito teis na documentao de programas criados e para facilitar a identificao de processos importantes no futuro e devem sempre ser utilizados.
Sempre que possvel, funes criadas devem ter uma breve descrio do seu objetivo, parmetros e retorno. Alm de servir como documentao, os comentrios embelezam o cdigo ao separar as funes umas das outras. Os comentrios devem ser utilizados com bom senso, pois reescrever a sintaxe ADVPL em portugus torna-se apenas perda de tempo:
I f nLast Key == 27 / / Se o nLast Key f or i gual a 27
Criao de mensagens sistmicas significantes e consistentes
Seja oferecendo assistncia, exibindo mensagens de aviso ou mantendo o usurio informado do estado de algum processo, as mensagens devem refletir o tom geral e a importncia da aplicao. Em termos gerais, deve-se evitar ser muito informal e ao mesmo tempo muito tcnico.
"Aguarde. Reindexando (FILIAL+COD+ LOCAL) do arquivo: \DADOSADV\SB1990.DBF"
Esse tipo de mensagem pode dar informaes demais para o usurio e deix-lo sentindo-se desconfortvel se no souber o que significa "reindexando", etc. E de fato, o usurio no devia ser incomodado com tais detalhes. Apenas a frase "Aguarde, indexando." funcionaria corretamente, assim como palavras "processando" ou "reorganizando".
Outra boa idia evitar a referencia a um item corrente de uma tabela como um "registro":
"Deletar este registro?"
Se a operao estiver sendo efetuada em um arquivo de clientes, o usurio deve ser questionado sobre a remoo do cliente corrente, se possvel informando valores de identificao como o cdigo ou o nome.
Evitar abreviao de comandos em 4 letras Pgina 266 Programao ADVPL II e Guia de Referncia
Apesar do ADVPL suportar a abreviao de comandos em quatro letras (por exemplo, repl no lugar de replace) no h necessidade de utilizar tal funcionalidade. Isto apenas torna o cdigo mais difcil de ler e no torna a compilao mais rpida ou simples.
Evitar "disfarces" no cdigo
No deve-se criar constantes para expresses complexas. Isto tornar o cdigo muito difcil de compreender e poder causar erros primrios, pois pode-se imaginar que uma atribuio efetuada a uma varivel quando na verdade h toda uma expresso disfarada:
#def i ne NUMLI NES aPr i nt Def s[ 1] #def i ne NUMPAGES aPr i nt Def s[ 2] #def i ne I SDI SK aRet ur n[ 5]
I f I SDI SK == 1 NUMLI NES : = 55 Endi f
NUMPAGES += 1
A impresso que se tem aps uma leitura deste cdigo de que valores esto sendo atribudos s variveis ou que constantes esto sendo utilizadas. Se o objetivo flexibilidade, o cdigo anterior deve ser substitudo por:
#def i ne NUMLI NES 1 #def i ne NUMPAGES 2 #def i ne I SDI SK 5
I f aRet ur n[ I SDI SK] == 1 aPr i nt Def s[ NUMLI NES ] : = 55 Endi f
aPr i nt Def s[ NUMPAGES ] += 1
Evitar cdigo de segurana desnecessrio
Dada sua natureza binria, tudo pode ou no acontecer dentro de um computador. Adicionar pedaos de cdigo apenas para "garantir a segurana" freqentemente utilizado como uma desculpa para evitar corrigir o problema real. Isto pode incluir a checagem para validar intervalos de datas ou para tipos de dados corretos, o que comumente utilizando em funes:
St at i c Funct i on Mul t Mal or ( nVal ) Programao ADVPL II e Guia de Referncia Pgina 267 I f Val Type( nVal ) ! = " N" nVal : = 0 Endi f Ret ur n ( nVal * nVal )
Pgina 268 Programao ADVPL II e Guia de Referncia O ganho irrisrio na checagem do tipo de dado do parmetro j que nenhum programa corretamente escrito em execuo poderia enviar uma string ou uma data para a funo. De fato, este tipo de "captura" o que torna a depurao difcil, j que o retorno ser sempre um valor vlido (mesmo que o parmetro recebido seja de tipo de dado incorreto). Se esta captura no tiver sido efetuada quando um possvel erro de tipo de dado invlido ocorrer, o cdigo pode ser corrigido para que este erro no mais acontea.
Isolamento de strings de texto
No caso de mensagens e strings de texto, a centralizao um bom negcio. Pode-se colocar mensagens, caminhos para arquivos, e mesmo outros valores em um local especfico. Isto os torna acessveis de qualquer lugar no programa e fceis de gerenciar.
Por exemplo, se existe uma mensagem comum como "Imprimindo, por favor aguarde..." em muitas partes do cdigo, corre-se o risco de no seguir um padro para uma das mensagens em algum lugar do cdigo. E mant-las em um nico lugar, como um arquivo de cabealho, torna fcil a produo de documentao e a internacionalizao em outros idiomas. Programao ADVPL II e Guia de Referncia Pgina 269 GUIA DE REFERNCIA RPIDA: FUNES E COMANDOS ADVPL Neste guia de referncia rpida sero descritas as funes bsicas da linguagem ADVPL, incluindo as funes herdadas da linguagem Clipper, necessrias ao desenvolvimento no ambiente ERP.
Converso entre tipos de dados
CTOD()
Realiza a converso de uma informao do tipo caracter no formato DD/MM/AAAA para uma varivel do tipo data.
E Sintaxe: CTOD(cData) E Parmetros
cData Caracter no formato DD/MM/AAAA
Exemplo:
cDat a : = 31/ 12/ 2006 dDat a : = CTOD( cDat a)
I F dDat aBase >= dDat a MSGALERT( Dat a do si st ema f or a da compet nci a) ELSE MSGI NFO( Dat a do si st ema dent r o da compet nci a) ENDI F
CVALTOCHAR()
Realiza a converso de uma informao do tipo numrico em uma string, sem a adio de espaos a informao.
E Sintaxe: CVALTOCHAR(nValor) E Parmetros
nValor Valor numrico que ser convertido para caractere.
Pgina 270 Programao ADVPL II e Guia de Referncia Exemplo:
FOR nPer cor r i dos : = 1 t o 10 MSGI NFO( Passos per cor r i dos: +Cval ToChar ( nPer cor r i dos) ) NEXT nPer cor r i dos
DTOC()
Realiza a converso de uma informao do tipo data para caracter, sendo o resultado no formato DD/MM/AAAA.
E Sintaxe: DTOC(dData) E Parmetros
dData Varivel com contedo data
Exemplo:
MSGI NFO( Dat abase do si st ema: +DTOC( dDat a)
DTOS()
Realiza a converso de uma informao do tipo data em um caracter, sendo o resultado no formato AAAAMMDD.
E Sintaxe: DTOS(dData) E Parmetros
dData Varivel com contedo data
Exemplo:
cQuer y : = SELECT A1_COD, A1_LOJ A, A1_NREDUZ FROM SA1010 WHERE cQuer y += A1_DULTCOM >= +DTOS( dDat aI ni ) +
STOD()
Realiza a converso de uma informao do tipo caracter com contedo no formato AAAAMMDD em data.
E Sintaxe: STOD(sData) E Parmetros
Programao ADVPL II e Guia de Referncia Pgina 271 sData String no formato AAAAMMDD
Exemplo:
sDat a : = LERSTR( 01, 08) / / Funo que r eal i za a l ei t ur a de uma string de umt xt pr evi ament e / / aber t o dDat a : = STOD( sDat a)
STR()
Realiza a converso de uma informao do tipo numrico em uma string, adicionando espaos direita.
E Sintaxe: STR(nValor) E Parmetros
nValor Valor numrico que ser convertido para caractere.
Exemplo:
FOR nPer cor r i dos : = 1 t o 10 MSGI NFO( Passos per cor r i dos: +Cval ToChar ( nPer cor r i dos) ) NEXT nPer cor r i dos
STRZERO()
Realiza a converso de uma informao do tipo numrico em uma string, adicionando zeros esquerda do nmero convertido, de forma que a string gerada tenha o tamanho especificado no parmetro.
E Sintaxe: STRZERO(nValor, nTamanho) E Parmetros
nValor Valor numrico que ser convertido para caractere. nTamanho Tamanho total desejado para a string retornada.
Exemplo:
FOR nPer cor r i dos : = 1 t o 10 MSGI NFO( Passos per cor r i dos: +Cval ToChar ( nPer cor r i dos) ) NEXT nPer cor r i dos
Pgina 272 Programao ADVPL II e Guia de Referncia
VAL()
Realiza a converso de uma informao do tipo caracter em numrica.
E Sintaxe: VAL(cValor) E Parmetros
cValor String que ser convertida para numrico.
Exemplo:
St at i c Funct i on Modul o11( cDat a) LOCAL L, D, P : = 0 L : = Len( cdat a) D : = 0 P : = 1 Whi l e L > 0 P : = P + 1 D : = D + ( Val ( SubSt r ( cDat a, L, 1) ) * P) I f P = 9 P : = 1 End L : = L - 1 End D : = 11 - ( mod( D, 11) ) I f ( D == 0 . Or . D == 1 . Or . D == 10 . Or . D == 11) D : = 1 End Ret ur n( D)
Matemticas
ACOS()
Funo utilizada para calcular o valor do arco co-seno.
E Sintaxe: ACOS(nValor)
E Parmetros:
nValor Valor entre -1 e 1 de quem ser calculado o Arco Co-Seno.
Programao ADVPL II e Guia de Referncia Pgina 273
E Retorno:
Numrico Range de 0 a radianos.
Se o valor informado no parmetro for menor que 1 ou maior que 1, acos retorna um valor indefinido por default [+ , -]
CEILING()
Funo utilizada para calcular o valor mais prximo possvel de um valor nMax informado como parmetro para a funo.
E Sintaxe: CELLING(nMax)
E Parmetros
nMax Valor limite para anlise da funo, no formato floating-point.
E Retorno:
Numrico Valor do tipo double, representando o menor inteiro que maior ou igual ao valor de nX. No h retorno de erro na funo.
COS()
Funo utilizada para calcular o valor do co-seno ou co-seno hiperblico.
Importante: Se x >= 2^63 ou x <= -2^63 ocorre perda significante na chamada da funo COS().
E Sintaxe: COS(nAngulo)
E Parmetros:
nAngulo Valor que representa o ngulo em radianos.
E Retorno:
Numrico Valor que representa o co-seno ou co-seno hiperblico do ngulo informado.
Pgina 274 Programao ADVPL II e Guia de Referncia
E Situaes invlidas:
Entrada Exceo apresentada Significado da Exceo QNAN,IND None Sem Domnio (cosf, cos) INVALID Sem Domnio x 7.104760e+002 (cosh, coshf) INEXACT+OVERFLOW OVERFLOW
LOG10()
Funo utilizada para calcular o logartmo natural de um valor numrico, em base 10.
LOG10() uma funo numrica que calcula o logaritmo natural de um nmero. O logaritmo natural tem como base o valor 10. Devido ao arredondamento matemtico, os valores retornados por LOG() podem no coincidir exatamente.
E Sintaxe: LOG10(nNatural)
E Parmetros:
nNatural Valor cujo o logaritmo deve ser encontrado.
E Retorno:
Numrico A funo retorna o logartmo de nNatural se bem sucedidas. Se nNatural for negativo, estas funes retornam um indefinido, pelo defeito. Se nNatural for 0, retornam INF(infinito).
SIN()
Funo utilizada para calcular o valor do seno ou seno hiperblico. Devemos informar como parmetro para a funo um valor que representa o ngulo em radianos.
Importante: Se x >= 2^63 ou x <= -2^63 ocorre perda significante na chamada da funo SIN().
E Sintaxe: SIN(nAngulo)
E Parmetros:
nAngulo Valor do ngulo em radianos.
E Retorno:
Numrico Retorna o valor do seno do ngulo especificado. Programao ADVPL II e Guia de Referncia Pgina 275
E Situaes invlidas:
Entrada Exceo apresentada Significado da Exceo QNAN,IND None Sem Domnio (senf, sen) INVALID Sem Domnio x 7.104760e+002 (senh, senhf) INEXACT+OVERFLOW OVERFLOW
SQRT()
Funo utilizada para calcular a raiz quadrada de um nmero positivo.
E Sintaxe: SQRT(nValor) E Parmetros:
nValor Um nmero positivo do qual ser calculada a raiz quadrada.
E Retorno:
Numrico Retorna um valor numrico calculado com preciso dupla. A quantidade de casas decimais exibidas determinada apenas por SET DECIMALS, sem importar a configurao de SET FIXED. Um nmero negativo <nValor> retorna zero.
TAN()
Funo utilizada para calcular o valor da tangente ou tangente hiperblica.
Importante: Se x >= 2^63 ou x <= -2^63 ocorre perda significante na chamada da funo cos.
E Sintaxe: TAN(nAngulo)
E Parmetros:
nAngulo Valor do ngulo em radianos.
E Retorno:
Numrico Retorna o valor da tangente do ngulo especificado.
E Situaes invlidas:
Entrada Exceo apresentada Significado da Exceo QNAN,IND None Sem Domnio INVALID Sem Domnio
Pgina 276 Programao ADVPL II e Guia de Referncia
Anlise de variveis
TYPE()
Determina o tipo do contedo de uma varivel, a qual no foi definida na funo em execuo.
E Sintaxe: TYPE(cVariavel)
E Parmetros
cVariavel Nome da varivel que se deseja avaliar, entre aspas ().
Exemplo: I F TYPE( dDat aBase) == D MSGI NFO( Dat abase do si st ema: +DTOC( dDat aBase) ) ELSE MSGI NFO( Var i vel i ndef i ni da no moment o) ENDI F
VALTYPE()
Determina o tipo do contedo de uma varivel, a qual no foi definida na funo em execuo.
E Sintaxe: VALTYPE(cVariavel)
E Parmetros
cVariavel Nome da varivel que se deseja avaliar.
Programao ADVPL II e Guia de Referncia Pgina 277 Exemplo: STATI C FUNCTI ON GETTEXTO( nTamanho, cTi t ul o, cSay) LOCAL cText o : = LOCAL nCol F, nLar gGet : = 0 PRI VATE oDl g Def aul t cTi t ul o : = " Tel a par a i nf or mar t ext o" Def aul t cSay : = " I nf or me o t ext o: " Def aul t nTamanho : = 1
nTamanho : = I I F( Val Type( nTamanho) ! = N, 1, nTamanho) / / Se o par met r o f oi passado cText o : = Space( nTamanho) ; nLar gGet : = Round( nTamanho * 2. 5, 0) ; nCol f : = Round( 195 + ( nLar gGet * 1. 75) , 0)
DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 000, 000 TO 120, nCol F PI XEL @005, 005 TO 060, Round( nCol F/ 2, 0) OF oDl g PI XEL @010, 010 SAY cSay SI ZE 55, 7 OF oDl g PI XEL @010, 065 MSGET cText o SI ZE nLar gGet , 11 OF oDl g PI XEL ; Pi ct ur e " @! " VALI D ! Empt y( cText o) DEFI NE SBUTTON FROM 030, 010 TYPE 1 ; ACTI ON ( nOpca : = 1, oDl g: End( ) ) ENABLE OF oDl g DEFI NE SBUTTON FROM 030, 040 TYPE 2 ; ACTI ON ( nOpca : = 0, oDl g: End( ) ) ENABLE OF oDl g ACTI VATE MSDI ALOG oDl g CENTERED cText o : = I I F( nOpca==1, cText o, " " ) RETURN cText o
Manipulao de arrays
AADD()
A funo AADD() permite a insero de um item em um array j existente, sendo que este item podem ser um elemento simples, um objeto ou outro array.
E Sintaxe: AADD(aArray, xItem)
E Parmetros
aArray Array pr-existente no qual ser adicionado o item definido em xItem xItem Item que ser adicionado ao array.
Pgina 278 Programao ADVPL II e Guia de Referncia Exemplo:
aDados : = {} / / Def i ne que a var i vel aDados umar r ay, sem especi f i car suas di menses. aI t em : = {} / / Def i ne que a var i vel aI t em umar r ay, sem especi f i car suas di menses.
AADD( aI t em, cVar i avel 1) / / Adi ci ona umel ement o no ar r ay aI t emde acor do como cVar i avel 1 AADD( aI t em, cVar i avel 2) / / Adi ci ona umel ement o no ar r ay aI t emde acor do como cVar i avel 2 AADD( aI t em, cVar i avel 3) / / Adi ci ona umel ement o no ar r ay aI t emde acor do como cVar i avel 3
/ / Nest e pont o o ar r ay a I t empossui 03 el ement os os quai s podemser acessados com: / / aI t em[ 1] - > cor r esponde ao cont edo de cVar i avel 1 / / aI t em[ 2] - > cor r esponde ao cont edo de cVar i avel 2 / / aI t em[ 3] - > cor r esponde ao cont edo de cVar i avel 3
AADD( aDados, aI t em) / / Adi ci ona no ar r ay aDados o cont edo do ar r ay aI t em
/ / Nest e pont o, o ar r ay a aDados possui apenas umel ement o, que t ambm umar r ay / / cont endo 03 el ement os: / / aDados [ 1] [ 1] - > cor r esponde ao cont edo de cVar i avel 1 / / aDados [ 1] [ 2] - > cor r esponde ao cont edo de cVar i avel 2 / / aDados [ 1] [ 3] - > cor r esponde ao cont edo de cVar i avel 3
AADD( aDados, aI t em) AADD( aDados, aI t em)
/ / Nest e pont o, o ar r ay aDados possui 03 el ement os, aonde cada qual umar r ay comout r os / / 03 el ement os, sendo:
/ / aDados [ 1] [ 1] - > cor r esponde ao cont edo de cVar i avel 1 / / aDados [ 1] [ 2] - > cor r esponde ao cont edo de cVar i avel 2 / / aDados [ 1] [ 3] - > cor r esponde ao cont edo de cVar i avel 3
/ / aDados [ 2] [ 1] - > cor r esponde ao cont edo de cVar i avel 1 / / aDados [ 2] [ 2] - > cor r esponde ao cont edo de cVar i avel 2 / / aDados [ 2] [ 3] - > cor r esponde ao cont edo de cVar i avel 3
/ / aDados [ 3] [ 1] - > cor r esponde ao cont edo de cVar i avel 1 / / aDados [ 3] [ 2] - > cor r esponde ao cont edo de cVar i avel 2 / / aDados [ 3] [ 3] - > cor r esponde ao cont edo de cVar i avel 3
Programao ADVPL II e Guia de Referncia Pgina 279 / / Dest a f or ma, o array aDados mont ando comuma est r ut ur a de 03 l i nhas e 03 col unas, com / / o cont edo def i ni do por var i vei s ext er nas, mas coma mesma f or ma obt i da como uso do / / comando: aDados : = ARRAY( 3, 3) .
ACLONE()
A funo ACLONE() realiza a cpia dos elementos de um array para outro array integralmente.
E Sintaxe: AADD(aArray)
E Parmetros
aArray Array pr-existente que ter seu contedo copiado para o array especificado.
Exemplo:
/ / Ut i l i zando o array aDados ut i l i zado no exempl o da f uno AADD( ) aI t ens : = ACLONE( aDados)
/ / Nest e pont o, o array aI t ens possui exat ament e a mesma est r ut ur a e i nf or maes do array / / aDados.
Por ser uma estrutura de memria, um array no pode ser simplesmente copiado para outro array atravs de uma atribuio simples (:=).
Para mais informaes sobre a necessidade de utilizar o comando ACLONE() verifique o tpico 6.1.3 Cpia de Arrays.
ACOPY()
Funo de array que copia elementos do array aOrigem para array aDestino. O array destino aDestino j deve ter sido declarado e grande o bastante para conter os elementos que sero copiados. Se o array aOrigem contiver mais elementos, alguns dos elementos no sero copiados. ACOPY() copia os valores de todos os dados, incluindo valores nulos (NIL) e cdigos de bloco.
Se um elemento for um subarray, o elemento correspondente no array aDestino, conter o mesmo subarray. Portanto, ACOPY() no produzir uma cpia completa de array multidimensionais. Pgina 280 Programao ADVPL II e Guia de Referncia
aOrigem o array que contm os elementos a serem copiados. aDestino o array que receber a cpia dos elementos. nInicio indica qual o ndice do primeiro elemento de aOrigem que ser copiado. Se no for especificado, o valor assumido ser 01. nQtde indica a quantidade de elementos a serem copiados a partir do array aOrigem. iniciando-se a contagem a partir da posio nInicio. Se nQtde no for especificado, todos os elementos do array aOrigem sero copiados, iniciando- se a partir da posio nInicio. nPosDestino a posio do elemento inicial no array aDestino que receber os elementos de aOrigem. Se no especificado, ser assumido 01.
E Retorno:
aDestino referncia ao array aDestino.
Exemplo:
LOCAL nCount : = 2, nSt ar t : = 1, aOne, aTwo aOne : = { 1, 1, 1 } aTwo : = { 2, 2, 2 } ACOPY( aOne, aTwo, nSt ar t , nCount ) / / Resul t : aTwo i s now { 1, 1, 2 }
ADEL()
A funo ADEL() permite a excluso de um elemento do array. Ao efetuar a excluso de um elemento, todos os demais so reorganizados de forma que a ultima posio do array passar a ser nula.
E Sintaxe: ADEL(aArray, nPosio)
E Parmetros
aArray Array do qual deseja-se remover uma determinada posio. nPosio Posio do array que ser removida.
Programao ADVPL II e Guia de Referncia Pgina 281 Exemplo:
/ / Ut i l i zando o array aI t ens do exempl o da f uno ACLONE( ) t emos:
ADEL( aI t ens, 1) / / Ser r emovi do o pr i mei r o el ement o do array aI t ens.
/ / Nest e pont o, o array aI t ens cont i nua com03 el ement os, aonde: / / aI t ens[ 1] - > ant i go aI t ens[ 2] , o qual f oi r eor denado como ef ei t o da excl uso do i t em1. / / aI t ens[ 2] - > ant i go aI t ens[ 3] , o qual f oi r eor denado como ef ei t o da excl uso do i t em1. / / aI t ens[ 3] - > cont edo nul o, por se t r at ar do i t emexcl u do.
ADIR()
Funo que preenche os arrays passados com os dados dos arquivos encontrados, atravs da mscara informada. Tanto arquivos locais (Remote) como do servidor podem ser informados.
Importante: ADir uma funo obsoleta, utilize sempre Directory().
cArqEspec Caminho dos arquivos a serem includos na busca de informaes. Segue o padro para especificao de arquivos, aceitando arquivos no servidor Protheus e no Cliente. Caracteres como * e ? so aceitos normalmente. Caso seja omitido, sero aceitos todos os arquivos do diretrio default ( *.* ). aNomeArq Array de Caracteres. o array com os nomes dos arquivos encontrados na busca.O contedo anterior do array apagado. aTamanho Array Numrico. So os tamanhos dos arquivos encontrados na busca. aData Array de Datas. So as datas de modificao dos arquivos encontrados na busca. aHora Array de Caracteres. So os horrios de modificao dos arquivos encontrados. Cada elemento contm horrio no formato: hh:mm:ss. aAtributos Array de Caracteres. So os atributos dos arquivos, caso esse array seja passado como parmetros, sero includos os arquivos com atributos de sistema e ocultos.
E Retorno:
nArquivos Quantidade de arquivos encontrados.
Pgina 282 Programao ADVPL II e Guia de Referncia Exemplo:
LOCAL aFi l es[ ADI R( " *. TXT" ) ] ADI R( " *. TXT" , aFi l es) AEVAL( aFi l es, { | el ement | QOUT( el ement ) })
AFILL()
Funo de manipulao de arrays, que preenche os elementos do array com qualquer tipo de dado. Incluindo code-block. Esta funo no deve ser usada para preencher um array com outro array.
aDestino o onde os dados sero preenchidos. xExpValor o dado que ser preenchido em todas as posies informadas, no permitida a utilizao de arrays. nInicio a posio inicial de onde os dados sero preenchidos, o valor padro 1. nCount Quantidade de elementos a partir de [nInicio] que sero preenchidos com <expValor>, caso no seja informado o valor ser a quantidade de elementos at o final do array.
E Retorno:
aDestino Retorna uma referncia para aDestino.
Exemplo:
LOCAL aLogi c[ 3] / / Resul t ado: aLogi c { NI L, NI L, NI L } AFI LL( aLogi c, . F. ) / / Resul t ado: aLogi c { . F. , . F. , . F. } AFI LL( aLogi c, . T. , 2, 2) / / Resul t ado: aLogi c { . F. , . T. , . T. }
Programao ADVPL II e Guia de Referncia Pgina 283 AINS()
A funo AINS() permite a insero de um elemento no array especificado em qualquer ponto da estrutura do mesmo, diferindo desta forma da funo AADD() a qual sempre insere um novo elemento ao final da estrutura j existente.
E Sintaxe: AINS(aArray, nPosicao)
E Parmetros
aArray Array pr-existente no qual desejasse inserir um novo elemento. nPosicao Posio na qual o novo elemento ser inserido.
Exemplo:
aAl unos : = {Edson, Robson, Renat o, Tat i ana}
AI NS( aAl unos, 3) / / Nest e pont o o ar r ay aAl unos t er o segui nt e cont edo: / / {Edson, Robson, nul o, Renat o, Tat i ana}
Similar ao efeito da funo ADEL(), o elemento inserido no array pela funo AINS() ter um contedo nulo, sendo necessrio trata-lo aps a realizao deste comando.
ARRAY()
A funo Array() utilizada na definio de variveis de tipo array, como uma opo a sintaxe utilizando chaves ({}).
E Sintaxe: Array(nLinhas, nColunas)
E Parmetros
nLinhas Determina o nmero de linhas com as quais o array ser criado. nColunas Determina o nmero de colunas com as quais o array ser criado.
Exemplo:
aDados : = Ar r ay( 3, 3) / / Cr i a umarray de t r s l i nhas, cada qual com 3 col unas.
Pgina 284 Programao ADVPL II e Guia de Referncia
O array definido pelo comando Array() apesar de j possuir a estrutura solicitada, no possui contedo em nenhum de seus elementos, ou seja:
aDados[1] -> array de trs posies aDados[1][1] -> posio vlida, mas de contedo nulo.
ASCAN()
A funo ASCAN() permite que seja identificada a posio do array que contm uma determinada informao, atravs da anlise de uma expresso descrita em um bloco de cdigo.
E Sintaxe: ASCAN(aArray, bSeek)
E Parmetros
aArray Array pr-existente no qual desejasse identificar a posio que contm a informao pesquisada. bSeek Bloco de cdigo que configura os parmetros da busca a ser realizada.
Exemplo:
aAl unos : = {Mr ci o, Deni s, Ar nal do, Pat r ci a}
bSeek : = {| x| x == Deni s}
nPosAl uno : = aScan( aAl unos, bSeek) / / r et or no esper ado 2
Durante a execuo da funo aScan, a varivel x receber o contedo o item que est posicionado no momento, no caso aAlunos[x]. Como aAlunos[x] uma posio do array que contm o nome do aluno, x poderia ser renomeada para cNome, e a definio do bloco bSeek poderia ser escrita como:
bSeek := {|cNome| cNome == Denis}
Na definio dos programas sempre recomendvel utilizar variveis com nomes significativos, desta forma os blocos de cdigo no so exceo.
Sempre opte por analisar como o bloco de cdigo ser utilizado e ao invs de x, y e similares, defina os parmetros com nomes que representem seu contedo. Ser mais simples o seu entendimento e o entendimento de outros que forem analisar o cdigo escrito.
Programao ADVPL II e Guia de Referncia Pgina 285 ASCANX() Funo utilizada para varrer um vetor procurando um valor especificado, operando de forma similar a funo ASCAN. A diferena fundamental da funo ASCANX que esta funo recebe um segundo parmetro em seu code-block representando o ndice do array. E Sintaxe: ASCANX ( < xDestino > , < bSeek > , [ nInicio ] , [ nCont ] )
E Parmetros:
xDestino Representa o objeto a ser varrido pela funo, pode ser atribudo ao parmetro um array um Objeto. bSeek Representa o valor que ser pesquisado, podendo ser um bloco de cdigo. nInicio Representa o elemento a partir do qual ter inicio a pesquisa, quando este argumento no for informado o valor default ser 1. nCont Representa a quantidade de elementos que sero pesquisados a partir da posio inicial, quando este argumento no for informado todos elementos do array sero pesquisados.
No cdigo demonstrado acima, note a incluso no code-block do Y, onde a funo ir terminar sua execuo em 3 condies:
1) At encontrar o elemento no ARRAY com a ocorrncia cNome, retornando a posio desse elemento.
2) Essa novidade, ASCANX ir verificar o Array at a posio 100.
3) O elemento cNome no foi encontrado no ARRAY e a condio de Y at 100 no satisfaz, pois o array menor do que 100 posies!
Como ASCAN() que utiliza o operador (=) para comparaes, a funo ASCANX() tambm case sensitive, no caso os elementos procurados devem ser exatamente igual.
Pgina 286 Programao ADVPL II e Guia de Referncia ASIZE()
A funo ASIZE permite a redefinio da estrutura de um array pr-existente, adicionando ou removendo itens do mesmo.
E Sintaxe: ASIZE(aArray, nTamanho)
E Parmetros
aArray Array pr-existente que ter sua estrutura redimensionada. nTamanho Tamanho com o qual deseja-se redefinir o array. Se o tamanho for menor do que o atual, sero removidos os elementos do final do array, j se o tamanho for maior do que o atual sero inseridos itens nulos ao final do array.
Exemplo:
/ / Ut i l i zando o array aI t ens, o qual t eve umel ement o excl u do pel o uso da f uno ADEL( )
ASI ZE( aI t ens, Len( aI t ens- 1) )
/ / Nest e pont o o array aI t ens possui 02 el ement os, ambos com cont edos vl i dos.
Utilizar a funo ASIZE() aps o uso da funo ADEL() uma prtica recomendada e evita que seja acessada uma posio do array com um contedo invlido para a aplicao em uso.
ASORT()
A funo ASORT() permite que os itens de um array sejam ordenados a partir de um critrio pr-estabelecido.
E Sintaxe: ASORT(aArray, nInicio, nItens, bOrdem)
E Parmetros
aArray Array pr-existente que ter seu contedo ordenado atravs de um critrio estabelecido. nInicio Posio inicial do array para incio da ordenao. Caso no seja informado, o array ser ordenado a partir de seu primeiro elemento. nItens Quantos itens, a partir da posio inicial devero ser ordenados. Caso no seja informado, sero ordenados todos os elementos do array. bOrdem Bloco de cdigo que permite a definio do critrio de ordenao do array. Caso bOrdem no seja informado, ser utilizado o critrio ascendente. Programao ADVPL II e Guia de Referncia Pgina 287
Um bloco de cdigo basicamente uma funo escrita em linha. Desta forma sua estrutura deve suportar todos os requisitos de uma funo, os quais so atravs da anlise e interpretao de parmetros recebidos, executar um processamento e fornecer um retorno.
Com base nesse requisito, pode-se definir um bloco de cdigo com a estrutura abaixo:
|| -> define o intervalo onde esto compreendidos os parmetros Ao Z-> expresso que ser executadas pelo bloco de cdigo Ao1... AoZ -> intervalo de expresses que sero executadas pelo bloco de cdigo, no formato de lista de expresses.
Retorno -> resultado da ultima ao executada pelo bloco de cdigo, no caso AoZ.
Para maiores detalhes sobre a estrutura e utilizao de blocos de cdigo consulte o tpico 6.2 Listas de Expresses e Blocos de cdigo.
Exemplo 01 Ordenao ascendente
aAl unos : = { Maur en, Sor ai a, Andr i a}
aSor t ( aAl unos)
/ / Nest e pont o, os el ement os do array aAl unos ser o {Andr i a, Maur en, Sor ai a}
Pgina 288 Programao ADVPL II e Guia de Referncia Exemplo 02 Ordenao descendente
aAl unos : = { Maur en, Sor ai a, Andr i a} bOr dem: = {| x, y| x > y }
/ / Dur ant e a execuo da f uno aSor t ( ) , a var i vel x r eceber o cont edo do i t emque est / / posi ci onado. Como o i t emque est posi ci onado a posi o aAl unos[ x] e aAl unos[ x] - > / / string cont endo o nome de umal uno, pode- se subst i t ui r x por cNomeAt u. / / A var i vel y r eceber o cont edo do pr xi mo i t ema ser aval i ado, e usando a mesma / / anal ogi a de x, pode- se subst i t ui r y por cNomePr ox. Dest a f or ma o bl oco de cdi go / / bOr dempode ser r e- escr i t o como:
bOr dem: = {| cNomeAt u, cNomePr ox| cNomeAt u > cNomePr ox}
aSor t ( aAl unos, , bOr dem)
/ / Nest e pont o, os el ement os do ar r ay aAl unos ser o {Sor ai a , Maur en, Andr i a}
ATAIL()
ATAIL() uma funo de manipulao de array que retorna o ltimo elemento de um array. Ela deve ser usada em substituio da seguinte construo: aArray [LEN( aArray )]
E Sintaxe: ATAIL( aArray )
E Parmetros:
aArray o array de onde ser retornado o ltimo elemento.
E Retorno:
nUltimo Nmero do ltimo elemento do array.
Exemplo:
aAr r ay : = {" a" , " b" , " c" , " d" } ATAI L( aAr r ay) / / Resul t ado: d
Manipulao de blocos de cdigo
Programao ADVPL II e Guia de Referncia Pgina 289 EVAL()
A funo EVAL() utilizada para avaliao direta de um bloco de cdigo, utilizando as informaes disponveis no mesmo de sua execuo. Esta funo permite a definio e passagem de diversos parmetros que sero considerados na interpretao do bloco de cdigo.
E Sintaxe: EVAL(bBloco, xParam1, xParam2, xParamZ)
E Parmetros
bBloco Bloco de cdigo que ser interpretado. xParamZ Parmetros que sero passados ao bloco de cdigo. A partir da passagem do bloco, todos os demais parmetros da funo sero convertidos em parmetros para a interpretao do cdigo.
Exemplo:
nI nt : = 10 bBl oco : = {| N| x: = 10, y: = x*N, z: = y/ ( x*N) } nVal or : = EVAL( bBl oco, nI nt ) / / O r et or no ser dado pel a aval i ao da ul t i ma ao da l i st a de expr esses, no caso z. / / Cada uma das var i vei s def i ni das emuma das aes da l i st a de expr esses f i ca di spon vel / / par a a pr xi ma ao. / / Dest a f or ma t emos: / / N r ecebe nI nt como par met r o ( 10) / / X t emat r i bu do o val or 10 ( 10) / / Y r esul t ado da mul t i pl i cao de X por N ( 100) / / Z r esul t ado a di vi so de Y pel a mul t i pl i cao de X por N ( 100 / 100) 1
DBEVAL()
A funo DBEval() permite que todos os registro de uma determinada tabela sejam analisados e para cada registro ser executado o bloco de cdigo definido.
E Sintaxe: Array(bBloco, bFor, bWhile)
E Parmetros
bBloco Bloco de cdigo principal, contendo as expresses que sero avaliadas para cada registro do alias ativo.
bFor Condio para continuao da anlise dos registros, com o efeito de uma Pgina 290 Programao ADVPL II e Guia de Referncia estrutura For ... Next.
bWhile Condio para continuao da anlise dos registros, com o efeito de uma estrutura While ... End.
Exemplo 01: / / Consi der ando o t r echo de cdi go abai xo: dbSel ect Ar ea( SX5) dbSet Or der ( 1) dbGot op( )
While ! Eof ( ) . And. X5_FI LI AL == xFi l i al ( " SX5" ) . And. ; X5_TABELA <= mv_par 02 nCnt ++ dbSki p( ) End
/ / O mesmo pode ser r e- escr i t o como uso da f uno DBEVAL( ) : dbEval ( {| x| nCnt ++ }, , {| | X5_FI LI AL==xFi l i al ( " SX5" ) . And. X5_TABELA<=mv_par 02})
Exemplo 02: / / Consi der ando o t r echo de cdi go abai xo: dbSel ect Ar ea( SX5) dbSet Or der ( 1) dbGot op( )
While ! Eof ( ) . And. X5_TABELA == cTabel a AADD( aTabel a, {X5_CHAVE, Capi t al ( X5_DESCRI ) }) dbSki p( ) End
/ / O mesmo pode ser r e- escr i t o como uso da f uno DBEVAL( ) :
dbEval ( {| | AADD( aTabel a, {X5_CHAVE, Capi t al ( X5_DESCRI ) }) }, , {| | X5_TABELA==cTabel a})
Na utilizao da funo DBEVAL() deve ser informado apenas um dos dois parmetros: bFor ou bWhile.
Programao ADVPL II e Guia de Referncia Pgina 291 AEVAL()
A funo AEVAL() permite que todos os elementos de um determinada array sejam analisados e para cada elemento ser executado o bloco de cdigo definido.
E Sintaxe: AEVAL(aArray, bBloco, nInicio, nFim)
E Parmetros
aArray Array que ser avaliado na execuo da funo. bBloco Bloco de cdigo principal, contendo as expresses que sero avaliadas para cada elemento do array informado.
nInicio Elemento inicial do array, a partir do qual sero avaliados os blocos de cdigo. nFim Elemento final do array, at o qual sero avaliados os blocos de cdigo.
Exemplo 01:
Considerando o trecho de cdigo abaixo:
AADD( aCampos, A1_FI LI AL) AADD( aCampos, A1_COD) SX3- >( dbSet Or der ( 2) ) For nX: =1 To Len( aCampos) SX3- >( dbSeek( aCampos[ nX] ) ) AADD( aTi t ul os, Al l Tr i m( SX3- >X3_TI TULO) ) Next nX
O mesmo pode ser re-escrito com o uso da funo AEVAL():
aEval ( aCampos, {| x| SX3- >( dbSeek( x) ) , I I F( Found( ) , AADD( aTi t ul os, ; Al l Tr i m( SX3- >X3_TI TULO) ) ) })
Manipulao de strings
ALLTRIM()
Retorna uma string sem os espaos direita e esquerda, referente ao contedo informado como parmetro.
A funo ALLTRIM() implementa as aes das funes RTRIM (right trim) e LTRIM (left trim).
E Sintaxe: ALLTRIM(cString)
Pgina 292 Programao ADVPL II e Guia de Referncia E Parmetros
cString String que ser avaliada para remoo dos espaos a direita e a esquerda.
Exemplo:
cNome : = ALLTRI M( SA1- >A1_NOME)
MSGI NFO( Dados do campo A1_NOME: +CRLF Tamanho: + CVALTOCHAR( LEN( SA1- >A1_NOME) ) +CRLF Text o: + CVALTOCHAR( LEN( cNome) ) )
ASC()
Converte uma informao caractere em seu valor de acordo com a tabela ASCII.
E Sintaxe: ASC(cCaractere)
E Parmetros
cCaractere Caracter que ser consultado na tabela ASCII.
Exemplo:
USER FUNCTI ON NoAcent o( Ar g1) Local nCont a : = 0 Local cLet r a : = " " Local cRet : = " " Ar g1 : = Upper ( Ar g1) For nCont a: = 1 To Len( Ar g1) cLet r a : = SubSt r ( Ar g1, nCont a, 1) Do Case Case ( Asc( cLet r a) > 191 . and. Asc( cLet r a) < 198) . or . ; ( Asc( cLet r a) > 223 . and. Asc( cLet r a) < 230) cLet r a : = " A" Case ( Asc( cLet r a) > 199 . and. Asc( cLet r a) < 204) . or . ; ( Asc( cLet r a) > 231 . and. Asc( cLet r a) < 236) cLet r a : = " E"
Case ( Asc( cLet r a) > 204 . and. Asc( cLet r a) < 207) . or . ; ( Asc( cLet r a) > 235 . and. Asc( cLet r a) < 240) cLet r a : = " I "
Case ( Asc( cLet r a) > 209 . and. Asc( cLet r a) < 215) . or . ; ( Asc( cLet r a) == 240) . or . ( Asc( cLet r a) > 241 . and. Asc( cLet r a) < 247) Programao ADVPL II e Guia de Referncia Pgina 293 cLet r a : = " O"
Case ( Asc( cLet r a) > 216 . and. Asc( cLet r a) < 221) . or . ; ( Asc( cLet r a) > 248 . and. Asc( cLet r a) < 253) cLet r a : = " U"
Case Asc( cLet r a) == 199 . or . Asc( cLet r a) == 231 cLet r a : = " C"
EndCase
cRet : = cRet +cLet r a
Next
Ret ur n UPPER( cRet )
AT()
Retorna a primeira posio de um caracter ou string dentro de outra string especificada.
E Sintaxe: AT(cCaractere, cString )
E Parmetros
cCaractere Caractere ou string que se deseja verificar. cString String na qual ser verificada a existncia do contedo de cCaractere.
Exemplo: STATI C FUNCTI ON NOMASCARA( cSt r i ng, cMascar a, nTamanho)
LOCAL cNoMascar a : = " " LOCAL nX : = 0
I F ! Empt y( cMascar a) . AND. AT( cMascar a, cSt r i ng) > 0 FOR nX : = 1 TO Len( cSt r i ng) I F ! ( SUBSTR( cSt r i ng, nX, 1) $ cMascar a) cNoMascar a += SUBSTR( cSt r i ng, nX, 1) ENDI F NEXT nX cNoMascar a : = PADR( ALLTRI M( cNoMascar a) , nTamanho) ELSE cNoMascar a : = PADR( ALLTRI M( cSt r i ng) , nTamanho) ENDI F
RETURN cNoMascar a Pgina 294 Programao ADVPL II e Guia de Referncia BITON()
Funo utilizada para ligar determinados bits de uma String passada por parmetro para a funo. Alm da string a ser alterada, a funo tambm recebe como parmetro um numrico que indica o bit de incio a ser alterado, um numrico que indica a quantidade de bits a serem alterados(ligados) e o tamanho da string passada.
cValue String no qual desejamos ligar os bits. nBitIni Indica a partir de qual bit, comear a ser ligados os bits na String. nBitEnd Indica a quantidade de bits que sero ligados a partir do incio. nStrLen Representa o tamanho da String passada para a funo.
CAPITAL()
Funo que avalia a string passada como parmetro alterando a primeira letra de cada palavra para maiscula e as demais letras como minsculas.
E Sintaxe: CAPITAL(cFrase)
E Parmetros:
cFrase String a ser avaliada.
E Retorno:
String Contedo da string original com as modificaes necessrias para atender a condio da funo.
CHR()
Converte um valor nmero referente a uma informao da tabela ASCII no caractere que esta informao representa.
E Sintaxe: CHR(nASCII)
E Parmetros
nASCII Cdigo ASCII do caractere
Programao ADVPL II e Guia de Referncia Pgina 295 Exemplo:
#DEFI NE CRLF CHR( 13) +CHR( 10) / / FI NAL DE LI NHA
DESCEND()
Funo de converso que retorna a forma complementada da expresso string especificada. Esta funo normalmente utilizada para a criao de indexadores em ordem decrescente
E Sintaxe: DESCEND ( < cString > )
E Parmetros:
cString Corresponde seqncia de caracteres a ser analisada.
E Retorno:
Caracter
String complementada da string analisada.
Exemplo:
/ / Est e exempl o ut i l i za DESCEND( ) emuma expr esso I NDEX par a cr i ar um ndi ce de dat as de / / or demdescendent e:
USE Sal es NEW I NDEX ON DESCEND( DTOS( Or dDat e) ) TO Sal esDat e
/ / Depoi s, DESCEND( ) pode ser ut i l i zado par a f azer uma pesqui sa ( SEEK) no ndi ce / / descendent e:
DbSEEK( DESCEND( DTOS( dFi ndDat e) ) )
GETDTOVAL()
Funo utilizada para retornar um numero formatado, de acordo com o valor passado por parmetro, sendo que ir apenas manter os valores numricos contidos na string passada por parmetro, verificando se existe algum caractere '.' retornando um nmero fracionrio, na ordem dos nmeros contidos na string.
A funo muito til quando desejamos utilizar o valor numrico de uma data que est contida em uma string. Pgina 296 Programao ADVPL II e Guia de Referncia
E Sintaxe: GETDTOVAL ( < cDtoVal > )
E Parmetros:
cDtoVal Representa uma string contendo um valor numrico no qual ser convertido.
E Retorno:
Numrico Retorna um dado numrico de acordo com o valor informado em <cDtoVal>.
Exemplo:
Get Dt oVal ( ' 123456' ) / / r et or no 123456. 0000 Get Dt oVal ( ' 1/ 2/ 3/ 4/ 5/ 6' ) / / r et or no 123456. 0000 Get Dt oVal ( ' f i m. 123456' ) / / r et or no 0. 123456 Get Dt oVal ( ' t est e' ) / / r et or no 0. 0
ISALPHA()
Funo utilizada para determinar se o caractere mais esquerda em uma cadeia de caracteres alfabtico, permitindo avaliar se o string especificado comea com um caractere alfabtico. Um caractere alfabtico consiste em qualquer letra maiscula ou minscula de A a Z.
E Sintaxe: ISALPHA ( < cString > )
E Parmetros:
cString Cadeia de caracteres a ser examinada.
E Retorno:
Lgico Retorna verdadeiro (.T.) se o primeiro caractere em <cString> for alfabtico, caso contrrio, retorna falso (.F.).
ISDIGIT()
Funo utilizada para determinar se o caractere mais esquerda em uma cadeia de caracteres um dgito, permitindo avaliar se o primeiro caractere em um string um dgito numrico entre zero e nove.
E Sintaxe: ISDIGIT ( < cString > )
Programao ADVPL II e Guia de Referncia Pgina 297 E Parmetros:
cString Cadeia de caracteres a ser examinada.
E Retorno:
Lgico Retorna verdadeiro (.T.) caso o primeiro caractere da cadeia seja um dgito entre zero e nove; caso contrrio, retorna falso (.F.).
ISLOWER()
Funo utilizada para determinar se o caractere mais esquerda uma letra minscula, permitindo avaliar se o primeiro caractere de um string uma letra minscula. o contrrio de ISUPPER(), a qual determina se a cadeia de caracteres comea com uma letra maiscula. ISLOWER() e ISUPPER() ambas so relacionadas s funes LOWER() e UPPER(), que convertem caracteres minsculos para maisculos, e vice-versa.
E Sintaxe: ISLOWER( < cString > )
E Parmetros:
cString Cadeia de caracteres a ser examinada.
E Retorno:
Lgico Retorna verdadeiro (.T.) caso o primeiro caractere da cadeia seja minsculo, caso contrrio, retorna falso (.F.).
ISUPPER()
Funo utilizada para determinar se o caractere mais esquerda uma letra maiscula, permitindo avaliar se o primeiro caractere de um string uma letra maiscula. o contrrio de ISLOWER (), a qual determina se a cadeia de caracteres comea com uma letra minscula. ISLOWER() e ISUPPER() ambas so relacionadas s funes LOWER() e UPPER(), que convertem caracteres minsculos para maisculos, e vice-versa.
E Sintaxe: ISUPPER( < cString > )
E Parmetros:
cString Cadeia de caracteres a ser examinada.
E Retorno:
Lgico Retorna verdadeiro (.T.) caso o primeiro caractere da cadeia seja maisculo, caso contrrio, retorna falso (.F.). Pgina 298 Programao ADVPL II e Guia de Referncia
LEN()
Retorna o tamanho da string especificada no parmetro.
E Sintaxe: LEN(cString)
E Parmetros
cString String que ser avaliada.
Exemplo:
cNome : = ALLTRI M( SA1- >A1_NOME) MSGI NFO( Dados do campo A1_NOME: +CRLF Tamanho: + CVALTOCHAR( LEN( SA1- >A1_NOME) ) +CRLF Text o: + CVALTOCHAR( LEN( cNome) ) )
LOWER()
Retorna uma string com todos os caracteres minsculos, tendo como base a string passada como parmetro.
E Sintaxe: LOWER(cString)
E Parmetros
cString String que ser convertida para caracteres minsculos.
Exemplo:
cText o : = ADVPL
MSGI NFO( Text o: +LOWER( cText o) )
LTRIM()
Funo para tratamento de caracteres utilizada para formatar cadeias de caracteres que possuam espaos em branco esquerda. Pode ser o caso de, por exemplo, nmeros convertidos para cadeias de caracteres atravs da funo STR().
LTRIM() relacionada a RTRIM(), a qual remove espaos em branco direita, e a ALLTRIM(), que remove espaos tanto esquerda quanto direita.
Programao ADVPL II e Guia de Referncia Pgina 299 O contrrio de ALLTRIM(), LTRIM(), e RTRIM() so as funes PADC(), PADR(), e PADL(), as quais centralizam, alinham direita, ou alinham esquerda as cadeias de caracteres, atravs da insero de caracteres de preenchimento.
E Sintaxe: LTRIM ( < cString > )
E Parmetros:
cString <cString> a cadeia de caracteres a ser copiada sem os espaos em branco esquerda.
E Retorno:
Caracter LTRIM() retorna uma cpia de <cString>, sendo que os espaos em branco esquerda foram removidos. Caso <cString> seja uma cadeia de caracteres nula ("") ou toda composta de espaos em branco, LTRIM() retorna uma cadeia de caracteres nula ("").
MATHC()
Funo utilizada para realizar operaes matemticas com strings que contm um valor numrico. MATHC() realiza algumas operaes matemticas como: Soma, Subtrao, Diviso, Multiplicao e Exponenciao.
A funo ir retornar uma string contendo o resultado da operao matemtica, com uma especificao de at 18 casas de preciso no nmero.
cNum1 String contendo um valor numrico, representando o numero no qual desejamos realizar uma operao. cOperacao Representa a string que indica a operao que desejamos realizar. Olhar na tabela para verificar quais valores devem ser informados aqui. cNum2 String contendo um valor numrico, representando o numero no qual desejamos realizar uma operao.
E Retorno:
Caracter Retorna uma nova string contendo o resultado matemtico da operao.
Pgina 300 Programao ADVPL II e Guia de Referncia OEMTOANSI()
Funo que transforma uma string no Formato OEM / MS-DOS Text para uma string ANSI Text ( formato do Windows ).
Quando utilizamos um programa baseado no MS-DOS para alimentar uma base de dados, os acentos e caracteres especiais so gravados como texto OEM. Para tornar possvel a correta visualizao destes dados em uma interface Windows, utilizamos a funo OemToAnsi() para realizar a converso.
Ao utilizarmos um programa baseado no Windows para alimentar uma base de dados, o texto capturado no formato ANSI Text. Caso este texto seja utilizado para alimentar uma base de dados a ser acessada atravs de um programa MS-DOS, devemos converter o dado para OEM antes de grav-lo, atravs da funo AnsiToOem().
E Sintaxe: OemToAnsi ( < cStringOEM > )
E Parmetros:
cStringOEM String em formato OEM - MsDos a ser convertida.
E Retorno:
Caracter String convertida para ser exibida no Windows ( Formato ANSI ).
PADL() / PADR() / PADC()
Funes de tratamento de strings que inserem caracteres de preenchimento para completar um tamanho previamente especificado em vrios formatos como data ou numricos.
O PADC() centraliza <cExp>, adicionando caracteres de preenchimento direita e esquerda. O PADL() adiciona caracteres de preenchimento esquerda. O PADR() adiciona caracteres de preenchimento direita.
Caso o tamanho de <cExp> exceda o argumento <nTamanho>, todas as funes PAD() truncam string preenchida ao <nTamanho> especificado.
PADC(), PADL(), e PADR() so utilizadas para exibir cadeias de caracteres de tamanho varivel em uma rea de tamanho fixo. Elas podem ser usadas, por exemplo, para assegurar o alinhamento com comandos consecutivos. Outra utilizao exibir textos em uma tela de tamanho fixo, para certificar-se de que o texto anterior foi completamente sobrescrito.
PADC(), PADL(), e PADR() so o contrrio das funes ALLTRIM(), LTRIM(), e LTRIM(), as quais eliminam espaos em branco esquerda e direita de cadeias de caracteres. Programao ADVPL II e Guia de Referncia Pgina 301
cExp Caractere, data, ou numrico no qual sero inseridos caracteres de preenchimento. nTamanho Tamanho da cadeia de caracteres a ser retornada. cCaracPreench Caractere a ser inserido em cExp. Caso no seja especificado, o padro o espao em branco.
E Retorno:
Caracter Retornam o resultado de <cExp> na forma de uma cadeia de caracteres preenchida com <cCaracPreench>, para totalizar o tamanho especificado por <nTamanho>.
RAT()
Retorna a ltima posio de um caracter ou string dentro de outra string especificada.
E Sintaxe: RAT(cCaractere, cString)
E Parmetros
cCaractere Caractere ou string que se deseja verificar cString String na qual ser verificada a existncia do contedo de cCaractere.
REPLICATE()
A funo Replicate() utilizada para gerar uma cadeira de caracteres repetidos a partir de um caracter base informado, podendo a string gerada conter at 64KB. Caso seja especificado no parmetro de itens a repetir o nmero zero, ser retornada uma string vazia.
E Sintaxe: REPLICATE(cString, nCount)
E Parmetros:
cString Caracter que ser repetido. nCount Quantidade de ocorrncias do caracter base que sero geradas na string de destino.
Pgina 302 Programao ADVPL II e Guia de Referncia E Retorno:
cReplicated String contendo as ocorrncias de repeticao geradas para o caracter informado.
RTRIM()
Funo para tratamento de caracteres utilizada para formatar cadeias de caracteres que contenham espaos em branco direita. Ela til quando voc deseja eliminar espaos em branco direita ao se concatenar cadeias de caracteres. o caso tpico de campos de banco de dados que so armazenados em formato de tamanho fixo. Por exemplo, voc pode usar RTRIM() para concatenar o primeiro e o ltimo campos de nome para formar uma cadeia de caracteres de nome.
LTRIM() relacionada a RTRIM(), que remove espaos em branco direita, e a ALLTRIM(), que remove espaos em branco direita e esquerda.
O contrrio de ALLTRIM(), LTRIM(), e RTRIM() so as funes PADC(), PADR(), e PADL(), as quais centralizam, alinham direita, ou alinham esquerda cadeias de caracteres, inserindo caracteres de preenchimento.
E Sintaxe: RTRIM ( < cString > ) --> cTrimString
E Parmetros:
cString <cString> a cadeia de caracteres a ser copiada sem os espaos em branco direita.
E Retorno:
Caracter
RTRIM() retorna uma cpia de <cString>, sendo que os espaos em branco direita foram removidos. Caso <cString> seja uma cadeia de caracteres nula ("") ou totalmente composta por espaos, RTRIM() retorna uma cadeia de caracteres nula ("").
SPACE()
Funo de tratamento de caracteres utilizada para retornar uma quantidade especificada de espaos. A utilizao desta funo tem o mesmo efeito que REPLICATE(' ', <nCont>), e normalmente utilizada para inicializar uma varivel do tipo caractere, antes que a mesma seja associada a um GET.
Sintaxe: SPACE ( < nCont > )
Programao ADVPL II e Guia de Referncia Pgina 303 E Parmetros:
nCont A quantidade de espaos a serem retornados, sendo que o nmero mximo 65.535 (64K).
E Retorno:
Caracter Retorna uma cadeia de caracteres. Se <nCont> for zero, SPACE()retorna uma cadeia de caracteres nula ("").
STRTOKARR()
Funo utilizada para retornar um array, de acordo com os dados passados como parmetro para a funo. Esta funo recebe uma string <cValue> e um caracter <cToken> que representa um separador, e para toda ocorrncia deste separador em <cValue> adicionado um item no array.
E Sintaxe: STRTOKARR ( < cValue > , < cToken > )
E Parmetros:
cValue Representa a cadeia de caracteres no qual desejamos separar de acordo com <cToken>. cToken Representa o caracter que indica o separador em <cValue>.
E Retorno:
Array Array de caracteres que representa a string passada como parmetro.
Funo utilizada para realizar a busca da ocorrncia da string, sendo case sensitive.
E Sintaxe: STRTRAN ( < cString > , < cSearch > , [ cReplace ] , [ nStart ] , [ nCount ] ) Pgina 304 Programao ADVPL II e Guia de Referncia
E Parmetros:
cString Seqncia de caracteres ou campo memo a ser pesquisado. cSearch Seqncia de caracteres a ser procurada em cString. cReplace Seqncia de caracteres que deve substituir a string cSearch. Caso no seja especificado, as ocorrncias de cSearch em cString sero substitudas por uma string nula (""). nStart nStart corresponde ao nmero seqencial da primeira ocorrncia de cSEarch em cString a ser substituda por cReplace. Se este argumento for omitido , o default 1 ( um ). Caso seja passado um nmero menor que 1, a funo retornar uma string em branco (""). nCount nCount corresponde ao nmero mximo de trocas que dever ser realizada pela funo. Caso este argumento no seja especificado, o default substituir todas as ocorrncias encontradas.
E Retorno:
Code-Block
A funo STRTRAN retorna uma nova string, com as ocorrncias especificadas de cSearch trocadas para cReplace, conforme parametrizao.
STUFF()
Funo que permite substituir um contedo caractere em uma string j existente, especificando a posio inicial para esta adio e o nmero de caracteres que sero substitudos.
E Sintaxe: STUFF(cString, nPosInicial, nExcluir, cAdicao)
E Parmetros:
cString A cadeia de caracteres destino na qual sero eliminados e inseridos caracteres. nPosInicial A posio inicial na cadeia de caracteres destino onde ocorre a insero/eliminao. nExcluir A quantidade de caracteres a serem eliminados. cAdicao A cadeia de caracteres a ser inserida.
E Retorno:
Caracter Retorna a nova string gerada pela funo com as modificaes.
Programao ADVPL II e Guia de Referncia Pgina 305 Exemplo:
cLi n : = Space( 100) +cEOL / / Cr i a a string base cCpo : = PADR( SA1- >A1_FI LI AL, 02) / / I nf or mao que ser ar mazenada na string cLi n : = St uf f ( cLi n, 01, 02, cCpo) / / Subst i t ui o cont edo de cCpo na string base
SUBSTR()
Retorna parte do contedo de uma string especificada, de acordo com a posio inicial deste contedo na string e a quantidade de caracteres que dever ser retornada a partir daquele ponto (inclusive).
E Sintaxe: SUBSTR(cString, nPosInicial, nCaracteres)
E Parmetros
cString String que se deseja verificar nPosInicial Posio inicial da informao que ser extrada da string nCaracteres Quantidade de caracteres que dever ser retornada a partir daquele ponto (inclusive).
Exemplo:
cCampo : = A1_NOME nPosUnder : = AT( cCampo) cPr ef i xo : = SUBSTR( cCampo, 1, nPosUnder ) / / A1_
TRANSFORM()
Funo de converso que formata valores caractere, data, lgicos e numricos conforme um string de mscara especificado, a qual inclui uma combinao de strings de template e funes de picture. Ela faz o mesmo que a clusula PICTURE do comando @...SAY, sendo normalmente utilizada para formatar dados a serem enviados tela ou impressora.
Pgina 306 Programao ADVPL II e Guia de Referncia E Parmetros:
cExp O valor a ser formatado. Esta expresso pode ser qualquer tipo de dados vlidos, exceto vetor, bloco de cdigo, e NIL. cSayPicture Uma string de caracteres de mscara e template usado para descrever o formato da cadeia de caracteres a ser retornada.
E Retorno:
- Retorna a converso de <cExp> para uma cadeia de caracteres formatada conforme a definio em <cSayPicture>.
UPPER()
Retorna uma string com todos os caracteres maisculos, tendo como base a string passada como parmetro.
E Sintaxe: UPPER(cString)
E Parmetros
cString String que ser convertida para caracteres maisculos.
Exemplo:
cText o : = ADVPL
MSGI NFO( Text o: +LOWER( cText o) )
Manipulao de data / hora
CDOW()
Funo que converte uma data para uma cadeia de caracteres.
E Sintaxe: CDOW( dExp )
E Parmetros:
dExp Data que ser convertida.
E Retorno:
cDayWeek Nome do dia da semana como uma cadeia de caracteres. A primeira letra maiscula e as demais minsculas. Programao ADVPL II e Guia de Referncia Pgina 307
Exemplo:
dDat a : = DATE( ) / / Resul t ado: 09/ 01/ 90 cDi aDaSemana : = CDOW( DATE( ) ) / / Resul t ado: Fr i day cDi aDaSemana : = CDOW( DATE( ) + 7) / / Resul t ado: Fr i day cDi aDaSemana : = CDOW( CTOD( " 06/ 12/ 90" ) ) / / Resul t ado: Tuesday
CMONTH()
Funo de converso de datas que retorna uma cadeia de caracteres com o nome do ms em ingls.
E Sintaxe: CMONTH( dData )
E Parmetros:
dData Data que ser convertida.
E Retorno:
cMonth Retorna o nome do ms em uma cadeia de caracteres. A primeira letra do retorno em maiscula e o restante do nome, em minsculas.
Exemplo:
cMes : = CMONTH( DATE( ) ) / / Resul t ado: Sept ember cMes : = CMONTH( DATE( ) + 45) / / Resul t ado: Oct ober cMes : = CMONTH( CTOD( " 12/ 01/ 94" ) ) / / Resul t ado: December cMes : = SUBSTR( CMONTH( DATE( ) ) , 1, 3) + STR( DAY( DATE( ) ) ) / / Resul t ado: Sep 1
DATE()
Funo que retorna a data do atual sistema. O formato de sada controlado pelo comando SET DATE, sendo que o formato padro mm/dd/yy.
E Sintaxe: DATE()
E Parmetros:
Nenhum ()
Pgina 308 Programao ADVPL II e Guia de Referncia
E Retorno:
dData Data do sistema.
Exemplo:
dDat a : = DATE( ) / / Resul t ado: 09/ 01/ 01 dDat a : = DATE( ) + 30 / / Resul t ado: 10/ 01/ 01 dDat a : = DATE( ) - 30 / / Resul t ado: 08/ 02/ 90 dDat a : = DATE( ) cMes : = CMONTH( dDat a) / / Resul t ado: Sept ember
DAY()
Funo de converso de datas usada para converter o valor data em um nmero inteiro que representa o dia do ms. Esta funo pode ser usada em conjunto com CMONTH() e YEAR() para formatar datas. Pode ser usada tambm em diversos clculos envolvendo datas.
E Sintaxe: DAY( dData )
E Parmetros:
dData Data que ser convertida.
E Retorno:
nDias Se o ms do argumento dData for fevereiro, anos bissextos so considerados. Se a data do argumento dData for 29 de fevereiro e o ano no for bissexto, ou se o argumento dData for vazio.
Exemplo: / / Est es exempl os most r ama f uno DAY( ) de di ver sas manei r as: dDat a : = DATE( ) / / Resul t ado: 09/ 01/ 01 nDi a : = DAY( DATE( ) ) / / Resul t ado: 1 nDi a : = DAY( DATE( ) ) + 1 / / Resul t ado: 2 nDi a : = DAY( CTOD( " 12/ 01/ 94" ) ) / / Resul t ado: 1 / / Est e exempl o most r a a f uno DAY( ) usada emconj unt o comCMONTH( ) e YEAR( ) par a f or mat ar o val or da dat a: dDat a : = Dat e( ) cDat a : = CMONTH( dDat a) + STR( DAY( dDat a) ) + " , " + STR( YEAR( dDat a) ) / / Resul t ado: J une 15, 2001
Programao ADVPL II e Guia de Referncia Pgina 309 DOW()
Funo que converte uma data para o valor numrico que representa o dia da semana. til quando se deseja fazer clculos semanais. DOW() similar a CDOW(), que retorna o dia da semana como uma cadeia de caracteres.
E Sintaxe: DOW( dData )
E Parmetros:
dData Data que ser convertida.
E Retorno:
nDia Retorna um nmero entre zero e sete, representando o dia da semana. O primeiro dia da semana 1 (Domingo) e o ltimo 7 (Sbado). Se a data for vazia ou invlida, DOW() retorna zero.
Exemplo:
dDat a : = DATE( ) / / Resul t ado: 09/ 01/ 01 nDi aDaSemana : = DOW( DATE( ) ) / / Resul t ado: 3 cDi aDaSemana : = CDOW( DATE( ) ) / / Resul t ado: Tuesday nDi aDaSemana : = DOW( DATE( ) - 2) / / Resul t ado: 1 cDi aDaSemana : = CDOW( DATE( ) - 2) / / Resul t ado: Sunday
DTOC()
Funo para converso de uma data para uma cadeia de caracteres formatada segundo o padro corrente, definido pelo comando SET DATE. Se for necessria a utilizao de formatao especial, use a funo TRANSFORM().
Em expresses de ndices de arquivo, use DTOS() no lugar de DTOC() para converter datas para cadeia de caracteres.
E Sintaxe: DTOC( dData )
E Parmetros:
dData Data que ser convertida.
Pgina 310 Programao ADVPL II e Guia de Referncia
E Retorno:
cData uma cadeia de caracteres representando o valor da data. O retorno formatado utilizando-se o formato corrente definido pelo comando SET DATE FORMAT. O formato padro mm/dd/yy. Para uma data nula ou invlida, o retorno ser uma cadeia de caracteres com espaos e tamanho igual ao formato atual.
Exemplo:
cDat a : = DATE( ) / / Resul t ado: 09/ 01/ 90 cDat a : = DTOC( DATE( ) ) / / Resul t ado: 09/ 01/ 90 cDat a : = " Today i s " + DTOC( DATE( ) ) / / Resul t ado: Today i s 09/ 01/ 90
DTOS()
Funo para converso de uma data que pode ser usada para criar expresses de ndice. O resultado estruturado visando manter a ordem correta do ndice (ano, ms, dia).
E Sintaxe: DTOS( dData )
E Parmetros:
dData Data que ser convertida.
E Retorno:
sData Retorna uma cadeia de caracteres com oito bytes de tamanho no formato yyyymmdd. Quando dData nulo ou invalido, DTOS() retorna uma cadeia de caracteres com oito espaos. O valor retornado no afetado pela formato da data corrente.
Exemplo:
cDat a : = DATE( ) / / Resul t ado: 09/ 01/ 90 cDat a : = DTOS( DATE( ) ) / / Resul t ado: 19900901 nLen : = LEN( DTOS( CTOD( " " ) ) ) / / Resul t ado: 8
Programao ADVPL II e Guia de Referncia Pgina 311 ELAPTIME()
Funo que retorna uma cadeia de caracteres contendo a diferena de tempo no formato hh:mm:ss, onde hh a hora ( 1 a 24 ), mm os minutos e ss os segundos.
E Sintaxe: ElapTime( cHoraInicial , cHoraFinal )
E Parmetros:
cHoraInicial Informe a hora inicial no formato hh:mm:ss, onde hh a hora ( 1 a 24 ), mm os minutos e ss os segundos. CHoraFinal Informe a hora final no formato hh:mm:ss, onde hh a hora ( 1 a 24 ), mm os minutos e ss os segundos.
E Retorno:
Caracter A diferena de tempo no formato hh:mm:ss, onde hh a hora ( 1 a 24 ), mm os minutos e ss os segundos.
Exemplo:
cHor aI ni ci o : = TI ME( ) / / Resul t ado: 10: 00: 00 . . . <i nst r ues> . . . cEl apsed : = ELAPTI ME( TI ME( ) , cHor aI ni ci o)
MONTH()
Funo de converso que extrai da data o valor numrico do ms, semelhante a funo que retorna o nome do ms a partir do valor de dData.
E Sintaxe: MONTH( dData )
E Parmetros:
dData Data que ser convertida.
E Retorno:
Numrico >=0 e <=12 Para uma data vlida. 0 Se a data for nula ou invlida.
Esta funo retorna o nmero de segundos decorridos desde a meia-noite, segundo a hora do sistema. Est relacionada funo TIME() que retorna a hora do sistema como uma cadeia de caracteres no formato hh:mm:ss.
E Sintaxe: SECONDS()
E Parmetros:
Nenhum ()
E Retorno:
Numrico >=0 e <=86399 Retorna a hora do sistema em segundos. O valor numrico representa o nmero de segundos decorridos desde a meia-noite, baseado no relgio de 24 horas e varia de 0 a 86399.
Exemplo:
cHor a : = TI ME( ) / / Resul t ado: 10: 00: 00 cSegundos : = SECONDS( ) / / Resul t ado: 36000. 00
/ / Est e exempl o usa a f uno SECONDS( ) par a cr onomet r ar o t empo decor r i do:
LOCAL nSt ar t , nEl apsed nSt ar t : = SECONDS( )
Programao ADVPL II e Guia de Referncia Pgina 313 TIME()
Funo que retorna a hora do sistema como uma cadeia de caracteres, e que est relacionada com SECONDS(), que retorna o valor inteiro representando o nmero de segundos desde a meia-noite. SECONDS() geralmente usada no lugar de TIME() para clculos.
E Sintaxe: TIME()
E Parmetros:
Nenhum .
E Retorno:
Caracter A hora do sistema como uma cadeia de caracteres no formato hh:mm:ss onde hh a hora ( 1 a 24 ), mm os minutos e ss os segundos.
Exemplo:
cTi me : = TI ME( ) / / Resul t ado: 10: 37: 17 cHor a : = SUBSTR( cTi me, 1, 2) / / Resul t ado: 10 cMi nut os : = SUBSTR( cTi me, 4, 2) / / Resul t ado: 37 cSegundos : = SUBSTR( cTi me, 7, 2) / / Resul t ado: 17
YEAR()
YEAR() uma funo de converso de data que extrai o valor numrico do ano. YEAR() membro de um grupo de funes que retornam valores numricos de uma data. O grupo inclui DAY() e MONTH() que retornam o dia e o ms como valores numricos.
E Sintaxe: YEAR( dData )
E Parmetros:
dData Data que ser convertida.
E Retorno:
Numrico Valor numrico do ano da data especificada em dData incluindo os dgitos do sculo. O valor retornado no afetado pelos valores especificados pelos comandos SET DATE ou SET CENTURY.
Para uma data invlida ou nula ser retornado o valor 0.
Pgina 314 Programao ADVPL II e Guia de Referncia
Exemplo 01:
dDat a : = DATE( ) / / Resul t ado: 09/ 20/ 01 dAno : = YEAR( dDat a) / / Resul t ado: 2001 dAno : = YEAR( dDat a) + 11 / / Resul t ado: 2012
Exemplo 02:
/ / Est e exempl o cr i a uma f uno de usur i o que usa a f uno YEAR( ) par a f or mat ar o val or da / / dat a:
cDat a : = Mdy( DATE( ) ) / / Resul t : Sept ember 20, 1990 FUNCTI ON Mdy( dDat e ) RETURN CMONTH( dDat e) + " " + LTRI M( STR( DAY( dDat e) ) ) + " , " + STR( YEAR( dDat e) )
Manipulao de variveis numricas
ABS()
Retorna um valor absoluto (independente do sinal) com base no valor especificado no parmetro.
E Sintaxe: ABS(nValor)
E Parmetros
nValor Valor que ser avaliado
Exemplo:
nPessoas : = 20 nLugar es : = 18
I F nPessoas < nLugar es MSGI NFO( Exi st em+CVALTOCHAR( nLugar es- nPessoas) +di spon vei s) ELSE MSGSTOP( Exi st em+CVALTOCHAR( ABS( nLugar es- nPessoas) ) +f al t ando) ENDI F
Programao ADVPL II e Guia de Referncia Pgina 315 ALEATORIO()
Gera um nmero aleatrio de acordo com a semente passada. Esta funo retorna um nmero aleatrio menor ou igual ao primeiro parmetro informado, usando como semente o segundo parmetro. recomendado que esta semente seja sempre o ltimo nmero aleatrio gerado por esta funo.
E Sintaxe: Aleatorio(nMax,nSeed)
E Parmetros
nMax Nmero mximo para a gerao do nmero aleatrio. nSeed Semente para a gerao do nmero aleatrio.
Exemplo Funo ALEATORIO()
nSeed : = 0 For i : = 1 t o 100 nSeed : = Al eat or i o( 100, nSeed) ? St r ( i , 3) + numer o al eat or i o ger ado: +St r ( nSeed, 3) Next i i nkey( 0) Ret ur n
INT()
Retorna a parte inteira de um valor especificado no parmetro.
E Sintaxe: INT(nValor)
E Parmetros
nValor Valor que ser avaliado.
Pgina 316 Programao ADVPL II e Guia de Referncia Exemplo:
STATI C FUNCTI ON COMPRAR( nQuant i dade)
LOCAL nDi nhei r o : = 0. 30 LOCAL nPr cUni t : = 0. 25
I F nDi nhei r o >= ( nQuant i dade*nPr cUni t ) RETURN nQuant i dade ELSEI F nDi nhei r o > nPr cUni t nQuant i dade : = I NT( nDi nhei r o / nPr cUni t ) ELSE nQuant i dade : = 0 ENDI F
RETURN nQuant i dade
NOROUND()
Retorna um valor, truncando a parte decimal do valor especificado no parmetro de acordo com a quantidade de casas decimais solicitadas.
E Sintaxe: NOROUND(nValor, nCasas)
E Parmetros
nValor Valor que ser avaliado. nCasas Nmero de casas decimais vlidas. A partir da casa decimal especificada os valores sero desconsiderados.
Atravs da funo RANDOMIZE() , geramos um numero inteiro aleatrio, compreendido entre a faixa inferior e superior recebida atravs dos parmetros nMinimo e nMaximo, respectivamente.
Programao ADVPL II e Guia de Referncia Pgina 317 Observao :
O O limite inferior recebido atravs do parmetro nMinimo "maior ou igual a ", podendo ser sorteado e fazer parte do retorno; porm o limite superior "menor que", de modo a nunca ser atingido ou devolvido no resultado. Por exemplo , a chamada da funo RANDOMIZE(1,2) sempre retornar 1 .
nMinimo Corresponde ao menor numero a ser gerado pela funo. nMaximo Corresponde ao maior nmero ( menos um ) a ser gerado pela funo.
E Retorno:
Numrico Nmero randmico , compreendido no intervalo entre (nMinimo) e (nMaximo-1) : O nmero gerado pode ser maior ou igual nMinimo e menor ou igual a nMaximo-1 .
ROUND()
Retorna um valor, arredondando a parte decimal do valor especificado no parmetro de acordo com a quantidades de casas decimais solicitadas, utilizando o critrio matemtico.
E Sintaxe: ROUND(nValor, nCasas)
E Parmetros
nValor Valor que ser avaliado. nCasas Nmero de casas decimais vlidas. As demais casas decimais sofrero o arredondamento matemtico, aonde:
Se nX <= 4 0, seno +1 para a casa decimal superior.
Pgina 318 Programao ADVPL II e Guia de Referncia Manipulao de arquivos
ADIR()
Funo que preenche os arrays passados com os dados dos arquivos encontrados, atravs da mscara informada. Tanto arquivos locais (Remote) como do servidor podem ser informados.
Importante: ADir uma funo obsoleta, utilize sempre Directory().
cArqEspec Caminho dos arquivos a serem includos na busca de informaes. Segue o padro para especificao de arquivos, aceitando arquivos no servidor Protheus e no Cliente. Caracteres como * e ? so aceitos normalmente. Caso seja omitido, sero aceitos todos os arquivos do diretrio default ( *.* ). aNomeArq Array de Caracteres. o array com os nomes dos arquivos encontrados na busca.O contedo anterior do array apagado. aTamanho Array Numrico. So os tamanhos dos arquivos encontrados na busca. aData Array de Datas. So as datas de modificao dos arquivos encontrados na busca. aHora Array de Caracteres. So os horrios de modificao dos arquivos encontrados. Cada elemento contm horrio no formato: hh:mm:ss. aAtributos Array de Caracteres. So os atributos dos arquivos, caso esse array seja passado como parmetros, sero includos os arquivos com atributos de sistema e ocultos.
E Retorno:
nArquivos Quantidade de arquivos encontrados.
Exemplo:
LOCAL aFi l es[ ADI R( " *. TXT" ) ] ADI R( " *. TXT" , aFi l es) AEVAL( aFi l es, { | el ement | QOUT( el ement ) })
Programao ADVPL II e Guia de Referncia Pgina 319 CGETFILE()
Funo utilizada para seleo de um arquivo ou diretrio, disponibilizando uma interface grfica e amigvel para o usurio. Esta funo est normalmente associada ao recurso de abrir ou salvar arquivos, permitindo a digitao opcional do nome do arquivo que ser gravado.
ExpC1 Mscara para filtro (Ex: 'Informes Protheus (*.##R) | *.##R'). ExpC2 Titulo da Janela. ExpN1 Nmero da mascara default ( Ex: 1 p/ *.exe ). ExpC3 Diretrio inicial se necessrio. Expl1 .T. para mostrar boto como 'Salvar' e .F. para boto 'Abrir'. ExpN2 Mscara de bits para escolher as opes de visualizao do Objeto. ExpL2 .T. para exibir diretrio [Servidor] e .F. para no exibir.
E Mscaras de bits para opes:
GETF_OVERWRITEPROMPT Solicita confirmao para sobrescrever. GETF_MULTISELECT Permite selecionar mltiplos arquivos. GETF_NOCHANGEDIR No permite mudar o diretrio inicial. GETF_LOCALFLOPPY Exibe o(s) Drive(s) de disquete da maquina local. GETF_LOCALHARD Exibe o(s) HardDisk(s) Local(is). GETF_NETWORKDRIVE Exibe os drives da rede ( Mapeamentos ). GETF_SHAREWARE No implementado. GETF_RETDIRECTORY Retorna um diretrio.
Exemplo:
cGet Fi l e ( ' *. PRW| *. CH' , ' Font es' , 1, ' C: \ VER507' , . F. , GETF_LOCALHARD + GETF_LOCALFLOPPY)
Pgina 320 Programao ADVPL II e Guia de Referncia
E Aparncia:
Para permitir a seleo de diversos arquivos contidos em um diretrio necessrio combinar as funes CGETFILE(), DIRECTORY() e o objeto LISTBOX() conforme abaixo:
CGETFILE: exibe os diretrios disponveis e retorna o nome do item selecionado. DIRECTORY: efetua a leitura dos arquivos contidos no diretrio retornado pela CGETFILE. LISTBOX: Exibe uma tela de seleo de com a opo de marcao, para que sejam selecionados os arquivos que sero processados.
Programao ADVPL II e Guia de Referncia Pgina 321 Exemplo: Seleo de mltiplos arquivos com CGETFILE, DIRECTORY() e LISTBOX()
LOCAL cDi r ect or y : = " " LOCAL aAr qui vos : = {} LOCAL nAr q : = 0
PRI VATE aPar amFi l e: = ARRAY( 1)
I F ! PARBOXFI LE( ) RETURN ENDI F
/ / Exi be a est r ut ur a de di r et r i o e per mi t e a sel eo dos ar qui vos que ser o pr ocessados cDi r ect or y : = ALLTRI M( cGet Fi l e( " Ar qui vos de Dados| ' " +aPar amFi l e[ 1] +" ' | " , ' I mpor t ao de l anament os' , 0, ' ' , . T. , GETF_OVERWRI TEPROMPT + GETF_NETWORKDRI VE + GETF_RETDI RECTORY, . T. ) ) aAr qui vos : = Di r ect or y( cDi r ect or y+" *. *" ) aAr qui vos : = MARKFI LE( aAr qui vos, cDi r ect or y, aPar amFi l e[ 1] , @l Sel ecao)
FOR nAr q TO Len( aAr qui vos)
I F ! aAr qui vos[ nAr q] [ 1] LOOP ENDI F
<. . . pr ocessament o. . . >
NEXT nAr q
RETURN Pgina 322 Programao ADVPL II e Guia de Referncia Funo auxiliar: PARBOXFILE()
Local aPar amBox : = {} Local cTi t ul o : = " Fi l t r os Adi ci onai s" Local aRet : = {} Local bOk : = {| | . T. } Local aBut t ons : = {} Local l Cent er ed : = . T. Local nPosx Local nPosy Local cLoad : = " " Local l CanSave : = . F. Local l User Save : = . F. Local nX : = 0 Local l Ret : = . T.
AADD( aPar amBox, {2, " Ti po de ar qui vo" , 2, {" *. dbf " , " *. dt c" }, 100, " Al l waysTr ue( ) " , . T. }) l Ret : = Par amBox( aPar amBox, cTi t ul o, aRet , bOk, aBut t ons, l Cent er ed, nPosx, nPosy, , cLoad, l CanSave, l User Save) I F Val Type( aRet ) == " A" . AND. Len( aRet ) == Len( aPar amBox) For nX : = 1 t o Len( aPar amBox) I f aPar amBox[ nX] [ 1] == 1 aPar am102[ nX] : = aRet [ nX] El seI f aPar amBox[ nX] [ 1] == 2 . AND. Val Type( aRet [ nX] ) == " C" aPar am102[ nX] : = aRet [ nX] / / Ti po do ar qui vo El seI f aPar amBox[ nX] [ 1] == 2 . AND. Val Type( aRet [ nX] ) == " N" aPar am102[ nX] : = aPar amBox[ nX] [ 4] [ aRet [ nX] ] / / Ti po do ar qui vo Endi f Next nX ENDI F RETURN l Ret Programao ADVPL II e Guia de Referncia Pgina 323 Funo auxiliar: MARKFILE()
STATI C FUNCTI ON MARKFI LE( aAr qui vos, cDi r et or i o, cDr i ver , l Sel ecao)
Local aChaveAr q : = {} Local cTi t ul o : = " Ar qui vos par a i mpor t ao: " Local bCondi cao : = {| | . T. } / / Var i vei s ut i l i zadas na sel eo de cat egor i as Local oChkQual , l Qual , oQual , cVar Q / / Car r ega bi t maps Local oOk : = LoadBi t map( Get Resour ces( ) , " LBOK" ) Local oNo : = LoadBi t map( Get Resour ces( ) , " LBNO" ) / / Var i vei s ut i l i zadas par a l i st a de f i l i ai s Local nx : = 0 Local nAchou : = 0
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Car r ega os ar qui vos do di r et r i o no ar r ay da Li st Box | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + For nX : = 1 t o Len( aAr qui vos) / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | aChaveAr q - Cont emos ar qui vos que ser o exi bi dos par a sel eo | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + AADD( aChaveAr q, {. F. , aAr qui vos[ nX] [ 1] , cDi r et or i o}) Next nX
/ / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Mont a t el a par a sel eo dos ar qui vos cont i dos no di r et r i o | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o STYLE DS_MODALFRAME Fr om145, 0 To 445, 628; OF oMai nWnd PI XEL oDl g: l EscCl ose : = . F. @05, 15 TO 125, 300 LABEL UPPER( cDr i ver ) OF oDl g PI XEL @15, 20 CHECKBOX oChkQual VAR l Qual PROMPT " I nver t e Sel eo" SI ZE 50, 10; OF oDl g PI XEL; Pgina 324 Programao ADVPL II e Guia de Referncia ON CLI CK ( AEval ( aChaveAr q, {| z| z[ 1] : = I f ( z[ 1] ==. T. , . F. , . T. ) }) , ; oQual : Ref r esh( . F. ) ) @30, 20 LI STBOX oQual VAR cVar Q Fi el ds HEADER " " , " Cdi go" , " Descr i o" SI ZE; 273, 090 ON DBLCLI CK ( aChaveAr q: =Tr oca( oQual : nAt , aChaveAr q) , oQual : Ref r esh( ) ) ; NoScr ol l OF oDl g PI XEL oQual : Set Ar r ay( aChaveAr q) oQual : bLi ne : = { | | {I f ( aChaveAr q[ oQual : nAt , 1] , oOk, oNo) , ; aChaveAr q[ oQual : nAt , 2] , aChaveAr q[ oQual : nAt , 3] }} DEFI NE SBUTTON FROM 134, 240 TYPE 1 ACTI ON I I F( Mar caOk( aChaveAr q) , ; ( l Sel ecao : = . T. , oDl g: End( ) , . T. ) , . F. ) ENABLE OF oDl g DEFI NE SBUTTON FROM 134, 270 TYPE 2 ACTI ON ( l Sel ecao : = . F. , oDl g: End( ) ) ; ENABLE OF oDl g ACTI VATE MSDI ALOG oDl g CENTERED
STATI C FUNCTI ON Mar caOk( aAr r ay) Local l Ret : =. F. Local nx: =0
// Checa marcaes efetuadas For nx:=1 To Len(aArray) If aArray[nx,1] lRet:=.T. EndIf Next nx // Checa se existe algum item marcado na confirmao If !lRet HELP("SELFILE",1,"HELP","SEL. FILE","No existem itens marcados",1,0) EndIf
Return lRet
CPYS2T()
Funo utilizada para copiar um arquivo do servidor para o cliente (Remote), sendo que os caracteres * e ? so aceitos normalmente. Caso a compactao seja habilitada (lCompacta), os dados sero transmitidos de maneira compacta e descompactados antes do uso. E Sintaxe: CPYS2T ( < cOrigem > , < cDestino > , [ lCompacta ] )
E Parmetros:
cOrigem Nome(s) dos arquivos a serem copiados, aceita apenas arquivos no servidor, WildCards ( * e ? ) so aceitos normalmente. cDestino Diretrio com o destino dos arquivos no Client ( Remote ). lCompacta Indica se a cpia deve ser feita compactando o arquivo antes do envio.
Pgina 326 Programao ADVPL II e Guia de Referncia
E Retorno:
Lgico
lSucess retorna .T. caso o arquivo seja copiado com sucesso, ou .F. em caso de falha na cpia.
Exemplo: / / Copi a ar qui vos do ser vi dor par a o r emot e l ocal , compact ando ant es de t r ansmi t i r CpyS2T( " \ BKP\ MANUAL. DOC" , " C: \ TEMP" , . T. ) / / Copi a ar qui vos do ser vi dor par a o r emot e l ocal , semcompact ar ant es de t r ansmi t i r CpyS2T( " \ BKP\ MANUAL. DOC" , " C: \ TEMP" , . F. )
CPYT2S()
Funo utilizada para copiar um arquivo do cliente (Remote) para o servidor, sendo que os caracteres * e ? so aceitos normalmente. Caso a compactao seja habilitada (lCompacta), os dados sero transmitidos de maneira compacta e descompactados antes do uso. E Sintaxe: CpyT2S( cOrigem, cDestino, [ lCompacta ])
E Parmetros:
cOrigem Nomes dos arquivos a serem copiados, aceita apenas arquivos locais (Cliente), WildCards so aceitos normalmente. cDestino Diretrio com o destino dos arquivos no remote ( Cliente ). lCompacta Indica se a cpia deve ser feita compactando o arquivo antes.
E Retorno:
Lgico Indica se o arquivo foi copiado para o cliente com sucesso.
Exemplo: / / Copi a ar qui vos do cl i ent e( r emot e ) par a o Ser vi dor compact ando ant es de t r ansmi t i r CpyT2S( " C: \ TEMP\ MANUAL. DOC" , " \ BKP" , . T. ) / / Copi a ar qui vos do cl i ent e( r emot e ) par a o Ser vi dor sem compact ar . CpyT2S( " C: \ TEMP\ MANUAL. DOC" , " \ BKP" )
Programao ADVPL II e Guia de Referncia Pgina 327 CURDIR()
Funo que retorna o diretrio corrente do servidor. O caminho retornado sempre relativo ao RootPath definido na configurao do Environment no .INI do Protheus Server. Inicialmente, o diretrio atual da aplicao o constante na chave StartPath, tambm definido na configurao do Environment no .INI do Protheus Server.
Caso seja passado o parmetro cNovoPath, este path assumido como sendo o pacote atual. Caso o path recebido como parmetro no exista, seja invlido, ou seja um pacote absoluto (iniciado com uma letra de drive ou caminho de rede), a funo no ir setar o novo pacote, mantendo o atual.
E Sintaxe: CURDIR ( [ cNovoPath ] )
E Parmetros:
cNovoPath Caminho relativo, com o novo diretrio que ser ajustado como corrente.
E Retorno:
Caracter Diretrio corrente, sem a primeira barra.
Exemplo:
cOl dDi r : = cur di r ( ) cNewDi r : = ' \ webadv\ xi s' cur di r ( cNewDi r ) / / Tr oca o pat h I f cNewDi r <> ' \ ' +cur di r ( ) / / E ver i f i ca se t r ocou mesmo conout ( ' Fal ha ao Tr ocar de Pat h de ' +cOl dDi r + ' par a ' +cNewDi r ) El se conout ( ' Pat h de ' +cOl dDi r + ' t r ocado par a ' +cNewDi r +' com sucesso. ' ) Endi f
DIRECTORY()
Funo de tratamento de ambiente que retorna informaes a respeito dos arquivos no diretrio corrente ou especificado. semelhante a ADIR(), porm retorna um nico vetor ao invs de adicionar valores a uma srie de vetores existentes passados por referncia.
DIRECTORY() pode ser utilizada para realizar operaes em conjuntos de arquivos. Em combinao com AEVAL(), voc pode definir um bloco que pode ser aplicado a todos os arquivos que atendam a <cDirSpec> especificada.
Para tornar as referncias aos vrios elementos de cada sub-vetor de arquivo mais Pgina 328 Programao ADVPL II e Guia de Referncia legveis, fornecido o arquivo header Directry.ch, que contm os #defines para os subarray subscripts.
E TABELA A: Atributos de DIRECTORY()
Atributo Significado H Incluir arquivos ocultos S Incluir arquivos de sistema D Incluir diretrios V Procura pelo volume DOS e exclui outros arquivos
Nota: Arquivos normais so sempre includos na pesquisa, a no ser que V seja especificado. E TABELA B: Estrutura dos Subvetores de DIRECTORY()
<cDirSpec> especifica o driver, diretrio e arquivo para a pesquisa no diretrio. Caracteres do tipo coringa so permitidos na especificao de arquivos. Caso <cDirSpec> seja omitido, o valor padro *.*. O caminho especificado pode estar na estao (remote), ou no servidor, obedecendo s definies de Path Absoluto/Relativo de acesso. cAtributos> <cAtributos> especifica que arquivos com atributos especiais devem ser includos na informao retornada. <cAtributos> consiste em uma cadeia de caracteres que contm um ou mais dos seguintes caracteres, contidos na tabela adicional A , especificada anteriormente.
E Retorno:
Array
DIRECTORY() retorna um vetor de sub-vetores, sendo que cada sub-vetor contm informaes sobre cada arquivo que atenda a <cDirSpec>.Veja maiores detalhes na Tabela B, discriminada anteriormente.
Programao ADVPL II e Guia de Referncia Pgina 329 Exemplo: #I NCLUDE " Di r ect r y. ch"
aDi r ect or y : = DI RECTORY( " *. *" , " D" ) AEVAL( aDi r ect or y, {| aFi l e| CONOUT( aFi l e[ F_NAME] ) } )
DIRREMOVE()
Funo que elimina um diretrio especifico. Caso especifiquemos um pacote sem a unidade de disco , ele ser considerado no ambiente do Servidor , a partir do RootPath do ambiente ( caso o path comece com \ ), ou a partir do diretrio corrente (caso o path no seja iniciado com \ ).
Quando especificado um pacote(path) absoluto ( com unidade de disco preenchida ), a funo ser executada na estao onde est sendo executado o Protheus Remote. Quando executamos a funo DirRemove() em JOB ( processo isolado no Server, sem interface ), no possvel especificar um Path absoluto de disco. Caso isto seja realizado, a funo retornar .F. e FError() retornar -1 ( Syntax Error ).
Note que necessrio ter direitos suficientes para remover um diretrio, e o diretrio a ser eliminado precisa estar vazio, sem subdiretrios ou arquivos dentro do mesmo.
E Sintaxe: DIRREMOVE ( < cDiretorio > )
E Parmetros:
cDiretorio Nome do diretrio a ser removido.
E Retorno:
Lgico lSucesso ser .T. caso o diretrio tenha sido eliminado, ou .F. caso no seja possvel excluir o diretrio. Quando a funo DirRemove retornar .F., possvel obter mais detalhes da ocorrncia recuperando o cdigo do Erro atravs da funo FError().
Exemplo: cDel Pat h : = ' c: \ TmpFi l es' l RemoveOk : = DI RREMOVE( cDel Pat h)
I F ! l RemoveOk MsgSt op( ' Fal ha ao r emover a past a ' +cDel Pat h+' ( Fi l e Er r or ' +st r ( Fewr r or ( ) , 4) +' ) ' ) El se MsgSt op( ' Past a ' +cDel Pat h+' r emovi da comsucesso. ' ) Endi f
Pgina 330 Programao ADVPL II e Guia de Referncia
DISKSPACE()
Funo de ambiente que determina quantos bytes esto disponveis em uma determinada unidade de disco. Esta funo obtm a informao sempre relativa estao onde est sendo executado o Protheus Remote. Atravs do parmetro nDrive , selecionamos qual a unidade de disco que desejamos obter a informao do espao livre, onde:
0 : Unidade de disco atual da estao (DEFAULT). 1 : Drive A: da estao remota. 2 : Drive B: da estao remota. 3 : Drive C: da estao remota. 4 : Drive D: da estao remota ... e assim por diante.
Caso a funo DiskSpace seja executada atravs de um Job (processo isolado no Servidor, sem interface Remota) , ou seja passado um argumento de unidade de disco inexistente ou indisponvel, a funo DISKSPACE() retornar -1
E Sintaxe: DISKSPACE ( [ nDrive ] )
E Parmetros:
nDrive Nmero do driver, onde 0 o espao na unidade de disco corrente, e 1 o drive A: do cliente, 2 o drive B: do cliente, etc..
E Retorno:
Numrico Nmero de bytes disponveis no disco informado como parmetro.
Exemplo:
nByt esLocal : = DI SKSPACE( ) / / Ret or na o espao di spon vel na uni dade de di sco l ocal
I F nByt esLocal < 1048576 MsgSt op( ' Uni dade de Di sco l ocal possui menos de 1 MB l i vr e. ' ) El se MsgSt op( ' Uni dade de di sco l ocal possui ' +st r ( nByt es_A, 12) +' byt es l i vr es. ' ) Endi f nByt es_A : = DI SKSPACE( 1 ) / / Ret or na o espao di spon vel no dr i ve A: l ocal ( r emot e ) .
I f nByt es_A == - 1 MsgSt op( ' Uni dade A: no est di spon vel ou no h di sco no Dr i ve' ) El seI f nByt es_A < 8192 Programao ADVPL II e Guia de Referncia Pgina 331 MsgSt op( ' No h espao di spon vel no di sco. Subst i t ua o di sco na Uni dade A: ' ) El se MsgSt op( ' Uni dade A: Ver i f i cada . ' +st r ( nByt es_A, 12) +' byt es l i vr es. ' ) Endi f
EXISTDIR()
Funo utilizada para determinar se um pacote de diretrio existe e valido.
E Sintaxe: EXISTDIR (< cPath >)
E Parmetros:
cPath String contendo o diretrio que ser verificado, caso seja feita uma verificao a partir do server, devemos informar a partir do rootPath do Protheus, caso contrrio devemos passar o pacote completo do diretrio.
E Retorno:
Lgico Retorna se verdadeiro(.T.) caso o diretrio solicitado exista, falso(.F.) caso contrrio.
Exemplo 01: No server a partir do rootPath
l Ret : = Exi st Di r ( ' \ t est e' )
Exemplo 02: No client, passando o FullPath
l Ret : = Exi st Di r ( ' c: \ APO' )
FCLOSE()
Funo de tratamento de arquivos de baixo nvel utilizada para fechar arquivos binrios e forar que os respectivos buffers do DOS sejam escritos no disco. Caso a operao falhe, FCLOSE() retorna falso (.F.). FERROR() pode ento ser usado para determinar a razo exata da falha. Por exemplo, ao tentar-se usar FCLOSE() com um handle (tratamento dado ao arquivo pelo sistema operacional) invlido retorna falso (.F.) e FERROR() retorna erro 6 do DOS, invalid handle. Consulte FERROR() para obter uma lista completa dos cdigos de erro.
Pgina 332 Programao ADVPL II e Guia de Referncia Nota: Esta funo permite acesso de baixo nvel aos arquivos e dispositivos do DOS. Ela deve ser utilizada com extremo cuidado e exige que se conhea a fundo o sistema operacional utilizado.
E Sintaxe: FCLOSE ( < nHandle > )
E Parmetros:
nHandle Handle do arquivo obtido previamente atravs de FOPEN() ou FCREATE().
E Retorno:
Lgico Retorna falso (.F.) se ocorre um erro enquanto os buffers esto sendo escritos; do contrrio, retorna verdadeiro (.T.).
Exemplo:
#i ncl ude " Fi l ei o. ch"
nHandl e : = FCREATE( " Test f i l e" , FC_NORMAL)
I f ! FCLOSE( nHandl e) conout ( " Er r o ao f echar ar qui vo, er r o numer o: " , FERROR( ) ) EndI f
FCREATE()
Funo de baixo-nvel que permite a manipulao direta dos arquivos textos como binrios. Ao ser executada FCREATE() cria um arquivo ou elimina o seu contedo, e retorna o handle (manipulador) do arquivo, para ser usado nas demais funes de manuteno de arquivo. Aps ser utilizado , o Arquivo deve ser fechado atravs da funo FCLOSE().
Na tabela abaixo , esto descritos os atributos para criao do arquivo, definidos no arquivo header fileio.ch.
E Atributos definidos no include FileIO.ch
Constante Valor Descrio FC_NORMAL 0 Criao normal do Arquivo (default/padro). FC_READONLY 1 Cria o arquivo protegido para gravao. FC_HIDDEN 2 Cria o arquivo como oculto. FC_SYSTEM 4 Cria o arquivo como sistema.
Programao ADVPL II e Guia de Referncia Pgina 333 Caso desejemos especificar mais de um atributo, basta som-los. Por exemplo , para criar um arquivo protegido contra gravao e escondido, passamos como atributo FC_READONLY + FC_HIDDEN. .
Nota: Caso o arquivo j exista, o contedo do mesmo ser ELIMINADO, e seu tamanho ser truncado para 0 ( ZERO ) bytes.
cArquivo Nome do arquivo a ser criado, podendo ser especificado um pacote absoluto ou relativo, para criar arquivos no ambiente local (Remote) ou no Servidor, respectivamente. nAtributo Atributos do arquivo a ser criado (Vide Tabela de atributos abaixo). Caso no especificado, o DEFAULT FC_NORMAL.
E Retorno:
Numrico
A funo retornar o Handle do arquivo para ser usado nas demais funes de manuteno de arquivo. O Handle ser maior ou igual a zero. Caso no seja possvel criar o arquivo, a funo retornar o handle -1, e ser possvel obter maiores detalhes da ocorrncia atravs da funo FERROR().
FERASE()
Funo utilizada para apagar um arquivo no disco. O Arquivo pode estar no Servidor ou na estao local (Remote). O arquivo para ser apagado deve estar fechado, no sendo permitido a utilizao de caracteres coringa (wildcards).
E Sintaxe: FERASE ( < cArquivo > )
E Parmetros:
cArquivo Nome do arquivo a ser apagado . Pode ser especificado um path absoluto ou relativo , para apagar arquivos na estao local (Remote) ou no Servidor, respectivamente.
E Retorno:
Numrico A funo retornar 0 caso o arquivo seja apagado com sucesso, e -1 caso no seja possvel apagar o arquivo. Caso a funo retorne -1, possvel obter maiores detalhes da ocorrncia atravs da funo FERROR().
E Pgina 334 Programao ADVPL II e Guia de Referncia xemplo:
#i ncl ude ' DI RECTRY. CH'
aEval ( Di r ect or y( " *. BAK" ) , { | aFi l e| FERASE( aFi l e[ F_NAME] ) })
/ / Est e exempl o apaga umar qui vo no cl i ent e ( Remot e ) , i nf or mando o st at us da oper ao I F FERASE( " C: \ Li st aTXT. t mp" ) == - 1 MsgSt op( ' Fal ha na del eo do Ar qui vo ( FEr r or ' +st r ( f er r or ( ) , 4) + ' ) ' ) El se MsgSt op( ' Ar qui vo del et ado comsucesso. ' ) ENDI F
FILE()
Funo que verifica se existe um arquivo ou um padro de arquivos, no diretrio. Podem ser especificados caminhos absolutos (arquivos na estao - Remote) ou relativos (a partir do RootPath do Protheus Server), sendo os caracteres * e ? (wildcards) aceitos.
E Sintaxe: FILE ( < cArquivo > )
E Parmetros:
cArquivo Nome do arquivo, podendo ser especificado um pacote (caminho) . Caminhos locais (Remote) ou caminhos de servidor so aceitos, bem como wildcards (Caracteres * e ? ).
E Retorno:
Lgico O retorno ser .T. caso o arquivo especificado exista. Caso o mesmo no exista no path especificado, a funo retorna .F.
Exemplo:
/ / Ver i f i ca no di r et r i o cor r ent e do ser vi dor se exi st e o ar qui vo t est e. dbf FI LE( " t est e. dbf " )
/ / Ver i f i ca no di r et r i o Si gaadv do ser vi dor se exi st e o ar qui vo t est e. dbf FI LE( " \ SI GAADV\ TESTE. dbf " )
/ / Ver i f i ca no di r et r i o Temp do cl i ent e ( Remot e) se exi st e o ar qui vo t est e. dbf FI LE( " C: \ TEMP\ TESTE. dbf " ) Programao ADVPL II e Guia de Referncia Pgina 335
Caso a funo FILE() seja executada em Job ( programa sem interface remota ), sendo passado um caminho absoluto de arquivo (exemplo c:\teste.txt) , a funo retornar .F. e FERROR() retornar -1 ).
FILENOEXT()
Funo que retorna o nome de um arquivo contido em uma string, ignorando a extenso.
E Sintaxe: FileNoExt( cString )
E Parmetros
cString String contendo o nome do arquivo.
Exemplo:
Local cSt r i ng : = ' \ SI GAADV\ ARQZZZ. DBF' cSt r i ng : = Fi l eNoExt ( cSt r i ng ) / / Ret or no \ SI GAADV\ ARQZZZ
FOPEN()
Funo de tratamento de arquivo de baixo nvel que abre um arquivo binrio existente para que este possa ser lido e escrito, dependendo do argumento <nModo>. Toda vez que houver um erro na abertura do arquivo, FERROR() pode ser usado para retornar o cdigo de erro do Sistema Operacional. Por exemplo, caso o arquivo no exista, FOPEN() retorna -1 e FERROR() retorna 2 para indicar que o arquivo no foi encontrado. Veja FERROR() para uma lista completa dos cdigos de erro.
Caso o arquivo especificado seja aberto, o valor retornado o handle (manipulador) do Sistema Operacional para o arquivo. Este valor semelhante a um alias no sistema de banco de dados, e ele exigido para identificar o arquivo aberto para as outras funes de tratamento de arquivo. Portanto, importante sempre atribuir o valor que foi retornado a uma varivel para uso posterior, como mostra o exemplo desta funo.
Nota: Esta funo permite acesso de baixo nvel a arquivos e dispositivos. Ela deve ser utilizada com extremo cuidado e exige que se conhea a fundo o sistema operacional utilizado. Pgina 336 Programao ADVPL II e Guia de Referncia
FOPEN procura o arquivo no diretrio corrente e nos diretrios configurados na varivel de pesquisa do Sistema Operacional, a no ser que um path seja declarado explicitamente como parte do argumento <cArq>. Por serem executadas em um ambiente cliente-servidor, as funes de tratamento de arquivos podem trabalhar em arquivos localizados no cliente (estao) ou no servidor. O ADVPL identifica o local onde o arquivo ser manipulado atravs da existncia ou no da letra do drive no nome do arquivo passado em <cArq>. Ou seja, se o arquivo for especificado com a letra do driver, ser aberto na estao. Caso contrrio, ser aberto no servidor com o diretrio configurado como rootpath sendo o diretrio raiz para localizao do arquivo.
E Sintaxe: FOPEN ( < cArq > , [ nModo ] )
E Parmetros:
cArq Nome do arquivo a ser aberto que inclui o pacote, caso haja um. nModo Modo de acesso DOS solicitado que indica como o arquivo aberto deve ser acessado. O acesso de uma das categorias relacionadas na tabela A e as restries de compartilhamento relacionada na Tabela B. O modo padro zero, somente para leitura, com compartilhamento por Compatibilidade. Ao definirmos o modo de acesso, devemos somar um elemento da Tabela A com um elemento da Tabela B.
E Retorno:
Numrico FOPEN() retorna o handle de arquivo aberto na faixa de zero a 65.535. Caso ocorra um erro, FOPEN() retorna -1.
Exemplo:
#i ncl ude ' f i l ei o. ch' . . . nH : = f open( ' \ si gaadv\ er r or . l og' , FO_READWRI TE + FO_SHARED ) I f nH == - 1 MsgSt op( ' Er r o de aber t ur a : FERROR ' +st r ( f er r or ( ) , 4) ) El se MsgSt op( ' Ar qui vo aber t o comsucesso. ' ) . . . f cl ose( nH) Endi f . . . Programao ADVPL II e Guia de Referncia Pgina 337
E Tabela A: Modos de acesso a arquivos binrios
Modo Constate(fileio.ch) Operao 0 FO_READ Aberto para leitura (padro assumido) 1 FO_WRITE Aberto para gravao 2 FO_READWRITE Aberto para leitura e gravao
E Tabela B: Modos de acesso de compartilhamento a arquivos binrios
Modo Constate(fileio.ch) Operao 0 FO_COMPAT Modo de Compatibilidade (Default). 16 FO_EXCLUSIVE Acesso total exclusivo. 32 FO_DENYWRITE Acesso bloqueando a gravao de outros processos ao arquivo. 48 FO_DENYREAD Acesso bloqueando a leitura de outros processos ao arquivo. 64 FO_DENYNONE Acesso compartilhado. Permite a leitura e gravao por outros.
FREAD()
Funo que realiza a leitura dos dados a partir um arquivo aberto, atravs de FOPEN(), FCREATE() e/ou FOPENPORT(), e armazena os dados lidos por referncia no buffer informado. FREAD() ler at o nmero de bytes informado em nQtdBytes; caso acontea algum erro ou o arquivo chegue ao final, FREAD() retornar um nmero menor que o especificado em nQtdBytes. FREAD() l normalmente caracteres de controle (ASC 128, ASC 0, etc.) e l a partir da posio atual do ponteiro atual do arquivo, que pode ser ajustado ou modificado pelas funes FSEEK() , FWRITE() ou FREADSTR().
A varivel String a ser utilizada como buffer de leitura deve ser sempre pr-alocado e passado como referncia. Caso contrrio, os dados no podero ser retornados.
nHandle o manipulador (Handle) retornado pelas funes FOPEN(), FCREATE(), FOPENPORT(), que faz referncia ao arquivo a ser lido. cBuffer o nome de uma varivel do tipo String, a ser utilizada como buffer de leitura, onde os dados lidos devero ser armazenados. O tamanho desta varivel deve ser maior ou igual ao tamanho informado em nQtdBytes. Esta varivel deve ser sempre passada por referncia. (@ antes do nome da varivel), caso contrrio os dados lidos no sero retornados. Pgina 338 Programao ADVPL II e Guia de Referncia nQtdBytes Define a quantidade de Bytes que devem ser lidas do arquivo a partir posicionamento do ponteiro atual.
E Retorno:
Numrico Quantidades de bytes lidos. Caso a quantidade seja menor que a solicitada, isto indica erro de leitura ou final de arquivo, Verifique a funo FERROR() para maiores detalhes.
FREADSTR ()
Funo que realiza a leitura de caracteres de um arquivo binrio. FREADSTR() l de um arquivo aberto, atravs de FOPEN(), FCREATE(), FOPENPORT(). FREADSTR() ler at o nmero de bytes informado em nQtdBytes ou at encontrar um CHR(0). Caso acontea algum erro ou o arquivo chegue ao final, FREADSTR() retornar uma string menor do que nQdBytes e colocar o erro em FERROR(). FREADSTR() l a partir da posio atual do ponteiro, que pode ser ajustado pelo FSEEK(), FWRITE( ) ou FREAD().
nHandle o manipulador retornado pelas funes FOPEN(), FCREATE(), FOPENPORT(). nQtdBytes Nmero mximo de bytes que devem ser lidos.
E Retorno:
Caracter Retorna uma string contendo os caracteres lidos.
FRENAME()
Atravs da funo FRENAME() possvel renomear um arquivo para outro nome, tanto no servidor como na estao. Ao renomear um arquivo no esquea que esta arquivo dever estar fechado (isto , no pode estar em uso por nenhum outro processo ou estao). Caso o arquivo esteja aberto por outro processo, a operao de renomear o arquivo no possvel. A funo fRename() no aceita wildcards ( * e/ou ? ).
Vale lembrar que no possvel renomear um arquivo especificando nos parmetros simultaneamente um caminho de servidor e um de estao remota, bem como especificar dois arquivos remotos e executar a funo fRename() atravs de um JOB. Caso isto ocorra, a funo retornar -1 , e fError() retornar tambm -1.
Programao ADVPL II e Guia de Referncia Pgina 339
Quando especificamos um path diferente nos arquivos de origem e destino , a funo fRename() realiza a funcionalidade de MOVER o arquivo para o Path especificado.
cOldFile Nome do arquivo ser renomeado, aceita caminhos do servidor e caminhos do cliente. Caso no seja especificado nenhuma unidade de disco e pacote, considerado o pacote atual no servidor. cNewFile Novo nome do arquivo, aceita tambm caminho do servidor, e caminho do cliente.
E Retorno:
Numrico Se o status retornado for -1 , ocorreu algum erro na mudana de nome: Verifique se os dois caminhos esto no mesmo ambiente, verifique a existncia do arquivo de origem, se ele no est em uso no momento por outro processo, e verifique se o nome do arquivo de destino j no existe no pacote de destino especificado.
FSEEK()
Funo que posiciona o ponteiro do arquivo para as prximas operaes de leitura ou gravao. As movimentaes de ponteiros so relativas nOrigem que pode ter os seguintes valores, definidos em fileio.ch:
E Tabela A: Origem a ser considerada para a movimentao do ponteiro de posicionamento do Arquivo.
Origem Constate(fileio.ch) Operao 0 FS_SET Ajusta a partir do inicio do arquivo. (Default) 1 FS_RELATIVE Ajuste relativo a posio atual do arquivo. 2 FS_END Ajuste a partir do final do arquivo.
E Sintaxe: FSEEK ( < nHandle > , [ nOffSet ] , [ nOrigem ] ) Pgina 340 Programao ADVPL II e Guia de Referncia
E Parmetros:
nHandle Manipulador obtido atravs das funes FCREATE,FOPEN. nOffSet nOffSet corresponde ao nmero de bytes no ponteiro de posicionamento do arquivo a ser movido. Pode ser um nmero positivo, zero ou negativo, a ser considerado a partir do parmetro passado em nOrigem. nOrigem Indica a partir de qual posio do arquivo, o nOffset ser considerado.
E Retorno:
Numrico FSEEK() retorna a nova posio do ponteiro de arquivo com relao ao incio do arquivo (posio 0) na forma de um valor numrico inteiro. Este valor no leva em conta a posio original do ponteiro de arquivos antes da execuo da funo FSEEK().
FT_FEOF()
Funo que retorna verdadeiro (.t.) se o arquivo texto aberto pela funo FT_FUSE() estiver posicionado no final do arquivo, similar funo EOF() utilizada para arquivos de dados.
E Sintaxe: FT_FEOF( )
E Parmetros:
Nenhum ()
E Retorno:
Lgico Retorna true caso o ponteiro do arquivo tenha chegado ao final, false caso contrrio.
FT_FGOTO()
Funo utilizada para mover o ponteiro, que indica a leitura do arquivo texto, para a posio absoluta especificada pelo argumento <nPos>.
E Sintaxe: FT_FGOTO ( < nPos > )
E Parmetros:
nPos Indica a posio em que ser colocado o ponteiro para leitura dos dados no arquivo.
Programao ADVPL II e Guia de Referncia Pgina 341 E Retorno:
Nenhum ()
FT_FGOTOP()
A funo tem como objetivo mover o ponteiro, que indica a leitura do arquivo texto, para a posio absoluta especificada pelo argumento <nPos>.
E Sintaxe: FT_FGOTO ( < nPos > )
E Parmetros:
nPos Indica a posio que ser colocado o ponteiro para leitura dos dados no arquivo.
E Retorno:
Nenhum ()
FT_FLASTREC()
Funo que retorna o nmero total de linhas do arquivo texto aberto pela FT_FUse. As linhas so delimitadas pela seqncia de caracteres CRLF o LF.
Verifique maiores informaes sobre formato do arquivo e tamanho mximo da linha de texto na funo FT_FREADLN().
E Sintaxe: FT_FLASTREC( )
E Parmetros:
Nenhum ()
E Retorno:
Numrico Retorna a quantidade de linhas existentes no arquivo. Caso o arquivo esteja vazio, ou no exista arquivo aberto, a funo retornar 0 (zero).
Pgina 342 Programao ADVPL II e Guia de Referncia Exemplo:
FT_FUse( ' t est e. t xt ' ) / / Abr e o ar qui vo CONOUT( " Li nhas no ar qui vo [ " +st r ( f t _f l ast r ec( ) , 6) +" ] " ) FT_FGOTOP( ) Whi l e ! FT_FEof ( ) conout ( " Pont ei r o [ " +st r ( FT_FRECNO( ) , 6) +" ] Li nha [ " +FT_FReadl n( ) +" ] " ) FT_FSki p( ) Enddo FT_FUse( ) / / Fecha o ar qui vo
FT_FREADLN()
Funo que retorna uma linha de texto do arquivo aberto pela FT_FUse. As linhas so delimitadas pela seqncia de caracteres CRLF ( chr(13) + chr(10) ) , ou apenas LF ( chr(10 ), e o tamanho mximo de cada linha 1022 bytes.
A utilizao desta funo no altera a posio do ponteiro para leitura dos dados, o ponteiro do arquivo no movido. A movimentao do ponteiro realizada atravs da funo FT_FSKIP(). O limite de 1022 bytes por linha inclui os caracteres delimitadores de final de linha. Deste modo, quando utilizados os separadores CRLF, isto nos deixa 1020 bytes de texto, e utilizando LF, 1021 bytes. A tentativa de leitura de arquivos com linhas de texto maiores do que os valores especificados acima resultar na leitura dos 1023 primeiros bytes da linha, e incorreta identificao das quebras de linha posteriores. As funes FT_F* foram projetadas para ler arquivos com contedo texto apenas. A utilizao das mesmas em arquivos binrios pode gerar comportamentos inesperados na movimentao do ponteiro de leitura do arquivo, e incorretas identificaes nos separadores de final de linha.
Release: Quando utilizado um Protheus Server, com build superior a 7.00.050713P, a funo FT_FREADLN() tambm capaz de ler arquivos texto / ASCII, que utilizam tambm o caractere LF ( chr(10) ) como separador de linha.
E Sintaxe: FT_FREADLN( ) Programao ADVPL II e Guia de Referncia Pgina 343
E Parmetros:
Nenhum ()
E Retorno:
Caracter Retorna a linha inteira na qual est posicionado o ponteiro para leitura de dados.
FT_FRECNO()
A funo tem o objetivo de retornar a posio do ponteiro do arquivo texto. A funo FT_FRecno retorna a posio corrente do ponteiro do arquivo texto aberto pela FT_FUse.
E Sintaxe: FT_FRECNO ( )
E Parmetros:
Nenhum ()
E Retorno:
Caracter Retorna a posio corrente do ponteiro do arquivo texto.
FT_FSKIP()
Funo que move o ponteiro do arquivo texto aberto pela FT_FUSE() para a prxima linha, similar ao DBSKIP() usado para arquivos de dados.
E Sintaxe: FT_FSKIP ( [ nLinhas ] )
E Parmetros:
nLinhas nLinhas corresponde ao nmero de linhas do arquivo TXT ref. movimentao do ponteiro de leitura do arquivo.
E Retorno
Nenhum ()
Pgina 344 Programao ADVPL II e Guia de Referncia FT_FUSE()
Funo que abre ou fecha um arquivo texto para uso das funes FT_F*. As funes FT_F* so usadas para ler arquivos texto, onde as linhas so delimitadas pela seqncia de caracteres CRLF ou LF (*) e o tamanho mximo de cada linha 1022 bytes. O arquivo aberto em uma rea de trabalho, similar usada pelas tabelas de dados.
Verifique maiores informaes sobre formato do arquivo e tamanho mximo da linha de texto na funo FT_FREADLN().
E Sintaxe: FT_FUSE ( [ cTXTFile ] )
E Parmetros:
cTXTFile Corresponde ao nome do arquivo TXT a ser aberto. Caso o nome no seja passado, e j exista um arquivo aberto. o mesmo fechado.
E Retorno:
Numrico A funo retorna o Handle de controle do arquivo. Em caso de falha de abertura, a funo retornar -1
FWRITE()
Funo que permite a escrita em todo ou em parte do contedo do buffer, limitando a quantidade de Bytes atravs do parmetro nQtdBytes. A escrita comea a partir da posio corrente do ponteiro de arquivos, e a funo FWRITE retornar a quantidade real de bytes escritos. Atravs das funes FOPEN(), FCREATE(), ou FOPENPORT(), podemos abrir ou criar um arquivo ou abrir uma porta de comunicao, para o qual sero gravados ou enviados os dados do buffer informado. Por tratar-se de uma funo de manipulao de contedo binrio , so suportados na String cBuffer todos os caracteres da tabela ASCII , inclusive caracteres de controle ( ASC 0 , ASC 12 , ASC 128 , etc.).
Caso acontea alguma falha na gravao, a funo retornar um nmero menor que o nQtdBytes. Neste caso , a funo FERROR() pode ser utilizada para determinar o erro especfico ocorrido. A gravao no arquivo realizada a partir da posio atual do ponteiro, que pode ser ajustado atravs das funes FSEEK(), FREAD() ou FREADSTR().
E Sintaxe: FWRITE ( < nHandle > , < cBuffer > , [ nQtdBytes ] ) Programao ADVPL II e Guia de Referncia Pgina 345
E Parmetros: nHandle o manipulador de arquivo ou device retornado pelas funes FOPEN(), FCREATE(), ou FOPENPORT(). cBuffer <cBuffer> a cadeia de caracteres a ser escrita no arquivo especificado. O tamanho desta varivel deve ser maior ou igual ao tamanho informado em nQtdBytes (caso seja informado o tamanho). nQtdBytes <nQtdBytes> indica a quantidade de bytes a serem escritos a partir da posio corrente do ponteiro de arquivos. Caso seja omitido, todo o contedo de <cBuffer> escrito.
E Retorno: Numrico FWRITE() retorna a quantidade de bytes escritos na forma de um valor numrico inteiro. Caso o valor retornado seja igual a <nQtdBytes>, a operao foi bem sucedida. Caso o valor de retorno seja menor que <nBytes> ou zero, ou o disco est cheio ou ocorreu outro erro. Neste caso, utilize a funo FERROR() para obter maiores detalhes da ocorrncia.
Exemplo:
#I NCLUDE " FI LEI O. CH" #DEFI NE F_BLOCK 1024 / / Def i ne o bl oco de Byt es a ser eml i dos / gr avados por vez
User Funct i on Test Copy( ) Local cBuf f er : = SPACE( F_BLOCK) Local nHOr i gem, nHDest i no Local nByt esLi dos , nByt esFal t a , nTamAr qui vo Local nByt esLer , nByt esSal vo Local l Copi aOk : = . T.
/ / Abr e o ar qui vo de Or i gem nHOr i gem: = FOPEN( " ORI GEM. TXT" , FO_READ)
/ / Test a a aber t ur a do Ar qui vo I f nHOr i gem== - 1 MsgSt op( ' Er r o ao abr i r or i gem. Fer r or = ' +st r ( f er r or ( ) , 4) , ' Er r o' ) Ret ur n . F. Endi f
/ / Det er mi na o t amanho do ar qui vo de or i gem nTamAr qui vo : = Fseek( nHOr i gem, 0, 2)
/ / Move o pont ei r o do ar qui vo de or i gempar a o i ni ci o do ar qui vo Fseek( nHOr i gem, 0)
/ / Cr i a o ar qui vo de dest i no nHDest i no : = FCREATE( " DESTI NO. TXT" , FC_NORMAL)
/ / Test a a cr i ao do ar qui vo de dest i no I f nHDest i no == - 1 MsgSt op( ' Er r o ao cr i ar dest i no. Fer r or = ' +st r ( f er r or ( ) , 4) , ' Er r o' ) FCLOSE( nHOr i gem) / / Fecha o ar qui vo de Or i gem Pgina 346 Programao ADVPL II e Guia de Referncia Ret ur n . F. Endi f
/ / Def i ne que a quant i dade que f al t a copi ar o pr pr i o t amanho do Ar qui vo nByt esFal t a : = nTamAr qui vo
/ / Enquant o houver dados a ser emcopi ados Whi l e nByt esFal t a > 0
/ / Det er mi na quant i dade de dados a ser eml i dos nByt esLer : = Mi n( nByt esFal t a , F_BLOCK )
/ / l os dados do Ar qui vo nByt esLi dos : = FREAD( nHOr i gem, @cBuf f er , nByt esLer )
/ / Det er mi na se no houve f al ha na l ei t ur a I f nByt esLi dos < nByt esLer MsgSt op( " Er r o de Lei t ur a da Or i gem. " +; St r ( nByt esLer , 8, 2) +" byt es a LER. " +; St r ( nByt esLi dos, 8, 2) +" byt es Li dos. " +; " Fer r or = " +st r ( f er r or ( ) , 4) , ' Er r o' ) l Copi aOk : = . F. Exi t Endi f
/ / Sal va os dados l i dos no ar qui vo de dest i no nByt esSal vo : = FWRI TE( nHDest i no, cBuf f er , nByt esLer )
/ / Det er mi na se no houve f al ha na gr avao I f nByt esSal vo < nByt esLer MsgSt op( " Er r o de gr avao do Dest i no. " +; St r ( nByt esLer , 8, 2) +" byt es a SALVAR. " +; St r ( nByt esSal vo, 8, 2) +" byt es gr avados. " +; " Fer r or = " +st r ( f er r or ( ) , 4) , ' Er r o' ) l Copi aOk : = . F. EXI T Endi f
/ / El i mi na do Tot al do Ar qui vo a quant i dade de byt es copi ados nByt esFal t a - = nByt esLer
Enddo
/ / Fecha os ar qui vos de or i geme dest i no FCLOSE( nHOr i gem) FCLOSE( nHDest i no)
I f l Copi aOk MsgSt op( ' Cpi a de Ar qui vos f i nal i zada comsucesso. ' +; st r ( nTamAr qui vo, 12, 0) +' byt es copi ados. ' , ' Fi nal ' ) El se MsgSt op( ' Fal ha na Cpi a. Ar qui vo de Dest i no i ncompl et o. ' +; ' Do t ot al de ' +st r ( nTamAr qui vo, 12, 0) +' byt es, f al t ar am' +st r ( nByt esFal t a, 12, 0) +' byt es. ' , ' Fi nal ' ) Endi f
Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 347
MSCOPYFILE()
Funo que executa a cpia binria de um arquivo para o destino especificado.
E Sintaxe: MSCOPYFILE( cArqOrig, cArqDest )
E Parmetros:
cArqOrig Nome do arquivo origem e a extenso. cArqDest Nome do arquivo destino e a extenso.
E Retorno:
Lgico Se a copia for realizada com sucesso a funo retornar verdadeiro (.T.).
Exemplo:
Local cAr qOr i g : = ' ARQ00001. DBF' Local cAr qDest : = ' ARQ00002. XXX'
I f MsCopyFi l e( cAr qOr i g, cAr qDest ) APMsgI nf o( ' Copi a r eal i zada comsucesso! ' ) EndI f
MSCOPYTO()
Funo que realiza a cpia dos registros de uma base de dados para outra, criando o arquivo destino de acordo com a estrutura da base de dados origem.
E Sintaxe: MSCOPYTO( [cArqOrig], cArqDest )
E Parmetros:
cArqOrig Nome do arquivo origem e a extenso se o ambiente for Top o parmetro passar a ser obrigatrio. cArqDest Nome do arquivo destino e a extenso.
E Retorno:
Lgico Se a cpia for realizada com sucesso a funo retornar verdadeiro (.T.).
Exemplo:
Local cAr qDest : = ' SX2ZZZ. DBF' Pgina 348 Programao ADVPL II e Guia de Referncia DbSel ect Ar ea( ' SX2' ) I f MsCopyTo( , cAr qDest ) APMsgI nf o( ' Copi a r eal i zada comsucesso! ' ) El se APMsgI nf o( ' Pr obl emas ao copi ar o ar qui vo SX2! ' ) EndI f
MSCREATE()
Funo que cria um arquivo (tabela) de acordo com a estrutura informada no parmetro aStruct. Se o parmetro cDriver no for informado o RDD corrente ser assumido como padro. Para criao de tabelas no Top Connect necessrio estar conectado ao banco e o environment do protheus ser TOP.
aStruct: array contendo a estrutura da tabela aonde: 1 - caracter, nome do campo; 2 - caracter, tipo do campo; 3 - numrico, tamanho do campo; 4 - numrico, decimais.
E Sintaxe: MsCreate( cArquivo, aStru ,[cDriver] )
E Parmetros:
cArquivo Nome do arquivo. aStruct Estrutura do arquivo. cDriver RDD do arquivo.
E Retorno:
Lgico Indica se a operao foi executada com sucesso.
Exemplo:
Local cTar get : = ' \ si gaadv\ ' Local aSt r ut aSt r ut : = { { ' Campo' , ' C' , 40, 0 } } I f MsCr eat e( cTar get +' ARQ1001' , aSt r ut ) APMsgI nf o( ' Cr i ado comsucesso! ' ) El se APMsgI nf o( ' Pr obl emas ao cr i ar o ar qui vo! ' ) EndI f
Programao ADVPL II e Guia de Referncia Pgina 349
MSERASE()
Funo utilizada para deletar fisicamente o arquivo especificado.
E Sintaxe: MsErase( cArquivo, [cIndice], [cDriver] )
E Parmetros:
cArquivo Nome do arquivo e a extenso. cIndice Nome do arquivo de ndice e a extenso. cDriver RDD do arquivo, se no for informado assumir o RDD corrente.
E Retorno:
Lgico Indica se a operao foi executada com sucesso.
Exemplo:
Local cAr qui vo : = ' SX2ZZZ. DBF' Local cI ndi ce : = ' SX2ZZZ' + Or dBagExt ( ) I f MsEr ase( cAr qui vo, cI ndi ce ) APMsgI nf o( ' Ar qui vo del et ado comsucesso! ' ) El se APMsgI nf o( ' Pr obl emas ao del et ar ar qui vo! ' ) EndI f
MSRENAME()
Funo que verifica a existncia do arquivo especificado.
E Sintaxe: MsFile( cArquivo, [cIndice], [cDriver] )
E Parmetros:
cArquivo Nome do arquivo e a extenso. cIndice Nome do arquivo de ndice e a extenso. cDriver RDD do arquivo, se no for informado assumir o RDD corrente.
E Retorno:
Lgico Indica se o arquivo especificado existe.
Pgina 350 Programao ADVPL II e Guia de Referncia Exemplo:
Local cAr qui vo : = ' SX2ZZZ. DBF' Local cI ndi ce : = ' SX2ZZZ' + Or dBagExt ( ) I f ! MsFi l e ( cAr qui vo, cI ndi ce ) APMsgI nf o( ' Ar qui vo no encont r ado! ' ) EndI f
RETFILENAME()
Funo que retorna o nome de um arquivo contido em uma string, ignorando o caminho e a extenso.
E Sintaxe: RetFileName( cArquivo )
E Parmetros:
cArquivo String contendo o nome do arquivo
E Retorno:
Caracter Nome do arquivo contido na string cArquivo sem o caminho e a extenso.
Exemplo:
Local cAr qui vo : = ' \ SI GAADV\ ARQZZZ. DBF' cAr qui vo : = Ret Fi l eName( cAr qui vo ) / / r et or no ARQZZZ
Manipulao de arquivos e ndices temporrios
CRIATRAB()
Funo que cria um arquivo de trabalho com uma estrutura especificada, sendo que:
O Caso o parmetro lDbf seja definido como .T., a funo criar um arquivo DBF com este nome e a estrutura definida em aArray. O Caso o parmetro lDbf seja definido como .F., a funo no criar arquivo de nenhum tipo, apenas fornecer um nome vlido.
E Sintaxe: CriaTrab(aArray,lDbf) Programao ADVPL II e Guia de Referncia Pgina 351
E Parmetros:
aArray Array multidimensional contendo a estrutura de campos da tabela que ser criada no formato: {Nome, Tipo, Tamanho, Decimal} lDbf Determina se o arquivo de trabalho deve ser criado ( .T.) ou no (.F. )
E Retorno:
Caracter Nome do Arquivo gerado pela funo.
Exemplo:
/ / Coml Dbf = . F. cAr q : = Cr i aTr ab( NI L, . F. ) cI ndi ce : = C9_AGREG++I ndexKey( ) I ndex on &cI ndi ce To &cAr q
/ / Coml Dbf = . T. aSt r u : = {} AADD( aSt r u, { MARK , C, 1, 0}) AADD( aSt r u, { AGLUT , C, 10, 0}) AADD( aSt r u, { NUMOP , C, 10, 0}) AADD( aSt r u, { PRODUTO, C, 15, 0}) AADD( aSt r u, { QUANT , N, 16, 4}) AADD( aSt r u, { ENTREGA, D, 8, 0}) AADD( aSt r u, { ENTRAJ U, D, 8, 0}) AADD( aSt r u, { ORDEM , N, 4, 0}) AADD( aSt r u, { GERADO , C, 1, 0}) cAr qTr ab : = Cr i aTr ab( aSt r u, . T. ) USE &cAr qTr ab ALI AS TRB NEW
Na criao de ndices de trabalho temporrios utilizada a sintaxe:
O CriaTrab(Nil, .F.)
Pgina 352 Programao ADVPL II e Guia de Referncia Manipulao de bases de dados
ALIAS()
Funo de banco de dados utilizada para determinar o alias da rea de trabalho especificada. Alias o nome atribudo a uma rea de trabalho quando um arquivo de banco de dados est em uso. O nome real atribuido o nome do arquivo de banco de dados, ou um nome que foi explicitamente atribudo atravs da clusula ALIAS do comando USE.
A funo ALIAS() o inverso da funao SELECT() pois retorna o alias atravs do nmero da rea de trabalho, enquanto SELECT() retorna o nmero da rea de trabalho atravs do alias.
E Sintaxe: ALIAS ( [ nAreaTrabalho ] )
E Parmetros:
nAreaTrabalho <nAreaTrabalho> o nmero da rea de trabalho a ser verificada.
E Retorno:
Caracter Retorna o alias da rea de trabalho especificada na forma de uma cadeia de caracteres, em letra maiscula. Caso a <nAreaTrabalho> no seja especificada, retornado o alias da rea de trabalho corrente. Se no houver nenhum arquivo de banco de dados em uso na rea de Trabalho especificada, ALIAS() retorna uma cadeia de caracteres nula ("").
Exemplo:
cAl i as : = al i as( ) I F empt y( cAl i as) al er t ( ' No h Ar ea emuso' ) El se al er t ( Ar ea emuso at ual : ' +cAl i as) Endi f
BOF() / EOF()
As funes BOF() e EOF() so utilizadas para determinar se o ponteiro de leitura do arquivo encontra-se no comeo ou no final do mesmo conforme abaixo:
O BOF() uma funo de tratamento de banco de dados utilizada para testar uma condio de limite de inicial do arquivo quando o ponteiro de registros est se movendo para trs em um arquivo de banco de dados. Programao ADVPL II e Guia de Referncia Pgina 353 O EOF() uma funo de tratamento de banco de dados utilizada para testar uma condio de limite de final de arquivo quando o ponteiro de registros est se movendo para frente em um arquivo de banco de dados.
Normalmente utilizada a condio EOF() como parte do argumento <lCondicao> de uma construao DO WHILE que processa registros sequencialmente em um arquivo de banco de dados. Neste caso <lCondicao> incluiria um teste para .NOT. EOF(), forando o lao DO WHILE a terminar quando EOF() retornar verdadeiro (.T.)
E Sintaxe: BOF() / EOF()
E Parmetros:
Nenhum ()
E Retorno:
Lgico Retorna verdadeiro (.T.) quando feita uma tentativa de mover o ponteiro de registros para alm do primeiro registro lgico em um arquivo de banco de dados. Do contrrio, ela retorna falso (.F.). Lgico Retorna verdadeiro (.T.) quando feita uma tentativa de mover o ponteiro de registros para alm do ltimo registro lgico em um arquivo de banco de dados. Do contrrio, ela retorna falso (.F.). Caso no haja nenhum arquivo de banco de dados aberto na rea de trabalho corrente, EOF() retorna falso (.F.). Se o arquivo de banco de dados corrente no possui registros, EOF() retorna verdadeiro (.T.).
Pgina 354 Programao ADVPL II e Guia de Referncia COPY()
O comando COPY TO permite a cpia de todos ou parte dos registros da tabela atualmente selecionada como rea de trabalho atual, para um novo arquivo. Os registros considerados para a cpia podem ser limitados pela clusula <escopo>, atravs de expresses FOR/WHILE, e/ou atravs de um filtro.
Se o filtro para registros deletados ( SET DELETED ) estiver desligado (OFF), registros deletados ( marcados para deleo ) so copiados para o arquivo de destino, mantendo este status. Caso contrrio, nenhum registro deletado copiado. Da mesma maneira, caso exista uma condio de filtro na tabela atual ( SET FILTER ), apenas os registros que satisfaam a condio de filtro sero copiados.
Os registros so lidos na tabela atual, respeitando a ordem de ndice setada. Caso no hajam ndices abertos, ou a ordem de navegao nos ndices (SET ORDER ) seja 0 (zero), os registros so lidos em ordem natural ( ordem de RECNO ) .
A tabela de destino dos dados copiados criada, e aberta em modo exclusivo, antes da operao de cpia efetiva ser iniciada.
E Tabela A : Especificao do formato SDF ( System Data Format )
Elemento do Arquivo Formato Campos 'C' Caractere Tamanho fixo, ajustado com espaos em branco. Campos 'D' Data Formato aaaammdd ( ano, ms, dia ). Campos 'L' lgicos T ou F. Campos 'M' Memo (campo ignorado). Campos 'N' Numricos Ajustados direita, com espaos em branco. Delimitador de Campos Nenhum. Separador de Registros CRLF ( ASCII 13 + ASCII 10 ). Marca de final de arquivo (EOF) Nenhum.
Programao ADVPL II e Guia de Referncia Pgina 355
E Tabela B : Especificao do formato delimitado ( DELIMITED / DELIMITED WITH <cDelimiter> )
Elemento do Arquivo Formato Campos 'C' Caractere Delimitados, ignorando espaos direita. Campos 'D' Data Formato aaaammdd ( ano, ms, dia ). Campos 'L' lgicos T ou F. Campos 'M' Memo (campo ignorado). Campos 'N' Numricos sem espaos em branco. Delimitador de Campos Vrgula. Separador de Registros CRLF ( ASCII 13 + ASCII 10 ). Marca de final de arquivo (EOF) Nenhum.
A Linguagem Advpl, antes do Protheus, suportava a gerao de uma tabela delimitada diferenciada, obtida atravs do comando COPY TO (...) DELIMITED WITH BLANK . No Protheus este formato no suportado. Caso utilize-se deste comando com a sintaxe acima, o arquivo ASCII gerado ser delimitado, utilizando-se a sequncia de caracteres 'BLANK' como delimitadora de campos Caractere.
E Sintaxe:
COPY [ FIELDS <campo,...> ] TO cFile [cEscopo] [ WHILE <lCondicao> ] [ FOR <lCondicao> ] [ SDF | DELIMITED [WITH <cDelimiter>] ] [ VIA <cDriver> ]
E Parmetros:
FIELDS <campo,...> FIELDS <campo,...> especifica um ou mais campos, separados por vrgula, a serem copiados para a tabela de destino. Caso no especificado este parmetro, sero copiados todos os campos da tabela de origem. TO cFile TO <cFile> especifica o nome do arquivo de destino. O nome do arquivo de destino pode ser especificado de forma literal direta, ou como uma expresso Advpl, entre parnteses.
Caso sejam especificadas as clusulas SDF ou DELIMITED, gerado um arquivo ASCII, com extenso .txt por default. cEscopo <cEscopo> define a poro de dados da tabela atual a ser coipiada. Por default, so copiados todos os registros (ALL). Os escopos possveis de uso so: Pgina 356 Programao ADVPL II e Guia de Referncia
ALL - Copia todos os registros. REST - Copia, a partir do registro atualmente posicionado, at o final da tabela. NEXT <n> - Copia apenas <n> registros, iniciando a partir do registro atualmente posicionado.
OBSERVAO : Vale a pena lembrar que o escopo sensvel tambm s demais condies de filtro ( WHILE / FOR ). WHILE <lCondicao> WHILE <lCondicao> permite especificar uma condio para realizao da cpia, a partir do registro atual, executada antes de inserir cada registro na tabela de destino, sendo realizada a operao de cpia enquanto esta condio for verdadeira. FOR <lCondicao> FOR <lCondicao> especifica uma condio para cpia de registros, executada antes de inserir um registro na tabela de destino, sendo a operao realizada apenas se lCondicao for verdadeira ( .T. ) [SDF|DELIMITED] [ SDF | DELIMITED [WITH <xcDelimiter>] ]
SDF especifica que o tipo de arquivo de destino gerado um arquivo no formato "System Data Format" ASCII, onde registros e campos possuirem tamanho fixo no arquivo de destino.
DELIMITED especifica que o arquivo ASCII de destino ser no formato delimitado, onde os campos do tipo Caractere so delimitados entre aspas duplas ( delimitador Default ). Registros e campos tm tamanho varivel no arquivo ASCII.
DELIMITED WITH <xcDelimiter> permite especificar um novo caractere, ou sequncia de caracteres, a ser utilizada como delimitador, ao invs do default ( aspas duplas ). O caractere delimitador pode ser escrito de forma literal, ou como uma expresso entre parnteses.
Nas Tabelas complementares A e B, na documentao do comando, so detalhadas as especificaes dos formatos SDF e DELIMITED. VIA <cDriver> VIA <xcDriver> permite especificar o driver utilizado para criar a tabela de destino dos dados a serem copiados.
O Driver deve ser especificado como uma expresso caractere. Caso especificado como um valor literal direto, o mesmo deve estar entre aspas.
Programao ADVPL II e Guia de Referncia Pgina 357
E Retorno:
Nenhum ()
COPY STRUCTURE()
O comando COPY STRUCTURE cria uma nova tabela vazia, com a estrutura da tabela ativa na rea de trabalho atual. Caso a tabela a ser criada j exista, a mesma sobrescrita. A tabela de destino criada utiliza o mesmo RDD da tabela de origem ( tabela ativa na rea de trabalho atual ).
A Linguagem Advpl, antes do Protheus, suportava a parametrizao de uma lista de campos da tabela atual, para compor a estrutura da tabela de destino, atravs da clusula FIELDS <campo,...>. Esta opo no suportada no Protheus. Caso seja utilizada, o programa ser abortado com a ocorrncia de erro fatal : 'DBCopyStruct - Parameter <Fields> not supported in Protheus'
E Sintaxe:
COPY STRUCTURE TO <xcDataBase>
E Parmetros:
TO <xcDataBase> Deve ser especificado em xcDatabase o nome da tabela a ser criada.
E Retorno:
Nenhum ()
DBAPPEND()
A funo DBAPPEND() acrescenta mais um registro em branco no final da tabela corrente. Se no houver erro da RDD, o registro acrescentado e bloqueado.
E Sintaxe: DBAPPEND ( [ lLiberaBloqueios ] )
E Parmetros:
lLiberaBloqueios Se o valor for .T., libera todos os registros bloqueados anteriormente (locks). Se for .F., todos os bloqueios anteriores so mantidos. Valor default: .T.
Pgina 358 Programao ADVPL II e Guia de Referncia E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent es NEW FOR i : =1 t o 5 DBAPPEND( . F. ) NOME : = " XXX" END : =" YYY" NEXT / / Os 5 r egi st r os i ncl u dos per manecembl oqueados DBAPPEND( ) / / Todos os bl oquei os ant er i or es so l i ber ados
DBCLEARALLFILTER()
A funo DBCLEARALLFILTER() salva as atualizaes realizadas e pendentes de todas as tabelas e depois limpa as condies de filtro de todas as tabelas.
E Sintaxe: DBCLEARALLFILTER()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent es NEW DBSETFI LTER( {| | I dade < 40}, ' I dade < 40' ) / / Set a a expr esso de f i l t r o . . . DBCLEARALLFI LTER( ) / / Li mpa a expr esso de f i l t r o de t odas as or dens
Programao ADVPL II e Guia de Referncia Pgina 359 DBCLEARFILTER()
A funo DBCLEARFILTER() salva as atualizaes realizadas e pendentes na tabela corrente e depois limpa todas as condies de filtro da ordem ativa no momento. Seu funcionamento oposto ao comando SET FILTER.
E Sintaxe: DBCLEARFILTER()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent es NEW DBSETFI LTER( {| | I dade < 40}, " I dade < 40" ) / / Set a a expr esso de f i l t r o . . . DBCLEARFI LTER( ) / / Li mpa a expr esso de f i l t r o
DBCLEARINDEX()
A funo DBCLEARINDEX() salva as atualizaes pendentes na tabela corrente e fecha todos os arquivos de ndice da rea de trabalho. Por conseqncia, limpa todas as ordens da lista. Seu funcionamento oposto ao comando SET INDEX.
E Sintaxe: DBCLEARINDEX()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent es NEW DBSETI NDEX( " Nome" ) / / Abr e o ar qui vo de ndi ce " Nome" . . . Pgina 360 Programao ADVPL II e Guia de Referncia DBCLEARI NDEX( ) / / Fecha t odos os ar qui vos de ndi ces
DBCLOSEALL()
A funo DBCLOSEALL() salva as atualizaes pendentes, libera todos os registros bloqueados e fecha todas as tabelas abertas (reas de trabalho) como se chamasse DBCLOSEAREA para cada rea de trabalho.
E Sintaxe: DBCLOSEALL()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
/ / Est e exempl o demonst r a como se pode ut i l i zar o DBCLOSEALL par a f echar a r ea de t r abal ho at ual . USE Cl i ent es NEW DBSETI NDEX( " Nome" ) / / Abr e o ar qui vo de ndi ce " Nome" USE For necedor es NEW DBSETI NDEX( " I dade" ) / / Abr e o ar qui vo de ndi ce " I dade" . . . DBCLOSEALL( ) / / Fecha t odas as r eas de t r abal ho, t odos os ndi ces e or dens
DBCLOSEAREA()
A funo DBCLOSEAREA() permite que um alias presente na conexo seja fechado, o que viabiliza seu reuso em outra operao. Este comando tem efeito apenas no alias ativo na conexo, sendo necessria sua utilizao em conjunto com o comando DbSelectArea().
E Sintaxe: DBCLOSEAREA()
E Parmetros:
Nenhum ()
Programao ADVPL II e Guia de Referncia Pgina 361 E Retorno:
Nenhum ()
Exemplo:
DbUser Ar ea( . T. , DBFCDX, \ SA1010. DBF, SA1DBF, . T. , . F. ) DbSel ect Ar ea( SA1DBF) MsgI nf o( A t abel a SA1010. DBF possui : + STRZERO( RecCount ( ) , 6) + r egi st r os. ) DbCl oseAr ea( )
DBCOMMIT()
A funo DBCOMMIT() salva em disco todas as atualizaes pendentes na rea de trabalho corrente.
E Sintaxe: DBCOMMIT()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent es NEW DBGOTO( 100) Nome : = " J ose" USE For necedor es NEW DBGOTO( 168) Nome : = " J oao" DBCOMMI T( ) / / Sal va emdi sco apenas as al t er aes r eal i zadas na t abel a For necedor es
DBCOMMITALL()
A funo DBCOMMITALL() salva em disco todas as atualizaes pendentes em todas as reas de trabalho.
E Sintaxe: DBCOMMITALL()
Pgina 362 Programao ADVPL II e Guia de Referncia E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent es NEW DBGOTO( 100) Nome : = " J ose" USE For necedor es NEW DBGOTO( 168) Nome : = " J oao" DBCOMMI TALL( ) / / Sal va emdi sco as al t er aes r eal i zadas nas t abel as Cl i ent es e For necedor es
DBCREATE()
A funo DBCREATE() utilizada para criar um novo arquivo de tabela cujo nome est especificado atravs do primeiro parmetro (cNome) e estrutura atravs do segundo (aEstrutura). A estrutura especificada atravs de um array com todos os campos, onde cada campo expresso atravs de um array contendo {Nome, Tipo, Tamanho, Decimais}.
cNOME Nome do arquivo a ser criado. Se contm pasta, ela se localiza abaixo do "RootPath". Se no, criado por padro no caminho formado por "RootPath"+"StartPath" aESTRUTURA Lista com as informaes dos campos para ser criada a tabela. cDRIVER Nome da RDD a ser utilizado para a criao da tabela. Se for omitido ser criada com a corrente.
E Retorno:
Nenhum ()
Programao ADVPL II e Guia de Referncia Pgina 363 Exemplo:
/ / Est e exempl o most r a como se pode cr i ar novo ar qui vo at r avs da f uno DBCREATE: LOCAL aEst r ut ur a : ={{Cod, N, 3, 0}, {Nome, C, 10, 0}, {I dade, N, 3, 0}, {Nasc, D, 8, 0}, {Pagt o, N, 7, 2}} / / Cr i a a t abel a como RDD cor r ent e DBCREATE( ' \ t est e\ cl i ent e. dbf ' , aEst r ut ur a) USE ' \ t est e\ cl i ent e. dbf ' VI A ' DBFCDX' NEW
Erros mais comuns:
1. DBCreate - Data base files can only be created on the server: O nome do arquivo a ser criado no pode conter 'driver', pois, por conveno, ele seria criado na mquina onde o Remote est rodando. 2. DBCreate - Invalid empty filename: Nome do arquivo no foi especificado. 3. DBCreate - Field's name cannot be 'DATA': Algumas RDD's no suportam este nome de campo. uma palavra reservada. 4. DBCreate - The length of Field's name must be at most 10: Nome do campo no pode ter mais que 10 caracteres. 5. DBCreate - Field's name must be defined: Nome do campo no foi definido. 6. DBCreate - Field's type is not defined: Tipo do campo no foi definido. 7. DBCreate - invalid Field's type: Tipo do campo diferente de 'C', 'N', 'D', 'M' ou 'L'.
8. DBCreate - Invalid numeric field format: Considerando 'len' o tamanho total do campo numrico e 'dec' o nmero de decimais, ocorre este erro se:
(len = 1) .and. (dec <> 0): Se o tamanho total 1, o campo no pode ter decimais.
(len>1) .and. (len< dec + 2): Se o tamanho total maior que 1, ele deve ser maior que o nmero de decimais mais 2, para comportar o separador de decimais e ter pelo menos um algarismo na parte inteira.
Exemplo: O nmero 12.45 poderia ser o valor de um campo com len=5 e dec=2 (no mnimo).
Pgina 364 Programao ADVPL II e Guia de Referncia
Erros mais comuns:
Podem ocorrer tambm erros decorrentes de permisso e direitos na pasta onde se est tentando criar o arquivo ou por algum problema no banco de dados. Verifique as mensagens do servidor Protheus e do banco de dados.
DBCREATEINDEX()
A funo DBCREATEINDEX() utilizada para criar um novo arquivo de ndice com o nome especificado atravs do primeiro parmetro, sendo que, se o mesmo existir, deletado e criado o novo. Para tanto so executados os passos a seguir:
O Salva fisicamente as alteraes ocorridas na tabela corrente; O Fecha todos os arquivos de ndice abertos; O Cria o novo ndice; O Seta o novo ndice como a ordem corrente; O Posiciona a tabela corrente no primeiro registro do ndice.
Com exceo do RDD CTREE, a tabela corrente no precisa estar aberta em modo exclusivo para a criao de ndice, pois na criao de ndices no Ctree alterada a estrutura da tabela, precisando para isto a tabela estar aberta em modo exclusivo.
E Sintaxe: DBCREATEINDEX(<cNOME>, <cEXPCHAVE>, [bEXPCHAVE], [lUNICO])
E Parmetros:
cNOME Nome do arquivo de ndice a ser criado. cEXPCHAVE Expresso das chaves do ndice a ser criado na forma de string. bEXPCHAVE Expresso das chaves do ndice a ser criado na forma executvel. lUNICO Cria ndice como nico (o padro .F.).
E Retorno:
Nenhum ()
Programao ADVPL II e Guia de Referncia Pgina 365 Exemplo:
/ / Est e exempl o most r a como se pode cr i ar novo ar qui vo de ndi ce cr i ando a or demsobr e os / / campos Nome e End e no acei t ar dupl i cao:
USE Cl i ent e VI A " DBFCDX" NEW DBCREATEI NDEX( " \ t est e\ i nd2. cdx" , " Nome+End" , { | | Nome+End }, . T. )
DBDELETE()
A funo DBDELETE() marca o registro corrente como apagado logicamente(), sendo necessria sua utilizao em conjunto com as funes RecLock() e MsUnLock().
Para filtrar os registro marcados do alias corrente pode-se utilizar o comando SET DELETED e para apag-los fisicamente pode-se utilizar a funo __DBPACK().
E Sintaxe: DBDELETE ( )
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
DbSel ect Ar ea( SA1) DbSet Or der ( 1) / / A1_FI LI AL + A1_COD + A1_LOJ A DbSeek( 01 + 900001 + 01) / / Busca exat a
I F Found( ) RecLock( SA1, . F. ) / / Def i ne que ser r eal i zada uma al t er ao no r egi st r o posi ci onado DbDel et e( ) / / Ef et ua a excl uso l gi ca do r egi st r o posi ci onado. MsUnLock( ) / / Conf i r ma e f i nal i za a oper ao ENDI F
Pgina 366 Programao ADVPL II e Guia de Referncia DBF()
A funo DBF() verifica qual o Alias da rea de trabalho corrente. O Alias definido quando a tabela aberta atravs do parmetro correspondente (DBUSEAREA()). Esta funo o inverso da funo SELECT(), pois nesta retornado o nmero da rea de trabalho do Alias correspondente.
E Sintaxe: DBF()
E Parmetros:
Nenhum ()
E Retorno:
Caracter Retorna o Alias corrente. Caso no exista Alias corrente retorna "" (String vazia).
Exemplo:
dbUseAr ea( . T. , " dbf cdxads" , " \ dadosadv609\ sa1990. dbf " , " SSS" , . T. , . F. ) MessageBox( " O Al i as cor r ent e : " +DBF( ) , " Al i as" , 0) / / Resul t ado: " O Al i as cor r ent e : SSS"
DBFIELDINFO()
A funo DBFIELDINFO() utilizada para obter informaes sobre determinado campo da tabela corrente. O tipo de informao (primeiro argumento) escolhido de acordo com as constantes abaixo:
E Tabela A : Constantes utilizadas na parametrizao da funo
Constante Descrio Retorno DBS_NAME Nome do campo. Caracter DBS_DEC Nmero de casas decimais. Numrico DBS_LEN Tamanho. Numrico DBS_TYPE Tipo. Caracter
A posio do campo no leva em considerao os campos internos do Protheus (Recno e Deleted).
Programao ADVPL II e Guia de Referncia Pgina 367 E Parmetros:
nINFOTIPO Tipo de informao a ser verificada (DBS_NAME, DBS_DEC, DBS_LEN e DBS_TYPE). nCAMPO Posio do campo a ser verificado.
E Retorno:
Indefinido Retorna NIL se no h tabela corrente ou a posio do campo especificado est invlida. Informao do campo Informao requisitada pelo usurio (pode ser de tipo numrico se for tamanho ou casas decimais, tipo caracter se for nome ou tipo).
Exemplo:
USE Cl i ent es NEW
DBFI ELDI NFO( DBS_NAME, 1) / / Ret or no: Nome DBFI ELDI NFO( DBS_TYPE, 1) / / Ret or no: C DBFI ELDI NFO( DBS_LEN, 1) / / Ret or no: 10 DBFI ELDI NFO( DBS_DEC, 1) / / Ret or no: 0
DBFILTER()
A funo DBFILTER() utilizada para verificar a expresso de filtro ativo na rea de trabalho corrente.
E Sintaxe: DBFILTER()
E Parmetros:
Nenhum ()
E Retorno:
Caracter Retorna a expresso do filtro ativo na rea de trabalho atual. Caso no exista filtro ativo retorna "" (String vazia).
Exemplo:
USE Cl i ent e I NDEX I nd1 NEW SET FI LTER TO Nome > " J ose" DBFI LTER( ) / / r et or na: Nome > " J ose" SET FI LTER TO Num< 1000 DBFI LTER( ) / / r et or na: Num< 1000 Pgina 368 Programao ADVPL II e Guia de Referncia
DBGOTO()
Move o cursor da rea de trabalho ativa para o record number (recno) especificado, realizando um posicionamento direto, sem a necessidade uma busca (seek) prvio.
E Sintaxe: DbGoto(nRecno)
E Parmetros
nRecno Record number do registro a ser posicionado.
Exemplo:
DbSel ect Ar ea( SA1) DbGot o( 100) / / Posi ci ona no r egi st r o 100
I F ! EOF( ) / / Se a r ea de t r abal ho no est i ver emf i nal de ar qui vo MsgI nf o( Voc est no cl i ent e: +A1_NOME) ENDI F
DBGOTOP()
Move o cursor da rea de trabalho ativa para o primeiro registro lgico.
E Sintaxe: DbGoTop()
E Parmetros
Nenhum ()
Exemplo:
nCount : = 0 / / Var i vel par a ver i f i car quant os r egi st r os h no i nt er val o DbSel ect Ar ea( SA1) DbSet Or der ( 1) / / A1_FI LI AL + A1_COD + A1_LOJ A DbGoTop( )
Whi l e ! BOF( ) / / Enquant o no f or o i n ci o do ar qui vo nCount ++ / / I ncr ement a a var i vel de cont r ol e de r egi st r os no i nt er val o DbSki p( - 1) End
Programao ADVPL II e Guia de Referncia Pgina 369
MsgI nf o( Exi st em: +STRZERO( nCount , 6) + r egi st r os no i nt er val o) .
/ / Ret or no esper ado : 000001, poi s o DbGoTop posi ci ona no pr i mei r o r egi st r o.
DBGOBOTTON()
Move o cursor da rea de trabalho ativa para o ltimo registro lgico.
E Sintaxe: DbGoBotton()
E Parmetros
Nenhum ()
Exemplo:
nCount : = 0 / / Var i vel par a ver i f i car quant os r egi st r os h no i nt er val o DbSel ect Ar ea( SA1) DbSet Or der ( 1) / / A1_FI LI AL + A1_COD + A1_LOJ A DbGoBot t on( )
Whi l e ! EOF( ) / / Enquant o no f or o i n ci o do ar qui vo nCount ++ / / I ncr ement a a var i vel de cont r ol e de r egi st r os no i nt er val o DbSki p( 1) End
MsgI nf o( Exi st em: +STRZERO( nCount , 6) + r egi st r os no i nt er val o) .
/ / Ret or no esper ado : 000001, poi s o DbGoBot t on posi ci ona no l t i mo r egi st r o.
Pgina 370 Programao ADVPL II e Guia de Referncia DBINFO()
DBINFO() utilizada para obter informaes sobre a tabela corrente. O tipo de informao (primeiro argumento) escolhido de acordo com as constantes abaixo:
E Tabela A : Constantes utilizadas na parametrizao da funo
Constante Descrio Retorno DBI_GETRECSIZE Tamanho do registro em nmero de bytes similar a RECSIZE. Numrico DBI_TABLEEXT Extenso do arquivo da tabela corrente. Caracter DBI_FULLPATH Nome da tabela corrente com caminho completo. Caracter DBI_BOF Se est posicionada no incio da tabela similar a BOF Lgico DBI_EOF Se est posicionada no final da tabela similar a EOF Lgico DBI_FOUND Se a tabela est posicionada aps uma pesquisa similar a FOUND Lgico DBI_FCOUNT Nmero de campos na estrutura da tabela corrente similar a FCOUNT Numrico DBI_ALIAS Nome do Alias da rea de trabalho corrente similar a ALIAS Caracter DBI_LASTUPDATE Data da ltima modificao similar a LUPDATE Data
E Sintaxe: DBINFO(<nINFOTIPO>)
E Parmetros:
nINFOTIPO Tipo de informao a ser verificada.
E Retorno:
Indefinido Informao da Tabela Informao requisitada pelo usurio (o tipo depende da informao requisitada). Se no houver tabela corrente retorna NIL.
Exemplo:
USE Cl i ent es NEW DBI NFO( DBI _FULLPATH) / / Ret or no: C: \ Test e\ Cl i ent es. dbf DBI NFO( DBI _FCOUNT) / / Ret or no: 12 DBGOTOP( ) Programao ADVPL II e Guia de Referncia Pgina 371 DBI NFO( DBI _BOF) / / Ret or no: . F. DBSKI P( - 1) DBI NFO( DBI _BOF) / / Ret or no: . T.
DBNICKINDEXKEY()
Funo que retorna o IndexKey,ou seja, a expresso de ndice da ordem especificada pelo NickName. Se no existe ndice com o nickname, retorna uma string vazia.
E Sintaxe: DBNICKINDEXKEY(<cNick>)
E Parmetros:
cNick Indica o "NickName" da ordem de ndice.
E Retorno:
Caracter Expresso do ndice identificado pelo "NickName".
DBORDERINFO()
A funo DBORDERINFO() utilizada para obter informaes sobre determinada ordem. A especificao da ordem pode ser realizada atravs de seu nome ou sua posio dentro da lista de ordens, mas se ela no for especificada sero obtidas informaes da ordem corrente. O tipo de informao (primeiro argumento) escolhido de acordo com as constantes abaixo:
E Tabela A : Constantes utilizadas na parametrizao da funo
Constante Descrio Retorno DBOI_BAGNAME Nome do arquivo de ndice ao qual a ordem pertence. Caracter DBOI_FULLPATH do arquivo de ndice (com seu diretrio) ao qual a ordem pertence. Caracter DBOI_ORDERCOUNT Nmero de ordens existentes no arquivo de ndice especificado. Caracter
E Sintaxe: DBORDERINFO(<nINFOTIPO>)
E Parmetros:
nINFOTIPO Nome do arquivo de ndice.
Pgina 372 Programao ADVPL II e Guia de Referncia E Retorno:
Caracter Retorna a informao da Ordem requisitada pelo usurio (pode ser de tipo numrico se for nmero de ordens no ndice, tipo caracter se for nome do arquivo de ndice). Caso no exista ordem corrente ou a posio da ordem especificada est invlida retorna NIL.
Exemplo:
DBORDERI NFO( DBOI _BAGNAME) / / r et or na: I nd DBORDERI NFO( DBOI _FULLPATH) / / r et or na: C: \ AP6\ Test e\ I nd. cdx
DBORDERNICKNAME()
A funo DBORDERNICKNAME() utilizada para selecionar a ordem ativa atravs de seu apelido. Esta ordem a responsvel pela seqncia lgica dos registros da tabela corrente.
E Sintaxe: DBORDERNICKNAME(<cAPELIDO>)
E Parmetros:
cAPELIDO Nome do apelido da ordem a ser setada.
E Retorno:
Lgico Retorna Falso se no conseguiu tornar a ordem ativa. Principais erros: No existe tabela ativa ou no foi encontrada a ordem com o apelido. Retorna Verdadeiro se a ordem foi setada com sucesso.
Exemplo:
USE Cl i ent e NEW SET I NDEX TO Nome, I dade
I F ! DBORDERNI CKNAME( " I ndNome" ) Messagebox( " Regi st r o no encont r ado" , " Er r o" , 0) ENDI F
Programao ADVPL II e Guia de Referncia Pgina 373 DBPACK()
A funo DBPACK() remove fisicamente todos os registros com marca de excludo da tabela.
E Sintaxe: __DBPACK()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent es NEW DBGOTO( 100) DBDELETE( ) DBGOTO( 105) DBDELETE( ) DBGOTO( 110) DBDELETE( )
/ / Se a excl uso f or conf i r mada: __DBPACK( )
DBRECALL()
A funo DBRECALL() utilizada para retirar a marca de registro deletado do registro atual. Para ser executada o registro atual deve estar bloqueado ou a tabela deve estar aberta em modo exclusivo. Se o registro atual no estiver deletado, esta funo no faz nada. Ela o oposto da funo DBDELETE() que marca o registro atual como deletado.
E Sintaxe: DBRECALL()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Pgina 374 Programao ADVPL II e Guia de Referncia Exemplo 01: Desfazendo a deleo do registro posicionado do alias corrente
USE Cl i ent e DBGOTO( 100) DBDELETE( ) DELETED( ) / / Ret or na: . T. DBRECALL( ) DELETED( ) / / Ret or na: . F.
Exemplo 02: Desfazendo as delees do alias corrente
USE Cl i ent e DBGOTOP( ) WHI LE ! EOF( ) DBRECALL( ) DBSKI P( ) ENDDO
DBRECORDINFO()
A funo DBRECORDINFO() utilizada para obter informaes sobre o registro especificado pelo segundo argumento (recno) da tabela corrente, se esta informao for omitida ser verificado o registro corrente. O tipo de informao (primeiro argumento) escolhido de acordo com as constantes abaixo:
E Tabela A : Constantes utilizadas na parametrizao da funo
Constante Descrio Retorno DBRI_DELETED Estado de deletado similar a DELETED Lgico DBRI_RECSIZE Tamanho do registro similar a RECSIZE Numrico DBRI_UPDATED Verifica se o registro foi alterado e ainda no foi atualizado fisicamente similar a UPDATED Lgico
nINFOTIPO Tipo de informao a ser verificada. nREGISTRO Nmero do registro a ser verificado.
Programao ADVPL II e Guia de Referncia Pgina 375 E Retorno:
Indefinido No h tabela corrente ou registro invlido. Informao do Registro. Informao requisitada pelo usurio (o tipo depende da informao requisitada).
Exemplo:
USE Cl i ent es NEW DBGOTO( 100) DBRECORDI NFO( DBRI _DELETED) / / Ret or no: . F. DBDELETE( ) DBRECORDI NFO( DBRI _DELETED) / / Ret or no: . F. DBRECALL( ) DBRECORDI NFO( DBRI _RECSI ZE) / / Ret or no: 230 NOME : = " J OAO" DBGOTO( 200) DBRECORDI NFO( DBRI _UPDATED) / / Ret or no: . F. DBRECORDI NFO( DBRI _UPDATED, 100) / / Ret or no: . T.
DBREINDEX()
A funo DBREINDEX() reconstri todos os ndices da rea de trabalho corrente e posiciona as tabelas no primeiro registro lgico.
E Sintaxe: DBREINDEX()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent es NEW DBSETI NDEX( " I ndNome" ) DBREI NDEX( )
Pgina 376 Programao ADVPL II e Guia de Referncia DBRLOCK()
A funo DBRLOCK() utilizada quando se tem uma tabela aberta e compartilhada e se deseja bloquear um registro para que outros usurios no possam alter-lo. Se a tabela j est aberta em modo exclusivo, a funo no altera seu estado. O usurio pode escolher o registro a ser bloqueado atravs do parmetro (recno), mas se este for omitido ser bloqueado o registro corrente como na funo RLOCK(). Esta funo o oposto DBRUNLOCK, que libera registros bloqueados.
E Sintaxe: DBRLOCK([nREGISTRO])
E Parmetros:
nREGISTRO Nmero do registro a ser bloqueado.
E Retorno:
Lgico Retorna Falso se no conseguiu bloquear o registro. Principal motivo: o registro j foi bloqueado por outro usurio.
Retorna Verdadeiro se o registro foi bloqueado com sucesso.
Exemplo:
DBUSEAREA( . T. , " dbf cdxads" , " \ dadosadv609\ sa1990. dbf " , " SSS" , . T. , . F. ) DBGOTO( 100) DBRLOCK( ) / / Bl oquei a o r egi st r o at ual ( 100) DBRLOCK( 110) / / Bl oquei a o r egi st r o de nmer o 110
DBRLOCKLIST()
A funo DBRLOCKLIST() utilizada para verificar quais registros esto locados na tabela corrente. Para tanto, retornada uma tabela unidimensional com os nmeros dos registros.
E Sintaxe: DBRLOCKLIST()
E Parmetros:
Nenhum ()
Programao ADVPL II e Guia de Referncia Pgina 377 E Retorno:
Array Retorna NIL se no existe tabela corrente ou no existe nenhum registro locado. Retorna a lista com os recnos dos registros locados na tabela corrente.
Exemplo:
DBUSEAREA( . T. , " dbf cdxads" , " \ dadosadv609\ sa1990. dbf " , " SSS" , . T. , . F. ) DBGOTOP( ) DBRLOCK( ) / / Bl oquei a o pr i mei r o r egi st r o DBRLOCK( 110) / / Bl oquei a o r egi st r o de nmer o 110 DBRLOCK( 100) / / Bl oquei a o r egi st r o de nmer o 100 DBRLOCKLI ST( ) / / Ret or na: {1, 100, 110}
DBRUNLOCK()
A funo DBRUNLOCK() utilizada para liberar determinado registro bloqueado. O usurio pode escolher o registro a ser desbloqueado atravs do parmetro (Recno), mas se este for omitido ser desbloqueado o registro corrente como na funo DBUNLOCK(). Esta funo o oposto DBRLOCK, que bloquea os registros.
E Sintaxe: DBRUNLOCK([nREGISTRO])
E Parmetros:
nREGISTRO Nmero do registro a ser desbloqueado.
E Retorno:
Nenhum ()
Exemplo:
DBUSEAREA( . T. , " dbf cdxads" , " \ dadosadv609\ sa1990. dbf " , " SSS" , . T. , . F. ) DBGOTO( 100) DBRUNLOCK( ) / / Desbl oquei a o r egi st r o at ual ( 100) DBRUNLOCK( 110) / / Desbl oquei a o r egi st r o de nmer o 110
Pgina 378 Programao ADVPL II e Guia de Referncia DBSETDRIVER()
A funo DBSETDRIVER() pode ser utilizada apenas para verificar qual o RDD que est definido como padro quando for omitido seu parmetro. Ela tambm pode ser utilizada para especificar outro RDD como padro, especificando-o atravs do parmetro.
E Sintaxe: DBSETDRIVER([cNOVORDD])
E Parmetros:
cNOVORDD Novo nome do RDD a ser definido como padro.
E Retorno:
Caracter Nome do RDD padro corrente.
Exemplo:
DBSETDRI VER( " CTREECDX" ) / / Ret or na: DBFCDX DBSETDRI VER( ) / / Ret or na: CTREECDX
Note que ao utilizar a funo DBSETDRIVER para redefinir o driver corrente, o retorno da funo no ser o driver definido nos parmetros, mas o driver que estava em uso antes da atualizao.
DBSETINDEX()
A funo DBSETINDEX() utilizada para acrescentar uma ou mais ordens de determinado ndice na lista de ordens ativas da rea de trabalho. Quando o arquivo de ndice possui apenas uma ordem, a mesma acrescentada lista e torna-se ativa. Quando o ndice possui mais de uma ordem, todas so acrescentadas lista e a primeira torna-se ativa.
Para utilizar os arquivos de extenso padro do RDD este dado deve ser especificado.
E Sintaxe: DBSETINDEX(<@cARQINDICE>)
E Parmetros:
cARQINDICE Nome do arquivo de ndice, com ou sem diretrio. Programao ADVPL II e Guia de Referncia Pgina 379
E Retorno:
Nenhum ()
Exemplo:
USE Cl i ent e NEW DBSETI NDEX( " I nd1" ) DBSETI NDEX( " \ t est e\ I nd2. cdx" )
DBSETNICKNAME()
A funo DBSETNICKNAME() utilizada para colocar um apelido em determinada ordem especificada pelo primeiro parmetro. Caso seja omitido o nome do apelido a ser dado, a funo apenas verifica o apelido corrente.
E Sintaxe: DBSETNICKNAME(<cINDICE>, [cAPELIDO])
E Parmetros:
cINDICE Nome da ordem que deve receber o apelido. cAPELIDO Nome do apelido da ordem a ser setada.
E Retorno:
Caracter Retorna "" (String vazia) se no conseguiu encontrar a ordem especificada, no conseguiu setar o apelido ou no havia apelido. Retorna o apelido corrente.
Exemplo:
USE Cl i ent e NEW DBSETNI CKNAME( " I ndNome" ) / / r et or na: " " DBSETNI CKNAME( " I ndNome" , " NOME" ) / / r et or na: " " DBSETNI CKNAME( " I ndNome" ) / / r et or na: " NOME"
Pgina 380 Programao ADVPL II e Guia de Referncia DBSELECTAREA()
Define a rea de trabalho especificada com sendo a rea ativa. Todas as operaes subseqentes que fizerem referncia a uma rea de trabalho a utilizao, a menos que a rea desejada seja informada explicitamente.
E Sintaxe: DbSelectArea(nArea | cArea)
E Parmetros
nArea Valor numrico que representa a rea desejada, em funo de todas as reas j abertas pela aplicao, que pode ser utilizado ao invs do nome da rea. cArea Nome de referncia da rea de trabalho a ser selecionada.
Exemplo 01: DbselectArea(nArea)
nAr ea : = Sel ect ( SA1) / / 10 ( pr opost o)
DbSel ect Ar ea( nAr ea) / / De acor do como r et or no do comando Sel ect ( )
ALERT( Nome do cl i ent e: +A1_NOME) / / Como o SA1 o al i as sel eci onado, os comandos / / a par t i r da sel eo do al i as compr eendemque el e / / est i mpl ci t o na expr esso, o que causa o mesmo / / ef ei t o de SA1- >A1_NOME
Exemplo 02: DbselectArea(cArea)
DbSel ect Ar ea( SA1) / / Especi f i cao di r et a do al i as que desej a- se sel eci onar
ALERT( Nome do cl i ent e: +A1_NOME) / / Como o SA1 o al i as sel eci onado, os comandos / / a par t i r da sel eo do al i as compr eendemque el e / / est i mpl ci t o na expr esso, o que causa o mesmo / / ef ei t o de SA1- >A1_NOME
Programao ADVPL II e Guia de Referncia Pgina 381 DBSETORDER()
Define qual ndice ser utilizado pela rea de trabalho ativa, ou seja, pela rea previamente selecionada atravs do comando DbSelectArea(). As ordens disponveis no ambiente Protheus so aquelas definidas no SINDEX /SIX, ou as ordens disponibilizadas por meio de ndices temporrios.
E Sintaxe: DbSetOrder(nOrdem)
E Parmetros
nOrdem Nmero de referncia da ordem que deseja ser definida como ordem ativa para a rea de trabalho.
Exemplo:
DbSel ect Ar ea( SA1) DbSet Or der ( 1) / / De acor do como ar qui vo SI X - > A1_FI LI AL+A1_COD+A1_LOJ A
DBORDERNICKNAME()
Define qual ndice criado pelo usurio seja utilizado. O usurio pode incluir os seus prprios ndices e no momento da incluso deve criar o NICKNAME para o mesmo.
E Sintaxe: DbOrderNickName(NickName) E Parmetros
NickName NickName atribudo ao ndice criado pelo usurio.
Exemplo:
DbSelectArea(SA1) DbOrderNickName(Tipo) // De acordo com o arquivo SIX -> A1_FILIAL+A1_TIPO NickName: Tipo
Pgina 382 Programao ADVPL II e Guia de Referncia
DBSEEK() E MSSEEK()
DbSeek(): Permite posicionar o cursor da rea de trabalho ativo no registro com as informaes especificadas na chave de busca, fornecendo um retorno lgico indicando se o posicionamento foi efetuado com sucesso, ou seja, se a informao especificada na chave de busca foi localizada na rea de trabalho.
E Sintaxe: DbSeek(cChave, lSoftSeek, lLast)
E Parmetros
cChave Dados do registro que deseja-se localizar, de acordo com a ordem de busca previamente especificada pelo comando DbSetOrder(), ou seja, de acordo com o ndice ativo no momento para a rea de trabalho. lSoftSeek Define se o cursor ficar posicionado no prximo registro vlido, em relao a chave de busca especificada, ou em final de arquivo, caso no seja encontrada exatamente a informao da chave. Padro .F. lLast Define se o cursor ser posicionado no primeiro ou no ltimo registro de um intervalo com as mesmas informaes especificadas na chave. Padro .F.
Exemplo 01 Busca exata
DbSel ect Ar ea( SA1) DbSet Or der ( 1) / / acor do como ar qui vo SI X - > A1_FI LI AL+A1_COD+A1_LOJ A
I F DbSeek( 01 + 000001 + 02 ) / / Fi l i al : 01, Cdi go: 000001, Loj a: 02
MsgI nf o( Cl i ent e l ocal i zado, Consul t a por cl i ent e)
El se MsgAl er t ( Cl i ent e no encont r ado, Consul t a por cl i ent e)
Endi f
Exemplo 02 Busca aproximada
DbSel ect Ar ea( SA1) DbSet Or der ( 1) / / acor do como ar qui vo SI X - > A1_FI LI AL+A1_COD+A1_LOJ A
DbSeek( 01 + 000001 + 02, . T. ) / / Fi l i al : 01, Cdi go: 000001, Loj a: 02
Programao ADVPL II e Guia de Referncia Pgina 383 / / Exi be os dados do cl i ent e l ocal i zado, o qual pode no ser o especi f i cado na chave:
MsSeek(): Funo desenvolvida pela rea de Tecnologia da Microsiga, a qual possui as mesmas funcionalidades bsicas da funo DbSeek(), com a vantagem de no necessitar acessar novamente a base de dados para localizar uma informao j utilizada pela thread (conexo) ativa.
Desta forma, a thread mantm em memria os dados necessrios para reposicionar os registros j localizados atravs do comando DbSeek (no caso o Recno()) de forma que a aplicao pode simplesmente efetuar o posicionamento sem executar novamente a busca.
A diferena entre o DbSeek() e o MsSeek() notada em aplicaes com grande volume de posicionamentos, como relatrios, que necessitam referenciar diversas vezes o mesmo registro durante uma execuo.
DBSKIP()
Move o cursor do registro posicionado para o prximo (ou anterior dependendo do parmetro), em funo da ordem ativa para a rea de trabalho.
E Sintaxe: DbSkip(nRegistros)
E Parmetros
nRegistros Define em quantos registros o cursor ser deslocado. Padro 1
Exemplo 01 Avanando registros
DbSel ect Ar ea( SA1) DbSet Or der ( 2) / / A1_FI LI AL + A1_NOME DbGot op( ) / / Posi ci ona o cur sor no i n ci o da r ea de t r abal ho at i va
Whi l e ! EOF( ) / / Enquant o o cur sor da r ea de t r abal ho at i va no i ndi car f i mde ar qui vo MsgI nf o( Voc est no cl i ent e: + A1_NOME) DbSki p( ) End Pgina 384 Programao ADVPL II e Guia de Referncia
Exemplo 02 Retrocedendo registros
DbSel ect Ar ea( SA1) DbSet Or der ( 2) / / A1_FI LI AL + A1_NOME DbGoBot t on( ) / / Posi ci ona o cur sor no f i nal da r ea de t r abal ho at i va
Whi l e ! BOF( ) / / Enquant o o cur sor da r ea de t r abal ho at i va no i ndi car i n ci o de ar qui vo MsgI nf o( Voc est no cl i ent e: + A1_NOME) DbSki p( - 1) End
DBSETFILTER()
Define um filtro para a rea de trabalho ativa, o qual pode ser descrito na forma de um bloco de cdigo ou atravs de uma expresso simples.
E Sintaxe: DbSetFilter(bCondicao, cCondicao)
E Parmetros
bCondicao Bloco de expressa a condio de filtro em forma executvel. cCondicao Expresso de filtro simples na forma de string.
Exemplo 01 Filtro com bloco de cdigo
bCondi cao : = {| | A1_COD >= 000001 . AND. A1_COD <= 001000} DbSel ect Ar ea( SA1) DbSet Or der ( 1) DbSet Fi l t er ( bCondi cao) DbGoBot t on( )
Whi l e ! EOF( ) MsgI nf o( Voc est no cl i ent e: +A1_COD) DbSki p( ) End
/ / O l t i mo cl i ent e vi sual i zado deve t er o cdi go menor do que 001000.
Programao ADVPL II e Guia de Referncia Pgina 385 Exemplo 02 Filtro com expresso simples
cCondi cao : = A1_COD >= 000001 . AND. A1_COD <= 001000 DbSel ect Ar ea( SA1) DbSet Or der ( 1) DbSet Fi l t er ( , cCondi cao) DbGoBot t on( )
Whi l e ! EOF( ) MsgI nf o( Voc est no cl i ent e: +A1_COD) DbSki p( ) End
/ / O l t i mo cl i ent e vi sual i zado deve t er o cdi go menor do que 001000.
DBSTRUCT()
Retorna um array contendo a estrutura da rea de trabalho (alias) ativo. A estrutura ser um array bidimensional conforme abaixo:
ID* Nome campo Tipo campo Tamanho Decimais
*ndice do array
E Sintaxe: DbStruct()
E Parmetros
Nenhum ()
Exemplo:
cCampos : = DbSel ect Ar ea( SA1) aSt r uct SA1 : = DbSt r uct ( )
FOR nX : = 1 t o Len( aSt r uct SA1)
cCampos += aSt r uct SA1[ nX] [ 1] + /
NEXT nX
ALERT( cCampos)
Pgina 386 Programao ADVPL II e Guia de Referncia DBUNLOCK()
A funo DBUNCLOK() retira os bloqueios dos registros e do arquivo da tabela corrente.
E Sintaxe: DBUNLOCK()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
DBUNLOCKALL()
A funo DBUNLOCKALL() Retira os bloqueios de todos os registros e dos arquivos de todas as tabelas abertas. Esta funo utilizada para liberar todos os registros bloqueados e equivalente a executar DBUNLOCK para todas as tabelas da rea de trabalho.
E Sintaxe: DBUNLOCKALL()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
DBUSEAREA()
Define um arquivo de base de dados como uma rea de trabalho disponvel na aplicao.
E Sintaxe: DbUseArea(lNovo, cDriver, cArquivo, cAlias, lComparilhado,; lSoLeitura) Programao ADVPL II e Guia de Referncia Pgina 387
E Parmetros
lNovo Parmetro opcional que permite que se caso o cAlias especificado j esteja em uso, ele seja fechado antes da abertura do arquivo da base de dados. cDriver Driver que permita a aplicao manipular o arquivo de base de dados especificado. A aplicao ERP possui a varivel __LOCALDRIVER definida a partir das configuraes do .ini do server da aplicao. Algumas chaves vlidas: DBFCDX, CTREECDX, DBFCDXAX, TOPCONN. cArquivo Nome do arquivo de base de dados que ser aberto com o alias especificado. cAlias Alias para referncia do arquivos de base de dados pela aplicao. lComparilhado Se o arquivo poder ser utilizado por outras conexes. lSoLeitura Se o arquivo poder ser alterado pela conexo ativa.
Exemplo:
DbUser Ar ea( . T. , DBFCDX, \ SA1010. DBF, SA1DBF, . T. , . F. ) DbSel ect Ar ea( SA1DBF) MsgI nf o( A t abel a SA1010. DBF possui : + STRZERO( RecCount ( ) , 6) + r egi st r os. ) DbCl oseAr ea( )
DELETED()
A funo DELETED() Verifica se o registro est com marca de excludo. Quando o registro excludo, permanece fisicamente na tabela, mas fica marcado como excludo. Esta funo verifica este estado. Se nenhuma rea est selecionada, retorna .F.. Quando executada a funo DBPACK() todos os registros marcados como deletados so apagados fisicamente. A funo DBRECALL() retira todas as marcas.
E Sintaxe: DELETED()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Pgina 388 Programao ADVPL II e Guia de Referncia Exemplo:
USE " \ DADOSADV\ AA1990. DBF" SHARED NEW DBGOTO( 100) I F DELETED( ) Messagebox( " O r egi st r o at ual f oi del et ado" , " Er r o" , 0) ENDI F
FCOUNT()
A funo FCOUNT() avalia a quantidade de campos existentes na estrutura do arquivo ativo como rea de trabalho.
E Sintaxe: FCOUNT()
E Parmetros:
Nenhum ()
E Retorno:
Numrico Quantidade de campos existentes na estrutura da rea de trabalho ativa.
Exemplo:
DbSel ect Ar ea( SA1) nFi el ds : = FCOUNT( )
I F nFi el ds > 0 MSGI NFO( A est r ut ur a da t abel a cont m : +Cval ToChar ( nFi el ds) +campos. ) ENDI F
Programao ADVPL II e Guia de Referncia Pgina 389 FOUND()
A funo FOUND() recupera o resultado de sucesso referente a ltima operao de busca efetuada pelo processamento corrente.
E Sintaxe: FOUND()
E Parmetros:
Nenhum ()
E Retorno:
Lgico Indica se a ltima operao de busca realizada pelo processamento corrente obteve sucesso (.T.) ou no (.F.).
Exemplo: Per gunt e( cPer g, . T. ) DbSel ect Ar ea( SA1) DbSet Or der ( 1) DbSeek( xFi l i al ( SA1) +MVPAR01)
I F Found( ) MSGI NFO( Cl i ent e encont r ado) ELSE MSGALERT( Dados no encont r ados) ENDI F
INDEXKEY()
A funo INDEXKEY() determina a expresso da chave de um ndice especificado na rea de trabalho corrente, e o retorna na forma de uma cadeia de caracteres, sendo normalmente utilizada na rea de trabalho correntemente selecionada.
E Sintaxe: INDEXKEY()
E Parmetros:
nOrdem Ordem do ndice na lista de ndices abertos pelo comando USE...INDEX ou SET INDEX TO na rea de trabalho corrente. O valor default zero especifica o ndice corrente, independentemente de sua posio real na lista.
Pgina 390 Programao ADVPL II e Guia de Referncia
E Retorno:
Caracter Expresso da chave do ndice especificado na forma de uma cadeia de caracteres. Caso no haja um ndice correspondente, INDEXKEY() retorna uma cadeia de caracteres vazia ("").
Exemplo:
cExpr essao : = SA1- >( I ndexKey( ) )
INDEXORD()
A funo INDEXORD() verifica a posio do ndice corrente na lista de ndices do respectivo alias.
E Sintaxe: INDEXORD()
E Parmetros:
Nenhum ()
E Retorno:
Numrico Posio do ndice corrente na lista de ndices da tabela. Retorna 0 se no existe ndice aberto na tabela corrente.
Exemplo:
USE Cl i ent e NEW SET I NDEX TO Nome, End, Cep nOr d: =I NDEXORD( ) / / Ret ur n: 1 - o pr i mei r o ndi ce da l i st a
Programao ADVPL II e Guia de Referncia Pgina 391 LUPDATE()
A funo LUPDATE() verifica qual a data da ltima modificao e fechamento da tabela corrente, sendo que caso no exista tabela corrente retornada uma data em branco.
E Sintaxe: LUPDATE()
E Parmetros:
Nenhum ()
E Retorno:
Data Retorna um valor do tipo Data , indicando a data da ultima modificao e fechamento da Tabela. Caso no haja tabela selecionada na rea de trabalho atual , a funo retornar uma data vazia (ctod("")) .
Exemplo:
/ / Most r a a dat a da l t i ma modi f i cao da t abel a cor r ent e, dModi f i cacao : = LUpdat e( ) I F ( EMPTY( dModi f i cacao) ) CONOUT( " No h t abel a cor r ent e" ) ELSE CONOUT( ( " Dat a da ul t i ma modi f i cacao : " + DTOS( dModi f i cacao) ) ) ENDI F
MSAPPEND()
A funo MsAppend() adiciona registros de um arquivo para outro, respeitando a estrutura das tabelas.
E Sintaxe: MSAPPEND( [cArqDest], cArqOrig )
E Parmetros:
cArqDest Se o RDD corrente for DBFCDX os registros sero adicionados na rea selecionada, caso contrrio o arquivo destino ter que ser informado. cArqOrig Nome do arquivo origem contendo os registros a serem adicionados.
Pgina 392 Programao ADVPL II e Guia de Referncia
E Retorno:
Lgico Se a operao for realizada com sucesso o funo retornar verdadeiro (.T.).
Exemplo:
dbSel ect Ar ea( XXX ) MsAppend( , ARQ00001 )
MSUNLOCK()
Libera o travamento (lock) do registro posicionado confirmando as atualizaes efetuadas neste registro.
E Sintaxe: MsUnLock()
E Parmetros
Nenhum ()
Exemplo:
DbSel ect Ar ea( SA1) DbSet Or der ( 1) / / A1_FI LI AL + A1_COD + A1_LOJ A DbSeek( 01 + 900001 + 01) / / Busca exat a
I F Found( ) / / Aval i a o r et or no do l t i mo DbSeek r eal i zado RecLock( SA1, . F. ) SA1- >A1_NOME : = CLI ENTE CURSO ADVPL BSI CO SA1- >A1_NREDUZ : = ADVPL BSI CO MsUnLock( ) / / Conf i r ma e f i nal i za a oper ao ENDI F
Programao ADVPL II e Guia de Referncia Pgina 393 ORDBAGEXT()
A funo ORDBAGEXT utilizada no gerenciamento de indices para os arquivos de dados do sistema, permitindo avaliar qual a extenso deste ndices atualmente em uso, de acordo com a RDD ativa.
E Sintaxe: ORDBAGEXT()
E Parmetros:
Nenhum ()
E Retorno:
cBagExt Extenso do arquivo dos arquivos de ndices em uso pelo sistema, determinado pela RDD ativa.
Exemplo:
cAr qTRB : = Cr i aTr ab( aSt r uTRB, . T. ) / / RDD UTI LI ZADA: DBFCDXADS DbUseAr ea( . T. , DBFCDXADS, cAr qTRB, " TRBSA1" , . F. , . F. )
DbSel ect Ar ea( " TRBSA1" ) cAr qI nd : = Cr i aTr ab( Ni l , . F. ) I ndRegua( " TRBSA1" , cAr qI nd, cChaveI nd, , " " , " Sel eci onando r egi st r os . . . " ) #I FNDEF TOP DbSet I ndex( cAr qI nd+Or dBagExt ( ) ) / / RETORNO: . CDX #ENDI F DbSet Or der ( 1)
ORDKEY()
A funo ORDKEY() verifica qual a expresso de chave de determinada ordem. Caso no sejam especificados os parmetros de identificao da ordem, verificada a ordem corrente. Para evitar conflito, no caso de haver mais de uma ordem com o mesmo nome, pode-se passar o parmetro com o nome do ndice ao qual a ordem pertence.
A ordem passada no primeiro parmetro pode ser especificada atravs da sua posio na lista de ordens ativas (atravs do ORDLISTADD) ou atravs do nome dado ordem. A funo verifica automaticamente se o parmetro numrico ou caracter. Pgina 394 Programao ADVPL II e Guia de Referncia
E Sintaxe: ORDKEY([cOrdem | nPosicao] , [cArqIndice])
E Parmetros:
cOrdem nPosicao H duas opes para o primeiro parmetro: cNome: tipo caracter, contm nome do ndice. nPosicao: tipo numrico, indica ordem do ndice. cArqIndice Nome do arquivo de ndice.
E Retorno:
Caracter Expresso de chave da ordem ativa ou especificada pelos parmetros. Cadeia vazia indica que no existe ordem corrente.
Exemplo:
USE Cl i ent e NEW I NDEX ON Nome+Cod TO I nd1 FOR Nome+Cod > ' AZZZZZZZ' ORDKEY( ' I nd1' ) / / Ret or na: Nome+Cod
RECLOCK()
Efetua o travamento do registro posicionado na rea de trabalho ativa, permitindo a incluso ou alterao das informaes do mesmo.
E Sintaxe: RecLock(cAlias,lInclui)
E Parmetros
cAlias Alias que identifica a rea de trabalho que ser manipulada. lInclui Define se a operao ser uma incluso (.T.) ou uma alterao (.F.)
Exemplo 01 - Incluso
DbSel ect Ar ea( SA1) RecLock( SA1, . T. ) SA1- >A1_FI LI AL : = xFi l i al ( SA1) / / Ret or na a f i l i al de acor do com as conf i gur aes do ERP SA1- >A1_COD : = 900001 SA1- >A1_LOJ A : = 01 MsUnLock( ) / / Conf i r ma e f i nal i za a oper ao
Programao ADVPL II e Guia de Referncia Pgina 395 Exemplo 02 - Alterao
DbSel ect Ar ea( SA1) DbSet Or der ( 1) / / A1_FI LI AL + A1_COD + A1_LOJ A DbSeek( 01 + 900001 + 01) / / Busca exat a
I F Found( ) / / Aval i a o r et or no do l t i mo DbSeek r eal i zado RecLock( SA1, . F. ) SA1- >A1_NOME : = CLI ENTE CURSO ADVPL BSI CO SA1- >A1_NREDUZ : = ADVPL BSI CO MsUnLock( ) / / Conf i r ma e f i nal i za a oper ao ENDI F
A linguagem ADVPL possui variaes da funo RecLock(), as quais so:
E RLOCK() E DBRLOCK()
A sintaxe e a descrio destas funes esto disponveis no Guia de Referncia Rpido ao final deste material.
A linguagem ADVPL possui variaes da funo MsUnlock(), as quais so:
E UNLOCK() E DBUNLOCK() E DBUNLOCKALL()
A sintaxe e a descrio destas funes esto disponveis no Guia de Referncia Rpido ao final deste material.
Pgina 396 Programao ADVPL II e Guia de Referncia RECNO()
A funo RECNO() retorna o nmero do registro atualmente posiconado na rea de trabalho ativa.
E Sintaxe: RECNO()
E Parmetros:
Nenhum ()
E Retorno: nRecno Identificador numrico do registro atualmente posicionando na rea de trabalho ativa.
Exemplo:
DbSel ect Ar ea( SA1) DbGot o( 100) / / Posi ci ona no r egi st r o de r ecno 100. MSGI NFO( Regi st r o posi ci onado: +cVal ToChar ( RECNO( ) ) )
SELECT()
A funo SELECT() determina o nmero da rea de trabalho de um alias. O nmero retornado pode variar de zero a 250. Se <cAlias> no for especificado, retornado o nmero da rea de trabalho corrente. Caso <cAlias> seja especificado e o alias nao existir, SELECT() retorna zero.
E Sintaxe: SELECT([cAlias])
E Parmetros:
cAlias Nome da rea de trabalho a ser verificada.
E Retorno:
Numrico rea de trabalho do alias especificado na forma de um valor numrico inteiro.
Exemplo:
nAr ea : = Sel ect ( SA1)
ALERT( Ref er nci a do al i as SA1: +STRZERO( nAr ea, 3) ) / / 10 ( pr opost o)
Programao ADVPL II e Guia de Referncia Pgina 397 SET FILTER TO
O comando SET FILTER TO define uma condio de filtro que ser aplicada a rea de trabalho ativa.
Recomenda-se o uso da funo DbSetFilter() em substituio ao comando SET FILTER TO
E Sintaxe: SET FILTER TO cCondicao
E Parmetros:
cCondicao Expresso que ser avaliada pela SET FILTER, definindo os registros que ficaro disponveis na rea de trabalho ativa. Esta expresso obrigatoriamente deve ter um retorno lgico.
E Retorno:
Nenhum ()
O uso da sintaxe SET FILTER TO desativa o filtro na rea de trabalho corrente.
Exemplo:
USE Empl oyee I NDEX Name NEW
SET FI LTER TO Age > 50
LI ST Last Name, Fi r st Name, Age, Phone
SET FI LTER TO
Pgina 398 Programao ADVPL II e Guia de Referncia SOFTLOCK()
Permite a reserva do registro posicionado na rea de trabalho ativa de forma que outras operaes, com exceo da atual, no possam atualizar este registro. Difere da funo RecLock() pois no gera uma obrigao de atualizao, e pode ser sucedido por ele.
Na aplicao ERP Protheus, o SoftLock() utilizado nos browses, antes da confirmao da operao de alterao e excluso, pois neste momento a mesma ainda no foi efetivada, mas outras conexes no podem acessar aquele registro pois o mesmo est em manuteno, o que implementa da integridade da informao.
E Sintaxe: SoftLock(cAlias)
E Parmetros
cAlias Alias de referncia da rea de trabalho ativa, para o qual o registro posicionado ser travado.
Exemplo:
cChave : = Get Cl i ent e( ) / / Funo i l ust r at i va que r et or na os dados de busca de umcl i ent e
DbSel ect Ar ea( SA1) DbSet Or der ( 1) DbSeek( cChave)
I F Found( ) Sof t Lock( ) / / Reser va o r egi st r o l ocal i zado l Conf i r ma : = Al t er aSA1( ) / / Funo i l ust r at i va que exi be os dados do r egi st r o / / posi ci onado e pemi t e a al t er ao dos mesmos.
I F l Conf i r ma RecLock( SA1, . F. ) Gr avaSA1( ) / / Funo i l ust r at i va que al t er a os dados conf or me a Al er t aSA1( ) MsUnLock( ) / / Li ber ado o RecLock( ) e o Sof t Lock( ) do r egi st r o. Endi f Endi f
Programao ADVPL II e Guia de Referncia Pgina 399 USED()
A funo USED() utilizada para determinar se h um arquivo de banco de dados em uso em uma rea de trabalho especfica. O padro que USED() opere na rea de trabalho correntemente selecionada.
E Sintaxe: USED()
E Parmetros:
Nenhum ()
E Retorno:
Lgico Verdadeiro (.T.) caso haja um arquivo de banco de dados em uso; caso contrrio, retorna falso (.F.).
Exemplo:
USE Cust omer NEW CONOUT( USED( ) ) / / Resul t a: . T. CLOSE CONOUT ( USED( ) ) / / Resul t a: . F.
ZAP
O comando ZAP remove fisicamente todos os registro da tabela corrente. necessrio que o alias em questo seja aberto em modo exclusivo para esta operao ser realizada.
E Sintaxe: ZAP
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Pgina 400 Programao ADVPL II e Guia de Referncia Exemplo: cTabel a : = Ret Sql Name( " SA4" ) cAl i as : = " TMP" USE ( cTabel a) ALI AS ( cAl i as) EXCLUSI VE NEWVI A " TOPCONN" I f Net Er r ( ) MsgSt op( " Nao f oi possi vel abr i r " +cTabel a+" emmodo EXCLUSI VO. " ) El se ZAP USE MsgSt op( " Regi st r os da t abel a " +cTabel a+" el i mi nados comsucesso. " ) Endi f
Controle de numerao seqencial
GETSXENUM()
Obtm o nmero seqncia do alias especificado no parmetro, atravs da referncia aos arquivos de sistema SXE/SXF ou ao servidor de numerao, quando esta configurao est habilitada no ambiente Protheus.
E Sintaxe: GETSXENUM(cAlias, cCampo, cAliasSXE, nOrdem)
E Parmetros
cAlias Alias de referncia da tabela para a qual ser efetuado o controle da numerao seqencial. cCampo Nome do campo no qual est implementado o controle da numerao. cAliasSXE Parmetro opcional, quando o nome do alias nos arquivos de controle de numerao no o nome convencional do alias para o sistema ERP. nOrdem Nmero do ndice para verificar qual a prxima ocorrncia do nmero.
CONFIRMSXE()
Confirma o nmero alocado atravs do ltimo comando GETSXENUM().
E Sintaxe: CONFIRMSXE(lVerifica)
E Parmetros
lVerifica
Verifica se o nmero confirmado no foi alterado, e por conseqncia j existe na base de dados.
Programao ADVPL II e Guia de Referncia Pgina 401 ROLLBACKSXE()
Descarta o nmero fornecido pelo ltimo comando GETSXENUM(), retornando a numerao disponvel para outras conexes.
E Sintaxe: ROLLBACKSXE()
E Parmetros
Nenhum ()
Validao
ALLWAYSFALSE()
A funo AllwaysFalse() foi criada com o objetivo de compatibilidade, sendo que sempre ir retornar um valor lgico falso, facilitando a especificao desta situao nas parametrizaes de validaes de modelos de interface pr-definidos no sistema.
E Sintaxe: ALLWAYSFALSE()
E Parmetros:
Nenhum ()
E Retorno:
Lgico Retorna um valor lgico sempre falso.
ALLWAYSTRUE()
A funo AllwaysTrue() foi criada com o objetivo de compatibilidade, sendo que sempre ir retornar um valor lgico verdadeiro, facilitando a especificao desta situao nas parametrizaes de validaes de modelos de interface pr-definidos no sistema.
E Sintaxe: ALLWAYSTRUE()
E Parmetros:
Nenhum ()
E Retorno:
Lgico Retorna um valor lgico sempre verdadeiro.
Pgina 402 Programao ADVPL II e Guia de Referncia
EXISTCHAV()
Retorna .T. ou .F. se o contedo especificado existe no alias especificado. Caso exista ser exibido um help de sistema com um aviso informando da ocorrncia.
Funo utilizada normalmente para verificar se um determinado cdigo de cadastro j existe na tabela na qual a informao ser inserida, como por exemplo o CNPJ no cadastro de clientes ou fornecedores.
E Sintaxe: ExistChav(cAlias, cConteudo, nIndice)
E Parmetros
cAlias Alias de referncia para a validao da informao. cConteudo Chave a ser pesquisada, sem a filial. nIndice ndice de busca para consulta da chave.
EXISTCPO()
Retorna .T. ou .F. se o contedo especificado no existe no alias especificado. Caso no exista ser exibido um help de sistema com um aviso informando da ocorrncia.
Funo utilizada normalmente para verificar se a informao digitada em um campo, a qual depende de outra tabela, realmente existe nesta outra tabela. Como, por exemplo, o cdigo de um cliente em um pedido de venda.
E Sintaxe: ExistCpo(cAlias, cConteudo, nIndice)
E Parmetros
cAlias Alias de referncia para a validao da informao. cConteudo Chave a ser pesquisada, sem a filial. nIndice ndice de busca para consulta da chave.
LETTERORNUM()
A funo LETTERORNUM() avalia se um determinado contedo composto apenas de letras e nmeros (alfanumrico).
E Sintaxe: LETTERORNUM(cString)
E Parmetros:
cString String que ter seu contedo avaliado. Programao ADVPL II e Guia de Referncia Pgina 403
E Retorno:
Lgico Indica que se a string avaliada contm apenas letras e nmero, ou seja, alfanumrico.
NAOVAZIO()
Retorna .T. ou .F. se o contedo do campo posicionado no momento no est vazio.
E Sintaxe: NaoVazio()
E Parmetros
Nenhum ()
NEGATIVO()
Retorna .T. ou .F. se o contedo digitado para o campo negativo.
E Sintaxe: Negativo()
E Parmetros
Nenhum ()
PERTENCE()
Retorna .T. ou .F. se o contedo digitado para o campo est contido na string definida como parmetro da funo. Normalmente utilizada em campos com a opo de combo. Caso contrrio, seria utilizada a funo ExistCpo().
E Sintaxe: Pertence(cString)
E Parmetros
cString
String contendo as informaes vlidas que podem ser digitadas para um campo.
Pgina 404 Programao ADVPL II e Guia de Referncia POSITIVO()
Retorna .T. ou .F. se o contedo digitado para o campo positivo.
E Sintaxe: Positivo()
E Parmetros
Nenhum ()
TEXTO()
Retorna .T. ou .F. se o contedo digitado para o campo contm apenas nmeros ou alfanumricos.
E Sintaxe: Texto()
E Parmetros
Nenhum ()
VAZIO()
Retorna .T. ou .F. se o contedo do campo posicionado no momento est vazio.
E Sintaxe: Vazio()
E Parmetros
Nenhum ()
Manipulao de parmetros do sistema
Programao ADVPL II e Guia de Referncia Pgina 405 GETMV()
Retorna o contedo do parmetro especificado no arquivo SX6, considerando a filial parametrizada na conexo. Caso o parmetro no exista, ser exibido um help do sistema informando a ocorrncia.
E Sintaxe: GETMV(cParametro)
E Parmetros
cParametro
Nome do parmetro do sistema no SX6, sem a especificao da filial de sistema.
GETNEWPAR()
Retorna o contedo do parmetro especificado no arquivo SX6, considerando a filial parametrizada na conexo. Caso o parmetro no exista ser exibido um help do sistema informando a ocorrncia.
Difere do SuperGetMV() pois considera que o parmetro pode no existir na verso atual do sistema, e por conseqncia no ser exibida a mensagem de help.
E Sintaxe: GETNEWPAR(cParametro, cPadrao, cFilial)
E Parmetros
cParametro
Nome do parmetro do sistema no SX6, sem a especificao da filial de sistema.
cPadrao Contedo padro que ser utilizado caso o parmetro no exista no SX6. cFilial
Define para qual filial ser efetuada a consulta do parmetro. Padro filial corrente da conexo.
Pgina 406 Programao ADVPL II e Guia de Referncia PUTMV()
Atualiza o contedo do parmetro especificado no arquivo SX6, de acordo com as parametrizaes informadas.
E Sintaxe: PUTMV(cParametro, cConteudo)
E Parmetros
cParametro Nome do parmetro do sistema no SX6, sem a especificao da filial de sistema. cConteudo Contedo que ser atribudo ao parmetro no SX6.
SUPERGETMV()
Retorna o contedo do parmetro especificado no arquivo SX6, considerando a filial parametrizada na conexo. Caso o parmetro no exista, ser exibido um help do sistema informando a ocorrncia.
Difere do GetMv() pois os parmetros consultados so adicionados em uma rea de memria, para que em uma nova consulta no seja necessrio acessar e pesquisar o parmetro na base de dados.
E Sintaxe: SUPERGETMV(cParametro , lHelp , cPadrao , cFilial)
E Parmetros
cParametro
Nome do parmetro do sistema no SX6, sem a especificao da filial de sistema.
lHelp
Se ser exibida a mensagem de Help caso o parmetro no seja encontrado no SX6.
cPadrao Contedo padro que ser utilizado caso o parmetro no exista no SX6. cFilial
Define para qual filial ser efetuada a consulta do parmetro. Padro filial corrente da conexo.
Programao ADVPL II e Guia de Referncia Pgina 407 Controle de impresso
AVALIMP()
A funo AVALIMP() utilzada em relatrios especficos em substituio da funo CABEC(), configurando a impressora de acordo com o driver escolhido e os parmetros de impresso disponveis no array aReturn, respeitando o formato utilizado pela funo SETPRINT().
E Sintaxe: AVALIMP(nLimite)
E Parmetros:
nLimite Tamanho do relatrio em colunas, podendo assumir os valores 80,132 ou 220 colunas, respectivamente para os formatos P, M ou G de impresso.
E Retorno:
Caracter String com caracteres de controle, dependente das configuraes escolhidas pelo usurio e do arquivo de driver especificado.
LOCAL cTi t ul o : = PADC( AVALI MP, 74) LOCAL cDesc1 : = PADC( Demonst r ao do uso da f uno AVALI MP( ) , 74) LOCAL cDesc2 : = LOCAL cDesc3 : = PADC( CURSO DE ADVPL, 74) LOCAL cTamanho : = G LOCAL cLi mi t e : = 220 LOCAL cNat ur eza : = LOCAL aRet ur n : = {Especi al , 1, Admi ni st r ao, 1, 2, 2, , 1} LOCAL cNomePr og : = RAVALI MP LOCAL cPer g : = PADR( RAVALI MP, 10) / / Compat i bi l i zao comMP10 Pgina 408 Programao ADVPL II e Guia de Referncia LOCAL nLast Key : = 0 LOCAL cSt r i ng : =SF2"
Per gunt e( cPer g, . F. ) / / Per gunt a no SX1
wnr el : = Set Pr i nt ( cSt r i ng, wnr el , cPer g, cTi t ul o, cDesc1, cDesc2, cDesc3, . T. )
Set Def aul t ( aRet ur n, cSt r i ng)
I f nLast Key == 27 Ret ur n Endi f
Rpt St at us( {| | RunRepor t ( cSt r i ng) }, cTi t ul o) Ret ur n
cTitulo Ttulo do relatrio. cCabec1 String contendo as informaes da primeira linha do cabealho. cCabec2 String contendo as informaes da segunda linha do cabealho. cNomeProg Nome do programa de impresso do relatrio. nTamanho Tamanho do relatrio em colunas (80, 132 ou 220). nCompress Indica se impresso ser comprimida (15) ou normal (18). aCustomText Texto especfico para o cabealho, substituindo a estrutura padro do sistema. lPerg Permite a supresso da impresso das perguntas do relatrio, mesmo que o parmetro MV_IMPSX1 esteja definido como S.
E Parmetros (continuao):
cLogo Redefine o bitmap que ser impresso no relatrio, no necessitando que ele esteja no formato padro da Microsiga: "LGRL"+SM0->M0_CODIGO+SM0->M0_CODFIL+".BMP"
Local cDesc1 := "Este programa tem como objetivo imprimir relatorio " Local cDesc2 := "de acordo com os parametros informados pelo usuario." Local cDesc3 := "Listagem de clientes" Local cTitulo := "Listagem de clientes" Local lImprime := .T.
// Parametros da SetPrint() Local cString := "SA1" Local cPerg := "" Local lDic := .T. // Habilita a visalizacao do dicionario Local aOrd := RetSixOrd(cString) Local lCompres := .T. // .F. - Normal / .T. - Comprimido Local lFilter := .T. // Habilita o filtro para o usuario Local cNomeProg := "MPTR002" Local cTamanho := "M" Local nTipo := 18 Local nLimite := 132
/ / / / Mont a a i nt er f ace padr ao como usuar i o. . . / / Programao ADVPL II e Guia de Referncia Pgina 411 wnr el : = Set Pr i nt ( cSt r i ng, cNomePr og, cPer g, @cTi t ul o, cDesc1, cDesc2, cDesc3, l Di c, aOr d, l Compr es, cTamanho, , l Fi l t er )
I f nLast Key == 27 Ret ur n Endi f
Set Def aul t ( aRet ur n, cSt r i ng, , , cTamanho, aRet ur n[ 4] ) / / nFor mat o: 1- Ret r at o, 2- Pai sagem
I f nLast Key == 27 Ret ur n Endi f
nTi po : = I I F( aRet ur n[ 4] ==1, 15, 18)
/ / / / Pr ocessament o. RPTSTATUS mont a j anel a coma r egua de pr ocessament o. / / Rpt St at us( {| | RunRepor t ( cTi t ul o, cSt r i ng, cNomePr og, cTamanho, nTi po, nLi mi t e) }, cTi t ul o ) Ret ur n
St at i c Funct i on RunRepor t ( cTi t ul o, cSt r i ng, cNomePr og, cTamanho, nTi po, nLi mi t e)
Local nLi n : = 80 Local cCabec1 : = " " Local cCabec2 : = " " Local cAr qI nd
cCabec1 : = " CODI GO" +Space( 2) +" LOJ A" +Space( 2) +" NOME REDUZI DO" +Space( 9) cCabec1 += " RAZAO SOCI AL" +Space( 30) +" CNPJ " +Space( 18) +" I NSCR. ESTADUAL" +Space( 8) cCabec1 += " CEP" Pgina 412 Programao ADVPL II e Guia de Referncia cCabec2 : = " ESTADO" +Space( 2) +" MUNI CI PI O" +Space( 8) +" ENDERECO"
dbSel ect Ar ea( " TRBSA1" ) dbGoTop( )
Set Regua( RecCount ( ) )
Whi l e ! EOF( )
I f l Abor t Pr i nt . OR. nLast Key == 27 @nLi n, 00 PSAY " *** CANCELADO PELO OPERADOR ***" Exi t Endi f
I f nLi n > 55 / / Sal t o de Pgi na. Nest e caso o f or mul ar i o t em55 l i nhas. . . Cabec( cTi t ul o, cCabec1, cCabec2, cNomePr og, cTamanho, nTi po) nLi n : = 9 Endi f . . .
IMPCADAST()
A funo IMPCADAST() cria uma interface simples que permite a impresso dos cadastros do sistema com parametrizao DE/ATE.
E Sintaxe: IMPCADAST(cCab1, cCab2, cCab3, cNomeProg, cTam, nLimite, cAlias)
E Parmetros:
cCab1 Primeira linha do cabealho. cCab2 Segunda linha do cabealho. cCab3 Terceira linha do cabealho. cNomeProg Nome do programa. cTam Tamanho do relatrio nos formatos P, M e G. nLimite Nmero de colunas do relatrio, seguindo o formato especificado no tamanho, aonde: P- 80 colunas M- 132 colunas G- 220 colunas cAlias Alias do arquivo de cadastro que ser impresso.
Programao ADVPL II e Guia de Referncia Pgina 413
E Retorno:
Nenhum ()
MS_FLUSH()
A funo MS_FLUSH() envia o spool de impresso para o dispositivo previamente especificado com a utilizao das funes AVALIMP() ou SETPRINT().
St at i c Funct i on RunRepor t ( cTi t ul o, cSt r i ng, cNomePr og, cTamanho, nTi po, nLi mi t e)
Local nLi n : = 80 Local cCabec1 : = " " Local cCabec2 : = " " Local cAr qI nd
cCabec1 : = " CODI GO" +Space( 2) +" LOJ A" +Space( 2) +" NOME REDUZI DO" +Space( 9) cCabec1 += " RAZAO SOCI AL" +Space( 30) +" CNPJ " +Space( 18) +" I NSCR. ESTADUAL" +Space( 8) cCabec1 += " CEP" Pgina 414 Programao ADVPL II e Guia de Referncia cCabec2 : = " ESTADO" +Space( 2) +" MUNI CI PI O" +Space( 8) +" ENDERECO"
dbSel ect Ar ea( " TRBSA1" ) dbGoTop( )
Set Regua( RecCount ( ) )
Whi l e ! EOF( )
I f l Abor t Pr i nt . OR. nLast Key == 27 @nLi n, 00 PSAY " *** CANCELADO PELO OPERADOR ***" Exi t Endi f
I f nLi n > 55 / / Sal t o de Pgi na. Nest e caso o f or mul ar i o t em55 l i nhas. . . Cabec( cTi t ul o, cCabec1, cCabec2, cNomePr og, cTamanho, nTi po) nLi n : = 9 Endi f
/ / Pr i mei r a l i nha de det al he: @nLi n, 000 PSAY TRBSA1- >A1_COD @nLi n, 008 PSAY TRBSA1- >A1_LOJ A @nLi n, 014 PSAY TRBSA1- >A1_NREDUZ @nLi n, 036 PSAY TRBSA1- >A1_NOME @nLi n, 078 PSAY TRBSA1- >A1_CGC @nLi n, 100 PSAY TRBSA1- >A1_I NSCR @nLi n, 122 PSAY TRBSA1- >A1_CEP nLi n++
/ / Segunda l i nha de det al he @nLi n, 000 PSAY TRBSA1- >A1_EST @nLi n, 008 PSAY TRBSA1- >A1_MUN @nLi n, 025 PSAY TRBSA1- >A1_END nLi n++
/ / Li nha separ ador a de det al hes @nLi n, 000 PSAY Repl i cat e( " - " , nLi mi t e) nLi n++
dbSki p( ) / / Avanca o pont ei r o do r egi st r o no ar qui vo EndDo
SET DEVI CE TO SCREEN
I f aRet ur n[ 5] ==1 dbCommi t Al l ( ) SET PRI NTER TO Our Spool ( wnr el ) Programao ADVPL II e Guia de Referncia Pgina 415 Endi f
MS_FLUSH( ) RETURN
OURSPOOL()
A funo OURSPOOL() executa o gerenciador de impresso da aplicao Protheus, permitindo a visualizao do arquivo de impresso gerado pelo relatrio no formato PostScrip com extenso ##R.
E Sintaxe: OURSPOOL(cArquivo)
E Parmetros:
cArquivo Nome do relatrio a ser visualizado.
E Retorno:
Nenhum ()
Exemplo:
I f aRet ur n[ 5] ==1 / / I ndi ca i mpr esso emdi sco. dbCommi t Al l ( ) SET PRI NTER TO Our Spool ( wnr el ) Endi f
RODA()
A funo RODA() imprime o rodap da pgina do relatrio, o que pode ser feito a cada pgina, ou somente ao final da impresso.
Pode ser utilizado o ponto de entrada "RodaEsp" para tratamento de uma impresso especfica.
E Sintaxe: Roda(uPar01, uPar02, cSize) Pgina 416 Programao ADVPL II e Guia de Referncia
E Parmetros:
uPar01 No mais utilizado. uPar02 No mais utilizado. cSize Tamanho do relatrio (P,M,G).
User Funct i on Test I mpr ( ) Local wnr el Local cSt r i ng : = " SA1" Local t i t ul o : = " Test e I mpr esso de Rel at or i os" Local NomePr og : = " XXX" Local Tamanho : = " M"
PRI VATE aRet ur n : = { " Zebr ado" , 1, " Admi ni st r acao" , 1, 2, 1, " " , 1 }
wnr el : =Set Pr i nt ( cSt r i ng, NomePr og, " " , @t i t ul o, " " , " " , " " , . F. , . F. , . F. , Tamanho, , . F. )
Set Def aul t ( aRet ur n, cSt r i ng)
Rpt St at us( {| l End| Test Rel ( @l End, wnRel , cSt r i ng, Tamanho, NomePr og) }, t i t ul o)
Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 417 Exemplo (continuao):
LOCAL cabec1, cabec2 LOCAL cRodaTxt : = oemt oansi ( " Rodap" ) Local nCnt I mpr Local nTi po
nCnt I mpr : = 0 l i : = 80 m_pag : = 1 nTi po : = 15 t i t ul o: = oemt oansi ( " Li st a de Cl i ent es" ) cabec1: = oemt oansi ( " COD LOJ A NOME" +Space( 27) + " NOME FANTASI A" ) cabec2: =" "
dbSel ect Ar ea( " SA1" ) dbGoTop( ) Set Regua( Last Rec( ) ) Whi l e ! Eof ( ) I ncRegua( ) I f Li > 60 cabec( t i t ul o, cabec1, cabec2, nomepr og, t amanho, 15) @Li , 0 PSAY __Pr t Thi nLi ne( ) Endi f nCnt I mpr ++ Li ++ @Li , 01 PSAY A1_COD @Li , 05 PSAY A1_LOJ A @Li , 10 PSAY A1_NOME @Li , 51 PSAY A1_NREDUZ I f Li > 60 Li : =66 Endi f dbSki p( ) EndDO
I f l i ! = 80 Pgina 418 Programao ADVPL II e Guia de Referncia Roda( nCnt I mpr , cRodaTxt , Tamanho) EndI f
Set Devi ce t o Scr een I f aRet ur n[ 5] = 1 Set Pr i nt er To dbCommi t Al l ( ) Our Spool ( wnr el ) Endi f MS_FLUSH( ) Ret ur n
SETDEFAULT()
A funo SetDefault() prepara o ambiente de impresso de acordo com as informaes configuradas no array aReturn, obtidas atravs da funo SetPrint().
aReturn Configuraes de impresso. cAlias Alias do arquivo a ser impresso. uParm3 Parmetro reservado. uParm4 Parmetro reservado. cSize Tamanho da pgina "P","M" ou "G" nFormat Formato da pgina, 1 retrato e 2 paisagem.
E Retorno:
Nenhum ()
Programao ADVPL II e Guia de Referncia Pgina 419
E Estrutura aReturn:
aReturn[1] Caracter, tipo do formulrio. aReturn[2] Numrico, opo de margem. aReturn[3] Caracter, destinatrio. aReturn[4] Numrico, formato da impresso. aReturn[5] Numrico, dispositivo de impresso. aReturn[6] Caracter, driver do dispositivo de impresso. aReturn[7] Caracter, filtro definido pelo usurio. aReturn[8] Numrico, ordem. aReturn[x] A partir a posio [9] devem ser informados os nomes dos campos que devem ser considerados no processamento, definidos pelo uso da opo Dicionrio da SetPrint().
SETPRC()
A funo SETPRC() utilizada para posicionar o dispositivo de impresso ativo, previamente definido pelo uso das funes AVALIMP() ou SETPRINT(), em uma linha/coluna especificada.
E Sintaxe: SETPRC(nLinha, nColuna)
E Parmetros:
nLinha Linha na qual dever ser posicionado o dispositivo de impresso. nColuna Coluna na qual dever ser posicionado o dispositivo de impresso.
E Retorno:
Nenhum ()
Exemplo:
aRet ur n : = { " " , 1, " " , 2, 3, cPor t a , " " , I ndexOr d( ) } Set Pr i nt ( Al i as( ) , " " , " " , " " , , , , . F. , , , , , , , ' EPSON. DRV' , . T. , , cPor t a) i f nLast Key == 27 Ret ur n ( . F. ) Endi f Set Def aul t ( aRet ur n, Al i as( ) ) Set Pr c( 0, 0)
Pgina 420 Programao ADVPL II e Guia de Referncia SETPRINT()
A funo SetPrint() cria uma interface padro onde as opes de impresso de um relatrio podem ser configuradas. Basicamente duas variveis m_pag e aReturn precisam ser declaradas como privadas (private) antes de executar a SetPrint(), sendo que:
O m_pag: controla o nmero de pginas. O aReturn: vetor contendo as opes de impresso, sendo sua estrutura bsica composta de 8 (oito) elementos.
Aps confirmada, os dados so armazenados no vetor aReturn que ser passado como parmetro para funo SetDefault().
cAlias Alias do arquivo a ser impresso. cProgram Nome do arquivo a ser gerado em disco. cPergunte Grupo de perguntas cadastrado no dicionrio SX1. cTitle Ttulo do relatrio.
E Parmetros (continuao):
cDesc1 Descrio do relatrio. cDesc2 Continuao da descrio do relatrio. cDesc3 Continuao da descrio do relatrio. lDic Utilizado na impresso de cadastro genrico permite a escolha dos campos a serem impressos. Se o parmetro cAlias no for informado o valor padro assumido ser .F. aOrd Ordem(s) de impresso. lCompres Se verdadeiro (.T.) permite escolher o formato da impresso, o valor padro assumido ser .T. cSize Tamanho do relatrio "P","M" ou "G". uParm12 Parmetro reservado. lFilter Se verdadeiro (.T.) permite a utilizao do assistente de filtro, o valor padro assumido ser .T. lCrystal Se verdadeiro (.T.) permite integrao com Crystal Reports, o valor padro assumido ser .F. cNameDrv Nome de um driver de impresso. Programao ADVPL II e Guia de Referncia Pgina 421 uParm16 Parmetro reservado. lServer Se verdadeiro (.T.) fora impresso no servidor. cPortPrint Define uma porta de impresso padro.
E Retorno:
Caracter Nome do Relatrio
E Estrutura aReturn:
aReturn[1] Caracter, tipo do formulrio. aReturn[2] Numrico, opo de margem. aReturn[3] Caracter, destinatrio. aReturn[4] Numrico, formato da impresso. aReturn[5] Numrico, dispositivo de impresso. aReturn[6] Caracter, driver do dispositivo de impresso. aReturn[7] Caracter, filtro definido pelo usurio. aReturn[8] Numrico, ordem. aReturn[x] A partir a posio [9] devem ser informados os nomes dos campos que devem ser considerados no processamento, definidos pelo uso da opo Dicionrio da SetPrint().
Controle de processamentos
ABREEXCL()
A funo ABREEXCL() fecha o arquivo cujo alias est expresso em <cAlias> e o reabre em modo exclusivo para proceder operaes em que isto necessrio, como por exemplo, PACK. Se outra estao estiver usando o arquivo, o retorno ser .F..
E Sintaxe: ABREEXCL(cAlias)
E Parmetros:
cAlias Alias do arquivo que ser reaberto em modo exclusivo.
E Retorno:
Lgico Indica se foi possvel abrir o arquivo em modo exclusivo.
Pgina 422 Programao ADVPL II e Guia de Referncia CLOSEOPEN()
A funo CLOSEOPEN() utilizada para fechar e reabrir uma lista de arquivos especificada.
E Sintaxe: CLOSEOPEN(aClose, aOpen)
E Parmetros:
aClose Array contendo os Aliases dos arquivos que devero ser fechados. aOpen Array contendo os Aliases dos arquivos que devero ser abertos.
E Retorno:
Lgico Indica se todos os arquivos especificados em aOpen foram abertos com sucesso.
CLOSESFILE()
A funo CLOSESFILE() fecha todos os arquivos em uso pela conexo, com exceo dos SXs (inclusive SIX), SM2 e SM4.
E Sintaxe: CLOSESFILE(cAlias)
E Parmetros:
cAlias String contendo os nomes dos demais Aliases que no devero ser fechados, separando os itens com /.
E Retorno:
Lgico Indica se todos os arquivos foram fechados com sucesso.
CHKFILE()
A funo CHKFILE() retorna verdadeiro (.T.) se o arquivo j estiver aberto ou se o Alias no for informado. Sempre que desejar mudar o modo de acesso do arquivo (de compartilhado para exclusivo ou vice-versa), feche-o antes de cham-la.
E Sintaxe: ChkFile(cAlias,lExcl,cNewAlias) Programao ADVPL II e Guia de Referncia Pgina 423
E Parmetros:
cAlias Alias do arquivo a ser reaberto. lExcl Se for informado verdadeiro (.T.), o arquivo ser aberto em modo Exclusivo. Caso contrrio, o arquivo ser aberto em modo compartilhado. Se este parmetro no for informado, ser assumido falso (.F.). cNewAlias Novo Alias para reabertura do arquivo.
E Retorno:
Lgico Indica se o arquivo foi re-aberto com sucesso.
Exemplo:
dbSel ect Ar ea( SA1) dbCl oseAr ea( ) l Ok : = . T. Whi l e . T. I F ! ChkFi l e( SA1, . T. ) nResp : = Al er t ( Out r o usur i o usando! Tent a de novo?, {Si m, Nao}) I f nResp == 2 l Ok : = . F. Exi t Endi f Endi f EndDo I f l Ok / / Faz o pr ocessament o como ar qui vo. . . Endi f / / Fi nal i za I f Sel ect ( SA1) dbCl oseAr ea( ) Endi f ChkFi l e( SA1, . F. ) Ret ur n
Pgina 424 Programao ADVPL II e Guia de Referncia CONOUT()
A funo CONOUT() permite a exibio de uma mensagem de texto no console do Server do Protheus. Caso o Protheus esteja configurado como servio a mensagem ser gravada no arquivo de log.
E Sintaxe: CONOUT(cMensagem)
E Parmetros:
cMensagem String contendo a mensagem que dever ser exibida no console do Protheus.
E Retorno:
Nenhum ()
CRIAVAR()
A funo CRIAVAR() cria uma varivel, retornando o valor do campo, de acordo com o dicionrio de dados, inclusive avaliando o inicializador padro, permitindo um retorno de acordo com o tipo de dado definido no dicionrio.
E Sintaxe: CriaVar(cCampo,lIniPad,cLado)
E Parmetros:
cCampo Nome do campo. lIniPad Indica se considera (.T.) ou no (.F.) o inicializador. cLado Se a varivel for caracter, cLado pode ser: C - centralizado, L - esquerdo ou R direito.
E Retorno:
Indefinido Tipo de dado de acordo com o dicionrio de dados, considerando inicializador padro
Exemplo:
/ / Exempl o do uso da f uno Cr i aVar : cNumNot a : = Cr i aVar ( F2_DOC) / / Ret or na o cont edo do / / i ni ci al i zador padr o, / / se exi st i r , ou espaos embr anco Al er t ( cNumNot a) Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 425 DISARMTRANSACTION()
A funo DISARMTRANSATCION() utilizada para realizar um RollBack de uma transao aberta com o comando BEGIN TRANSACTION e delimitada com o comando END TRANSACTION.
Ao utilizar esta funo, todas as alteraes realizadas no intervalo delimitado pela transao so desfeitas, restaurando a situao da base de dados ao ponto imediatamente anterior ao incio do processamento.
O uso da funo DISARMTRANSACTION() no finaliza a conexo ou o processamento corrente.
Caso seja necessrio alm de desfazer as alteraes, finalizar o processamento, dever ser utilizada a funo USEREXCEPTION().
E Sintaxe: DISARMTRANSACTION()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Exemplo:
l MsEr r oAut o : = . F. MSExecAut o( {| x, y| MATA240( x, y) }, aCampos, 3)
I f l MsEr r oAut o
aAut oEr r o : = GETAUTOGRLOG( ) Di sar mTr ansact i on( ) Most r aEr r o( )
EndI f
Pgina 426 Programao ADVPL II e Guia de Referncia EXECBLOCK()
A funo EXECBLOCK() executa uma funo de usurio que esteja compilada no repositrio. Esta funo normalmente utilizada pelas rotinas padres da aplicao Protheus para executar pontos de entrada durante seu processamento.
A funo de usurio executada atravs da EXECBLOCK() no recebe parmetros diretamente, sendo que estes estaro disponveis em uma varivel private denominada PARAMIXB.
A varivel PARAMIXB o reflexo do parmetro xParam, definido na execuo da funo EXECBLOCK(). Caso seja necessria a passagem de vrias informaes, as mesmas devero ser definidas na forma de um array, tornando PARAMIXB um array tambm, a ser tratado na funo de usurio que ser executada.
EXISTBLOCK()
A funo EXISTBLOCK() verifica a existncia de uma funo de usurio compilada no repositrio de objetos da aplicao Protheus. Esta funo normalmente utilizada nas rotinas padres da apliao Protheus para determinar a existncia de um ponto de entrada e permitir sua posterior execuo.
E Sintaxe: EXISTBLOCK(cFuno)
E Parmetros:
cFuno Nome da funo que ser avaliada.
E Retorno:
Lgico Indica se a funo de usurio existe compilada no repositrio de objetos corrente.
Exemplo:
I F EXI STBLOCK( MT100GRV) EXECBLOCK( MT100GRV, . F. , . F. , aPar am) ENDI F
Programao ADVPL II e Guia de Referncia Pgina 427
E Sintaxe: EXECBLOCK(cFuno, lReserv1, lReserv2, xParam)
E Parmetros:
cFuno Nome da funo de usurio que ser executada. lReserv1 Parmetro de uso reservado da aplicao. Definir como .F. lReserv2 Parmetro de uso reservado da aplicao. Definir como .F. xParam Contedo que ficar disponvel na funo de usurio executada, na forma da varivel private PARAMIXB.
E Retorno:
Indefinido O retorno da EXECBLOCK() definido pela funo que ser executada.
Exemplo:
aPar am: = {cNot a, cSer i e, cFor nece, cLoj a)
I F EXI STBLOCK( MT100GRV) l Gr avou : = EXECBLOCK( MT100GRV, . F. , . F. , aPar am) ENDI F
USER FUNCTI ON MT100GRV( )
LOCAL cNot a : = PARAMI XB[ 1] LOCAL cSer i e: = PARAMI XB[ 1] LOCAL cFor nece: = PARAMI XB[ 1] LOCAL cLoj a: = PARAMI XB[ 1]
RETURN . T.
ERRORBLOCK()
A funo ERRORBLOCK() efetua o tratamento de erros e define a atuao de um handler de erros sempre que ocorrer um erro em tempo de execuao. O manipulador de erros especificado como um bloco de cdigo da seguinte forma:
O { |<objError>| <lista de expressoes>, ... }, onde:
<objError> um error object que contm informaoes sobre o erro. Dentro do bloco de cdigo, podem ser enviadas mensagens ao error object para obter informaoes sobre o erro. Se o bloco de tratamento de erros retornar verdadeiro (.T.), a operaao que falhou repetida, e se retornar falso (.F.), o processamento recomea.
Pgina 428 Programao ADVPL II e Guia de Referncia Se no foi especificado nenhum <bErrorHandler> utilizando ERRORBLOCK() e ocorrer um erro em tempo de execuao, o bloco de tratamento ao de erros padrao avaliado. Este manipulador de erros exibe uma mensagem descritiva na tela, ajusta a funao ERRORLEVEL() para 1, e depois sai do programa (QUIT).
Como ERRORBLOCK() retorna o bloco de tratamento ao de erros correntes, possvel especificar um bloco de tratamento de erros para uma operaao gravando-se o bloco de manipulaao de erros correntes e depois recuperando-o aps o final da operaao. Alm disso, uma importante consequncia do fato de os blocos de tratamento de erros serem especificados como blocos de cdigo, que eles podem ser passados para rotinas e funoes definidas por usurio e depois retornadas como valores.
E Sintaxe: ERRORBLOCK ( < bErrorHandler > )
E Parmetros:
bErrorHandler
O bloco de cdigo a ser executado toda vez que ocorrer um erro em tempo de execuao. Quando avaliado, o <bErrorHandler> passado na forma de um objeto erro como um argumento pelo sistema.
E Retorno:
Code-block Retorna o bloco de cdigo corrente que deve tratar o erro. Caso no tenha sido enviado nenhum bloco de tratamento de erro desde que o programa foi invocado, ERRORBLOCK() retorna o bloco de tratamento de erro padro.
Exemplo:
Funct i on CA010For m( ) LOCAL xResul t LOCAL cFor m: = Upper ( &( ReadVar ( ) ) ) LOCAL bBl ock: = Er r or Bl ock( { | e| ChecEr r o( e) } ) LOCAL cOut Mod Local l Opt i mi ze : = Get NewPar ( " MV_OPTNFE" , . F. ) . Or . Get NewPar ( " MV_OPTNFS" , . F. )
PRI VATE l Ret : =. T.
cVar Out Mod : = I f ( Type( " cVar Out Mod" ) = " U" , " " , cVar Out Mod) cOut Mod : = cVar Out Mod + I f ( Ri ght ( cVar Out Mod, 1) = " , " , " " , " , " )
Whi l e ! Empt y( cOut Mod) I f Lef t ( cOut Mod, At ( " , " , cOut Mod) - 1) $ Upper ( cFor m) / / no modul o Hel p( " " , 1, " ERR_FORM, , " Var i avel nao di sponi vel par a est e modul o" Ret ur n . F. Programao ADVPL II e Guia de Referncia Pgina 429 Endi f cOut Mod : = Subs( cOut Mod, At ( " , " , cOut Mod) + 1) EndDo I f ( " LERSTR" $cFor m. or . " LERVAL" $cFor m. or . " LERDATA" $cFor m) . And. M- >I 5_CODI GO > " 499" Hel p( " " , 1, " CA010TXT" ) Er r or Bl ock( bBl ock) Ret ur n . F. Endi f BEGI N SEQUENCE I f ! " EXECBLOCK" $cFor m. and. ! " LERSTR" $cFor m. And. ; / / nao execut a execbl ock ! " LERVAL" $cFor m. And. ; / / nemf uncao de l ei t ur a ! " LERDATA" $cFor m. And. ; / / de t ext o no cadast r ament o I I f ( ! l Opt i mi ze, . T. , ! " CTBANFS" $cFor m. And. ! " CTBANFE" $cFor m) xResul t : = &cFor m Endi f END SEQUENCE Er r or Bl ock( bBl ock) Ret ur n l Ret
FINAL()
A funo FINAL() executa as operaes bsicas que garantem a integridade dos dados ao finalizar o sistema desmontando as transaes (se houver), desbloqueando os semforos e fechando as tabelas abertas, finalizando-o em seguinda.
E Sintaxe: Final( [cMensagem1], [cMensagem2] )
E Parmetros:
cMensagem1 Primeira mensagem cMensagem2 Segunda mensagem
E Retorno:
Nenhum ()
Pgina 430 Programao ADVPL II e Guia de Referncia Exemplo:
User Funct i on Val i dUser ( cUsuar i o, cSenha )
Local cMensag1 : = Usur i o i nval i do! Local cMensag2 : = Opo di spon vel par a usur i os Admi nst r ador es!
I f ! PswAdmi n( cUsuar i o, cSenha ) Fi nal ( cMensag1, cMensag2 ) EndI f
Ret ur n
FINDFUNCTION()
A funo FINDFUNCTION() tem como objetivo verificar se uma determinada funo se encontra no repositrio de objetos e at mesmo do binrio do Protheus, sendo uma funo bsica da linguagem.
E Sintaxe: FINDFUNCTION(cFuno)
E Parmetros:
cFuno Nome da funo que ser avaliada no repositrio de objetos corrente.
E Retorno:
Lgico Indica se a funo existe compilada no repositrio de objetos corrente.
FUNDESC()
A funo FunDesc() retornar a descrio de uma opo selecionada no menu da aplicao.
E Sintaxe: FUNDESC()
E Parmetros:
Nenhum ()
E Retorno:
Caracter Descrio da opo selecionada no menu da aplicao.
Programao ADVPL II e Guia de Referncia Pgina 431 FUNNAME()
A funo FunName() retornar o nome de uma funo executada a partir de um menu da aplicao.
E Sintaxe: FUNNAME()
E Parmetros:
Nenhum ()
E Retorno:
Caracter Nome da funo executada a partir do menu da aplicao.
GETAREA()
Funo utilizada para proteger o ambiente ativo no momento de algum processamento especfico. Para salvar uma outra rea de trabalho (alias) que no o ativo, a funo GetArea() deve ser executada dentro do alias: ALIAS->(GetArea()).
E Sintaxe: GETAREA()
E Retorno: Array contendo {Alias(),IndexOrd(),Recno()}
E Parmetros
Nenhum ()
GETCOUNTRYLIST()
A funo GETCOUNTRYLIST() retorna um array de duas dimenses contendo informaes dos pases localizados.
E Sintaxe: GetCountryList()
E Parmetros:
Nenhum ()
E Retorno:
Array Array de duas dimenses, sendo uma linha para cada pas localizado, contendo em cada posio a sigla dos pases, o nome do pas e a identificao do pas com dois dgitos.
Pgina 432 Programao ADVPL II e Guia de Referncia Exemplo:
Local aAr r ay : = Get Count r yLi st ( ) Local cSi gl a : = Get Mv( MV_PAI SLOC ) Local nPos
nPos : = Ascan( aAr r ay, {| d| d[ 1] == Upper ( cSi gl a) } ) I f nPos > 0 APMsgI nf o( Pa s de l ocal i zao + aAr r ay[ nPos, 2] ) EndI f
ISINCALLSTACK()
A funo ISINCALLSTACK() verifica se uma determinada funo est existe dentro da pilha de chamadas do processamento corrente.
E Sintaxe: IsInCallStack( cIsInCallStack , cStackExit )
E Parmetros:
cIsInCallStack Nome da funo que desejasse pesquisar na pilha. cStackExit String que identifica o ponto em que desejasse finalizar a busca. Caso no seja informada, ser utilizada como padro a expresso "STACK_EXIT".
E Retorno: Lgico Indica se a funo especificada encontrasse na pilha de chamadas do processsamento corrente, at o ponto de sada especificado.
REGTOMEMORY()
Inicializa as variveis de memria identificadas pelo uso do alias M-> de acordo com a estrutura e/ou informaes contidas no arquivo definido como referncia.
E Sintaxe: REGTOMEMORY(cAlias, lInclui)
E Parmetros:
cAlias Alias do arquivo que ser utilizado como referncia para inicializao das variveis de memria. lInclui Identifica se as variveis devero ser inicializadas com contedos padres, ou contendo as informaes do registro posicionado do alias especificado.
Programao ADVPL II e Guia de Referncia Pgina 433
E Retorno:
Nenhum ()
RESTAREA()
Funo utilizada para devolver a situao do ambiente salva atravs do comando GETAREA(). Deve-se observar que a ltima rea restaurada a rea que ficar ativa para a aplicao.
E Sintaxe: RESTAREA(aArea)
E Parmetros
aArea Array contendo: {cAlias, nOrdem, nRecno}, normalmente gerado pelo uso da funo GetArea().
Exemplo:
/ / ALI AS ATI VO ANTES DA EXECUO DA ROTI NA SN3 User Funct i on XATF001( )
LOCAL cVar LOCAL aAr ea : = Get Ar ea( ) LOCAL l Ret : = . T.
cVar : = &( ReadVar ( ) )
dbSel ect Ar ea( " SX5" ) I F ! dbSeek( xFi l i al ( ) +" Z1" +cVar )
cSTR0001 : = " REAV - Ti po de Reaval i acao" cSTR0002 : = " I nf or me umt i po de r eaval i cao val i do" cSTR0003 : = " Cont i nuar " Avi so( cSTR0001, cSTR0002, {cSTR0003}, 2) l Ret : = . F.
ENDI F
Rest Ar ea( aAr ea) Ret ur n( l Ret )
Pgina 434 Programao ADVPL II e Guia de Referncia USEREXCEPTION()
A funo USEREXCEPTION() tem o objetivo de forar um erro em ADVPL de forma que possamos tratar de alguma forma. USEREXCEPTION() recebe uma string contendo uma descrio do erro, essa descrio ser exibida de acordo com o ambiente que se est executando (no caso, um ambiente ERP). Ser exibida uma tela de erro.
E Sintaxe: USEREXCEPTION(cMensagem)
E Parmetros:
cMensagem Mensagem que ser exibida no cabealho do erro, contendo a explicao da exceo.
E Retorno:
Nenhum ()
Utilizao de recursos do ambiente ERP
AJUSTASX1()
A funo AJUSTASX1() permite a incluso simultnea de vrios itens de perguntas para um grupo de perguntas no SX1 da empresa ativa.
E Sintaxe: AJUSTASX1(cPerg, aPergs)
E Parmetros:
cPerg Grupo de perguntas do SX1 (X1_GRUPO) aPergs Array contendo a estrutura dos campos que sero gravados no SX1.
E Retorno:
Nenhum ()
Programao ADVPL II e Guia de Referncia Pgina 435
E Estrutura Item do array aPerg:
Posio Campo Tipo Descrio 01 X1_PERGUNT Caractere Descrio da pergunta em portugus. 02 X1_PERSPA Caractere Descrio da pergunta em espanhol. 03 X1_PERENG Caractere Descrio da pergunta em ingls. 04 X1_VARIAVL Caractere Nome da varivel de controle auxiliar (mv_ch). 05 X1_TIPO Caractere Tipo do parmetro. 06 X1_TAMANHO Numrico Tamanho do contedo do parmetro. 07 X1_DECIMAL Numrico Nmero de decimais para contedos numricos. 08 X1_PRESEL Numrico Define qual opo do combo a padro para o parmetro. 09 X1_GSC Caractere Define se a pergunta ser do tipo G Get ou C Choice (combo). 10 X1_VALID Caractere Expresso de validao do parmetro. 11 X1_VAR01 Caractere Nome da varivel MV_PAR+Ordem do parmetro. 12 X1_DEF01 Caractere Descrio da opo 1 do combo em portugus. 13 X1_DEFSPA1 Caractere Descrio da opo 1 do combo em espanhol. 14 X1_DEFENG1 Caractere Descrio da opo 1 do combo em ingls. 15 X1_CNT01 Caractere Contedo padro ou ltimo contedo definido como respostas para a pergunta. 16 X1_VAR02 Caractere No informado. 17 X1_DEF02 Caractere Descrio da opo X do combo em portugus. 18 X1_DEFSPA2 Caractere Descrio da opo X do combo em espanhol. 19 X1_DEFENG2 Caractere Descrio da opo X do combo em ingls. 20 X1_CNT02 Caractere No informado. 21 X1_VAR03 Caractere No informado. 22 X1_DEF03 Caractere Descrio da opo X do combo em portugus.
Pgina 436 Programao ADVPL II e Guia de Referncia
E Estrutura Item do array aPerg (continuao):
23 X1_DEFSPA3 Caractere Descrio da opo X do combo em espanhol. 24 X1_DEFENG3 Caractere Descrio da opo X do combo em ingls. 25 X1_CNT03 Caractere No informado. 26 X1_VAR04 Caractere No informado. 27 X1_DEF04 Caractere Descrio da opo X do combo em portugus. 28 X1_DEFSPA4 Caractere Descrio da opo X do combo em espanhol. 29 X1_DEFENG4 Caractere Descrio da opo X do combo em ingls. 30 X1_CNT04 Caractere No informado. 31 X1_VAR05 Caractere No informado. 32 X1_DEF05 Caractere Descrio da opo X do combo em portugus. 33 X1_DEFSPA5 Caractere Descrio da opo X do combo em espanhol. 34 X1_DEFENG5 Caractere Descrio da opo X do combo em ingls. 35 X1_CNT05 Caractere No informado. 36 X1_F3 Caractere Cdigo da consulta F3 vinculada ao parmetro. 37 X1_GRPSXG Caractere Cdigo do grupo de campos SXG para atualizao automtica, quando o grupo for alterado. 38 X1_PYME Caractere Se a pergunta estar disponvel no ambiente Pyme. 39 X1_HELP Caractere Contedo do campo X1_HELP 40 X1_PICTURE Caractere Picture de formatao do contedo do campo. 41 aHelpPor Array Vetor simples contendo as linhas de help em portugus para o parmetro. Trabalhar com linhas de at 40 caracteres. 42 aHelpEng Array Vetor simples contendo as linhas de help em ingls para o parmetro. Trabalhar com linhas de at 40 caracteres. 43 aHelpSpa Array Vetor simples contendo as linhas de help em espanhol para o parmetro. Trabalhar com linhas de at 40 caracteres.
Programao ADVPL II e Guia de Referncia Pgina 437 ALLUSERS()
A funo ALLUSERS() retorna um array multidimensional contendo as informaes dos usurios do sistema.
E Sintaxe: ALLUSERS()
E Parmetros:
Nenhum ()
E Retorno:
Array Array multidimensional contendo as informaes dos usurios do sistema, aonde para cada usurio sero demonstradas as seguintes informaes:
aArray[x][1] Configuraes gerais de acesso aArray[x][2] Configuraes de impresso aArray[x][3] Condiguraes de acesso aos mdulos
E Array de informaes dos usurios: Configuraes gerais de acesso
Elemento Descrio Tipo Qtd. 1 1 ID C 6 2 Nome C 15 3 Senha C 6 4 Nome Completo C 30 5 Vetor com n ltimas senhas A -- 6 Data de validade D 8 7 Quantas vezes para expirar N 4 8 Autorizado a alterar a senha L 1 9 Alterar a senha no prximo logon L 1 10 Vetor com os grupos A -- 11 ID do superior C 6 12 Departamento C 30 13 Cargo C 30 14 E-Mail C 130 15 Nmero de acessos simultneos N 4 16 Data da ltima alterao D 8 17 Usurio bloqueado L 1 18 Nmero de dgitos para o ano N 1 19 Listner de ligaes L 1 20 Ramal C 4 Pgina 438 Programao ADVPL II e Guia de Referncia E Array de informaes dos usurios: Configuraes de impresso
Elemento Descrio Tipo Qtd. 2 1 Vetor com horrios de acesso A -- 2 Idioma N 1 3 Diretrio C 100 4 Impressora C -- 5 Acessos C 512 6 Vetor com empresas A -- 7 Ponto de entrada C 10 8 Tipo de impresso N 1 9 Formato N 1 10 Ambiente N 1 11 Prioridade p/ config. do grupo L 1 12 Opo de impresso C 50 13 Acesso a outros dir de impresso L 1
E Array de informaes dos usurios: Configuraes de acesso aos mdulos
Elemento Descrio Tipo Qtd. 3 1 Mdulo+nvel+menu C
ALLGROUPS()
A funo ALLGROUPS() retorna um array multidimensional contendo as informaes dos grupos de usurios do sistema.
E Sintaxe: ALLGROUPS()
E Parmetros:
Nenhum ()
E Retorno:
Array Array multidimensional contendo as informaes dos grupos de usurios do sistema, aonde para cada grupo sero demonstradas as seguintes informaes:
aArray[x][1] Configuraes gerais de acesso aArray[x][2] Configuraes de acesso aos mdulos
Programao ADVPL II e Guia de Referncia Pgina 439
E Array de informaes dos grupos: Configuraes gerais de acesso
Elemento Descrio Tipo Qtd. 1 1 ID C 6 2 Nome C 20 3 Vetor com horrios de acesso A 4 Data de validade D 8 5 Quantas vezes para expirar N 4 6 Autorizado a alterar a senha L 1 7 Idioma N 1 8 Diretrio C 100 9 Impressora C 10 Acessos C 512 11 Vetor com empresas A 12 Data da ltima alterao D 8 13 Tipo de impresso N 1 14 Formato N 1 15 Ambiente N 1 16 Opo de impresso L 1 17 Acesso a outros Dir de impresso L 1
E Array de informaes dos grupos: Configuraes de acesso aos mdulos
Elemento Descrio Tipo Qtd. 2 1 Modulo+nvel+menu C
CGC()
A funo CGC() valida o CGC digitado, utilizando o algoritmo nacional para verificao do dgito de controle.
E Sintaxe: CGC(cCGC)
E Parmetros:
cCGC String contendo o CGC a ser validado.
E Retorno:
Lgico Indica se o CGC informado vlido.
Pgina 440 Programao ADVPL II e Guia de Referncia CONPAD1()
A funo CONPAD1() exibe uma tela de consulta padro baseada no Dicionrio de Dados (SXB).
uPar Parmetro reservado. uPar2 Parmetro reservado. uPar3 Parmetro reservado. cAlias Consulta padro cadastrada no Dicionrio de Dados (SXB) a ser utilizada. cCampoRet Nome da varivel ou campo que receber o retorno da consulta padro. uPar4 Parmetro Reservado.
lOnlyView Indica se ser somente para visualizao.
E Retorno:
Nenhum ()
DATAVALIDA()
A funo DATAVALIDA() retorna a primeira data vlida a partir de uma data especificada como referncia, considerando inclusive a data informada para anlise.
E Sintaxe: DATAVALIDA(dData)
E Parmetros:
dData Data a partir da qual ser avaliada a prxima data vlida, considerando-a inclusive como uma possibilidade.
E Retorno:
Data Prxima data vlida, desconsiderando sbados, domingos e os feriados cadastrados no sistema.
Programao ADVPL II e Guia de Referncia Pgina 441 EXISTINI()
A funo EXISTINI() verifica se o campo possui inicializador padro.
E Sintaxe: EXISTINI(cCampo)
E Parmetros:
cCampo Nome do campo para verificao.
E Retorno:
Lgico Indica se o campo possui um inicializador padro.
Exemplo:
/ / Exempl o de uso da f uncao Exi st I ni : / / Se exi st i r i ni ci al i zador no campo B1_COD: I f Exi st I ni ( B1_COD) / / Execut a o i ni ci al i zador : cCod : = Cr i aVar ( B1_COD) Endi f
Ret ur n
EXTENSO()
A funo EXTENSO() retorna uma string referente descrio por extenso de um valor numrico, sendo comumente utilizada para impresso de cheques, valor de duplicatas, etc.
E Sintaxe: Extenso(nValor, lQtd, nMoeda)
E Parmetros:
nValor Valor para gerao do extenso. lQtd Indica se o valor representa uma quantidade (.T.) ou dinheiro (.F.). nMoeda Para qual moeda do sistema deve ser o extenso.
E Retorno:
String Descrio do valor por extenso.
Pgina 442 Programao ADVPL II e Guia de Referncia FORMULA()
Interpreta uma frmula cadastrada. Esta funo interpreta uma frmula, previamente cadastrada no Arquivo SM4 atravs do Mdulo Configurador, e retorna o resultado com tipo de dado de acordo com a prpria frmula.
E Sintaxe: Formula(cFormula)
E Parmetros:
cFormula Cdigo da frmula a ser avaliada e cadastrada no SM4 Cadastro de Frmulas.
E Retorno:
Indefinido Resultado da interpretao da frmula cadastrada no SM4.
GETADVFVAL()
A funo GETADVFVAL() executa uma pesquisa em um arquivo pela chave de busca e na ordem especificada, possibilitando o retorno de um ou mais campos.
E Sintaxe: GetAdvFVal(cAlias,uCpo,uChave,nOrder,uDef)
E Parmetros:
cAlias Alias do arquivo. uCpo Nome de um campo ou array contendo os nomes dos campos Desejados. uChave Chave para a pesquisa. nOrder Ordem do ndice para a pesquisa. uDef Valor ou array default para ser retornado caso a chave no seja encontrada
E Retorno:
Indefinido Retorna o contedo de um campo ou array com o contedo de vrios campos.
A funo GETADVFVAL() difere da funo POSICIONE() apenas por permitir o retorno de vrios campos em uma nica consulta.
As duas funes devem ser protegidas por GETAREA() / RESTAREA() dependendo da aplicao.
Programao ADVPL II e Guia de Referncia Pgina 443 HELP()
Esta funo exibe a ajuda especificada para o campo e permite sua edio. Se for um help novo, escreve-se o texto em tempo de execuo.
E Sintaxe: Help(cHelp,nLinha, cTitulo, uPar4,cMensagem,nLinMen,nColMen)
E Parmetros:
cHelp Nome da Rotina chamadora do help. (sempre branco) nLinha Nmero da linha da rotina chamadora. (sempre 1) cTitulo Ttulo do help uPar4 Sempre NIL cMensagem Mensagem a ser exibida para o Help. nLinMen Nmero de linhas da Mensagem. (relativa janela) nColMen Nmero de colunas da Mensagem. (relativa janela)
E Retorno:
Nenhum ()
A funo HELP() tratada na execuo das rotinas com o recurso de MSEXECAUTO(), permitindo a captura e exibio da mensagem no log de processamento.
Por esta razo, em rotinas que podem ser chamadas atravs da funo MSEXECAUTO() deve-se sempre utilizar avisos utilizando esta funo, para que este tipo de processamento no seja travado indevidamente.
Exemplo:
I F l Aut o / / Se f or r ot i na aut omt i ca Hel p( " ESPECI FI CO" , 1, " HELP" , " PROCESSAMENTO" , " Par met r os do J OB I nvl i dos" , 1, 0) ELSE MsgAl er t ( Par met r os do J OB I nvl i dos, PROCESSAMENTO) ENDI F
Pgina 444 Programao ADVPL II e Guia de Referncia MESEXTENSO()
A funo MESEXTENSO() retorna o nome de um ms por extenso.
E Sintaxe: MESEXTENSO(nMes)
E Parmetros:
nMes Indica o nmero do ms a ter seu nome escrito por extenso.
Este parmetro pode ser definido tambm como caracter ou como data.
E Retorno:
String Nome do ms indicado por extenso.
OBRIGATORIO()
A funo OBRIGATORIO() avalia se todos os campos obrigatrios de uma Enchoice() foram digitados.
E Sintaxe: OBRIGATORIO(aGets, aTela, aTitulos)
E Parmetros:
aGets Varivel PRIVATE tratada pelo objeto Enchoice(), previamente definida no fonte. aTela Varivel PRIVATE tratada pelo objeto Enchoice(), previamente definida no fonte. aTitulos Array contendo os ttulos dos campos exibidos na Enchoice().
E Retorno:
Lgico Indica se todos os campos obrigatrios foram preenchidos.
Pr i vat e cCadast r o : = " At ual i zacao de dados do bem" Pr i vat e aRot i na : = { {" Pesqui sar " , " AxPesqui " , 0, 1} , ; {" Vi sual i zar " , " AxVi sual " , 0, 2} , ; {" At ual i zar " , " U_A010AATU" , 0, 4}}
Pr i vat e cDel Func : = " . T. " Pr i vat e cSt r i ng : = " SN1"
dbSel ect Ar ea( " SN1" ) dbSet Or der ( 1) dbSel ect Ar ea( cSt r i ng) mBr owse( 6, 1, 22, 75, cSt r i ng)
Local aBut t ons : = {} Local cAl i asE : = cAl i as Local aAl t er Ench : = {} Local aPos : = {015, 000, 400, 600 Pgina 446 Programao ADVPL II e Guia de Referncia Local nModel o : = Local l F3 : = . F. Local l Memor i a : = . T. Local l Col umn : = . F. Local caTel a : = " " Local l NoFol der : = . F. Local l Pr oper t y : = . F.
Pr i vat e oDl g Pr i vat e oGet D Pr i vat e oEnch Private aTELA[0][0] // Variveis que sero atualizadas pela Enchoice() Private aGETS[0] // e utilizadas pela funo OBRIGATORIO()
DbSel ect Ar ea( " SX3" ) DbSet Or der ( 1) DbSeek( cAl i asE) / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Campos da enchoi ce | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Whi l e ! Eof ( ) . And. SX3- >X3_ARQUI VO == cAl i asE I f ! ( SX3- >X3_CAMPO $ " A1_FI LI AL" ) . And. cNi vel >= SX3- >X3_NI VEL . And. X3Uso( SX3- >X3_USADO) AAdd( aCpoEnch, SX3- >X3_CAMPO) EndI f DbSki p( ) End / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + / / | Campos al t er vei s da enchoi ce | / / +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + AADD( aAl t er Ench, " N1_TI POADT" ) / / Cont r ol e de Adi ant ament os AADD( aAl t er Ench, " N1_DESCRI C" ) / / Descr i o AADD( aAl t er Ench, " N1_CHAPA" ) / / Numer o da pl aquet a AADD( aAl t er Ench, " N1_FORNEC" ) / / For necedor AADD( aAl t er Ench, " N1_LOJ A" ) / / Loj a do For necedor AADD( aAl t er Ench, " N1_NSERI E" ) / / Ser i e da Not a AADD( aAl t er Ench, " N1_NFI SCAL" ) / / Numer o da Not a AADD( aAl t er Ench, " N1_NFI TEM" ) / / I t emda Not a AADD( aAl t er Ench, " N1_UM" ) / / Uni dade de Medi da AADD( aAl t er Ench, " N1_PRODUTO" ) / / Cdi go do Pr odut o AADD( aAl t er Ench, " N1_PEDI DO" ) / / Codi go do Pedi do de Compr as AADD( aAl t er Ench, " N1_I TEMPED" ) / / I t emdo Pedi do de Compr as AADD( aAl t er Ench, " N1_PRCI MP" ) / / Codi go do Pr ocesso de I mpor t acao AADD( aAl t er Ench, " N1_CODPAI S" ) / / Codi go do Pai s AADD( aAl t er Ench, " N1_ORI GCPR" ) / / Or i gemde Compr as AADD( aAl t er Ench, " N1_CODSP" ) / / Codi go da SP I nt er na AADD( aAl t er Ench, " N1_CHASSI S" ) / / Numer o de ser i e
oEnch : = MsMGet ( ) : New( cAl i asE, nReg, nOpc, / *aCRA*/ , / *cLet r a*/ , ; / *cText o*/ , aCpoEnch, aPos, aAl t er Ench, nModel o, / *nCol Mens*/ , ; / *cMensagem*/ , / *cTudoOk*/ , oDl g, l F3, l Memor i a, l Col umn, ; caTel a, l NoFol der , l Pr oper t y)
ACTI VATE MSDI ALOG oDl g CENTERED; ON I NI T Enchoi ceBar ( oDl g, {| | I I F( A010AGRV( aCpoEnch, aAl t er Ench, nOpc) , ; oDl g: End( ) , . F. ) }, ; / / Bot o OK {| | oDl g: End( ) }, , aBut t ons) / / Bot o Cancel ar
IF !Obrigatorio(aGets,aTela) /*Valida o cabecalho*/ Return .F. ENDIF
/ / At ual i zacao dos campos passi vei s de al t er acao no SN1 RecLock( " SN1" , . F. ) For nX : = 1 t o Len( aAl t er ) SN1- >&( aAl t er [ nX] ) : = M- >&( aAl t er [ nX] ) Next nX MsUnLock( )
Ret ur n . T. OPENFILE() Pgina 448 Programao ADVPL II e Guia de Referncia
A funo OPENFILE() exibe o diagnstico de arquivos, verificando a existncia dos arquivos de dados e os ndices do sistema, criando-os, caso no existam. Alm de abrir os arquivos de acordo com o mdulo onde executada ou de acordo com a parametrizao.
E Sintaxe: OPENFILE(cEmp)
E Parmetros:
cEmp Empresa cujo os arquivos sero re-abertos.
E Retorno:
Nenhum ()
PERGUNTE()
A funo PERGUNTE() inicializa as variveis de pergunta (mv_par01,...) baseada na pergunta cadastrado no Dicionrio de Dados (SX1). Se o parmetro lAsk no for especificado ou for verdadeiro ser exibida a tela para edio da pergunta e se o usurio cofirmar as variveis sero atualizadas e a pergunta no SX1 tambm ser atualizada.
E Sintaxe: Pergunte( cPergunta , [lAsk] , [cTitle] )
E Parmetros:
cPergunta Pergunta cadastrada no Dicionrio de Dados ( SX1) a ser utilizada. |Ask Indica se exibir a tela para edio. cTitle Ttulo do dilogo.
E Retorno:
Lgico Indica se a tela de visualizao das perguntas foi confirmada (.T.) ou cancelada (.F.)
Programao ADVPL II e Guia de Referncia Pgina 449 PESQPICT()
A funo PESQPICT() retorna a picture definida para um campo especificado no Dicionrio de Dados (SX3).
E Sintaxe: PesqPict(cAlias,cCampo,nTam)
E Parmetros:
cAlias Alias do arquivo. cCampo Nome do campo. nTam Opcional, para campos numricos, ser usado como o tamanho do campo para definio da picture. Se no informado, e usado o tamanho padro no Dicionrio de Dados.
E Retorno:
String Picture do campo especificado.
PESQPICTQT()
A funo PESQPICTQT() retorna a picture de um campo numrico referente a uma quantidade, de acordo com o Dicionrio de Dados (SX3). Esta funo geralmente utilizada quando h pouco espao disponvel para impresso de valores em relatrios, quando o valor nEdio no informado, ela tem o comportamento semelhante ao da funo X3Picture, pois busca o tamanho do campo no dicionrio de dados.
E Sintaxe: PesqPictQt(cCampo,nEdio)
E Parmetros:
cCampo Nome do campo a verificar a picture. nEdio Espao disponvel para edio.
E Retorno:
String Picture ideal para o espao definido por nEdio, sem a separao dos milhares por vrgula.
Pgina 450 Programao ADVPL II e Guia de Referncia POSICIONE()
A funo POSICIONE() permite o retorno do contedo de um campo de um registro de uma tabela especificado atravs de uma chave de busca.
E Sintaxe: Posicione(cAlias, nOrdem, cChave, cCampo)
E Parmetros:
cAlias Alias do arquivo. nOrdem Ordem utilizada. cChave Chave pesquisa. cCampo Campo a ser retornado.
E Retorno:
Indefinido Contedo do campo solicitado.
A utilizao da funo POSICIONE() deve ser protegida com GETAREA() / RESTAREA() dependendo da aplicao.
PUTSX1()
A funo PUTSX1() permite a incluso de um nico item de pergunta em um grupo de definido no Dicionrio de Dados (SX1). Todos os vetores contendo os textos explicativos da pergunta devem conter at 40 caracteres por linha.
cGrupo Grupo de perguntas do SX1 (X1_GRUPO). cOrdem Ordem do parmetro no grupo (X1_ORDEM). cPergunt Descrio da pergunta em portugus. cPerSpa Descrio da pergunta em espanhol. cPerEng Descrio da pergunta em ingls. cVar Nome da varivel de controle auxiliar (X1_VARIAVL). cTipo Tipo do parmetro. nTamanho Tamanho do contedo do parmetro. nDecimal Nmero de decimais para contedos numricos. nPresel Define qual opo do combo a padro para o parmetro. cGSC Define se a pergunta ser do tipo G Get ou C Choice (combo). cValid Expresso de validao do parmetro. cF3 Cdigo da consulta F3 vinculada ao parmetro. cGrpSxg Cdigo do grupo de campos SXG para atualizao automtica, quando o grupo for alterado. cPyme Se a pergunta estar disponvel no ambiente Pyme. cVar01 Nome da varivel MV_PAR+Ordem do parmetro. cDef01 Descrio da opo 1 do combo em portugus. cDefSpa1 Descrio da opo 1 do combo em espanhol. cDefEng1 Descrio da opo 1 do combo em ingls. cCnt01 Contedo padro ou ultimo contedo definido como respostas para este item. cDef0x Descrio da opo X do combo em portugus. cDefSpax Descrio da opo X do combo em espanhol. cDefEngx Descrio da opo X do combo em ingls. aHelpPor Vetor simples contendo as linhas de help em portugus para o parmetro. aHelpEng Vetor simples contendo as linhas de help em ingls para o parmetro. aHelpSpa Vetor simples contendo as linhas de help em espanhol para o parmetro. cHelp Contedo do campo X1_HELP.
Pgina 452 Programao ADVPL II e Guia de Referncia RETINDEX()
A funo RETINDEX() restaura os ndices padres de um alias definidos no Dicionrio de Dados (SIX).
E Sintaxe: RETINDEX(cAlias)
E Parmetros: cAlias Alias de um arquivo do sistema existente no Dicionrio de Dados.
E Retorno:
Numrico Indica quantos ndices padres o alias especificado possui no Dicionrio de Dados.
A funo RETINDEX() quando utilizada em ambientes TOP CONNECT retorna -1
SIXDESCRICAO()
A funo SIXDESCRICAO() retorna a descrio da chave de ndice, de acordo com o registro posicionado no SIX e idioma corrente.
E Sintaxe: SIXDESCRICAO()
E Parmetros:
Nenhum ()
E Retorno: String Descrio do indice posicionado no SIX de acordo com o idioma corrente.
Exemplo:
User Funct i on <nome- da- f uno>( cChave, cOr dem) Local cSi xDesc : =
dbSel ect Ar ea( SI X) dbSet Or der ( 1)
I f dbSeek( cChave+cOr dem) cSi xDescr : = Si xDescr i cao( ) EndI f Ret ur n Programao ADVPL II e Guia de Referncia Pgina 453 TABELA()
A funo TABELA() retorna o contedo de uma tabela cadastrada no Arquivo de Tabelas (SX5) de acordo com a chave especificada. Caso a tabela, ou a chave especificada, no exista ser exibido um HELP() padro do sistema.
E Sintaxe: Tabela(cTab,cChav,lPrint)
E Parmetros:
cTab Idenficao da tabela a pesquisar (deve ser informado como caracter). cChav Chave a pesquisar na tabela informada. lPrint Indica se deve (.T.) ou no (.F.) exibir o help ou a chave NOTAB se a tabela no existir.
E Retorno:
String Contedo da tabela na chave especificada. Retorna nulo caso a tabela no exista ou a chave no seja encontrada.
TAMSX3()
A funo TAMSX3() retorna o tamanho (total e parte decimal) de um campo especificado no Dicionrio de Dados (SX3).
E Sintaxe: TAMSX3(cCampo)
E Parmetros:
cCampo Nome do campo a ser consultado no Dicionrio de Dados (SX3).
E Retorno:
Array Array de duas posies contendo o tamanho total e o nmero de decimais do campo especificado respectivamente.
TM()
A funo TM() retorna a picture de impresso para valores numricos dependendo do espao disponvel.
E Sintaxe: TM(nValor, nEdio, nDec) Pgina 454 Programao ADVPL II e Guia de Referncia
E Parmetros:
nValor Valor a ser avaliado. nEdio Espao disponvel para edio. nDec Nmero de casas decimais.
E Retorno:
String Picture ideal para edio do valor nValor.
Esta rotina leva em considerao duas variveis:
MV_MILHAR Determina se deve haver separao de milhar; MV_CENT Nmero de casas decimais padro da moeda corrente.
Para ajustar o valor passado (nValor) ao espao disponvel (nEdio) a funo verifica se pode haver separao de milhar, neste caso, a rotina eliminar tantos pontos decimais quantos sejam necessrios ao ajuste do tamanho. Caso no seja possvel ajustar o valor ao espao dado, ser colocado na picture o caracter de estouro de campo *.A funo tambm ajusta um valor ao nmero de decimais (nDec), sempre imprimindo a quantidade de decimais passados no parmetro.
X1DEF01()
A funo X1DEF01() retorna o contedo da primeira definio da pergunta posicionada no SX1 (caso seja combo) no idioma corrente.
E Sintaxe: X1DEF01()
E Parmetros:
Nenhum ()
E Retorno:
String Contedo da primeira definio da pergunta no idioma corrente.
Programao ADVPL II e Guia de Referncia Pgina 455 Exemplo:
User Funct i on <nome- da- f uno>( cGr upo, cPer g ) Local cDef 01 Local cDef 02 Local cDef 03 Local cDef 04 Local cDef 05
dbSel ect Ar ea( SX1) dbSet Or der ( 1)
I f dbSeek( cGr upo + cPer g ) / / gr upo da per gunt a + o numer o da per g. cDef 01 : = X1Def 01( ) cDef 02 : = X1Def 02( ) cDef 03 : = X1Def 03( ) cDef 04 : = X1Def 04( ) cDef 05 : = X1Def 05( ) EndI f
Ret ur n
X1PERGUNT()
A funo X1PERGUNT() retorna a descrio da pergunta posicionada no Dicionrio de Dados (SX1) para o idioma corrente.
E Sintaxe: X1PERGUNT()
E Parmetros: Nenhum ()
E Retorno: String Descrio da pergunta do Dicionrio de Dados (SX1) no idioma corrente.
Exemplo:
User Funct i on <nome- da- f uno>( cGr upo, cPer g ) Local cDescr dbSel ect Ar ea( SX1) dbSet Or der ( 1) I f dbSeek( cGr upo + cPer g ) / / gr upo da per gunt a + o numer o da per g. cDescr : = X1Per gunt ( ) EndI f Ret ur n
Pgina 456 Programao ADVPL II e Guia de Referncia
X2NOME()
A funo X2NOME() retorna a descrio de uma tabela posicionada no Dicionrio de Dados (SX2) no idioma corrente.
E Sintaxe: X2NOME()
E Parmetros:
Nenhum ()
E Retorno:
String Descrio da tabela posicionada no Dicionrio de Dados (SX2) no idioma corrente.
Exemplo:
User Funct i on <nome- da- f uno>( ) Local cTabel a dbSel ect Ar ea( SX2) dbSet Or der ( 1) I f dbSeek( SA1 ) cTabel a : = X2Nome( ) EndI f Ret ur n
X3CBOX()
A funo X3CBOX() retorna o contedo de um campo tipo combo posicionado no Dicionrio de Dados (SX3) no idioma corrente.
E Sintaxe: X3CBOX()
E Parmetros:
Nenhum ()
E Retorno:
String Contedo do campo do tipo combo posicionado no Dicionrio de Dados (SX3) no idioma corrente.
Programao ADVPL II e Guia de Referncia Pgina 457 Exemplo:
User Funct i on <nome- da- f uno>( )
Local cTi t ul o Local cDescr i Local cCombo
dbSel ect Ar ea( SX3) dbSet Or der ( 2)
I f dbSeek( cCampo ) cTi t ul o : = X3Ti t ul o( ) cDescr i : = X3Descr i ( ) cCombo : = X3Cbox( ) EndI f
Ret ur n
X3DESCRIC()
A funo X3DESCRIC() retorna a descrio de um campo posicionado no Dicionrio de Dados (SX3) no idioma corrente.
E Sintaxe: X3DESCRIC()
E Parmetros:
Nenhum ()
E Retorno:
String Descrio do campo posicionado no Dicionrio de Dados (SX3) no idioma corrente.
Pgina 458 Programao ADVPL II e Guia de Referncia Exemplo:
User Funct i on <nome- da- f uno>( )
Local cTi t ul o Local cDescr i Local cCombo
dbSel ect Ar ea( SX3) dbSet Or der ( 2)
I f dbSeek( cCampo ) cTi t ul o : = X3Ti t ul o( ) cDescr i : = X3Descr i ( ) cCombo : = X3Cbox( ) EndI f
Ret ur n
X3PICTURE()
A funo X3PICTURE() retorna a mscara de um campo contido no Dicionrio de Dados (SX3).
E Sintaxe: X3PICTURE(cCampo)
E Parmetros:
cCampo Nome do campo contido no Dicionrio de Dados (SX3).
E Retorno:
String Picture do campo informado.
Exemplo:
User Funct i on <nome- da- f uno>( cCampo )
Local cPi ct ur e
cPi ct ur e : = X3Pi ct ur e( cCampo ) Ret ur n cPi ct ur e
Programao ADVPL II e Guia de Referncia Pgina 459 X3TITULO()
A funo X3TITULO() retorna o ttulo de um campo posicionado no Dicionrio de Dados (SX3) no idioma corrente.
E Sintaxe: X3TITULO()
E Parmetros:
Nenhum ()
E Retorno:
String Ttulo do campo posicionado no dicionrio de dados (SX3) no idioma corrente.
Exemplo:
User Funct i on <nome- da- f uno>( )
Local cTi t ul o
dbSel ect Ar ea( SX3) dbSet Or der ( 2)
I f dbSeek( A1_COD ) cTi t ul o : = X3Ti t ul o( ) EndI f
Ret ur n
X3USO() A funo X3USO() verifica se o campo atualmente posicionado no Dicionrio de Dados (SX3) est disponvel para uso.
E Sintaxe: X3USO( cUsado, [Modulo])
E Parmetros: cUsado Contedo do campo X3_USADO a ser avaliado. Modulo Nmero do mdulo. Caso no seja informado ser assumido como padro o nmero do mdulo corrente.
E Retorno:
Lgico Indica se o campo est configurado como usado no Dicionrio de Dados (SX3). Pgina 460 Programao ADVPL II e Guia de Referncia
Exemplo:
User Funct i on <nome- da- f uno>( )
Local l Usado : = . F.
DbSel ect Ar ea( SX3) DbSet Or der ( 2) DbSeek( A1_COD)
I f X3Uso( SX3- >X3_USADO ) l Usado : = . T. EndI f
Ret ur n l Usado
X5DESCRI()
A funo X5DESCRI() retorna a descrio de um item de uma tabela posicionado no Arquivo de Tabelas (SX5) no idioma corrente.
E Sintaxe: X5DESCRI()
E Parmetros:
Nenhum ()
E Retorno:
String Decrio do item do Arquivo de Tabelas (SX5) no idioma corrente.
Exemplo:
User Funct i on <nome- da- f uno>( cFi l i al , cTabel a, cChave ) Local cDescr
dbSel ect Ar ea( SX5) dbSet Or der ( 1)
I f dbSeek( cFi l i al +cTabel a+cChave ) cDescr : = X5Descr i ( ) EndI f
Ret ur n Programao ADVPL II e Guia de Referncia Pgina 461
X6CONTEUD()
A funo X6CONTEUD() retorna o contedo de um parmetro posicionado no Dicionrio de Dados (SX6) para o idioma corrente.
E Sintaxe: X6CONTEUD()
E Parmetros:
Nenhum ()
E Retorno:
Indefinido Contedo do parmetro posicionado no Dicionrio de Dados (SX6) para o idioma corrente.
Utilizar preferncialmente as funes de manipulao de parmetros GETMV() e suas variantes.
Exemplo:
User Funct i on <nome- da- f uno>( cFi l i al , cPar am) Local cDescr Local cCont eud
dbSel ect Ar ea( SX6) dbSet Or der ( 1)
I f dbSeek( cFi l i al +cPar m) cDescr : = X6Descr i c( ) cDescr += X6Desc1( ) cDescr += X6Desc2( ) cCont eud : = X6Cont eud( ) EndI f
Ret ur n
Pgina 462 Programao ADVPL II e Guia de Referncia X6DESCRIC()
A funo X6DESCRI() retorna o contedo da descrio de um parmetro de acordo com o registro posicionado no Dicionrio de Dados (SX6) no idioma corrente.
E Sintaxe: X6DESCRIC()
E Parmetros:
Nenhum ()
E Retorno:
String Descrio do parmetro posicionado no Dicionrio de Dados (SX6) no idioma corrente.
Para avaliar os contedos dos primeiro e segundo complementos da descrio do parmetro utilize as funes:
X6DESC01() retorna o primeiro complemento da descrio. X6DESC02() retorna o segundo complemento da descrio.
As trs funes possuem a mesma sintaxe e forma de utilizao.
Exemplo:
User Funct i on <nome- da- f uno>( cFi l i al , cPar am)
Local cDescr Local cCont eud
dbSel ect Ar ea( SX6) dbSet Or der ( 1)
I f dbSeek( cFi l i al +cPar m) cDescr : = X6Descr i c( ) cDescr += X6Desc1( ) cDescr += X6Desc2( ) cCont eud : = X6Cont eud( ) EndI f Ret ur n
Programao ADVPL II e Guia de Referncia Pgina 463 XADESCRIC()
A funo XADESCRI() retorna o contedo da descrio das pastas de acordo com o registro posicionado no Dicionrio de Dados (SXA) no idioma corrente.
E Sintaxe: XADESCRIC()
E Parmetros:
Nenhum ()
E Retorno:
String Descrio do folder posicionado no Dicionrio de Dados (SXA) no idioma corrente.
Exemplo:
User Funct i on <nome- da- f uno>( cFol der , cNumer o ) Local cDescr dbSel ect Ar ea( SXA) dbSet Or der ( 1) I f dbSeek( cFol der +cNumer o ) / / al i as do f ol der + numer o do f ol der cDescr : = XADescr i c( ) EndI f Ret ur n
XBDESCRI()
A funo XBDESCRI() retorna o contedo da descrio de uma consulta de acordo com o registro posicionado no Dicionrio de Dados (SXB) no idioma corrente.
E Sintaxe: XBDESCRI()
E Parmetros:
Nenhum ()
E Retorno:
String Descrio da consulta posicionada no Dicionrio de Dados (SXB) no idioma corrente.
Pgina 464 Programao ADVPL II e Guia de Referncia Exemplo:
User Funct i on <nome- da- f uno>( cAl i as ) Local cDescr dbSel ect Ar ea( SXB) dbSet Or der ( 1) I f dbSeek( cAl i as + 1 ) cDescr : = XBDescr i ( ) EndI f Ret ur n
XFILIAL()
A funo XFILIAL() retorna a filial utilizada por determinado arquivo.
Esta funo utilizada para permitir que pesquisas e consultas em arquivos trabalhem somente com os dados da filial corrente, dependendo, neste caso do compartilhamento do arquivo (definio que feita atravs do mdulo Configurador Dicionrio de Dados (SX2)).
importante verificar que esta funo no tem por objetivo retornar apenas a filial corrente, mas retorn-la caso o arquivo seja exclusivo. Se o arquivo estiver compartilhado, a funo xFilial retornar dois espaos em branco.
E Sintaxe: XFILIAL(cAlias)
E Parmetros:
cAlias Alias do arquivo desejado. Se no for especificado, o arquivo tratado ser o da rea corrente.
E Retorno:
Caracter String contendo a filial do arquivo corrente.
Programao ADVPL II e Guia de Referncia Pgina 465 Componentes da interface visual
MSDIALOG()
Define o componente MSDIALOG(), o qual utilizado como base para os demais componentes da interface visual, pois um componente MSDIALOG() uma janela da aplicao.
E Sintaxe:
DEFI NE MSDI ALOG oObj et oDLG TI TLE cTi t ul o FROM nLi nI ni , nCol I ni TO nLi Fi m, nCol Fi mOF oObj et oRef UNI DADE
E Parmetros
oObjetoDLG Posio do objeto Say em funo da janela em que ele ser definido. cTitulo Ttulo da janela de dilogo. nLinIni, nColIni Posio inicial em linha / coluna da janela. nLiFim, nColFim Posio final em linha / coluna da janela. oObjetoRef Objeto dialog no qual a janela ser definida. UNIDADE Unidade de medida das dimenses: PIXEL
Exemplo:
DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 000, 000 TO 080, 300 PI XEL ACTI VATE MSDI ALOG oDl g CENTERED
MSGET()
Define o componente visual MSGET, o qual utilizado para captura de informaes digitveis na tela da interface.
E Sintaxe:
@nLi nha, nCol una MSGET VARI AVEL SI ZE nLar gur a, nAl t ur a UNI DADE OF oObj et oRef F3 cF3 VALI D VALI D WHEN WHEN PI CTURE cPi ct ur e
Pgina 466 Programao ADVPL II e Guia de Referncia
E Parmetros
nLinha, nColuna Posio do objeto MsGet em funo da janela em que ele ser definido. VARIAVEL Varivel da aplicao que ser vinculada ao objeto MsGet, que definir suas caractersticas e na qual ser armezanado o que for informado no campo. nLargura,nAltura Dimenses do objeto MsGet para exibio do texto. UNIDADE Unidade de medida das dimenses: PIXEL oObjetoRef Objeto dialog no qual o componente ser definido. cF3 String que define a consulta padro que ser vinculada ao campo. VALID Funo de validao para o campo. WHEN Condio para manipulao do campo, a qual pode ser diretamente .T. ou .F., ou uma varivel ou uma chamada de funo. cPicture String contendo a definio da Picture de digitao do campo.
Exemplo:
@010, 050 MSGET cCGC SI ZE 55, 11 OF oDl g PI XEL PI CTURE " @R 99. 999. 999/ 9999- 99" ; VALI D ! Vazi o( )
SAY()
Define o componente visual SAY, o qual utilizado para exibio de textos em uma tela de interface.
E Sintaxe:
@nLi nha, nCol una SAY cText o SI ZE nLar gur a, nAl t ur a UNI DADE OF oObj et oRef
E Parmetros
nLinha, nColuna Posio do objeto Say em funo da janela em que ele ser definido. cTexto Texto que ser exibido pelo objeto Say. nLargura,nAltura Dimenses do objeto Say para exibio do texto. UNIDADE Unidade de medida das dimenses: PIXEL oObjetoRef Objeto dialog no qual o componente ser definido. Programao ADVPL II e Guia de Referncia Pgina 467
Exemplo:
@010, 010 SAY cText o SI ZE 55, 07 OF oDl g PI XEL
BUTTON()
Define o componente visual Button, o qual permite a incluso de botes de operao na tela da interface, os quais sero visualizados somente com um texto simples para sua identificao.
E Sintaxe: BUTTON()
@nLi nha, nCol una BUTTON cText o SI ZE nLar gur a, nAl t ur a UNI DADE OF oObj et oRef ACTI ON AO
E Parmetros
nLinha,nColuna Posio do objeto Button em funo da janela em que ele ser definido. cTexto String contendo o texto que ser exibido no boto. nLargura,nAltura Dimenses do objeto Button para exibio do texto. UNIDADE Unidade de medida das dimenses: PIXEL. oObjetoRef Objeto dialog no qual o componente ser definido. AO Funo ou lista de expresses que define o comportamento do boto quando ele for utilizado.
Exemplo:
010, 120 BUTTON Conf i r mar SI ZE 080, 047 PI XEL OF oDl g; ACTI ON ( nOpca : = 1, oDl g: End( ) )
Pgina 468 Programao ADVPL II e Guia de Referncia SBUTTON()
Define o componente visual SButton, o qual permite a incluso de botes de operao na tela da interface, os quais sero visualizados dependendo da interface do sistema ERP utilizada somente com um texto simples para sua identificao, ou com uma imagem (BitMap) pr-definido.
E Sintaxe: SBUTTON()
DEFI NE SBUTTON FROM nLi nha, nCol una TYPE N ACTI ON AO STATUS OF oObj et oRet
E Parmetros
nLinha, nColuna Posio do objeto sButton em funo da janela em que ele ser definido. TYPE N Nmero que indica o tipo do boto (imagem) pr-definida que ser utilizada. AO Funo ou lista de expresses que define o comportamento do boto quando ele for utilizado. STATUS Propriedade de uso do boto: ENABLE ou DISABLE oObjetoRet Objeto dialog no qual o componente ser definido.
Exemplo:
DEFI NE SBUTTON FROM 020, 120 TYPE 2 ACTI ON ( nOpca : = 2, oDl g: End( ) ) ; ENABLE OF oDl g
E Visual dos diferentes tipos de botes disponveis
Programao ADVPL II e Guia de Referncia Pgina 469 CHECKBOX()
Define o componente visual CheckBox, o qual permite a utilizao da uma marca para habilitar ou no uma opo escolhida, sendo esta marca acompanhada de um texto explicativo. Difere do RadioMenu pois cada elemento do check nico, mas o Radio permite a utilizao de uma lista junto com um controle de seleo.
E Sintaxe:
@nLi nha, nCol una CHECKBOX oCheckBox VAR VARI AVEL PROMPT cText o WHEN WHEN UNI DADE OF oObj et oRef SI ZE nLar gur a, nAl t ur a MESSAGE cMensagem
E Parmetros:
nLinha,nColuna Posio do objeto ComboBox em funo da janela em que ele ser definido. oCheckBox Objeto do tipo CheckBox que ser criado. VARIAVEL Varivel do tipo lgico com o status do objeto (.T. marcado, .F. desmarcado). cTexto Texto que ser exibido ao lado do get de marcao. WHEN Condio para manipulao do objeto, a qual pode ser diretamente .T. ou .F., ou uma varivel ou uma chamada de funo. UNIDADE Unidade de medida das dimenses: PIXEL. oObjetoRef Objeto dialog no qual o componente ser definido. nLargura,nAltura Dimenses do objeto CheckBox. cMensagem Texto que ser exibido ao clicar no componente.
Exemplo:
@110, 10 CHECKBOX oChk VAR l Chk PROMPT " Mar ca/ Desmar ca" SI ZE 60, 007 PI XEL OF oDl g ; ON CLI CK( aEval ( aVet or , {| x| x[ 1] : =l Chk}) , oLbx: Ref r esh( ) )
Pgina 470 Programao ADVPL II e Guia de Referncia COMBOBOX()
Define o componente visual ComboBox, o qual permite seleo de um item dentro de uma lista de opes de textos simples no formato de um vetor.
E Sintaxe:
@nLi nha, nCol una COMBOBOX VARI AVEL I TEMS AI TENS SI ZE nLar gur a, nAl t ur a UNI DADE OF oObj et oRef
E Parmetros:
nLinha,nColuna Posio do objeto ComboBox em funo da janela em que ele ser definido. VARIAVEL Varivel do tipo caracter que ir receber a descrio do item selecionado no ComboBox. AITENS Vetor simples contendo as strings que sero exibidas como opes do ComboBox. nLargura,nAltura Dimenses do objeto ComboBox. UNIDADE Unidade de medida das dimenses: PIXEL. oObjetoRef Objeto dialog no qual o componente ser definido.
Exemplo:
@40, 10 COMBOBOX oCombo VAR cCombo I TEMS aCombo SI ZE 180, 10 PI XEL OF oFl d: aDi al ogs[ 2]
FOLDER()
Define o componente visual Folder, o qual permite a incluso de diversos Dialogs dentro de uma mesma interface visual. Um Folder pode ser entendido como um array de Dialogs, aonde cada painel recebe seus componentes e tem seus atributos definidos independentemente dos demais.
E Sintaxe:
@nLi nha, nCol una FOLDER oFol der OF oObj et oRef PROMPT &cText o1, , &cText oX UNI DADE SI ZE nLar gur a, nAl t ur a
Programao ADVPL II e Guia de Referncia Pgina 471
E Parmetros
nLinha,nColuna Posio do objeto Folder em funo da janela em que ele ser definido. oFolder Objeto Folder que ser criado. oObjetoRef Objeto dialog no qual o componente ser definido. &cTexto1,,&cTextoX Strings de ttulos de cada uma das abas do Folder, sempre precedidas por &. Exemplo: &Pasta1,&PastaX. UNIDADE Unidade de medida das dimenses: PIXEL nLargura,nAltura Dimenses do objeto Folder.
Exemplo:
@50, 06 FOLDER oFl d OF oDl g PROMPT " &Buscas" , " &Consul t as" , " Check- &Up / Bot es" PI XEL SI ZE 222, 078
RADIO()
Define o componente visual Radio, tambm conhecido como RadioMenu, o qual seleo de uma opo ou de mltiplas opes atravs de uma marca para os itens exibidos de uma lista. Difere do componente CheckBox, pois cada elemento de check sempre nico, e o Rdio pode conter um ou mais elementos.
E Sintaxe:
@nLi nha, nCol una RADI O oRadi o VAR nRadi o 3D SI ZE nLar gur a, nAl t ur a <I TEMS PROMPT> cI t em1, cI t em2, . . . , cI t emX OF oObj et oRef UNI DADE ON CHANGE CHANGE ON CLI CK CLI CK
Pgina 472 Programao ADVPL II e Guia de Referncia
E Parmetros
nLinha,nColuna Posio do objeto Rdio em funo da janela em que ele ser definido. oRadio Objeto do tipo Rdio que ser criado. nRadio Item do objeto Rdio que est selecionado. 3D Item opcional que define se o RadioButton ter aspecto simples ou 3D. nLargura,nAltura Dimenses do objeto Rdio. <ITEMS PROMPT> Utilizar um dos dois identificadores para definir quais os textos que sero vinculados a cada RadioButton. cItem1,cItem2,...,cItemX Texto que ser vinculado a cada RadioButton. oObjetoRef Objeto dialog no qual o componente ser definido. UNIDADE Unidade de medida das dimenses: PIXEL CHANGE Funo ou lista de expresses que ser executada na mudana de um item de um RadioButton para outro. CLICK Funo ou lista de expresses que ser executada na seleo de um item RadioButton.
Exemplo:
aAdd( aRadi o, " Di sco" ) aAdd( aRadi o, " I mpr essor a" ) aAdd( aRadi o, " Scanner " )
@30, 10 RADI O oRadi o VAR nRadi o I TEMS aRadi o[ 1] , aRadi o[ 2] , aRadi o[ 3] SI ZE 65, 8 ; PI XEL OF ; oFl d: aDi al ogs[ 3] ; ON CHANGE ; ( I i f ( nRadi o==1, MsgI nf o( " Opco 1" , cAt encao) , ; I i f ( nRadi o==2, MsgI nf o( " Opo 2" , cAt encao) , MsgI nf o( " Opo 3" , cAt encao) ) ) )
Programao ADVPL II e Guia de Referncia Pgina 473 Interfaces de cadastro
AXCADASTRO()
Sintaxe AxCadastro(cAlias, cTitulo, cVldExc, cVldAlt) Descrio O AxCadastro() uma funcionalidade de cadastro simples, com poucas opes de customizao.
MBROWSE()
Sintaxe MBrowse(nLin1, nCol1, nLin2, nCol2, cAlias) Descrio A Mbrowse() uma funcionalidade de cadastro que permite a utilizao de recursos mais aprimorados na visualizao e manipulao das informaes do sistema.
AXPESQUI()
Funo de pesquisa padro em registros exibidos pelos browses do sistema, a qual posiciona o browse no registro pesquisado. Exibe uma tela que permite a seleo do ndice a ser utilizado na pesquisa e a digitao das informaes que compe a chave de busca.
E Sintaxe: AXPESQUI()
E Parmetros
Nenhum ()
AXVISUAL()
Funo de visualizao padro das informaes de um registro, no formato Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().
E Sintaxe: AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,; aButtons, lMaximized ) Pgina 474 Programao ADVPL II e Guia de Referncia
E Parmetros
cAlias Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser editada nReg Record number (recno) do registro posicionado no alias ativo. nOpc Nmero da linha do aRotina que definir o tipo de edio (Incluso, Alterao, Excluso, Visualizao). aAcho Vetor com nome dos campos que sero exibidos. Os campos de usurio sempre sero exibidos se no existir no parmetro um elemento com a expresso "NOUSER". nColMens Parmetro no utilizado. cMensagem Parmetro no utilizado. cFunc Funo que dever ser utilizada para carregar as variveis que sero utilizadas pela Enchoice. Neste caso o parmetro lVirtual definido internamente pela AxFunction() executada como .T. aButtons Botes adicionais para a EnchoiceBar, no formato: aArray[n][1] -> Imagem do boto aArray[n][2] -> bloco de cdigo contendo a ao do boto aArray[n][3] -> ttulo do boto lMaximized Indica se a janela dever ser ou no maximizada
AXINCLUI()
Funo de incluso padro das informaes de um registro, no formato Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().
cAlias Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser editada. nReg Record number (recno) do registro posicionado no alias ativo. nOpc Nmero da linha do aRotina que definir o tipo de edio (Incluso, Alterao, Excluso, Visualizao). aAcho Vetor com nome dos campos que sero exibidos. Os campos de usurio sempre sero exibidos se no existir no parmetro um elemento com a expresso "NOUSER". cFunc Funo que dever ser utilizada para carregar as variveis que sero utilizadas pela Enchoice. Neste caso, o parmetro lVirtual definido internamente pela AxFunction() executada como .T. aCpos Vetor com nome dos campos que podero ser editados. cTudoOk Funo de validao de confirmao da tela. No deve ser passada como Bloco de Cdigo, mas pode ser passada como uma lista de expresses, Programao ADVPL II e Guia de Referncia Pgina 475 desde que a ltima ao efetue um retorno lgico:
(Func1(), Func2(), ...,FuncX(), .T. )
lF3 Indica se a enchoice est sendo criada em uma consulta F3 para utilizar variveis de memria. cTransact Funo que ser executada dentro da transao da AxFunction(). aButtons Botes adicionais para a EnchoiceBar, no formato: aArray[n][1] -> Imagem do boto aArray[n][2] -> bloco de cdigo contendo a ao do boto aArray[n][3] -> ttulo do boto aParam Funes para execuo em pontos pr-definidos da AxFunction(), conforme abaixo: aParam[1] := Bloco de cdigo que ser processado antes da exibio da interface. aParam[2] := Bloco de cdigo para processamento na validao da confirmao. aParam[3] := Bloco de cdigo que ser executado dentro da transao da AxFunction(). aParam[4] := Bloco de cdigo que ser executado fora da transao da AxFunction(). aAuto Array no formato utilizado pela funcionalidade MsExecAuto(). Caso seja informado este array, no ser exibida a tela de interface, e ser executada a funo EnchAuto(). aAuto[n][1] := Nome do campo aAuto[n][2] := Contedo do campo aAuto[n][3] := Validao que ser utilizada em substituio as validaes do SX3 lVirtual Indica se a Enchoice() chamada pela AxFunction() utilizar variveis de memria ou os campos da tabela na edio. lMaximized Indica se a janela dever ser ou no maximizada.
AXALTERA()
Funo de alterao padro das informaes de um registro, no formato Enchoice, conforme demonstrado no tpico sobre a interface AxCadastro().
E Parmetros cAlias Tabela cadastrada no Dicionrio de Tabelas (SX2) que ser editada. nReg Record number (recno) do registro posicionado no alias ativo. nOpc Nmero da linha do aRotina que definir o tipo de edio (Incluso, Alterao, Excluso, Visualizao). cTransact Funo que ser executada dentro da transao da AxFunction(). aCpos Vetor com nome dos campos que podero ser editados. aButtons Botes adicionais para a EnchoiceBar, no formato: aArray[n][1] -> Imagem do boto aArray[n][2] -> bloco de cdigo contendo a ao do boto aArray[n][3] -> ttulo do boto aParam Funes para execuo em pontos pr-definidos da AxFunction(), conforme abaixo: aParam[1] := Bloco de cdigo que ser processado antes da exibio da interface. aParam[2] := Bloco de cdigo para processamento na validao da confirmao. aParam[3] := Bloco de cdigo que ser executado dentro da transao da AxFunction(). aParam[4] := Bloco de cdigo que ser executado fora da transao da AxFunction(). aAuto Array no formato utilizado pela funcionalidade MsExecAuto(). Caso seja informado este array, no ser exibida a tela de interface, e ser executada a funo EnchAuto(). aAuto[n][1] := Nome do campo aAuto[n][2] := Contedo do campo aAuto[n][3] := Validao que ser utilizada em substituio as validaes do SX3 lMaximized Indica se a janela dever ser ou no maximizada.
Programao ADVPL II e Guia de Referncia Pgina 477 Interfaces visuais para aplicaes
ALERT()
E Sintaxe: AVISO(cTexto)
E Parmetros
cTexto Texto a ser exibido
AVISO()
E Sintaxe: AVISO(cTitulo, cTexto, aBotoes, nTamanho)
E Retorno: numrico indicando o boto selecionado.
E Parmetros
cTitulo Ttulo da janela. cTexto Texto do aviso. aBotoes Array simples (vetor) com os botes de opo. nTamanho Tamanho (1,2 ou 3).
Pgina 478 Programao ADVPL II e Guia de Referncia FORMBACTH()
E Sintaxe: FORMBATCH(cTitulo, aTexto, aBotoes, bValid, nAltura, nLargura )
E Parmetros
cTitulo Ttulo da janela. aTexto Array simples (vetor) contendo cada uma das linhas de texto que sero exibidas no corpo da tela. aBotoes Array com os botes do tipo SBUTTON(), com a seguinte estrutura:
{nTipo,lEnable,{|| Ao() }}
bValid (opcional) Bloco de validao do janela. nAltura (opcional) Altura em pixels da janela. nLargura (opcional) Largura em pixels da janela.
Programao ADVPL II e Guia de Referncia Pgina 479
MSGFUNCTIONS()
E Sintaxe: MSGALERT(cTexto, cTitulo) E Sintaxe: MSGINFO(cTexto, cTitulo) E Sintaxe: MSGSTOP(cTexto, cTitulo) E Sintaxe: MSGYESNO(cTexto, cTitulo) E Parmetros
cTexto Texto a ser exibido como mensagem. cTitulo Ttulo da janela de mensagem. MSGALERT
MSGINFO
MSGSTOP
MSGYESNO
Pgina 480 Programao ADVPL II e Guia de Referncia Recursos das interfaces visuais
GDFIELDGET()
A funo GDFIELDGET() retorna o contedo de um campo especificado em uma grid formada por um objeto do tipo MsNewGetDados() de acordo com a linha da grid desejada.
E Sintaxe: GDFIELDGET(cCampo, nLinha)
E Parmetros:
cCampo Nome do campo para retorno do contedo. nLinha Linha da grid que dever ser avaliada.
E Retorno:
Indefinido Contedo do campo especificado de acordo com a linha da grid informada.
GDFIELDPOS()
A funo GDFIELDPOS() retorna a posio de um campo especificado em uma gria formada por um objeto do tipo MsNewGetDados().
E Sintaxe: GDFIELDPOS(cCampo)
E Parmetros:
cCampo Nome do campo a ser avaliado na grid.
E Retorno:
Numrico Posio que o campo ocupada na grid. Caso o mesmo no exista ser retornado 0.
GDFIELDPUT()
A funo GDFIELDPUT() atualiza o contedo de uma grid formada por um objeto do tipo MsNewGetDados() de acordo com o campo e linha da grid especificados.
E Sintaxe: GDFIELDPUT(cCampo, xConteudo, nLinha) Programao ADVPL II e Guia de Referncia Pgina 481
E Parmetros:
cCampo Nome do campo a ser atualizado. xConteudo Contedo que ser atribudo a clula da grid. nLinha Linha da grid que ser atualizada.
E Retorno:
Nenhum ()
GETMARK()
A funo GETMARK() utilizada em conjunto com a funo MarkBrow(), para retornar o conjunto de caracteres que sero utilizados para identificar os registros marcados pelo browse.
E Sintaxe: GETMARK( [lUpper] )
E Parmetros:
lUpper Se verdadeiro (.T.) retorna somente caracteres em maisculos.
E Retorno:
String Conjunto de caracteres que definem a marca que dever ser utilizada pela MarkBrowse durante o processamento corrente.
O retorno da funo GETMARK() depende do contedo atual do parmetro MV_MARCA.
altamente recomendvel limpar o contedo do campo marcado pela MarkBrowse() ao trmino do processamento, para se evitar problemas com a reutilizao da marca aps a exausto das possibilidades de combinao de dois caracteres, o qual o tamanho padro do campos utilizados para marcao de registros pela MarkBrowse(), que neste caso somam 1891 possibilidades de 00 a zz.
Pgina 482 Programao ADVPL II e Guia de Referncia Exemplo:
Funct i on <nome- da- f uno>( )
Local aCampos : = {{' CB_OK' , , ' ' }, ; {' CB_USERLI B' , , ' Usur i o' }, ; {' CB_TABHORA' , , ' Hor a' }, ; {' CB_DTTAB' , , ' Dat a' }}
Pr i vat e cMar ca : = Get Mar k( ) Pr i vat e cCadast r o : = ' Cadast r o de Cont r at o' Pr i vat e aRot i na : = { { ' Pesqui sar ' , ' AxPesqui ' , 0, 1 }}
Mar kBr ow( ' SCB' , ' CB_OK' , ' ! CB_USERLI B' , aCampos, , cMar ca, ' Mar kAl l ( ) ' , , , , ' Mar k( ) ' )
Ret ur n
MARKBREFRESH()
A funo MARKBREFRESH() atualiza a exibio da marca no MarkBrowse(), sendo utilizada quando algum processamento paralelo atualiza o contedo do campo definido como controle de marca para os registros em exibio pelo browse.
Este tipo de processamento comum, e normalmente est associonada a clique de inverter seleo, ou a opes de marcar e desmarcar todas.
A MarkBrowse() atualiza automaticamente a exibio da marca de registros quando utilizado o browse.
E Sintaxe: MARKBREFRESH()
E Parmetros:
Nenhum ()
E Retorno:
Nenhum ()
Programao ADVPL II e Guia de Referncia Pgina 483 READVAR()
A funo READVAR() retorna o nome da varivel ou campo associoado ao objeto do tipo GET() atualmente selecionado ou em edio.
E Sintaxe: READVAR()
E Parmetros:
Nenhum ()
E Retorno:
String Nome da varivel ou campo associado ao objeto do tipo GET.
Todos os direitos reservados. 0800 709 8100 totvs.com