86
ADVPL

ADVPL AP7

Embed Size (px)

Citation preview

Page 1: ADVPL AP7

ADVPL

Page 2: ADVPL AP7

MICROSIGA Software S/AAv. Braz Leme, 1399/1631

02511-000 - São Paulo - BrasilTelefone (011) 3981-7000

http://www.microsiga.com.br

Copyright © MICROSIGA Software S/ATodos os direitos reservados e protegidos pela Lei de Direitos Autorais nº. 9.610 de 19/02/1.998.Nenhuma parte deste documento pode ser reproduzida, publicada ou transmitida por impressão, fotocópia, microfilme, fita deáudio, eletronicamente, mecanicamente, ou qualquer outro meio, ou armazenado em um sistema de informação recuperado, sema permissão prévia, por escrito do proprietário destes direitos.Em função do contínuo desenvolvimento dos produtos da MICROSIGA Software S/A, este documento está sujeito a modificaçõesque serão atualizadas nas subseqüentes revisões de novas versões. Portanto, toda informação contida neste documento é denatureza geral e nunca poderá ser utilizada em qualquer obrigação contratual.Elaboração:

MICROSIGA Educação Corporativa

Apoio e Revisão:

Auditoria de Cursos MICROSIGA

Page 3: ADVPL AP7

SUMÁRIO

ADVPL ............................................................................................................................. 1INTRODUÇÃO ......................................................................................................................... 5VISÃO GERAL DO CURSO ......................................................................................................... 5

Objetivos do Curso .................................................................................................................... 5Metodologia do Curso ................................................................................................................ 5Linguagem de Programação ADVPL ......................................................................................... 6Programação Com Interface Própria com o Usuário ................................................................. 6Programação Sem Interface Própria com o Usuário .................................................................. 7Programação por Processos ....................................................................................................... 7Programação de RPC ................................................................................................................. 7Programação Web ..................................................................................................................... 8Programação TelNet .................................................................................................................. 8

CONFIGURANDO A FERRAMENTA IDE .......................................................................................... 9O que você irá aprender neste capítulo .................................................................................... 9Rotinas Abordadas ..................................................................................................................... 9Preferências ............................................................................................................................... 9Configurações .......................................................................................................................... 10O que você aprendeu neste capítulo ....................................................................................... 10Próximo Passo .......................................................................................................................... 10

FUNÇÕES APLICADAS EM GATILHOS ............................................................................................11O que você irá aprender neste capítulo ...................................................................................11Rotinas Abordadas ....................................................................................................................11Funções em Gatilhos ................................................................................................................11O que você aprendeu neste capítulo ....................................................................................... 18Próximo Passo .......................................................................................................................... 18

FUNÇÕES PARA CADASTROS ................................................................................................... 19O que você irá aprender neste capítulo .................................................................................. 19Rotinas Abordadas ................................................................................................................... 19AxCadastro() � Cadastro Padrão .............................................................................................. 19MBrowse() ................................................................................................................................ 35Modelo2() ................................................................................................................................. 43Modelo3() ................................................................................................................................. 44O que você aprendeu neste capítulo ....................................................................................... 45Próximo Passo .......................................................................................................................... 45

CONSULTAS PADRÃO ............................................................................................................ 46O que você irá aprender neste capítulo .................................................................................. 46Rotinas Abordadas ................................................................................................................... 46Consultas Padrão ..................................................................................................................... 46

Tipo 1 .................................................................................................................................. 46Tipo 2 .................................................................................................................................. 46

Page 4: ADVPL AP7

4 - SIGAADVPL Advanced Protheus

Anotações:

Tipo 3 .................................................................................................................................. 47Tipo 4 .................................................................................................................................. 47Tipo 5 .................................................................................................................................. 47Tipo 6 .................................................................................................................................. 48

O que você aprendeu neste capítulo ....................................................................................... 54Próximo Passo .......................................................................................................................... 54

RELATÓRIOS ....................................................................................................................... 55O que você irá aprender neste capítulo .................................................................................. 55Rotinas abordadas.................................................................................................................... 55SetPrint() ................................................................................................................................... 55SetDefault() .............................................................................................................................. 56Pergunte() ................................................................................................................................. 56SetRegua() ................................................................................................................................ 57RptStatus() ................................................................................................................................ 57IncRegua() ................................................................................................................................ 57Relatórios ................................................................................................................................. 57Perguntas e Respostas .............................................................................................................. 63O que você aprendeu neste capítulo ....................................................................................... 69Próximo Passo .......................................................................................................................... 69

EXERCÍCIOS ........................................................................................................................ 70O que você irá aprender neste capítulo .................................................................................. 70Rotinas abordadas.................................................................................................................... 70O que você aprendeu neste capítulo ....................................................................................... 73Próximo Passo .......................................................................................................................... 73

PONTOS DE ENTRADAS .......................................................................................................... 74O que você irá aprender neste capítulo .................................................................................. 74Rotinas Abordadas ................................................................................................................... 74Pontos de Entrada .................................................................................................................... 74O que você aprendeu neste capítulo ....................................................................................... 78Próximo Passo .......................................................................................................................... 78

PROCESSAMENTO ................................................................................................................. 79O que você irá aprender neste capítulo .................................................................................. 79Rotinas Abordadas ................................................................................................................... 79Processa() ................................................................................................................................. 79O que você aprendeu neste capítulo ....................................................................................... 80Próximo Passo .......................................................................................................................... 80

DESENHOS DE INTERFACES ....................................................................................................... 81O que você irá aprender neste capítulo .................................................................................. 81Rotinas Abordadas ................................................................................................................... 81Desenhos de Interfaces ........................................................................................................... 81O que você aprendeu neste capítulo ....................................................................................... 85Próximo Passo .......................................................................................................................... 85

Page 5: ADVPL AP7

SIGAADVPL Advanced Protheus - 5

Anotações:

INTRODUÇÃO

VISÃO GERAL DO CURSO

Este curso foi elaborado para capacitar os Analistas e Programadores do Advanced Protheus autilizarem os recursos da Linguagem de Programação ADVPL, para que seja possível a aplicaçãoàs rotinas de sua empresa, proporcionando a automação no controle das necessidades referentes àcustomizações futuras dentro do Advanced Protheus.

Objetivos do Curso

O objetivo deste curso é ensinar como utilizar as principais Funções de programação AdvancedProtheus, utilizando exemplos práticos das Funções apresentadas.Desenvolver programas utilizados em Gatilhos, Cadastros, Consultas em Arquivos, Relatórios, rotinasde Processamento, Pontos de Entradas e criação de Telas de Diálogo, através do uso de Utilitáriosda própria Ferramenta.

Metodologia do Curso

O curso da Linguagem de Programação ADVPL é ministrado com um Kit de Treinamento compostopor:� Apostila:

Aborda as rotinas do Advanced Protheus, conduzindo o aluno na sua utilização, através deuma série de exercícios para prática e revisão da matéria. Os exercícios devem ser executados,junto ao Sistema, exatamente da forma como estão apresentados, para que o grau de aprendiza-do proposto seja obtido;

A cada capítulo, o aluno é posicionado sobre o conteúdo fornecido e os assuntos complemen-tares que serão expostos;

� Manual Eletrônico:Para verificar o Manual Eletrônico da Linguagem de Programação ADVPL, posicione no Menu

Principal da Ferramenta e pressione a tecla <F1>.� Materiais de Apoio:

Pasta e Caneta.O aluno deve acompanhar este curso nas instalações da MICROSIGA ou em uma de suas Franquias,com o direcionamento de um instrutor que conduzirá as sessões de treinamento de modo que osobjetivos propostos sejam atingidos.

Page 6: ADVPL AP7

6 - SIGAADVPL Advanced Protheus

Anotações:

Linguagem de Programação ADVPL

A Linguagem de Programação ADVPL, tem o objetivo de permitir ao usuário do Advanced Protheus,construir seus próprios programas, agregá-los aos Menus dos módulos e executá-los de uma formatransparente ao operador.De forma análoga, as rotinas escritas pelo usuário também podem realizar parte, por meio da FunçãoExecBlock() ou U_<Função>, onde o Advanced Protheus aceita uma expressão que é executadaem tempo real.O usuário ainda tem a possibilidade de utilizar os recursos de programação adotados pelo AdvancedProtheus através do uso de um grande número de suas Funções desenvolvidas pela própriaMICROSIGA e de Funções da Linguagem de Programação de origem, o que agiliza a criação denovas opções sem que o próprio usuário perceba que esteja utilizando algo que não é original.A Linguagem ADVPL teve seu início em 1994, sendo na verdade uma evolução na utilização delinguagens no padrão xBase pela Microsiga Software S.A. (Clipper, Visual Objects e depois FiveWin).Com a criação da tecnologia Protheus, era necessário criar uma linguagem que suportasse o padrãoxBase para a manutenção de todo o código existente do sistema de ERP SIGA Advanced.Foi então criada a linguagem chamada Advanced Protheus Language.O ADVPL é uma extensão do padrão xBase de comandos e funções, operadores, estruturas decontrole de fluxo e palavras reservadas, contando também com funções e comandos disponibilizadospela MICROSIGA que a torna uma linguagem completa para a criação de aplicações ERP prontaspara a Internet.Também é uma linguagem orientada a objetos e eventos, permitindo ao programador desenvolveraplicações visuais e criar suas próprias classes de objetos.Quando compilados, todos os arquivos de código tornam-se unidades de inteligência básicas,chamados APO�s (Advanced Protheus Objects).Tais APO´s são mantidos em um repositório e carregados dinamicamente pelo Advanced ProtheusServer para a execução.Como não existe a linkedição, ou união física do código compilado a um determinado módulo ouaplicação, funções criadas em ADVPL podem ser executadas em qualquer ponto do ambienteAdvanced Protheus.O compilador e o interpretador da linguagem ADVPL é o próprio servidor Advanced Protheus(Advanced Protheus Server), e existe um ambiente visual para desenvolvimento integrado (AdvancedProtheus IDE) onde o código pode ser criado, compilado e depurado.Os programas em ADVPL podem conter comandos ou funções de interface com o usuário.De acordo com tal característica, tais programas são subdivididos nas seguintes categorias:

Programação Com Interface Própria com o Usuário

Nesta categoria entram os programas desenvolvidos para serem executados através do terminalremoto do Protheus, o Advanced Protheus7 Remote.

Page 7: ADVPL AP7

SIGAADVPL Advanced Protheus - 7

Anotações:

O Advanced Protheus Remote é a aplicação encarregada da interface e da interação com o usuário,sendo que todo o processamento do código em ADVPL, o acesso ao banco de dados e ogerenciamento de conexões é efetuado no Advanced Protheus7 Server.O Advanced Protheus Remote é o principal meio de acesso a execução de rotinas escritas emADVPL no Advanced Protheus Server, e por isso permite executar qualquer tipo de código, tenhaele interface com o usuário ou não.Porém nesta categoria são considerados apenas os programas que realizem algum tipo de interfaceremota utilizando o protocolo de comunicação do Advanced Protheus.Pode-se criar rotinas para a customização do sistema ERP Advanced Protheus, desde processosadicionais até mesmo relatórios.A grande vantagem é aproveitar todo o ambiente montado pelos módulos do ERP Advanced Protheus.Porém, com o ADVPL é possível até mesmo criar toda uma aplicação, ou módulo, do começo.Todo o código do sistema ERP Advanced Protheus é escrito em ADVPL.

Programação Sem Interface Própria com o Usuário

As rotinas criadas sem interface são consideradas nesta categoria porque geralmente têm umautilização mais específica do que um processo adicional ou um relatório novo.Tais rotinas não têm interface com o usuário através do Advanced Protheus Remote, e qualquertentativa nesse sentido (como a criação de uma janela padrão) ocasionará uma exceção em tempode execução.Estas rotinas são apenas Processos, ou Jobs, executados no Advanced Protheus Server.Algumas vezes, a interface destas rotinas fica a cargo de aplicações externas, desenvolvidas emoutras linguagens, que são responsáveis por iniciar os processos no servidor Advanced Protheus,através dos meios disponíveis de integração e conectividade no Advanced Protheus.De acordo com a utilização e com o meio de conectividade utilizado, estas rotinas sãosubcategorizadas assim:

Programação por Processos

Rotinas escritas em ADVPL podem ser iniciadas como processos individuais (sem interface) noAdvanced Protheus Server, através de duas maneiras: Iniciadas por outra rotina ADVPL através dachamada de funções como StartJob ou CallProc ou iniciadas automaticamente na inicialização doAdvanced Protheus Server (quando propriamente configurado).

Programação de RPC

Através de uma Biblioteca de Funções disponível no Advanced Protheus (uma Advanced Protheusde comunicação), pode-se executar rotinas escritas em ADVPL diretamente no Advanced ProtheusServer, através de aplicações externas escritas em outras linguagens.Isto é o que se chama de RPC (de Remote Procedure Call, ou Chamada de Procedimentos Remota).

Page 8: ADVPL AP7

8 - SIGAADVPL Advanced Protheus

Anotações:

O servidor Advanced Protheus também pode executar rotinas em ADVPL em outros servidoresAdvanced Protheus através de conexão TCP/IP direta, utilizando o conceito de RPC.Do mesmo modo, Aplicações Externas, podem requisitar a execução de rotinas escritas em ADVPLatravés de conexão TCP/IP direta.

Programação Web

O Advanced Protheus Server pode também ser executado como um servidor Web, respondendo arequisições HTTP.No momento destas Requisições, pode executar rotinas escritas em ADVPL como processosindividuais, enviando o resultado das funções como retorno das Requisições para o cliente HTTP(como por exemplo um Browser de Internet).Qualquer rotina escrita em ADVPL que não contenha Comandos de Interface pode ser executadaatravés de Requisições HTTP.O Advanced Protheus permite a compilação de Arquivos HTML contendo Código ADVPL embutido.São os chamados Arquivos ADVPL ASP, para a criação de Páginas Dinâmicas.

Programação TelNet

TelNet é parte da gama de Protocolos TCP/IP que permite a conexão a um computador remotoatravés de uma aplicação cliente deste protocolo.O Advanced Protheus Server pode emular um Terminal TelNet, através da execução de rotinasescritas em ADVPL.Ou seja, pode-se escrever Rotinas ADVPL cuja interface final será um Terminal TelNet ou um Coletorde Dados móvel.

Page 9: ADVPL AP7

SIGAADVPL Advanced Protheus - 9

Anotações:

CONFIGURANDO A FERRAMENTA IDE

O que você irá aprender neste capítulo

Neste capítulo, aprenderemos como deverão ser feitas as configurações básicas da FerramentaIDE, para um melhor aproveitamento de seus recursos.

Rotinas Abordadas

� Preferências;� Configurações.

Preferências

Na opção de Preferências é onde são definidas as informações que influenciam no comportamentodo Advanced Protheus IDE, ou seja, o Perfil de Teclas utilizado, Cores dos Fontes, Tabulação, etc...

Exercício 01 � Como configurar Preferências da Ferramenta IDE, para inicializar osexercícios:1. Carregue o �Advanced Protheus Server�, através do �Atalho no Desktop�;

2. Acesse a �Ferramenta IDE�, da mesma maneira;

3. Selecione as seguintes opções �Arquivo� + �Preferências�;

4. Na pasta �Geral�, em �Padrão de teclas utilizado�, selecione a opção �Delphi�;

5. Em �Configurações do Editor�, mantenha a �Configuração Padrão�;

6. Marque a opção �Ignorar todos os fontes não encontrados�, que está localizada naparte inferior;

7. Na pasta �Código�, verifique as cores que serão utilizadas durante a �Digitação doFonte�;

8. Na pasta �Controle de Versão�, informe o �Caminho do Software� utilizado pararealizar o �Controle de Versões dos Fontes�, caso seja utilizado algum;

9. Na pasta �Compilação�, deverá ser informado o �Número de Processadores�,existentes no �Servidor de Aplicação�, para que haja �Ganhos de Performance� durantea �Compilação dos Programas�;

10. Após verificar todas as �Preferências�, confirme.

Page 10: ADVPL AP7

10 - SIGAADVPL Advanced Protheus

Anotações:

Configurações

Após a definição de todas as Preferências que serão utilizadas, deveremos então Configurar oAmbiente de Trabalho que será utilizado pelo Compilador, ou seja, qual o caminho que deverá serusado pela Ferramenta IDE, para atualizar um determinado RPO, durante a Compilação dos Fontes.

Exercício 02 � Como Configurar a Ferramenta IDE:

1. Selecione as seguintes opções �Arquivo� + �Configurações�;

2. Clique na opção �Adicionar�;

3. No �Campo � Descrição:�, informe o �Nome do Ambiente� a ser utilizado, no caso,�Environment�, ou um nome relacionado ao curso, como �Curso ADVPL�;

4. Na pasta �Compilação�, informe no �Campo � Ambiente�, o �Nome do Ambiente� aser utilizado pelo �Compilador�;

Obs.:Deverá ser um �Ambiente Válido� no �Arquivo de Inicialização� do �Advanced ProtheusServer (AP7SRV.INI)�, no caso, �Environment�.5. No �Campo � Conexão:�, informe o �Protocolo Válido�, para a �Conexão� com o

�Advanced Protheus Server�, que deverá ser �TCP�;

6. E por fim, no �Campo � Diretório de Includes�, informe o caminho das �Pastas�, ondese encontram os �Arquivos de Cabeçalhos de Programas (*.CH)�, esse caminho deveráser �C:\Ap7AdvPl\Include�, depois confirme a �Configuração de Ambientes�.

O que você aprendeu neste capítulo

Neste capítulo aprendemos a definir as Preferências e Configurações necessárias para iniciarmos autilização do ambiente de desenvolvimento do Protheus.

Próximo Passo

No próximo capítulo, iremos aprender como utilizar Gatilhos aplicando Funções nas regras.

Page 11: ADVPL AP7

SIGAADVPL Advanced Protheus - 11

Anotações:

FUNÇÕES APLICADAS EM GATILHOS

O que você irá aprender neste capítulo

Neste capítulo, aprenderemos como criar Funções em ADVPL e utilizá-las através do uso de Gatilhos,ou seja, como disparar um programa customizado através do preeenchimento de um determinadoCampo em uma tela de digitação de dados, como por exemplo, um cadastro.

Rotinas Abordadas

� Funções em Gatilhos.

Funções em Gatilhos

A utilização de Gatilhos em cadastros é muito grande, pois através deles poderemos automatizar opreenchimento de muitos Campos durante a digitação de apenas um único Campo de Origem,considerado o Campo de Disparo.Um Gatilho deve ser utilizado sempre que se fizer necessário a atualização automática de Camposdependentes na tela de digitação (Cadastros ou Movimentações), através do preenchimento de umCampo de Origem.

Exercício 03 � Como criar Projetos de Trabalho:

1. Acesse as opções �Projetos� + �Novo�;

2. Será apresentado uma tela (Projeto), onde deveremos definir o nome do mesmo noquadro �Novo Grupo de Projetos�, que deverá ser um nome sugestivo à�Customização� que será iniciada, neste caso, �Curso ADVPL�;

3. Selecione as opções �Projetos� + �Salvar�, salve o �Novo Projeto�, com o nome de�Curso ADVPL� e confirme;

4. Logo abaixo, existe outro quadro, onde poderemos detalhar ainda mais o nosso projeto,daremos o nome de �ADVPL�, clicando com o botão direito do mouse e selecionandoa opção �Renomear�, depois confirme.

Dicas:� Nunca se esqueça que para se �Compilar um Programa�, será necessário a utilizaçãode um �Projeto de Trabalho�, sempre;

Page 12: ADVPL AP7

12 - SIGAADVPL Advanced Protheus

Anotações:

� Para facilitar a �Visualização�, durante a elaboração de programas, não se esqueça defixar a �Caixa de Projetos� ao rodapé do Advanced Protheus IDE;� Para isto basta clicar sobre o �Cabeçalho da Caixa� e arrastá-lo até o rodapé, juntamentecom as pastas de �Mensagens� e �Comandos�.

Exercício 04 � Como criar Funções, para utilização em Gatilhos:

1. Selecione as seguintes opções �Arquivo� + �Novo Arquivo�;

2. Na �Página de Edição�, informe o �Programa� a seguir:

#Include �Rwmake.ch�

User Function Exerc01()

c_Nome:=�Microsiga�

MsgAlert(�Exemplo de Função em Gatilhos.�)

Return(c_Nome)

3. Selecione as seguintes opções �Arquivo� + �Salvar�;

4. Selecione a pasta �C:\AP7AdvPl\Rdmake\�, salve o programa como �Exerc01� econfirme;

5. Adicione o �Programa� ao projeto em uso, clicando com o botão direito do mousesobre a pasta �Fontes� do mesmo, selecionando a opção �Adicionar arquivo�,posicionando o cursor sobre o programa e confirmando;

6. Compile-o, clicando com o botão direito do mouse sobre o programa em questão eselecionando a opção �Compilar arquivo...�;

7. Será solicitada o �Usuário�, no caso, �Administrador� e a �Senha�, em branco.

Dicas:� Existe na �MICROSIGA�, um padrão para a definição da nomenclatura dos �Tipos deVariáveis�, como por exemplo:

c_Var Caracter n_Var Numérica d_Var Datal_Var Lógicam_Var Memoa_Var Array

� Toda �Função�, utilizada em um �Gatilho�, sempre deverá ter como �Parâmetro deRetorno�, uma �Variável� associada ao programa, para que o �Gatilho� tenha efeito.

Page 13: ADVPL AP7

SIGAADVPL Advanced Protheus - 13

Anotações:

Exercício 05 � Como criar Gatilhos, para Implementação de Funções:

1. Acesse o �Módulo Configurador�;

2. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Gatilhos�;

3. Clique na opção �Incluir� e informe os dados a seguir:

Campo: A1_ENDSequência: 001Contra Domínio: A1_ENDCOBTipo 1=PrimárioRegra: EXECBLOCK("EXERC01") ou U_EXERC01()

4. Confira os dados e confirme o cadastro de �Gatilhos�.

Dicas:� A �Função � Execblock()�, é uma �Função Master do Advpl�, que executa um �ProgramaCustomizado� que estiver �Compilado no RPO� em uso pelo ambiente e em seguida retornaà execução normal do sistema;� Sempre poderemos utilizar a chamada a uma �Função� das duas maneiras descritasacima, ou seja, através da �Função � Execblock()� ou diretamente pelo nome da �UserFunction�, que está compilada no RPO em uso.

Exercício 06 � Como Testar o Gatilho:

1. Acesse o �Módulo Financeiro�;

2. Selecione as seguintes opções �Atualização� + �Cadastro� + �Clientes�;

3. Clique na opção �Incluir�;

4. No �Campo � Endereço�, informe um �Endereço� à sua escolha e pressione a tecla<Enter>;

Obs.:Note que a �Mensagem de Aviso� será disparada, isso demonstra que o �Gatilho� foidisparado.5. Em seguida, clique na pasta �Adm/Fin.� e verifique o �Resultado do Gatilho� no

�Campo � End. Cobrança�, que deverá estar preenchido com �Microsiga�.

Page 14: ADVPL AP7

14 - SIGAADVPL Advanced Protheus

Anotações:

Exercício 07 � Como criar Funções, para retornar a Variável em Memória do Campo:

1. Altere o �Programa � Exerc01� com as seguintes informações:

#Include �Rwmake.ch�

User Function Exerc01()

c_Nome:=M->A1_END

MsgAlert(�Exemplo de Função em Gatilhos.�)

Return(c_Nome)

2. Selecione as seguintes opções �Arquivo� + �Salvar� e compile-o novamente;

3. Realize o �Teste�, acessando novamente o �Módulo Financeiro� e executando o�Cadastro de Cliente�, como no exemplo anterior.

Dica:Lembre-se que quando a informação está sendo digitada, a mesma encontra-se no �Buffer�,então devemos tratar como �M-><campo>�, que identifica que a informação de retornoestá na memória e quando a informação já está gravada, deveremos então tratar como�<Alias>-><Campo>�.

Exercício 08 � Como utilizar Funções com Retorno a partir de uma determinada Condiçãode Preenchimento do Campo:� Crie um programa com o nome de �Exerc02�, que deverá atualizar o �Campo �

Bairro� do �Cadastro de Clientes�, para �Centro�, quando o �Campo � CEP�, for iguala �00000-000�.

1. Digite o programa a seguir:

#Include "Rwmake.ch"

User Function Exerc02()

If M->A1_CEP=="00000000"

c_Bairro:="Centro"

Else

c_Bairro:=M->A1_BAIRRO

Endif

Return(c_Bairro)

2. Salve o �Programa�, adicione-o ao �Projeto� e �Compile-o�.

Page 15: ADVPL AP7

SIGAADVPL Advanced Protheus - 15

Anotações:

Exercício 09 � Como criar o Gatilho:

1. Agora, crie o �Gatilho�, para a �Função� acima, da seguinte maneira:

Campo: A1_CEPSequência: 001Contra Domínio: A1_BAIRROTipo 1=PrimárioRegra: U_EXERC02()

Exercício 10 � Como Testar o Gatilho:

1. Acesse o �Módulo Financeiro�;

2. Selecione as seguintes opções �Atualizações� + �Cadastros� + �Clientes�;

3. Clique na opção �Incluir� e informe �00000000� no �Campo � CEP� e observe que oretorno no �Campo � Bairro�, foi disparado.

Exercício 11 � Como criar Funções, utilizando mais de uma Condição de Disparo:

� Crie um programa com o nome de �Exerc03�, que deverá atualizar o �Campo � Valordo Título� do cadastro de Contas a Receber, com �10%� a mais sobre o �ValorDigitado�, quando o �Campo � Tipo�, for igual a �DP�, o �Campo � Cliente�, for iguala �000001� e o �Campo � Loja�, for igual a �01�.

1. Digite o programa a seguir:

#Include "Rwmake.ch"

User Function Exerc03()

If M->E1_TIPO="DP".and.M->E1_CLIENTE="000001".and.M->E1_LOJA="01"

n_Valor:=M->E1_VALOR*1.1

Else

n_Valor:=M->E1_VALOR

Endif

Return(n_Valor)

2. Salve o �Programa�, adicione-o ao �Projeto� e �Compile-o�;

Page 16: ADVPL AP7

16 - SIGAADVPL Advanced Protheus

Anotações:

Exercício 12 � Como Criar o Gatilho:

1. Crie o seguinte �Gatilho�, para a �Função� acima:

Campo: E1_VALORSequência: 011Contra Domínio: E1_VALORTipo 1=PrimárioRegra: U_EXERC03()

Exercício 13 � Como Testar o Gatilho:

1. Acesse o �Módulo Financeiro�;

2. Selecione as seguintes opções �Atualizações� + �Contas a Receber� + �Contas aReceber�;

3. Clique na opção �Incluir�, preencha o �Campo � Tipo� com �DP�, no �Campo �Cliente�, pressione a tecla <F3> e informe os dados a seguir:

Código: 000001Loja: 01Nome: Cliente 01N Fantasia: Cliente 01Tipo: R=RevendedorEndereço: Avenida Braz Leme, 1631Município: São PauloEstado: SP

4. Selecione-o e continue o cadastro, preenchendo o �Campo � Vlr. Título� com �100,00�e verifique que o mesmo será alterado com �10%� a mais sobre o �Valor Digitado�.

Exercício 14 � Como criar Funções utilizando Matriz:

� Crie um programa com o nome de �Exerc04�, que deverá atualizar o �Campo �DDD� do �Cadastro de Clientes�, dependendo da �Unidade Federativa�, que forpreenchida no �Campo � Estado�.

1. Digite o programa a seguir:

#Include "Rwmake.ch"

User Function Exerc04()

Local aFone := {}

Local nP := 0

Local cRet := ""

Page 17: ADVPL AP7

SIGAADVPL Advanced Protheus - 17

Anotações:

aAdd( aFone, {"SP","11"} )

aAdd( aFone, {"RJ","21"} )

aAdd( aFone, {"MG","31"} )

aAdd( aFone, {"AM","91"} )

aAdd( aFone, {"BA","71"} )

nP := aScan( aFone, {|x|x[1]==M->A1_EST})

If nP <> 0

cRet := aFone[nP][2]

Endif

Return( cRet )

2. Salve o �Programa�, adicione-o ao �Projeto� e �Compile-o�;

Exercício 15 � Como Criar o Gatilho:

1. Crie o �Gatilho� a seguir, para a �Função� acima:

Campo: A1_ESTSequência: 001Contra Domínio: A1_DDDTipo 1=PrimárioRegra: U_EXERC04()

Exercício 16 � Como Testar o Gatilho:

1. Acesse o �Módulo Financeiro�;

2. Selecione as seguintes opções �Atualizações� + �Cadastros� + �Clientes�;

3. Clique na opção �Incluir� e preencha o �Campo � Estado�, com �SP�;

4. Verfique que o �Campo � DDD�, será atualizado de acordo com o retorno da �Matriz�,utilizada na �Função� disparada pelo �Gatilho�.

Page 18: ADVPL AP7

18 - SIGAADVPL Advanced Protheus

Anotações:

O que você aprendeu neste capítulo

Neste capítulo aprendemos a criar Gatilhos com utilização de Funções.

Próximo Passo

No próximo capítulo, iremos aprender como criar Telas de Cadastros utilizando as Funções daMicrosiga e também à desenvolver Programas de Validação e Relacionamento entre arquivos.

Page 19: ADVPL AP7

SIGAADVPL Advanced Protheus - 19

Anotações:

FUNÇÕES PARA CADASTROS

O que você irá aprender neste capítulo

Neste capítulo, aprenderemos como criar Telas para Cadastros, utilizando para isso as Funçõesdefinidas pela MICROSIGA.Veremos também, Funções Customizadas, para Validações em Arquivos e Relacionamentos.

Rotinas Abordadas

� Funções para Cadastros:� AxCadastro();� MBrowse();� Modelo2();� Modelo3().

AxCadastro() � Cadastro Padrão

Esta Função é utilizada para a Criação de Telas de cadastros padronizados da MICROSIGA, ondepoderemos ter apenas as opções de �Pesquisar�, �Visualizar�, �Alterar�, �Incluir� e �Excluir�, sendoque os mesmo não poderão ser modificados.

Sintaxe:AxCadastro(cAlias,cTitulo,cDel,cOk);Parâmetros:cAlias = Alias do Arquivo para o cadastro, deve obrigatoriamente ter a sua Estrutura defini-

da no SX3;cTitulo = Título da Janela;cDel = Função para validar a Exclusão;cOK = Nome de Função para Validação da Tela.

Exercício 17 � Como criar Telas de Cadastros, com utilização de Arquivo Padrão:

� Crie uma �Tela de Cadastro Padrão�, para o arquivo de �Cadastro de Produtos� eadicione-o ao menu do Módulo de Faturamento. Utilize para isso um programa como nome de �Exerc05�.

1. Crie o �Programa� a seguir:

Page 20: ADVPL AP7

20 - SIGAADVPL Advanced Protheus

Anotações:

#Include "Rwmake.ch"

User Function Exerc05()

Axcadastro("SB1","Exerc05")

Return

2. Salve o �Programa�, adicione ao �Projeto� e �Compile-o�.

Exercício 18 � Como Adicionar Programas ao Menu:

1. Acesse o �Módulo Configurador�;

2. Selecione as seguintes opções �Ambiente� + �Cadastros� + �Menus�;

3. Desmarque a opção �Todos os Menus�;

4. Marque apenas a opção �Faturamento� e confirme;

5. Posicione com o cursor sobre a opção �Faturamento�, ao lado esquerdo da tela eclique na opção �Adicionar�;

6. Após a �Cópia do Menu�, posicione com o cursor na opção �Atualizações� ao ladodireito da tela, clique na opção �Novo Grupo� e insira o �Novo Grupo� a seguir:

Descrição (Português): Curso AdvPL

7. Após a criação do novo grupo, clique na opção �Novo Ítem� e insira o �Novo Item�a seguir:

Descrição (Português): Exerc05Módulo: FaturamentoTipo: Função de UsuárioPrograma: Exerc05Tabelas: SB1

8. Confirme e verifique que o �Novo Ítem�, foi inserido no �Menu�, como �Última Opção�;

9. Clique na opção �Gerar� e salve-o com o mesmo nome do menu original, neste caso,�SIGAFAT�;

Obs.:Será exibido um �Aviso�, informando que esta opção já existe.10. Confirme e clique na opção �Fechar�, duas vezes;

11. Clique na opção �Cancelar� e saia do �Módulo Configurador�.

Obs.:Lembre-se de que, �Jamais�, deveremos utilizar um �Menu Original�, para nossascustomizações, o correto é gerarmos uma �Cópia�, para que não se perca as configuraçõesdo menu original.

Page 21: ADVPL AP7

SIGAADVPL Advanced Protheus - 21

Anotações:

Exercício 19 � Como Testar o Cadastro:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualização� + �Cadastros� + �Exerc05�;

3. Clique na opção �Incluir� e cadastre os �Produtos� a seguir:

Código: 100.100-01Descrição: CANETA AZULTipo: MCUnidade: PCArmazem Pad: 01

Código: 100.200-01Descrição: CANETA VERMELHATipo: MCUnidade: PCArmazem Pad: 01

4. Confira os dados, confirme e saia do �Cadastro de Produtos�.

Exercício 20 � Como cadastrar a Previsão de Vendas:

1. Selecione as seguintes opções �Atualização� + �Cenários de Venda� + �Previsão deVendas�;

2. Clique na opção �Incluir� e informe as �Previsões� a seguir:

Produto: 100.100-01Almoxarifado: 1Quantidade: 1,00

Produto: 100.200-01Almoxarifado: 1Quantidade: 1,00

3. Confira os dados e confirme o �Cadastro de Previsão de Vendas�.

Exercício 21 � Como Verificar a Integridade Relacional entre os dois Cadastros:

1. Selecione as seguintes opções �Atualizações� + �Cadastro� + �Produtos�;

2. Posicione com o cursor sobre o �Produto � 100.100-01�;

3. Clique a opção �Excluir�;

Page 22: ADVPL AP7

22 - SIGAADVPL Advanced Protheus

Anotações:

Obs.:Note que o sistema não irá realizar a �Exclusão�, devido a amarração deste �Produto� aocadastro de �Previsão de Vendas�.4. Saia deste �Cadastro� e selecione as seguintes opções �Atualizações� + �Cadastro�

+ �Exerc05�;

5. Posicione com o cursor sobre o �Produto � 100.100-01�;

6. Clique na opção �Excluir�.

Obs.:� Observe que desta vez o sistema realizou a �Exclusão�;� A �Exclusão do Registro� foi possível devido ao fato de que ainda não há nenhuma�Validação�, para verificar a �Integridade Relacional� entre os dois arquivos no nossoprograma.

Exercício 22 � Como criar Programas, para verificar a Exclusão de Produtos:

� Crie um programa para verificar se o registro selecionado para �Exclusão� no�Cadastro � Exerc05�, poderá ou não ser �Excluído�. Para isso, será necessário verificarse o mesmo não se encontra relacionado no cadastro de �Previsão de Vendas�.

1. Crie o �Programa� a seguir com o nome de �Vdel�:

#Include "Rwmake.ch"

User Function Vdel()

Local c_Area := Alias(), n_Rec:=Recno(), c_ind:=IndexOrd()

Local c_Cod:=SB1->B1_COD, l_Del:=.T.

Msgbox("Verificando amarracao do produto" + c_Cod,"Atencao!!!")

Dbselectarea("SC4")

If Dbseek(Xfilial("SC4")+c_Cod)

Msgbox("Produto nao pode ser excluido!!!")

l_Del:=.F.

Endif

DbSelectArea(c_Area)

DbSetOrder(c_ind)

DbGoTo(n_Rec)

Return(l_Del)

Page 23: ADVPL AP7

SIGAADVPL Advanced Protheus - 23

Anotações:

2. Salve o �Programa�, adicione ao �Projeto� e �Compile-o�.

Exercício 23 � Como Alterar o Programa, para Validação da Exclusão:

1. Faça as seguintes modificações no �Programa � Exerc05�:

AxCadastro(�SB1�,�Exerc05�,�Execblock(�Vdel�)�,�.F.�)

2. Salve o �Programa� e �Compile-o�, novamente.

Exercício 24 � Como Testar Validações de Exclusões:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualização� + �Cadastros� + �Exerc05�;

3. Posicione com o cursor sobre o �Produto �100.200-01�;

4. Clique na opção �Excluir�;

Obs.:Verifique que a �Exclusão�, não será realizada, pois agora existe uma �Validação�, paraessa rotina;5. Saia do cadastro de �Produtos�;

6. Selecione as seguintes opções �Atualizações� + �Cenários de Venda� + �Previsão deVendas�;

7. Posicione com o cursor sobre a �Previsão � 100.200-01�, clique na opção �Excluir� econfirme;

8. Retorne ao �Cadastro � Exerc05� e execute novamente a �Rotina de Exclusão�.

Obs.:Verifique que desta vez a rotina será executada, pois não existe mais nenhuma amarraçãodeste registro com o cadastro de �Previsão de Vendas�.

Obs.:

Não poderemos mais incluir registros através da opção �Exerc05�, pois o mesmo foimodificado, para retornar �Falso� no parâmetro responsável pela inclusão.

Page 24: ADVPL AP7

24 - SIGAADVPL Advanced Protheus

Anotações:

Exercício 25 � Como criar Programas de Exclusão de Registros em Sequência:

� Crie um �Programa� que durante a �Exclusão� de um registro no �Exerc05� sejaverificado se o mesmo está amarrado ao cadastro de �Previsão de Vendas�, casoesteja, deverá ocorrer a �Exclusão� deste registro em ambos os cadastros.

1. Realize as seguintes modificações no �Programa � Vdel�:

#Include "RwMake.CH"

User Function vDel()

//Local c_Area := Alias(), n_Rec:=Recno(), c_ind:=IndexOrd()

Local aArea := GetArea() //Substitui a linha acima

Local cCod := SB1->B1_COD, lDel:=.T.

MsgBox("Verificando amarracao do produto " + cCod, "Atencao!!!")

DbSelectArea("SC4")

If DbSeek(xFilial("SC4")+cCod) // Verifica se existe Previsão de Vendas

If MsgBox("Deseja excluir a Previsão de Vendas","Previsão de Vendas","YESNO")

lDel := .T.

If RecLock("SC4")

DbDelete()

Else

MsgBox("Registro em uso, o produto não será excluido!")

lDel := .F.

EndIf

Else

MsgBox("Produto não será excluído!")

lDel := .F.

EndIf

EndIf

//DbSelectArea(cArea)

//DbSetOrder(cInd)

//DbGoTo(nRec)

RestArea(aArea) // Substitui as 3 linhas acima

Return(lDel)

Page 25: ADVPL AP7

SIGAADVPL Advanced Protheus - 25

Anotações:

2. Salve o �Programa� e �Compile-o�, novamente.

Exercício 26 � Como Testar a Validação, para Exclusão de Registros em Sequência:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualização� + �Cadastros� + �Produtos�;

3. Clique na opção �Incluir� e informe os dados a seguir:

Código: 100.100-01Descrição: CANETA AZULTipo: MCUnidade: PCArmazem Pad: 01

4. Confira os dados, confirme e saia do cadastro de �Produtos�;

5. Selecione as seguintes opções �Atualização� + �Cenários de Venda� + �Previsão deVendas�;

6. Clique na opção �Incluir� e informe os dados a seguir:

Produto: 100.100-01Almoxarifado: 1Quantidade: 1,00

7. Confira os dados e confirme o cadastro de �Previsão de Vendas�.

Exercício 27 � Como Testar a Exclusão de Registros em Sequência:

1. Selecione as seguintes opções �Atualização� + �Cadastros� + �Exerc05�;

2. Posicione com o cursor sobre o �Produto � 100.100-01�;

3. Clique na opção �Excluir� e saia do cadastro de �Produtos�;

4. Selecione as seguintes opções �Atualizações� + �Cenários de Venda� + �Previsão deVendas�;

5. Verifique que a �Previsão de Vendas�, cadastrada para o �Produto � 100.100-01�,também foi �Excluída�.

Exercício 28 � Como criar Cadastros com Arquivos Customizados:

� Crie um �Programa�, denominado �Exerc06� que será utilizado como �Cadastro deSoftwares�. Crie também um �Arquivo Customizado�, para este cadastro, seusrepectivos �Campos� e �Chaves de Índices�.

Page 26: ADVPL AP7

26 - SIGAADVPL Advanced Protheus

Anotações:

1. Acesse o �Módulo Configurador�;

2. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Arquivos�;

3. Clique na opção �Incluir� e informe os dados a seguir:

Prefixo: SZ1Path: \DADOSADV\Nome: SZ1990Descrição: CADASTRO DE SOFTWARESModo Acesso: 1=Compartilhado

4. Confira os dados e confirme o �Cadastro�;

5. Clique na opção �Atualizar Base de Dados�, confirme e quando todas as �Alterações�forem �Salvas�, saia do cadastro.

Exercício 29 � Como Criar e Validar os Campos:

1. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Base de Dados�;

2. Ao lado esquerdo da tela, posicione com o cursor sobre a opção �Dicionário deDados� e clique na opção �Pesquisar�;

3. No �Campo de Pesquisa�, informe �SZ1� e confirme;

4. Quando o arquivo for encontrado, clique na opção �Editar�, posicionado com o cursorsobre a pasta �Campos�;

5. Clique na opção �Incluir�;

6. Na pasta �Campo�, informe os dados a seguir:

Campo: Z1_CODIGOTipo: 1=CaracterTamanho: 6Contexto: 1=RealPropriedade: 2=Visualizar

7. Na pasta �Informações�, informe os dados a seguir:

Título: CódigoDescrição: Código do SoftwareHelp: Digite o código do software.

8. Na pasta �Opções�, informe os dados a seguir:

Inic. Padrão: GETSXENUM("SZ1","Z1_CODIGO")

9. Na pasta �Validações�, informe os dados a seguir:

Val. Usuário: EXISTCHAV("SZ1")

10. Na pasta �Uso�, marque as seguintes opções �Obrigatório�, �Usado� e �Browse�;

11. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos� marcada;

Page 27: ADVPL AP7

SIGAADVPL Advanced Protheus - 27

Anotações:

12. Confira os dados e confirme a �Criação do Campo�;

13. Clique novamente na opção �Incluir� e crie o próximo �Campo�.

14. Na pasta �Campo�, informe os dados a seguir:

Campo: Z1_NOMETipo: 1=CaracterTamanho: 15Formato: @!Contexto: 1=RealPropriedade: 1=Alterar

15. Na pasta �Informações�, informe os dados a seguir:

Título: NomeDescrição: Nome do SoftwareHelp: Digite o nome do Software

16. Na pasta �Uso�, marque as seguintes opções �Usado� e �Browse�;

17. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos� marcada;

18. Confira os dados e confirme a �Criação do Campo�;

19. Clique novamente na opção �Incluir�;

20. Na pasta �Campo�, informe os dados a seguir:

Campo: Z1_DTCOMTipo: 4=DataTamanho: 8Formato: @DContexto: 1=RealPropriedade: 2=Visualizar

21. Na pasta �Informações�, informe os dados a seguir:

Título: Data CompraDescrição: Data da compraHelp: Digite a data da compra

22. Na pasta �Opções�, informe os dados a seguir:

Inic. Padrão: DATE()

23. Na pasta �Uso�, marque as seguintes opções �Usado� e �Browse�;

24. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos� marcada econfirme toda a �Criação dos Campos�;

25. Clique na opção �Atualizar Base de Dados�, para que todas as �Alterações� tenhamefeito e confirme;

26. Assim que todo o �Processo de Atualização� for concluído, clique na opção�Cancelar�.

Page 28: ADVPL AP7

28 - SIGAADVPL Advanced Protheus

Anotações:

Obs:Todos os detalhes referentes �Criação de Campos e Manutenção das Estruturas de umArquivo� são vistos com maiores detalhes no curso do �Módulo Configurador�.

Dicas:� Caso queira criar mais campos, o procedimento é o mesmo, e se desejar �Criar Cam-pos� que tenham, as características semelhantes a de outro campo, basta verificar, comoestá definida a �Estrutura do Campo�, que se deseja �Copiar� e criá-la onde desejar;� Sempre que confirmamos a �Alteração da Estrutura de um Arquivo�, o Advanced Protheus,gera um �Backup�, automático do �Dicionário de Dados�, como no exemplo a seguir:

SX3990.#DB (Nas versões �ADS� e �Codebase�), ouSX3990.BKP (Nas versões �SQL�).

Exercício 30 � Como Criar Chaves de Índices para Novos Arquivos:

1. Após a �Atualização da Estrutura do Arquivo�;

2. Clique na opção �Índices�, localizada ao lado esquerdo da tela;

3. Clique na opção �Incluir� e em seguida no botão �Consultar Campos�;

4. Selecione o �Campo � Z1_FILIAL� e confirme;

5. Repita o mesmo procedimento e selecione o �Campo � Z1_CODIGO�;

6. No �Campo � Descrição:�, informe �Código� e confirme;

7. Clique novamente no botão �Incluir� e em seguida no botão �Consultar Campos�;

8. Selecione o �Campo � Z1_FILIAL� e confirme;

9. Repita o mesmo procedimento e selecione o �Campo � Z1_NOME�;

10. No �Campo � Descrição:�, informe �Nome� e confirme;

Exercício 31 � Como Criar Novas Chaves de Índices para Arquivos Padrões:

1. Clique na opção �Pesquisar�;

2. No �Campo � Perquisar por:�, informe �SA1� e confirme;

3. Assim que o �Arquivo� for encontrado, clique na opção �Editar�;

4. Clique na opção �Índices�, localizada ao lado esquerdo da tela;

5. Clique na opção �Incluir� e em seguida no botão �Consultar Campos�;

6. Selecione o �Campo � A1_FILIAL� e confirme;

Page 29: ADVPL AP7

SIGAADVPL Advanced Protheus - 29

Anotações:

7. Repita o mesmo procedimento e selecione o �Campo � A1_MUN�;

8. No �Campo � Descrição:�, informe �Município� e confirme;

9. Saia do cadastro.

10. Clique no botão �Atualizar base de dados� e confirme;

11. Assim que todo o �Processo de Atualização� for concluído, clique na opção �Cancelar�e saia do cadastro.

Exercício 32 � Entendendo o que Aconteceu:

1. Dê um duplo clique no �Atalho� do �Remote�;

2. No �Campo � Programa Inicial�, informe �APSDU� e confirme

3. Será solicitado um �Usuário (Administrador)� e �Senha (Em Branco)�;

4. Selecione as seguintes opções �File� + �Open�;

5. Selecione o �Driver � DBF (DBFCDXADS/DBFCDXAX)�;

6. Clique na opção �+� da opção �Servidor� ao lado direito da caixa e posicione com ocursor sobre a pasta �\Sigaadv\�;

7. Posicione com o cursor sobre o �Arquivo � SIX990.dbf�, que se encontra ao ladodireito da caixa;

8. Selecione as seguintes opções �Find� + �Seek�;

9. No �Campo � Expression�, informe �SZ1� e confirme, para verificar o resultado;

10. Repita o procedimento, para verificar a nova �Chave de Pesquisa�, criada para o�Arquivo � SA1�;

11. Após a verificação, saia da �Ferramenta � SDU�.

Dicas:� Conforme verificamos, o �Arquivo Responsável� pelo controle das chaves de índicesdo sistema é o �SIX�, sendo que o mesmo possui um controle individual por empresa.

Exercício 33 � Como Criar Programas de Cadastros, através do Assistente de Código, daFerramenta IDE:1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Ferramentas� + �Assistente de Código�;

3. Marque a opção �Cadastro�;

Page 30: ADVPL AP7

30 - SIGAADVPL Advanced Protheus

Anotações:

4. Clique na opção �Avançar>>�;

5. Marque a opção �Arquivo Padrão�;

6. No �Campo � Alias�, informe o �Arquivo � SZ1�;

7. Marque a opção �Utiliza Índice Padrão�;

8. Clique nas seguintes opções �Avançar>>� + �Avançar>>�;

9. Marque a opção �AxCadastro�;

10. Na pasta �Configurações�, no �Campo � Título�, informe �Cadastro de Softwares�;

11. Clique na opção �Finalizar�;

12. Realize a seguinte �Correção� no programa:

�User Function Exerc06�

13. Salve o �Programa�, também com o nome de �Exerc06�, adicione ao �Projeto� e�Compile-o�.

14. Adicione-o ao menu do �Modulo Faturamento�.

15. Insira os dados a seguir:

Código: 000001Nome: Office 2000Data Compra: Data de hoje

Código: 000002Nome: SQL ServerData Compra: Data de hoje

Código: 000003Nome: Windows XPData Compra: Data de hoje

16. Confira os dados e saia do �Cadastro�.

Exercício 34 � Como Criar Cadastros, para Usuários de Softwares:

� Crie um �Programa� denominado �Exerc07� que será utilizado como �Cadastro deUsuários de Softwares�. Crie também um �Arquivo Customizado� para este cadastro,seus repectivos �Campos� e �Chaves de Índices�.

1. Acesse o �Módulo Configurador�;

2. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Arquivos�;

3. Clique na opção �Incluir� e crie o �Arquivo� a seguir:

Page 31: ADVPL AP7

SIGAADVPL Advanced Protheus - 31

Anotações:

Prefixo: SZ2Path: \DADOSADV\Nome: SZ2990Descrição: USUARIOS DE SOFTWARESModo Acesso: 1=Compartilhado

4. Confira os dados e confirme o �Cadastro�;

5. Clique na opção �Atualizar Base de Dados�, confirme e assim que todas as�Alterações� forem salvas, saia do �Cadastro�.

Exercício 35 � Como Criar e Validar os Campos:

1. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Base de Dados�;

2. Ao lado esquerdo da tela, posicione com o cursor sobre a opção �Dicionário deDados� e clique na opção �Pesquisar�;

3. No �Campo de Pesquisa�, informe �SZ2� e confirme;

4. No �Arquivo � SZ2�, posicionado o cursor sobre a pasta �Campos�, clique na opção�Editar�;

5. Clique na opção �Incluir�;

6. Na pasta �Campo�, informe os dados a seguir:

Campo: Z2_CODIGOTipo: 1=CaracterTamanho: 6Contexto: 1=RealPropriedade: 2=Visualizar

7. Na pasta �Informações�, informe os dados a seguir:

Título: CódigoDescrição: Código do usuárioHelp: Informe o código do usuário

8. Na pasta �Opções�, informe os dados a seguir:

Inic. Padrão: GETSXENUM("SZ2","Z2_CODIGO")

9. Na pasta �Validações�, informe os dados a seguir:

Val. Usuário: EXISTCHAV("SZ2")

10. Na pasta �Uso�, marque as seguintes opções �Obrigatório�, �Usado� e �Browse�;

11. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos� marcada;

12. Confira os dados e confirme a �Criação do Campo�;

13. Clique novamente na opção �Incluir� e crie o próximo campo;

14. Na pasta �Campo�, informe os dados a seguir:

Page 32: ADVPL AP7

32 - SIGAADVPL Advanced Protheus

Anotações:

Campo: Z2_NOMETipo: 1=CaracterTamanho: 15Formato: @!Contexto: 1=RealPropriedade: 1=Alterar

15. Na pasta �Informações�, informe os dados a seguir:

Título: NomeDescrição: Nome do usuárioHelp: Informe o nome do usuário

16. Na pasta �Uso�, marque as seguintes opções �Usado� e �Browse�;

17. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos� marcada;

18. Confira os dados e confirme a �Criação do Campo�;

19. Clique novamente na opção �Incluir� ;

20. Na pasta �Campo�, informe os dados a seguir:

Campo: Z2_DTEMPTipo: 4=DataTamanho: 8Formato: @DContexto: 1=RealPropriedade: 2=Visualizar

21. Na pasta �Informações�, informe os dados a seguir:

Título: Data Emp.Descrição: Data do empréstimoHelp: Informe data do empréstimo

22. Na pasta �Opções�, informe os dados a seguir:

Inic. Padrão: DDATABASE

23. Na pasta �Uso�, marque as seguintes opções �Usado� e �Browse�;

24. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos� marcada;

25. Confira os dados e confirme a �Criação do Campo�;

26. Clique novamente na opção �Incluir� ;

27. Na pasta �Campo�, informe os dados a seguir:

Campo: Z2_HORATipo: 1=CaracterTamanho: 5Formato: 99:99Contexto: 1=RealPropriedade: 2=Visualizar

28. Na pasta �Informações�, informe os dados a seguir:

Page 33: ADVPL AP7

SIGAADVPL Advanced Protheus - 33

Anotações:

Título: Hr. Emp.Descrição: Hora do empréstimoHelp: Informe hora do empréstimo

29. Na pasta �Opções�, informe os dados a seguir:

Inic. Padrão: TIME()

30. Na pasta �Uso�, marque as seguintes opções �Usado� e �Browse�;

31. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos� marcada econfirme a �Criação de todos os Campos�;

32. Clique na opção �Atualizar Base de Dados�, para que todas as �Alterações� tenhamefeito e confirme;

33. Assim que todo o �Processo de Atualização� for concluído, clique na opção�Cancelar�.

Exercício 36 � Criando Chaves de Índices:

1. Após a �Atualização da Estrutura do Arquivo�;

2. Clique na opção �Índices�, localizada ao lado esquerdo da tela;

3. Clique na opção �Incluir� e em seguida no botão �Consultar Campos�;

4. Selecione o �Campo � Z2_FILIAL� e confirme;

5. Repita o mesmo procedimento e selecione o �Campo � Z2_CODIGO�;

6. No �Campo � Descrição:�, informe �Código� e confirme;

7. Clique novamente no botão �Incluir� e em seguida no botão �Consultar Campos�;

8. Selecione o �Campo � Z2_FILIAL� e confirme;

9. Repita o mesmo procedimento e selecione o �Campo � Z2_NOME�;

10. No �Campo � Descrição:�, informe �Nome�, confirme e saia do �Cadastro�;

11. Clique no botão �Atualizar Base de Dados� e confirme;

12. Assim que todo o �Processo de Atualização� for concluído, clique na opção �Cancelar�e saia do �Cadastro�.

Exercício 37 � Como Criar Programas de Cadastros, através do Assistente de Códigos daFerramenta IDE:1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Ferramentas� + �Assistente de Código�;

3. Marque a opção �Cadastro�;

Page 34: ADVPL AP7

34 - SIGAADVPL Advanced Protheus

Anotações:

4. Clique na opção �Avançar>>�;

5. Marque a opção �Arquivo Padrão�;

6. No �Campo - Alias� informe o �Arquivo - SZ2�;

7. Marque a opção �Utiliza Índice Padrão�;

8. Clique nas seguintes opções �Avançar>>� + �Avançar>>�;

9. Marque a opção �AxCadastro�;

10. Na pasta �Configurações�, no �Campo � Título�, informe �Usuários dos Softwares�;

11. Clique na opção �Finalizar�;

12. Realize a seguinte �Correção� no programa:

�User Function Exerc07�.

13. Confira os dados, salve o �Programa� também com o nome de �Exerc07�, adicioneao �Projeto� e �Compile-o�.

14. Adicione-o ao menu do �Modulo Faturamento�.

15. Insira os dados a seguir:

Código: 000001Nome: USUARIO 1Data Emp: Data de hojeHr. Emp: Hora atual

Código: 000002Nome: USUARIO 2Data Emp: Data de hojeHr. Emp: Hora atual

Código: 000003Nome: USUARIO 3Data Emp: Data de hojeHr. Emp: Hora atual

16. Confira os dados, confirme e saia do cadastro de �Usuários�.

Page 35: ADVPL AP7

SIGAADVPL Advanced Protheus - 35

Anotações:

MBrowse()

Esta Função é utilizada para a criação de telas de cadastros padronizados da MICROSIGA, ondepoderemos criar até 10 botões, sem a necessidade de utilizarmos os originais.Também é possível a utilização de Legendas durante o cadastro, sendo que as mesmas poderão serdefinidas através de Cores e Condições.

Sintaxe:MBrowse(nT,nL,nB,nR,cAlias,aFixe,cCpo,nPosI,cFun,nDefault, aColors,cTopFun,cBotFun)Parâmetros:nT = Linha Inicial;nL = Coluna Inicial;nB = Linha Final;nR = Coluna Final;cAlias = Alias do Arquivo;aFixe = Array, contendo os Campos Fixos (A serem mostrados em primeiro lugar no Browse);cCpo = Campo a ser tratado, quando Empty, para informações de Linhas com Cores;

Prioridade 2nPosI = (Dummy);cFun = Função para habilitar semáforo; Prioridade 3 na execução; Prioridade 3nDefault= Número da opção do menu a ser executada quando o <Enter> for pressionado;aColors = Array com os Objetos e Cores; Prioridade 1cTopFun = Função para filtrar o TOP do Browse;cBotFun = Função para filtrar o BOTTOM do Browse.

Exercício 38 � Como Criar Telas de Cadastros:

� Crie um programa denominado �Exerc08�, utilizando o arquivo de �Cadastro deProdutos�, onde o mesmo deve possuir uma �Opção Customizada�, para acessar o�Cadastro de Complementos de Produtos�.

1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Ferramentas� + �Assistente de Código�;

3. Marque a opção �Cadastro�;

4. Clique na opção �Avançar>>�;

5. Marque a opção �Arquivo Padrão�;

6. No �Campo � Alias�, informe o �Arquivo � SB1�;

7. Marque a opção �Utiliza índice padrão�;

Page 36: ADVPL AP7

36 - SIGAADVPL Advanced Protheus

Anotações:

8. Clique nas seguintes opções �Avançar>>� + �Avançar>>�;

9. Marque a opção �MBrowse�;

10. Na pasta �Configurações�, no �Campo � Título�, informe �Cadastro de Produtos�;

11. Clique na opção �Finalizar�;

12. Faça as seguintes �Correções no Programa�:

User Function Exerc08

Private aRotina := {{"Pesquisar","AxPesqui",0,1} ,;

{"Visualizar","AxVisual",0,2} ,;

{"Incluir","AxInclui",0,3} ,;

{"Alterar","AxAltera",0,4} ,;

{"Excluir","AxDeleta",0,5},;

{"Compl. Produtos","Mata180()",0,6}}

13. Confira os dados, salve o �Programa� também com o nome de �Exerc08�, adicioneao �Projeto� e �Compile-o�.

14. Adicione-o ao menu do �Modulo Faturamento� e teste.

Exercício 39 � Como utilizar Legendas nos Cadastros:

� Crie um �Programa�, para o �Cadastro de Produtos�, sendo que o mesmo deverápossuir uma �Legenda� ao lado de cada �Registro� informando se o �Campo � Preçode Venda�, está ou não �Preenchido�.

1. Realize a seguinte alteração no �Programa � Exerc08�:

mBrowse( 6,1,22,75,cString,,"B1_PRV1")

2. Confira os dados, salve o �Programa� e �Compile-o� novamente.

3. Insira os dados a seguir:

Código: 000000000000001Descrição: PRODUTO 1Tipo: PAUnidade: CXArmazém Pad.: 01Preço Venda: 1.00

Código: 000000000000002Descrição: PRODUTO 2Tipo: PAUnidade: CXArmazém Pad.: 01

Page 37: ADVPL AP7

SIGAADVPL Advanced Protheus - 37

Anotações:

4. Cancele a �Próxima Inclusão�;

5. Verifique que o produto que atende à �Condição� estipulada pelo programa está comuma legenda �Vermelha� e a outra �Verde�.

Obs.:As �Cores Padrões� das �Legendas�, serão sempre �Vermelha� quando a �Condição�, for�Satisfeita� e �Verde�, quando ainda estiver �Pendente�.

Exercício 40 � Como utilizar Legendas com Condições de Preenchimento dos Campos:

� Crie um �Programa�, para o �Cadastro de Produtos�, sendo que o mesmo deverápossuir uma �Legenda� ao lado de cada registro informando se o �Campo � Preço deVenda� está ou não preenchido com �Valor Igual ou Superior a R$ 100,00�.

1. Realize a seguinte alteração no �Programa � Exerc08�:

mBrowse( 6,1,22,75,cString,,"B1_PRV1>=100")

2. Confira os dados, salve o �Programa� e �Compile-o� novamente e teste.

Obs.:Verifique que a �Cor� do primeiro registro, foi alterada para �Verde�, pois a �Nova Condição�ainda não foi �Satisfeita�;3. Posicione com o cursor sobre esse mesmo �Registro� e clique na opção �Alterar�;

4. Preencha o �Campo � Preço Venda� com um �Valor Igual ou Superior a R$ 100,00� econfirme;

5. Verifique que agora a �Legenda�, mudou novamente para �Vermelho�, pois a �NovaCondição�, foi �Atendida�.

Exercício 41 � Como criar Outra Tela de Cadastros:

� Crie um �Programa� denominado �Exerc09�, utilizando o arquivo de �Cadastro deClientes�, onde o mesmo deverá possuir uma �Legenda�, informando se o �Campo �Tipo�, está preenchido como �Revendedor�.

1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Ferramentas� + �Assistente de Código�;

3. Marque a opção �Cadastro�;

Page 38: ADVPL AP7

38 - SIGAADVPL Advanced Protheus

Anotações:

4. Clique na opção �Avançar>>�;

5. Marque a opção �Arquivo Padrão�;

6. No �Campo � Alias�, informe o �Arquivo � SA1�;

7. Marque a opção �Utiliza índice padrão�;

8. Clique na opção �Avançar>>� + �Avançar>>�;

9. Marque a opção �MBrowse�;

10. Na pasta �Configurações�, no �Campo � Título�, informe �Cadastro de Clientes�;

11. Clique na opção �Finalizar�;

12. Realize as seguintes correções no �Programa�:

User Function Exerc09

mBrowse( 6,1,22,75,cString,,"A1_TIPO== 'R�")

13. Confira os dados, salve o �Programa�, também com o nome de �Exerc09�, adicioneao �Projeto� e �Compile-o�.

14. Adicione-o ao menu do �Modulo Faturamento� e teste.

Obs.:Verifique que o �Registro� existente, possui a legenda em �Vermelho�, pois a �NovaCondição�, já se encontra �Satisfeita�;15. Clique na opção �Alterar�, preencha o �Campo � Tipo�, com �X=Exportação� e

confirme;

16. Agora, verifique que a �Legenda�, passou para a cor �Verde�, confirmando que a�Condição� não foi �Satisfeita�, dessa vez e saia do �Cadastro�.

Exercício 42� Como Criar Cadastros com Filtros:

� Crie um �Programa� denominado �Exerc10�, utilizando o �Arquivo de Tabelas� do�Módulo Configurador�, onde o mesmo deverá apresentar, apenas os �Os Estados daRegião Sudeste�, quando o usuário acessar o sistema, porém deverá apresentar todos,caso o sistema seja acessado pelo �Administrador�.

1. Acesse a �Ferramenta � IDE�;

2. Crie o �Programa� a seguir:

#Include "Rwmake.ch"

User Function Exerc10()

Dbselectarea("SX5")

Dbsetorder(1)

Page 39: ADVPL AP7

SIGAADVPL Advanced Protheus - 39

Anotações:

cCadastro:="Tabelas"

aRotina:={{ "Pesquisar","Axpesqui",0,1},;

{"Alterar","AxAltera",0,4}}

If Upper(Substr(cUsuario,7,15))<>"ADMINISTRADOR"

Set Filter To X5_TABELA == �12� .And. Alltrim(X5_CHAVE) $ �SP/RJ/MG/ES�

Endif

Mbrowse(6,1,22,75,"SX5")

Set Filter to

Return

3. Confira os dados, salve o �Programa�, com o nome de �Exerc10�, adicione ao �Projeto�e �Compile-o�.

4. Adicione-o ao menu do �Modulo Faturamento� e teste.

Obs.:Verifique que apenas os �Estados da Região Sudeste�, foram exibidos.5. Saia do �Sistema� e acesse-o novamente como �Administrador�, repetindo o �Teste�;

6. Verifique que todos os �Estados� serão exibidos e saia do �Cadastro�.

Exercício 43� Utilizando o Parametro �aFixe� da mBrowse:

� Crie um �Programa� denominado �EXERC11�, utilizando o �Cadastro de Produtos�do �Módulo Faturamento�, fixando o campo �Descrição� na primeira coluna do�Browse�

1. Acesse a �Ferramenta � IDE�;

2. Crie o programa a seguir;

#INCLUDE �rwmake.ch�

User Function Exerc11()

Local aCampos

Private cCadastro := �Cadastro de Produtos�

Private aRotina := {{�Pesquisar�,�AxPesqui�,0,1} ,;

{�Visualizar�,�AxVisual�,0,2} ,;

{�Incluir�,�AxInclui�,0,3} ,;

Page 40: ADVPL AP7

40 - SIGAADVPL Advanced Protheus

Anotações:

{�Alterar�,�AxAltera�,0,4} ,;

{�Excluir�,�AxDeleta�,0,5} }

Private cDelFunc := �.T.� // Validacao para a exclusao. Pode-se utilizar ExecBlock

aCampos := {{�Descrição�,�B1_DESC�}}

dbSelectArea(�SB1�)

dbSetOrder(1)

mBrowse( 6,1,22,75,�SB1",aCampos)

Return

3. Confira os dados, salve o programa �EXERC11�, adicione ao �Projeto� e �Compile-o�.

4. Adicione-o ao menu do �Modulo Faturamento� e teste.

Exercício 44 � Utilizando o Parametro �cFun� da mBrowse:

� Crie um �Programa� denominado �EXERC12�, utilizando o �Cadastro de Produtos�do �Módulo Faturamento�, ativando o �Semáforo� a partir do parâmetro �cFun�.

1. Acesse a �Ferramenta � IDE�;

2. Crie o programa a seguir;

#INCLUDE �rwmake.ch�

User Function Exerc12()

Private cCadastro := �Cadastro de Produtos�

Private aRotina := { {�Pesquisar�,�AxPesqui�,0,1} ,;

{�Visualizar�,�AxVisual�,0,2} ,;

{�Incluir�,�AxInclui�,0,3} ,;

{�Alterar�,�AxAltera�,0,4} ,;

{�Excluir�,�AxDeleta�,0,5} }

Private cDelFunc := �.T.� // Validacao para a exclusao. Pode-se utilizar ExecBlock

dbSelectArea(�SB1�)

dbSetOrder(1)

mBrowse( 6,1,22,75,�SB1",,,,�u_PrecoVenda()�)

Return

Page 41: ADVPL AP7

SIGAADVPL Advanced Protheus - 41

Anotações:

User Function PrecoVenda()

Return SB1->B1_PRV1 == 0

3. Confira os dados, salve o programa �EXERC12�, adicione ao �Projeto� e �Compile-o�.

4. Adicione ao menu do �Modulo Faturamento� e teste.

Exercício 45 � Criando Legenda para o �Semaforo� e ativando o mesmo com a tecla<Enter>� Crie um �Programa� denominado �EXERC13�, utilizando o �Cadastro de Produtos�

do �Módulo Faturamento�, para apresentar uma �Legenda� do �Semaforo�, estedeverá chamar o Programa de �Legenda� quando pressionado o <Enter>, utilizaremosneste exercício os parâmetros �cDefault� e �aCores�.

1. Acesse a ferramenta IDE;

2. Crie o programa a seguir;

#INCLUDE �rwmake.ch�

User Function Exerc13()

Private cCadastro := �Cadastro de Produtos�

Private aRotina := { {�Pesquisar�,�AxPesqui�,0,1} ,;

{�Visualizar�,�AxVisual�,0,2} ,;

{�Incluir�,�AxInclui�,0,3} ,;

{�Alterar�,�AxAltera�,0,4} ,;

{�Excluir�,�AxDeleta�,0,5} ,;

{�Legenda�,�u_Legenda()�,0,6} }

Private cDelFunc := �.T.� // Validacao para a exclusao. Pode-se utilizar ExecBlock

aCores := { {�B1_PRV1 == 0�,�BR_VERMELHO�},;

{�B1_PRV1 > 0 .And. B1_PRV1 <= 100�,�BR_LARANJA�},;

{�B1_PRV1 > 100 .And. B1_PRV1 <= 200�,�BR_AZUL�},;

{�B1_PRV1 > 200�,�BR_VERDE�}}

dbSelectArea(�SB1�)

dbSetOrder(1)

mBrowse( 6,1,22,75,�SB1",,,,,6,aCores)

Return

Page 42: ADVPL AP7

42 - SIGAADVPL Advanced Protheus

Anotações:

User Function Legenda()

BrwLegenda(cCadastro,�Valores�, { {�BR_VERMELHO�,�Preço não informado�},;

{�BR_LARANJA�,�Preço > 0 e <= 100" },;

{�BR_AZUL�,�Preço > 100 e <= 200" },;

{�BR_VERDE�,�Preço > 200" }} )

Return .T.

3. Confira os dados, salve o programa �EXERC13�, adicione ao �Projeto� e �Compile-o�.

4. Adicione ao menu do �Modulo Faturamento�

Exercício 46 � Criando Filtro com a mBrowse;

� Crie um �Programa� denominado �EXERC14�, utilizando o �Cadastro de Produtos�do �Módulo Faturamento�, o mesmo deve conter um filtro utilizando o primeiro índicedo arquivo.

1. Acesse a ferramenta IDE;

2. Crie o programa a seguir;

#INCLUDE �rwmake.ch�

User Function Exerc14()

Private cCadastro := �Cadastro de Produtos�

Private aRotina := { {�Pesquisar�,�AxPesqui�,0,1} ,;

{�Alterar�,�AxAltera�,0,4} ,;

{�Excluir�,�AxDeleta�,0,5}}

Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar ExecBlock

DbSelectArea("SB1")

DbSetOrder(1)

mBrowse( 6,1,22,75,"SB1",,,,,,,"u_FilBof()","u_FilEof()")

Return

User Function FilBof()

Return xFilial(�SB1�)+�000000000000002"

User Function FilEof()

Return xFilial(�SB1�)+�000000000000004"

Page 43: ADVPL AP7

SIGAADVPL Advanced Protheus - 43

Anotações:

3. Confira os dados, salve o programa �EXERC14�, adicione ao �Projeto� e �Compile-o�.

4. Adicione ao menu do �Modulo Faturamento� e teste.

Modelo2()

Esta Função é utilizada para a Criação de Telas de Cadastros onde poderemos trabalhar com umEsquema Cabeçalho desenvolvido apenas com a utilização de Variáveis de Memória e logo abaixouma tela com linhas, utilizada para a digitação dos dados, aparentando estarmos trabalhando comdois arquivos em tela, porém na verdade existirá apenas um.Como exemplo, podemos citar o cadastro de Controle de Reservas, existente no Módulo deFaturamento.

Sintaxe:Modelo2(cT,aC,aR,aGd,nOp,cLOk,cTOk, aGetsD, bF4, cIniCpos)Parâmetros:lRet = Retorno da função (.T. se confirmou);cT = Título da Janela;aC = Array com os Campos do Cabeçalho;aR = Array com os Campos do Rodapé;aGd = Array com as posições para edição dos ítens (GETDADOS);nOp = Modo de operação (3 ou 4 altera e inclui ítens, 6 altera mas não inclui ítens,

qualquer outro número só visualiza os ítens);cLOk = Função para validação da linha;cTOk = Função para validação de tudo (na confirmação);aGetsD = Array com Gets editáveis;bF4 = Bloco de Códigos, para tecla <F4>;cIniCpos = String com Nome dos Campos que devem ser inicializados ao pressionar a

tecla de Seta para Baixo.

Exercício 47 � Como utilizar a Função Modelo 2, para Cadastros:

1. Acesse a �Ferramenta � IDE�;

2. Adicione os �Programas a seguir (Que se encontram na pasta �Rdmake�), ao �Projeto�em uso e compile:

Exerc15, Md2vlcli, Md2linok, Md2tudok, Md2valid;

3. Adicione o programa �Exerc15� ao menu do �Modulo Faturamento� e teste.

Page 44: ADVPL AP7

44 - SIGAADVPL Advanced Protheus

Anotações:

Obs.:Verifique que o �Tipo de Cadastro� criado é totalmente diferente dos utilizados até o momento.4. Teste-o, verificando as sua �Validações� e saia do �Cadastro�.

Modelo3()

Esta Função é utilizada para a Criação de Telas de Cadastros, onde poderemos trabalhar com umesquema de Dois Arquivos em Tela, ou seja, um para a Criação do Cabeçalho e outro para aCriação do Corpo do Cadastro, onde iremos utilizar Linhas para a Digitação.Como exemplo, podemos citar o cadastro de Pedidos de Vendas, existente no Módulo de Faturamento.

Sintaxe:Modelo3(cTitulo,cAlias1,cAlias2,aMyEncho,cLinOk,cTudoOk,nOpcE,nOpcG,cFs2,aMyEncho,cLinOk,cTudoOk,nOpcE,nOpcG,cFieldOk,lVirtual,nLinhas,aAltEnchoice)Parâmetros:lRet = Retorno .T. Confirma / .F. Abandona;cTitulo = Título da Janela;cAlias1 = Alias da Enchoice;cAlias2 = Alias da GetDados;aMyEncho = Array com campos da Enchoice;cLinOk = LinOk;cTudOk = TudOk;nOpcE = nOpc da Enchoice;nOpcG = nOpc da GetDados;cFieldOk = Validação para todos os campos da GetDados;lVirtual = Permite visualizar campos virtuais na Enchoice;nLinhas = Número Máximo de linhas na Getdados;aAltEnchoice = Array com campos da Enchoice Alteráveis.

Page 45: ADVPL AP7

SIGAADVPL Advanced Protheus - 45

Anotações:

Exercício 48 � Como utilizar a Função Modelo 3, para Cadastros:

1. Acesse a �Ferramenta � IDE�;

2. Adicione o programa �Exerc16 (Que se encontra na pasta �Rdmake�)�, ao �Projeto�em uso e compile-o;

3. Adicione-o ao menu do �Modulo Faturamento� e teste.

Obs.:Verifique que o �Tipo de Cadastro� criado é parecido com o da �Função� anterior, porém,repare que o mesmo utiliza �Dois Arquivos�, para a sua �Criação�;4. Teste-o, inserindo algum �Registro� e saia do �Cadastro�.

Exercício 49 � Como Criar Programas utilizando as Funções Mbrowse e Modelo3 juntas:

1. Acesse a �Ferramenta � IDE�;

2. Adicione o �Programa � Exerc17 (Que se encontra na pasta �Rdmake�)�, ao �Projeto�em uso e compile-o;

3. Adicione-o ao menu do �Modulo Faturamento� e teste.

Obs.:Verifique que o �Cadastro�, agora possui todos as �Opções�.4. Teste-o, inserindo algum �Registro�;

5. Verifique também que a linha possui uma �Validação�, que não deixa que a inclusãoseja confirmada sem o �Preenchimento dos Campos� ou que seja possível a repetiçãode um �Centro de Custos�, que já foi utilizado em alguma linha anterior;

6. Teste todos as �Opções� e saia do �Cadastro�.

O que você aprendeu neste capítulo

Neste capítulo aprendemos a utilizar as Funções de Criação de Telas para Cadastros, juntamentecom Rotinas de Validações, utilizadas frequentemente durante a Elaboração de Programas.

Próximo Passo

Na próxima etapa, aprenderemos como criar Consultas Padrões do sistema, ou seja, as consultasacionadas através da tecla <F3> nos Campos.

Page 46: ADVPL AP7

46 - SIGAADVPL Advanced Protheus

Anotações:

CONSULTAS PADRÃO

O que você irá aprender neste capítulo

Neste capítulo, aprenderemos a criar as Consultas Padrão.

Rotinas Abordadas

� Consultas Padrão.

Consultas Padrão

Também conhecida como (Consulta <F3>), elas são utilizadas pelo Advanced Protheus em Camposdos Cadastros e Movimentações, a Consulta Padrão é acionada sempre pela tecla <F3> ou com um

clique sobre a opção existente nos Campos relacionados a ela.O Arquivo que possibilita este tipo de consulta é o SXB.Para entendermos melhor, é necessário estudarmos os cinco Tipos de Consultas que a compõe:

Tipo 1

Identifica o Nome da Consulta e o Alias do Arquivo a ser utilizado.Exemplo:

Campo Conteúdo DefiniçãoXB_ALIAS TST Nome atribuído à "Consulta Padrão" do Configurador.XB_TIPO 1 Tipo de Registro.XB_SEQ 01 Seqüência referente à utilização do Tipo1, sempre "01"XB_COLUNA DB Indica Consulta em um Arquivo do Banco de Dados.XB_DESCRI CLIENTES Título da Consulta.XB_CONTEM SA1 Alias do Arquivo à ser Consultado.

Tipo 2

Identifica as Opções no Rodapé da Consulta e as Ordens que serão utilizadas.Exemplo:

Page 47: ADVPL AP7

SIGAADVPL Advanced Protheus - 47

Anotações:

Campo Conteúdo DefiniçãoXB_ALIAS TST Nome da consulta.XB_TIPO 2 Tipo de Registro.XB_SEQ 01 Primeira Coluna do Rodapé (Pesquisar por:).XB_COLUNA 01 Utiliza a Ordem 01 do Arquivo.XB_DESCRI NOME Título do Rodapé.XB_CONTEM Não é utilizado no Registro de Tipo 2.

Tipo 3

Identifica que a Consulta terá uma opção, para Cadastramento de Novos Registros.Caso contrário, não deve-se utilizar Registro com o Tipo igual a 3.

Exemplo:

Campo Conteúdo DefiniçãoXB_ALIAS TST Nome da consulta.XB_TIPO 3 Tipo de Registro.XB_SEQ 01 Sempre "01".XB_COLUNA 01 Default (Sempre "01").XB_DESCRI CADASTRA NOVO Função que habilita a opção de "Incluir".XB_CONTEM 01 Default (Sempre "01").

Tipo 4

Utilizado para a Montagem das Colunas do Browse.Exemplo:

Campo Conteúdo DefiniçãoXB_ALIAS TST Nome da Consulta.XB_TIPO 4 Tipo de Registro.XB_SEQ 01 Tela do Browse.XB_COLUNA 01 Coluna do Browse.XB_DESCRI NOME Nome da Coluna.XB_CONTEM A1_NOME Conteúdo da Coluna.

Tipo 5

Utilizado para identificar o Retorno da Consulta.Exemplo:

Campo Conteúdo DefiniçãoXB_ALIAS TST Nome da Consulta.XB_TIPO 5 Tipo de Registro.XB_SEQ 01 Seqüência de Retorno, poderão ser utilizadas até 5.XB_COLUNA Não é utilizado.XB_DESCRI Não é utilizado.XB_CONTEM SA1->A1_COD Retorno da Consulta.

Page 48: ADVPL AP7

48 - SIGAADVPL Advanced Protheus

Anotações:

Tipo 6

Utilizado para montar o Filtro da Consulta.Exemplo:

Campo Conteúdo DefiniçãoXB_ALIAS TST Nome da Consulta.XB_TIPO 6 Tipo de Registro.XB_SEQ 01 Seqüência do Filtro, poderá existir apenas 1.XB_COLUNA Não é utilizado.XB_DESCRI Não é utilizado.XB_CONTEM SA1->A1_TIPO=="R" Sintaxe (Xbase) utilizada na Criação do Filtro.

Exercício 50 � Como Criar Consultas Padrão, utilizando o Arquivo de Cadastro de Clientes:

1. Acesse o �Módulo Configurador�

2. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Base de Dados�;

3. Posicione com o cursor sobre a opção �Consultas Padrão� e clique na opção �Incluir�;

4. Na caixa �Tipo de Consulta�, marque a opção �Consulta Padrão�;

5. Na caixa �Informações�, informe os dados a seguir:

Consulta: TSTDescrição: Clientes

6. Clique na opção �Avançar�;

7. Na próxima tela, marque a opção �Habilitar Inclusão�;

8. No �Browse�, posicione com o cursor sobre o �Arquivo � SA1 Cadastro de Clientes�e clique na opção �Avançar�;

9. Na próxima tela, clique na opção �Adicionar Índice�, que se encontra abaixo da�Caixa Índices� à direita;

10. Posicione com o cursor sobre a �Primeira Chave de Índice� e confirme;

11. Repita a operação, selecionando agora a �Terceira Chave de Índice�;

12. Posicione com o cursor sobre a �Primeira Linha� e clique na opção �AdicionarColunas�, localizado ao lado direito da tela, na caixa �Colunas�,

13. No �Campo � Expressão�, clique na opção �Consultar Campos�, selecione o �Campo� A1_COD� e confirme;

14. No �Campo � Descrição�, clique na opção �Consultar Títulos�, selecione o �Título �Código� e confirme;

15. Confira os dados e confirme o �Cadastro�;

16. Clique novamente na opção �Adicionar Colunas�;

Page 49: ADVPL AP7

SIGAADVPL Advanced Protheus - 49

Anotações:

17. No �Campo � Expressão�, clique na opção �Consultar Campos�, selecione o �Campo� A1_NOME� e confirme;

18. No �Campo � Descrição�, clique na opção �Consultar Títulos�, selecione o �Título �Nome� e confirme;

19. Confira os dados e confirme o �Cadastro�;

20. Voltando para a caixa �Índices�, ao lado esquerda da tela, posicione com o cursorsobre a �Segunda Linha�;

21. Clique na opção �Adicionar Colunas�, localizado ao lado direito da tela, na caixa�Colunas�;

22. No �Campo � Expressão�, clique na opção �Consultar Campos�, selecione o �Campo� A1_CGC� e confirme;

23. No �Campo � Descrição�, clique na opção �Consultar Títulos�, selecione o �Título �CNPJ/CPF� e confirme;

24. Confira os dados e confirme o �Cadastro�;

25. Clique novamente na opção �Adicionar Colunas�;

26. No �Campo � Expressão�, clique na opção �Consultar Campos�, selecione o �Campo� A1_NOME� e confirme;

27. No �Campo � Descrição�, clique na opção �Consultar Títulos�, selecione o �Título �Nome� e confirme;

28. Confira os dados e confirme o �Cadastro�;

29. Clique na opção �Avançar�;

30. No �Campo � Filtro�, informe a �Sintaxe� a seguir:

SA1->A1_TIPO==�R�

31. Clique na opção �Adicionar Retorno� no rodapé da tela;

32. Clique na opção �Consultar Campos�, selecione a opção �SA1->A1_COD�, confirmeo cadastro e clique na opção �Finalizar�;

33. Clique na opção �Pesquisar�, no �Campo � Procurar Por:�, informe �TST� e confirme;

34. Assim que a �Pesquisa� for concluída, clique na opção �Preview�, para verificarcomo ficará a �Consulta�, quando for utilizada na prática;

35. Cancele a �Visualização� e saia do �Módulo de Faturamento�, clicando na opção�Sair�.

Obs.:Devido ao fato de já existir no arquivo uma �Consulta�, para o �Cadastro de Clientes�,tivemos que criar o �Identificador� desta consulta, utilizando a sigla �TST� apenas comosugestão, pois não podemos ter duas �Consultas� com o mesmo nome.

Page 50: ADVPL AP7

50 - SIGAADVPL Advanced Protheus

Anotações:

Exercício 51 � Entendendo o que Aconteceu:

1. Dê um duplo clique no �Atalho� do �Remote�;

2. No �Campo � Programa Inicial�, informe �APSDU� e confirme

3. Será solicitado um �Usuário (Administrador)� e �Senha (Em Branco)�;

4. Selecione as seguintes opções �File� + �Open�;

5. Selecione o �Driver � DBF(DBFCDXADS/DBFCDXAX)�;

6. Clique na opção �+� da opção �Servidor� ao lado direito da caixa e posicione com ocursor sobre a pasta �\Sigaadv\�;

7. Posicione com o cursor sobre o �Arquivo � SXB990.dbf�, que se encontra ao ladodireito da caixa;

8. Selecione as seguintes opções �Find� + �Seek�;

9. No �Campo � Expression�, informe �TST� e confirme;

10. Assim que a �Pesquisa� for concluída, verifique o resultado e saia do �Aplicativo�.

Exercício 52 � Como Criar Campos no Sistema, para utilização das Consultas Padrão:

1. Acesse o �Módulo Configurador�;

2. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Base de Dados�;

3. Ao lado esquerdo da tela, posicione com o cursor sobre a opção �Dicionário deDados� e clique na opção �Pesquisar�;

4. No �Campo de Pesquisas�, informe �SC4� e confirme;

5. Posicionando com o cursor sobre a pasta �Campos� e na opção �Editar�, clique naopção �Incluir�;

6. Na pasta �Campo�, informe os dados a seguir:

Campo: C4_CLIENTETipo: 1=CaracterTamanho: 6Formato: @!Contexto: 1=RealPropriedade: 1=Alterar

7. Na pasta �Informações�, informe os dados a seguir:

Título: ClienteDescrição: Código do clienteHelp: Informe o código do cliente

Page 51: ADVPL AP7

SIGAADVPL Advanced Protheus - 51

Anotações:

8. Na pasta �Opções�, informe os dados a seguir:

Cons. Padrão: TST - Clientes

9. Na pasta �Uso�, marque as seguintes opções �Usado� e �Browse�;

10. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos�, marcada;

11. Confira os dados e confirme a �Criação do Campo�;

12. Clique na opção �Atualizar base de dados�, confirme o �Processo de Atualização�,saia do �Cadastro de Base de Dados� e do �Módulo Configurador�.

Exercício 53 � Como Testar Consultas Padrão:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualizações� + �Cenários de Vendas� + �Previsãode Vendas�;

3. Clique na opção �Incluir�, posicione com o cursor sobre o �Campo � Cliente� e clique

na opção ou pressione a tecla <F3>;

Obs.:Verifique que a �Consulta Padrão�, para o arquivo de �Cadastro de Clientes�, estáfuncionando perfeitamente4. Saia do �Cadastro de Clientes� e do �Módulo de Faturamento�.

Exercício 54 � Como Criar Consultas Padrão, para Arquivos Customizados:

1. Acesse o �Módulo Configurador�;

2. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Base de Dados�;

3. Posicione com o cursor sobre a opção �Consultas Padrão� e clique na opção �Incluir�;

4. Na caixa �Tipo de Consulta�, marque a opção �Consulta Padrão�;

5. Na caixa �Informações�, informe os dados a seguir:

Consulta: SZ1Descrição: Softwares

6. Clique na opção �Avançar�;

7. Na próxima tela, marque a opção �Habilitar Inclusão�;

8. No �Browse�, posicione com o cursor sobre o �Arquivo � SZ1 Cadastro de Softwares�e clique na opção �Avançar�;

Page 52: ADVPL AP7

52 - SIGAADVPL Advanced Protheus

Anotações:

9. Na próxima tela, clique na opção �Adicionar Índice�, que se encontra abaixo dacaixa �Índices� à direita;

10. Posicione o cursor sobre a �Primeira Chave de Índice� e confirme;

11. Repita a operação, selecionando agora a �Segunda Chave de Índice�;

12. Posicione o cursor sobre a �Primeira Linha� e clique na opção �Adicionar Colunas�localizado ao lado direito da tela, na caixa �Colunas�,

13. No �Campo � Expressão�, clique na opção �Consultar Campos�, selecione �Campo� Z1_CODIGO� e confirme;

14. No �Campo � Descrição�, clique na opção �Consultar Títulos�, selecione o �Título �Código�, confirme e confirme o cadastro também;

15. Clique novamente no botão �Adicionar Colunas�;

16. No �Campo � Expressão�, clique na opção �Consultar Campos�, selecione o �Campo� Z1_NOME� e confirme;

17. No �Campo � Descrição�, clique na opção �Consultar Títulos�, selecione o �Título �Nome�, confirme e confirme o cadastro também;

18. Voltando para a caixa �Índices�, ao lado esquerda da tela, posicione com o cursorsobre a �Segunda Linha�;

19. Clique na opção �Adicionar Colunas�, localizado ao lado direito da tela, na caixa�Colunas�,

20. No �Campo � Expressão�, clique na opção �Consultar Campos�, selecione o �Campo� Z1_NOME� e confirme;

21. No �Campo � Descrição�, clique na opção �Consultar Títulos�, selecione o �Título �Nome�, confirme e confirme o cadastro também;

22. Clique novamente no botão �Adicionar Colunas�;

23. No �Campo � Expressão�, clique na opção �Consultar Campos�, selecione o �Campo� Z1_CODIGO� e confirme;

24. No �Campo � Descrição�, clique na opção �Consultar Títulos�, selecione o �Título �Código�, confirme e confirme o cadastro também;

25. Clique na opção �Avançar�;

26. Clique na opção �Adicionar Retorno� no rodapé da tela;

27. Clique na opção �Consultar Campos�, selecione a opção �SZ1->Z1_CODIGO�,confirme o cadastro e clique na opção �Finalizar�;

28. Clique na opção �Pesquisar�, no �Campo � Procurar Por:�, informe �SZ1� e confirme;

29. Assim que a �Pesquisa� for concluída, clique na opção �Preview�, para verificarcomo ficará a consulta quando for utilizada na prática.

30. Cancele a �Visualização� e clique na opção �Sair�.

Page 53: ADVPL AP7

SIGAADVPL Advanced Protheus - 53

Anotações:

Exercício 55 � Como Criar Campos no Sistema, para utilização de Consultas Padrão:

1. Acesse o �Módulo Configurador�;

2. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Base de Dados�;

3. Ao lado esquerdo da tela, posicione com o cursor sobre a opção �Dicionário deDados� e clique na opção �Pesquisar�;

4. No �Campo de Pesquisas�, informe �SZ2� e confirme;

5. Posicionando o cursor sobre a pasta �Editar�, clique na opção �Campos�;

6. Clique na opção �Incluir�;

7. Na pasta �Campo�, informe os dados a seguir:

Campo: Z2_SOFTTipo: 1=CaracterTamanho: 6Formato: @!Contexto: 1=RealPropriedade: 1=Alterar

8. Na pasta �Informações�, informe os dados a seguir:

Título: SoftwareDescrição: Código do softwareHelp: Informe o código do software

9. Na pasta �Opções�, informe os dados a seguir:

Cons. Padrão: SZ1- Softwares

10. Na pasta �Validações�, informe os dados a seguir:

Val. Usuário: VAZIO().OR.EXISTCPO("SZ1")

11. Na pasta �Uso�, marque as seguintes opções �Usado� e �Browse�;

12. Na pasta �Módulos�, deixe a opção �Utilizado por todos os módulos� marcada;

13. Confira os dados e confirme a �Criação do Campo�;

14. Clique na opção �Atualizar base de dados�, confirme e saia do cadastro e do �MóduloConfigurador�.

Exercício 56 � Como Testar Consultas Padrão:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualizações� + �Cadastros� + �Exerc07�;

3. Clique na opção �Incluir�, posicione com o cursor sobre o �Campo � Software� e

clique na opção ou pressione a tecla <F3>;

Page 54: ADVPL AP7

54 - SIGAADVPL Advanced Protheus

Anotações:

Obs.:Verifique que a �Consulta Padrão�, para o arquivo de �Cadastro de Softwares�, estáconfigurada;4. Após realizar os �Testes�, saia do cadastro e do �Módulo de Faturamento�.

O que você aprendeu neste capítulo

Neste capítulo, você aprendeu a configurar as Consultas Padrão, para os Arquivos.

Próximo Passo

No próximo capítulo, iremos aprender a criar Relatórios para os cadastros, verificaremos também,o Arquivo de Perguntas, para a Configuração dos Parâmetros dos mesmos.

Page 55: ADVPL AP7

SIGAADVPL Advanced Protheus - 55

Anotações:

RELATÓRIOS

O que você irá aprender neste capítulo

Neste capítulo, aprenderemos a criar Relatórios Customizados.

Rotinas abordadas

� Funções, para Relatórios:� SetPrint();� SetDefault();� Pergunte();� SetRegua();� RptStatus();� IncRegua().

� Criação de Relatórios Customizados;� Criação de Relatórios com Relacionamento;� Configuração do Arquivo de Perguntas e Respostas.

SetPrint()

Essa Função é a responsável pela criação da tela do dispositivo de impressão dos relatórios, montandoa interface com o usuário.

Sintaxe:SetPrint(ExpC2, ExpC3, ExpC4, ExpC5, ExpC6, ExpC7, ExpC8, ExpL1, ExpA1, ExpL2, ExpC9).Parâmetros:ExpC2 = Alias do Arquivo Principal (Se existir);ExpC3 = Nome Padrão do Relatório;ExpC4 = Nome do Grupo de Perguntas;ExpC5 .. ExpC8 = Descrição do Relatório;ExpL1 = Habilita o Dicionário de Dados:

.T. => Habilita (Só utilizar em conjunto com a Função ImpCadast);

.F. => Desabilita.ExpA1 = Array contendo as Ordens de Indexação do Arquivo Principal;ExpL2 = Habilita a Alteração da Compressão do Relatório;

.T. => Habilita;

Page 56: ADVPL AP7

56 - SIGAADVPL Advanced Protheus

Anotações:

.F. => Desabilita.ExpC9 = Classificação do Relatório por Tamanho ( "G", "M" ou "P" ):

P = 80 colunas;M = 132 colunas;G = 220 colunas.

SetDefault()

Esta Função permite Habilitar os Padrões definidos pela Função Set Print().Sintaxe:SetDefault(Array,Alias).Parâmetros:Array = Array aReturn, preenchido pelo SetPrint;Array1 = Reservado para o Formulário;Array2 = Reservado para Nº de Vias;Array3 = Destinatário;Array4 = Formato (1�Comprimido, 2�Normal);Array5 = Mídia a ser Descarregada (1�Comprimido, 2�Normal);Array6 = Porta da Printer ou Arquivo (1�LPT1, 4�Com1);Array7 = Expressão ou Filtro de Dados;Array8 = Ordem a ser Selecionada;Array9 = 1º Campo a Processar;Array10 = 2º Campo a Processar;Array11 = 3º Campo a Processar;ArrayN = 4º Campo a Processar;Alias = Alias do Arquivo a ser Impresso.

Pergunte()

Esta Função permite acessar e editar um Grupo de Perguntas de Programas, baseando-se no Arquivode Perguntas e Respostas do Sistema (Sx1), conhecido também como Parâmetros de Relatórios.Mostra uma tela contendo um Lote de Parâmetros a serem respondidos e em seguida confirmadospelo usuário.

Sintaxe:Pergunte(cPergunta,lAsk).Parâmetros:cPergunta = Código da Pergunta no SX1 conforme o Programa / Nome do Grupo de

Perguntas;

Page 57: ADVPL AP7

SIGAADVPL Advanced Protheus - 57

Anotações:

lAsk = Mostrar a Tela de Perguntas ou simplesmente carrega os Valores Default..F. = Devolve Conteúdo da Variáveis, não apresentando a Janela de Per

guntas;.T. = Permite Alteração das Variáveis apresentando a Janela.

SetRegua()

Inicializa a Régua Padrão, para acompanhar a Evolução do Processamento dos Relatórios.Sintaxe:SetRegua(n1).Parâmetros:<n1> = Numérico, Número de registros que serão processados.

RptStatus()

Executa a Função de Detalhes do Relatório, ou seja, é a Impressão da Página propriamente dita.Sintaxe:RptStatus(b1).Parâmetros:<b1> = Bloco de Código que define a Função a ser executada.Comentários:Pode ser utilizada com o Parâmetro:RptStatus( { | | ("Nome da Função") } )

IncRegua()

Incrementa a Régua Padrão de Processamento em Relatórios, ou seja, é a responsável por sincronizara Barra de Progressão de acordo com o número de registros selecionados para a impressão.

Sintaxe:IncRegua().Parâmetros:Nil.

Relatórios

A Criação de Relatórios no Advanced Protheus é muito facilitado pelo Assistente de Código, porémsempre haverá a necessidade de Complementos Adicionais, pois a ferrramenta cria apenas o FontePadrão.

Page 58: ADVPL AP7

58 - SIGAADVPL Advanced Protheus

Anotações:

Exercício 57 � Como Criar Relatórios, para Cadastro de Softwares, através do Assistentede Código da Ferramenta � IDE:1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Ferramentas� + �Assistente de Código� + �Relatório�;

3. Clique na opção �Avançar>>�;

4. Selecione a opção �Arquivo Padrão�;

5. No �Campo � Alias�, informe �SZ1�;

6. Selecione a opção �Utiliza Índice Padrão�;

7. No �Campo � Ordem�, informe �1� e clique na opção �Avançar>>�;

8. No �Campo � Chave�, informe �RSZ1�;

9. Clique na opção "Avançar>>";

10. No �Campo � Título�, informe �Relatório de Softwares�;

11. No �Campo � Cabec1�, informe �Código Nome;

12. No �Campo � Cabec2�, informe �------ ---------------�;

13. Selecione a opção �Normal�;

14. No �Campo � Tamanho�, selecione �80 Colunas�;

15. Na pasta �Ordem�, posicione com o cursor sobre o �Campo � Ordem�, informe�Código� e clique na opção �adicionar�;

16. Na sequência, informe também �Nome� e clique na opção �adicionar�;

17. Nas pastas �Habilitações�, deixe tudo selecionado e clique na opção �Finalizar�.

Exercício 58 � Como realizar Alterações necessárias nos Fontes:

1. Realize as �Alterações� necessárias, seguindo o exemplo a seguir, de acordo com o�Texto em Negrito�:

#Include �rwmake.ch�

*****************************************************************************

* Programa | RPAD | Autor | Ferramenta IDE | Data | 99/99/99

*****************************************************************************

* Descrição | Código gerado pelo Advanced Protheus7 IDE.

*****************************************************************************

Page 59: ADVPL AP7

SIGAADVPL Advanced Protheus - 59

Anotações:

User Function Exerc18

Private cString

Local aOrd := {}

Private CbTxt := ��

Local cDesc1 := �Este programa tem como objetivo imprimir relatórios�

Local cDesc2 := �de acordo com os parâmetros informados pelo usuário.�

Local cDesc3 := �Cadastro de Software�

Local cPict := ��

Private lEnd := .F.

Private lAbortPrint := .F.

Private limite := 80

Private tamanho := �P�

Private nomeprog := �Exerc18� // Coloque aqui o Nome do Programa paraimpressão no cabeçalho

Private nTipo := 18

Private aReturn := { �Zebrado�, 1, �Administração�, 2, 2, 1, ��, 1}

Private nLastKey := 0

Private cPerg := �RSZ1� // Nomo do Grupo de Perguntas

Local titulo := �Cadastro de Software�

Local nLin := 80

Local Cabec1 := �Codigo Nome�

Local Cabec2 := �������� �����

Private cbtxt := Space(10)

Private cbcont := 00

Private CONTFL := 01

Private m_pag := 01

Local imprime := .T.

Private wnrel := �Exerc18� // Coloque aqui o Nome do Arquivo usado paraimpressão em disco.

Private cString := �SZ1�

dbSelectArea(�SZ1�)

dbSetOrder(1)

pergunte(cPerg,.F.)

Page 60: ADVPL AP7

60 - SIGAADVPL Advanced Protheus

Anotações:

*****************************************************************************

* Monta a interface padrão com o usuário...

*****************************************************************************

wnrel := SetPrint(cString,NomeProg,cPerg,@titulo,cDesc1,

cDesc2,cDesc3,.T.,aOrd,.T.,Tamanho,,.T.)

If nLastKey == 27

Return

Endif

SetDefault(aReturn,cString)

If nLastKey == 27

Return

Endif

nTipo := If(aReturn[4]==1,15,18)

*****************************************************************************

* Processamento. RPTSTATUS monta janela com a régua de processamento.

*****************************************************************************

RptStatus({|| RunReport(Cabec1,Cabec2,Titulo,nLin) },Titulo)

RETURN

*****************************************************************************

* Função | RUNREPORT | Autor | Advanced Protheusx IDE | Data | 99/99/99

*****************************************************************************

* Descrição | Função auxiliar chamada pela RPTSTATUS. A função RPTSTATUS º

* | monta a janela de processamento

*****************************************************************************

Static Function RunReport(Cabec1,Cabec2,Titulo,nLin)

Local nOrdem

dbSelectArea(cString)

dbSetOrder(1)

*****************************************************************************

| * SETREGUA -> Indica quantos registros serão processados para a régua

*****************************************************************************

SetRegua(RecCount())

Page 61: ADVPL AP7

SIGAADVPL Advanced Protheus - 61

Anotações:

*****************************************************************************

* Posicionamento do primeiro registro e loop principal.

* Pode-se criar a lógica da seguinte maneira:

* Posiciona-se na filial corrente e processa enquanto a filial do registro for a filial

* corrente.

* Por exemplo, substitua o dboTop() e o While !EOF() abaixo pela sintaxe:

* dbSeek(xFilial(�SA1�))

* While !EOF() .And. xFilial(�SA1�) == A1_Filial

*****************************************************************************

* O tratamento dos parâmetros deve ser realizado dentro da lógica do seu relatório.

* Geralmente a chave principal e a filial (Isto vale principalmente se o arquivo for

* um arquivo padrão). Posiciona-se o primeiro registro pela filial + pela chave

* secundária (código por exemplo), e processa enquanto estes valores estiverem dentro

* dos parâmetros definidos. Suponha por exemplo o uso de dois parâmetros:

* mv_par01 -> Indica o código inicial a processar

* mv_par02 -> Indica o código final a processar

* dbSeek(xFilial(�SA1�)+mv_par01,.T.) // Posiciona no 1º reg. satisfatório ³

* While !EOF() .And. xFilial(�SA1�) == A1_Filial .And. A1_Cod <= mv_par02 ³

* Assim o processamento ocorrerá enquanto o código do registro posicionado for

* menor ou igual ao parâmetro mv_par02, que indica o código Limite

* para o processamento. Caso existam outros parâmetros a serem checados, isto

* deve ser realizado dentro da estrutura de laço (WHILE):

* mv_par01 -> Indica o código inicial a processar

* mv_par02 -> Indica o código final a processar

* mv_par03 -> Considera qual estado?

* dbSeek(xFilial(�SA1�)+mv_par01,.T.) // Posiciona no 1º reg. satisfatório

* While !EOF() .And. xFilial(�SA1�) == A1_Filial .And. A1_Cod <= mv_par02

* If A1_EST <> mv_par03

* dbSkip()

* Loop

* Endif

*****************************************************************************

Page 62: ADVPL AP7

62 - SIGAADVPL Advanced Protheus

Anotações:

dbGoTop()

DBSEEK(xFilial(�SZ1�)+mv_par01,.T.)

While !EOF() .and. SZ1->Z1_Codigo <= MV_Par02

*****************************************************************************

* Verifica o cancelamento pelo usuário...

*****************************************************************************

If lAbortPrint

@nLin,00 PSAY �*** Cancelado pelo Operador ***�

Exit

Endif

*****************************************************************************

* Impressão do cabeçalho do relatório. . .

*****************************************************************************

If nLin > 55 // Salto de Página. Neste caso o formulário tem 55 linhas...

Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)

nLin := 8

Endif

* Coloque aqui a lógica da impressão do seu programa.Utilize PSAY para

saída na impressora. Por exemplo:*

@nLin,00 PSAY SA1->A1_Cod

nLin := nLin + 1 // Avança a linha de impressão

@ nLin, 01 Psay SZ1->Z1_Codigo

@ nLin, 08 Psay SZ1->Z1_Nome

dbSkip() // Avança o ponteiro do registro no arquivo

Incregua()

EndDo

*****************************************************************************

* Finaliza a execucao do relatório...

*****************************************************************************

SET DEVICE TO SCREEN // Retorna para a Tela

If aReturn[5]==1 // Se impressão em disco, chama o gerenciador de impressão...

dbCommitAll()

Page 63: ADVPL AP7

SIGAADVPL Advanced Protheus - 63

Anotações:

SET PRINTER TO

OurSpool(wnrel)

Endif

MS_FLUSH() // Limpa o Buffer de Impressão

Return

2. Confira os dados, salve o �Programa� com o nome de �Exerc18�;

3. Adicione ao �Projeto� em uso e �Compile-o�.

4. Adicione-o ao menu do �Modulo Faturamento� e teste.

Perguntas e Respostas

Todos os Relatórios existentes no Advanced Protheus necessitam de Perguntas, para imprimircorretamente os dados, ou seja, é necessário Configurarmos um Arquivo, para parametrizar o quedesejamos imprimir.O Arquivo responsável por essa Configuração é o (Sx1) e ele servirá tanto para as Perguntas eRespostas de Relatórios, quanto para as Rotinas de Processamentos.

Exercício 59 � Como Criar Perguntas:

1. Ainda no �Módulo Configurador�;

2. Selecione as seguintes opções �Base de Dados� + �Dicionário� + �Base de Dados�;

3. Posicione com o cursor sobre a opção �Perguntas� e clique na opção �Incluir�;

4. No �Campo � Grupo�, informe �RSZ1�;

5. Nas �Linhas Abaixo�, crie as perguntas a seguir:

Ordem Pergunta Tipo Tamanho Decimal Objeto Consulta Padrão (Edit)01 De Código? 1=Caracter 6 0 1=Edit SZ1 - Softwares02 Até Código? 1=Caracter 6 0 1=Edit SZ1 - Softwares

6. Confira os dados e confirme a �Criação das Perguntas�;

7. Clique na opção �Pesquisar�;

8. No �Campo � Procurar por:�, informe �RSZ1� e confirme;

9. Verifique se as �Perguntas�, foram incluídas corretamente no �Arquivo�;

10. Após a verificação, saia do cadastro e do �Módulo Configurador�.

Page 64: ADVPL AP7

64 - SIGAADVPL Advanced Protheus

Anotações:

Exercício 60 � Entendendo o que Aconteceu:

1. Dê um duplo clique no �Atalho� do �Remote�;

2. No �Campo � Programa Inicial�, informe �APSDU� e confirme

3. Será solicitado um �Usuário (Administrador)� e �Senha (Em Branco)�;

4. Selecione as seguintes opções �File� + �Open�;

5. Selecione o �Driver � DBF (DBFCDXADS/DBFCDXAX)�;

6. Clique na opção �+� da opção �Servidor� ao lado direito da caixa e posicione com ocursor sobre a pasta �\Sigaadv\�;

7. Posicione com o cursor sobre o �Arquivo � SX1990.dbf�, que se encontra ao ladodireito da caixa;

8. Selecione as seguintes opções �Find� + �Seek�;

9. No �Campo � Expression�, informe �RSZ1� e confirme;

10. Assim que a �Pesquisa� for concluída, verifique o �Resultado� e saia do �Aplicativo�.

Exercício 61 � Como Testar Relatórios:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Relatórios� + �Cadastros� + �Exerc18�;

3. Na pasta �Impressão�, selecione a opção �Em Disco�;

4. Clique na opção �Parâmetros� ao lado direito da tela e defina a impressão dos registros,informando os dados a seguir:

De Código?: 000001 (F3 Disponível)Até Código?: 000003 (F3 Disponível)

5. Confira os dados, confirme os �Parâmetros� e a �Emissão do Relatório�, para�Verificação do Resultado�.

Dica:Para anular a �Impressão dos Parâmetros dos Relatórios�, acesse o �Cadastro de Parâmetros�,no �Módulo Configurador� e configure os �Parâmetros � MV_IMPSX1, MV_SALTPAG eMV_CANSALT�, com o �Conteúdo� igual a �N�, dessa maneira as �Perguntas�, não serãomais impressas e também não haverá �Saltos� e tampouco emissão de �Páginas em Branco�.

Page 65: ADVPL AP7

SIGAADVPL Advanced Protheus - 65

Anotações:

Exercício 62 � Como Criar Relatórios, para Cadastros de Usuários, com utilização de Matriz,para Criação de Perguntas automaticamente:1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Ferramentas� + �Assistente de Código� + �Relatório�;

3. Clique na opção �Avançar>>�;

4. Selecione a opção �Arquivo Padrão�;

5. No �Campo � Alias�, informe �SZ2�;

6. Selecione a opção �Utiliza Índice Padrão�;

7. No �Campo � Ordem�, informe �1� e clique na opção �Avançar>>�;

8. No �Campo � Chave�, informe �RSZ2�;

9. Clique na opção "Avançar>>";

10. No �Campo � Título�, informe �Relatório de Usuários�;

11. No �Campo � Cabec1�, informe �Código Nome;

12. No�Campo � Cabec2�, informe �------ ---------------�;

13. Selecione a opção �Normal�;

14. No �Campo � Tamanho�, selecione �80 Colunas�;

15. Na pasta �Ordem�, posicione com o cursor no �Campo � Ordem�, informe �Código�e clique na opção �adicionar�;

16. Na sequência, informe também o �Nome� e clique na opção �adicionar�;

17. Nas pastas �Habilitações�, deixe tudo selecionado e clique na opção �Finalizar�.

Exercício 63 � Como realizar Alterações necessárias nos Fontes e criar Funções, para aCriação de Perguntas automaticamente:1. Realize as �Alterações� necessárias, seguindo o exemplo do relatório anterior;

2. Na seqüência, crie a seguinte �Função�, logo abaixo da �Última Linha� do fonte dorelatório:

*****************************************************************************

* Função | VALIDPERG | Autor | Ferramenta IDE | Data | 99/99/99

* Descrição | Verifica a existência das perguntas criando-as caso seja necessário

* (caso não existam).

*****************************************************************************

Page 66: ADVPL AP7

66 - SIGAADVPL Advanced Protheus

Anotações:

* Uso | Programa principal

*****************************************************************************

Static Function ValidPerg

Local _sAlias := Alias()

Local aRegs := {}

Local i,j

dbSelectArea(�SX1�)

dbSetOrder(1)

cPerg := PADR(cPerg,6)

//Grupo/Ordem/Pergunta/Variavel/Tipo/Tamanho/Decimal/Presel/GSC/Valid/Var01/

Def01/Cnt01/Var02/Def02/Cnt02/Var03/Def03/Cnt03/Var04/Def04/Cnt04/Var05/Def05/Cnt05

aAdd(aRegs,{cPerg,�01",�DE�,�DE�,�DE�,�mv_ch1",�C�,6,0,0,�G�,��,�

mv_par01",��,��,��,��,��,��,��,��,��,��,��,��,��,��})

aAdd(aRegs,{cPerg,�02",�ATE�,�ATE�,�ATE�,�mv_ch2",�C�,6,0,0,�G�,��,�

mv_par02",��,��,��,��,��,��,��,��,��,��,��,��,��,��})

For i:=1 to Len(aRegs)

If !dbSeek(cPerg+aRegs[i,2])

RecLock(�SX1�,.T.)

For j:=1 to FCount()

If j <= Len(aRegs[i])

FieldPut(j,aRegs[i,j])

Endif

Next

MsUnlock()

Endif

Next

dbSelectArea(_sAlias)

Return

3. Insira a �Chamada da Função� no programa, após a �Linha � 55�, antes da �Chamadada Função � Pergunte(cPerg,.F.)�, como no exemplo a seguir:

dbSelectArea("SZ1")

dbSetOrder(1)

Page 67: ADVPL AP7

SIGAADVPL Advanced Protheus - 67

Anotações:

ValidPerg()

pergunte(cPerg,.F.)

4. Confira os dados, salve o �Programa�, com o nome de �Exerc19�, adicione ao �Projeto�e �Compile-o� e teste.

Exercício 64 � Como Criar Relatórios com Relacionamento entre Arquivos:

1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Ferramentas� + �Assistente de Código� + �Relatório�;

3. Clique na opção �Avançar>>�;

4. Selecione a opção �Arquivo Padrão�;

5. No �Campo � Alias�, informe �SB1�;

6. Selecione a opção �Utiliza Índice Padrão�;

7. No �Campo � Ordem�, informe �1� e clique na opção �Avançar>>�;

8. No �Campo � Chave�, informe �RSB1�;

9. Clique na opção "Avançar>>";

10. No �Campo � Título�, informe �Relatório de Produtos x Previsão�;

11. No �Campo � Cabec1�, informe �Código Descrição Vlr. Previsão;

12. No �Campo � Cabec2� informe �--------------- ------------------------------ --------------�;

13. Selecione a opção �Normal�;

14. No �Campo � Tamanho�, selecione �80 Colunas�;

15. Na pasta �Ordem�, posicione com o cursor sobre o �Campo � Ordem�, informe�Código� e clique na opção �adicionar�;

16. Nas pastas �Habilitações�, deixe tudo selecionado e clique na opção �Finalizar�.

Exercício 65 � Como realizar Alterações necessárias nos Programas:

1. Realize as �Alterações� necessárias, seguindo o exemplo do relatório anterior,utilizando também a �Função � Validperg()�;

2. Imprima os seguintes registros, como no exemplo a seguir:

@nLin,01 Psay SB1->B1_COD

@nLin,17 Psay SB1->B1_DESC

@nLin,50 Psay Posicione("SC4",1,Xfilial("SC4")+SB1->B1_COD,"C4_VALOR")

Page 68: ADVPL AP7

68 - SIGAADVPL Advanced Protheus

Anotações:

3. Confira os dados, salve o �Programa�, com o nome de �Exerc20�, adicione ao �Projeto�em uso e �Compile-o�.

Dica:A �Função � Posicione()� é responsável pelo relacionamento entre os arquivos.

Exercício 66 � Como cadastrar Produtos, para verificar Relacionamentos:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualização� + �Cadastros� + �Produtos�;

3. Clique na opção �Incluir� e informe os dados a seguir:

Código: 100.100-01Descrição: CANETA AZULTipo: MCUnidade: PCArmazém Pad: 01

Código: 100.200-01Descrição: CANETA VERMELHATipo: MCUnidade: PCArmazém Pad: 01

4. Confira os dados, confirme e saia do cadastro de �Produtos�.

Exercício 67 � Como cadastrar Previsões de Vendas, para verificar Relacionamentos:

1. Selecione as seguintes opções �Atualização� + �Cenários de Venda� + �Previsão deVendas�;

2. Clique na opção �Incluir� e informe os dados a seguir:

Produto: 100.100-01Almoxarifado: 1Quantidade: 1,00Valor: 5,00

Produto: 100.200-01Almoxarifado: 1Quantidade: 1,00Valor: 10.00

3. Confira os dados, confirme e saia do cadastro de �Previsões de Vendas�.

4. Teste o relatório com os relacionamentos criados.

Page 69: ADVPL AP7

SIGAADVPL Advanced Protheus - 69

Anotações:

O que você aprendeu neste capítulo

Neste capítulo, você aprendeu a criar Relatórios Personalizados com a utilização de um ou maisArquivos Relacionados, através de Funções da própria linguagem.

Próximo Passo

No próximo capítulo, iremos relembrar tudo que vimos até o momento, através de exercícios práticose rotinas utilizadas no dia a dia em customizações.

Page 70: ADVPL AP7

70 - SIGAADVPL Advanced Protheus

Anotações:

EXERCÍCIOS

O que você irá aprender neste capítulo

Neste capítulo, iremos relembrar tudo que vimos até o momento através de Exercícios de Fixação.Estes Exercícios abrangem todos os tópicos analisados até o momento e visam fixar os exemplospropostos em curso.

Rotinas abordadas

� Criação de Arquivos Customizados;� Configuração e Validação de Campos;� Criação de Índices;� Funções, para Cadastros;� Configuração de Consultas Padrão;� Criação de Relatórios;� Configuração do Arquivo de Perguntas e Respostas.

Exercício 68 � Exercícios Complementares (1):

� Desenvolva uma �Customização�, que deverá ser implementada no menu do �Módulode Faturamento�, utilizando a �Função � AxCadastro()� de acordo com as seguintesnecessidades:

1. Um �Cadastro de Visitantes � (SZ5)�, o nome do programa deverá ser �Exerc21�, quepossua as principais informações sobre os mesmos, sendo que:

� O �Código do Cadastro�, deverá ser gerado automaticamente;

� Deverá existir um �Campo�, para informar a qual �Setor� o mesmo pertence(Deverá ser criada uma �Lista de Opções�), como por exemplo:�1=Administração; 2=Comercial; 3=Industrial�;

� A �Pesquisa do Cadastro�, deverá disponibilizar a �Consulta por Código� e �Nome�;

� O �Nome do Visitante e da Empresa�, deverão ser de �PreenchimentoObrigatório�;

� Um �Relatório� para emitir os dados, como por exemplo: �Código, Nome eEmpresa�. O nome do relatório deverá ser �Exerc21r�.

Page 71: ADVPL AP7

SIGAADVPL Advanced Protheus - 71

Anotações:

Exemplo de Estrutura:

Campo Tipo Tamanho TítuloZ5_CODIGO Caracter 6 CodigoZ5_NOME Caracter 15 NomeZ5_EMPRESA Caracter 15 EmpresaZ5_SETOR Caracter 1 SetorZ5_CARGO Caracter 10 CargoZ5_RAMAL Caracter 4 Ramal

2. Desenvolva um �Cadastro de Controle de Visitantes � (SZ6)�, o nome do programadeverá ser �Exerc22�, para controlar as pessoas que estão tendo acesso a empresasendo que:

� O �Código do Cadastro�, deverá ser gerado automaticamente;

� Um �Campo�, para identificar o �Status do Visitante�, dentro da empresa (Atravésde uma Lista de Opções), como por exemplo: �E=Entrada; S=Saída�;

� Deverá existir um �Campo�, para controlar o �Motivo da Visita (Através de umaLista de Opções)�, como por exemplo: �1=Pessoal; 2=Profissional�;

� A �Pesquisa do Cadastro�, deverá disponibilizar a consulta por �Código, Nome eData de Entrada�;

� Deverá existir um �Campo�, para gravar o �Nome do Operador� do sistema, omesmo deverá ser preenchido automaticamente.

� Deverá existir um �Campo� relacionado a uma �Consulta Padrão�, para acessaro �Cadastro de Visitantes�, essa consulta deverá possuir no �Browse� os campos�Código, Nome e Setor�, disponíveis para �Visualização�;

� �Criação de Campos�, para controlar a �Hora, Data de Entrada e Saída�, sendoque os �Dados de Entrada�, deverão ser preenchidos automaticamente pelo sistema;

� Um �Relatório�, para emitir os dados, como por exemplo: �Código, Operador,Código do Visitante, Data de Entrada, Data de Saída e Motivo da Visita�. O nome dorelatório deverá ser �Exerc22r�.

Exemplo da Estrutura:

Campo Tipo Tamanho TítuloZ6_CODIGO Caracter 6 CódigoZ6_OPER Caracter 15 OperadorZ6_VISIT Caracter 6 VisitanteZ6_DTENT Data 8 Dt. EntradaZ6_HRENT Caracter 5 Hr. EntradaZ6_DTSAIDA Data 8 Dt. SaídaZ6_HRSAIDA Caracter 5 Hr. SaídaZ6_MOTIVO Caracter 1 MotivoZ6_STATUS Caracter 1 Status

3. Assim que toda a �Customização� estiver encerrada, acesse o �Módulo deFaturamento� e realize os respectivos �Testes�.

Page 72: ADVPL AP7

72 - SIGAADVPL Advanced Protheus

Anotações:

Exercício 69 � Exercícios complementares (2):

� Desenvolva uma �Customização�, que deverá ser implementada no menu do �Módulode Faturamento�, utilizando a �Função � Mbrowse()� de acordo com as seguintesnecessidades:

1. Um �Cadastro de Usuários (SZ7)�, o �Nome do Programa�, deverá ser �Exerc23�;

� Apenas o �Administrador�, deverá ter acesso ao mesmo.

2. Um �Cadastro de Controle�, para �Chamados Técnicos (SZ8)�, o nome do programadeverá ser �Exerc24�;

� Esse �Cadastro�, deverá controlar os �Chamados Técnicos�, realizados pelos�Usuários�;

� Cada �Usuário�, poderá visualizar apenas os seus �Chamados� cadastrados e o�Administrador� poderá �Visualizar Todos�, à fim de controlar os �Chamados Atendidose Solucionados�;

� O campo destinado para a �Solução do Problema�, poderá ser preenchido apenaspelo �Administrador�, porém o campo deverá estar disponível a todos os �Usuários�,para �Visualização�;

� Os �Registros�, deverão conter uma �Legenda� ao lado, informando se o �Chamadofoi Atendido (Vermelho) ou Não (Verde)�, deverá exisitir também um botão parainformar o significado de cada cor na legenda;

� Caso o �Chamado� já tenha sido atendido e o campo destinado a �Descrever aSolução� esteja preenchido, a �Exclusão do Registro�, não poderá ser �Concluída�;

� Criar um �Relatório�, para o �Cadastro de Chamados Técnicos�, sendo que a opçãopara impressão, deverá estar disponível na tela de cadastro, através de um botão, onome do programa deverá ser �Exerc24r�.

� Deverão ser impressos apenas os seguintes campos: �Código do Chamado, Nome doUsuário, Setor, Data do Chamado, Data da Solução, Problema e a Solução�.

3. Assim que toda a �Customização� estiver encerrada, acesse o �Módulo Configurador�e cadastre mais um �Usuário�, para que seja possível executarmos todos os �Testes�.

Obs.:Os �Arquivos, Campos e Programas�, para a realização do exercício acima já se encontramna base de dados, sendo necessário apenas a �Compilação e Análise� dos mesmos.

Page 73: ADVPL AP7

SIGAADVPL Advanced Protheus - 73

Anotações:

O que você aprendeu neste capítulo

Neste capítulo realizamos alguns Exercícios Complementares, recapitulando tudo que vimos até omomento, utilizando alguns exemplos práticos.

Próximo Passo

Neste capítulo aprenderemos como deverão ser criados os Pontos de Entradas e a implementaçãodos mesmos, junto as rotinas padrões do sistema.

Page 74: ADVPL AP7

74 - SIGAADVPL Advanced Protheus

Anotações:

PONTOS DE ENTRADAS

O que você irá aprender neste capítulo

Neste capítulo, aprenderemos a criar e implementar Pontos de Entradas, junto as rotinas padrões dosistemas.

Rotinas Abordadas

� Ferramentas de Auxílio na implementação de Pontos de Entradas (Quark);� Criação de Pontos de Entradas;� Implementação de Pontos de Entradas, junto as rotinas padrões.

Pontos de Entrada

O conceito utilizado para a Criação de um Ponto de Entrada é o mesmo da herança adotado naslinguagens para Banco de Dados, ou seja, (Store Procedures).São chamadas de Programas colocadas em pontos estratégicos nas funções padrões do sistema eque originalmente não fazem nada.Assim que o desenvolvedor identificar a necessidade de uma intervenção nestes pontos, basta criara rotina, dar a ela o nome específico citado na documentação do Advanced Protheus e compilá-la.No momento em que a Rotina Padrão for disparada e passar pela customização do Ponto de Entrada,o mesmo também será executado.Podemos dizer que esta é a maneira mais prática de intervenção aos Programas Padrões do sistemasem a necessidade de alteração dos mesmos, fazendo com que estas implementações passemdespercebidas pelo usuário no momento de sua execução.Porém é necessário que saibamos muito bem sobre a Lógica do Programa em questão e até mesmoqual é a situação de memória utilizada naquele momento.

Exercício 70 � Como Identificar os Nomes dos Pontos de Entradas:

� Desenvolva um �Ponto de Entrada�, para o �Cadastro de Clientes�, sendo que o mesmodispare uma �Mensagem Padrão�, após a �Confirmação do Cadastro�.

1. Através de um �Editor de Textos�, edite o menu do �Módulo de Faturamento� e anoteo �Nome da Função�, utilizada para o �Cadastro de Clientes�;

2. Na seqüência, execute a �Ferramenta � Quark.exe�, que se encontra na pasta�AP7\Rdmake\Quark�;

Page 75: ADVPL AP7

SIGAADVPL Advanced Protheus - 75

Anotações:

3. Acesse a opção �Pontos de Entrada�, pressione as teclas �<Alt> + P�, selecione aopção �Pesquisar por Programa� e informe o �Nome do Programa�, responsável pelo�Cadastro de Clientes�;

4. Assim que o sistema posicionar sobre os �Pontos de Entrada�, disponíveis para essarotina, anote o �Nome do Responsável�, pela execução após a �Inclusão do Cliente�e saia da �Ferramenta � Quark�.

Obs.:� A �Ferramenta � Quark�, utilizada em curso é de uso interno da MICROSIGA e pelosuporte externo, para a utilização deste recurso será necessário acessar o site que contémtodas as informações disponibilizadas para clientes e apoio à �Consultorias� no seguinteendereço: �WWW.MICROSIGA.COM.BR�, acessando o link �Utilidades� + �Quark�;� É importante lembrar que para acessá-lo é necessário o uso do �SenhaP�.

Exercício 71 � Como Criar Pontos de Entrada:

1. Acesse a �Ferramenta � IDE�;

2. Crie o seguinte �Programa�:

#Include "Rwmake.ch"

User Function m030inc()

MsgBox("O Cliente foi cadastrado com sucesso!")

Return

3. Confira os dados e salve o �Programa� na pasta �Rdmake� com o mesmo nome dadoa �Função�, para que fique fácil a sua identificação posteriormente;

4. Compile o �Programa� e saia da �Ferramenta � IDE�.

Exercício 72 � Como Testar Pontos de Entrada:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualização� + �Cadastros� + �Clientes�;

3. Clique na opção �Incluir� e informe os dados a seguir:

Código: 000002Loja: 01Nome: Cliente 02N Fantasia: Cliente 02Tipo: R=RevendedorEndereço: Avenida Braz Leme, 1399Município: São PauloEstado: SP

Page 76: ADVPL AP7

76 - SIGAADVPL Advanced Protheus

Anotações:

4. Confira os dados, confirme o cadastro de �Clientes� e verifique que neste momento o�Ponto de Entrada� será disparado, trazendo a mensagem definida no programa;

5. Cancele o próximo cadastro e saia do �Módulo de Faturamento�.

Exercício 73 � Como criar outro Ponto de Entrada:

� Desenvolva um �Ponto de Entrada�, para o �Cadastro de Clientes�, sendo que o mesmodispare uma �Mensagem Padrão�, após a �Exclusão� de um registro no �Cadastro deClientes�.

1. Execute os procedimentos utilizados no exercício anterior, para identificar o �Nomedo Ponto de Entrada�, que se enquadra nesta customização;

2. Na seqüência, acesse a �Ferramenta � IDE e crie o seguinte programa:

#Include "Rwmake.ch"

User Function m030exc()

MsgBox("O Cliente foi excluido com sucesso!")

Return

3. Confira os dados, salve o programa na pasta �Rdmake�, com o mesmo nome dado a�Função�, para que fique fácil a sua identificação posteriormente;

4. Compile o �Programa� e saia da �Ferramenta � IDE�.

Exercício 74 � Como Testar Pontos de Entradas:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualização� + �Cadastros� + �Clientes�;

3. Posicione com o cursor sobre o �Cliente � 000002�, clique na opção �Excluir� everifique que neste momento o �Ponto de Entrada� será disparado, trazendo amensagem definida no programa;

4. Confira os dados e abandone o �Módulo de Faturamento�.

Exercício 75 � Como Criar outro Ponto de Entrada:

� Desenvolva um �Ponto de Entrada� para o �Cadastro de Produtos�, sendo que nomomento da �Confirmação do Cadastro�, a rotina dispare uma �Atualização dosDados�, para o �Cadastro de Complementos de Produtos�.

1. Execute os procedimentos utilizados no exercício anterior, para identificar o �Nomedo Ponto de Entrada�, que se enquadra nesta customização;

Page 77: ADVPL AP7

SIGAADVPL Advanced Protheus - 77

Anotações:

2. Na seqüência, acesse a �Ferramenta � IDE� e crie o programa a seguir:

#Include "Rwmake.ch"

User Function mt010inc()

Local aArea := GetArea()

If MsgBox("Confirma a Geração do Complemento",�Complemento de Produtos",;

"YESNO")

DbSelectArea("SB5")

If RecLock("SB5",.T.)

SB5->B5_FILIAL := SB1->B1_FILIAL

SB5->B5_COD := SB1->B1_COD

SB5->B5_CEME := SB1->B1_DESC

Else

MsgAlert("Não foi possivel travar o registro!")

EndIf

MsUnLock("SB5")

EndIf

RestArea(aArea)

Return

3. Confira os dados, salve o programa na pasta �Rdmake�, com o mesmo nome dado a�Função�, para que fique fácil a sua identificação posteriormente;

4. Compile o �Programa� e saia da �Ferramenta � IDE�.

Exercício 76 � Como Testar o Ponto de Entrada:

1. Acesse o �Módulo de Faturamento�;

2. Selecione as seguintes opções �Atualização� + �Cadastros� + �Produtos�;

3. Clique na opção �Incluir� e informe os dados a seguir:

Código: 000003Descrição: PRODUTO 3Tipo: PAUnidade: CXArmazém Pad.: 01

4. Confira os dados, confirme o cadastro de �Produtos� e verifique que neste momento o�Ponto de Entrada� será disparado, trazendo a mensagem definida no programa;

Page 78: ADVPL AP7

78 - SIGAADVPL Advanced Protheus

Anotações:

5. Na seqüência, saia do �Cadastro de Produtos�, acesse a opção �Complem. Produtos�e verifique que os �Dados do Produto� cadastrado anteriormente, foram atualizadostambém neste outro arquivo;

6. Saia do �Cadastro de Complemento de Produtos� e do �Módulo de Faturamento�.

O que você aprendeu neste capítulo

Neste capítulo aprendemos a consultar, criar e utilizar os Pontos de Entrada, disponíveis paraCustomizações, onde haja a necessidade de intervenção junto a Funções Padrões do sistema.

Próximo Passo

No próximo capítulo aprenderemos como Criar Funções, para rotinas de processamento.

Page 79: ADVPL AP7

SIGAADVPL Advanced Protheus - 79

Anotações:

PROCESSAMENTO

O que você irá aprender neste capítulo

Neste capítulo, aprenderemos a criar rotinas de Interface com processamentos.

Rotinas Abordadas

� Funções para Processamentos:� Processa().

Processa()

Esta Função é utilizada para criar uma Barra de Progressão, durante a execução de rotinas deprocessamento.

Descrição:Executa Função de Processamento.Sintaxe:Processa(b1).Parâmetros:<b1> = Bloco de Códigos, que define a Função a ser executada.

Exercício 77 � Como Criar Funções, para Processamento:

� Crie uma �Função de Processamento�, que seja executada durante a contagem do�Número de Registros�, existentes no �Arquivo � SX3�.

1. Acesse a �Ferramenta � IDE�;

2. Adicione o �Programa � Exerc25�, que já se encontra na �Pasta � Rdmake� ao�Projeto�;

3. Confira os dados e compile o �Programa�.

14. Adicione-o ao menu do �Modulo Faturamento� e teste.

Page 80: ADVPL AP7

80 - SIGAADVPL Advanced Protheus

Anotações:

O que você aprendeu neste capítulo

Neste capítulo aprendemos a criar Rotinas de Interface, para serem utilizadas junto a Funções deProcessamentos.

Próximo Passo

No próximo capítulo aprenderemos como utilizar os recursos do Utilitário, para Desenhos de Inter-faces.

Page 81: ADVPL AP7

SIGAADVPL Advanced Protheus - 81

Anotações:

DESENHOS DE INTERFACES

O que você irá aprender neste capítulo

Neste capítulo, aprenderemos como utilizar os recursos de Desenhos de Interfaces, utilizado parafacilitar as telas de Entradas de Dados, que trabalham com Objetos (Botões) e Diálogos (Forms).

Rotinas Abordadas

� Desenhos de Interfaces, com utilização de Objetos e Forms;

Desenhos de Interfaces

Esta Ferramenta foi criada com a finalidade de facilitar o Desenvolvimento de Telas, para Entradasde Dados que utilizem Diálogos, Forms e Objetos, dispensando assim a necessidade de customizá-las manualmente através de Fontes Estruturados.

Exercício 78 � Como utilizar o Desenhador de Interfaces (1):

� Crie uma �Tela de Diálogo�, que utilize dois botões, quando o �Botão � Ok� forconfirmado, deverá ser exibido o �Cadastro de Produtos� e o �Botão � Cancelar�,deverá �Encerrar o Programa�.

1. Selecione as seguintes opções �Arquivo� + �Novo Diálogo�;

2. Na �Barra de Objetos Básicos�, clique duas vezes sobre o �Botão � Ok�;

Obs.:Observe que os �Botões�, foram inseridos na �Tela de Diálogo�;3. Alinhe os �Dois Botões�, lateralmente na �Tela de Diálogo� e posicione com o cursor

sobre o �Botão�, denominado �oSBtn2�;

4. Agora, no �Editor de Propriedades�, na �Pasta � Propriedades�, clique no �Campo �nType�, informe �2�, pressione a tecla <Enter> e observe que o �Desenho do Botão�,será alterado;

5. Ainda posicionado com o cursor sobre o �Botão � oSBtn2�, clique na �Pasta � Eventos�,do �Editor de Propriedades�, no �Campo � bAction�, informe �oDlg:End()� e pressionea tecla <Enter>;

Page 82: ADVPL AP7

82 - SIGAADVPL Advanced Protheus

Anotações:

6. Posicione com o cursor sobre o �Botão � oSBtn1�, clique na �Pasta � Eventos�, do�Editor de Propriedades�, no �Campo � bAction�, informe �Mata010()� e pressione atecla <Enter>;

7. Posicione o cursor na �Tela de Diálogo�, clique com o botão direito do mouse eselecione a opção �Gerar Código�;

8. Será gerado automaticamente o �Código-Fonte� da nossa �Tela de Diálogo�;

9. Clique sobre o �Diálogo�, no �Editor de Propriedades�, na pasta �Propriedades�,selecione o �Campo � ICentered�, altere para �.T.� e pressione a tecla <Enter>, para�Centralizar a Tela de Diálogo�, no momento de sua �Execução�;

10. Altere o nome da função para;

User Function Exerc26

11. Selecione as seguintes opções �Arquivo� + �Salvar� e salve o programa na pasta�Rdmake�, localizada do �Diretório Raiz� do �Advanced Protheus�, com o nome de�Exerc26.prw�;

11. Em seguida, salve também o �Fonte do Desenho do Diálogo�, com o nome de�Exerc26.prv�;

12. Adicione o programa �Exerc26.prw� ao �Projeto em Uso� e �Compile-o�.

13. Adicione-o ao menu do �Modulo Faturamento� e teste.

Dicas:� Sempre que criarmos um programa pelo �Desenhador de Telas�, nunca deveremosesquecer de salvar os dois �Fontes� gerados, ou seja, o �Prw� e o �Prv�.� O segundo �Fonte�, trata o �Desenho da Tela�, sendo assim, sempre que se fizernecessário a �Manutenção dos Objetos�, basta abrir o �Arquivo de Tela� e nele alterar ouinserir �Novos Objetos� e em seguida, gerar outro �Programa�, que deverá substituir oanterior que foi compilado.

Exercício 79 � Como utilizar o Desenhador de Interfaces (2):

� Crie uma �Tela de Diálogo�, que utilize dois botões, quando o �Botão � Ok� forconfirmado, deverá ser executada a �Função � Exerc25� e o �Botão � Cancelar�deverá �Encerrar o Programa�.

1. Selecione as seguintes opções �Arquivo� + �Novo Diálogo�;

2. Na �Barra de Objetos Básicos�, clique duas vezes sobre o �Botão � Ok�;

3. Observe que os �Botões�, foram inseridos na �Tela de Diálogo�;

4. Alinhe os �Dois Botões�, lateralmente na �Tela de Diálogo� e posicione com o cursorsobre o �Botão � oSBtn2�;

Page 83: ADVPL AP7

SIGAADVPL Advanced Protheus - 83

Anotações:

5. No �Editor de Propriedades�, na pasta �Propriedades�, clique no �Campo � nType�,informe �2�, pressione a tecla <Enter> e observe que o �Desenho do Botão�, seráalterado;

6. Ainda posicionado com o cursor sobre o �Botão � oSBtn2�, clique na pasta �Eventos�,do �Editor de Propriedades�, no �Campo � bAction�, informe �oDlg:End()� e pressionea tecla <Enter>;

7. Posicione com o cursor sobre o �Botão � oSBtn1�, clique na pasta �Eventos�, do�Editor de Propriedades�, no �Campo � bAction�, informe �u_Exerc25()� e pressionea tecla <Enter>;

8. Posicione o cursor na �Tela de Diálogo�, clique com o botão direito do mouse eselecione a opção �Gerar Código�;

Obs.:Será gerado automaticamente o �Código-Fonte�, da �Tela de Diálogo�;9. Clique sobre o �Diálogo�, no �Editor de Propriedades�, na pasta �Propriedades�,

selecione o �Campo � ICentered�, altere para �.T.� e pressione a tecla <Enter>, para�Centralizar a Tela de Diálogo�, no momento de sua �Execução�;

10. Altere o nome da função para;

User Function Exerc27

11. Selecione as seguintes opções �Arquivo� + �Salvar� e salve o programa na pasta�Rdmake�, localizada do �Diretório Raiz� do �Advanced Protheus�, com o nome de�Exerc27.prw�;

12. Salve também o �Fonte do Desenho do Diálogo�, com o nome de �Exerc27.prv�;

13. Adicione o programa �Exerc27.prw� ao �Projeto em Uso� e �Compile-o�;

14. Adicione-o ao menu do �Modulo Faturamento� e teste.

Exercício 80 � Como utilizar o Desenhador de Interfaces (3):

1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Arquivo + Abrir�;

3. Selecione a pasta �Rdmake�, no �Campo � Arquivos do tipo�, selecione a opção�Arquivos de Código Visual(*.PRV)�;

4. Abra o �Programa � Exerc28�, adicione-o ao �Projeto� em uso, clicando sobre o�Fonte�, com o botão direito do mouse, arrastando-o até o �Projeto�, logo abaixo e�Compile-o�.

Page 84: ADVPL AP7

84 - SIGAADVPL Advanced Protheus

Anotações:

Dica:A única maneira de inserirmos um �Fonte de Tela� ao �Projeto� em uso é seguindo o exemploacima, pois se tentarmos inserí-lo da maneira convencional, o mesmo não será válido parao �Compilador�.

Exercício 81 � Como Testar o Diálogo:

1. Na �Barra de Ferramentas�, ao lado direito da tela, informe o �Nome da FunçãoCompilada�, neste caso �u_Exerc28�;

2. Selecione as seguintes opções �Executar� + �Executar�;

3. Verifique e analise o �Resultado� do exercício, clicando sobre os botões existentesna �Caixa de Diálogo�;

4. Na seqüência, cancele a operação, clicando na opção �Cancelar�.

Exercício 82 � Como utilizar o Desenhador de Interfaces (4):

1. Acesse a �Ferramenta � IDE�;

2. Selecione as seguintes opções �Arquivo� + �Abrir�;

3. Selecione a �Pasta � Rdmake�;

4. No �Campo � Arquivos do Tipo�, selecione a opção �Arquivos de CódigoVisual(*.PRV)�;

5. Abra o �Programa � Exerc29�, adicione-o ao �Projeto� em uso, clicando sobre o�Fonte�, com o botão direito do mouse, arrastando-o até o �Projeto� logo abaixo e�Compile-o�.

Exercício 83 � Como Testar o Diálogo:

1. Na �Barra de Ferramentas�, ao lado direito da tela, informe o �Nome da Função�compilada, neste caso �u_Exerc29�;

2. Selecione as seguintes opções �Executar� + �Executar�;

3. Verifique e analise o �Resultado� do exercício, digitando os �Valores�, para as �Notas1 e 2�, confirmando na sequência;

4. Após o �Teste�, cancele a operação.

Page 85: ADVPL AP7

SIGAADVPL Advanced Protheus - 85

Anotações:

Exercício 84 � Como utilizar o Desenhador de Interfaces (5):

1. Acesse a �Ferramenta � IDE;

2. Selecione as seguintes opções �Arquivo + Abrir�;

3. Selecione a pasta �Rdmake�;

4. No �Campo � Arquivos do tipo�, selecione a opção �Arquivos de Código Visual(*.PRV)�;

5. Abra o �Programa � Exerc30�;

6. Adicione-o ao �Projeto� em uso, clicando sobre o fonte com o botão direito do mouse,arrastando-o até o �Projeto� logo abaixo e �Compile-o�.

Exercício 85 � Como Testar o Diálogo:

1. Na �Barra de Ferramentas�, ao lado direito da tela, informe o �Nome da Função�compilada, neste caso �u_Exerc30�;

2. Selecione as seguintes opções �Executar� + �Executar�;

3. Verifique e analise o �Resultado do Exercício�, seguindo as orientações do programa;

4. Após o �Teste�, cancele a operação.

O que você aprendeu neste capítulo

Neste capítulo, aprendemos a utilizar os recursos do utilitário, para Desenhos de Interface, criandoTelas de Diálogo, com exemplos variados.

Próximo Passo

Esperamos que você tenha conhecido e aprendido melhor sobre os principais recursos da Linguagemde Programação ADVPL.Mantenha esta apostila como roteiro para seu trabalho diário.Se tiver alguma sugestão para melhoria do nosso material, utilize o nosso e-mail:[email protected] satisfação em recebê-la e analisaremos a viabilidade de aplicá-la ao nosso material.Agora, o próximo passo é:Aplicar o conteúdo apresentado à rotina de trabalho de sua empresa!

Page 86: ADVPL AP7

86 - SIGAADVPL Advanced Protheus

Anotações:

Número do Registro:7100110030910 - APL